一:安全上下文原理
安全上下文是一个简单的、一致的访问控制属性,在SELinux中,类型标识符是安全上下文的主要组成部分,由于历史原因,一个进程的类型通常被称为一个域(domain),"域"和"域类型"意思都一样,即都是安全上下文中的“TYPE”。
1 :DAC与MAC的关键区别(root用户)
安 全增强型Linux(SELinux)开始是由NSA(国家安全局)启动并加入到Linux系统中的一套核心组件及用户工具,可以让应用程序运行在其所需 的最低权限上。未 经修改过的Linux系统是使用自主访问控制的,用户可以自己请求更高的权限,由此恶意软件几乎可以访问任何它想访问的文件,而如果你授予其root权 限,那它就无所不能了。
在SELinux中没有root这个概念,安全策略是由管理员来定义的,任何软件都无法取代它。这意味着那些潜在的恶意软件所能造成的损害可以被控制在最小。一般情况下只有非常注重数据安全的企业级用户才会使用SELinux。
操作系统有两类访问控制:自主访问控制(DAC)和强制访问控制(MAC)。标准Linux安全是一种DAC,SELinux为Linux增加了一个灵活的和可配置的的MAC。
所有DAC机制都有一个共同的弱点,就是它们不能识别自然人与计算机程序之间最基本的区别。简单点说就是,如果一个用户被授权允许访问,意味着程序也被授权访问,如果程序被授权访问,那么恶意程序也将有同样的访问权。 DAC最根本的弱点是主体容易受到多种多样的恶意软件的攻击,MAC就是避免这些攻击的出路,大多数MAC特性组成了多层安全模型。
SELinux实现了一个更灵活的MAC形式,叫做类型强制(Type Enforcement)和一个非强制的多层安全形式(Multi-Level Security)。
2:安全上下文格式解读
[root@localhost ~]# ls -ldZ /mnt/ drwxr-xr-x. root root system_u:object_r:mnt_t:s0 /mnt/ [root@localhost ~]# ls -ldZ /var/ftp/pub/ drwxr-xr-x. root root system_u:object_r:public_content_t:s0 /var/ftp/pub/
① USER
1) useridentity:类似Linux系统中的UID,提供身份识别,用来记录身份;安全上下文的一部分;
2) 三种常见的 user:
user_u :普通用户登录系统后的预设;
system_u :开机过程中系统进程的预设;
root :root 登录后的预设;
3) 在 targeted policy 中 users 不是很重要;
4) 在strict policy 中比较重要,所有预设的 SELinux Users 都是以 “_u” 结尾的,root 除外。
② ROLE
1) 文件、目录和设备的role:通常是 object_r;
2) 程序的role:通常是 system_r;
3) 用户的role:targeted policy为system_r; strict policy为sysadm_r、staff_r、user_r;用户的role,类似系统中的GID,不同角色具备不同的的权限;用户可以具备多个 role;但是同一时间内只能使用一个role;
4) 使用基于RBAC(Roles Based AccessControl) 的strict和mls策略中,用来存储角色信息
③ TYPE
1) type:用来将主体(subject)和客体(object)划分为不同的组,给每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境;
2) 当一个类型与执行中的进程相关联时,其type也称为domain;
3) type是SElinux security context 中最重要的部位,是 SELinux Type Enforcement 的心脏,预设值以_t结尾;
3:SELinux的运行机制
SELinux决策过程如下图所示:
图片来源cnds
当一个subject(如: 一个应用)试图访问一个object(如:一个文件),Kernel中的策略执行服务器将检查AVC (Access Vector Cache), 在AVC中,subject和object的权限被缓存(cached)。如果基于AVC中的数据不能做出决定,则请求安全服务器,安全服务器在一个矩阵 中查找“应用+文件”的安全环境。然后根据查询结果允许或拒绝访问,拒绝消息细节位于/var/log/messages中。
二:selinux 应用
1: selinux的三种状态
disable #关闭,即没有了安全上下文
enforcing #强制开启
peimissing #警告模式
2:更改selinux状态
(1) 配置文件见直接更改
[root@localhost ~]# vim /etc/selinux/config ##selinux配置文件 SELINUX=enforcing ##要改变状态在此处=后面更改
关闭SELinux的方法:
修改/etc/selinux/config文件中的SELINUX="" 为 disabled ,然后重启。
如果不想重启系统,使用命令setenforce 0
# 如果要启动 SELinux ,则不可以出现 selinux=0 的字样在 kernel 后面!
(2)setenforcing
[root@localhost ~]# setenforce 0 ##设置seinux状态为peimissing [root@localhost ~]# getenforce ##查看selinux状态 Permissive [root@localhost ~]# setenforce 1 ##设置selinux状态为enforcing [root@localhost ~]# getenforce Enforcing
注:此命令不能在disabled情况下执行
[root@foundation20 Desktop]# getenforce Disabled [root@foundation20 Desktop]# setenforce 0 setenforce: SELinux is disabled [root@foundation20 Desktop]# setenforce 1 setenforce: SELinux is disabled
3:查看安全上下文
ls -Z file|dir ##查看文件安全上下文‘
semanage fcontext -l ##显示系统中所有安全上下文
semanage fcontext -l | grep /var/ftp/ ##过滤安全上下文
semanage fcontext -l | grep /zpy
4:更改安全上下文
(1)临时更改
chcon -t public_content_t /zpy/ ##更改用户上下文 临时更改
(2)永久更改
semanage fcontext -a -t public_content_t "/zpy(/.*)?" ##更改安全上下文"/zpy(/.*)?"表示匹配文件中所有字符,永久更改
restorecon -RvvF /zpy/ ##对此文件加载
5,查看 SELinux 的政策 (Policy)
[root@master oracle]# sestatus
SELinux status: enabled <==是否启动 SELinux
SELinuxfs mount: /selinux <==SELinux 的相关文件资料挂载点
Current mode: enforcing <==目前的模式
Mode from config file: enforcing <==设定档指定的模式
Policy version: 21
Policy from config file: targeted <==目前的政策为何?
三:布尔
(1)getsebool命令是用来查询SElinux策略内各项规则的布尔值。SELinux的策略与规则管理相关命令:seinfo命令、sesearch命令、getsebool命令、setsebool命令、semanage命令。
getsebool -a
-a:列出目前系统上面的所有布尔值条款设置为开启或关闭值。
(2)setsebool
setsebool命令是用来修改SElinux策略内各项规则的布尔值。setsebool命令和getsebool命令是SELinux修改和查询布尔值的一套工具组
允许vsvtp匿名用户写入权限:
setsebool -P allow_ftpd_anon_write=1
-P:直接将设置值写入配置文件,该设置数据将来会生效的。
四:应用
怎样允许匿名用户上传?、
(1):在不考虑selinux情况下允许上传,selinux开的情况下上传的前提
vim /etc/vsftpd/vsftpd.conf
local_enable=YES anon_upload_enable=YES
chmod 775 /var/ftp/pub/
chgrp ftp pub/、
(2)当selinux为enforcing
semanage fcontext -a -t public_content_rw_t "/var/ftp/pub(/.*)?" ##给/var/ftp/pubselinux标签可执行权限 restorecon -RvvF /var/ftp/pub ##重新加载文件
(3)打开selinux针对匿名用户上传的权限
getsebool -a | grep ftp setsebool -P ftp_home_dir on
注:查看日志解决selinux问题
当安全上下文等不匹配或者有问题时,我们可以查看日志,日志中有解决方法 前提是有setroubleshoot-3.2.17-2.el7.x86_64 软件