su命令是一个特殊的Linux 命令,它允许你以另一个用户和组的身份运行命令。此外,su命令还允许切换到root帐户(如果不带任何参数运行)或另一个指定的用户帐户。
默认情况下,所有用户都可以访问su命令。但作为系统管理员,你可以使用sudoers文件禁用用户或用户组的su访问权限。
众所周知,sudoers文件驱动sudo安全策略插件,该插件确定用户的sudo权限。sudo命令允许用户以另一个用户的安全权限运行程序(默认情况下,作为root用户)。
如果想要切换到另一个用户帐户,用户可以从他们当前的登录会话中运行su命令,命令如下,在此示例中,用户aaronk正在切换到testuser帐户,这时系统将提示用户aaronk输入testuser 帐户的密码:
$ su testuser
要切换到root帐户,用户必须具有root密码或有权调用sudo命令。换句话说,用户必须存在于sudoers文件中。在此示例中,用户aaronk(一个sudo用户)正在切换到root帐户。
调用sudo命令后,系统会提示用户aaronk输入密码,如果密码有效,则授予用户以root身份访问shell的权限:
$ sudo su
如何禁用Sudo用户的su访问?
要禁用sudo用户(例如上面的aaronk用户)的su访问权限,首先,备份位于/etc/sudoers的原始sudoers文件,命令如下所示:
$ sudo cp /etc/sudoers /etc/sudoers.bak
然后使用以下命令打开sudoers文件。请注意,不建议手动编辑sudoers文件,建议使用visudo命令:
$ sudo visudo
在别名命令部分下,创建以下别名:
Cmnd_Alias DISABLE_SU = /bin/su
然后在文件末尾添加以下行,注意,可以将用户名aaronk替换为你希望禁用su访问权限的用户:
aaronk ALL=(ALL) NOPASSWD: ALL, !DISABLE_SU
保存文件并关闭它。
然后测试以验证设置是否正常运行,系统应返回如下错误消息:“Sorry, user aaronk is not allowed to execute ‘/bin/su’ as root on tecmint.”。
$ sudo s
为一组Sudo用户禁用su访问
当然,你还可以禁用一组sudo用户的su访问权限。例如,要禁用组admin中所有用户的su访问权限,请修改以下行:
%admin ALL=(ALL) ALL
替换成:
%admin ALL=(ALL) ALL, !DISABLE_SU
保存文件并关闭它。
要将用户添加到管理员组,请运行usermod命令(将用户名替换为实际用户):
$ sudo usermod -aG admin username
最后,如果想了解su、sudo和sudoers有关更多信息,可以查看帮助手册页:
$ man su $ man sudo $ man sudeors