Jeśli chcesz poprosić o hasło roota, w przeciwieństwie do hasła użytkownika, masz do wyboru opcje /etc/sudoers
. rootpw
w szczególności sprawi, że poprosi o hasło roota. Jest runaspw
i targetpw
również; zobacz szczegóły na stronie sudoers (5).
Poza tym sudo wykonuje uwierzytelnianie (podobnie jak wszystko inne) za pośrednictwem PAM. PAM obsługuje konfigurację dla poszczególnych aplikacji. Konfiguracja Sudo jest już uruchomiona (przynajmniej w moim systemie Debian) /etc/pam.d/sudo
i wygląda następująco:
$ cat sudo
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
Innymi słowy, domyślnie uwierzytelnia się jak wszystko inne w systemie. Możesz zmienić tę @include common-auth
linię i poprosić PAM (a tym samym sudo) o użycie alternatywnego źródła hasła. Nieskomentowane wiersze we wspólnym auth wyglądają mniej więcej tak (domyślnie będzie inaczej, jeśli używasz np. LDAP):
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
Możesz użyć np. pam_userdb.so
Zamiast pam_unix.so
i przechowywać alternatywne hasła w bazie danych Berkeley DB.
przykład
Utworzyłem katalog /var/local/sudopass
, właściciela / grupę root:shadow
, tryb 2750
. Wewnątrz utworzyłem plik bazy danych haseł, używając db5.1_load
(która jest wersją Berkeley DB używaną w Debian Wheezy):
# umask 0027
# db5.1_load -h / var / local / sudopass -t hash -T passwd.db
Anthony
WMaEFvCFEFplI
^D
Ten skrót został wygenerowany przy mkpasswd -m des
użyciu hasła „hasło”. Bardzo bardzo bezpieczny! (Niestety pam_userdb wydaje się nie obsługiwać niczego lepszego niż starożytny crypt(3)
skrót).
Teraz edytuj /etc/pam.d/sudo
i usuń @include common-auth
linię, a zamiast tego umieść to w miejscu:
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
Pamiętaj, że pam_userdb dodaje .db
rozszerzenie do przekazywanej bazy danych, więc musisz ją .db
wyłączyć.
Według dannysauer w komentarzu może być konieczne wykonanie tej samej edycji /etc/pam.d/sudo-i
.
Teraz do sudo muszę użyć password
prawdziwego hasła logowania:
anthony @ sudotest: ~ $ sudo -K
anthony @ sudotest: ~ $ sudo echo -e '\ nit pracował'
[sudo] hasło do Anthony: passwordRETURN
zadziałało