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 #测试

成功!

相关推荐
srrsheng26 分钟前
电商项目DevOps一体化运维实战
运维·devops
万象.1 小时前
Linux网络
linux·网络
望获linux2 小时前
【Linux基础知识系列】第六十四篇 - 了解Linux的硬件架构
linux·运维·服务器·开发语言·数据库·操作系统·嵌入式软件
汐零号机2 小时前
Ubuntu启动任何应用慢(2~4秒)排查和分析
linux·ubuntu
老实巴交的麻匪2 小时前
(一)学习、实践、理解 CICD 与 DevOps
运维·敏捷开发·自动化运维
别退2 小时前
fmriprep安装与试用_附ubuntu分区大小调整
linux·运维·ubuntu
段嘉许OvO2 小时前
jangow-01-1.0.1靶机攻略
linux·运维·服务器
光电的一只菜鸡2 小时前
linux shell从入门到精通(二)——变量操作
linux·运维·chrome
程思扬2 小时前
无界设计新生态:Penpot开源平台与cpolar的云端协同创新实践
大数据·linux·服务器·前端·经验分享·ubuntu·开源
大白菜13242 小时前
Linux的基本操作以及文件的权限
linux·运维·服务器