8.3. 使非特权用户运行某些命令
作为管理员,您可以通过在 /etc/sudoers.d/ 目录中配置策略来允许非特权用户在特定工作站上输入某些命令。这比为用户授予完全 sudo 访问权限或授予 root 密码更加安全,理由如下:
- 对特权操作进行更精细的控制。您可以允许用户对特定主机执行某些操作,而不是向他们提供完整的管理访问权限。
-
更好的日志记录.当用户通过
sudo执行操作时,该操作将使用其用户名而非 root 记录。 -
透明控制。当用户试图使用
sudo权限时,您可以为用户设置电子邮件通知。
先决条件
- 有对系统的 root 访问权限。
流程
在
/etc/sudoers.d目录中创建一个新文件:visudo -f /etc/sudoers.d/<filename>
# visudo -f /etc/sudoers.d/<filename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 文件会在编辑器中自动打开。
在
/etc/sudoers.d/<filename>文件中添加以下行:<username> <hostname.example.com> = (<run_as_user>:<run_as_group>) <path/to/command>
<username> <hostname.example.com> = (<run_as_user>:<run_as_group>) <path/to/command>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
将
<username>替换为用户名称。 -
将
<hostname.example.com>替换为主机的 URL。 -
将
(<run_as_user > : <run_as_group>)替换为可执行命令的用户或组。如果省略这部分,<username>可以以 root 用户身份执行命令。 -
将
<path/to/command>替换为命令的完整的绝对路径。您还可以通过在命令路径后面添加这些选项,将用户限制为仅使用特定的选项和参数执行命令。如果没有指定任何选项,用户可以使用带有所有选项的命令。 - 要在同一主机上的一行上允许两个和多个命令,您可以使用逗号后跟空格进行分割,来列出它们。
-
将
例如,要允许 user1 在 host1.example.com 上执行 dnf 和 reboot 命令,请输入:
user1 host1.example.com = /bin/dnf, /sbin/reboot
user1 host1.example.com = /bin/dnf, /sbin/reboot
可选:要在每次尝试使用
sudo权限时收到电子邮件通知,请在文件中添加以下行:Defaults mail_always Defaults mailto="<email@example.com>"
Defaults mail_always Defaults mailto="<email@example.com>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存更改,退出编辑器。
验证
要验证用户是否可以使用
sudo特权运行命令,请切换帐户:su <username> -
# su <username> -Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以用户身份,使用
sudo命令输入命令:sudo whoami
$ sudo whoami [sudo] password for <username>:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入用户的
sudo密码。如果正确配置了特权,sudo 以配置的用户身份执行命令。例如,使用
dnf命令,它显示以下输出:... usage: dnf [options] COMMAND ...
... usage: dnf [options] COMMAND ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果系统返回以下出错信息,用户不允许使用 sudo 运行命令。
<username> is not in the sudoers file. This incident will be reported.
<username> is not in the sudoers file. This incident will be reported.
+ 如果系统返回以下出错信息,其配置未正确完成。
<username> is not allowed to run sudo on <host.example.com>.
<username> is not allowed to run sudo on <host.example.com>.
+ 如果系统返回以下出错信息,则在用户的规则中没有正确定义该命令。
`Sorry, user _<username>_ is not allowed to execute '_<path/to/command>_' as root on _<host.example.com>_.`
`Sorry, user _<username>_ is not allowed to execute '_<path/to/command>_' as root on _<host.example.com>_.`