Linux 权限是系统安全的核心机制,本文通过 权限模型分解 + 20个实战案例,带你彻底掌握文件权限的控制逻辑。
一、Linux 权限基础模型
权限三要素:
- user (u):文件所有者
- group (g):所属用户组
- others (o):其他用户
权限类型:
r
(read) 读权限 → 4w
(write) 写权限 → 2x
(execute) 执行权限 → 1
二、查看文件权限
<BASH>
# 查看详细信息(第一个字符为文件类型,后续9个字符为权限)
$ ls -l backup.sh
-rwxr-xr-- 1 alice dev_team 1024 Jun 5 10:00 backup.sh
# 各段含义分解
[类型][用户权限][组权限][其他权限]
| | | |
| u=rwx g=r-x o=r--
|--> "-" 表示普通文件,"d" 表示目录
三、权限修改实战案例
案例1:数字模式修改权限(推荐)
<BASH>
# 目标:设置 owner可读可写可执行,组可读可执行,其他人无权限
$ chmod 750 script.sh
# 验证:
$ ls -l script.sh
-rwxr-x--- 1 bob devops 0 Jun 5 11:00 script.sh
案例2:符号模式添加权限
<BASH>
# 给「其他用户」增加执行权限
$ chmod o+x backup.sh
# 等价命令(逗号分隔多操作):
$ chmod u=rwx,g=rx,o=rx backup.sh
案例3:目录权限的特殊性
<BASH>
# 目录需要 x 权限才能进入
$ mkdir logs
$ chmod 644 logs
# 尝试进入会失败:
$ cd logs
bash: cd: logs/: Permission denied
# 正确设置(r+x才能列出内容):
$ chmod 755 logs
四、敏感操作风险场景
案例4:误开 777 权限导致安全漏洞
<BASH>
# 危险操作!任何人可修改文件
$ chmod 777 /var/www/html/config.php
# 应急恢复:设为640(仅owner可写)
$ chmod 640 /var/www/html/config.php
案例5:修复无法删除文件问题
<BASH>
# 父目录无写权限导致无法删除子文件
$ ls -ld /data/
drwxr-xr-x 2 root root 4096 Jun 5 10:00 /data
# 删除文件时报错:
$ rm /data/temp.log
rm: cannot remove '/data/temp.log': Permission denied
# 正确方法:修改父目录权限(或提升用户权限)
$ sudo chmod 757 /data/
五、高级权限技巧
案例6:SUID 权限(继承所有者权限)
<BASH>
# 普通用户执行需要root权限的命令
$ chmod u+s /usr/bin/passwd
$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 59976 Nov 24 2022 /usr/bin/passwd
案例7:Sticky Bit 防误删(如/tmp目录)
<BASH>
# 目录设为粘滞位后,只有文件主人或root能删除
$ chmod +t /shared_dir
$ ls -ld /shared_dir
drwxrwxrwt 2 root root 4096 Jun 5 12:00 /shared_dir
六、权限管理最佳实践
- 最小权限原则:初始设为 750(用户读写执行,组读执行,其他无权限)
- 特殊目录控制:Web目录设置为 755,配置文件设为 640
- 定期检查:用
find
扫描异常权限文件<BASH>
# 查找全局可写文件 $ find / -type f -perm 0777 -ls 2>/dev/null
附:Linux 权限速查表
数字码 | 符号表示 | 适用场景 |
---|---|---|
755 | -rwxr-xr-x | 可执行程序/Web目录 |
644 | -rw-r--r-- | 配置文件/普通文档 |
600 | -rw------- | 敏感数据(仅用户可读写) |
1777 | drwxrwxrwt | 共享临时目录(如 /tmp) |