2009-09-20 12 views
13

Mi interessa scrivere un modulo PAM che utilizzi un meccanismo di autenticazione popolare per gli accessi Unix. La maggior parte della mia esperienza di programmazione passata è stata in Python e il sistema con cui sto interagendo ha già un'API Python. Ho cercato su Google e ho trovato pam_python, che consente ai moduli PAM di richiamare l'intrepreter python, pertanto è possibile scrivere i moduli PAM essenzialmente in Python.Problemi di sicurezza con un modulo PAM Python?

Tuttavia, ho letto che ci sono rischi per la sicurezza quando si consente a un utente di invocare il codice Python eseguito con un livello di accesso superiore rispetto all'utente stesso, come gli script SUID Python. Queste preoccupazioni sono applicabili anche a un modulo PAM Python?

risposta

17

I problemi di sicurezza che si menzionano non sono di per sé "consentire all'utente di invocare il codice Python" che viene eseguito con livelli di accesso elevati, ma consentendo all'utente di esercitare qualsiasi forma di controllo durante l'esecuzione di tale codice - più ovviamente iniettando o alterando il codice stesso, ma, in modo più sottile, anche controllando l'ambiente di quel processo (e quindi il percorso da cui quel codice importa i moduli, per esempio). (Simili preoccupazioni si applicherebbero con il codice scritto in C se l'utente fosse in grado di controllare il percorso da cui quest'ultimo carica, ad esempio, .so - sebbene il sistema operativo possa aiutare più direttamente con tale preoccupazione).

Mi sembra che pam_python sia ben blindato contro tali rischi e quindi dovrebbe essere tranquillamente utilizzabile per i propri scopi. Tuttavia, fanno notare che the docs punto fuori ...:

moduli di scrittura PAM da Python incorre una grande penalizzazione delle prestazioni e richiede Python da installare, quindi non è l'opzione migliore per la scrittura di moduli che sarà usato ampiamente.

Quindi, se hai ragione che il meccanismo che stai fornendo sarà popolare, probabilmente vorrai codificare il tuo modulo in C per evitare questi problemi. Tuttavia, la sua prototipazione in Python come prova di concetto con distribuzione limitata, prima di potenziarla in C, è una strategia praticabile.

Problemi correlati