今天给大家分享的可能是很多人觉得没什么意义的一项内容,其实不是它没什么意义,而是说它使用起来比较麻烦,因为启用SELinux安全策略之后,每个应用程序的访问域和文件的安全标签都是需要严格匹配后,才能执行访问操作的,所以如果稍有设置上的不当,便会导致应用程序出错,但任何事情都是双面性的,自己设置起来比较麻烦的同时,也给相应的应用程序数据提供了足够的安全保障,比如说,我们给web服务启用SELinux安全策略之后,即便有人成功的入侵了我们的web服务器,替换了我们的网站主页,但由于web进程在访问网站主页文件时是需要经过策略匹配才能成功访问的,所以对黑客的最终结果实现是不是又增加了相应的难度了。所以任何事物本身不存在说没有它的意义,只是说我们能不能恰如其分的去运用它。
一、SELinux简介
SELinux:Secure Enhanced Linux,是美国国家安全局(NSA=The National Security Agency)和SCC(Secure Computing Corporation)开发的Linux的一个强制访问控制的安全模块。2000年以GNU GPL发布,Linux内核2.6版本后集成在内核中
DAC:Discretionary Access Control自主访问控制
MAC:Mandatory Access Control 强制访问控制
DAC环境下进程是无束缚的
MAC环境下进程可以被限制的
策略被用来定义被限制的进程能够使用那些资源(文件和端口)
默认情况下,没有被明确允许的行为将被拒绝
1、SELinux两种工作级别:
strict: 每个进程都受到selinux的控制
targeted: 仅有限进程受到selinux控制,用来保护常见的网络服务,只监控容易被入侵的进程
2、传统Linux,一切皆文件,由用户,组,权限控制访问
SELinux,一切皆对象(object),由存放在inode的扩展属性域的安全元素控制其访问所有文件和端口,资源和进程都具备安全标签:安全上下文(security context)
安全上下文有五个元素组成:
user:role:type:sensitivity:category
如:user_u:object_r:tmp_t:s0:c0
3、实际上下文:存放在文件系统中
查看文件的安全标签:ls –Z filename
查看进程的安全标签:ps –Z
4、期望(默认)上下文:
存放在二进制的SELinux策略库(映射目录和期望安全上下文)中
查看默认安全标签:semanage fcontext –l
5、安全上下文选项释义
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 策略不使用category
对象(object):所有可以读取的对象,包括文件、目录和进程,端口等
主体:进程称为主体(subject)
6、SELinux中对所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予各自的一个domain的标签。domain标签能够执行的操作由安全策略里定义。
7、当一个subject试图访问一个object,Kernel中的策略执行服务器将检查AVC (访问矢量缓存Access Vector Cache), 在AVC中,subject和object的权限被缓存(cached),查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问
8、安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一个对象是允许还是拒绝的,并且定义了哪种行为是充许或拒绝
二、配置SELinux:
SELinux是否启用
给文件重新打安全标签
设定某些布尔弄
1、SELinux的状态:
enforcing:强制,每个受限的进程都必然受限
permissive:启用,每个受限的进程违规操作不会被禁止,但会被记录于审计日志
disabled: 禁用
2、相关命令
getenforce:获取SELinux当前状态
setenforce 0或1
0:设置为permissive
1:设置为enforcing
此设定重启失效
永久生效配置文件:/etc/sysconfig/selinux,/etc/selinux/config
SELinux={disabled|enforcing|permissive}
3、给文件重新打标签:
chcon [OPTION]... [-u USER] [-r ROLE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
-R:递归打标;
4、恢复目录或文件默认的安全上下文:
restorecon [-R] /path/to/file
5、默认安全上下文查询与修改(semanage命令)
semanage命令来自policycoreutils-python包
查看默认的安全上下文:semanage fcontext –l
添加安全上下文:semanage fcontext -a –t httpd_sys_content_t '/www(/.*)?'
恢复默认安全上下文:restorecon –Rv /www
删除安全上下文:semanage fcontext -d –t httpd_sys_content_t '/www(/.*)?'
6、Selinux端口标签
查看端口标签: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
7、SELinux布尔值
查看bool命令:
getsebool [-a] [boolean]
semanage boolean –l
semanage boolean -l –C 查看修改过的布尔值
设置bool值命令:
setsebool [-P] boolean value(on,off)
setsebool [-P] Boolean=value(0,1)
8、SELinux日志管理
yum install setroubleshoot*(重启生效)
将错误的信息写入/var/log/message
grep setroubleshoot /var/log/messages
sealert -l UUID
查看安全事件日志说明
sealert -a /var/log/audit/audit.log
关于SELinux的运用也就给大家分享这么多,生产环境中的基本应用是没什么问题的,如果想要更高级的安全策略,那就转入到了SELinux策略开发层级问题了,本文就不做探讨了。