进阶实战:权限体系实战
Linux 是一个多用户系统,权限(Permissions)是保护数据不被误删、系统不被攻击的第一道防线。如果你只会 chmod 777,那么你正在将系统置于巨大的风险之中。
1. 拆解 rwx 权限位
当你运行 ls -l 时,你会看到类似 -rwxr-xr-- 的字符串。
| 字符 | 位置 | 含义 | 数字表示 |
|---|---|---|---|
| r | Read | 可读取文件内容 / 列出目录清单 | 4 |
| w | Write | 可修改文件 / 在目录内增删文件 | 2 |
| x | Execute | 可执行脚本/程序 / 可进入目录 | 1 |
三组权限
- 第一组 (
rwx): 所有者 (Owner) 的权限。 - 第二组 (
r-x): 所属组 (Group) 的权限。 - 第三组 (
r--): 其他人 (Others) 的权限。
2. 特殊权限位:SUID, SGID 与 Sticky Bit
除了基础的 rwx,Linux 还有三个高阶权限:
2.1 SUID (Set User ID)
- 表现: 所有者权限位显示为
s(如-rwsr-xr-x)。 - 作用: 让普通用户在执行该程序时,临时获得该程序所有者的权限。
- 例子:
passwd命令。为了修改/etc/shadow,普通用户必须临时“变身”为 root。
2.2 Sticky Bit (粘滞位)
- 表现: 其他人权限位显示为
t(如drwxrwxrwt)。 - 作用: 确保一个目录下,用户只能删除自己创建的文件。
- 例子:
/tmp目录。
3. 最小权限原则 (POLP)
在生产环境下,你应该遵循:只赋予完成任务所需的最小权限。
Web 目录不要设为 777。应该将所有者设为 www-data 或 nginx 用户,并给目录 755,文件 644。
日志文件应该只有 root 或特定审计组可读,权限应设为 600 或 640。
4. 实战:ACL (访问控制列表)
传统的 ugo 权限只能针对一个用户和一个组。如果你想让文件对 A 用户读,B 用户写,C 用户无权限,就需要 ACL。
# 赋予 susu 用户对 file.txt 的读取权限
setfacl -m u:susu:r file.txt
# 查看 ACL 权限
getfacl file.txt