Nếu bạn muốn hỏi mật khẩu gốc, trái ngược với mật khẩu của người dùng, có những tùy chọn mà bạn có thể đặt vào /etc/sudoers. rootpwđặc biệt sẽ làm cho nó yêu cầu mật khẩu root. Có runaspwvà targetpwlà tốt; xem trang chủ sudoers (5) để biết chi tiết.
Ngoài ra, sudo thực hiện xác thực (như mọi thứ khác) thông qua PAM. PAM hỗ trợ cấu hình trên mỗi ứng dụng. Cấu hình của Sudo nằm trong (ít nhất là trên hệ thống Debian của tôi) /etc/pam.d/sudovà trông như thế này:
$ cat sudo
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
Nói cách khác, theo mặc định, nó xác thực như mọi thứ khác trên hệ thống. Bạn có thể thay đổi @include common-authdòng đó và để PAM (và do đó sudo) sử dụng nguồn mật khẩu thay thế. Các dòng không nhận xét trong chung-auth trông giống như (theo mặc định, điều này sẽ khác nếu bạn đang sử dụng, ví dụ: LDAP):
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
Bạn có thể sử dụng, ví dụ, pam_userdb.sothay vì pam_unix.sovà lưu trữ mật khẩu thay thế của mình trong cơ sở dữ liệu Berkeley DB.
thí dụ
Tôi đã tạo thư mục /var/local/sudopass, chủ sở hữu / nhóm root:shadow, chế độ 2750. Trong đó, tôi đã tiếp tục và tạo một tệp cơ sở dữ liệu mật khẩu bằng cách sử dụng db5.1_load(đó là phiên bản của Berkeley DB được sử dụng trên Debian Wheezy):
# ô 0027
# db5.1_load -h / var / local / sudopass -t hash -T passwd.db
anthony
WMaEFvCFEFplI
^D
Băm đó được tạo bằng mkpasswd -m des, sử dụng mật khẩu "mật khẩu". Rất an toàn! (Thật không may, pam_userdb dường như không hỗ trợ bất cứ điều gì tốt hơn so với crypt(3)băm cổ ).
Bây giờ, chỉnh sửa /etc/pam.d/sudovà xóa @include common-authdòng, và thay vào đó đặt nó vào vị trí:
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
Lưu ý rằng pam_userdb thêm .dbtiện ích mở rộng vào cơ sở dữ liệu đã qua, vì vậy bạn phải .dbtắt.
Theo dannysauer trong một bình luận , bạn có thể cần phải thực hiện chỉnh sửa tương tự /etc/pam.d/sudo-i.
Bây giờ, để sudo, tôi phải sử dụng passwordthay vì mật khẩu đăng nhập thực sự của mình:
anthony @ sudotest: ~ $ sudo -K
anthony @ sudotest: ~ $ sudo echo -e '\ nit đã làm việc'
[sudo] mật khẩu cho anthony: passwordRETURN
nó đã làm việc