SELINUX
时间:2011-04-19 来源:sgy618
SELINUX (Security-Enhanced Linux)
SELinux
SELinux并非防火墙,他是一个访问权限控制的模块。其实 SELinux是在运行程序、档案等权限依据的一个核心模块!由于网络服务的也是程序,因此刚好也能够控制网络服务能否存取系统资源的一道关卡!
传统档案权限和账号关系:自主式访问控制DAC
以政策规则制定特定程序读取特定档案:委任式访问控制MAC
在委任式访问控制的规定下,我们的程序能够活动的控件就变小了!举例:WWW服务软件的达成程序为httpd这支程序,而默认情况下,httpd仅能在/var/www/这个目录下存取档案,如果httpd想要到其他目录存取数据,除规则设定要开放外,目标目录也得设定成httpd可读取的模式才行,所以即使httpd被黑客取得了控制权,也无权浏览/etc/shadow等重要的配置文件的。
SELiunx包括:主体(subject),目标(object),政策(policy)
主体基本就是process程序,目标相当于文件系统,
启用SELinux
如果发现状态为
Disabled则需要改脚本,/etc/sysconfig/selinux,然后将SELINUX字段改为Permissive
# vi /etc/sysconfig/selinux
SELINUX=enforcing
重新启动操作系统,因为selinux需要整合到核心里面去
# shutdown –r now
检查策略执行情况
# getenforce
Enforcing
或:
# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
在enforcing和permissive模式间切换
# setenforce 0
# getenforce
Permissive
ls –Z(如果启动selinux才行,看程序用ps –Z形式)
三个字段:身份识别:角色:类型
身份识别:root表示root账号身份,system_u表示系统程序,user_u表示使用者账号相关身份
角色:object_r代表档案或目录等资源,system_r代表程序,一般使用者也会指定为
system_r
类型:(最重要!)
启动selinux的话,将SELINUX=enforcing设定好,并指定SELINUXTYPE=targeted,并到/boot/grub/menu.lst这个文件中,看看核心有无关闭selinux,若selinux=0,说明核心会忽略selinux的配置文件,直接略过selinux的加载,所以selinux的模式变成disabled了,为了启动,保证该语句不存在。
利用chcon命令重设selinux安全性
chcon –R:表示递归设置 –t:接类型字段httpd_sys_content_t –u:接身份system_u –r:接角色system_r –reference=接一个范例文件
chcon 是通过直接指定的方式
restorecon –R:递归 –v:过程显示到屏幕,使用预设的安全性本文来还原
setroubleshoot 为了调试selinux的错误,使其产生日志/var/log/messages,
是否自动启动该程序,用chkconfig
[root@localhost ~]# getsebool -a | grep ftp 查看布尔值
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
allow_tftp_anon_write --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_disable_trans --> off
ftpd_is_daemon --> on
httpd_enable_ftp_server --> off
tftpd_disable_trans --> off
[root@localhost ~]# setsebool ftp_home_dir=on 设置标签布尔值,临时生效
[root@localhost ~]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
allow_tftp_anon_write --> off
ftp_home_dir --> on
ftpd_connect_db --> off
ftpd_disable_trans --> off
ftpd_is_daemon --> on
httpd_enable_ftp_server --> off
tftpd_disable_trans --> off
[root@localhost ~]#
[root@localhost ~]# setsebool -P ftp_home_dir=on 永久生效
[root@localhost ~]#
ftpd_disable_trans 建议关闭,如果打开,等同于将只是针对这个服务(ftpd)selinux关闭掉了
httpd_disable_trans 每一个服务都有类似的标签
[root@localhost ~]# ls -dZ /home/ /home/sungy/
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t /home/
drwx------ sungy sungy user_u:object_r:httpd_sys_content_t /home/sungy/
httpd_sys_content_t 标签,只有httpd这个服务访问