请选择 进入手机版 | 继续访问电脑版

[LINUX] 深入分析 Linux体系 中的SELinux访问控制功能

[复制链接]
查看51 | 回复4 | 2021-9-4 23:32:26 | 显示全部楼层 |阅读模式

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于逼迫 访问控制的实现,是 Linux汗青 上最良好 的新安全子体系 。NSA是在Linux社区的帮助下开发 了一种访问控制体系,在这种访问控制体系的限定 下,历程 只能访问那些在他的使命 中所必要 文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易 安装的包得到。
SELinux 是 2.6 版本的 Linux 内核中提供的逼迫 访问控制(MAC)体系 。对于现在 可用的 Linux安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的。SELinux 在范例 强礼服 务器中合并了多级安全性或一种可选的多类策略,并采用了基于脚色 的访问控制概念。[1]
大部分利用 SELinux 的人利用 的都是 SELinux 停当 的发行版,比方 Fedora、Red Hat Enterprise Linux (RHEL)、Debian或 Centos。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以利用 SELinux 的功能。
SELinux是一种基于 域-范例 模子 (domain-type)的逼迫 访问控制(MAC)安全体系 ,它由NSA编写并计划 成内核模块包含到内核中,相应的某些安全相干 的应用也被打了SELinux的补丁,末了 还有一个相应的安全策略。任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜伏 告急 信息的文件扔到/tmp目次 下,那么在DAC环境 下没人能克制 他。SELinux提供了比传统的UNⅨ权限更好的访问控制。

1. 简介
SELinux带给Linux的告急 价值是:提供了一个机动 的,可设置 的MAC机制。

Security-Enhanced Linux (SELinux)由以下两部分构成 :

1) Kernel SELinux模块(/kernel/security/selinux)

2) 用户态工具

SELinux是一个安全体系布局 ,它通过LSM(Linux Security Modules)框架被集成到Linux Kernel 2.6.x中。它是NSA (United States National Security Agency)和SELinux社区的团结 项目。

SELinux提供了一种机动 的逼迫 访问控制(MAC)体系 ,且内嵌于Linux Kernel中。SELinux定义了体系 中每个【用户】、【历程 】、【应用】和【文件】的访问和变化 的权限,然后它利用 一个安全策略来控制这些实体(用户、历程 、应用和文件)之间的交互,安全策略指定怎样 严酷 或宽松地举行 检查。

SELinux对体系 用户(system users)是透明的,只有体系 管理员必要 思量 在他的服务器中怎样 订定 严酷 的策略。策略可以根据必要 是严酷 的或宽松的。

只有同时满足 了【标准Linux访问控制】和【SELinux访问控制】时,主体才能访问客体。

1.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)。

在Android4.2中,SELinux是个可选项,谷歌并没有直接取消root权限或其他功能。这是一个为企业级用户或是对隐私数据极为器重 的用户提供的选项,平凡 消耗 者则完全可以关闭它。  


2. SELinux的运行机制
SELinux决定 过程如下图所示:

2016411121934972.jpg (668×353)

当一个subject(如: 一个应用)试图访问一个object(如:一个文件),Kernel中的策略实行 服务器将检查AVC (Access Vector Cache), 在AVC中,subject和object的权限被缓存(cached)。假如 基于AVC中的数据不能做出决定,则哀求 安全服务器,安全服务器在一个矩阵中查找“应用+文件”的安全环境。然后根据查询结果 答应 或拒绝访问,拒绝消息细节位于/var/log/messages中。

3. SELinux伪文件体系
/selinux/伪文件体系 kernel子体系 通常利用 的下令 ,它雷同 于/proc/伪文件体系 。体系 管理员和用户不必要 操作这部分。/selinux/目次 举比方 下:

