Se vuoi richiedere la password di root, al contrario della password dell'utente, ci sono opzioni che puoi inserire /etc/sudoers
. rootpw
in particolare lo farà richiedere la password di root. C'è runaspw
e targetpw
pure; vedere la manpage sudoers (5) per i dettagli.
A parte questo, sudo fa la sua autenticazione (come tutto il resto) tramite PAM. PAM supporta la configurazione per applicazione. La configurazione di Sudo è in (almeno sul mio sistema Debian) /etc/pam.d/sudo
, e si presenta così:
$ cat sudo
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
In altre parole, per impostazione predefinita, si autentica come qualsiasi altra cosa sul sistema. Puoi cambiare quella @include common-auth
linea e fare in modo che PAM (e quindi sudo) utilizzi una fonte di password alternativa. Le righe non commentate in common-auth hanno un aspetto simile (per impostazione predefinita, questo sarà diverso se si utilizza ad esempio LDAP):
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
È possibile utilizzare, ad esempio, pam_userdb.so
anziché pam_unix.so
e archiviare le password alternative in un database Berkeley DB.
esempio
Ho creato la directory /var/local/sudopass
, il proprietario / il gruppo root:shadow
, la modalità 2750
. Al suo interno, sono andato avanti e ho creato un file di database delle password usando db5.1_load
(che è la versione di Berkeley DB in uso su Debian Wheezy):
# umask 0027
# db5.1_load -h / var / local / sudopass -t hash -T passwd.db
anthony
WMaEFvCFEFplI
^D
Questo hash è stato generato con mkpasswd -m des
, usando la password "password". Molto altamente sicuro! (Sfortunatamente, pam_userdb sembra non supportare niente di meglio dell'antico crypt(3)
hashing).
Ora, modifica /etc/pam.d/sudo
e rimuovi la @include common-auth
linea e mettila invece a posto:
auth [success=1 default=ignore] pam_userdb.so crypt=crypt db=/var/local/sudopass/passwd
auth requisite pam_deny.so
auth required pam_permit.so
Si noti che pam_userdb aggiunge .db
un'estensione al database passato, quindi è necessario lasciarlo .db
spento.
Secondo dannysauer in un commento , potrebbe essere necessario apportare anche la stessa modifica /etc/pam.d/sudo-i
.
Ora, per sudo, devo usare al password
posto della mia vera password di accesso:
anthony @ sudotest: ~ $ sudo -K
anthony @ sudotest: ~ $ sudo echo -e '\ nit ha funzionato'
[sudo] password per anthony: passwordRETURN
ha funzionato