设置 sudo 密码与登录密码不同

Shâ*_*hắc 34 sudo

作为特权用户,我试图将sudo密码设置为另一个密码,然后是登录时使用的密码。

我做了一些研究,但没有找到答案。请问sudo那种配置的支持?

如果您丢失密码,您将失去一切。有人可以root使用相同的密码登录并提升自己。

sudo有一个选项可以要求输入root密码而不是调用用户密码,( rootpw),但是共享root密码绝对不是一个选项,这就是我们设置sudo.

config 2FA过去做过,效果很好,但也违背了自动化的目的。例如,如果您想使用expect脚本在十几个服务器上执行特权命令,则添加2FA不允许您这样做。

我发现的最接近的解决方案是只允许使用与sudo(登录)密码不同的密钥的 SSH 私钥和设置密码短语。尽管如此,它还是不舒服,因为在紧急情况下,您无法使用没有该密钥的 PC 登录。

der*_*ert 33

如果您想询问 root 密码,而不是用户密码,您可以在/etc/sudoers. rootpw特别是会要求输入 root 密码。有runaspwtargetpw为好; 有关详细信息,请参阅 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
Run Code Online (Sandbox Code Playgroud)

换句话说,默认情况下,它像系统上的其他所有东西一样进行身份验证。您可以更改该@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
Run Code Online (Sandbox Code Playgroud)

您可以使用 eg,pam_userdb.so而不是pam_unix.so,并将您的备用密码存储在 Berkeley DB 数据库中。

例子

我创建了目录/var/local/sudopass,所有者/组root:shadow,模式2750。在其中,我继续使用db5.1_load(这是在 Debian Wheezy 上使用的 Berkeley DB 版本)创建了一个密码数据库文件:

# umask 0027
# db5.1_load -h /var/local/sudopass -t hash -T passwd.db
安东尼
WMaEFvCFEFpl
^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
Run Code Online (Sandbox Code Playgroud)

请注意,pam_userdb.db向传递的数据库添加了扩展名,因此您必须保持.db关闭状态。

根据dannysauer评论中的说法,您可能也需要进行相同的编辑/etc/pam.d/sudo-i

现在,要 sudo,我必须使用password而不是我的真实登录密码:

安东尼@sudotest:~$ sudo -K
anthony@sudotest:~$ sudo echo -e '\nit 工作'
[sudo] 安东尼的密码: passwordRETURN

有效

  • 现代版本的 glibc 上的“古老的 `crypt(3)` 哈希”支持 sha-512,例如。`mkpasswd -m sha-512`。pam_userdb.so 可以很好地处理这些。 (3认同)

Shâ*_*hắc 6

对于 Redhat/Centos,可以通过以下步骤来实现:

创建自定义用户并通过:

# db_load -t hash -T /usr/local/etc/passwd.db
user
pass
^d
Run Code Online (Sandbox Code Playgroud)

编辑 sudo pam.d 文件,使其看起来像:

$ cat /etc/pam.d/sudo

auth            required        pam_userdb.so db=/usr/local/etc/passwd
account         required        pam_userdb.so db=/usr/local/etc/passwd
password        include         system-auth

session         optional        pam_keyinit.so revoke
session         required        pam_limits.so
Run Code Online (Sandbox Code Playgroud)

我仍在寻找配置方式,以便只有某个用户/组必须通过此自定义方法进行身份验证,其他人仍然可以通过正常的系统身份验证方法进行身份验证。谁能给我一些建议?