在Linux系统中,sudo和su都是用于权限提升的命令,但它们的用途、安全性和工作方式有显著区别。以下是详细对比:
| 特性 | su |
sudo |
|---|---|---|
| 目的 | 切换用户身份(默认切换到root) | 以其他用户身份执行命令(默认root) |
| 密码要求 | 需要目标用户的密码 | 需要当前用户的密码(可配置免密码) |
| 权限粒度 | 获得目标用户的完整权限 | 可精细控制允许执行的命令 |
| 日志记录 | 无详细日志(需额外配置) | 默认记录所有操作(/var/log/auth.log) |
su(Substitute User)bash
su - # 切换到root(需root密码)
su - username # 切换到其他用户(需目标用户密码)exit。sudo(Superuser Do)bash
sudo apt update # 以root身份运行apt
sudo -u username cmd # 以指定用户身份运行命令/etc/sudoers文件控制,支持命令白名单和免密码操作。su的风险:
rm -rf /)。sudo的优势:
sudo操作会被记录,便于排查问题。NOPASSWD选项避免频繁输密码(需谨慎使用)。su:依赖/etc/pam.d/su和用户密码数据库,无细粒度控制。sudo:通过/etc/sudoers文件(建议用visudo编辑)配置:
bash
# 允许用户alice以root身份运行apt命令
alice ALL=(root) /usr/bin/apt
# 允许组admin免密码执行任何命令
%admin ALL=(ALL) NOPASSWD: ALLsu:需要长时间以其他用户身份工作(如维护场景)。sudo:日常管理任务(更安全、可审计)。sudo分配权限,避免直接使用su到root。sudo权限:仅授权必要的命令,例如:
bash
user1 ALL=(root) /usr/bin/systemctl restart nginxsu -c:在需要Shell环境时,可通过sudo调用su:
bash
sudo su - -c "whoami" # 以root身份执行命令(需配置sudo权限)su:简单但风险高,适合少数可信场景。sudo:更安全、灵活,是现代Linux系统的推荐方式。