复制代码代码如下:
-rw-rw-rw- 1 root root 0 Sep 22 13:14 access
dr-xr-xr-x 1 root root 0 Sep 22 13:14 booleans
--w------- 1 root root 0 Sep 22 13:14 commit_pending_bools
-rw-rw-rw- 1 root root 0 Sep 22 13:14 context
-rw-rw-rw- 1 root root 0 Sep 22 13:14 create
--w------- 1 root root 0 Sep 22 13:14 disable
-rw-r--r-- 1 root root 0 Sep 22 13:14 enforce
-rw------- 1 root root 0 Sep 22 13:14 load
-r--r--r-- 1 root root 0 Sep 22 13:14 mls
-r--r--r-- 1 root root 0 Sep 22 13:14 policyvers
-rw-rw-rw- 1 root root 0 Sep 22 13:14 relabel
-rw-rw-rw- 1 root root 0 Sep 22 13:14 user

如cat enforce其值大概 如下:
1: enforcing mode

0: permissive mode

4. SELinux设置 文件
SELinux设置 文件(configuration)或策略文件(policy)位于/etc/目次 下。

4.1 /etc/sysconfig/selinux设置 文件
/etc/sysconfig/selinux是一个符号链接,真正的设置 文件为:/etc/selinux/config

设置 SELinux有如下两种方式:

1) 利用 设置 工具:Security Level Configuration Tool (system-config-selinux)

2) 编辑设置 文件 (/etc/sysconfig/selinux).

/etc/sysconfig/selinux中包含如下设置 选项:

1) 打开或关闭SELinux

2) 设置体系 实行 哪一个策略(policy)

3) 设置体系 怎样 实行 策略(policy)

4.2 设置 文件选项
4.2.1 SELINUX
SELINUX=enforcing|permissive|disabled —定义SELinux的高级状态
• enforcing — The SELinux security policy is enforced.
• permissive — The SELinux system prints warnings but does not enforce policy.
• disabled — SELinux is fully disabled. SELinux hooks are disengaged from the kernel and the pseudo-file system is unregistered.

4.2.2 SELINUXTYPE(安全策略)
SELINUXTYPE=targeted|strict — 指定SELinux实行 哪一个策略
• targeted — 只有目标 网络daemons保护。每个daemon是否实行 策略,可通过system-config-selinux举行 设置 。保护常见的网络服务,为SELinux默认值。
可利用 如下工具设置每个daemon的布尔值:

1) getsebool -a: 列出SELinux的全部 布尔值

2) setsebool: 设置SELinux布尔值,如:setsebool -P dhcpd_disable_trans=0,-P表示即利用 reboot之后,仍然 有效 。

• strict — 对SELinux实行 完全的保护。为全部 的subjects和objects定义安全环境,且每一个Action由策略实行 服务器处理。提供符合Role-based-Access Control(RBAC)之policy,具备完备 的保护功能,保护网络服务、一样平常 指令及应用程序。

4.2.3 SETLOCALDEFS
SETLOCALDEFS=0|1 — 控制怎样 设置本地定义(users and booleans)。
• 1:这些定义由load_policy控制,load_policy来自于文件/etc/selinux/

• 0:由semanage控制

4.3 /etc/selinux/目次
/etc/selinux/是存放全部 策略文件和告急 设置 文件的目次 。其例子如下:  

复制代码代码如下:
-rw-r--r-- 1 root root 448 Sep 22 17:34 config
drwxr-xr-x 5 root root 4096 Sep 22 17:27 strict
drwxr-xr-x 5 root root 4096 Sep 22 17:28 targeted

5. SELinux工具
1) /usr/sbin/setenforce — 修改SELinux运行模式,例子如下:

• setenforce 1 — SELinux以逼迫 (enforcing)模式运行
• setenforce 0 — SELinux以告诫 (permissive)模式运行

为了关闭SELinux,你可以修改设置 文件:/etc/selinux/config或/etc/sysconfig/selinux


2) /usr/sbin/sestatus -v — 表现 体系 的具体 状态,例子如下:

SELinux status:                 enabled 
SELinuxfs mount:                /selinux 
Current mode:                   enforcing 
Mode from config file:          enforcing 
Policy version:                 21 
Policy from config file:        targeted 

Process contexts: 
Current context:                user_u:system_r:unconfined_t:s0 
Init context:                   system_u:system_r:init_t:s0 
/sbin/mingetty                  system_u:system_r:getty_t:s0 

3) /usr/bin/newrole — 在一个新的context或role中运行一个新的shell
4) /sbin/restorecon — 通过为得当 的文件或安全环境标记扩展属性,设置一个或多个文件的安全环境

