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

成功!

相关推荐
林鸿风采3 分钟前
内网服务器之间传输单个大文件最佳解决方案
linux·python·文件传输
文牧之8 分钟前
Oracle 通过 ROWID 批量更新表
运维·数据库·oracle
belldeep13 分钟前
WSL 安装 Debian 12 后,Linux 如何安装 redis ?
linux·redis·debian
煤灰24215 分钟前
Linux上的网络编程-初探
linux·网络
IT轻生活24 分钟前
TestNG接口自动化
运维·自动化
马志远的生信笔记32 分钟前
质控脚本来喽
linux·数据分析
深蓝易网36 分钟前
深度拆解!MES如何重构生产计划与排产调度全流程?
大数据·运维·人工智能·重构·架构·制造
✿ ༺ ོIT技术༻39 分钟前
Linux:深入理解网络层
运维·服务器·网络
掘金-我是哪吒1 小时前
分布式微服务系统架构第130集:Python工程化FastAPI,运维Nginx-keepalived+Nginx实现高可用集群
运维·分布式·微服务·系统架构·fastapi
心动啊1211 小时前
docker使用过程中遇到概念问题
运维·docker·容器