selinux 操作详解

1. 查看SELinux状态

1.1 getenforce

getenforce 命令是单词get(获取)和enforce(执行)连写,可查看selinux状态,与setenforce命令相反。
setenforce 命令则是单词set(设置)和enforce(执行)连写,用于设置selinux防火墙状态,如: setenforce 0用于关闭selinux防火墙,但重启后失效

[root@localhost ~]# getenforce
Enforcing

1.2 /usr/sbin/sestatus

Current mode表示当前selinux防火墙的安全策略

[root@localhost ~]# /usr/sbin/sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28


SELinux status:selinux防火墙的状态,enabled表示启用selinux防火墙
Current mode: selinux防火墙当前的安全策略,enforcing 表示强

2. 关闭SELinux

2.1 临时关闭

setenforce 0 :用于关闭selinux防火墙,但重启后失效。

[root@localhost ~]# setenforce 0
[root@localhost ~]# /usr/sbin/sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28

2.1 永久关闭

修改selinux的配置文件,重启后生效。打开 selinux 配置文件,修改 selinux 配置文件,将SELINUX=enforcing改为SELINUX=disabled,保存后退出。

[root@localhost ~]# vim /etc/selinux/config


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted


此时获取当前selinux防火墙的安全策略仍为Enforcing,配置文件并未生效。

[root@localhost ~]# getenforce
Enforcing


重启

[root@localhost ~]# reboot


验证

root@localhost ~]# /usr/sbin/sestatus
SELinux status:                 disabled


[root@localhost ~]# getenforce
Disabled

 

### 安卓中 SELinux 的工作机制详解 #### 1. SELinux 基本概念 SELinux 是一种基于 Linux 内核的安全模块,它提供了更细粒度的访问控制机制。与传统的 DAC(Discretionary Access Control)不同,SELinux 使用 MAC(Mandatory Access Control),即强制访问控制[^1]。 在 Android 中,SELinux 被用来保护设备免受恶意软件和其他潜在威胁的影响。其核心功能是对进程和文件之间的交互施加严格的权限管理,从而防止未经授权的行为发生。 --- #### 2. SELinux 模式解析 SELinux 在 Android 中支持三种主要模式: - **Disabled 模式**: 此模式下,SELinux 功能完全关闭,系统不对任何资源访问实施控制。这种模式很少见于实际部署环境,主要用于特殊用途或实验场景[^3]。 - **Permissive 模式**: Permissive 模式允许所有操作继续运行而不被阻断,但它会记录所有违反策略的操作日志。此模式常用于开发和调试阶段,以便开发者能够分析可能存在的安全漏洞。 - **Enforcing 模式**: Enforcing 模式严格遵循定义好的安全策略,任何不符合规则的操作都会被立即阻止,并记录到审计日志中。这是 Android 生产环境中默认启用的模式,旨在保障系统的安全性。 --- #### 3. SELinux 主要配置文件 SELinux 的行为由一系列配置文件决定,这些文件描述了哪些主体可以访问哪些客体以及如何访问它们。以下是几个重要的配置文件及其作用: - `sepolicy`: 这是 SELinux 策略的核心文件,包含了所有关于域、类和规则的信息。 - `/etc/selinux/config`: 控制 SELinux 的全局设置,比如当前使用的模式 (enforcing/permissive/disabled)。 - `.te` 文件: 表达特定类型的规则集,例如应用服务或者硬件驱动程序的相关约束条件。 - `.fc` 文件: 描述文件上下文映射关系,帮助确定新创建对象所属类别。 --- #### 4. 安全上下文结构 每一个实体——无论是进程还是文件,在 SEAndroid 下都有对应的安全上下文表示形式如下所示: `scontext=u:r:<domain>:s0` 其中各部分含义分别为: - u – 用户身份; - r – 所扮演的角色; - domain – 当前活动所在的区域名称; - s0 – 敏感级别标记[^4]。 例如,当查看某个进程时可能会得到这样的输出:`u:r:init:s0`,这表明该进程属于 init 类型下的实例化过程。 --- #### 5. 实际案例分析 - 日志解读 下面给出了一条典型的 AVC(Access Vector Cache)拒绝消息作为例子进行解释: ``` type=1400 audit(0.0:23): avc: denied { read } for comm="test" name="test.json" dev="sda12" ino=25609 scontext=u:r:test:s0 tcontext=u:object_r:test_file:s0 tclass=file permissive=1 ``` 这条信息告诉我们尝试读取名为 test.json 的文件失败的原因是因为缺少适当的权利许可。具体来说: - 发起者(`comm`)试图执行的动作({read})未获批准; - 来源(context)`u:r:test:s0`,目标(context)`u:object_r:test_file:s0`; - 对象类型(class)=file,permissive标志设为了true意味着此时处于宽容状态而非强制执法状态下才会触发此类警告提示[^5]. --- #### 6. 总结 综上所述,SELinux 在 Android 平台上的实现极大地增强了移动操作系统整体防护能力。通过对各类组件间相互作用加以精确限定,有效减少了因错误编码或其他原因引发的数据泄露风险。 ```python # 示例 Python 代码展示如何检查 SELinux 模式 import os def get_selinux_mode(): with open('/sys/fs/selinux/enforce', 'r') as f: mode = int(f.read().strip()) return "Enforcing" if mode == 1 else "Permissive" print(get_selinux_mode()) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值