SELinux
1.SELinux
全称是Security-Enhanced Linux,安全增强的linux;
一套强化linux安全的mac扩展模块;
美国国家安全局主导开发;

SELinux 的运作机制
集成到Linux内核(2.6及以上)
为操作系统提供可定制的策略,管理工具

2.红帽的SELinux策略

SELINUXTYPE=targeted
--仅保护最常见的/关键的网络服务,其他不限制

SELINUXTYPE=mls
--提供多层次,全面的安全防护策略

我们vim /etc/selinux/config进去之后看到的SELINUXTYPE=targeted是比较常用的类型

3.SELINUX的运行模式
修改文件/etc/selinux/config(或者vim /etc/sysconfig/selinux,其实是同一个文件)
设置 SELINUX=disabled 以禁用
设置 SELINUX=permissive 宽松模式 (0):SELinux prints warnings instead of enforcing(警告而不是强制)                    
设置 SELINUX=enforcing 强制模式 (1)

查看当前运行模式
# getenforce

临时修改运行模式
[root@rhel6-1 html]# setenforce
usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]

当我们有时候怀疑是selinux的限制,导致某服务不能被访问时,我们可以临时修改selinux的运行模式,设为0,再查看下服务能否被访问,如果想永久修改,就需要修改他的配置文件

4、配置SELINUX的两个主要方面

1、SELINUX上下文环境
(1)查看一个文件的上下文环境值
# ls  -Z    //通过ls -Z 来查看上下文
(2)修改selinux上下文环境值
把文件恢复到所在目录的默认值

# restorecon  -Rv  /var/www/html    //restrorecon表示恢复

或者设置某个文件的指定值
[root@rhel6-1 html]# chcon -t admin_home_t abc    //chcon表示修改

常用选项:
-t,指定访问类型;
-u,-r,分别用来指定用户,角色;
-R,递归修改;
--reference=RFILE,参考指定文件的上下文

2、SELINUX布尔值

使用getsebool查看
#getsebool -a         //-a 查看所有布尔值

使用setsebool设置
#setsebool -P allow_httpd_anon_write off     //-P,永久更改,重启后仍然有效

设者布尔值的时候可以设为1或者on开启,同理,也可以设者为0或者off关闭


5.SELinux实例:

例一:SELINUX上下文环境
# echo  ‘my test web site’ > ~/index.html
#  ls  -Z  ~/index.html
# mv ~/index.html  /var/www/html
通过web页面访问,无法访问到这个主页
# restorecon  -Rv  /var/www/html
# ls  -Z  /var/www/html/index.html
刷新web页面,可以访问到主页

例二:实现FTP匿名用户上传
(1)#  mkdir –m 757  /var/ftp/incoming
(2)修改vsftpd.conf打开匿名上传
(3)上传文件测试,如果已经安装setroubleshoot,屏幕右上角会弹出提示,根据提示修改
# chcon  -t  public_content_rw_t  /var/ftp/incoming
#  getsebool -a  |  grep ftp  ->获得与ftp相关的selinux布尔值
#  setsebool  -P  allow_ftpd_anon_write  1(4)再次尝试上传,成功

例三:本地用户ftp登陆

直接用本地用户tom访问ftp,将会提示“不能改变目录”
查看相关的selinux布尔值
#  getsebool -a  |  grep ftp  ->获得与ftp相关的selinux布尔值
[root@rhel6-1 ~]# setsebool -P ftp_home_dir on
再次用tom登陆测试,成功
bool值相当于开关
可以装setroubleshooting

例四、windows通过samba访问linux
(1)安装samba
(2)#  smbpasswd  -a  root
(3)启动服务
(4)在windows下用UNC路径访问,能够看到root的家目录,但是双击打不开
(5)#  getsebool –a | grep  samba
(6)#  sebsebool  -P  samba_export_all_rw 1
(7)再次在windows下用UNC路径访问,可以打开root的家目录

6、图形化管理SELinux,安装setroubleshoot
# yum install –y setroubleshoot*
重启
有任何的selinux违规行为,系统都会给出提示和解决方案。
如果是图形界面下,屏幕右上角会弹出消息。如果是字符终端下,可以查看日志/var/log/message。如:
[root@rhel6-1 log]# tail -2 /var/log/messages
Dec  4 11:39:42 rhel6-1 setroubleshoot: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/index.html. For complete SELinux messages. run sealert -l 96114052-1747-4334-873e-3a48c35c514c
Dec  4 11:39:42 rhel6-1 setroubleshoot: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/index.html. For complete SELinux messages. run sealert -l 96114052-1747-4334-873e-3a48c35c514c
根据提示,在终端上运行命令:
# sealert -l 96114052-1747-4334-873e-3a48c35c514c  ->显示selinux解决方案

7、获得SELINUX设置的帮助
(1)# man ftpd_selinux
    # man httpd_selinux
    # man samba_selinux
(2)有些服务,配置文件中也有说明
    # vim /etc/samba/smb.conf



附:
  1.SELinux安全上下文,Security Context,为文件/目录/设备标记访问控制属性;
     属性构成  用户:角色:访问类型:选项...
     [root@localhost html]# ls -Z /etc/samba/smb.conf
-rw-r--r--. root root system_u:object_r:samba_etc_t:s0 /etc/samba/smb.conf
比如,配置samba共享的时候,共享文件如果不更改上下文环境是不能共享出去的

  2.安全上下文的一般规律:
    移动的文件,原有的上下文属性不变;
    复制的文件,自动继承目标位置的上下文。