快速掌握SELinux

SELinux基本信息

信息

详情

备注

全称

Security-Enhanced Linux

简称

SELinux

开发单位

美国国家安全局(NSA)联合SCCSecure Computing Corporation)等安全机构

发布时间

2000年以GPL协议形式开源

主要功能

通过强制访问控制机制限制进程、用户和应用程序对系统资源的访问

保护系统免受未授权访问和潜在威胁

与内核关系

支持从 Linux 内核 2.6.x 版本及以后的版本。

任何 2.6 版本或更高版本的 Linux 内核都具备运行 SELinux 的基础条件。
SELinux 已经成为许多 Linux 发行版(如 Fedora Red Hat Enterprise Linux Debian CentOS 等)的一部分,这些发行版在内核中启用了 SELinux ,并提供了可定制的安全策略以及用户层的库和工具。

SELinux主要特点 

特点

详情

备注

强制访问控制

通过预定义的安全策略或自定义策略强制实施访问控制

文件或资源的访问权限还受到策略规则的约束

多级安全策略

SELinux支持多级安全模型,允许系统管理员根据数据的敏感性对数据进行分类,并限制不同级别的数据访问。

有助于防止敏感数据的泄露。

类型强制访问控制

使用类型强制(Type EnforcementTE)策略,将每个文件、进程和用户分配一个安全级别(称为类型)

通过确保进程只能访问与其安全级别相匹配的资源,SELinux有效地限制了潜在的安全威胁。

基于角色的访问控制

用户可以被分配一个或多个角色,这些角色定义了用户可以执行的操作。

提高了系统的安全性和灵活性。

策略管理

允许管理员定义和实施复杂的安全策略,这些策略可以非常精细地控制用户、进程和数据之间的交互。

管理员可以根据需要调整或创建新的安全策略,以适应不同的安全需求。

审计和日志记录

SELinux提供了详细的审计和日志记录功能,有助于跟踪和审查系统的安全事件。

这对于分析安全漏洞、调查安全事件以及制定改进措施具有重要意义。

SELinux的工作模式

工作模式

详情

备注

