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 查绝对路径执行。