Linux的selinux


SELinux 的运作模式

主体 (Subject):SELinux 主要想要管理的就是程序,因此你可以将『主体』跟 process 划上等号;
目标 (Object): 主体程序能否存取的『目标资源』一般就是文件系统。因此这个目标项目可以等文件系统划上等号;
政策 (Policy): 由于程序与档案数量庞大,因此 SELinux 会依据某些服务来制订基本的存取安全性政策。这些政策内还会有详细的规则 (rule) 来指定不同的服务开放某些资源的存取与否。在目前的 CentOS 6.x 里面仅有提供两个主要的政策如下,一般来说,使用预设的 target 政策即可。 targeted:针对网络服务限制较多,针对本机限制较少,是预设的政策; mls:完整的 SELinux 限制,限制方面较为严格。
安全性本文 (security context): 我们刚刚谈到了主体、目标与政策面,但是主体能不能存取目标除了要符合政策指定之外,主体与目标的安全性本文必须一致才能够顺利存取。 这个安全性本文 (security context) 有点类似文件系统的 rwx 啦!安全性本文的内容与设定是非常重要的! 如果设定错误,你的某些服务(主体程序)就无法存取文件系统(目标资源),当然就会一直出现『权限不符』的错误讯息了!
\
(1)主体程序必须要通过 SELinux 政策内的规则放行后,就可以与目标资源进行安全性本文的比对, (2)若比对失败则无法存取目标,若比对成功则可以开始存取目标。

安全性本文 (Security Context)

\

身份识别 (Identify): 相当于账号方面的身份识别!主要的身份识别则有底下三种常见的类型: root:表示 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 搭配,则该程序才能够顺利的读取档案资源啦!

SELinux 的启动、关闭与观察

\
查看并永久修改selinux的启动和政策 \\

\

注:如果由 enforcing 或 permissive 改成 disabled ,或由 disabled 改成其他两个,那也必须要重新启动。

SELinux type 的修改

注:单纯的复制文件时,SELinux 的 type 字段是会继承目标目录的(即会变成和所到的目录的一样); 如果是移动,那么连同 SELinux 的类型也会被移动过去。 \

复原成原有的 SELinux type:
\

默认目录的安全性本文查询与修改

semanage(需要安装:yum install policycoreutils-python): \

\

利用 semanage 设定 /srv/vbird 目录的默认安全性本文为 public_content_t(修改的就是默认值):
\

政策查询:seinfo(需要安装:yum install setools-console) \

政策为targeted时,针对httpd制定的规则为: \

如果你想要找到有 httpd 字样的安全性本文类别时, 就可以使用『 seinfo -t | grep httpd 』来查询了!如果查询到相关的类别或者是布尔值后,想要知道详细的规则时, 就得要使用 sesearch 这个指令了!
sesearch:
\

布尔值的查询与修改:(getsebool,setsebool)
\

\

\

整篇最重要的内容

setroubleshoot --> 错误讯息写入 /var/log/messages
需要软件:setroublshoot 与 setroubleshoot-server 原本的 SELinux 信息本来是以两个服务来记录的,分别是 auditd 与 setroubleshootd。既然是同样的信息, 因此 CentOS 6.x 将两者整合在 auditd 当中啦!所以,并没有 setroubleshootd 的服务存在了喔!因此, 当你安装好了 setroubleshoot-server 之后,请记得要重新启动 auditd,否则 setroubleshootd 的功能不会被启动的。
演示: \

\

让 setroubleshoot 主动的发送产生的信息到我们指定的 email:
\

SELinux 错误克服的总结: 1、在服务与 rwx 权限都没有问题,却无法成功的使用网络服务时; 2、先使用 setenforce 0 设定为宽容模式; 3、再次使用该网络服务,如果这样就能用,表示 SELinux 出问题,请往下继续处理。如果这样还不能用,那问题就不是在 SELinux 上面!请再找其他解决方法,底下的动作不适合你;
4、分析 /var/log/messages 内的信息,找到 sealert -l 相关的信息并且执行;
5、找到 Allow Access 的关键词,照里面的动作来进行 SELinux 的错误克服;
6、处理完毕重新 setenforce 1 ,再次测试网络服务吧!

相关资料:《鸟哥的私房菜》
转载请标明原文出处:http://blog.csdn.net/u012367513/article/details/40663227

相关内容

    暂无相关文章