概念
SELinux:【Security-Enhanced Linux】安全增强式Linux,是一个Linux内核的安全模块,其提供了访问控制安全策略机制。SELinux是可保护你系统安全性的额外机制,在某种程度上,它可以被看作是与标准权限系统并行的权限系统。在常规模式中,以用户身份运行进程,并且系统上的文件和其他资源都设置了权限标签 ( 控制哪些用户对哪些文件具有哪些访问权 SELinux 的另一个不同之处在于,若要访问文件,你必须具有普通访问权限和 SELinux 访问权限。因此,即使以超级用户身份 root 运行进程,根据进程以及文件或资源的 SELinux 安全性上下文可能拒绝访问文件或资源限 )。
SELinux模式
- SELinx支持3种模式
- Enforcing:强制模式,表示Selinux正在运行中,且已按照正确规则进行限制;
- Permissing: 宽容模式,表示Selinux正在运行中,会有警告信息但并不限制domain/type的访问。
- Disable: 关闭模式,表示Selinux没有运行。
- 切换模式方式
getenforce #SELinux的状态可以通过此命令查看
setenforce 0|1 #在开启状态下,切换强制和宽容模式
setenforce 0 #宽容模式Permissing
setenforce 1 #强制模式Enforcing
vim /etc/vim /etc/sysconfig/selinux
SELINUX=enforcing|permissive|disabled
#修改配置文件,设置启动后模式
#注:配置文件生效,必须重启系统
安全上下文
- 概念
- 安全上下文:是针对程序访问文件设置的一个简单的、一致的访问控制属性,在SELinux中,类型标识符是安全上下文的主要组成部分,由于历史原因,一个进程的类型通常被称为一个域(domain),”域”和”域类型”意思都一样,即都是安全上下文中的“TYPE”。
- 作用: 访问的凭证,特定的文件被特定的程序访问,会关闭系统认为不安全的所有功能
- 显示安全上下文
ls -Z #显示安全上下文
semanage fcontext -l #查询安全上下文列表,但是需要'|grep'在列表中找出文件
- 修改安全上下文
- 临时修改
消除临时效果是需要selinux重启而不是系统重启
SELinux重启的意思是enforcing启动机器一次,再改为disable启动机器一次
chcon命令 #修改对象(文件)的安全上下文
chcon [选项]... [-u 用户] [-r 角色] [-l 范围] [-t 类型] 文件...
-h, --no-dereference #影响符号连接而非引用的文件
--reference=参考文件 #使用指定参考文件的安全环境,而非指定值
-R, --recursive #递归处理所有的文件及子目录
-v, --verbose #为处理的所有文件显示诊断信息
-u, --user=用户 #设置指定用户
-r, --role=角色 #设置指定角色
-t, --type=类型 #设置指定类型
-l, --range=范围 #设置指定范围
chcon -t public_content_t /testdir/filetest1
#改变/testdir/目录下的filetest1文件的安全上下文为public_content_t
- 永久修改
semanage fcontext 命令 #用来查询与修改SELinux默认目录的安全上下文
semanage fcontext [选项] 文件路径
-l #查询安全上下文列表
-a #增加一些目录的默认安全上下文类型到列表中
-d #删除设置
semanage fcontext -l | grep '/testdir(/.*)?'
#在显示列表中查看是否有/testdir路径文件安全上下文设置
#/testdir(/.*)?格式表示testdir目录及目录下所有文件
semanage fcontext -a -t public_content_t '/westosdir(/.*)?'
#添加相应规则到安全上下文列表
semanage fcontext -d '/westosdir(/.*)?'
#删除列表中相应规则
布尔值
- SElinux布尔值:是针对服务程序功能设置的,是更改 SELinux 策略行为的开关。 SELinux 布尔值是可以启用或禁用的规则。安全管理员可以使 SELinux 布尔值来调整策略 , 以有选择地进行调整。
- 显示布尔值
getsebool [-a] [布尔值条款]
-a #列出目前系统上面的所有布尔值条款设置为开启或关闭值
[root@station ~]# getsebool -a |grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
#显示所有布尔值条款设置中名字与ftp相关的
[root@station ~]# getsebool ftpd_anon_write
ftpd_anon_write --> off
#显示ftp匿名用户写权限开关情况
- 修改布尔值
setsebool [-P] 布尔值条款=[0|1]|[off|on]
-P #直接将设置值写入配置文件,永久保留,0是关闭 1是开启
setsebool -P ftpd_anon_write on
setsebool -P ftpd_anon_write=1
#打开匿名上传功能selinux控制开关
例子
ftp服务匿名用户安全上下文设置
vim /etc/vsftpd/vsftpd.conf
systemctl restart vsftpd.service
chgrp ftp /var/ftp/pub/
chmod 775 /var/ftp/pub/
#设置匿名用户上传功能
semanage fcontext -l |grep public_content
semanage fcontext -a -t public_content_rw_t "/var/ftp/pub(/.*)?"
restorecon -RvvF /var/ftp/pub
ls -Zd /var/ftp/pub/
#设置匿名用户安全上下文列表
getsebool -a |grep ftp
setsebool -P ftpd_anon_write on
#打开匿名上传功能selinux控制开关
监控SELinux冲突
- 必须安装 setroubleshoot-server 软件包 , 才能将 SELinux 消息发送至 /var/log/messages
- setroubleshoot-server服务负责侦听 /var/log/audit/audit.log 中的审核信息并将简短摘要发送至/var/log/messages