SELinux (Security Enhanced Linux),安全强化的 Linux 。
其实 SELinux 是在进行持、文件等权限设置依据的一个内核模块。由于启动网络的也是持续,
因此刚好也是能够控制网络服务能否访问系统资源的一道光卡。
传统的文件权限与账号关系:自主访问控制,DAC :
各种权限设置对 root 无效。因此当某个进程想要对文件进行访问时,系统会依据该进程的所有者/用户组,
并比较文件的权限,若通过权限检查,就可以访问文件了。这种访问文件系统的方式称为
“自主访问控制”(Discretionary Access Control,DAC)。基本上,就是依据进程的所有者与文件资源的
rwx 权限来决定有无访问的能力。
这个有几个困扰:
root 具有最高权限;
用户可以取得进程来更改文件资源的访问权限
以策略规则制定程序读取特定文件:委托访问控制,MAC
SELinux 导入了强制访问控制,Mandatory Access Control。可以针对特定的进程与
特定的文件资源来进行权限的控制。
SELinux 通过 MAC 的方式来管控进程,它控制的主体是进程,而目标则是该进程能否读取的 "文件资源"。
主体(Subject):SELinux 想要管理的就是进程。
目标(Object):主体进程能否访问的 "目标文件"一般就是文件系统。因此这个目标项目可以与文件系统划伤等号。
策略(Policy):由于进程与文件数量庞大,因此 SELinux 会依据某些服务来制定基本的访问安全策略。
这些策略内还会有详细的规则(rule)来指定不同的服务开放某些资源的访问与否。
目前CentOS 里面主要提供2个策略,分别是:
targeted:针对网络服务的限制比较多,针对本机限制比较少,是默认的策略
strict:完整的 SELinux 限制,
限制方面较为严格。
上下文安全(security context):主体能不能访问目标除了策略指定之外,主体与目标的安全上下文必须一致才能顺利访问。
有点类似于文件系统的rwx。
安全的上下文存放在 i-node 里面,因此主体进程想要读取目标文件资源时,同样需要读取i-node,
这 i-node 内就可以比较安全上下文以及 rwx 等权限值是否正确。
使用 ls -Z 查看
安全上下文主要用冒号分为三个字段:
Identify:role:type
身份识别:角色:类型
身份识别(Identify):相当于账号方面的识别,常见类型:
root:表示 root 的账号身份
system_u:表示系统程序方面的识别,通常就是进程
user_u:表示一般用户账号相关的身份
除了 root 外,其他都带有 _u 的字样。这个身份标示重点在于让我们了解该数据为何种身份所有。
而系统上面大部分数据都是sysmtem_u或root。至于如果是在 /home 下面的数据,那么大部分是 user_u。
角色(Role):通过角色我们可以指定这个数据是属于程序,文件资源还是代表用户。
object_r:代表是文件或目录等资源
system_r:代表的是进程,不过一般用户也会被指定成 system_r
类型(Type,最重要):在默认的targeted策略中,Identify 与 role 字段基本上是不重要的。
重要的是类型(Type)。一个主体进程能不能读到这个文件资源与类型字段有关。而类型字段在文件与进程的定义不太相同:
type:在文件资源(Object)上面称为类型(Type)
dommain:在主体程序(Subject)中则称为域(domain)
domain 需要与 type 搭配,则该程序才能够顺利你读取文件资源。
进程与文件 SELinux type 字段的相关性:
主体与目标之间是否具有可读写的权限与 进程的 domain 以及文件的 Type 有关。
SELinux 的启动,关闭,查看
SELinux 模式:
enforcing:强制模式
permissive:宽容模式
disabled:关闭
getenforce 查看什么模式
sestatus 查看策略
ps aux -Z // ps -Z 查看进程的安全上下文
重置安全上下文:
chcon [-R] [-t type] [-u user] [-r role] 文件
chcon -t httpd_sys_content_t /var/www/html/index.html
ll -Z /var/www/html/index.html
restorecon [-Rv] 文件或目录 //默认的安全上下文还原
当发生 SELinux 错误,记录错误信息:
setroubleshoot: 将错误信息写入/var/log/messages
auditd:将详细数据写入 /var/log/audit/audit.log
SELinux 的策略和规则管理:
策略查询:
seinfo [-Atrub]
想要知道详细规则时:
sesearch [-a] [-s 主体类型] [-t 目标类型] [-b 布尔值]
http://www.cnblogs.com/xiaoluo501395377/archive/2013/05/26/3100444.html