强制模式(Enforcing

执行安全策略,任何违反策略的行为都会被阻止并记录。

默认工作模式,提供最高的安全性保障。

宽容模式(Permissive

不会强制执行安全策略,但会记录违反策略的行为。

通常用于策略测试和调试阶段,以便管理员在不影响系统正常运行的情况下发现潜在的安全问题。

禁用模式(Disabled

不会执行任何安全策略,与没有SELinuxLinux系统类似。

用于临时关闭SELinux或在特定情况下避免SELinux对系统性能的影响。

SELinux应用场景

应用场景

详情

服务器安全

保护Web服务器、数据库服务器和其他关键服务,防止未经授权的访问。

容器安全

在容器化环境中提供额外的安全层,限制容器间的相互影响。

网络安全

通过限制网络服务的通信范围来防止横向移动攻击。

敏感数据管理

控制对敏感文件或目录的访问,防止数据泄漏。

SELinux相关内核配置

配置项

详情

审计支持(Auditing support

SELinux 依赖于 Linux 的审计系统来记录安全事件和策略违规。因此,在内核配置中启用审计支持是 SELinux 能够正常工作的基础。
这通常位于“内核功能”或“安全选项”下的“审计支持”菜单中。

SELinux模块

在较新的 Linux 内核版本中, SELinux 可能作为内核模块的一部分被自动包含在内核构建中。
在某些情况下,可能需要手动确保 SELinux 相关的模块(如 selinuxfs )被包含在内核中。

安全选项(Security options

在内核配置的“安全选项”部分,可找到与SELinux直接相关的配置选项。这些选项可能允许启用SELinux支持、选择SELinux的策略类型(如targetedminimum等),以及配置其他与SELinux相关的安全特性。

文件系统和块设备支持

SELinux 需要文件系统支持扩展属性( xattrs ),以便存储与文件和目录相关的安全上下文信息。因此,在内核配置中启用对扩展属性的支持是很重要的。
通常位于“文件系统”或“文件系统类型”菜单下的相关选项中。

网络和安全相关的其他选项

SELinux 还可能与网络命名空间、 IPC 命名空间等安全特性相关。
这些特性虽然不直接属于 SELinux 配置的一部分,但它们可能对于在特定场景下使用 SELinux 很重要。

SELinux组成

SELinux组成

详情

备注

安全上下文

系统中每个对象(如文件、进程、端口等)都有一个安全上下文( security context ),包括用户、角色、类型和级别等属性。

SELinux使用这些安全上下文来决定某个动作(如读取、写入、执行等)是否被允许。

策略

配置文件 / etc / selinux /config
SELinux 策略文件通常位于 / etc / selinux / 目录下

这些文件包含了类型定义、角色定义、布尔值设置以及访问规则等。

管理工具

semodule semanage : 编辑 SELinux 策略文件
日志分析工具 : ausearch aureport

策略文件组成

详情

备注

类型强制规则文件(te文件)

每个以 . te 结尾的文件都包含了类型定义和规则定义。
类型定义用于指定主体(如进程)和客体(如文件、目录、套接字等)的安全类型
规则定义则用于指定哪些主体可以对哪些客体执行哪些操作。
SELinux 策略文件中最核心的部分
比如 swtelnetd.te 文件中可能定义了 swtelentd swtelentd_exec 两种类型,并规定了 swtelentd 进程可以对哪些文件或目录执行哪些操作。

文件上下文定义文件(file_contexts

保存了系统中所有文件的安全上下文。
通过这个文件,管理员可以为系统中的每个文件或目录指定其安全上下文,从而控制哪些进程可以访问它们。
安全上下文是 SELinux 用于确定访问权限的关键因素之一,它通常由用户、角色、类型和级别组成。

属性定义文件(attributes

包含了 SELinux 策略中使用的所有属性值的定义。
这些属性值用于进一步细化安全策略,为类型强制规则提供额外的判断依据。

布尔值设置文件

SELinux 还允许通过布尔值来控制某些安全功能的启用或禁用。
这些布尔值的设置通常保存在特定的配置文件中,虽然它们不是直接的类型强制规则文件,但对于调整 SELinux 策略的行为非常重要。

策略配置文件(如policy.conf

在某些 Linux 发行版中, SELinux 的策略配置可能还包含在如 / etc / selinux /targeted/policy/ policy.conf / etc / selinux /strict/policy/ policy.conf 等文件中。
这些文件包含了策略的整体配置信息,如策略类型( targeted strict 等)和其他全局设置。

注:SELinux策略文件的具体内容和位置可能因不同的Linux发行版和SELinux版本而有所差异。 

SELinux的使用

操作

详情

备注

禁用SELinux

在系统启动时,还可以通过向内核传递特定的参数(如 selinux =0 )来禁用 SELinux

永久禁用

打开 SELinux 的配置文件 / etc / selinux /config
找到 SELINUX= 这一行,通常,这一行会设置为 enforcing (强制模式)、 permissive (宽容模式)或 disabled (禁用模式)。设置为 disabled 。如果不存在这一行,则在文件末尾添加一行 SELINUX=disabled
重启系统生效

临时禁用

SELinux 设置为 Permissive 模式: sudo setenforce 0/Permissive
重新启用 SELinux 的强制模式 : sudo setenforce 1/Enforcing

查看状态

getenforce 命令查看 SELinux 的运行模式
sestatus 命令查看 SELinux 的当前状态

查看日志

SELinux 将所有违反策略的行为记录在 /var/log/audit/audit.log 文件中
可以使用 ausearch audit2allow 等工具来分析日志,了解哪些进程间的交互被 SELinux 阻止了

设置进程的可执行文件的安全上下文

假设有一个名为 / usr /local/bin/ myapp 的可执行文件,并且你想将其 SELinux 类型设置为 myapp_t chcon -t myapp_t /usr/local/bin/ myapp
使用 semanage fcontext 定义默认安全上下文 : semanage fcontext -a -t httpd_exec_t '/ usr /local/bin/ mywebapp '
恢复默认 SELinux 类型 : restorecon - v /usr/local/bin/ myapp
查看当前可执行文件的安全上下文 : ls - lZ /path/to/executable
验证 SELinux 类型: ps - eZ | grep myapp
使用 ps 命令结合 Z 选项来查看进程的 SELinux 类型
如果所需的 SELinux 类型不存在于当前策略中,你可能需要编辑 SELinux 策略以添加新类型和相关规则。这通常涉及到编辑 SELinux 策略文件(如 . te 文件),然后重新编译和加载策略。

修改文件和目录的上下文

查看当前上下文 : ls - lZ /path/to/ directory_or_file
修改上下文 : chcon [-R] [-t type] [-r role] [-u user] [-l range] file...
恢复上下文 : restorecon [-R] [-v] file...
-t type 用来指定新的类型( type )。
-r role 用来指定新的角色( role )。
-u user 用来指定新的用户( user )。
-l range 用来指定新的敏感度级别( level ),这在 MLS Multi-Level Security )系统中使用。
-R --recursive 表示递归地恢复目录及其所有子目录和文件的上下文。
-v --verbose 表示显示详细的操作信息。

AndroidSELinux

项目

详情

策略文件的组织和编译

策略文件组成: Android SELinux 策略文件主要包括 . te (类型强制规则)、 file_contexts (文件上下文定义)、 property_contexts (属性上下文定义)等。这些文件定义了 SELinux 的类型、角色、布尔值以及访问控制规则。
编译过程:在 Android 构建过程中, SELinux 策略文件会被编译成二进制格式,并打包进系统镜像中。编译过程通常涉及 checkmodule semodule_package 等工具,这些工具将文本格式的策略文件转换成 SELinux 内核可以理解的二进制格式。
模块化设计:从 Android 8.0 开始, SELinux 策略的设计变得更加模块化,允许芯片厂商和 ODM 厂商独立地更新他们自有的 SELinux 策略部分。这种设计使得策略文件可以被分散存储在不同的分区中(如 vendor.img odm.img 等),并在系统启动时合并加载。

SELinux的启动和加载

启动模式:在系统启动时, SELinux 并不立即进入强制模式( Enforcing Mode ),而是先以宽容模式( Permissive Mode )运行。在宽容模式下, SELinux 会记录违反策略的行为,但不会阻止它们。这有助于在不影响系统启动的情况下,发现潜在的策略配置问题。
策略加载:在系统启动的早期阶段, init 进程会加载 SELinux 策略文件,并将其应用到系统中。这包括从各个分区中读取策略文件,并将它们合并成完整的 SELinux 策略集。

SELinux标签系统的应用

标签系统: SELinux 通过标签系统来控制对系统资源的访问权限。每个进程、文件、目录等系统资源都有一个与之关联的 SELinux 标签,该标签由用户、角色、类型(域)和级别组成。
访问控制: SELinux 根据标签和策略规则来决定一个进程是否可以访问某个资源。如果访问请求符合策略规则,则允许访问;否则,拒绝访问并可能记录相应的安全事件。

框架对SELinux的集成

框架支持: Android 框架通过提供 SELinux 相关工具来支持 SELinux 的集成。例如,开发者可以使用 SELinux 相关的 API 来查询和修改文件或进程的 SELinux 标签。
权限管理: Android 的权限管理系统与 SELinux 紧密集成。系统服务和应用程序的权限被映射到 SELinux 的类型和规则中,从而实现对系统资源和服务的细粒度访问控制。

安全性提升

限制 root 权限:即使在获得了 root 权限的情况下, SELinux 仍然能够限制对系统资源的访问。这是因为 SELinux 的访问控制是基于标签和策略的,而不是基于传统的用户权限模型。
防止漏洞利用: SELinux 通过限制对关键系统资源的访问权限,可以降低恶意软件的影响,并防止因代码缺陷而产生的安全漏洞被利用。

有关SELinux的工具和命令

命令/工具

工作方式

备注

getenforce

通过读取 SELinux 状态文件(如 /sys/fs/ selinux /enforce )来获取当前 SELinux 的执行模式

这个文件包含了SELinux的当前状态(EnforcingPermissiveDisabled

setenforce

用于更改 SELinux 的执行模式。
它通过向 SELinux 内核模块发送命令来更改模式。

需要root权限来执行,因为更改SELinux模式会影响整个系统的安全性。

audit2allow

用于分析 SELinux audit 日志,并生成建议的策略规则,以允许被拒绝的访问。
生成的规则可以被添加到 SELinux 策略文件中,以放宽或收紧访问控制。

它读取SELinuxaudit日志(通常通过dmesgauditdlogcat等工具获取),分析日志中的拒绝消息,并尝试根据这些信息生成相应的SELinux策略规则。

semodule_package

SELinux 策略模块( . te 文件)编译成二进制格式( .mod 文件),并将其打包成 .pp 文件。

semodule

用于加载、卸载、列出或更新 SELinux 策略模块。加载模块时, semodule .pp 文件的内容加载到 SELinux 策略数据库中,从而使新的策略规则生效。

SELinux创建应用沙箱 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值