5) /sbin/fixfiles — 检查或校正文件体系 中的安全环境数据库

6) getsebool — getsebool -a:查看全部 布尔值

7) setsebool — 参数-P,永世 性设置

8) chcon 修改文件、目次 的安全上下文
chcon –u[user]
chcon –r[role]
chcon –t[type]
chcon –R  递归


6. 范例 逼迫 的安全上下文(Type Enforcement Security Context)
安全上下文是一个简单的、划一 的访问控制属性,在SELinux中,范例 标识符是安全上下文的告急 构成 部分,由于汗青 缘故原由 ,一个历程 的范例 通常被称为一个域(domain),"域"和"域范例 "意思都一样,我们不必苛刻地去区分或避免利用 术语域,通常,我们以为 【域】、【域范例 】、【主体范例 】和【历程 范例 】都是同义的,即都是安全上下文中的“TYPE”。

SELinux对体系 中的很多 下令 做了修改,通过添加一个-Z选项表现 客体和主体的安全上下文。

1) 体系 根据PAM子体系 中的pam_selinux.so模块设定登录者运行程序的安全上下文;
2) 文件的Security Contex规则如下:

• rpm包安装的:会根据rpm包内记录来天生 安全上下文;

• 手动创建的文件:会根据policy中规定的来设置安全上下文;

• cp:会重新天生 安全上下文;

• mv:安全上下文则不变。

3) id -Z
表现 了你的shell的安全上下文;
4) ps -Z

检查历程 的安全上下文;
5) ls -Z
检查文件、目次 的安全上下文;

6.1 安全上下文格式
全部 操作体系 访问控制都是以关联的客体和主体的某种范例 的访问控制属性为基础的。在SELinux中,访问控制属性叫做安全上下文。全部 客体(文件、历程 间通讯通道、套接字、网络主机等)和主体(历程 )都有与其关联的安全上下文,一个安全上下文由三部分构成 :用户、脚色 和范例 标识符。常常用下面的格式指定或表现 安全上下文:

USER:ROLE:TYPE[LEVEL[:CATEGORY]]

安全上下文中的用户和脚色 标识符除了对逼迫 有一点束缚 之外对范例 逼迫 访问控制策略没什么影响,对于历程 ,用户和脚色 标识符显得更故意 义,由于 它们是用于控制范例 和用户标识符的团结 体,如许 就会与Linux用户账号关联起来;然而,对于客体,用户和脚色 标识符几乎很少利用 ,为了规范管理,客体的脚色 常常是object_r,客体的用户常常是创建客体的历程 的用户标识符,它们在访问控制上没什么作用。

标准Linux安全中的用户ID和安全上下文中的用户标识符之间的区别,就技术而论,它们是正交标识符,分别用于标准的和安全加强 的访问控制机制,这两者之间的任一相互关联都是通过登陆历程 按照规范严酷 规定的,而不是通过SELinux策略直接逼迫 实验 的。

6.1.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 除外。

6.1.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策略中,用来存储脚色 信息

6.1.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

6.2 对比SELinux和标准Linux的访问控制属性
在标准Linux中,主体的访问控制属性是与历程 通过在内核中的历程 布局 关联的真实有效 的用户和组ID,这些属性通过内核利用 大量工具举行 保护,包括登陆历程 和setuid程序,对于客体(如文件),文件的inode包括一套访问模式位、文件用户和组ID。从前 的访问控制基于读/写/实行 这三个控制位,文件全部 者、文件全部 者所属组、其他人各一套。

在SELinux中,访问控制属性总是安全上下文三人组(用户:脚色 :范例 )情势 ,全部 客体和主体都有一个关联的安全上下文。必要 特别 指出的是,由于 SELinux的告急 访问控制特性是范例 逼迫 ,安全上下文中的范例 标识符决定了访问权。

注意 :SELinux是在标准Linux基础上增长 了范例 逼迫 (TE: Type Enforcement),这就意味着标准Linux和SELinux访问控制都必须满足 先要能访问一个客体,比方 :假如 我们对某个文件有SELinux写入权限,但我们没有该文件的w允许 ,那么我们也不能写该文件。下表总结了标准Linux和SELinux之间访问控制属性的对比:   

  标准Linux SELInux
