配置别名组是实现DBA、SA和网络工程师权限分离的关键手段:通过User_Alias归类人员、Cmnd_Alias封装绝对路径命令、规则绑定授权,并辅以安全加固与验证流程。

配置别名组是实现 DBA、SA 和网络工程师权限分离的关键手段。核心思路是:用 User_Alias 归类人员、Cmnd_Alias 封装职能命令、再通过规则绑定,避免硬编码、重复写、权限交叉。
定义角色用户组(User_Alias)
按岗位职责建组,不复用系统默认组(如 wheel 或 sudo),便于后续增减成员时自动继承权限:
- DBA_TEAM = alice, bob, %dba-staff(% 表示 Linux 组)
- SYSADMIN_TEAM = carol, dave, %sa-ops
- NETENG_TEAM = eve, frank, %net-team
封装职能命令集(Cmnd_Alias)
每类角色只允许执行其工作所需的绝对路径命令,禁止通配符泛匹配,参数尽量具体化:
- DB_CMDS = /usr/bin/mysql -u admin -p appdb, /usr/bin/mysqldump -u backup appdb, /usr/bin/mysqladmin ping
- SYS_CMDS = /usr/bin/systemctl status *, /usr/bin/journalctl -u nginx -n 50, /usr/sbin/ss -tuln
- NET_CMDS = /usr/sbin/ip addr show, /usr/sbin/tcpdump -i eth0 -c 20, /usr/bin/ping -c 4 8.8.8.8
注意:像 /usr/bin/mysql -u admin -p appdb 这种带固定参数的写法,能防止用户擅自改库名或加 --execute;! /usr/bin/mysql * --execute 可额外排除高危子命令。
组合授权并加固执行上下文
把前面定义的别名组合成完整规则,写入 /etc/sudoers.d/db-perms、/etc/sudoers.d/sys-perms 等独立文件,再用 visudo -f 编辑:
-
DBA_TEAM ALL=(mysql) NOPASSWD: DB_CMDS—— 仅限以 mysql 用户身份运行,不提权到 root -
SYSADMIN_TEAM ALL=(root) SYS_CMDS—— 查看服务状态和日志,但不开放 restart/reload -
NETENG_TEAM ALL=(root) NET_CMDS—— 允许诊断网络,但禁用 ifconfig up/down、iptables 等变更类操作
补充安全控制:在规则前加 Defaults:DBA_TEAM !requiretty, env_reset,防止非终端调用;加 Defaults:NETENG_TEAM noexec 阻止 tcpdump 调起 shell。
验证与日常维护
配置完成后必须逐项验证:
- 让成员重新登录,执行
id确认已加载对应组 - 切换至该用户,运行
sudo -l查看实际被允许的命令列表 - 实测一条典型命令,例如
sudo mysqladmin ping或sudo ip addr show - 检查
/var/log/sudo.log是否记录了执行行为(需提前启用Defaults logfile="/var/log/sudo.log")

















