Jika Anda ingin meminta kata sandi root, dan bukan kata sandi pengguna, ada beberapa opsi yang bisa Anda masukkan /etc/sudoers. rootpwkhususnya akan membuatnya meminta kata sandi root. Ada runaspwdan targetpwjuga; lihat manual sudoers (5) untuk detailnya.
Selain itu, sudo melakukan otentikasi (seperti yang lainnya) melalui PAM. PAM mendukung konfigurasi per aplikasi. Konfigurasi Sudo ada di (setidaknya di sistem Debian saya) /etc/pam.d/sudo, dan terlihat seperti ini:
$ cat sudo
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
Dengan kata lain, secara default, ini mengotentikasi seperti yang lainnya pada sistem. Anda dapat mengubah @include common-authbaris itu, dan meminta PAM (dan dengan demikian sudo) menggunakan sumber kata sandi alternatif. Baris yang tidak dikomentari pada common-auth terlihat seperti (secara default, ini akan berbeda jika Anda menggunakan misalnya, LDAP):
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
Anda dapat menggunakan misalnya, pam_userdb.soalih-alih pam_unix.so, dan menyimpan kata sandi alternatif di basis data Berkeley DB.
contoh
Saya membuat direktori /var/local/sudopass, pemilik / grup root:shadow, mode 2750. Di dalamnya, saya melanjutkan dan membuat file basis data kata sandi menggunakan db5.1_load(yang merupakan versi Berkeley DB yang digunakan di Debian Wheezy):
# umask 0027
# db5.1_load -h / var / local / sudopass -t hash -T passwd.db
anthony
WMaEFvCFEFplI
^D
Hash yang dihasilkan dengan mkpasswd -m desmenggunakan kata sandi "kata sandi" Sangat sangat aman! (Sayangnya, pam_userdb tampaknya tidak mendukung sesuatu yang lebih baik daripada crypt(3)hashing kuno ).
Sekarang, edit /etc/pam.d/sudodan hapus @include common-authbaris, dan alih-alih letakkan ini di tempatnya:
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
Perhatikan bahwa pam_userdb menambahkan .dbekstensi ke database yang diteruskan, jadi Anda harus .dbmematikannya.
Menurut dannysauer dalam komentar , Anda mungkin perlu melakukan pengeditan yang sama /etc/pam.d/sudo-ijuga.
Sekarang, untuk sudo, saya harus menggunakan passwordkata sandi login asli saya:
anthony @ sudotest: ~ $ sudo -K
anthony @ sudotest: ~ $ sudo echo -e '\ nit worked'
[sudo] kata sandi untuk anthony: passwordRETURN
itu berhasil