SELinux
1.SELinux简介
1.SELinux是NSA研发的,是为了结束DAC(自主访问控制,任何程序对其资源享有完全的控制权,每个用户或进程可以随意修改自己的文件的权限,将其他权限授予给任何其他人而具有任意的访问机制.标准Linux访问控制、所有/组+权限标记(例如rwx)通常被称为自主访问控制(简称DAC)。)而设置的,后来就有了MAC(强制访问控制,一个进程能否访问某个资源,取决于运行这个进程的用户权限以及访问的资源的属主属组等属性)控制机制,但是如果管理员把一个资源属性的其他设置为rwx,那怎么办呢?于是后来有了沙箱(sandbox)的机制,对于进程只赋予最小的权限,比如运行httpd的用户apache,在普通情况下,apache作为一个普通的用户,他能访问大多数资源,如/etc等,但是apache作为一个专门控制httpd的服务,我们把他的活动范围控制在/var/www,只给他最小的权限,而这个范围就是沙箱.
2.selinux核心概念
在Linux中,大多数的操作可以总结成主谓宾,SELinux也不例外,他把大多数操作总结成主谓宾,
Subjects:(主)processes...
Object:(宾) Directory...
actions:(谓)Append...
SELinux中通主语能对哪些宾语进行操作,靠的是标签来限定的,SELinux中有5中标签,而RedHat中只有三种,分别是用户(User identity),角色(Role),类型(Type)
使用 ls -Z查看,在RedHat中,只需关心第三个,类型(Type),它是用来限定主语和宾语在同一个沙箱中的,只有主语和宾语在同一个类型中,主语才能对宾语操作
访问决策:一个主句能对谓语进行什么样的操作是由SELinux的策略库决定的,每个主语对宾语执行执行都会检查该策略库,逐条从上往下检测,如果能被检测到,则可以执行该操作,这也叫访问决策的过程.
如:主语httpd只能访问类型为httpd_t的文件类型,那每次httpd访问文件的时候都会先去策略库中查找,符合了httpd访问的类型,SELinux才允许httpd访问资源,所以文件的类型只要是httpd_t的,都能被httpd访问.
事务决策:也叫标签决策,对于新创建的文件的默认标签.
有时候主语(进程)对一个文件的操作依赖于另一个文件,那主语就会临时切换到与另一个文件类型相同的类型中去,或者主语本身的类型就包含了另外一个文件的类型.
查看SELinux:/etc/selinux/conf
enforcing:启用
permissivs:警告
disabled:关闭
targeted:仅对目标进程进行保护
mls:对大多数进程进行安全保护
2.在实际的执行过程中,SELinux不仅可以限制httpd能访问哪些资源,还可以通过策略库中的策略对httpd的功能进行开启和关闭的限制,如:cgi等.这个开关通常叫做sebool.
3.常用命令
3-1.chcon:改变标签(打标)
-R:递归
[root@lidefu c]# chcon -R --reference=/var/www/a.com/index.html /tmp/a/b/c/test #注意,如果这三级目录中没有test文件的话,修改不成功 [root@lidefu c]# ls -lZ /tmp/a/b/c/test -rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 /tmp/a/b/c/test [root@lidefu c]# ls -lZ /tmp/a/b/c -rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 tes
--reference=FILE:以FILE的标签为参照类型
[root@lidefu tmp]# touch test #新建一个测试文件 [root@lidefu tmp]#ls -lZ #查看他的SELinux信息 -rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 test [root@lidefu tmp]# chcon --reference=/var/www/a.com/index.html /tmp/test [root@lidefu tmp]# ls -lZ -rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 test #类型已经改变 [root@lidefu tmp]# ls -lZ /var/www/a.com/index.html -rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/a.com/index.html #类型和被改变的上一条一致
-t TYPE:修改为指定类型
-u:user
-r:role
3-2.恢复默认标签:restorecon
[root@lidefu tmp]# restorecon test #看来要有默认标签才可以改 restorecon: Warning no default label for /tmp/test
[root@lidefu /]# mkdir data [root@lidefu /]# cd data/ [root@lidefu data]# touch test [root@lidefu data]# ls -Z #以上都是创建目录和文件 -rw-r--r--. root root unconfined_u:object_r:default_t:s0 test #默认为default_t [root@lidefu data]# chcon -R --reference=/var/www/a.com/index.html /data/test test [root@lidefu data]# ls -lZ -rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 test #修改类型 [root@lidefu data]# restorecon test #恢复默认类型 [root@lidefu data]# ls -lZ -rw-r--r--. root root system_u:object_r:default_t:s0 test #已经恢复
3-3.获取受SELinux控制的程序的特性:getsebool
getsebool -a | grep httpd #查看httpd功能启用和禁用情况 allow_httpd_anon_write --> off allow_httpd_mod_auth_ntlm_winbind --> off allow_httpd_mod_auth_pam --> off allow_httpd_sys_script_anon_write --> off ...
3-4.开启受SELniux控制的程序的特性:setsebool
开启上面的allow_httpd_anon_write
[root@lidefu data]# setsebool allow_httpd_anon_write=1 #开启此特性 [root@lidefu data]# getsebool -a |grep httpd #查看是否开启 allow_httpd_anon_write --> on #成功开启 注意:setsebool开启特性如果不加p选项只是临时开启,想要永久开启,需要加上p,如:setsebool -p allow_httpd_anon_write=1
3-4.获取SELinux的开关情况:getenforce
[root@lidefu ~]# getenforce #获取当前系统的SELinux情况 Permissive
3-5.临时设置SELinux开关,注:从Enforcing和Permissive改成Disable都需要修改配置文件并重启
[root@lidefu ~]# setenforce 1 #设置SELinux为强制启用状态 [root@lidefu ~]# getenforce #查看 Enforcing
3-6:查看文件的SELnux属性
[root@lidefu www]# ls -ldZ html/ #可以看到在html目录下创建的任何文件类型都和html目录的类型一致 drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html/ [root@lidefu www]# ls -ldZ html/passwd/test -rwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html/passwd/test
3-7.查看进程的SELinux属性
]# ps auxZ LABEL USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND system_u:system_r:init_t:s0 root 1 0.0 0.2 2900 1436 ? Ss 01:52 0:01 /sbin/init system_u:system_r:kernel_t:s0 root 2 0.0 0.0 0 0 ? S 01:52 0:00 [kthreadd] system_u:system_r:kernel_t:s0 root 3 0.0 0.0 0 0 ? S 01:52 0:00 [migration/0] ...
本文出自 “烟不离手” 博客,请务必保留此出处http://lidefu.blog.51cto.com/3429777/1386960
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。