Linux系统中SElinux的管理

基本 SElinux 安全性概念

SElinux(Security-Enhanced Linux)内核级加强型防火墙

SElinux是强制访问控制(MAC)安全系统,是linux历史上最杰出的新安全系统。对于linux安全模块来说,SElinux的功能是最全面的,测试也是最充分的,这是一种基于内核的安全系统。
SELINUX ( 安全增强型 Linux ) 是可保护你系统安全性的额外机制。在某种程度上,它可以被看作是与标准权限系统并行的权限系统。在常规模式中,以用户身份运行进程, 并且系统上的文件和其他资源都设置了权限 ( 控制哪些用户对哪些文件具有哪些访问权SElinux的另一个不同之处在于,若要访问文件,你必须具有普通访问权限和 SElinux访问权限。因此,即使以超级用户身份root 运行进程,根据进程以及文件或资源的 SELinux 安全性上下文可能拒绝访问文件或资源 ) 标签。

在无SElinux 保护时,恶意人员可以尝试利用 web 服务器中的安全漏洞强行进入系统。如果成功,将会控制以用户 apache 身份运行的进程,这时再由一个本地安全漏洞就可能使攻击者获得超级用户的访问权限。

SElinux三个模式

(1). Enforcing 强制(强制模式)— SELinux 策略强制执行,基于 SELinux 策略规则授予或拒绝主体对目标的访问

(2). Permissive 宽容(警告模式)— SELinux 策略不强制执行,不实际拒绝访问,但会有拒绝信息写入日志

(3). Disabled 禁用(关闭模式)— 完全禁用SELinux

管理SElinux级别

有两种方式可以修改SElinux的级别,分别如下:
(1). 临时修改方式

可以用下面命令查看当前的SElinux状态:

getenforce

在这里插入图片描述
可以用下面的命令临时修改SElinux的级别:

setenforce 0/1

当SElinux开启时, "setenforce"可以设置SElinux的状态,但是只能设置0和1两种,即警告模式或者强制模式,如下:
在这里插入图片描述
这种修改方式只能临时修改级别,当重新启动系统时就会恢复为默认的级别。

(2). 永久修改级别

在配置文件"/etc/sysconfig/selinux"下将"SELINUX=enforcing"改为"SELINUX=disabled"即将SElinux修改成关闭模式了,改为permissive即为警告模式。因为SElinux是基于内核的安全系统,所以在设置完成之后需要重启内核,即需要重启电脑才可以生效。

用vim打开文件:

vim /etc/sysconfig/selinux

Linux系统中SElinux的管理_第1张图片

文件的安全上下文

所有的操作系统访问控制都是主体和客体的相关访问控制属性,在SElinux中,访问控制属性称为安全上下文,安全上下文是一个简单的、一致的访问控制属性,所有客体(文件,进程间通信,通信管道,套接字,网络主机等)和主体(进程)有一个和客体和他们相关的单一安全上下文,一个进程的类型通常称为域,域和域类型都一样,即都是安全上下文的’TYPE’,一个安全上下文有五个元素组成:

user:role:type:sensitivity:category

五个安全元素含义如下:

  • User:指示登录系统的用户类型,如root,user_u,system_u,多数本地进程都属于自由(unconfined)进程

  • Role:定义文件,进程和用户的用途。文件:object_r,进程和用户:system_r

  • Type:指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于type实现,多服务公用:public_conten_t

  • Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified,secret,top,secret,一个对象有且只要一个sensitivity,分0-15级,s0最低,Target策略默认使用s0

  • Category:对于特定组织划分不分层的分类,如FBI Secret,NSA secret,一个对象可以有多个catagroy,c0-c1-23共1024个分类,Target策略不适用category

查看安全上下文

SElinux会在目录和文件上留下上下文标识,用下面命令进行查看:

ls -Z

更改安全上下文

(1). 临时更改
chron -t 命令临时更改安全上下文,格式如下:

chcon -t 安全上下文	文件

(2). 永久更改

可以用下面的命令列出内核安全上下文列表内容:

semanage fcontext -l

下面命令实现永久更改安全上下文:

semanage fcontext -a -t 安全上下文 文件
restorecon -FvvR 文件所在目录   #刷新目录,重新读取安全上下文

下面通过一个实际操作进行更改安全上下文的测试:

httpd服务共享文件安全上下文的管理实验

需要在SElinux开启的情况下进行操作,如下:
在这里插入图片描述
然后需要通过 yum 安装httpd服务:
Linux系统中SElinux的管理_第2张图片
安装成功如下:
Linux系统中SElinux的管理_第3张图片
然后开启httpd服务,设为开机自启;然后需要关闭防火墙服务,并设为开机不启动:

systemctl start httpd
systemctl enable httpd
systemctl stop firewalld
systemctl disable firewalld

Linux系统中SElinux的管理_第4张图片
我们知道在 /var/www/html/目录下的内容可以通过浏览器访问到,因此我们在该目录下创建一个html文件:

hostname >  /var/www/html/hello.html

即将hostname的返回值写入到文件中,然后用浏览器访问,如下:
Linux系统中SElinux的管理_第5张图片
然后我们尝试在/mnt/目录下也创建一个 html文件,然后将它移动到 /var/www/html/目录下,看看浏览器是否可以访问到,如下:

date +%F > /mnt/westos.html
mv /mnt/westos.html /var/www/html/

第一条命令即将当前日期写入到 westos.html 文件中去,尝试通过浏览器访问该文件:
Linux系统中SElinux的管理_第6张图片
那么该如何解决以上问题呢? 其实这是因为文件的安全上下文不同导致的,因此我们需要更改文件的安全上下文即可解决该问题。
上面有两种更改方式,分别进行测试:
(1). 临时更改

用 ls -Z 查看/var/www/html/目录中的文件的安全上下文:
在这里插入图片描述
可以看到它们的安全上下文的类型是不同的,则需要把 westos.html 文件的改成和 hello.html一样的:

chcon -t httpd_sys_content_t /var/www/html/westos.html

然后这时我们再通过浏览器尝试访问 westos.html 文件:
Linux系统中SElinux的管理_第7张图片
通过上面方式更改之后,重启系统安全上下文又会改为之前的,属于临时更改。

(2). 永久更改

用下面命令永久更改安全上下文:

semanage fcontext -a -t httpd_sys_content_t  /var/www/html/westos.html

更改完之后还需要执行下面的命令刷新目录,重新读取安全上下文:

restorecon  -FvvR  /var/www/html/

在这里插入图片描述
通过以上步骤就可以实现永久更改文件的安全上下文了。

你可能感兴趣的:(Linux)