在 中/etc/ssh/sshd_config
,PAM 在 Debian 10 上默认启用:
UsePAM yes
在我不想允许使用密码或 kerberos 登录,而只想允许 SSH 密钥身份验证的情况下,PAM
在 sshd 中启用它还有什么优势吗?或者,如果UsePAM
设置为“否”,它会简化流程并可能使其更安全吗?
在 sshd 中禁用 PAM 会产生什么实际影响?我会注意到有什么不同吗?
答案1
与手册页(和另一个答案)声称的相反,UsePAM yes
不仅允许您以非 root 用户身份运行 sshd,但也允许以非 root 用户身份运行 sshd 来执行密码认证(对于运行它的同一用户)通过 setuid/sbin/unix_chkpwd
程序。
后者是相当出乎意料的。
user$ /usr/sbin/sshd -f /dev/null -p 9009 -h ~/.ssh/id_rsa
user$ /usr/sbin/sshd -f /dev/null -o UsePAM=yes -p 7007 -h ~/.ssh/id_rsa
user$ ssh -p 7007 localhost
The authenticity of host '[localhost]:7007 ([::1]:7007)' can't be established.
...
Password: <correct password>
Linux deb11 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64
...
user$ <I'm logged in!>
user$ ^D
Connection to localhost closed.
user$ ssh -p 9009 localhost
The authenticity of host '[localhost]:9009 ([::1]:9009)' can't be established.
...
user@localhost's password:
Permission denied, please try again.
user@localhost's password:
Permission denied, please try again.
user@localhost's password:
user@localhost: Permission denied (publickey,password,keyboard-interactive).
user$
答案2
答案3
为此我研究了 OpenSSH 的来源。
auth-pam.c
根据我在第 378-382 行中找到的注释,使用 UsePAM 似乎可能会间接或直接泄漏您的环境(链接在这里):
/*
* XXX this possibly leaks env because it is not documented
* what pam_putenv() does with it. Does it copy it? Does it
* take ownweship? We don't know, so it's safest just to leak.
*/
同样在相同的源代码中我发现了这个有趣的内容:
/*
* Some silly PAM modules (e.g. pam_time) require a TTY to operate.
* sshd doesn't set the tty until too late in the auth process and
* may not even set one (for tty-less connections)
*/
似乎还通过第 1351 行上的 PAM 尝试进行密码身份验证,并且在此代码中使用了反计时攻击缓解措施。
由于它是在 if 子句中定义的,因此所有这些auth-pam.c
代码都不会被执行,因此如果您的安全设置允许,我将设置为 no。
所以我认为我宁愿将其设置为“否”,并且不再为此失眠。
其他意见
还有这样的观点:https://askubuntu.com/questions/1259848/
如果您的设置设置不当,SSH 公钥身份验证可能会失败: https://serverfault.com/questions/475880
我还建议阅读本节末尾的结论Configuring accounts
: