SELinux:Secure Enhanced Linux,是美国国家安全局(NSA=The National Security Agency)和SCC(Secure Computing Courporation)开发的LInux的一个强制控制的安全模块。2000年以GNU GPL发布,Linux内核2.6版本后继承在内核中。
对于目前可用的 Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。
SElinux(安全增强型linux):内核级的加强型火墙,内核上的插件,改变后要重启。它是可保护系统安全性的额外机制。在某种程度上,它可以被看作是与标准权限系统并行的权限系统。在常规模式中,以用户身份运行进程,并且系统上的文件和其他资源都设置了权限标签。(控制哪些用户对哪些文件具有哪些访问权,selinux的另一个不同之处在于,若要访问文件必须具有普通访问权限和selinux访问权限。因此,即使以超级用户身份运行程序,根据进程以及文件或资源的selinux安全性上下文可能拒绝访问文件或资源)
SELinux策略:
对象(object):所有可以读取的对象,包括文件、目录和进程,端口等
主体:进程称为主体(subject)
SELinux中对所有的文件都赋予一个type的文件类型标签,对于所有的进程也赋予各自的一个domain的标签。domain标签能够执行的操作由安全策略里定义。
当一个subject试图访问一个object,Kernel中的策略执行服务器将检查AVC(访问矢量缓存Access Vector Cache),在AVC中,subject和object的权限被缓存(cached),查找“应用+文件”的安全环境。然后根据查询结果运行或拒绝访问。
安全策略:定义主体读取对象的规则数据库,规则中记录了哪个类型的主体使用哪个方法读取哪一项对象是允许还是拒绝的,并且定义了那种行为是运行或拒绝。
状态 | 功能 |
---|---|
Enforcing | 警告并拒绝 |
Permissive | 警告不拒绝 |
Disabled | 不警告不拒绝 |
更改方式1
setenforce 0 ##警告不拒绝 此状态下安全上下文不同的文件可以显示(后面会详细解释安全上下文)
setenforce 1 ##警告并拒绝
注意:我们还可以用来更改SElinux的状态
更改方式2
vim /etc/sysconfig/selinux ##开启selinux,enforcing-->disabled
reboot ##重启虚拟机
getenforce ##查看状态
sestatus
因为selinux是需要内核或内核模块来支持的,那么也就需要对应的配置文件来提供读取,这里说明了其主配置目录为/etc/selinux,而当前状态为enabled启用状态,也就是说selinux还是可以通过命令来设置是否开启。而当前模式表示其selinux的具体管理方式。
传统的 Linux中一切皆文件,由用户、组、权限控制访问。而在SELinux中一切皆对象(object),由存放在inde表的扩展属性域的安全元素所控制其访问。
安全上下文(security context):所有的文件和端口资源和进程都具备的安全标签
组成元素:user:role:type:sesitivity:category
如:user_u:object_r:tmp_t:s0:c0
SElinux安全上下文工作类型:
类型 | 功能 |
---|---|
strict | centos5,每个进程都受到selinux的控制 |
targeted | 用来保护常见的网络服务,仅有限进程受到 selinux控制,只监控容易被入侵的进程,rhel4只保护13个服务,rhel5保护88个服务 |
minimum | centos7,修改过的targeted,只对选择的网络服务。 |
mls | 提供MLS(多级安全)机制的安全性 |
注意 | minimum和mls稳定性不足,未加以应用 |
安全上下文的查看
ls -Z file ##查看文件的安全上下文
ls -Zd dir ##查看目录的安全上下文
id -Z ##查看用户安全上下文
1.文件安全上下文限制了访问用户的权限——目录下的文件若安全上下文若不一致,不可查看。
实验:
由图可见,/mnt下建立的文件westso于/var/ftp/pub的文件安全上下文不一致,匿名用户登陆时无法查看,但是实际上文件确实存在于目录中
此时我们在/var/ftp中建立文件发现,安全上下文一致能被查看
2.安全上下文的修改
1)临时更改——重启服务后其安全上下文就会恢复
chcon -t public_content_t /var/ftp/westos ##更改westos的安全上下文为public_content_t
(1)首先更改vsftpd的配置文件,更改匿名用户加目录为/westos
(2)在/下建立目录/westos,并在目录中建立文件,并用lftp登陆查看
(3)更改/westos及其下文件的安全上下文
chcon -t public_content_t /westos/ -R
(4)修改SElinux状态,重启后再打开SElinux,然后重启
(5)查看/westos及其下文件安全上下文——恢复default_t(默认安全上下文)
2)永久更改
semanage fcontext -a -t public_content_t '/westos(/.*)?' ##永久更改
semanage fcontext -l | grep /hello ##查看该文件安全上下文列表
restorecon -FvvR /westos ##刷新文件安全列表,使更改生效
ls -Zd /westos ##查看安全列表
getsebool -a | grep ftp ##查看关于ftp的所有sebool的值
setsebool -P ftp_home_dir on ##打开selinux本地用户上传开关,-P为永久开启
布尔型 开关0----->关 1------>开 on–>开 , off–> 关
开启后测试
1)修改本地文件系统的权限
chmod 775 /var/ftp/pub
chgrp ftp /var/ftp/pub
vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=YES
systemctl restart vsftpd ##在配置文件中打开匿名用户上传参数
getsebool -a | grep ftp
setsebool -P ftpd_anon_write on
ls -Zd /var/ftp/pub
semanage fcontext -a -t public_content_rw_t /var/ftp/pub
restorecon -FvvR /var/ftp/pub
测试
报错详细信息可以在系统日志中查看
我们首先清空日志
> /var/log/messages
> /var/log/audit/audit.log
cat /var/log/audit/audit.log
cat /var/log/messages
模拟问题:我们把上面实验中关于匿名用户上传权限的布尔开关关掉
setsebool -P ftpd_anon_write 0
现在我们使用匿名用户登陆并上传文件
安装能提供报错解决方案的软件
rpm -qa | grep setroubleshoot ##查看报错的文件
yum install setroubleshoot-server-3.2.17-2.el7.x86_64 -y ##安装报错软件
安装成功后
> /var/log/messages ##清空日志
cat /var/log/messages ##查看报错解决方案