10.3. 使非特权用户运行某些命令

作为管理员,您可以通过在 /etc/sudoers.d/ 目录中配置策略来允许非特权用户在特定工作站上输入某些命令。

先决条件

  • 有对系统的 root 访问权限。

流程

  1. 以 root 用户身份,在 /etc/ 下创建一个新的 sudoers.d 目录:

    # mkdir -p /etc/sudoers.d/
  2. /etc/sudoers.d 目录中创建一个新文件:

    # visudo -f /etc/sudoers.d/<filename>

    文件会自动打开。

  3. /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> 替换为命令的完整的绝对路径。您还可以通过在命令路径后面添加这些选项,将用户限制为仅使用特定的选项和参数执行命令。如果没有指定任何选项,用户可以使用带有所有选项的命令。
    • 要在同一主机上的一行上允许两个和多个命令,您可以使用逗号后跟空格进行分割,来列出它们。

      例如,要允许 user1host1.example.com 上执行 dnfreboot 命令,请输入 user1 host1.example.com = /bin/dnf, /sbin/reboot

  4. 可选:要在用户每次尝试使用 sudo 权限时收到电子邮件通知,请在文件中添加以下行:

    Defaults    mail_always
    Defaults    mailto="<email@example.com>"
  5. 保存更改,退出编辑器。

验证

  1. 要验证用户是否可以使用 sudo 特权运行命令,请切换帐户:

    # su <username> -
  2. 以用户身份,使用 sudo 命令输入命令:

    $ sudo <command>
    [sudo] password for <username>:

    输入用户的 sudo 密码。

  3. 如果正确配置了特权,系统会显示命令和选项的列表。例如,使用 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) 手册页