在CentOS 7系统中,/etc/sudoers文件是控制用户权限的核心配置文件,它决定了哪些用户可以以超级用户或其他用户的身份执行命令,正确配置该文件对于系统安全和管理效率至关重要,本文将详细介绍/etc/sudoers文件的结构、配置方法、常见场景及注意事项,帮助管理员更好地管理用户权限。

/etc/sudoers文件
/etc/sudoers文件采用特定的语法规则,其核心功能是定义用户或用户组执行的命令范围,默认情况下,只有root用户可以修改该文件,普通用户需通过sudo命令提权,直接编辑/etc/sudoers文件存在风险,语法错误可能导致系统无法识别sudo命令,因此推荐使用visudo工具进行编辑,该工具会自动检查语法并防止并发修改。
文件结构与语法规则
/etc/sudoers文件主要由三部分组成:别名定义、用户规范和默认值设置,以下是关键语法元素:
别名定义
别名用于简化配置,包括以下四种类型:
- User_Alias:定义用户别名,如
ADMIN = user1, user2。 - Runas_Alias:定义目标用户别名,如
DBA = postgres, oracle。 - Host_Alias:定义主机别名,如
SERVERS = web01, db01。 - Cmnd_Alias:定义命令别名,如
NETWORK = /sbin/ifconfig, /usr/bin/ping。
用户规范
用户规范是权限控制的核心,格式为:用户/用户组 主机=(目标用户) 命令列表
alice ALL=(ALL) /usr/bin/apt, /usr/bin/yum
表示用户alice可在所有主机上以任意用户身份执行apt和yum命令。
默认值设置
默认值用于修改sudo的行为,如timestamp_timeout=30表示密码缓存时间为30分钟。

常见配置场景
场景1:允许普通用户执行特定命令
允许webadmin用户重启Nginx服务:webadmin ALL=/usr/bin/systemctl restart nginx
场景2:为用户组分配权限
通过%groupname语法为整个组授权:%developers ALL=(ALL) /usr/bin/git, /usr/bin/docker
场景3:限制命令的参数
使用符号禁止某些参数,john ALL=/bin/rm ! /bin/rm -rf
场景4:使用通配符匹配命令
允许所有以/usr/sbin/开头的命令:operator ALL=/usr/sbin/*
安全注意事项
- 最小权限原则:仅授予用户必要的权限,避免过度授权。
- 审计日志:确保
syslog或auditd已启用,记录sudo操作日志。 - 密码策略:可通过
requiretty或!authenticate控制是否需要输入密码,但后者需谨慎使用。 - 测试验证:修改后,用非
root用户测试权限是否生效,避免系统管理中断。
配置示例表
以下是一个典型的/etc/sudoers配置片段,包含别名和用户规范:

| 配置项 | |
|---|---|
| User_Alias | ADMIN = alice, bob |
| Cmnd_Alias | SYSADMIN = /usr/bin/systemctl, /usr/bin/yum |
| Host_Alias | SERVERS = 192.168.1.0/24 |
| 用户规范 | ADMIN SERVERS=(ALL) SYSADMIN |
| 默认值 | Defaults:alice timestamp_timeout=15 |
相关问答FAQs
Q1:如何撤销用户的sudo权限?
A1:直接在/etc/sudoers文件中删除对应行,或使用usermod -l username命令将用户从sudo组移除(如果通过组管理权限),修改后需验证用户是否仍能执行sudo命令。
Q2:如何配置sudo免密码?
A2:在用户规范中添加NOPASSWD:标签,alice ALL=(ALL) NOPASSWD: /usr/bin/apt
但需注意,免密码配置会降低安全性,建议仅在安全内网环境中使用。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复