10.3. 使非特权用户运行某些命令
作为管理员,您可以通过在 /etc/sudoers.d/
目录中配置策略来允许非特权用户在特定工作站上输入某些命令。这比为用户授予完全 sudo
访问权限或授予 root 密码更加安全,理由如下:
- 对特权操作进行更精细的控制。您可以允许用户对特定主机执行某些操作,而不是向他们提供完整的管理访问权限。
-
更好的日志记录.当用户通过
sudo
执行操作时,该操作将使用其用户名而非 root 记录。 -
透明控制。当用户试图使用
sudo
权限时,您可以为用户设置电子邮件通知。
先决条件
- 有对系统的 root 访问权限。
流程
以 root 用户身份,在
/etc/
下创建一个新的sudoers.d
目录:# mkdir -p /etc/sudoers.d/
在
/etc/sudoers.d
目录中创建一个新文件:# visudo -f /etc/sudoers.d/<filename>
文件会自动打开。
在
/etc/sudoers.d/<filename>
文件中添加以下行:<username> <hostname.example.com> = (<run_as_user>:<run_as_group>) <path/to/command>
-
将
<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
。
-
将
可选:要在用户每次尝试使用
sudo
权限时收到电子邮件通知,请在文件中添加以下行:Defaults mail_always Defaults mailto="<email@example.com>"
- 保存更改,退出编辑器。
验证
要验证用户是否可以使用
sudo
特权运行命令,请切换帐户:# su <username> -
以用户身份,使用
sudo
命令输入命令:$ sudo <command> [sudo] password for
<username>
:输入用户的
sudo
密码。如果正确配置了特权,系统会显示命令和选项的列表。例如,使用
dnf
命令,它显示以下输出:... usage: dnf [options] COMMAND ...
如果系统返回错误信息
<username> is not in the sudoers file。此事件会被报告
,the file for<username>
in/etc/sudoers.d/
does not exist。如果系统返回错误消息
<username> is not allowed to run sudo on <host.example.com>
,则配置没有被正确完成。确保您已以 root 身份登录,并且配置被正确执行。如果系统返回错误消息
Sorry, user <username> is not allowed to execute '<path/to/command>' as root on <host.example.com>.
,则命令没有在用户的规则中被正确定义。
其他资源
-
sudo(8)
、visudo (8)
和sudoers (5)
手册页