主机别名用Host_Alias定义,格式为Host_Alias NAME = item1, item2,NAME须大写字母开头、仅含字母数字和下划线;成员为IP、主机名或CIDR网段;命令别名用Cmnd_Alias定义,格式为Cmnd_Alias NAME = /path/cmd1, /path/cmd2,命令必须绝对路径且不可含通配符。

主机别名怎么定义
主机别名用于把多个主机(IP 或主机名)归为一组,方便在授权规则中统一引用。必须用大写字母开头,只允许字母、数字和下划线。
定义格式是:Host_Alias 别名 = 主机1, 主机2, 主机3
- 主机可以是具体 IP(如 192.168.1.10)、主机名(如 web01),也支持 CIDR 网段(如 10.0.0.0/24)或子网掩码(如 255.255.255.0)
- 同一别名可跨行写,用反斜杠 \ 续行;多个别名可用冒号 : 连续定义
- 例如:Host_Alias DBSERVERS = db1, db2, 192.168.5.100
命令别名怎么定义
命令别名把常用命令或权限相关操作打包成一个逻辑组,避免重复写长路径,也便于后期统一调整权限范围。
定义格式是:Cmnd_Alias 别名 = 命令1, 命令2, ...
- 所有命令必须使用绝对路径(如 /usr/bin/systemctl,不能写 systemctl)
- 支持排除特定参数的命令,用叹号前缀,比如 !/usr/bin/passwd root 表示禁止修改 root 密码
- 可嵌套其他别名,例如:Cmnd_Alias NETTOOLS = /usr/sbin/ip, /usr/sbin/ifconfig : Cmnd_Alias ADMIN = /usr/sbin/useradd, /usr/sbin/userdel
怎么在授权规则里用别名
别名本身只是“代号”,真正起作用的是把它放进用户权限行中。语法结构不变,只是把原始字段替换成对应别名。
- 用户别名用 %别名 引用(如 %ADMINS),主机别名直接写(如 DBSERVERS),命令别名也直接写(如 NETTOOLS)
- 示例:%ADMINS DBSERVERS = (root) NOPASSWD: NETTOOLS, /bin/systemctl restart nginx
- 注意:别名必须在授权规则之前定义,否则 visudo 校验会报错
实用建议与常见陷阱
别名让配置更清晰,但用不好反而增加维护成本。几个关键点要留意:
- 别名名不区分大小写?错——必须全大写开头,SYSADM 合法,sysadm 或 1sysadm 都非法
- 命令路径写错最常见:比如写成 passwd 而非 /usr/bin/passwd,sudo 会拒绝执行
- 别名不能包含空格或特殊符号,逗号后可加空格但不是必须;多条命令建议每行一条,提高可读性
- 修改完一定要用 visudo 保存,它会自动语法检查。直接 vim 编辑 /etc/sudoers 可能锁死 sudo 功能











