sudo(4)alias
在 Linux 的 /etc/sudoers
文件中,User_Alias
、Runas_Alias
、Host_Alias
和 Cmnd_Alias
是用于定义别名的工具。通过这些别名,可以更方便地管理复杂的权限规则,提高配置的可读性和可维护性。
1. User_Alias
(用户别名)
- 作用:定义一组用户的别名,方便在规则中引用。
- 语法:
User_Alias 别名 = 用户1, 用户2, 用户3, … - 说明:
别名
是自定义的名称,通常使用大写字母。- 用户可以是用户名、用户组(用
%组名
表示)或另一个User_Alias
。
- 示例:
User_Alias ADMINS = alice, bob, %wheel- 定义了一个名为
ADMINS
的别名,包括用户alice
、bob
和wheel
组的所有成员。 - 在规则中使用:
ADMINS ALL=(ALL) ALL
表示alice
、bob
和wheel
组用户可以在任何主机上以任何身份运行所有命令。
- 定义了一个名为
2. Runas_Alias
(运行身份别名)
- 作用:定义一组目标用户(运行命令时的身份)的别名。
- 语法:
Runas_Alias 别名 = 用户1, 用户2, 用户3, … - 说明:
- 指定
sudo
命令可以以哪些用户身份执行(对应规则中的( )
部分)。 - 常用于限制用户只能以特定身份运行命令。
- 指定
- 示例:
Runas_Alias WEBSERVERS = www-data, nginx- 定义了一个名为
WEBSERVERS
的别名,包括www-data
和nginx
用户。 - 在规则中使用:
alice ALL=(WEBSERVERS) ALL
表示alice
可以在任何主机上以www-data
或nginx
身份运行所有命令,例如:
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
表示alice
在web1.example.com
、192.168.1.10
和dbserver
上可以以任何身份运行所有命令。
- 定义了一个名为
4. Cmnd_Alias
(命令别名)
- 作用:定义一组命令的别名,方便在规则中指定允许或禁止的命令。
- 语法:
Cmnd_Alias 别名 = 命令1, 命令2, 命令3, … - 说明:
- 命令必须是完整路径(如
/bin/ls
),也可以使用通配符。 - 可以简化规则,避免重复列出多个命令。
- 命令必须是完整路径(如
- 示例:
Cmnd_Alias SYSCMDS = /bin/ls, /bin/cat, /usr/sbin/reboot- 定义了一个名为
SYSCMDS
的别名,包括ls
、cat
和reboot
命令。 - 在规则中使用:
alice ALL=(ALL) SYSCMDS
表示alice
可以在任何主机上以任何身份运行ls
、cat
和reboot
。
- 定义了一个名为
综合示例
假设你需要配置一组管理员在一组服务器上管理 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
含义:
- 谁:
alice
、bob
和ops
组用户(ADMINS
)。 - 在哪里:
web1
、web2
和192.168.1.100
(SERVERS
)。 - 以谁的身份:
www-data
或nginx
(WEBSERVERS
)。 - 做什么:运行
/usr/sbin/nginx
、重启 Nginx 服务、查看 Nginx 日志(WEBCMDS
)。 - 条件:无需密码(
NOPASSWD
)。
用户体验:
alice
在web1
上运行:
sudo -u nginx /usr/sbin/nginx -t
无需密码即可测试 Nginx 配置。如果尝试运行未授权的命令(如
sudo reboot
),会失败。
注意事项
- 大小写:别名通常使用大写字母,便于区分。
- 路径:
Cmnd_Alias
中的命令必须是完整路径,否则可能导致权限绕过。 - 编辑工具:始终使用
sudo visudo
编辑/etc/sudoers
,以确保语法正确。 - 灵活性与安全性:别名提高了配置的灵活性,但要避免过于宽松的权限(如
ALL
的滥用)。