sudo 命令
基本介绍
sudo(Superuser Do)是 Linux 系统中用于以其他用户身份执行命令的工具。它允许授权用户以 root 或其他用户身份执行特权命令,而不需要知道目标用户的密码。sudo 是系统管理员进行特权操作的重要工具,提供了比 su 更安全的权限管理方式。
资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a
语法
sudo [OPTIONS] COMMAND
常用选项
基本选项
- -b, –background:在后台执行命令
- -c, –command=COMMAND:执行指定命令
- -E, –preserve-env:保留环境变量
- -e, –edit:编辑文件(而非执行命令)
- -g, –group=GROUP:指定执行命令的组
- -h, –help:显示帮助信息
- -i, –login:模拟登录 shell(读取目标用户的环境变量)
- -k, –kill:清除用户的 sudo 时间戳缓存
- -l, –list:列出用户可用的 sudo 命令
- -n, –non-interactive:非交互式模式(不提示密码)
- -p, –prompt=PROMPT:自定义密码提示
- -s, –shell:启动指定的 shell
- -u, –user=USER:指定执行命令的用户
- -V, –version:显示版本信息
- -v, –validate:更新用户的 sudo 时间戳缓存
使用示例
1. 以 root 身份执行命令
sudo apt-get update
2. 以指定用户身份执行命令
sudo -u username command
3. 以指定组身份执行命令
sudo -g groupname command
4. 模拟登录 shell
sudo -i
5. 编辑文件
sudo -e /etc/sudoers
6. 列出可用命令
sudo -l
7. 清除时间戳缓存
sudo -k
8. 更新时间戳缓存
sudo -v
9. 在后台执行命令
sudo -b apt-get upgrade -y
10. 保留环境变量执行命令
sudo -E env
11. 非交互式执行(不提示密码)
echo "password" | sudo -S command
12. 自定义密码提示
sudo -p "Enter your password: " command
输出格式说明
成功执行
# 执行命令的输出
错误输出示例
sudo: password incorrect
sudo: user is not in the sudoers file
sudo -l 输出示例
User username may run the following commands on this host:
(ALL : ALL) ALL
sudoers 配置文件
配置文件位置
- /etc/sudoers:主配置文件
- /etc/sudoers.d/:配置文件目录
配置格式
user host=(user:group) command
配置示例
# 允许 user 以 root 身份执行所有命令
user ALL=(ALL) ALL
# 允许 user 以指定用户身份执行命令
user ALL=(root) /usr/bin/apt-get
# 允许用户组 sudo 成员执行所有命令
%sudo ALL=(ALL) ALL
# 无需密码执行命令
user ALL=(ALL) NOPASSWD: ALL
# 设置命令别名
Cmnd_Alias UPDATE = /usr/bin/apt-get update, /usr/bin/apt-get upgrade
user ALL=(ALL) UPDATE
工作原理
sudo 执行流程
# 1. 用户执行 sudo 命令
sudo apt-get update
# 2. sudo 检查 /etc/sudoers 配置
# 3. 提示输入当前用户密码(如果需要)
# 4. 验证密码并更新时间戳缓存
# 5. 以目标用户身份执行命令
# 6. 返回结果
时间戳缓存机制
# 检查时间戳状态
sudo -v
# 清除时间戳
sudo -k
# 默认缓存时间为 5 分钟
实用技巧
配置无需密码的 sudo
# 编辑 sudoers 文件
sudo visudo
# 添加配置(将 username 替换为实际用户名)
username ALL=(ALL) NOPASSWD: ALL
创建命令别名
# 编辑 sudoers 文件
sudo visudo
# 添加命令别名
Cmnd_Alias SYSTEM = /usr/bin/reboot, /usr/bin/shutdown, /usr/bin/halt
Cmnd_Alias PACKAGE = /usr/bin/apt-get, /usr/bin/dpkg
# 授权用户执行指定命令
username ALL=(ALL) SYSTEM, PACKAGE
限制用户只能执行特定命令
# 编辑 sudoers 文件
sudo visudo
# 只允许用户执行特定命令
username ALL=(ALL) /usr/bin/apt-get update, /usr/bin/apt-get upgrade
日志记录
# 查看 sudo 日志
sudo cat /var/log/auth.log | grep sudo
在脚本中使用 sudo
#!/bin/bash
# 检查是否有 sudo 权限
if sudo -n true 2>/dev/null; then
echo "User has sudo access"
else
echo "User does not have sudo access"
exit 1
fi
# 执行需要 sudo 的操作
sudo apt-get update
sudo apt-get upgrade -y
sudo 与 su 的对比
| 密码验证 | 当前用户密码 | 目标用户密码 |
| 权限控制 | 细粒度(基于 sudoers) | 全权限 |
| 日志记录 | 自动记录 | 不记录 |
| 安全性 | 更高(可审计) | 较低 |
| 环境变量 | 默认保留 | 默认切换 |
相关命令
- su:切换用户身份
- visudo:安全编辑 sudoers 文件
- whoami:显示当前用户
- id:显示用户和组ID信息
- groups:显示用户所属组
- passwd:设置用户密码
注意事项
总结
sudo 是 Linux 系统中用于以其他用户身份执行命令的工具。它提供了比 su 更安全、更细粒度的权限管理方式。通过 /etc/sudoers 配置文件,可以精确控制用户可以执行哪些命令。sudo 是系统管理员进行特权操作的重要工具。



