
Linux sudo 命令
sudo 的全称是 Super User DO,它使得授权用户可以以另一个用户(通常是 root)的身份运行命令。通过 sudo 执行的任何操作都等同于目标用户亲自执行。
使用权限:仅限在 /etc/sudoers 文件中列出的用户。
语法格式
sudo [参数] 命令
示例:
sudo apt update # 使用 root 权限更新软件源列表 sudo vim /etc/hosts # 编辑需要管理员权限的文件
常用参数说明:
- -i: 模拟初始登录过程,加载目标用户的环境变量
- -s: 启动 shell 环境
- -u user: 以指定用户身份执行命令
- -l: 查看当前用户被允许使用的 sudo 命令
- -v: 验证用户身份(刷新 sudo 缓存时间)
- -k: 清除当前用户的 sudo 缓存
示例操作
以 root 权限运行单一命令:
sudo apt update sudo systemctl restart nginx sudo mkdir /opt/myapp
切换到 root shell 环境:
sudo -i # 登录式 shell,加载 root 用户配置 sudo -s # 非登录式 shell sudo su - # 另一种方法
以其他用户身份运行命令:
sudo -u username command
sudo -u postgres psql # 使用 postgres 用户启动 psql
查看当前用户可执行的 sudo 权限:
sudo -l
编辑受保护的系统文件:
sudo nano /etc/hosts sudo vim /etc/nginx/nginx.conf
配置管理
sudo 的配置信息保存在 /etc/sudoers 文件中,推荐使用 visudo 工具进行修改:
sudo visudo
典型配置示例:
# 允许用户无需密码执行所有命令 username ALL=(ALL) NOPASSWD: ALL授权用户组执行特定命令
%wheel ALL=(ALL) /bin/systemctl, /usr/bin/apt
常见问题处理
提示“不在 sudoers 文件中”错误:
需要由 root 用户将该用户加入对应组:
usermod -aG sudo username # Ubuntu/Debian 系统 usermod -aG wheel username # CentOS/RHEL 系统
修改缓存有效时间:
在 /etc/sudoers 中设置 timestamp_timeout 参数(单位为分钟):
Defaults timestamp_timeout=30
su 与 sudo 的差异对比
| 特性 | su | sudo |
|---|---|---|
| 所需密码 | 目标用户密码 | 当前用户密码 |
| 会话持续时间 | 需手动退出 | 单次或短暂缓存 |
| 配置复杂度 | 简单直接 | 需编辑 sudoers 文件 |
| 安全性 | 需要知道 root 密码 | 更细粒度权限控制 |
| 日志审计能力 | 较弱 | 详细记录 |
尽管 su 命令使用简便,但在实际运维工作中,sudo 更加安全可靠,具备更强的权限管理和日志追踪能力,因此更推荐使用。










