SELinux 安全子系统
简介
SELinux 是美国国家安全局在 Linux 开源社区的帮助下开发的一个 强制访问控制 安全子系统
RHEL7 系统使用 SELinux 技术的目的是 为了让各个 服务进程 都受到约束 使其仅获取到本应获取的资源
例如 您在自己的电脑上下载了一个美图软件 当您全神贯注地使用它给照片进行美颜的时候 它却在后台默默监听着浏览器中输入的密码信息 而这显然不应该是它应做的事情
SELinux 安全子系统就是为了杜绝此类情况而设计的,它能够从多方面监控违法行为 对服务程序进行限制 [ SELinux 域 限制 服务程序做不了出格的事情 ] ;对文件资源限制 [ SELinux 安全上下文 确保文件资源只能被其所属的服务程序进行访问 ]
SELinux 机制
所有的进程和文件都被 标记一种类型,类型定义进程的操作域,每一个进程都被限制在自己的活动
域中,SElinux 策略规则定义了 进程和文件之间的访问权限,仅当有明确的策略规则时才会被允许
三种配置模式
- enforcing:强制启用安全策略模式 [ 一旦发现 直接阻止 ]
- permissive:只发出警告而不强制拦截 [ 只记录 不阻止 ]
- disabled:对于越权的行为不警告也不拦截 [ 关闭状态 ]
vim /etc/selinux/config
SELinux 服务的主配置文件中 定义的是 SELinux 的 默认运行状态 重启系统才生效
获得当前 SELinux 服务的运行模式
getenforce
修改 SELinux 当前的运行模式 [ 0 为禁用,1 为启用 ]
setenforce [0|1]
0 设置为 permissive
1 设置为 enforcing
注意 这种修改只是临时的 系统重启后就会失效
查看 SELinux 启用状态
sestatus
我们可以通过 ls -Z 这个命令来查看我们文件的 SELinux 上下文信息 [ 安全标签 ]
ls -Z index.html
httpd_sys_content_t :这个就是 SELinux的上下文信息 也就是 安全标签
表示 index.html 文件 只能在 httpd.sys_content_t 活动域 运行
测试
安装 httpd
yum install httpd -y
在 /var/www/html 下创建 index.html 文件
cd /var/www/html/
vim index.html
[root@RHCE8 html]# ls -Z index.html
unconfined_u:object_r:httpd_sys_content_t:s0 index.html
systemctl restart httpd
systemctl enable httpd
在本机访问 http://127.0.0.1/index.html 网页
我们在 家目录 创建一个 test.index
ll -Z test.index
他的 SELinux 上下文信息 显然和在 html 目录下创建的 不一样
我们将他 移动至 html 目录 [ 保证他的安全上下文信息不会发生改变 ]
mv test.index /var/www/html/
重启 httpd 服务 >> 访问
安全上下文 为 httpd_sys_content_t 的 index.html 可以访问
安全上下文 为 admin_home _t 的 test.html 无法访问
这就是 SELinux 的机制
如何让 test.html 也能被访问
- 使用命令 让 test.html 能够继承 服务器 html 的 安全上下文
restorecon -Rv ./*
继承成功
完成
测试 2
修改 http 配置文件
vim /etc/httpd/conf/httpd.conf
我们将 listen 端口 改为 82
然后重启 httpd 服务
报错
我们可以通过 journalctl -xe 命令查看报错信息
翻译上述报错
可以发现是 SELinux 在阻止
当然 我们也可以通过 查看 /var/log/messages 找到报错原因
tail -f /var/log/messages
semanage 命令
用于管理 SELinux 的策略
semanage port -l | grep http
➢ -l 参数用于查询;
➢ -a 参数用于添加;
➢ -m 参数用于修改;
➢ -d 参数用于删除。
如图 http_port_t 也就是说 httpd 服务端口
可以为 80, 81, 443, 488, 8008, 8009, 8443, 9000
测试
vim httpd.conf
重启服务
成功
尝试添加 端口
semanage port -a -t http_port_t -p tcp 82
再次修改 httpd 配置文件
vim httpd.conf
systemctl restart httpd
完成