SELinux从出现至今,已经走过将近13年历史,然而在Linux相关QQ技术或者Linux相关论坛,经常有人遇到问题问题都归咎与SELinux,如httpd各项配置都正常,但客户就是无法访问;又比如vsftpd配置均正常,但客户端访问提示无法转换家目录。于是乎很多人都对SELinux有了极大的偏见,认为SELinux带来的似乎只有麻烦,于是很多人选择在安装系统第一件事就是将SELinux设置为禁用。不过随着日益增长的0-day安全漏洞,SELinux在很多时候给了我们关键的保障。
什么是SELinux?
SELinux全称SecurityEnhancedLinux(安全强化Linux),是美国国家安全局2000年以GNUGPL发布,是MAC(MandatoryAccessControl,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。强制访问控制系统的用途在于增强系统抵御0-Day攻击(利用尚未公开的漏洞实现的攻击行为)的能力。所以它不是网络防火墙或ACL的替代品,在用途上也不重复。在目前的大多数发行版中,已经默认在内核集成了SELinux。
举例来说,系统上的Apache被发现存在一个漏洞,使得某远程用户可以访问系统上的敏感文件(比如/etc/passwd来获得系统已存在用户),而修复该安全漏洞的Apache更新补丁尚未释出。
为什么eclipse无法安装此时SELinux可以起到弥补该漏洞的缓和方案。因为/etc/passwd不具有Apache的访问标签,所以Apache对于/etc/passwd的访问会被SELinux阻止。相比其他强制性访问控制系统,SELinux有如下优势:
•控制策略是可查询而非程序不可见的。
•可以热更改策略而无需重启或者停止服务。
•可以从进程初始化、继承和程序执行三个方面通过策略进行控制。
•控制范围覆盖文件系统、目录、文件、文件启动描述符、端口、消息接口和网络接口。
那么SELinux对于系统性能有什么样的影响呢?根据Phoronix在2009年使用Fedora11所做的横向比较来看,开启SELinux仅在少数情况下导致系统性能约5%的降低。
SELinux是不是会十分影响一般桌面应用及程序开发呢?原因是,因为SELinux的策略主要针对服务器环境。但随着SELinux13年来的广泛应用,目前SELinux策略在一般桌面及程序开发环境下依然可以同时满足安全性及便利性的要求。以刚刚发布的Fedora15为例,笔者在
搭建完整的娱乐(包含多款第三方原生Linux游戏及Wine游戏)及开发环境(AndroidSDK+Eclipse)过程中,只有Wine程序的首次运行时受到SELinux默认策略的阻拦,在图形化的“SELinux故障排除程序”帮助下,点击一下按钮就解决了。
了解和配置SELinux
1.获取当前SELinux运行状态
getenforce
可能返回结果有三种:Enforcing、Permissive和Disabled。Disabled代表SELinux被禁用,Permissive代表仅记录安全警告但不阻止可疑行为,Enforcing代表记录警告且阻止可疑行为。
目前常见发行版中,RHEL、CentOS、Fedora等默认设置为Enforcing,其余的如openSUSE等为Permissive。
2.改变SELinux运行状态
setenforce[Enforcing|Permissive|1|0]
该命令可以立刻改变SELinux运行状态,在Enforcing和Permissive之间切换,结果保持至关机。一个典型的用途是看看到底是不是SELinux导致某个服务或者程序无法运行。若是在setenforce0之后服务或者程序依然无法运行,那么就可以肯定不是SELinux导致的。
若是想要永久变更系统SELinux运行环境,可以通过更改配置文件/etc/selinux/config实现。注意当从Disabled切换到Permissive或者Enforcing模式后需要重启计算机并为整个文件系统重新创建安全标签(touch/.autorelabel&&reboot)。
[root@web2~]#vim/etc/selinux/config
#ThisfilecontrolsthestateofSELinuxonthesystem.
#SELINUX=cantakeoneofthesethreevalues:
#enforcing-SELinuxsecuritypolicyisenforced.
#permissive-SELinuxprintswarningsinsteadofenforcing.
#disabled-NoSELinuxpolicyisloaded.
SELINUX=enforcing
#SELINUXTYPE=cantakeoneofthesetwovalues:
#targeted-Targetedprocessesareprotected,
#mls-MultiLevelSecurityprotection.
SELINUXTYPE=targeted
3.SELinux运行策略
配置文件/etc/selinux/config还包含了SELinux运行策略的信息,通过改变变量SELINUXTYPE的值实现,该值有两种可能:targeted代表仅针对预制的几种网络服务和访问请求使用SELinux保护,strict代表所有网络服务和访问请求都要经过SELinux。
RHEL、CentOS、Fedora等默认设置为targeted,包含了对几乎所有常见网络服务的SELinu
x策略配置,已经默认安装并且可以无需修改直接使用。若是想自己编辑SELinux策略,也提供了命令行下的策略编辑器seedit以及Eclipse下的编辑插件eclipse-slide。
4.coreutils工具的SELinux模式
常见的属于coreutils的工具如ps、ls等等,可以通过增加Z选项的方式获知SELinux方面的信息。
4.1使用ps获取:
[barlow@web1~]$ps-auxZ|grephttpd|head-5
Warning:badsyntax,perhapsabogus'-'?See/usr/share/doc/procps-3.2.8/FAQunconfined_u:system_r:httpd_t:s0apache13930.00.22796482272?SJun270:01/usr/sbin/httpdunconfined_u:system_r:httpd_t:s0apache13950.01.527296415528?SJun270:02/usr/sbin/httpdunconfined_u:system_r:httpd_t:s0apache13990.01.727296417828?SJun270:02/usr/sbin/httpdunconfined_u:system_r:httpd_t:s0apache14050.01.227296412732?SJun270:02/usr/sbin/httpdunconfined_u:system_r:httpd_t:s0apache14090.01.427296814784?
SJun270:03/usr/sbin/httpd
4.2使用ls获取
[barlow@web1~]$ls-Z/var/www/drwxrwxrwx.apachebarlowunconfined_u:object_r:httpd_sys_script_exec_t:s0cgi-bindrwxrwxrwx.apachebarlowunconfined_u:object_r:httpd_sys_content_t:s0errordrwxrwxrwx.apachebarlowunconfined_u:object_r:httpd_sys_content_t:s0htmldrwxrwxrwx.apachebarlowunconfined_u:object_r:httpd_sys_content_t:s0iconsdrwxrwxrwx.apachebarlowsystem_u:object_r:httpd_sys_content_t:s0lost+found
以此类推,Z选项可以应用在几乎全部coreutils工具里。
5、常用修改有关httpd服务的SELinux策略方法:
如上,ls-Z方法查询到的文件SELinux上下文跟默认要求的不匹配,则服务无法正常使用,如SELinux要求httpd服务的网页目录或文件的上下文要为httpd_sys_content_t,否则客户端无法访问。
5.1使用chcon修改httpd目录或文件安全上下文:
如nagios服务器的网页目录上下文默认为unconfined_u:object_r:usr_t:s0,则客户端无法访
问:
[root@nagios~]#ll-Z/usr/local/nagios/share/
-rwxrwxr-x.nagiosapachesystem_u:object_r:usr_t:s0config.inc.php
drwxrwxr-x.nagiosapacheunconfined_u:object_r:usr_t:s0contexthelp
drwxrwxr-x.nagiosapacheunconfined_u:object_r:usr_t:s0docs
drwxrwxr-x.nagiosapacheunconfined_u:object_r:usr_t:s0images
drwxrwxr-x.nagiosapacheunconfined_u:object_r:usr_t:s0includes
-rwxrwxr-x.nagiosapachesystem_u:object_r:usr_t:s0index.html
-rwxrwxr-x.nagiosapachesystem_u:object_r:usr_t:s0index.php
……以下略……
使用chcon修改/usr/local/nagios/share/目录及其下所有文件安全上下文为unconfined_u:object_r:httpd_sys_content_t

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。