帮助中心 >  行业资讯 >  云计算 >  玩转Linux安全机制之SELinux

玩转Linux安全机制之SELinux

2025-03-06 10:51:26 103

在过往实验中,为图便捷曾关闭 SELinux 安全机制,但不可否认,SELinux 对于对外发布业务的服务器而言,是极为关键的安全防护屏障,开启状态才是最佳实践。


下面就带大家一起学习一下什么SELinux以及如何使用它。


1. SELinux概述


SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。


2. 实验环境


Linux系统版本:Centos 7.4最小化安装


3. SELinux状态


三种配置状态:

enforcing:强制模式,SELinux已经启动permissive:宽容模式,SELinux已经启动,但不会禁止,只是会提出警告信息disabled:关闭模式,关闭SELinux


3.1 查看当前SELinux状态


getenforce


image.png

SELinux默认状态为enforcing。

3.2 修改SELinux状态

3.2.1 临时关闭,permissive状态


语法:


image.png


setenforce 0


image.png

3.2.2 永久关闭


vi /etc/selinux/config


将:SELINUX=enforcing
改为:SELINUX=disabled


或者在命令行使关闭SELinux:

sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config

临时关闭不需要重启服务器,永久关闭SELinux必须重启服务器。


4. SELinux类型


SELinux有三种类型:

targeted - Targeted processes are protected,
minimum - Modification of targeted policy. Only selected processes are protected.
mls - Multi Level Security protection.


系统默认是targeted类型,可以更改类型:


vi /etc/selinux/config

SELINUXTYPE=targeted


5. 实验操作


接下来我们通过一个实验来讲解SELinux的作用。


5.1 安装Apache


yum install httpd


5.2 编辑测试页


echo 'HTML TEST SELinux !' > /var/www/html/index.html

注意,新创建的index.html存储在Apache默认路径下。


5.3 启动Apache测试

systemctl start httpd  #启动服务

打开网页测试,前提是配置好防火墙。

防火墙配置:


firewall-cmd --permanent --add-service=http
firewall-cmd --reload

网页测试:

image.png



可以看到SELinux在开启状态下访问正常。


5.4 建立别名


什么是别名?就是在本地建立文件夹和网站根目录,不直接把index.html创建到/var/www/html文件夹中,如下操作:


5.4.1 创建文件夹


mkdir /local


5.4.2 创建测试页


echo 'HTML LOCAL TEST SELinux!' > /local/index.html


5.4.3 创建软链接


ln -s /local /var/www/html/local


5.4.4 重启Apache测试


注意是在SELinux开启的情况下。

重启Apache:


systemctl restart httpd

网页测试:


访问被拒绝。


image.png

5.4.5 关闭SELinux再测试


setenforce 0

网页测试:

访问正常。


image.png

6. 配置SELinux文件上下文


我们还是有Apache为例,接着第5点继续操作。


6.1 查看上下文

6.1.1 查看Apache默认文件上下文


ls -lZ /var/www/html/index.html

image.png



上下文属性为:httpd_sys_content_t


6.1.2 查看软链接的文件上下文


ls -lZ /var/www/html/local/index.html

image.png

上下文属性为:default_t


6.1.3 区别


可以清楚的看到,Apache默认的文件目录上下文是httpd_sys_content_t,而在系统本地新建文件目录的上下文是default_t。


6.2 修改上下文


方法一:


chcon -R -t httpd_sys_content_t /local
或是
chcon -R --reference /var/www/html /local


说明:

-R:递归的意思
-t:类型
httpd_sys_content_t:在SELinux中代表Apache目录的类型,所以要设置成这个
--reference:参数一个目录设置另一个目录的类型


注意,以上两种方式都是临时修改,重启服务器后会失效,我们需要的是永久生效,把配置写入内核,需要使用到semanage命令工具。需要先安装一下:


安装:

yum install policycoreutils-python


配置:

semanage fcontext -a -t httpd_sys_content_t "/local(/.*)?"
restorecon -R -v -F /local #刷新完才能生效


说明:

-R:递归的意思
-v:可视化
-F:强制


7. 测试SELinux基于端口上下文


在第6节中配置完了文件级别的SELinux配置,接下来我们再说一下基于端口的上下文。


7.1 创建测试页


echo 'HTML TEST PORT 80 !' > /var/www/html/index.html
mkdir /var/www/8899
echo 'HTML TEST PORT 8899 !' > /var/www/8899/index.html


7.2 配置Apache虚拟主机


vi /etc/httpd/conf.d/0.conf


<virtualhost 192.168.64.138:80>  
   servername 192.168.64.138
   
   documentroot /var/www/html
</virtualhost>


vi /etc/httpd/conf.d/8899.conf
<virtualhost 192.168.64.138:8899>    
   servername 192.168.64.138
   
   documentroot /var/www/8899
</virtualhost>


vi /etc/httpd/conf/httpd.conf
#增加一个监听端口8899
Listen 8899


7.3 配置防火墙


firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8899/tcp
firewall-cmd --reload


7.4 查看SELinux端口上下文


semanage port -l | grep http

image.png


我们自定义的8899端口默认不是SELinux端口上下文中。


7.5 配置SELinux端口上下文


semanage port -a -t http_port_t -p tcp 8899


7.6 重启Apache测试


在没有配置SELinux之前(7.5小节)是无法重启的HTTP服务,可以自行测试一下。

systemctl restart httpd


测试80端口:

image.png


测试8899端口:

image.png


8. 总结


到此,SELinux基本的配置及使用就差不多了,更多的配置在用到时再使用。

SELinux日志默认存储文件:/var/log/audit/audit.log;


蓝队云官网上拥有完善的技术支持库可供参考,大家可自行查阅,更多技术问题,也可以直接咨询。同时,蓝队云整理了运维必备的工具包免费分享给大家使用,需要的朋友可以直接咨询。更多技术知识,蓝队云期待与你一起探索,助力你在 Linux 运维之路上稳步前行。


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: