有没有办法只允许指定用户使用 su(比如使用 visudo 进行 sudo)。
这样做的原因是我想为我的 root 帐户保留一个简单(弱)的密码,并且只有能够使用公共/私钥登录到机器的 su/sudo 帐户。
然后,所有其他帐户将无法以 root 或可以 su 的帐户身份进行 su。
答案1
是的,“wheel”组技巧在 Linux 上也可用:您只需为其配置 pam,然后只有 wheel 成员才能运行 su。
在 Debian 上,你必须取消注释/etc/pam.d/su
这绝对是在任何服务器上要做的第一件事,否则,任何网络服务器/黑客攻击都可能导致根黑客攻击。
答案2
无论对“su”有何控制,为 root 设置弱密码都是愚蠢的行为。即使用户“root”只能在受限制的机房的控制台上登录,我也不会允许用户“root”使用弱密码。
我建议完全禁用“su”,对所有内容都使用“sudo”。禁用是指以下任何一项:
- 利用任何系统特定的方法来限制对“su”的访问(例如 BSD 的组“wheel”技巧,或 Linux 的等效技巧)。请注意,对此没有正式的标准;例如,POSIX 不要求必须使用“su”。
- 去掉它 (
rm -f /bin/su
)。 - 删除其执行权限位(
chmod o-x /bin/su
或chmod go-x /bin/su
)。 - 删除其 setuid 权限位 (
chmod u-s /bin/su
)。
通过删除或删除权限位禁用“su”的剩余问题是某些系统脚本可能依赖于su
存在。没有特别干净的解决方案 - 但它们通常很少见,因为“su”提示输入密码,而提示在脚本环境中是不喜欢的。使用“su”的另一个时间是当“root”运行命令以成为另一个用户时;这可以通过删除 setuid 位来支持(用户 root 可以运行它,但其他人都无法有效地运行它)。您可以通过删除公共和可能的组执行权限来加强这一点(chmod u-s,go-rwx /bin/su
)。
如果您没有使用特定于系统的方法之一,请务必小心;在投入生产之前进行测试。
答案3
如果您的系统使用 PAM,那么您可以su
通过输入类似内容来正确禁用/etc/pam.d/su
:
# This allows root to su without passwords (normal operation)
auth sufficient pam_rootok.so
# Disable all other uses of su
auth requisite pam_deny.so
# [rest of file]
答案4
您可以编辑该/etc/sudoers
文件来控制谁可以使用sudo
以及他们可以做什么。如果您允许可以生成 shell(shell 转义)的程序,那么用户可以做任何事情。
请参阅man
页面了解sudoers
更多详细信息。