centos selinux学习路径
导读:1. SELinux基础认知 SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)开发的内核安全模块,通过**强制访问控制(MAC)**机制限制进程与系统资源的交互,即使进程被攻破,也能有效降低损害范围...
1. SELinux基础认知
SELinux(Security-Enhanced Linux)是美国国家安全局(NSA)开发的内核安全模块,通过**强制访问控制(MAC)**机制限制进程与系统资源的交互,即使进程被攻破,也能有效降低损害范围。其核心组件包括:
- 安全上下文(SELinux Context):每个文件、进程、端口都有唯一的标签(格式:
用户:角色:类型:级别
),是SELinux实施访问控制的基础; - 策略(Policy):定义允许/禁止的操作规则,默认使用
targeted
策略(针对常见服务,如Apache、MySQL); - 模式(Mode):分为
Enforcing
(强制执行,违反规则拒绝操作并记录)、Permissive
(宽容模式,仅记录违规不阻止)、Disabled
(完全关闭SELinux)。
学习前需理解这些基础概念,可通过官方文档或在线教程(如“通俗易懂的Linux之CentOS7.x教程”)快速入门。
2. 环境准备与状态管理
- 检查SELinux状态:使用
sestatus
(详细状态,包括模式、策略名称)或getenforce
(仅当前模式)命令,确认SELinux是否启用及运行模式; - 修改SELinux模式:
- 临时切换:
sudo setenforce 1
(Enforcing)、sudo setenforce 0
(Permissive)(立即生效,重启失效); - 永久修改:编辑
/etc/selinux/config
文件,将SELINUX=
后的值改为enforcing
/permissive
/disabled
,重启系统生效。
注意:生产环境建议保持Enforcing
模式,仅在调试时切换至Permissive
。
- 临时切换:
3. 核心操作技能掌握
- 查看安全上下文:
- 文件/目录:
ls -Z
(如ls -Z /var/www/html
); - 进程:
ps -Z
(如ps -Z | grep httpd
); - 当前用户:
id -Z
(如unconfined_t
表示不受限用户)。
- 文件/目录:
- 修改文件上下文:
- 临时修改(重启失效):
sudo chcon -t 类型 文件路径
(如sudo chcon -t httpd_sys_content_t /var/www/html/index.html
); - 永久修改:
- 使用
semanage fcontext
添加规则:sudo semanage fcontext -a -t 类型 "文件路径正则"
(如sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?"
); - 恢复上下文:
sudo restorecon -Rv 文件路径
(递归恢复目录)。
- 使用
- 临时修改(重启失效):
- 管理布尔值(Boolean):布尔值是SELinux中可开关的小规则(如允许Apache访问网络),常用命令:
- 查看所有布尔值:
getsebool -a
; - 查询特定布尔值:
getsebool 布尔名
(如getsebool httpd_can_network_connect
); - 修改布尔值(临时):
setsebool 布尔名 值
(1
=开启,0
=关闭); - 永久修改:加
-P
参数(如sudo setsebool -P httpd_can_network_connect 1
)。
- 查看所有布尔值:
4. 日志分析与故障排查
- 查看SELinux日志:默认日志路径为
/var/log/audit/audit.log
,可使用ausearch
命令过滤AVC(访问控制违规)事件:sudo ausearch -m avc -ts recent
; - 生成自定义策略:使用
audit2allow
工具将日志中的违规信息转换为策略模块:- 提取违规日志:
sudo ausearch -m avc -ts recent | audit2why
(分析违规原因); - 生成策略文件:
sudo ausearch -c '进程名' --raw | audit2allow -M 策略名
(如sudo ausearch -c 'httpd' --raw | audit2allow -M my_httpd_policy
); - 加载策略模块:
sudo semodule -i 策略名.pp
(如sudo semodule -i my_httpd_policy.pp
)。
提示:优先通过调整布尔值或上下文解决问题,避免过度生成自定义策略。
- 提取违规日志:
5. 实战案例练习
- 案例1:允许Apache访问自定义端口:
- 添加8080端口到
http_port_t
类型:sudo semanage port -a -t http_port_t -p tcp 8080
; - 修改Apache配置文件(
/etc/httpd/conf/httpd.conf
),将Listen 80
改为Listen 8080
; - 重启Apache:
sudo systemctl restart httpd
。
- 添加8080端口到
- 案例2:修复WordPress上传文件权限问题:
- 查看上传目录上下文:
ls -Z /var/www/html/wp-content/uploads
(通常为httpd_sys_content_t
); - 修改为允许写入的类型:
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/wp-content/uploads(/.*)?"
; - 恢复上下文:
sudo restorecon -Rv /var/www/html/wp-content/uploads
。
- 查看上传目录上下文:
- 案例3:Passwd命令无法修改密码:
- 查看
shadow
文件上下文:ls -Z /etc/shadow
(应为shadow_t
); - 若上下文错误,使用
chcon -t shadow_t /etc/shadow
临时修复,或通过semanage fcontext
永久修改。
- 查看
6. 进阶学习方向
- 自定义策略编写:学习SELinux策略语言(.te文件),编写更精细的规则(如限制特定进程访问特定文件);
- SELinux用户与角色管理:通过
semanage user
管理SELinux用户(如user_u
、staff_u
),实现更严格的身份隔离; - 性能优化:通过
seinfo
分析策略复杂度,移除不必要的规则,降低SELinux对系统性能的影响; - 集成应用场景:结合Docker、Kubernetes等容器技术,配置SELinux策略保障容器安全(如限制容器访问宿主机文件系统)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos selinux学习路径
本文地址: https://pptw.com/jishu/715404.html