- 工信部备案号 滇ICP备05000110号-1
- 滇公安备案 滇53010302000111
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
在过往实验中,为图便捷曾关闭 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
SELinux默认状态为enforcing。
3.2 修改SELinux状态
3.2.1 临时关闭,permissive状态
语法:
setenforce 0
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
网页测试:
可以看到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
网页测试:
访问被拒绝。
5.4.5 关闭SELinux再测试
setenforce 0
网页测试:
访问正常。
6. 配置SELinux文件上下文
我们还是有Apache为例,接着第5点继续操作。
6.1 查看上下文
6.1.1 查看Apache默认文件上下文
ls -lZ /var/www/html/index.html
上下文属性为:httpd_sys_content_t
6.1.2 查看软链接的文件上下文
ls -lZ /var/www/html/local/index.html
上下文属性为: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
我们自定义的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端口:
测试8899端口:
8. 总结
到此,SELinux基本的配置及使用就差不多了,更多的配置在用到时再使用。
SELinux日志默认存储文件:/var/log/audit/audit.log;
售前咨询
售后咨询
备案咨询
二维码
TOP