Crea un nuovo account chiamato test
:
$ sudo useradd test
test
non ha una password in questo momento. Quindi
$ su test
non funziona. Se provi, ti viene chiesto un test
la password. Non ne ha uno. Non è la stessa cosa che la sua password è vuota, quindi se inserisci una password vuota premendo invio, viene visualizzato il messaggio "su:Authentication Failure".
Lo stesso vale se passi a un tty e provi ad accedere come test
:Una password vuota non è accettata.
Ora assegna test
una password vuota:
$ sudo passwd -d test
Ora puoi accedere come test
su un tty fornendo la stringa vuota come password. Tuttavia, se ci provi
$ su test
ancora una volta, ricevi ancora il messaggio "su:Authentication Failure" la sessione non passa all'utente test
.
Perché è questo?
Risposta accettata:
Dall'output di ldd /bin/su
, il su
binary è compilato con pam
librerie (libpam*
), quindi l'autenticazione, la gestione dell'account, l'avvio della sessione ecc. saranno gestiti da pam
.
Quello che segue è come su
di un tipico sistema Ubuntu è gestito da pam
, dovresti trovare un approccio simile se stai usando un'altra distribuzione.
Il pam
regole per su
sono definiti nel file /etc/pam.d/su
. Questo file include anche common-auth
, common-passwd
, common-session
file dalla stessa directory dei modelli comuni per coprire le attività suggerite dal loro nome (e utilizzati in altri pam
servizi abilitati).
Sul mio sistema, in fondo a /etc/pam.d/su
ho:
@include common-auth
@include common-account
@include common-session
Le righe precedenti non riguardano il controllo della password nulla, è principalmente il lavoro di pam_unix
modulo.
Ora /etc/pam.d/common-auth
ha:
auth [success=1 default=ignore] pam_unix.so nullok_secure
Da man pam_unix
:
nullo
L'azione predefinita di questo modulo è di non consentire all'utente l'accesso a un servizio se la sua password ufficiale è vuota. L'argomento nullok sovrascrive questo valore predefinito e consente a qualsiasi utente con una
password vuota di accedere al servizio.
nullok_secure
L'azione predefinita di questo modulo è di non consentire all'utente l'accesso a un servizio se la sua password ufficiale è vuota. L'argomento nullok_secure sovrascrive questa impostazione predefinita e consente a qualsiasi utente
con una password vuota di accedere al servizio purché il valore di PAM_TTY sia impostato su uno dei valori trovati in /etc/securetty.
come puoi vedere se il nullok_secure
l'opzione è impostata, a meno che la variabile di ambiente PAM_TTY
è impostato nel modo indicato, l'utente con password nulla non potrà accedere utilizzando su
.
Quindi per consentire a qualsiasi utente con password nulla di fare su
, devi avere il nullok
argomento al pam_unix
modulo:
auth [success=1 default=ignore] pam_unix.so nullok
questo non è sicuro in quanto common-auth
file è utilizzato da molti altri servizi, anche solo per su
questo non dovrebbe essere fatto. (Per motivi di test puoi impostarlo una volta e poi tornare all'originale. Anche se se vuoi fare il test, è meglio incorporare tutte le logiche in /etc/pam.d/su
file, e modificare le modifiche in seguito piuttosto che scherzare con qualsiasi common-*
file)