历程 安全属性 真实有效 的用户和组ID 安全上下文
客体安全属性 访问模式、文件用户和组ID 安全上下文
访问控制基础 历程 用户/组ID和文件的访问模式,
此访问模式基于文件的用户/组ID
在历程 范例 和文件范例
之间答应 的允许

6.3 小结
1) 体系 中每个文件、目次 、网络端口等都被指定一个安全上下文,policy 则给出各安全上下文之间的作用规则。
2) SELinux根据policy及security context规则来决定存取活动 是否可实行 ;
3) Subject(主体):体系 历程 ,比如/usr/sbin/httpd;
4) Object(客体):被存取的项目,比如File、Directory、IP、Socket等;

7. 范例 逼迫 (TE)访问控制
在SELinux中,全部 访问都必须明白 授权,SELinux默认不答应 任何访问,不管Linux用户/组ID是什么。这就意味着在SELinux中,没有默认的超级用户了,与标准Linux中的root不一样,通过指定主体范例 (即域)和客体范例 利用 allow规则授予访问权限,allow规则由四部分构成 :
• 源范例 (Source type(s) ) 通常是尝试访问的历程 的域范例
• 目标 范例 (Target type(s) ) 被历程 访问的客体的范例
• 客体种别 (Object class(es)) 指定答应 访问的客体的范例
• 允许 (Permission(s)) 象征目标 范例 答应 源范例 访问客体范例 的访问种类
举比方 下:

复制代码代码如下:
allow user_t bin_t : file {read execute getattr};

这个例子表现 了TE allow规则的基础语法,这个规则包含了两个范例 标识符:源范例 (或主体范例 或域)user_t,目标 范例 (或客体范例 )bin_t。标识符file是定义在策略中的客体种别 名称(在这里,表示一个平凡 的文件),大括号中包括的许但是 文件客体种别 有效 允许 的一个子集,这个规则表明 如下:
拥有域范例 user_t的历程 可以读/实行 或获取具有bin_t范例 的文件客体的属性。

SELinux allow规则如之前的例子在SELinux中现实 上都是授予访问权的,真正的挑衅 是怎样 保证数以万计的访问精确 授权,只授予必须的权限,实现尽大概 的安全。

7.1 标准Linux安全中的setuid程序
醒目 用户joe想安全地修改现有的暗码 题目 ,Linux办理 这个题目 的方法是通过给passwd赋一个setuid值,使实在 行 时具有root权限,假如 你在一个平凡 Linux体系 上列出暗码 文件,你看到的会是:

复制代码代码如下:
# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 41292 Sep 7 2012 /usr/bin/passwd

这里注意 两件事,第一个是在全部 者权限的x位置被设置为s了,这就是所谓的setuid位,意思是任何实行 这个文件的历程 ,它的有效 UID(即用户ID)将会被改为文件全部 者。这里,root是文件全部 者,因此当实行 暗码 程序时现实 大将 会以root用户的ID运行。实在 行 过程如下图所示:

2016411122055860.jpg (563×381)

从上面的分析中可以看出,passwd以root权限的身份运行, 它可以访问体系 的任何资源,这给体系 带来了安全题目 ,实在 它只必要 访问shadow及其相干 的文件就可以了。而且shadow只必要 担当 passwd的访问即可。这在标准Linux中是无法做到的,而TE(范例 逼迫 )可实现此功能。

8. 基于脚色 的访问控制
SELinux也提供了一种基于脚色 的访问控制(RBAC),SELinux的RBAC特性是依赖 范例 逼迫 建立的,SELinux中的访问控制告急 是通过范例 实现的,脚色 基于历程 安全上下文中的脚色 标识符限定 历程 可以变化 的范例 ,云云 ,策略编写器可以创建一个脚色 ,答应 它变化 为一套域范例 (假设范例 逼迫 规则答应 变化 ),从而定义脚色 的限定 。
9. SELinux中的多级安全(Multi-Level Security)
范例 逼迫 (Type Enforcement)无疑是SELinux引入的最告急 的逼迫 访问控制(MAC)机制,然而,在某些环境 下,告急 是保密控制应用程序的一个子集,传统的多级安全(MLS)MAC与范例 逼迫 一起利用 显得更有价值,在这些环境 下,SELinux总是包括某种格式的MLS功能,MLS特性是可选的,在SELinux的两个MAC机制中,它通常不是最告急 的谁人 ,对大多数安全应用程序而言,包括很多 非保密数据应用程序,范例 逼迫 是最得当 的安全加强 的机制,只管 云云 ,MLS对部分应用程序还是加强 了安全性。

