sudo(SuperUser DO)是Linux系统中允许普通用户以root或其他指定用户身份执行命令的核心工具。它提供了一种安全的权限管理机制,可以在不共享root密码的情况下,为信任的用户授予管理权限,从而有效增强系统安全性。在Linux系统运维中,合理配置sudo是保障服务器安全的关键步骤之一。本文将以腾讯云CentOS 7系统为例,详细记录sudo权限的配置过程。
一、配置命令
sudo的配置文件位于/etc/sudoers。编辑该文件有两种方式:直接使用vi命令,或使用专用的visudo命令。后者在语法检查方面更具优势,因为它会在保存前自动验证配置格式,因此推荐使用visudo进行编辑。
二、配置语法
通过过滤注释和空行,可以查看默认配置的核心内容:
grep -vE '^#|^$' /etc/sudoers

输出结果的最后三行即为系统默认的权限设置。
配置文件的格式遵循用户/组 主机=(目标用户) 授权命令的结构,各字段含义如下:
- 用户/组:指定授权对象,可以是具体用户名(如root)、用户组(如%wheel)或预定义的用户别名。
- 主机:限制用户从哪些主机执行sudo操作,ALL表示允许所有主机。
- 目标用户:指定用户可以切换到的身份,ALL表示可切换为任意用户,默认通常为root。
- 授权命令:用户允许执行的命令路径,必须使用绝对路径(如/usr/bin/mount),ALL表示所有命令。
深入理解这些语法规则对于系统权限管理至关重要。
三、配置方法
1. 将用户加入wheel组
从默认配置可见,wheel组已被授予完整的root权限。因此,将用户加入该组是一种快捷的赋权方式。例如,将测试用户testuser加入wheel组:
usermod -G wheel testuser

切换至testuser用户进行测试。尝试直接创建用户会提示权限不足:

此时,通过sudo命令即可成功提权执行:
sudo useradd testuser2

验证用户是否新增成功:

这种方式适用于需要为多个用户批量配置相同权限的场景。
2. 单独为用户配置sudo权限
出于更精细的安全控制考虑,通常建议注释掉wheel组的全局权限,转而单独为用户配置。编辑sudo配置文件:
visudo
在文件中新增以下行,为testuser用户授予完整sudo权限:
testuser ALL=(ALL) ALL

保存后,使用以下命令验证配置文件语法是否正确:
visudo -c -f /etc/sudoers

切换至testuser用户,测试权限是否生效:

测试成功,用户创建功能正常。
四、配置实例
-
为testuser用户添加完整sudo权限:
testuser ALL=(ALL) ALL
-
为testuser用户添加sudo权限且免密码验证(不推荐):
testuser ALL=(ALL) NOPASSWD:ALL
-
为testuser用户添加受限sudo权限(仅允许重启服务及创建文件):
testuser ALL=(ALL) /bin/systemctl,/usr/bin/touch
-
限制testuser用户仅能从特定主机执行sudo:
testuser 192.168.100.100=(ALL) ALL
-
授权testuser使用passwd命令,但禁止修改root密码:
testuser ALL=(ALL) /usr/bin/passwd,!/usr/bin/passwd root
扩展说明
-
可以使用which命令快速查找命令的绝对路径,这在配置授权命令时非常实用:

-
使用sudo时,首次需要输入当前用户密码,默认超时时间为5分钟。如需调整,可在/etc/sudoers中添加以下配置(例如设置为5分钟):
Defaults timestamp_timeout=5
|