以下是关于 Linux 内核 6.x 版本(以 2026 年初主流 6.6 ~ 6.14+ 为基准)权限管理 的全解析。Linux 权限管理是系统安全的核心,涵盖用户态(如文件权限、用户组)和内核态(如系统调用检查、MAC 机制)。内容基于内核文档、学术论文和实践指南整理,力求全面、实用。重点包括基础模型、命令工具、高级扩展及内核实现演进。
1. 权限管理基础:DAC(Discretionary Access Control)模型
Linux 默认使用 DAC 模型,用户可自行决定文件/目录的访问权限。每个文件/目录有三个访问实体:Owner(所有者)、Group(组) 和 Others(其他人)。每个实体有三种权限:Read (r)、Write (w) 和 Execute (x)。
- 权限表示:通过
ls -l查看,如-rwxr-xr--,前10位是类型+权限(- 为文件,d 为目录;rwx 为 owner,r-x 为 group,r– 为 others)。 - 数字表示:八进制模式,r=4, w=2, x=1(如 755 = rwxr-xr-x)。
| 权限类型 | 文件含义 | 目录含义 |
|---|---|---|
| r (Read) | 查看文件内容 | 列出目录内容 (ls) |
| w (Write) | 修改/删除文件内容 | 创建/删除/重命名目录内文件 |
| x (Execute) | 执行文件(如脚本/二进制) | 进入目录 (cd) 或遍历 (find 等) |
内核 6.x 变化:权限检查更高效,集成 LSM(Linux Security Modules)框架,支持动态钩子(如 Landlock 在 5.13+ 引入,6.x 优化),允许细粒度沙箱。
2. 用户与组管理
权限基于用户(UID)和组(GID)。root (UID=0) 有最高权限,可绕过大部分检查。
核心命令
| 命令 | 用途 | 示例 |
|---|---|---|
| useradd | 创建用户 | useradd -m -s /bin/bash newuser |
| usermod | 修改用户(组、shell 等) | usermod -aG sudo newuser (加 sudo 组) |
| userdel | 删除用户 | userdel -r newuser (删除家目录) |
| groupadd | 创建组 | groupadd devgroup |
| groupmod | 修改组 | groupmod -n newname oldname |
| groupdel | 删除组 | groupdel devgroup |
| passwd | 设置/修改密码 | passwd newuser |
| chage | 密码策略(过期、锁定) | chage -M 90 newuser (密码90天过期) |
| id | 查看用户/组 ID | id newuser |
- 组类型:Primary Group(主组,用户创建文件时默认组)和 Supplementary Groups(附加组,支持多组)。
- 最佳实践:使用最小权限原则(Least Privilege),避免 root 日常操作。
3. 文件/目录权限操作
核心命令
| 命令 | 用途 | 示例 |
|---|---|---|
| chmod | 修改权限(符号/数字模式) | chmod u+rw file (用户加读写) 或 chmod 644 file |
| chown | 修改所有者 | chown newuser:newgroup file |
| chgrp | 修改组 | chgrp devgroup file |
| umask | 设置默认权限掩码(新建文件权限=777-umask) | umask 022 (默认文件 644, 目录 755) |
| setfacl | 设置 ACL(Access Control Lists) | setfacl -m u:newuser:rwx dir (额外权限) |
- 符号模式:u (user), g (group), o (others), a (all);+ (加), – (减), = (设置)。
- 递归:加
-R如chmod -R 755 /dir。 - 特殊位:
- SUID (4xxx):执行时以 owner 权限运行(如 /usr/bin/passwd)。
- SGID (2xxx):文件继承组权限;目录内新文件继承组。
- Sticky Bit (1xxx):目录内文件仅 owner 可删除(如 /tmp)。
- ACL 扩展:标准权限不足时用,支持细粒度(如多个用户特定权限)。启用需文件系统支持(如 ext4 的 acl 选项)。
4. 高级权限管理:MAC 与 Capabilities
DAC 易被绕过(如用户误设权限),故引入 MAC(Mandatory Access Control)。
SELinux(Security-Enhanced Linux)
- 内核集成:自 2.6 起,6.x 优化性能(如更快的上下文切换)。默认在 RHEL/Fedora 等启用。
- 原理:每个进程/文件有 SELinux 上下文(user:role:type:level),策略(如 targeted)定义允许操作。
- 命令:
sestatus:查看状态。setenforce 0/1:临时禁用/启用。chcon:修改上下文,如chcon -t httpd_sys_content_t file。restorecon:恢复默认上下文。- 模式:Enforcing (强制)、Permissive (记录但不阻挡)、Disabled。
- 优势:防零日漏洞;缺点:配置复杂。
AppArmor
- 内核模块:自 2.6.36 起,6.x 支持路径-based 策略。
- 命令:
aa-status、aa-enforce /etc/apparmor.d/profile。 - 优势:比 SELinux 简单,聚焦应用配置文件。
Capabilities
- 分解 root 权限(如 CAP_SYS_ADMIN),非 root 进程可获特定能力。
- 命令:
setcap cap_net_bind_service+eip binary(允许绑定 <1024 端口)。 - 内核 6.x:更多细粒度 caps,如 CAP_BPF (eBPF 相关)。
其他扩展
- Landlock(5.13+,6.x 成熟):用户态沙箱,限制文件访问。
- seccomp:过滤 syscall,容器常用。
- Namespaces/Cgroups:隔离权限空间。
5. 内核级权限实现
- 权限检查:在 VFS(Virtual File System)层,通过 inode_permission() 等函数。内核使用 cred 结构存储进程权限(UID/GID/caps)。
- 钩子:LSM 框架允许模块(如 SELinux)插入检查点。
- 分析工具:PeX 框架用于静态分析内核权限检查,识别漏洞。
- 6.x 优化:减少权限相关 syscall 开销,支持 eBPF 动态监控。
6. 性能与安全优化
- 监控:用
getfacl查看 ACL;auditd记录权限事件。 - 常见问题:权限过松导致泄露;SUID 滥用成提权漏洞。
- 最佳实践:
- 定期审计:
find / -perm -4000查 SUID 文件。 - 容器化:Docker/Podman 用非 root 运行。
- 最小化:用 sudoers 配置精确 sudo 权限(如
/etc/sudoers)。 - 性能影响:MAC 如 SELinux 增加 ~5-10% 开销,但 6.x 通过缓存优化降低。
如果需要具体示例代码、内核源码剖析(如 inode_permission.c)或针对特定发行版(如 Ubuntu 26.04)的调整,继续问!