064 sudo命令
命令说明
sudo 允许普通用户以 root(或其他用户)身份执行命令,只需输入自己的密码,且所有操作留审计日志;权限由 /etc/sudoers 精细控制,是团队协作运维的标准提权方式。
语法
sudo [选项]... 命令
常用参数
| 参数 | 说明 |
|---|---|
| -u 用户 | 以指定用户身份执行,默认 root,如 sudo -u www ls |
| -i | 以目标用户身份开一个登录 shell(等同 su -) |
| -s | 以目标用户身份开非登录 shell |
| -b | 后台执行命令 |
| -l / -ll | 列出当前用户可执行/不可执行的 sudo 命令 |
| -v | 延长密码凭证有效期(默认 5 分钟) |
| -k | 立即失效凭证,下次 sudo 需重新输密码 |
| -H | 设置 HOME 为目标用户家目录 |
| -p 提示 | 自定义密码提示串 |
| visudo | (配套命令)安全编辑 /etc/sudoers,带语法检查 |
使用示例
$ sudo systemctl restart nginx
以 root 重启服务(最常用)
$ sudo -u postgres psql
切到 postgres 用户进数据库
$ sudo -i
获得 root 登录 shell 长期操作
$ sudo -l
查看自己拥有哪些 sudo 权限
$ sudo !!
用 root 重跑上一条权限不足的命令(神器)
$ sudo visudo
编辑 sudoers,添加 zhangsan ALL=(ALL) ALL
$ sudo tee -a /etc/hosts <<< "10.0.0.1 db"
普通重定向 >> 无 root 权限时用 tee 写入
$ sudo -k
离开终端前清除凭证防他人续用
实用技巧
- sudo 与 su 核心区别:sudo 用自己的密码且按命令授权、全程记录 /var/log/sudo 或 secure;su 需要 root 密码且一切到底无审计。生产环境应禁用 root 直接登录,全员走 sudo。
- 永远用 visudo 编辑 sudoers:直接 vi 写错一条语法可能让所有 sudo 失效;visudo 保存前会做语法检查。
- sudo 密码凭证默认缓存 5 分钟(timestamp_timeout),-k 立即清除;脚本长时间跑 sudo 可先 sudo -v 续期。
- sudo 后接 shell 变量/管道时,提权只作用于第一个命令:sudo cat a | sudo tee b 中管道两侧都要提权,或整体 bash -c。
- 最小授权原则:给应用账号写 /etc/sudoers.d/ 片段只授权特定命令(如 systemctl restart nginx),别随手 ALL=(ALL) ALL。
- sudo 找不到命令(command not found)是 secure_path 机制:sudo 的 PATH 与用户不同,用 which 查绝对路径执行。