1. 用户与组:Linux权限体系的基础
1.1 用户与组的哲学设计
- 最小权限原则:Linux默认禁止用户直接以root身份操作,强制权限隔离。
- 用户分类:
- 普通用户:仅拥有个人目录(/home/user)的操作权限。
- 系统用户:用于运行服务(如www-data运行Web服务),无登录权限。
- 超级用户(root):拥有系统完全控制权。
- 组的作用:将用户分类管理,简化权限分配。例如,将运维团队加入ops组,统一授予日志访问权限。
1.2 用户与组管理命令详解
用户管理
命令 | 用途 | 示例 |
useradd | 创建用户 | useradd -m -s /bin/bash alice |
usermod | 修改用户属性 | usermod -aG sudo bob(将用户加入sudo组) |
userdel | 删除用户 | userdel -r alice(同时删除家目录) |
passwd | 设置用户密码 | passwd alice |
id | 查看用户信息 | id alice |
组管理
命令 | 用途 | 示例 |
groupadd | 创建组 | groupadd developers |
groupmod | 修改组属性 | groupmod -n dev developers(重命名组) |
groupdel | 删除组 | groupdel dev |
gpasswd | 管理组成员 | gpasswd -a alice dev(将用户加入组) |
2. 文件权限:数学模式与符号模式的终极解析
2.1 权限的二进制本质
- 权限位:每个文件权限由3组(所有者/组/其他用户)的rwx(读/写/执行)组成,对应3位二进制数。
- 数学模式计算:
- r=4, w=2, x=1,例如rwxr-xr--对应754:
Bash
所有者:4+2+1=7
组:4+0+1=5
其他:4+0+0=4
权限矩阵图
Bash
| 权限符号 | 二进制 | 数学值 | 描述 |
|----------|--------|--------|--------------------------|
| rwx | 111 | 7 | 读、写、执行 |
| rw- | 110 | 6 | 读、写 |
| r-x | 101 | 5 | 读、执行 |
| r-- | 100 | 4 | 只读 |
| --- | 000 | 0 | 无权限 |
2.2 权限管理命令
修改权限
# 数学模式
chmod 755 script.sh # 所有者rwx,组和其他r-x
# 符号模式
chmod u+x,g-w,o=r file.txt # 所有者增加执行,组删除写,其他设为只读
修改所有者与所属组
chown alice:developers file.txt # 修改所有者和组
chown -R alice:developers /data # 递归修改目录权限
3. 高级权限控制:ACL与SELinux实战
3.1 ACL(访问控制列表)
- 解决的问题:传统权限模型无法针对单个用户或组设置权限。
- 启用ACL:
# 检查文件系统是否支持ACL
tune2fs -l /dev/sda1 | grep "Default mount options"
# 挂载时启用ACL
mount -o remount,acl /
ACL操作命令:
# 为用户alice添加读写权限
setfacl -m u:alice:rw file.txt
# 为组dev添加执行权限
setfacl -m g:dev:x script.sh
# 查看ACL权限
getfacl file.txt
ACL权限继承(目录默认权限)
# 设置目录的默认ACL权限(新建文件自动继承)
setfacl -d -m u:alice:rwx /shared_dir
3.2 SELinux:安全增强的终极防线
SELinux核心概念
- 安全上下文:每个文件、进程和用户都有SELinux标签(如system_u:object_r:httpd_sys_content_t)。
- 策略规则:定义哪些上下文可以相互访问。
生产案例:Web服务器权限问题
- 问题:Nginx无法读取/var/www/html下的文件,即使传统权限正确。
- 排查:
# 查看文件SELinux上下文
ls -Z /var/www/html/index.html
# 输出:system_u:object_r:admin_home_t:s0 index.html
- 问题:文件类型应为httpd_sys_content_t,实际为admin_home_t。
- 修复:
# 修改文件SELinux类型
chcon -t httpd_sys_content_t /var/www/html/index.html
# 永久生效(需更新策略或使用semanage)
semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
restorecon -Rv /var/www/html
SELinux模式管理
# 查看当前模式
getenforce # 输出:Enforcing/Permissive/Disabled
# 临时切换模式
setenforce 0 # Permissive(仅记录不阻止)
setenforce 1 # Enforcing
# 修改配置文件永久生效
vi /etc/selinux/config
SELINUX=enforcing
4. 权限灾难案例与恢复
4.1 案例一:误执行chmod -R 777 /
- 后果:系统关键文件(如/etc/shadow)权限暴露,安全防线崩溃。
- 紧急恢复:
- 进入救援模式或Live CD。
- 重新挂载根目录:
mount -o remount,rw /
- 使用备份权限修复:
# 从包管理器提取默认权限
rpm --setperms # CentOS/RHEL
dpkg-reconfigure -f all # Ubuntu/Debian
- 关键目录手动修复:
chmod 700 /root
chmod 644 /etc/passwd /etc/group
chmod 400 /etc/shadow
4.2 案例二:Sudo权限配置错误导致运维瘫痪
- 错误配置:
# 错误示例:允许普通用户无密码执行rm -rf
bob ALL=(ALL) NOPASSWD: /bin/rm -rf /
- 通过单用户模式或物理控制台登录。
2. 编辑/etc/sudoers或/etc/sudoers.d/下的配置文件:
visudo # 必须使用visudo命令编辑,防止语法错误
- 限制高危命令:
# 正确示例:仅允许删除特定目录
bob ALL=(ALL) NOPASSWD: /bin/rm -rf /data/tmp/*
5. 企业级权限审计与监控
5.1 审计工具:auditd
- 安装与配置:
# 安装auditd
yum install audit # CentOS/RHEL
apt-get install auditd # Ubuntu/Debian
# 监控/etc/passwd文件访问
auditctl -w /etc/passwd -p war -k passwd_access
- 查看审计日志:
ausearch -k passwd_access -i # 显示可读格式的日志
5.2 实时权限监控脚本
- 脚本功能:检测敏感文件权限变更并告警。
#!/bin/bash
MONITOR_FILES=("/etc/passwd" "/etc/shadow" "/etc/sudoers")
for file in "${MONITOR_FILES[@]}"; do
current_perm=$(stat -c "%a" "$file")
last_perm=$(cat "/var/log/${file}_perm.log")
if [ "$current_perm" != "$last_perm" ]; then
echo "警报:$file 权限已从 $last_perm 变为 $current_perm!" | mail -s "权限变更告警" admin@example.com
echo "$current_perm" > "/var/log/${file}_perm.log"
fi
done
- 加入定时任务:
crontab -e
* * * * * /path/to/permission_monitor.sh
6. 权限管理进阶:LDAP与RBAC
6.1 集中化管理:LDAP集成
- OpenLDAP部署:
# Ubuntu安装
apt-get install slapd ldap-utils
dpkg-reconfigure slapd # 交互式配置
# 创建用户条目
dn: uid=alice,ou=people,dc=example,dc=com
objectClass: inetOrgPerson
uid: alice
cn: Alice Smith
userPassword: {SSHA}hashed_password
6.2 基于角色的访问控制(RBAC)
- 角色定义:
# 创建角色组
groupadd devops
groupadd developers
# 通过sudoers分配权限
%devops ALL=(ALL) /usr/bin/systemctl restart nginx
%developers ALL=(ALL) NOPASSWD: /usr/bin/git pull
总结:构建坚不可摧的权限体系
权限管理是Linux运维的“守门人”,从基础的用户/组到企业级的SELinux和LDAP,每一层防护都在为系统安全加锁。通过本节的学习,你已掌握从日常操作到灾难恢复的全套技能。下一节我们将深入软件管理,揭秘YUM/APT的底层逻辑与私有仓库搭建!