在Linux系统中,su 和 sudo 是两种不同的权限管理工具,核心区别在于 身份切换方式 和 权限控制粒度。以下是详细对比及配置方法:

一、su 与 sudo 的区别
| 对比项 | su |
sudo |
|---|---|---|
| 功能 | 切换用户身份(需目标用户密码) | 以其他用户身份执行命令(需当前用户密码) |
| 默认权限 | 切换到root需输入root密码 | 当前用户需在sudoers列表 |
| 日志记录 | 无详细日志 | 记录所有sudo操作(/var/log/auth.log) |
| 安全性 | 高风险(需共享root密码) | 更安全(细粒度控制,无需共享密码) |
| 使用场景 | 需要长时间保持root权限 | 临时执行特权命令 |
示例:
su - root # 切换到root用户(需root密码) sudo apt update # 临时以root权限执行(需当前用户密码)
二、配置 sudo 权限
步骤1:编辑 sudoers 文件
sudo visudo # 推荐使用(语法检查) # 或 sudo nano /etc/sudoers # 手动编辑(需谨慎)
步骤2:添加用户权限
-
方法一:单个用户授权
在文件中添加以下行(允许用户username执行所有命令):username ALL=(ALL:ALL) ALL
-
参数说明:
-
ALL=(ALL:ALL):可以以任何用户/组的身份执行。 -
最后一个
ALL:允许所有命令。
-
-
-
方法二:用户组授权
允许wheel或sudo组的所有成员使用sudo:%sudo ALL=(ALL:ALL) ALL
-
方法三:限制特定命令
仅允许用户执行特定命令(如apt和systemctl):username ALL=(root) /usr/bin/apt, /bin/systemctl
步骤3:保存并验证
-
保存文件(
visudo会自动检查语法错误)。 -
测试权限:
sudo -l # 查看当前用户的sudo权限 sudo whoami # 应返回"root"
三、高级配置技巧
1. 免密码使用sudo
username ALL=(ALL) NOPASSWD: ALL # 允许无密码执行所有命令 username ALL=(ALL) NOPASSWD: /usr/bin/apt # 仅免密码执行apt
2. 限制用户仅能sudo特定目录
username ALL=(root) /usr/bin/*, !/usr/bin/passwd # 允许所有命令,但禁止修改密码
3. 别名简化配置
User_Alias ADMINS = user1, user2 Cmnd_Alias UPDATE = /usr/bin/apt, /usr/bin/yum ADMINS ALL=(ALL) UPDATE # 允许ADMINS组用户执行UPDATE类命令
四、安全注意事项
-
最小权限原则:仅授予必要的命令权限,避免
ALL滥用。 -
禁用
su:sudo chmod u-s /bin/su # 移除su的setuid权限(需谨慎)
-
监控日志:定期检查
/var/log/auth.log中的sudo记录。 -
避免直接编辑
/etc/sudoers:始终使用visudo防止语法错误导致锁死系统。
五、故障排查
-
错误:
username is not in the sudoers file
解决:用root用户执行usermod -aG sudo username,将用户加入sudo组。 -
恢复sudo权限:若误删所有sudo权限,可通过单用户模式或Live CD修复。
总结
-
su:适合需要长期切换身份的场景,但需共享密码,安全性低。 -
sudo:更安全、灵活,支持细粒度权限控制和审计。 -
生产环境建议:禁用root直接登录,强制使用
sudo管理特权命令。