1、SELinux 简介
1.作用
SELinux(Security-Enhanced Linux)是Linux内核的强制访问控制(MAC)安全子系统,提供更细粒度的权限控制,防止进程或用户越权操作。
2. 核心思想
- 最小权限原则:进程/用户只能访问其明确需要的资源。
- 基于标签的访问控制:所有资源(文件、端口、进程)被赋予安全上下文(Security
3.工作模式
| 模式 | 描述 |
| Enforcing | 强制执行策略,拒绝非法操作并记录日志。 |
| Pernissive | 仅记录违规操作,不阻止(用于调试)。 |
| Disabled | 完全关闭SELinux(需重启生效)。 |
2、基础操作命令
1. 查看SELinux状态
getenforce# 查看当前模式
sestatus# 详细状态(模式/策略类型)
2. 切换工作模式
setenforce 0# 切换到Permissive模式
setenforce 1# 切换到Enforcing模式
注意:setenforce仅临时生效,永久修改需编辑 /etc/selinux/config 文件。
3、安全上下文(Security Context)
1. 查看上下文
ls -Z /var/www/html # 查看文件/目录的上下文
ps -Z -C httpd# 查看进程的上下文
2. 修改上下文
chcon命令
| 选项 | 说明 |
| -t | 设置安全上下文的类型部分 |
| -u | 设置安全上下文的用户部分 |
| -r | 设置安全上下文的角色部分 |
| -R | 递归处理文件和目录 |
| -h | 显示帮助信息 |
| -v | 显示操作详情 |
| --reference=FILE | 使用指定文件的安全上下文 |
| --version | 显示版本信息 |
选项使用案例
1.显示帮助信息
[root@localhost html]# chcon --help
用法: chcon [选项]... 上下文 文件...
或: chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件...
或: chcon [选项]... --reference=参考文件 文件...
将每个指定<文件>的安全上下文变更至指定<上下文>。
使用 --reference 选项时,把指定<文件>的安全上下文设置为与<参考文件>相同。
必选参数对长短选项同时适用。
--dereference 影响每个符号链接的原始引用文件(这是默认行为),而非
符号链接本身
-h, --no-dereference 只影响符号链接,而非被引用的任何文件
-u, --user=用户 设置指定<用户>的目标安全上下文
-r, --role=角色 设置指定<角色>的目标安全上下文
-t, --type=类型 设置指定<类型>的目标安全上下文
-l, --range=范围 设置指定<范围>的目标安全上下文
--no-preserve-root 不特殊对待“/”(默认行为)
--preserve-root 不允许在“/”上递归操作
--reference=参考文件 使用指定<参考文件>的安全上下文,而非指定<环境>值
-R, --recursive 递归操作文件和目录
-v, --verbose 为每个处理的文件输出诊断信息
以下选项是在指定了 -R 选项时被用于设置如何遍历目录结构体系。
如果您指定了多于一个选项,那么只有最后一个会生效。
-H 如果命令行参数是一个指向目录的符号链接,则对其
进行遍历
-L 遍历每一个遇到的指向目录的符号链接
-P 不遍历任何符号链接(默认)
--help 显示此帮助信息并退出
--version 显示版本信息并退出
GNU coreutils 在线帮助:<https://www.gnu.org/software/coreutils/>
请向 <http://translationproject.org/team/zh_CN.html> 报告任何翻译错误
完整文档 <https://www.gnu.org/software/coreutils/chcon>
或者在本地使用:info '(coreutils) chcon invocation'
2.设置文件类型
将 /var/www/html/index.html 的上下文类型设为 httpd_sys_content_t:
sudo chcon -t httpd_sys_content_t /var/www/html/index.html
3.设置角色部分
将 /home/user/file.txt 的角色部分设为 object_r:
sudo chcon -r object_r /home/user/file.txt
4.详细模式操作
启用详细输出,修改 ~/.ssh/config 的上下文类型:
sudo chcon -v -t ssh_home_t ~/.ssh/config
- 实际执行时,若未添加 -v 参数,chcon 默认不输出成功信息,仅在出错时显示错误。
- 使用 -v 参数可查看操作详情(如上述表格中的“示例消息”)。
semanage 命令
选项使用案例
1. 管理端口绑定
将TCP端口 8080 标记为HTTP服务端口:
sudo semanage port -a -t http_port_t -p tcp 8080
说明:允许Apache等HTTP服务使用8080端口。
2.管理文件上下文规则
为自定义Web目录 /opt/webapps 设置默认上下文:
sudo semanage fcontext -a -t httpd_sys_content_t "/opt/webapps(/.*)?"
sudo restorecon -Rv /opt/webapps
说明:添加规则后需运行 restorecon 立即生效。
3.启用布尔值
允许HTTP服务访问网络:
sudo semanage boolean --on httpd_can_network_connect
说明:无需重启服务,立即生效。
4. 查看当前端口绑定
列出所有HTTP相关端口
semanage port -l | grep http_port_t
输出示例:
http_port_t tcp 80, 443, 8080
4、日志分析与故障排除
1. 查看SELinux日志
tail -f /var/log/audit/audit.log # 直接查看原始日志
ausearch -m AVC -ts recent# 使用工具过滤日志
2. 生成解决方案建议
grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mypolicy
semodule -i mypolicy.pp# 编译并加载自定义策略
2076

被折叠的 条评论
为什么被折叠?



