sudo是linux权限分级授权最常用安全方式,支持细粒度命令控制、操作审计和角色隔离;需遵循最小权限原则,用别名定义用户、主机、命令,禁用通配符并加固日志与安全选项。

Linux系统中,sudo 是实现权限分级授权最常用、最安全的方式。它不依赖共享root密码,支持细粒度命令控制、操作审计和角色隔离,是运维规范化的基石。
明确授权目标:谁能在哪些主机上执行哪些命令
权限分级的核心是“最小权限原则”。需提前梳理清楚:
- 哪些用户或用户组需要管理能力(如数据库管理员、Web服务维护员)
- 他们仅需操作特定服务(如重启nginx、查询MySQL进程),而非拥有全部root权限
- 是否限制执行环境(如仅允许从跳板机发起,或禁止shell逃逸)
例如:DBA组成员应能执行 systemctl restart mysqld 和 mysqladmin ping,但不能修改系统网络配置或删除日志。
编写精准的sudoers规则:用别名提升可维护性
直接在 /etc/sudoers 中写用户级规则易出错且难扩展。推荐使用Host_Alias、User_Alias、Cmnd_Alias 分类定义:
User_Alias DBA = %dba Host_Alias PROD_DB = db01, db02 Cmnd_Alias MYSQL_CMD = /usr/bin/mysqladmin, /usr/bin/systemctl restart mysqld, /bin/journalctl -u mysqld DBA PROD_DB = NOPASSWD: MYSQL_CMD
注意:务必使用 visudo 编辑 sudoers 文件,避免语法错误导致全员无法提权;命令路径必须绝对且真实存在(可用 which 或 type -p 确认);禁用通配符(如 /usr/bin/mysql*)以防绕过。
防止权限滥用:关闭危险选项,启用日志追踪
默认sudo配置可能隐含风险。应在 /etc/sudoers 中显式加固:
- 添加
Defaults requiretty阻止后台任务提权 - 设置
Defaults !authenticate(配合NOPASSWD时)或Defaults passwd_timeout=5控制密码缓存时间 - 启用日志记录:
Defaults logfile="/var/log/sudo.log"和Defaults log_input, log_output(需配置sudoers.d中相应规则) - 禁止shell逃逸:
Defaults !shell_noop并避免授权/bin/bash、/usr/bin/python等交互式工具
验证与审计:每次变更后必须测试,定期检查日志
授权不是一劳永逸。上线前用目标用户实测:
-
sudo -l查看当前可用命令列表 -
sudo -u 用户 command模拟他人执行场景 - 尝试越权命令(如
sudo rm -rf /tmp)确认被拒绝
日常通过 grep 'COMMAND=' /var/log/sudo.log 审计高频操作;结合logrotate管理日志体积;对异常时间、非常用IP的sudo行为设置告警。










