sudo cmd以 root 身份执行单条命令,结束即恢复,操作会被记录。
约 1243 字大约 4 分钟
2026-05-14
root 是 Linux 上权限最高的用户,能改任何文件、杀任何进程。正因为它太强,日常工作的原则是“尽量不用 root,需要时才临时借用”。sudo 和 su 就是“临时借用”的两种方式,区别值得弄清楚。
理解 root 的权力边界,弄清 sudo 与 su 的区别,知道什么时候该提权、什么时候提权反而是在掩盖问题。
sudo cmd以 root 身份执行单条命令,结束即恢复,操作会被记录。
sudo -l列出当前用户被授权可以执行的提权命令。
sudo -i开一个 root 登录 Shell,比 su - 更推荐,仍走 sudo 授权。
su - user切换成另一个用户并加载其登录环境,需要对方密码。
root 的 UID 是 0,系统对它不做任何权限检查。这意味着 root 下的一个手误——rm -rf 多打个空格、chown -R 对错目录——没有任何东西拦得住。所以“能不用 root 就不用”不是洁癖,是把误操作的杀伤范围限制住。
| 对比 | sudo | su |
|---|---|---|
| 作用 | 以 root(或指定用户)执行一条命令 | 切换成另一个用户,开新 Shell |
| 要谁的密码 | 你自己的密码 | 目标用户的密码 |
| 授权粒度 | /etc/sudoers 可精确到某用户能跑哪些命令 | 全有或全无 |
| 审计 | 每次提权都记进日志 | 切换后做了什么不单独记录 |
| 推荐度 | 日常首选 | 尽量少用,要交互环境用 sudo -i |
sudo 的优势是最小授权 + 可审计:运维可以在 sudo -l 看到自己被授权了什么;出了问题,日志里能查到谁在什么时候提权做了什么。su - 把整个身份换掉,粒度粗、不好追溯,现代实践里更推荐 sudo -i 来获得 root 交互环境。
su 和 su - 的那个横杠su user 切换用户但保留原来的环境(PATH、当前目录等);su - user 多了个 -,会像真正登录一样加载目标用户的完整环境。少打这个横杠,经常导致“切过去却 command not found”或读错配置文件——和 Shell 是什么 里登录 / 非登录 Shell 是同一回事。
sudo 能跑通,不代表问题解决了。常见的“滥用”是:服务读不到某个文件,于是 sudo 启动它——其实根因是文件归属不对,正确做法是 chown 给服务账号,而不是让整个服务用 root 跑。一个判断标准:如果加 sudo 是为了绕过一个权限报错,先停下来想想这个报错本身是不是在提示真正的问题。
别对来路不明的脚本直接 sudo
curl ... | sudo bash 这种写法,等于把 root 权限直接交给一段你没读过的代码。执行前先把脚本下载到本地、看清内容、确认来源可信,再决定是否运行。同理,不要长期开着一个 root Shell 做日常操作——开一个忘一个,迟早出事。
| 误区 | 更稳妥的做法 |
|---|---|
遇到权限报错就习惯性加 sudo | 先判断是不是归属问题,该 chown 就别用 sudo 掩盖 |
su user 后发现环境不对 | 用 su - user 加载完整登录环境,注意那个横杠 |
| 长期使用 root Shell 做日常操作 | 平时用普通用户,需要时 sudo,要交互环境用 sudo -i |
把网络脚本直接管道给 sudo bash 跑 | 先下载、读内容、确认来源,再决定是否执行 |
版权归属:Shuo Liu