SELinux初探 (读鸟哥笔记)欢迎指出错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SELinux初探 (读鸟哥笔记)欢迎指出错误相关的知识,希望对你有一定的参考价值。
SELinux 『 Security Enhanced Linux 』的缩写,字面上的意义就是安全强化的 Linux 之意
传统的文件权限与账号关系--》自主式存取控制(Discretionary Access Control, DAC)
是依据程序的拥有者与文件资源的 rwx 权限来决定有无存取的能力
以政策守则制订特定程序读取特定文件--》委任式存取控制 (Mandatory Access Control, MAC)
主体不再是使用者 而变成了程序 目标是该程序能否读取的文件资源
先要大概明白几个概念
主体 (Subject):
SELinux 主要想要管理的就是程序,因此你可以将『主体』可以同 process 划上等号;目标 (Object):
主体程序能否存取的『目标资源』一般就是文件系统。因此这个目标可以同文件系统划上等号;政策 (Policy):
由于程序与文件数量庞大,因此 SELinux 会依据某些服务来制订基本的存取安全性政策。这些政策内还会有详细的守则 (rule) 来指定不同的服务开放某些资源的存取与否。在目前的 CentOS 5.x 里面仅有提供两个主要的政策,分别是:targeted:针对网络服务限制较多,针对本机限制较少,是默认的政策;
strict:完整的 SELinux 限制,限制方面较为严格。
建议使用默认的 targeted 政策即可。
守则:只要知道如何开启和关闭某项守则的放行与否即可
安全性本文 (security context):
我们刚刚谈到了主体、目标与政策面,但是主体能不能存取目标除了政策指定之外,主体与目标的安全性本文(有点类似文件系统的 rwx )必须一致才能够顺利存取。
安全性文本需要自行配置
程序在内存中 所以安全性本文可以存入
文件的安全性本文放置在文件的inode中
在inode中就可以进行安全性本文的比对以及rwx权限的确认
查看文件的安全性本文
[[email protected] ~]# ll -Z /usr/local/nginx/html/index.html
-rw-r--r--. root root unconfined_u:object_r:usr_t:s0 /usr/local/nginx/html/index.html
身份识别 : 角色 :类型
身份识别 (Identify):
相当于帐号方面的身份识别!主要的身份识别则有底下三种常见的类型:root:表示 root 的帐号身份
system_u:表示系统程序方面的识别,通常就是程序;
user_u:代表的是一般使用者帐号相关的身份。
角色 (Role):
透过角色栏位,我们可以知道这个数据是属于程序、文件资源还是代表使用者。一般的角色有:object_r:代表的是文件或目录等文件资源,这应该是最常见的;
system_r:代表的就是程序!不过,一般使用者也会被指定成为 system_r
类型 (Type) :(最重要!)
在默认的 targeted 政策中, Identify 与 Role 栏位基本上是不重要的!重要的在于这个类型 (type) 栏位! 基本上,一个主体程序能不能读取到这个文件资源,与类型栏位有关!而类型栏位在文件与程序的定义不太相同,分别是:type:在文件资源 (Object) 上面称为类型 (Type);
domain:在主体程序 (Subject) 则称为领域 (domain) !
domain 需要与 type 搭配,则该程序才能够顺利的读取文件资源!
主体程序与 文件type栏位的相关性
[[email protected] ~]# ll -Zd /usr/sbin/httpd /var/www/html
-rwxr-xr-x root root system_u:object_r:httpd_exec_t /usr/sbin/httpd
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t /var/www/html
首先,我们触发一个可运行的目标文件,那就是具有 httpd_exec_t 这个类型的 /usr/sbin/httpd 文件;
该文件的类型会让这个文件所造成的主体程序 (Subject) 具有 httpd 这个领域 (domain), 我们的政策针对这个领域已经制定了许多守则,其中包括这个领域可以读取的目标资源类型;
由于 httpd domain 被配置为可以读取 httpd_sys_content_t 这个类型的目标文件 (Object), 因此你的网页放置到 /var/www/html/ 目录下,就能够被 httpd 那支程序所读取了;
但最终能不能读到正确的数据,还得要看 rwx 是否符合 Linux 权限的规范!
第一个是政策内需要制订详细的 domain/type 相关性;
第二个是若文件的 type 配置错误, 那么即使权限配置为 rwx 全开的 777 ,该主体程序也无法读取目标文件资源
查看SELinux的模式
[[email protected] ~]# getenforce
Enforcing
以前两种为启动模式后一种为关闭
enforcing:强制模式,代表 SELinux 运行中,且已经正确的开始限制 domain/type 了;
permissive:宽容模式:代表 SELinux 运行中,不过仅会有警告信息并不会实际限制 domain/type 的存取。这种模式可以运来作为 SELinux 的 debug 之用;
disabled:关闭,SELinux 并没有实际运行
查看SELinux的政策
targeted 主要是管理网络服务
strict 本机端的程序
[[email protected] ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
SELinux配置文件
[[email protected] ~]# vim /etc/selinux/config
SELINUX=enforcing 启动模式
SELINUXTYPE=targeted 政策
SELinux的启动与关闭
改变政策需要reboot
模式的开启(enforcing或permissive)转为关闭(disabled) 或相反 需要reboot
模式的开启之间转换不需要rebbot
reboot之前需要观察开机时核心是否启动SELinux
[[email protected] wanjiadi]# vim /boot/grub/menu.lst
观察’kernel’ 行 不包含 selinux=0 则 reboot之后就会启动
启动模式之间的切换
[[email protected] ~]# setenforce 0 切换成宽松模式
[[email protected] ~]# setenforce 1 切换成强制模式
操作安全性本文
查看程序的安全性本文
[[email protected] wanjiadi]# ps aux -Z | grep httpd
查看文件安全性本文
[[email protected] ~]# ll -Z /var/www/html/1.html
-rw-r--r--. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 1.html
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 2.html root目录下创建mv过来的2.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 4.html root在/var/www/html下创建的
修改文件的安全性本文
这里有一点又一点需要声明:软件安装后比如apache 在安装完产生/var/www之后type httpd_sys_content_t就已经确定
[[email protected] ~]# chcon -t httpd_sys_content_t /var/www/html/index.html
-R :递归修改;
-t :后面接安全性本文的类型栏位!例如 httpd_sys_content_t ;
-u :后面接身份识别,例如 system_u;
-r :后面街角色,例如 system_r;
--reference=范例文件:拿某个文件当范例来修改后续接的文件的类型!
还原文件的默认安全性本文(根据当前目录设置)
[[email protected] ~]# restorecon -v /var/www/html/index.html
restorecon reset /var/www/html/5.html context unconfined_u:object_r:admin_home_t:s0->unconfined_u:object_r:httpd_sys_content_t:s0
以上是关于SELinux初探 (读鸟哥笔记)欢迎指出错误的主要内容,如果未能解决你的问题,请参考以下文章