Se vuoi richiedere la password di root, al contrario della password dell'utente, ci sono opzioni che puoi inserire /etc/sudoers. rootpwin particolare lo farà richiedere la password di root. C'è runaspwe targetpwpure; 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-authlinea 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.soanziché pam_unix.soe 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/sudoe rimuovi la @include common-authlinea 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 .dbun'estensione al database passato, quindi è necessario lasciarlo .dbspento.
Secondo dannysauer in un commento , potrebbe essere necessario apportare anche la stessa modifica /etc/pam.d/sudo-i.
Ora, per sudo, devo usare al passwordposto 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