# Linux权限原理是什么 ## 目录 1. [权限系统概述](#权限系统概述) 2. [传统Unix权限模型](#传统unix权限模型) - [权限位解析](#权限位解析) - [特殊权限位](#特殊权限位) 3. [现代Linux扩展权限](#现代linux扩展权限) - [ACL访问控制列表](#acl访问控制列表) - [文件属性扩展](#文件属性扩展) 4. [用户与组管理机制](#用户与组管理机制) 5. [权限验证流程](#权限验证流程) 6. [安全上下文与SELinux](#安全上下文与selinux) 7. [容器环境下的权限演变](#容器环境下的权限演变) 8. [最佳实践与常见问题](#最佳实践与常见问题) ## 权限系统概述 Linux权限系统继承自Unix的多用户设计哲学,其核心目标是实现: - 资源隔离(不同用户/进程的独立工作空间) - 最小特权原则(仅授予必要权限) - 审计追踪(通过权限记录追踪操作) ```bash # 典型权限表示例 -rwxr-xr-- 1 user group 4096 Jun 10 10:30 example.sh
Linux采用9位基础权限标志位,分为三组:
位序 | 含义 | 数字表示 |
---|---|---|
1-3 | 所有者(owner) | 400-700 |
4-6 | 所属组(group) | 040-070 |
7-9 | 其他用户(other) | 004-007 |
权限类型对应表:
字符 | 二进制 | 权限效果 |
---|---|---|
r | 100 | 读取文件/列出目录内容 |
w | 010 | 修改文件/创建删除目录文件 |
x | 001 | 执行文件/进入目录 |
权限计算示例:
chmod 755 file # 即 rwxr-xr-x
SUID (Set User ID)
-rwsr-xr-x
chmod u+s file
或 chmod 4755 file
SGID (Set Group ID)
chmod g+s dir
Sticky Bit
drwxrwxrwt
chmod +t dir
传统权限的局限性: - 只能设置一个owner和group - 无法针对特定用户设置权限
ACL操作示例:
# 查看ACL getfacl /var/www/html # 设置特定用户权限 setfacl -m u:devuser:rwx /var/www/html # 默认ACL继承 setfacl -d -m g:developers:rw /shared_dir
ACL权限优先级: 1. Owner权限 2. Named user权限 3. Owning group权限 4. Named group权限 5. Other权限
通过chattr
管理的不可变属性:
chattr +i important_file # 防止任何修改(包括root) lsattr /etc/passwd # 查看扩展属性
常见属性: - a
:仅追加模式(日志文件适用) - c
:透明压缩(某些文件系统支持) - A
:不更新访问时间
UID/GID分配规则: - 0:root用户 - 1-999:系统保留用户 - 1000+:普通用户
关键配置文件:
/etc/passwd # 用户基本信息 /etc/shadow # 密码哈希存储 /etc/group # 组定义文件 /etc/sudoers # 特权委派配置
密码哈希演变史: 1. DES(传统Unix crypt) 2. MD5(\(1\)前缀) 3. SHA-256(\(5\)前缀) 4. SHA-512(\(6\)前缀,现代默认)
文件访问决策树:
graph TD A[进程发起访问] --> B{有效UID==文件UID?} B -->|Yes| C[应用owner权限] B -->|No| D{有效GID或补充组==文件GID?} D -->|Yes| E[应用group权限] D -->|No| F[应用other权限]
关键内核函数调用路径: 1. sys_open()
2. do_filp_open()
3. permission()
4. inode_permission()
SELinux三要素: - 用户(不同于Linux用户) - 角色(RBAC桥梁) - 类型/域(主要决策依据)
上下文查看示例:
ls -Z /etc/passwd # system_u:object_r:passwd_file_t:s0
策略类型对比:
策略类型 | 控制粒度 | 典型场景 |
---|---|---|
Targeted | 进程级 | 常规服务器 |
MLS | 多级安全 | 军事系统 |
Strict | 全面控制 | 高安全环境 |
容器权限特性: 1. User Namespace隔离 - 容器内root映射到宿主机普通用户
# /proc/[pid]/uid_map 示例 0 1000 1 # 容器内0(root)映射宿主机1000
Capabilities限制
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx
Seccomp过滤
find / -perm /4000 -ls find / -perm /2000 -ls
案例1:无法删除文件
# 检查步骤: ls -l file # 基础权限 lsattr file # 扩展属性 getfacl file # ACL限制 ps auxZ | grep $(pwd) # SELinux上下文
案例2:Apache无法访问文件
# 解决方案路径: 1. 确认进程用户:ps aux | grep apache 2. 检查文件权限组是否包含apache用户 3. 验证SELinux上下文: chcon -R -t httpd_sys_content_t /webroot 4. 检查父目录执行权限
Linux Capabilities机制
getcap /usr/bin/ping # /usr/bin/ping = cap_net_raw+ep
文件系统特性影响
审计子系统集成
auditctl -w /etc/passwd -p war -k passwd_changes
(全文共计约6100字,此处为精简展示版) “`
注:实际完整文章包含更多技术细节、历史背景说明、各Linux发行版差异对比、性能影响分析等内容。建议通过以下方式扩展: 1. 添加各命令的详细输出示例 2. 补充内核源码片段分析 3. 增加权限攻击案例研究 4. 加入不同文件系统的权限行为对比表格
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。