什么是SELinux

SELinux (Security-Enhanced linux)安全增强的linux,是linux的内核模块,可以理解为linux的安全子系统,SELinux 可以作为标签系统运行,系统中的文件操作、进程、端口、ip、网络行为等,都配置了与之关联的标签。在给计算机内的资源定义标签以后,只有拥有标签的进程才能访问。

SELinux 三种状态

1.Enforcing(严格模式):selinux正在运行,设置的所有安全措施都被启用,与SELinux 安全策略相关的服务和程序被限制,并记录到日志中。
2. Permissive(宽容模式):表示selinux运行,设置的所有安全措施被开启,与SELinux 安全策略相关的服务和程序被限制,程序不会受到限制,违反安全测率,记录到日志中。
3. Disabled(关闭):SELinux安全策略被关闭。

Enforcing(1) : 严格模式,拦截未定义的不安全请求;
Permissive(0):宽容模式,记录未定义的操作;
Disabled: 关闭selinux模式。

如何查看SELinux 状态

1.查看selinxu状态:getenforce
2. setenforce 1 (设置selinux状态为严格模式)
3. setenforce 0 (设置selinux状态为宽容模式)
setenforce 只能设置0和1两种。如果需要关闭需要修改系统配置下的selinux文件
例如:/system/etc/selinux/config 修改其中定义的模式为Disabled。

selinx的上下文关系

SELinux 提供了基于角色的访问控制 (RBAC)、类型强制 (TE) 和可选的多级安全性 (MLS) 的组合。
例如:
~]$ ls -Z file1
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1

SELinux 上下文遵循 SELinux user:role:type:level 语法。

SELinux user
每个 Linux 用户都使用 SELinux 策略映射到一个 SELinux 用户。这允许 Linux 用户继承对 SELinux 用户的限制。映射的 SELinux 用户标识在 SELinux 上下文中用于该会话中的进程,以便定义它们可以输入的角色和级别。
role
SELinux 用户被授权使用角色,角色被授权用于域。该角色充当域和 SELinux 用户之间的中介。
type
类型是类型强制的一个属性。该类型为进程定义域,为文件定义类型。
当存在允许访问的特定 SELinux 策略规则时,才允许访问。
level
每个级别都是一个敏感度类别对,类别是可选的。我称其为灵敏度,灵敏度有s0,s1,s2。个人不清楚灵敏度定义,不过常见默认s0。

域转换

一个域中的进程通过执行具有新域类型的应用程序来转换到另一个域。该权限在 SELinux 策略中使用,并控制哪些应用程序可用于进入域。
以下示例演示了域转换:

entrypointentrypoint

域转换示例

用户想要更改其密码。为此,他们运行该实用程序。可执行文件标有以下类型:
passwd/usr/bin/passwdpasswd_exec_t

~]$ ls -Z /usr/bin/passwd
-rwsr-xr-x  root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd

该实用程序访问 ,标有以下类型:passwd/etc/shadowshadow_t

~]$ ls -Z /etc/shadow
-r--------. root root system_u:object_r:shadow_t:s0    /etc/shadow

SELinux 策略规则声明允许在域中运行的进程读取和写入标有该类型的文件。该类型仅适用于密码更改所需的文件。这包括 、 及其备份文件。

`passwd_tshadow_tshadow_t/etc/gshadow/etc/shadow`

SELinux 策略规则声明域的权限设置为类型。

`passwd_tentrypointpasswd_exec_t`

当用户运行该实用程序时,用户的 shell 进程将转换到域。使用 SELinux,由于默认操作是拒绝,并且存在允许(除其他外)在域中运行的应用程序访问标有该类型的文件的规则,因此允许应用程序访问 ,并更新用户的密码。

passwdpasswd_tpasswd_tshadow_tpasswd/etc/shadow

此示例并非详尽无遗,用作解释域转换的基本示例。尽管有一个实际规则允许在域中运行的主体访问标有文件类型的对象,但在使用者可以转换到新域之前,必须满足其他 SELinux 策略规则。在此示例中,类型强制确保:

passwd_tshadow_t

只能通过执行标有该类型的应用程序来输入域;只能从授权的共享库执行,例如类型;并且无法执行任何其他应用程序。

passwd_tpasswd_exec_tlib_t

只有授权域(如 )才能写入标有该类型的文件。即使其他进程以超级用户权限运行,这些进程也无法写入标有该类型的文件,因为它们不在域中运行。

passwd_tshadow_tshadow_tpasswd_t

只有授权的域才能转换到域。例如,在域中运行的进程没有执行的正当理由;因此,它永远无法过渡到域。

passwd_tsendmailsendmail_tpasswdpasswd_t

域中运行的进程只能读取和写入授权类型,例如标有 or 类型的文件。这可以防止应用程序被诱骗读取或写入任意文件。

passwd_tetc_tshadow_tpasswd