介绍
sudo = superuser do,允许授权用户以其他用户身份(默认 root)执行命令,而不需要登录 root 账号。
作用
临时获取管理员权限,区别于 su(切换完整 root 会话)。
语法
sudo [-选项] 命令
常用选项
| 参数 | 作用 |
|---|---|
-u <user> |
指定以某个用户执行,默认root;例 sudo -u nginx ls |
-i |
模拟登录root,加载root环境变量,进入root shell(推荐) |
-s |
启动root shell,但不重新加载完整登录环境 |
-l |
列出当前用户拥有的sudo权限 |
-k |
清除sudo密码缓存,下次sudo必须重新输密码 |
-v |
延长密码验证超时时间 |
-H |
将HOME环境变量设为目标用户(root)的家目录 |
-n |
非交互模式,不提示输入密码,无权限直接报错 |
例子
以root执行一条命令
sudo apt update
切换到root登录shell
sudo -i
cd命令不能用sudo
cd 命令是shell内置命令,不能用 sudo
所以要执行 sudo -i 切换root,然后再执行 cd 命令
以www-data用户执行命令
sudo -u www-data php index.php
密码缓存机制
默认:输入一次sudo密码后,5分钟内再次sudo不用重复输入。
这个超时时间可以在 /etc/sudoers 修改:
Defaults timestamp_timeout=10 # 单位分钟,0=每次都要输;负数永久缓存(不推荐)
sudo vs su 区别
| 命令 | 原理 | 特点 |
|---|---|---|
sudo cmd |
临时用root权限跑单条命令 | 不切换shell,风险更小;记录日志 |
sudo -i |
登录root会话,输入当前登录用户的密码 | 等同于root登录,环境完全切换 |
su |
切换用户,需要目标用户密码(root密码) | 需要知道root密码;日志弱 |
su - |
完整登录root,加载root环境 | 无 |
日志
sudo执行记录默认写入日志:
- Debian/Ubuntu:
/var/log/auth.log - CentOS/RHEL:
/var/log/secure
查看sudo操作记录
CentOS
grep sudo /var/log/secure
Ubuntu
grep sudo /var/log/auth.log