SELinux:
SELinux概念
SELinux配置
启用SELinux
管理文件安全标签
管理端口标签
管理SELinux布尔值开关
管理日志
查看SELinux帮助
SELinux概述
SELinux: Secure Enhanced Linux, 是美国国家安全局「NSA=The National Security Agency」 和SCC( SecureComputing Corporation)开发的 SELinux是Linux的一个强制访问控制的安全模块。工作于内核中, 2000年以GNU GPL发布,Linux内核2.6版本后集成在内核中 Linux有自己的控制机制: DAC: Discretionary Access Control 自由访问控制 SELinux引入新的访问控制机制: MAC: Mandatory Access Control 强制访问控制 • DAC环境下进程是无束缚的 • MAC环境下策略的规则决定控制的严格程度 • MAC环境下进程可以被限制的 • 策略被用来定义被限制的进程能够使用那些资源(文件和端口) • 默认情况下,没有被明确允许的行为将被拒绝 SELinux有四种工作类型: strict: 每个进程都受到selinux的控制(centos5) targeted: 用来保护常见的网络服务,仅有限个进程受到selinux控制,只监控容易被入侵的进程, rhel4只保护13个服务,rhel5保护88个服务 minimum: centos7,修改过的targeted,只对选择的网络服务 mls:提供MLS(多级安全)机制的安全性 minimum和mls稳定性不足,未加以应用 SElinux安全上下文 传统Linux,一切皆文件,由用户,组,权限控制访问 在SELinux中,一切皆对象,由存放在Inode的扩展属性域的安全元素所控制其访问。 所有文件和端口资源和进程都具备安全标签:安全上下文” ( security context) 安全上下文有五个元素组成: user:role:type:sensitivity:category user_u:object_r:tmp_t:s0:c0 实际上下文:存放在文件系统中, 查看安全上下文命令: ls –Z;ps –Z 期望(默认)上下文:存放在二进制的SELinux策略库(映射目录和期望安全上下文)中 查看命令: semanage fcontext –l selinxu规则库: 规则:哪种域能访问那种或那些种类型的文件 SELinux的五个安全因素 User:指示登录系统的用户类型,如root, user_u,system_u,多数本地进程都属于自由( unconfined)进程 Role:定义文件,进程和用户的用途:文件:object_r,进程和用户: system_r Type:指定数据类型,规则中定义何种进程类型访问何种文件Target策略基于type实现,多服务共用: public_content_t Sensitivity:限制访问的需要,由组织定义的分层安全级别,如unclassified, secret,top,secret, 一个对象有且只有一个sensitivity,分0-15级, s0最低,Target策略默认使用s0 Category:对于特定组织划分不分层的分类,如FBI Secret, NSA secret, 一个对象可以有多个categroy, c0-c1023共1024个分类, Target 策略不使用cateaory
SElinux配置
SELinux是否启用 给文件重新打标 给端口设置安全标签 设定某些操作的布尔型特性 SELinux的日志管理 1、SELinux的状态: ·enforcing:强制,每个受限的进程都必然受限 ·permissive:启用,每个受限的进程违规操作不会被禁止,但会被记录于审计日志 ·disabled:关闭 ·相关命令: sestatus 查看selinux的状态 getenforce:获取当前selinux状态 setenforce 0|1 修改selinux状态 0:设置为permissive 1:设置为enforcing 注意:此设定:重启系统后无效 配置文件: /etc/selinux/config,/etc/sysconfig/selinux SELinux={disabled|permissive|enforcing} /boot/grub/grub.conf 在kernel行追加内核参数:使用selinux=0禁用SELinux 设置selinux也可以在开机的时候设定,在/boot/grub/grub.conf文件内核那一行后面设定selinux的状态selinux=0|1,只要配置文件或内核设定为禁用,最后selinux的状态为禁用 注意:在从disabled状态切换至enforcing或permissive状态需要重启系统,这时候系统会对每一个文件一一重打标签,需要花费一定的时间。 2、给配置文件重新打标: chcon chcon [OPTION]… CONTEXT FILE… chcon [OPTION]… [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE… chcon [OPTION]… –reference=RFILE FILE… OPTION: -R 递归打标,对目录而言 例如:我想给自己定义的web文档根目录自定义为/htdocs chcon -R httpd_sys_content_t /htdocs 3、还原文件的默认标签(默认安全上下文): restorecon [-R] /path/to/somewhere 例如:我又将web的文档根目录改为原来的目录,这时候自定义的目录的标签需要还原 restorecon -R /htdocs 恢复是根据策略库当中的策略进行还原 4、默认安全上下文查询与修改 ·需要用到的包:semanage命令来自policycoreutils-python包 ·查看默认的安全上下文 semanage fcontext –l
·添加安全上下文 semanage fcontext -a –t httpd_sys_content_t '/testdir(/.*)?' restorecon –Rv /testdir ·删除安全上下文 semanage fcontext -d –t httpd_sys_content_t '/testdir(/.*)?' ·查看端口标签 semanage port –l
·添加端口 semanage port -a -t port_label -p tcp|udp PORT semanage port -a -t http_port_t -p tcp 9527 ·删除端口 semanage port -d -t port_label -p tcp|udp PORT semanage port -d -t http_port_t -p tcp 9527 ·修改现有端口为新标签 semanage port -m -t port_label -p tcp|udp PORT semanage port -m -t http_port_t -p tcp 9527 5、布尔型规则: getsebool setsebool ·查看bool值命令: getsebool [-a] [boolean] semanage boolean –l semanage boolean -l –C
·设置bool 值命令: setsebool [-P] boolean value (on,off) setsebool [-P] Boolean=value (0 ,1) 6、SELinux日志管理: 需要安装settroublesshoot*,安装此包需要重启系统才能生效,它会将错误日志记录到/var/log/message 安装包:yum install setroublesshoot* (重启生效) 将错误的信息写入/var/log/message grep setroubleshoot /var/log/messages sealert -l UUID 查看安全事件日志说明 sealert -a /var/log/audit/audit.log 扫描并分析日志
7、SELinux帮助:
yum -y install selinux-policy-devel (centos7)
yum -y install selinux-policy-doc (centos6)
mandb | makewhatis 需要更新man帮助的数据才能查询
man -k _selinux
总结:selinux在安全防护上确实起到了一定的作用,它是在内核层面来工作,往往有许多的漏洞,一旦黑客利用漏洞入侵系统后果不堪设想,还有其操作的繁琐和稳定性的欠缺的导致很多企业不愿意用到selinux ,一般都会使用硬件的安全防护设备,所以我们只需要作为了解,知道有这么个东西,如何开关闭及一些简单的操作即可。
实战演练
1、启用SELinux策略并安装httpd服务,改变网站的默认主目录为/website,添加SELinux文件标签规则,使网站可访问 vim /etc/selinux/config SELINUX=disabled reboot 重启才生效 systemctl status httpd yum -y install httpd systemctl start httpd netstat -tnl iptalbes -F mkdir /website ll -Z /website/ -d vim /etc/httpd/conf/httpd.conf Document Root "/website/" <Directory "/website"> systemctl restart httpd systemctl status httpd echo mywebsite > index.html semanage fcontext -l |grep website semanage fcontext -a -t httpd_sys_content_t "/website(/.*)?" ll -Z /website/ -d restorecon -R /website/ 2、修改上述网站的http端口为9527,增加SELinux端口标签,使网站可访问 vim /etc/httpd/conf/httpd.conf Listen 9527 semanager port -l|grep 9527 vim /etc/httpd/conf/httpd.conf netstat -ntl httpd -t 检查语法 systemctl restart httpd semanger port -a -t http_port_t -p tcp 9527 iptables -F 3、启用相关的SELinux布尔值,使上述网站的用户student的家目录可通过http访问 在CentOS 7上 vim /etc/httpd/conf.d/usrdir.conf #UserDir disabled UserDir public_html systemctl restart httpd su -student mkdir public_html echo welcome to studenthome > index.html links x.x.x.x/~student 访问家目录 ll -d /home/student ps aux|grep http setfacl -m u:apache:x /home/student 在CentOS 6上 vim /etc/httpd/conf/httpd.conf #UserDir disabled UserDir public_html service httpd restart iptables -F su -student mkdir public_html cd public html echo studenthomecentos6 > index.html cd chmod 711 /home/wang ll -d /home/wang/
原创文章,作者:wencx,如若转载,请注明出处:http://www.178linux.com/48216