如果您想要输入root密码(而不是用户密码),则可以输入一些选项/etc/sudoers。rootpw特别是会要求它输入root密码。有runaspw和targetpw为好; 有关详细信息,请参见sudoers(5)联机帮助页。
除此之外,sudo通过PAM进行身份验证(就像其他所有操作一样)。PAM支持按应用程序配置。Sudo的配置位于(至少在我的Debian系统上)/etc/pam.d/sudo,如下所示:
$ cat sudo
#%PAM-1.0
@include common-auth
@include common-account
@include common-session-noninteractive
换句话说,默认情况下,它像系统上的所有其他内容一样进行身份验证。您可以更改该@include common-auth行,并让PAM(从而使用sudo)使用备用密码源。common-auth中未注释掉的行看起来像(默认情况下,如果使用的是LDAP,这将是不同的):
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth requisite pam_deny.so
auth required pam_permit.so
您可以使用例如pam_userdb.so而不是pam_unix.so,并将您的备用密码存储在Berkeley DB数据库中。
例
我创建了目录/var/local/sudopassowner / group root:shadow,mode 2750。在其中,我继续使用创建了一个密码数据库文件db5.1_load(这是Debian Wheezy上使用的Berkeley DB版本):
#umask 0027
#db5.1_load -h / var / local / sudopass -t哈希-T passwd.db
安东尼
WMAEFvCFEFplI
^D
该哈希是mkpasswd -m des使用密码“ password”生成的。高度安全!(不幸的是,pam_userdb似乎不支持比古代crypt(3)哈希更好的任何东西)。
现在,编辑/etc/pam.d/sudo并删除该@include common-auth行,而是将其放置在适当的位置:
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
请注意,pam_userdb将.db扩展名添加到传递的数据库中,因此必须将其保留.db。
据dannysauer的评论,你可能需要作出同样的编辑/etc/pam.d/sudo-i为好。
现在,要使用sudo,我必须使用password真实的登录密码代替:
anthony @ sudotest:〜$ sudo -K
anthony @ sudotest:〜$ sudo echo -e'\ nit正常工作'
安东尼的[sudo]密码: passwordRETURN
有效