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

成功!

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式