为运维岗位分配专属命令集,核心是固化“谁、在哪、以谁身份、能跑哪几条命令”四要素;按角色建组(如%dbadmin)、用cmnd_alias定义精确命令集、规则绑定组与身份、启用审计与定期验证。

为不同运维岗位分配专属命令集合,核心是把“谁、在哪、以谁身份、能跑哪几条命令”四个要素全部写死,不模糊、不泛化、不依赖用户自觉。重点不在放权多少,而在每条规则是否可审计、可验证、不可绕过。
按角色建用户组,别给单人硬编码
先创建职能分组,比如 %dbadmin、%webops、%backup,再把对应人员加进去:
sudo groupadd dbadminsudo usermod -aG dbadmin alicesudo usermod -aG webops bob
之后所有权限都绑定到组,新增或调岗只需改组成员,不用动配置文件。
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
用 Cmnd_Alias 定义安全命令集
每个岗位只允许运行明确路径+固定参数的命令,禁止通配符和 shell 逃逸入口:
- 数据库岗:允许备份与导出,禁用执行 SQL 或删除库
Cmnd_Alias DB_BACKUP = /usr/bin/pg_dump, /usr/bin/mysqldump --single-transaction - Web 运维岗:只准重启 Nginx、重载配置、查最近日志
Cmnd_Alias WEB_CTRL = /usr/bin/systemctl reload nginx, /usr/bin/journalctl -u nginx -n 100 --since "1 hour ago" - 备份岗:仅限运行指定脚本,且必须以 backup 用户身份执行
Cmnd_Alias BACKUP_RUN = /opt/scripts/backup-full.sh, /opt/scripts/backup-incremental.sh
授权规则写清四要素,显式拒绝高危行为
在 /etc/sudoers.d/20-roles 中写规则,格式统一、目标明确:
-
%dbadmin ALL=(postgres) NOPASSWD: DB_BACKUP(只能以 postgres 身份运行备份命令) -
%webops ALL=(root) NOPASSWD: WEB_CTRL(重启服务需 root,但禁止systemctl stop *) -
%backup ALL=(backup) NOPASSWD: BACKUP_RUN(脚本由 backup 用户拥有并执行) - 全局加固:
Defaults:%webops !/bin/bash, !/usr/bin/python3 -c, !/usr/bin/sh
启用审计与定期验证机制
权限不是设完就完事,要确保它持续有效:
- 开启 sudo 日志:
Defaults logfile="/var/log/sudo.log",配合 logrotate 归档 - 每月运行一次验证:
sudo -lU dbadmin看实际可见命令是否仍符合定义 - 用
visudo -c检查语法,修改后立即生效,无需重启服务 - 敏感操作加环境约束:
Defaults:%backup env_delete+="PATH", env_check+="HOME",防止污染执行环境










