百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

selinux 安全机制(selinux-policy)

nanshan 2024-10-15 11:28 36 浏览 0 评论

长久以来,每当遇到授权问题或者新安装的主机,我的第一反应是通setenforce 0命令禁用SELinux,来减少产生的权限问题,但是这并不是一个良好的习惯。这篇文章尝试对SELinux的基本概念和用法进行简单介绍,并且提供一些更深入的资料。


Linux下默认的接入控制是DAC,其特点是资源的拥有者可以对他进行任何操(读、写、执行)。当一个进程准备操作资源时,Linux内核会比较进程和资源的UID和GID,如果权限允许,就可以进行相应的操作。此种方式往往会带来一些问题,如果一个进程是以root的身份运行,也就意味着他能够对系统的任何资源进行操作,而且不被限制。 假如我们的软件存在漏洞呢?这个往往是一个灾难性的问题。因此,就引出了另外的一种安全接入控制机制MAC,Linux下的一种现实是SELinux,也就是我们将要讨论的内容。


SELinux 属于MAC的具体实现,增强了Linux系统的安全性。MAC机制的特点在于,资源的拥有者,并不能决定谁可以接入到资源。具体决定是否可以接入到资源,是基于安全策略。而安全策略则是有一系列的接入规则组成,并仅有特定权限的用户有权限操作安全策略。


一个简单的例子,则是一个程序如果要写入某个目录下的文件,在写入之前,一个特定的系统代码,将会依据进程的Context和资源的Context查询安全策略,并且根据安全策略决定是否允许写入文件


SELinux的软件设计架构是参照Flask,Flask是一种灵活的操作系统安全架构,并且在Fluke research operating system中得到了实现。Flask的主要特点是把安全策略执行代码和安全策略决策代码,划分成了两个组件。安全策略决策代码在Flask架构中称作Security Server。除了这两个组件以外,另外一个组VectorCache(AVC), 主要提供策略决策结果的缓存,以此提高Security Server的性能。其具体执行流程为,安全策略执行代码通过AVC查询Security Server的安全策略决策结果,并将其缓存以备下次使用。


前面两部分介绍了MAC机制和Flask架构,最终SELinux的实现是依赖于Linux提供的Linux Security Module框架简称为LSM。其实LSM的名字并不是特别准确,因为他并不是Linux模块,而是一些列的hook,同样也不提供任何的安全机制。LSM的的重要目标是提供对linux接入控制模块的支持。


LSM 在内核数据结构中增加了安全字段,并且在重要的内核代码(系统调用)中增加了hook。可以在hook中注册回调函数对安全字段进行管理,以及执行接入控制。


SELinux,Security-Enhanced Linux:是由美国NSA国家安全局提供的一套基于内核的增强 的强制安全保护机制,针对用户、进程、文档标记安全属性并实现保护性限制。

SELinux安全体系直接集成在Linux内核中,包括三种运行模式:

disabled:彻底禁用,内核在启动时不加载SELinux安全体系

enforcing:强制启用,内核加载SELinux安全体系,并强制执行保护策略

permissive:宽松模式,内核加载SELinux安全体系,只记录不执行


执行getenforce可以查看当前所处的模式。


在disabled模式与enforcing、permissive模式之间切换时,需要重新启动Linux系统;而在 enforcing模式与permissive模式之间切换时,并不需要重启,可以直接执行

setenforce 1|0 操 作 ######1 强制 0 宽松

为selinux在运行模式建立固定配置----》修改配置文件/etc/selinux/config

SELINUX=disabled #宽松模式

例子: 现在在server1部署一个httpd服务 ,httpd要读取页面/var/www/html/index.html

我们首先关闭Selinux ,答案是可以访问

[root@server1 ~]# systemctl start httpd

[root@server1 ~]# echo redhat >> index.html

[root@server1 ~]# mv index.html /var/www/html/

mv: overwrite '/var/www/html/index.html'? y

[root@server1 ~]# curl http://localhost

redhat

[root@server1 ~]#


开启:selinux

[root@server1 ~]# setenforce 1


[root@server1 ~]# curl http://localhost -I

HTTP/1.1 403 Forbidden 权限拒绝

Date: Sat, 31 Aug 2019 06:53:23 GMT

Server: Apache/2.4.37 (Red Hat Enterprise Linux)

Last-Modified: Wed, 06 Feb 2019 14:46:32 GMT

ETag: "f91-5813acaad6200"

Accept-Ranges: bytes

Content-Length: 3985

Content-Type: text/html; charset=UTF-8


相关推荐

0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)

文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...

ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes

为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...

生产环境starrocks 3.1存算一体集群部署

集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...

在CentOS上添加swap虚拟内存并设置优先级

现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...

国产深度(deepin)操作系统优化指南

1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...

postgresql-15.4 多节点主从(读写分离)

1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...

Docker 容器 Java 服务内存与 GC 优化实施方案

一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...

虚拟内存设置、解决linux内存不够问题

虚拟内存设置(解决linux内存不够情况)背景介绍  Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...

Elasticsearch性能调优(5):服务器配置选择

在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...

Es如何落地

一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...

针对Linux内存管理知识学习总结

现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...

MySQL进阶之性能优化

概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...

Linux Cgroups(Control Groups)原理

LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...

linux 常用性能优化参数及理解

1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...

如何在 Linux 中使用 Sysctl 命令?

sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

取消回复欢迎 发表评论: