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

成功!

相关推荐
flying robot1 分钟前
ELK单节点集群配置
运维·elk·jenkins
OliverH-yishuihan4 分钟前
下载、安装和设置 Linux 工作负载
linux·运维·服务器
沈健_算法小生4 分钟前
Ubutun22.04离线部署Jenkins最新版
运维·jenkins
MediaTea8 分钟前
思考与练习(第四章 程序组成与输入输出)
java·linux·服务器·前端·javascript
松涛和鸣10 分钟前
35、Linux IPC进阶:信号与System V共享内存
linux·运维·服务器·数据库·算法·list
惊鸿一博13 分钟前
Linux文件同步/镜像—rsync
linux·运维
守城小轩13 分钟前
基于Chrome140的Quora账号自动化(关键词浏览)——脚本撰写(二)
运维·自动化·chrome devtools·浏览器自动化·浏览器开发
SunnyDays101115 分钟前
Python 实现 PDF 文档压缩:完整指南
linux·开发语言·python
金海境科技17 分钟前
【服务器数据恢复】H3C华三Ceph分布式存储文件丢失数据恢复案例
服务器·经验分享·分布式·ceph
weixin_3077791320 分钟前
Jenkins Pipeline: Input Step插件详解与实践指南
运维·开发语言·自动化·jenkins·etl