sudo(4)alias

在 Linux 的 /etc/sudoers 文件中,User_AliasRunas_AliasHost_AliasCmnd_Alias 是用于定义别名的工具。通过这些别名,可以更方便地管理复杂的权限规则,提高配置的可读性和可维护性


1. User_Alias(用户别名)

  • 作用:定义一组用户的别名,方便在规则中引用。
  • 语法
    User_Alias 别名 = 用户1, 用户2, 用户3, …
  • 说明
    • 别名 是自定义的名称,通常使用大写字母。
    • 用户可以是用户名、用户组(用 %组名 表示)或另一个 User_Alias
  • 示例
    User_Alias ADMINS = alice, bob, %wheel
    • 定义了一个名为 ADMINS 的别名,包括用户 alicebobwheel 组的所有成员。
    • 在规则中使用:
      ADMINS ALL=(ALL) ALL
      表示 alicebobwheel 组用户可以在任何主机上以任何身份运行所有命令。

2. Runas_Alias(运行身份别名)

  • 作用:定义一组目标用户(运行命令时的身份)的别名。
  • 语法
    Runas_Alias 别名 = 用户1, 用户2, 用户3, …
  • 说明
    • 指定 sudo 命令可以以哪些用户身份执行(对应规则中的 ( ) 部分)。
    • 常用于限制用户只能以特定身份运行命令。
  • 示例
    Runas_Alias WEBSERVERS = www-data, nginx
    • 定义了一个名为 WEBSERVERS 的别名,包括 www-datanginx 用户。
    • 在规则中使用:
      alice ALL=(WEBSERVERS) ALL
      表示 alice 可以在任何主机上以 www-datanginx 身份运行所有命令,例如:
      sudo -u www-data ls

3. Host_Alias(主机别名)

  • 作用:定义一组主机的别名,用于指定规则适用的主机范围。
  • 语法
    Host_Alias 别名 = 主机1, 主机2, 主机3, …
  • 说明
    • 主机可以是主机名、IP 地址或通配符。
    • 在多服务器环境中特别有用。
  • 示例
    Host_Alias SERVERS = web1.example.com, 192.168.1.10, dbserver
    • 定义了一个名为 SERVERS 的别名,包括三台主机。
    • 在规则中使用:
      alice SERVERS=(ALL) ALL
      表示 aliceweb1.example.com192.168.1.10dbserver 上可以以任何身份运行所有命令。

4. Cmnd_Alias(命令别名)

  • 作用:定义一组命令的别名,方便在规则中指定允许或禁止的命令。
  • 语法
    Cmnd_Alias 别名 = 命令1, 命令2, 命令3, …
  • 说明
    • 命令必须是完整路径(如 /bin/ls),也可以使用通配符。
    • 可以简化规则,避免重复列出多个命令。
  • 示例
    Cmnd_Alias SYSCMDS = /bin/ls, /bin/cat, /usr/sbin/reboot
    • 定义了一个名为 SYSCMDS 的别名,包括 lscatreboot 命令。
    • 在规则中使用:
      alice ALL=(ALL) SYSCMDS
      表示 alice 可以在任何主机上以任何身份运行 lscatreboot

综合示例

假设你需要配置一组管理员在一组服务器上管理 Web 服务,/etc/sudoers 文件可以这样写:

# 定义用户别名
User_Alias ADMINS = alice, bob, %ops

# 定义运行身份别名
Runas_Alias WEBSERVERS = www-data, nginx

# 定义主机别名
Host_Alias SERVERS = web1, web2, 192.168.1.100

# 定义命令别名
Cmnd_Alias WEBCMDS = /usr/sbin/nginx, /bin/systemctl restart nginx, /bin/cat /var/log/nginx/*

# 规则
ADMINS SERVERS=(WEBSERVERS) NOPASSWD: WEBCMDS

含义:

  • alicebobops 组用户(ADMINS)。
  • 在哪里web1web2192.168.1.100SERVERS)。
  • 以谁的身份www-datanginxWEBSERVERS)。
  • 做什么:运行 /usr/sbin/nginx、重启 Nginx 服务、查看 Nginx 日志(WEBCMDS)。
  • 条件:无需密码(NOPASSWD)。

用户体验:

  • aliceweb1 上运行:
    sudo -u nginx /usr/sbin/nginx -t
    无需密码即可测试 Nginx 配置。

  • 如果尝试运行未授权的命令(如 sudo reboot),会失败。


注意事项

  1. 大小写:别名通常使用大写字母,便于区分
  2. 路径Cmnd_Alias 中的命令必须是完整路径,否则可能导致权限绕过。
  3. 编辑工具:始终使用 sudo visudo 编辑 /etc/sudoers,以确保语法正确。
  4. 灵活性与安全性:别名提高了配置的灵活性,但要避免过于宽松的权限(如 ALL 的滥用)。