Linux进阶——selinux

一、selinux的说明:

SELinux意思为安全强化的linux。

SELinux是为使系统中的程序读取自己的文件。例如:selinux可以限制nginx服务器只能读取/etc/nginx下面的文件,不能读取其他服务的文件。SELinux还会限制nginx服务只能使用80和443端口

以下服务都需要在占用相应的服务器端口上:

端口相当于是服务器的门

例行性工作:crontab /etc/crontable

时间服务器:/etc/chrony.conf #端口号为123号

ssh服务器:/ssh/sshd_config #端口号为22号

web服务器(nginx):/etc/nginx/nginx.conf /etc/nginx/conf.d/*.conf 网页文件所在目录 #端口号为80号或者443端口

nfs服务器:/etc/exports autofs客户端自动挂载nfs服务器的nfs目录: /etc/auto.master

dns服务器:/etc/named.conf /var/named/ #端口号为53号

在之前的学习过程中,每当我们需要修改服务时都会使用setenforce 0,让selinux处于permissive状态。

二、工作原理:

SELinux 是通过MAC的方式来控制管理进程,他控制的主体时进程,而目标则是该进程能否读取的文件资源。

安全上下文:主题能不能访问目标除了策略指定的外,主体和目标的安全上下文必须一致才能成功访问。

修改安全上下文:

chcon [-R] [-t type] [-u user] [-r role] 文件

-R:连同该目录下的子目录也同时修改

-t:后面接安全上下文的类型字段

-u:后面接身份识别

-r:后面接角色

chcon [-R] --reference=范例文件 文件 #将文件的安全信息按照范例文件修改

访问过程(以httpd为例):

(1)首先,触发具有httpd_exec_t这个类型的/usr/sbin/httpd这个可执行文件。

(2)该文件类型会让这个文件所造成的主体进程具有httpd这个域,我们的策略已经针对这个域所指定的许多规则,其中包括这个域可以读取的目标资源类型;

(3)由于httpd domain 被设置成可读取httpd_sys_content_t这个类型的文件,因此httpd进程就能读取在/var/www/html目录底下的文件。

(4)最终能否读取/var/www/html文件,还是需要看rwx是否符合linux的权限规范。

三、selinux的动、关闭、与查看:

SELinux的三种状态(一般不开启)

(1)enforcing :强制模式,代表selinux正在运行中,开始限制domain/type

(2)permissive :宽容模式,代表selinux正在运行,不过会有警告信息,但是并不会实际的限制domain/type的访问。

(3)disabled:关闭,SELinux实际上没有实际的运行。

想要将selinux关闭,首先进入配置文件:vim /etc/selinux/config

修改配置:

三、实验selinux对linux服务的影响

基于IP地址的实验:

getenforce #查看selinux状态

setenforce 1 #将selinux设置成强制模式

开启后尝试使用之前的nginx服务:

curl 192.168.68.100 #测试nginx否可以使用

因为打开了selinux的强制模式,所以无法访问。

解决方法:

修改index.html 的访问权限,与系统默认的403报错界面一致

chcon -t httpd_sys_content_t /www/ip/100/index.conf #修改文件权限(添加安全上下文,用ls -Z查看)

(chcon -t httpd_sys_content_t /www/ -R #递归修改文件夹中的所有文件权限,并且以后创建的文件都会继承当前文件夹的格式)

curl 192.168.68.100 #再次测试

成功!

semanage port -l #列出端口的类型值

基于端口的实验:

vim /etc/nginx/conf.d/test_ip.conf #添加以下的配置信息

server{
    listen 192.168.68.110:20000;
    root /www/port/20000;
    location / {}
}

mkdir /www/port/20000 #新建工作目录

echo this is 20000 > /www/port/20000/index.html #新建首页文件

systemctl restart nginx # 因为打开selinux的强制模式,所以无法重启

semanage port -a -t httpd_port_t tcp 20000 #添加服务端口

systemctl restart nginx #成功启动

curl 192.168.68.110:20000 #测试

成功!

相关推荐
Christal_pyy15 分钟前
树莓派4基于Debian GNU/Linux 12 (Bookworm)添加多个静态ipv4网络
linux·网络·debian
csbDD1 小时前
2025年网络安全(黑客技术)三个月自学手册
linux·网络·python·安全·web安全
李狗蛋儿啊1 小时前
zero自动化框架搭建---Git安装详解
运维·git·自动化
小金的学习笔记2 小时前
如何在本地和服务器新建mysql用户和密码
运维·服务器·mysql
s_fox_2 小时前
nginx ngx_http_module(7) 指令详解
运维·nginx·http
EasyNVR2 小时前
EasyRTC智能硬件:实时畅联、沉浸互动、消音护航
运维·服务器·网络·安全·音视频·webrtc·p2p
CarryBest3 小时前
Jenkins 环境搭建---基于 Docker
运维·jenkins
若云止水3 小时前
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_process_options
运维·nginx
s_fox_3 小时前
nginx ngx_http_module(9) 指令详解
运维·nginx·http
风口上的猪20153 小时前
thingboard告警信息格式美化
java·服务器·前端