在机器上禁用su

有没有办法只允许指定的用户su(如使用visudo sudo)。

原因是我想为我的root帐户保留一个简单(弱)的密码,并且可以su / sudo的帐户只能使用pub / private密钥login到本机。

那么,所有其他账户将不能作为根或可以作为一个帐户。

是的,“wheel”组技巧也可以在linux上使用:只需要为它configurationpam,然后只有wheel成员可以运行su。

在Debian上,你必须取消/etc/pam.d/su的轮子注释

这绝对是在任何服务器上首先要做的事情,否则,任何networking服务器/黑客可能导致根攻击。

对于root来说,弱密码是愚蠢的,不pipe“su”是什么。 即使用户“root”只能在受限机房的控制台上login,我也不会允许用户“root”拥有弱密码。

我build议完全禁用'su'并且使用'sudo'来做任何事情。 通过禁用,我的意思是任何:

  • 利用任何系统特定的手段来限制对“su”的访问(比如BSD的“轮子”技巧,或者与Linux相当的技巧)。 请注意,这没有正式的标准。 例如,POSIX不要求“su”的存在。
  • 删除它( rm -f /bin/su )。
  • 删除其执行权限位( chmod ox /bin/suchmod go-x /bin/su )。
  • 删除它的setuid权限位( chmod us /bin/su )。

通过删除或删除许可位来禁用“su”的剩余问题是,某些系统脚本可能依赖于su而存在。 没有一个特别干净的解决scheme – 但它们通常是less之又less的,因为'su'提示input密码和提示在脚本环境中是不被喜欢的。 另一次使用'su'时是'root'运行命令成为另一个用户; 这是通过删除setuid位(root用户可以运行它,但没有人可以这么做有用)支持。 您可以通过删除公共和可能的组执行权限( chmod us,go-rwx /bin/su )来加强这一点。

如果您不使用系统特定的方法之一,请非常小心; 在投入生产之前进行testing。

在FreeBSD上,只有组“wheel”的用户才可以使用su

你在使用哪个操作系统?

如果你的系统使用PAM,那么你可以通过在/etc/pam.d/su类似的东西来正确地禁用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] 

你可以编辑/etc/sudoers文件来控制谁可以使用sudo以及他们可以做什么。 如果你允许程序可以产生一个shell(shell转义),那么用户可以做任何事情。

有关更多详细信息,请参阅sudoersman页。

首先,su和sudo是完全不同的命令。

sudo允许你以一个根(或者指定的不同用户)来执行一个命令,它的行为由/ etc / sudoers控制

su会以root身份运行一个shell(或者如果指定了不同的用户)。

我可以推荐你 – 留下一个强有力的root密码,并把所有需要root权限的用户放在/ etc / sudoers中(请看这篇文章)。

另一个不太推荐的想法是使用su包装脚本。

根据您的机器使用的authentication,您可以编辑/etc/pam.d/su,或者如果您的系统不使用pam,则可以创build一个文件/ etc / suauth,其中包含有权访问su的用户或组的规则作为根。

我只是想重申别人在说什么,我不太清楚你已经把握了什么。 如果您禁止所有用户访问su命令,则即使用户拥有自己的su副本,也不能切换到其他用户帐户。 这是因为su命令需要设置root suid位以允许用户尝试运行命令来更改其UID。 拥有一个非常强大的root密码会更好,为所有用户禁用su命令,并为那些希望拥有root权限的用户提供sudo访问权限。

这听起来像是你害怕有sudo访问权限的人会与其他用户分享他们的密码,并给他们root访问权限,这实际上是一个你无法解决的问题。 特权用户可以随时让他们坐在他们的电脑,如果你有公共/私人密钥设置。 归结起来,只有在您信任该用户时才能授予用户pipe理权限。

是。 chmod su设置为700,然后把所有你想使用它的人放在/ ​​etc / group的根组中。 然而,使用sudo几乎肯定是一个更好的主意。