在 Linux 系统中,su 和 sudo 都是用于权限管理的命令,但它们的用途和工作方式有显著区别。以下是详细对比:
/bin/bash)。exit 或 Ctrl+D 退出。bash
su # 切换到 root(需 root 密码)
su - # 切换到 root 并加载其环境变量
su username # 切换到其他用户(需该用户密码)风险:直接切换到 root 可能导致滥用权限,且需共享 root 密码。
/etc/sudoers 文件控制,可精细分配(如允许特定用户运行特定命令)。bash
sudo command # 以 root 身份执行命令
sudo -u username command # 以指定用户身份执行
sudo -i # 启动 root 的交互式 Shell(类似 `su -`)优势:无需共享 root 密码,审计日志(记录在 /var/log/auth.log)。
| 特性 | su | sudo |
|---|---|---|
| 密码要求 | 目标用户密码(如 root) | 当前用户密码 |
| 权限范围 | 切换用户后获得完整权限 | 仅限授权的单条命令 |
| 日志记录 | 无详细日志 | 详细记录每条命令 |
| 配置灵活性 | 无 | 可通过 /etc/sudoers 定制 |
| 典型使用场景 | 需要长期使用 root 权限时 | 临时执行特权命令时 |
使用 su:
需要长时间以 root 身份操作(如系统维护),且团队内信任共享 root 密码。
使用 sudo:
日常管理任务,遵循最小权限原则,避免直接切换 root。
sudo 分配权限,避免直接使用 su。sudoers:visudo 命令编辑 /etc/sudoers,例如:
bash
username ALL=(ALL:ALL) NOPASSWD: /usr/bin/apt # 允许无密码执行 aptsudo -i(比 su - 更安全)。通过合理使用 su 和 sudo,可以平衡便利性与系统安全性。建议优先使用 sudo,尤其是在多用户环境中。