ITPub博客

首页 > Linux操作系统 > Linux操作系统 > selinux

selinux

Linux操作系统 作者:studywell 时间:2015-10-29 15:10:48 0 删除 编辑
selinux
 
 转自:http://blog.csdn.net/xyz846/article/details/8042878
       http://www.51ou.com/browse/redhat/34596.html
            http://www.2cto.com/os/201111/112020.html
 
 
一、什么是SELinux?
   SELinux 全称 Security Enhanced Linux (安全强化 Linux),由美国国家安全部(National Security Agency)领导开发的GPL项目,是MAC (Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。强制访问控制系统的用途在于增强系统抵御 0-Day 攻击(利用尚未公开的漏洞实现的攻击行为)的能力。所以它不是网络防火墙或 ACL 的替代品,在用途上也不重复。举例来说,系统上的 Apache 被发现存在一个漏 洞,使得某远程用户可以访问系统上的敏感文件(比如 /etc/passwd 来获得系统已存在用户),而修复该安全漏洞的 Apache 更新补丁尚未释出。此时 SELinux 可以起到弥补该漏洞的缓和方案。因为 /etc/passwd 不具有 Apache 的访问标签,所以 Apache 对于 /etc/passwd 的访问会被 SELinux 阻止。

SELinux on Redhat Linux在RHEL4.0或FC3以上的版本中,可以在安装时就选择是否激活SELinux,系统自动会安装相应的内核、工具、程序等。由于 SELinux的MAC机制将极大的影响了现有应用,因此RHEL4/FC3中已预配置了大量兼容现有应用的安全策略。SELinux的配置相关文件都在 /etc/selinux下,其中/etc/selinux/targeted目录里就包含了策略的详细配置和context定义,以下是主要文件及功用:
/etc/selinux/targeted/contexts/*_context 默认的context设置
/etc/selinux/targeted/contexts/files/* 精确的context类型划分
/etc/selinux/targeted/policy/* 策略文件
使用Redhat默认的策略对正常应用带来的影响比较小,兼容性相对比较好。对于需要提供虚拟主机或大量应用的用户而言,则会带来不小的麻烦,需要仔细阅读SELinux 的手册进行调整。


特点:
控制策略是可查询而非程序不可见的。
可以热更改策略而无需重启或者停止服务。
可以从进程初始化、继承和程序执行三个方面通过策略进行控制。
控制范围覆盖文件系统、目录、文件、文件启动描述符、端口、消息接口和网络接口。


二、启动和关闭SELinux的方法:

配置文件# cat /etc/sysconfig/selinux
selinux可调的三种状态
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced. 代表记录警告且阻止可疑行为
#     permissive - SELinux prints warnings instead of enforcing. 代表仅记录安全警告但不阻止可疑行为
#     disabled - No SELinux policy is loaded.代表 SELinux 被禁用

修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。
  如果不想重启系统,使用命令setenforce 0
注:
setenforce 1 设置SELinux 成为enforcing模式
setenforce 0 设置SELinux 成为permissive模式
  在lilo或者grub的启动参数中增加:selinux=0,也可以关闭selinux

该命令可以立刻改变 SELinux 运行状态,在 Enforcing 和 Permissive 之间切换,结果保持至关机。若是想要永久变更系统 SELinux运行环境,可以通过更改配置文件 /etc/sysconfig/selinux 实现。注意当从 Disabled 切换到 Permissive 或者 Enforcing模式后需要重启计算机。若要判断某一程序无法运行是否是selinux所致可以先将其设置为permisive再运行,如仍无法运行表明与其无关


 SELinux 运行策略:
配置文件# cat /etc/sysconfig/selinux
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
通过改变变量 SELINUXTYPE 的值实现修改策略,targeted 代表仅针对预制的几种网络服务和访问请求使用 SELinux 保护,mls代表所有网络服务和访问请求都要经过SELinux。RHEL默认设置为targeted,包含了对几乎所有常见网络服务的SELinux 策略配置,已经默认安装并且可以无需修改直接使用。


三、查看selinux状态:

查看selinux的工作模式
[root@rhel ~]# getenforce
Enforcing

四、selinux简单实用

 每个进程都属于一个SElinux域(domain),而每一个文件都被赋予一个SElinux上下文的context值,那么如何查看它们的contex值呢?
使用命令ls  -Z 或ps  -Z查看上下文contex值,如图:
[root@rhel ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log.syslog
[root@rhel ~]# ps -Z
LABEL                             PID TTY          TIME CMD
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2452 pts/1 00:00:00 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2472 pts/1 00:00:00 ps

上面红色方框中的文件SElinux上下文或SElinux域格式字符串以冒号作为字段分隔,第一个字段为用户标识第二个字段为角色(role),root和user_u表示文件是根用户或普通用户建立的,第三个字段为类型,第四个为扩展的MIS或MCS,这里我们只关心第三个字段就可以了。
 文件上下文context值说明:
1、用户:指的是SElinux用户,root表示root账户身份,user_u表示普通用户无特权用户,system_u表示系统进程,通过用户可以确认身份类型,一般搭配角色使用。身份和不同的角色搭配时有权限不同,虽然可以使用su命令切换用户但对于SElinux的用户并没有发生改变,账户之间切换时此用户身份不变,在targeted策略环境下用户标识没有实质性作用。
2、角色:object_r一般为文件目录的角色、system_r一般为进程的角色,在targeted策略环境中用户的角色一般为system_r,在strict策略中用户的角色被细分为sysadm_r、system_r、user_r、staff_r角色。用户的角色类似用户组的概念,不同的角色具有不同的身份权限,一个用户可以具备多个角色,但是同一时间只能使用一个角色。在targeted策略环境下角色没有实质作用,在targeted策略环境中所有的进程文件的角色都是system_r角色,在strict策略中一般用户登录时角色是user_r,root用户登录时角色是staff_r,但是没有特殊权切换到sysadm_r角色才具备超级用户的权限,只有staff_r角色才可以切换成sysadm_r角色。
3、 类型(进程的类型又可以称为域):文件和进程都有一个类型,SElinux依据类型的相关组合来限制存取权限。

这里我们还可以看到,大部分的网络守护进程与系统进程都属于特定的域类型,而sshd和ps ax -Z命令的进程域的类型确都是unconfined_t,说明它们的进程不受任何SElinux上下文的限制,特别是用户交互式shell,任何用户交互式shell开始的进程(除了一些特例外)都不受SElinux目标策略的影响。

由此可以看出文件的context值是受上一级目录影响的,一般情况下它们会继承上一级目录的context值,一些安装服务产生的文件context值会例外,不继承上级目录的context值,服务会自动创建它们的context值,比如没有装http服务的时候/var/目录下时没有www目录的,安装httpd服务后该服务会自动创建出所需的目录,并定义与服务相关的目录及文件才context值,它们并不会继承上级目录的context值,如图是var目录的context值:

修改文件的context值;
chcon  -t  tmp_t  /var/www/html/index.html //修改文件的context值
restorecon  -v  /var/www/html/index.html//根据SElinux的目标策略恢复文件的安全上下文(context值)
restorecon  -R(recursion)  -v  /var/www/html//根据SElinux的目标策略恢复html目录下所有文件的安全上下文(context值)

大多数情况下,我们新建一个服务相关文件,通常是会被SElinux拦截的,这时可查看这个文件或者文件者所在目录所有的文件的content,进行对比,查看相同作用的文件,然后更改文件content和它一样.
chcon -t named_cache_t 某个文件
chcon -u system_u 某个文件


如因为selinux的问题,导致网站访问异常,可以查看日志:tail  /var/log/messages  |grep  run
setroubleshoot是查看SElinux日志报错的命令
# yum install setroubleshoot.x86_64

查看setroubleshoot软件提示的报错
cat    /var/log/messages |grep setroubleshoot
注:若软件包安装上了,可使用sealert  -b命令让详细的提示信息对话框弹出来!


所有文件的context值都存放在/etc/selinux/targeted/contexts/files目录下.




 Managing  Boole(管理SElinux布尔值)
什么是SElinux布尔值呢?SEliux布尔值就相当于一个开关,精确控制SElinux对某个服务的某个选项的保护,比如ftp服务,如图:
[root@rhel files]# getsebool -a |grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off

说明:getsebool -a  //查看sebool值
     setsebllo  -P  //设置sebool值
举例:getsebool-a |grep  ftp
  setsebool -P ftp_home_dir=1 //设置sebool值,1为on,不保护,0为off,保护

注:sebool值出新问题后同样的也无法访问相关的服务,系统也会跳出黄色五角星说明并提供解决办法,与上述文件context值出现的提示一样,

 补充知识
图形化界面下打开SElinux配置工具里boolean选项参数说明:

1、 Admin:在Admin类下,可以允许系统使用未分配的终端(ttys),允许对root目录进行写操作,从非标准位置读取文件,禁止任何进程加载内核模块,禁止任何对SElinux策略的修改,以及提供对缓冲区溢出保护的支持。
2、 Cronn:在Croon类下,可以启用额外的规则以支持fcron调度命令,以及禁用SElinux对cron服务的保护。
3、 CVS:在使用CVS版本控制系统的情况下,可以关闭SElinux对密码文件的保护。
4、 Databases:在使用MySQL或PostgreSQL数据库系统的情况下,可以关闭SElinux对它们的保护。
5、 FTP:在FTP类下游6个配置项,RHEL5中的SElinux允许FTP作为独立于超级服务的服务(即支持vsftpd作为常规服务运行,而不与inetd或xinetd有关联)。允许目录上传,需使用public_content_rw_t标签,同样支持使用CIFS或NFS进行文件传输,允许读写家目录或禁用SElinux对FTP服务器的保护。
6、 HTTPD Service:HTTPD Service类是一些SElinux指令以增强Apache服务器的安全性,主要包括以下内容:
(1) 允许apache使用mod_auth_pam
(2) 允许httpd支持CGI脚本
(3) 允许httpd守护进程对有public_content_rw_t标签的目录与文件写入
(4) 允许httpd脚本和模块连接到网络
(5) 允许httpd脚本和模块通过网络连接到数据库
(6) 允许httpd脚本对有public_content_rw_t标签的目录与文件写入
(7) 允许httpd读取家目录
(8) 允许httpd作为ftp服务器运行
(9) 允许httpd运行SSL与CGI在同一域中
(10) 允许httpd支持内置脚本
(11) 禁止SElinux对httpd守护进程的保护
(12) 禁止SElinux对httpd suexec(可允许httpd服务的可执行文件)的保护
(13) 统一httpd处理的所有内容文件
(14) 统一httpd连接终端需要处理的证书
7、 Kerberos:在Kerberos类下有3个配置项,一个选项允许其它进程使用Kerberos文件(默认启用),其它两个选项禁止SElinux对Kerberos管理进程(kadmind)和Kerberos键盘控制进程(krb5kdc)的保护
8、 Memory Protection:在目前版本的RHEL中,内存保护选项不与任何服务或系统关联。
9、 Mount:在Mount类中是一些与自动挂载服务有关的控制,可以通过配置它以允许挂载者挂载任何目录或文件,同样也可以禁用SElinux的保护。
10、 Name Service:名称服务器进程(named)指的是RHEL中的DNS服务,如果维护一个区域,一般会希望允许named进程可以覆盖主域文件,也可以禁用SElinux的保护,名称服务器的缓存进程(ncsd)也是如此。
11、 NFS:在NFS启用SElinux之前,至少需要启用NFS文件系统的读权限。如果使用NFS共享系统,可能在NFS文件系统上启用读、写、创建功能。如果配置某个服务器上的家目录作为NFS共享,可能想让NFS支持家目录,这些都有通常安全管理服务进程(gssd)提供支持。
12、 NIS:如果在SElinux系统上运行NIS,可能想允许NIS运行进程,可以取消SElinux对NIS密码和NIS传输进程的保护,如果还有问题,可以取消SElinux对相关进程(ypbind)的保护。
13、 Other:在Other类中可以允许完整文件的访问,通过FTP和未标签的包,Other类同样可以禁止SElinux对PC读卡器和特殊时区数据的保护。
14、 Polyinstation:用户在相同的目录下可能会看到不同的东西(比如/tmp),可以使用SElinux工具启用这一支持。
15、 Pppd:这一进程使用电话调制解调器进行通信,可以允许pppd在内核中插入支持通信的模块或禁用SElinux保护。
16、 Printing:在Printing类中可以允许禁用SElinux对于不同CUPS进程的保护,包括CUPS后台服务、cupsd进程、cupsd-lpd服务和HP打印机进程(hplip)。甚至可以用LPD代替CUPS。
17、 Rsync:在rsync类中可以允许标签为public_content_rw_t目录配置写权限或禁用SElinux的保护。
18、 Samba:在Samba类中可以使用SElinux保护samba,主要包括以下内容:
(1) 允许samba共享nfs目录
(2) 允许samba共享用户家目录
(3) 允许samba对标签为public_content_rw_t的目录文件进行写操作
(4) 允许用户登录到CIFS家目录
(5) 禁止SElinux对nmbd进程(NetBIOS进程)的保护
(6) 禁止SElinux对smbd进程(samba进程)的保护
(7) 禁止SElinux对winbind进程(WINS服务进程)的保护
19、 SASL Authentication Server:简单的身份验证和安全层(SASL)服务器是另一个验证方法,通过安全级别配置工具,可以允许它进入/etc/shadow验证数据库,以及禁用SElinux的保护。
20、 SElinux Server Protection:在SElinux Server Protection类中允许为大范围的进程禁用SElinux保护(比如从amanda到zebra),这些服务不包含在其它类中。
21、 Spam Protection:Spam  Protection类作用于SpamAssassin服务,对于常规用户需要进入家目录,当然依然可以禁用。
22、 SQUID:如果需要设置squid代理的缓存,将需要允许它访问网络,也可以禁止SElinux保护。
23、 Universal  SSL  Tunnel:在Universal SSL Tunnel类中可以为网络配置一个安全通道,通过SElinux添加保护,可以使用此工具允许stunnel作为单独的服务运行,也可以禁用SElinux的保护。
24、 Zebra:可以利用这一工具让Zebra路由服务队路由表进行写入。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29519108/viewspace-1818281/,如需转载,请注明出处,否则将追究法律责任。

下一篇: linux系统ACL控制
请登录后发表评论 登录
全部评论

注册时间:2014-03-04

  • 博文量
    304
  • 访问量
    427138