sudo是Linux系统中用于给普通用户临时赋予root权限的工具,在云服务器场景中,出于安全考虑通常不会直接使用root账号登录操作,而是通过普通用户配合sudo完成需要高权限的操作,既降低误操作风险,也便于权限管控。

sudo的基础概念
sudo的全称是superuser do,它的核心作用是在不切换root账号的前提下,让授权用户以root身份执行指定的命令。和直接切换到root账号相比,sudo的优势在于:
- 可以精确控制哪些用户能执行哪些命令,权限粒度更细
- 所有sudo操作都会被记录到日志中,便于后续审计
- 临时权限生效,执行完命令后自动回到普通用户权限,减少误操作概率
检查并安装sudo
大部分主流的Linux云服务器镜像默认已经预装了sudo,首先可以检查是否已经安装:
# 检查sudo是否安装 which sudo # 如果输出/usr/bin/sudo说明已经安装,否则需要手动安装
如果未安装,可以根据系统类型执行安装命令:
# CentOS/RHEL系统安装sudo yum install sudo -y # Ubuntu/Debian系统安装sudo apt-get update && apt-get install sudo -y
配置sudo授权用户
sudo的配置文件是/etc/sudoers,这个文件有严格的权限要求,不能直接用普通编辑器修改,需要使用visudo命令编辑,该命令会自动检查配置语法,避免写错导致sudo无法使用。
给单个用户添加sudo权限
假设要给普通用户test添加sudo权限,步骤如下:
# 切换到root用户,或者使用已有sudo权限的用户执行 su - root # 执行visudo命令打开配置文件 visudo
在打开的配置文件中找到root ALL=(ALL) ALL这一行,在下方添加如下内容:
# 允许用户test在所有主机上以所有用户身份执行所有命令,需要输入test自己的密码 test ALL=(ALL) ALL
如果想让test执行sudo时不需要输入密码,可以修改为:
# NOPASSWD表示执行sudo时不需要输入密码 test ALL=(ALL) NOPASSWD: ALL
给用户组添加sudo权限
如果有多用户需要sudo权限,把用户加入sudo组是更便捷的方式。在Ubuntu/Debian系统中,sudo组的用户默认拥有sudo权限;在CentOS/RHEL系统中,wheel组的用户默认拥有sudo权限。
# Ubuntu/Debian系统把test用户加入sudo组 usermod -aG sudo test # CentOS/RHEL系统把test用户加入wheel组 usermod -aG wheel test
sudo的常用操作场景
执行单条需要高权限的命令
普通用户安装软件、修改系统配置文件等操作需要root权限,只需要在命令前加sudo即可:
# 普通用户安装nginx sudo yum install nginx -y # 普通用户编辑系统内核参数配置文件 sudo vi /etc/sysctl.conf
切换到root身份执行一系列操作
如果需要连续执行多条高权限命令,可以使用sudo -i或者sudo su -切换到root环境,执行完操作后输入exit退出root环境:
# 切换到root环境 sudo -i # 此时执行的所有命令都以root身份运行 echo "test" > /root/test.txt # 退出root环境 exit
以其他用户身份执行命令
sudo还可以指定以某个特定用户的身份执行命令,格式为sudo -u 用户名 命令:
# 以www用户身份创建文件,常用于网站目录权限调整 sudo -u www touch /var/www/html/test.html
sudo使用注意事项
- 不要随意给普通用户配置
NOPASSWD: ALL权限,除非是信任的运维账号,否则会增加安全风险 - 修改
/etc/sudoers文件必须使用visudo命令,不要用vi或者nano直接编辑,避免语法错误导致所有sudo权限失效 - 执行sudo命令时输入的是当前用户的密码,不是root用户的密码
- 可以通过
sudo -l命令查看当前用户拥有的sudo权限范围 - sudo的操作日志默认记录在
/var/log/secure(CentOS/RHEL)或者/var/log/auth.log(Ubuntu/Debian)中,出现权限问题时可以查看日志排查
sudo权限排查常见问题
如果遇到执行sudo提示权限不足,可以按以下步骤排查:
- 确认当前用户是否在sudo授权列表中,执行
sudo -l查看 - 确认
/etc/sudoers文件权限是否正确,正常权限应为440,执行ls -l /etc/sudoers查看,权限错误可以执行chmod 440 /etc/sudoers修复 - 确认用户名是否拼写正确,用户组是否添加成功,执行
groups 用户名查看用户所属组
| 场景 | 对应命令 | 说明 |
|---|---|---|
| 执行单条高权限命令 | sudo 命令 | 临时获取root权限执行单条命令 |
| 免密执行sudo | 配置NOPASSWD参数 | 执行sudo时不需要输入密码 |
| 查看当前sudo权限 | sudo -l | 列出当前用户可执行的sudo命令范围 |
| 以指定用户执行命令 | sudo -u 用户名 命令 | 非root用户也可以指定其他用户身份执行命令 |