引言
在Linux系统中,用户授权是保障系统安全的核心环节之一。合理分配权限既能满足用户的操作需求,又能有效防止越权操作带来的风险。本文围绕su和sudo两大核心命令,详细解析其使用场景、配置方法及安全实践,助你掌握用户授权的核心技巧。
一、su命令:用户切换与安全限制
1. su命令的基本使用
su(Switch User)用于切换用户身份,常用场景包括:
-
切换至普通用户:
su zhangsan # 仅切换用户,环境变量不切换(可能导致命令不可用) su - zhangsan # 切换用户并加载目标用户的环境变量 -
普通用户切换至root:需输入root密码。
su - root -
以指定用户身份执行命令:
su -c "id" zhangsan # 以zhangsan身份执行id命令
2. 限制su命令的使用
默认情况下,任何用户均可通过su切换至root(需密码)。为提高安全性,可通过以下方式限制:
步骤1:启用PAM认证模块
修改/etc/pam.d/su文件,启用pam_wheel模块:
# 取消以下行的注释
auth required pam_wheel.so use_uid
步骤2:将用户加入wheel组
仅允许wheel组成员使用su:
gpasswd -a zhangsan wheel # 将用户添加到wheel组
此后,只有wheel组成员才能使用su切换至root。
二、sudo命令:精细化权限控制
sudo允许普通用户以root权限执行特定命令,无需共享root密码,更安全且可审计。
1. sudo基础配置
编辑sudoers文件
使用visudo命令(推荐,自动检查语法):
visudo # 编辑/etc/sudoers
语法格式
用户名/组名 主机名=(可切换身份) 授权命令(绝对路径)
-
示例1:允许用户
zhangsan执行/sbin/fdisk和/bin/less:zhangsan ALL=(root) /sbin/fdisk, /bin/less -
示例2:允许
wheel组所有用户无需密码执行任何命令:%wheel ALL=(ALL) NOPASSWD: ALL
2. 高级权限控制
禁止执行特定命令
使用!符号排除危险命令:
lisi ALL=(ALL) NOPASSWD: ALL, !/usr/bin/rm, !/bin/passwd root
查看用户权限
sudo -l # 列出当前用户的sudo权限
三、su与sudo的区别与选型
| 特性 | su | sudo |
|---|---|---|
| 密码要求 | 需要目标用户密码 | 需要当前用户密码 |
| 权限粒度 | 切换至目标用户的完整权限 | 可限制仅执行特定命令 |
| 日志记录 | 无详细日志 | 记录所有操作到/var/log/secure |
| 安全性 | 较低(需共享root密码) | 较高(无需共享root密码) |
最佳实践:
-
日常操作:优先使用
sudo,避免直接切换至root。 -
敏感操作:结合
sudo与su,例如sudo su - root(需输入当前用户密码)。
四、安全增强与监控
1. 查看sudo操作日志
所有sudo命令记录在/var/log/secure中:
tail -f /var/log/secure | grep sudo
输出示例:
Feb 6 15:43:15 centos7 sudo: zhangsan : TTY=pts/0 ; COMMAND=/bin/cat /etc/passwd
2. 审计sudoers配置
检查非root用户的sudo权限:
grep "ALL=(ALL)" /etc/sudoers | grep -v "root"
3. 恢复误删的sudo权限
若误删sudo权限,可通过以下步骤恢复:
-
重启系统进入单用户模式。
-
挂载文件系统为可写:
mount -o remount,rw / -
编辑
/etc/sudoers文件修复配置。
五、总结
合理使用su和sudo是Linux系统安全管理的基石:
-
限制su使用:通过PAM和wheel组控制权限。
-
精细化sudo授权:按需分配命令,避免滥用root权限。
-
日志与监控:定期审计sudo日志,及时发现异常操作。

2283

被折叠的 条评论
为什么被折叠?



