目录
一、理论学习
1. Linux文件权限基础
- 权限分类与操作:
- 用户(User):文件所有者,拥有最高控制权。
- 组(Group):文件所属用户组,用于共享权限。
- 其他(Others):系统其他用户,默认无特殊权限。
- 操作含义:
- r(读):文件可查看内容(如cat),目录可列出文件(ls)。
- w(写):文件可修改内容,目录可创建/删除子文件。
- x(执行):文件可运行(如脚本),目录可进入(cd)。
- 数值表示法:
- 权限值 = 用户值 + 组值 + 其他值(每类权限独立计算)。
- 示例:
- rwxr-xr-- → 用户7(4+2+1),组5(4+0+1),其他4(4+0+0)。
- 常用组合:755(公共可执行)、644(只读文件)、700(完全私有)。
2. chmod 755 含义
- 用户权限:7(rwx),可读、写、执行。
- 组权限:5(r-x),可读、执行,但不可写(防止误修改)。
- 其他权限:5(r-x),同组权限(允许运行但禁止修改)。
- 典型场景:
- 脚本文件(如/usr/local/bin下的程序),确保所有者可维护,其他用户可执行。
- 公共目录(如网站根目录),允许访问但限制修改。
3. sudo 提权风险
- 功能:以root权限执行命令(如安装软件、修改系统配置)。
- 风险:
- 误操作:sudo rm -rf /(删除所有文件)或sudo dd if=/dev/zero of=/dev/sda(覆盖硬盘)。
- 恶意命令:未经验证的脚本可能通过sudo植入后门或窃取数据。
- 最佳实践:
- 最小权限原则:仅授予必要权限(如通过visudo限制用户只能执行特定命令)。
- 审计日志:启用/var/log/auth.log记录所有sudo操作。
- 替代方案:使用su切换到专用管理账号,而非直接使用root。
二、实操演练(1.5小时)
1. 创建文件并修改权限
touch secret.txt # 创建空文件
chmod 600 secret.txt # 设置权限:用户读写,组和其他无权限
ls -l secret.txt # 验证权限:-rw-------
2. 模拟多用户环境
udo useradd tester # 创建新用户tester
su - tester # 切换到tester用户
# 尝试访问secret.txt(应失败,因权限为600)
cat /home/当前用户/secret.txt # 提示权限拒绝
exit # 退出tester用户
3. 分析文件权限链
# 创建嵌套目录结构
mkdir -p /tmp/testdir/subdir
echo "test" > /tmp/testdir/subdir/file.txt
# 使用namei分析权限链
namei -l /tmp/testdir/subdir/file.txt
- 输出解析:
f: /tmp/testdir/subdir/file.txt
drwxrwxrwt root root /tmp
drwxr-xr-x root root testdir
drwxr-xr-x user user subdir
-rw-r--r-- user user file.txt
逐层检查目录权限,确保路径中每个目录至少有x
权限(允许进入)。
- 关键点:
- 目录必须至少有x权限,否则无法进入(即使有r权限)。
- 粘滞位(t)在/tmp中防止用户删除其他用户的文件。
三、复习巩固(0.5小时)
1. 权限对照表
权限类别 | 读(r) | 写(w) | 执行(x) | 数字组合 |
用户 | 4 | 2 | 1 | 7(4+2+1) |
组 | 4 | 0 | 1 | 5(4+0+1) |
其他 | 0 | 0 | 0 | 0 |
- 组合示例:
- 755 → 用户(rwx), 组(r-x), 其他(r-x)。
- 644 → 用户(rw-), 组(r--), 其他(r--)。
- 700 → 用户(rwx), 组(---), 其他(---)(完全私有)。
2. 快速计算技巧
- 用户权限:直接对应数字(如rwx=7,rw-=6)。
- 组和其他权限:按需叠加(如r-x=5,r--=4)。
- 记忆口诀:
- 4读,2写,1执行,总和即权限值。
- 常用组合:7(全开)、6(读写)、5(读执行)、4(只读)。
四、总结
- 核心目标:通过权限控制实现“最小权限原则”,即仅授予必要权限,平衡安全性与易用性。
- 常见错误:
- 过度开放权限(如777导致数据泄露)。
- 忽略目录执行权限(无法进入目录但可列出文件)。
- 进阶建议:
- ACL(访问控制列表):使用setfacl实现更细粒度控制(如按用户/组单独设置权限)。
- 权限审计:定期运行ls -lR /path | grep -E '777|666'检查高风险权限。
- 自动化工具:使用ansible或puppet统一管理权限策略,避免人为错误。