基本概念
- sudo:Super User DO 的缩写,允许授权用户以其他用户(通常是 root 用户)的身份执行命令
- 使用权限由
/etc/sudoers文件控制
语法和常用参数
sudo [选项] 命令
主要参数:
-i:模拟初始登录,加载目标用户的环境变量-s:运行shell-u user:以指定用户身份运行命令-l:列出当前用户可执行的sudo命令-v:验证用户凭据,延长sudo会话-k:撤销sudo凭据缓存
实用实例
基本使用
sudo apt update # 更新软件包列表
sudo systemctl restart nginx # 重启nginx服务
sudo mkdir /opt/myapp # 在系统目录创建文件夹
切换用户环境
sudo -i # 切换到root的登录shell(加载环境变量)
sudo -s # 切换到root的非登录shell
sudo su - # 另一种切换方式
以其他用户身份执行
sudo -u username command
sudo -u postgres psql # 以postgres用户运行psql
系统文件编辑
sudo nano /etc/hosts
sudo vim /etc/nginx/nginx.conf
配置文件管理
- 主配置文件:
/etc/sudoers - 必须使用
visudo命令编辑(避免语法错误):
sudo visudo
配置示例
# 允许用户免密码执行所有命令
username ALL=(ALL) NOPASSWD: ALL
# 允许用户组执行特定命令
%wheel ALL=(ALL) /bin/systemctl, /usr/bin/apt
常见问题解决
用户不在sudoers文件
# Ubuntu/Debian
usermod -aG sudo username
# CentOS/RHEL
usermod -aG wheel username
调整缓存时间
在 /etc/sudoers中修改:
Defaults timestamp_timeout=30 # 单位:分钟
su vs sudo 对比
| 特性 | su | sudo |
|---|---|---|
| 需要密码 | 目标用户密码 | 当前用户密码 |
| 会话持续 | 直到手动exit | 单次命令或短时间缓存 |
| 配置复杂度 | 简单 | 需要配置sudoers |
| 安全性 | 需要知道root密码 | 更细粒度的权限控制 |
| 审计 | 有限 | 更详细的日志 |
总结建议
- 在现代系统管理中,sudo 比 su 更受推荐
- 提供更好的安全性和审计能力
- 支持细粒度的权限控制
- 避免直接共享root密码
这份笔记涵盖了sudo命令的核心知识点,适合日常使用和故障排查参考。