在大多数SELinux策略中,敏感度(s0,s1,...)和范畴(c0,c1,...)利用 通配名,将它留给用户空间程序和程序库,以指定故意 义的用户名。(比方 :s0大概 与UNCLASSIFIED 关联,s1大概 与SECRET关联)
为了支持MLS,安全上下文被扩展了,包括了安全级别,如:

复制代码代码如下:
user:role:type:sensitivity[:category,...] [-sensitivity[:category,...]]

例子如下所示:

复制代码代码如下:
root@luohj-virtual-machine:~# ps -aZ
LABEL PID TTY TIME CMD
unconfined_u:system_r:insmod_t:s0-s0:c0.c255 4940 pts/0 00:00:00 passwd

注意 MLS安全上下文至少必须有一个安全级别(它由单个敏感度和0个或多个范畴构成 ),但可以包括两个安全级别,这两个安全级别分别被叫做低(或历程 趋势)和高(或历程 间隙),假如 高安全级别丢失,它会被以为 与低安全级别的值是雷同 的(最常见的环境 ),现实 上,对于客体和历程 而言,低和高安全级别通常都是雷同 的,通常用于历程 的级别范围被以为 是受信托 的主体(即历程 信托 降级信息)或多层客体,如一个目次 ,它又包括了不同安全级别的客体。为了使形貌 简单,假设全部 的历程 和客体都只有一个安全级别。

10. 策略分析工具apol
apol(即analyze policy【分析策略】)工具是一个成熟的SELinux策略分析工具,它位于setools工具包中。利用 它打开policy.xx文件即可分析全部 的相干 策略。xx为策略编译器(checkpolicy)的版本号。

2016411122111910.png (522×558)

11. 小结
SELinux访问控制是基于与全部 体系 资源(包括历程 )关联的安全上下文的,安全上下文包括三个组件:用户、脚色 和范例 标识符。范例 标识符是访问控制的告急 基础。

在SELinux中,访问控制的告急 特性是范例 逼迫 ,在主体(即历程 )与客体之间通过指定allow规则(主体的范例 【也叫做域范例 】是源,客体的范例 是目标 )举行 访问授权,访问被授予特定的客体种别 ,为每个客体种别 设置细粒度的允许 。

范例 逼迫 的一个关键上风 是它可以控制哪个程序大概 运行在给定的域范例 上,因此,它答应 对单个程序举行 访问控制(比起用户级的安全控制要安全得多了),使程序进入另一个域(即以一个给定的历程 范例 运行)叫做域变化 ,它是通过SELinux的allow规则精密 控制的,SELinux也答应 通过type_transition 文件使域变化 自动 发生。

SELinux在访问控制安全上下文中不直接利用 脚色 标识符,相反,全部 的访问都是基于范例 的,脚色 用于关联答应 的域范例 ,如许 可以设置范例 逼迫 答应 的功能组合到一起,将用户作为一个脚色 举行 认证。

SELinux提供了一个可选的MLS访问控制机制,它提供了更多的访问限定 ,MLS特性依赖 TE机制建立起来的,MLS扩展了安全上下文的内容,包括了一个当前的(或低)安全级别和一个可选的高安全级别。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 杰9 | 2021-9-17 10:53:39 | 显示全部楼层
有节操!
回复

使用道具 举报

avatar 123457549 | 2021-10-4 11:21:28 | 显示全部楼层
admin楼主很有艺术范!
回复

使用道具 举报

admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,运动刷步数还是免费刷的,QQ和微信都可以刷,特别好用。访问地址:http://yd.mxswl.com 猫先森网络
回复

使用道具 举报

admin楼主发几张靓照啊!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则