1
2
3
4
5
6
7
8
|
一.SELInux简介
二.selinux工作机制
三.安全标签
四.配置selinux
五.测试selinux
六.设定selinux的
bool
标签
七.日志文件记录位置
八.semanage的使用
|
一.SELinux简介
secure enhanced linux
SELinux:工作于Linux内核中
DAC:自主访问控制 //linux自带的,own,group,other //只有用户 Discretionary Access Control——DAC
//问题:普通用户之间共享文件,要开放文件的其他人的权限,这样是不安全的
//假如tmp中放了重要数据,DAC是无法保证安全的。
MAC:强制访问控制 Mandatory //强制对资源限制的访问
[进程]安全上下文:
进程的属主和属组,进程所能够访问的文件的最终权限,取决于:
file:属主--->属组-->other //逐个匹配
MAC:每一个进程,假如需要访问10个资源,那他也只能访问者10个资源,及时他对其他资源也有相应的权限
DAC是自助访问功能,是没有的
MAC:任何一个进程启动后,类似于放在一个sandbox内{事先准备的最小资源集},而不能以运行者的身份,到处访问其他资源
这样进程所能够获取的资源,也仅仅是沙箱内部的资源
但是如何建立沙箱,以及沙箱切换//selinux就是类似于为每一个进程提供了一个沙箱
安全沙箱:sandbox
放到一个隔离访问空间中,类似于MAC
基本概念:
主体:访问操作的主动发起者,它是系统中信息流的启动者,可以使信息流在实体之间流动。
客体:信息的载体或从其他主体或客体接收信息的实体。
主体有时也会成为访问或受控的对象,如一个主体可以向另一个主体授权,
一个进程可能控制几个子进程等情况,这时受控的主体或子进程也是一种客体。
访问控制分类:
客体不受它们所依存的系统的限制,可以包括记录、数据块、存储页、存储段、文件、目录、
目录树、库表、邮箱、消息、程序等,还可以包括比特位、字节、字、字段、变量、处理器、
通信信道、时钟、网络结点等。
二.Selinux有两种工作级别
strict:每个进程都收到selinux的控制 //NAS开发,设定较为复杂
targetted:仅有限个进程受到selinux控制 //它是redhat开发的targeted,它只是对于主要的网络服务进行保护
比如apache, sendmail, bind, postgresql等,不属于那些domain的就都让他们在unconfined_t里
可导入性高,可用性好但是不能对整个系统进行保护。
SELinux的工作方式:
subject operation object
我 打 你
subject:进程
object:进程、文件
文件:open,write,close,chown,chmod
subject:domain 操作者
object:type 被操作对象
ls -Z //selinux为每一个文件和进程提供的安全标签,也为进程提供了安全标签
ps auxZ //激 活selinux
//原先是关闭的话,需要重启系统,内核会为每一个文件打标签
三.安全标签:
共5段:后两段对于RHEL和CentOS是没有意义的
user:role:type
user:selinux的user
role:角色,类似于group
type:类型,作用,user所能够访问的对象范围,domain
有了selinux自后,一个进程的权限,除了user-group-other之外还要受到
沙箱的限制
//为文件打好标签以后,进程的属主即使对该文件具有写权限,他也不一定能够访问,取决于沙箱的定义范围
1.对selinux来讲,如果这个进程需要访问某个文件,在沙箱的域外的其他沙箱内,如何突破限制访问
改变文件的类型:改为该进程所在域范围内,
注意:任何一个进程到底能够访问哪些文件,并不是严格按照进程所在域和被访问者自己的类型是否匹配决定的
而是依据selinux规则库决定的
SELInux规则库
规则:哪种域能访问哪种或哪些种类型文件
进程运行的过程
进程能否访问一个文件?
user->group->selinux的规则库
有记录:授权-->允许
有记录:拒绝-->拒绝,并记录日志
没有记录:拒绝
规则是二进制存放的:速度比较快
但是每次都要匹配selinux:因此还是比较慢的
四.配置selinux
selinux是否启用:
给文件重新打标:
设定某些布型特性
1.SELinux状态:enforcing|permissive|disabled
enforcing:强制,每个受限的进程都必然受限
permissive:启用,每个受限的进程违规操作不会被禁止,但会被记录于审计日志中
disabled:关闭
注:当前系统为disabled,不管转换为何种类型,都需要重启OS才能启用
getenforce
setenforce 0|1 //
仅仅当前有效,重启OS无效
配置文件:/etc/sysconfig/selinux,/etc/selinux/config
2.给文件打标签
chcon //change context ,修改标签
chcon [OPTION]... CONTEXT FILE...
chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
通常只会修改type,
chcon unconfined_u:object_r:user_home_t:s0 aa
-R :递归打标
注意:一般文件复制到某目录后,标签会随之改变
restorecon FILE //当这个文件在策略里有定义时,可以恢复原来的文件标签。
-R,-r //递归还原
1
2
3
4
5
6
7
|
--reference=参考文件:使用指定参考文件的安全环境,而非指定值。
-R, --recursive:递归处理所有的文件及子目录。
-v, --verbose:为处理的所有文件显示诊断信息。
-u, --user=用户:设置指定用户的目标安全环境。
-r, --role=角色:设置指定角色的目标安全环境。
-t, --type=类型:设置指定类型的目标安全环境。
-l, --range=范围:设置指定范围的目标安全环境
|
3.标签查看:
ls -Z
ls --context a.txt
4.复制和查找标签
cp -Z,--conntext=CONTEXT 在拷贝的时候指定目的文件的security context
find /home/fu/ --context fu:fu_r:amule_t -exec ls -Z {} \:
5.查看se状态
sestatus -v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
1.USER
1) user identity:类似Linux系统中的UID,提供身份识别,用来记录身份;安全上下文的一部分;
2) 三种常见的 user:
user_u :普通用户登录系统后的预设;
system_u :开机过程中系统进程的预设;
root :root 登录后的预设;
3) 在 targeted policy 中 users 不是很重要;
4) 在 strict policy 中比较重要,所有预设的 SELinux Users 都是以 “_u” 结尾的,root 除外。
2 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 Access Control) 的strict和mls策略中,用来存储角色信息
3 TYPE
1) type:用来将主体(subject)和客体(
object
)划分为不同的组,给每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境;
2) 当一个类型与执行中的进程相关联时,其type也称为domain;
3) type是SElinux security context 中最重要的部位,是 SELinux Type Enforcement 的心脏,预设值以_t结尾;
LEVEL和CATEGORY:定义层次和分类,只用于mls策略中
LEVEL:代表安全等级,目前已经定义的安全等级为s0-s15,等级越来越高
CATEGORY:代表分类,目前已经定义的分类为c0-c1023
|
五.测试selinux
1.yum install httpd//
1
2
3
4
5
6
7
|
2.<html>
<title>Test page</title>
<body>
<h1>Welcome to Test</h1>
<p> hello </p>
</body>
</html>
|
unconfined_u:object_r:httpd_sys_content_t:s0
ps auxZ |grep httpd
system_u:system_r:httpd_t:s0
//httpd_sys_content_t是httpd_t的一个子类型,因此httpd_t该进程能够访问index.html
3.vim /etc/httpd/conf/httpd.conf
1
2
3
4
5
6
7
|
DocumentRoot
"/www/html"
<Directory
"/www/html"
>
...
</Directory>
mkdir -pv /www/html
systemctl restart httpd
cp /
var
/www/html/index.html /www/html
|
ls -Z
unconfined_u:object_r:default_t //类型已经修改
4.再次访问
forbidden
一:setenforce 0//可以再次访问
二:chcon -t httpd_sys_content_t a.html
注意:/var/www/html目录中,修改type是没有效果的,selinux不会禁止,除非,改变原有的目录
六.设定selinux的bool标签
setsebool 是用来切换由布尔值控制的 SELinux 策略的,
getsebool 获取bool值
getsebool -a //查看所有的
getsebool ftp_home_dir
setsebool
-P //保存到策略文件中,永久有效
setsebool [ -PNV ] boolean value | bool1=val1 bool2=val2 ...
setsebool ftp_home_dir on
on/off 1/0 :1表示开启 //下次开机失效
-P:保存到策略文件,更新二进制文件
什么是SElinux布尔值呢?SEliux布尔值就相当于一个开关,精确控制SElinux对某个服务的某个选项的保护
setsebool ftp_home_dir on //开始保护,但是临时生效
七.日志文件记录位置
/var/log/audit/audit.log
tail audit.log
selinux的管理工具:
semanage
八.semanage的使用
相关命令:setsebool,getsebool,seinfo,sesearch
semanage {login|user|port|interface|fcontext|translation} -l
semanage fcontext -{a|d|m} [-frst] file_spec
-l:查询。
fcontext:主要用在安全上下文方面。
-a:增加,你可以增加一些目录的默认安全上下文类型设置。
-m:修改。
-d:删除。
这是一个功能强大的策略管理工具,有了它即使没有策略的源代码,也是可以管理安全策略的。
本文转自MT_IT51CTO博客,原文链接:http://blog.51cto.com/hmtk520/1981448,如需转载请自行联系原作者