SELINUX

一、工作原理

SELinux是通过MAC (强制访问控制) 的方式来控制管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件资源。

主体( subject ):就是进程
目标( object ):被主体访问的资源,可以是文件、目录、端口等。
策略( policy ):由于进程与文件数量庞大,因此 SELinux 会依据某些服务来制定基本的访问安全策略。
这些策略内还会有详细的规则( rule )来指定不同的服务开放某些资源的访问与否。目前主要的策略有:
targeted :针对网络服务限制较多,针对本机限制较少,是默认的策略;
strict :完整的 SELinux 限制,限制方面较为严格。
安全上下文 security context ):对文件的访问限制,确保文件资源只能被所属的服务器访问。
最终文件的成功访问还是与文件系统的 rwx 权限设置有关 。
格式:  user : role : type  [ :level ]
查看上下文
[root@server ~]# ls -Z
    system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
[root@server ~]# ll -Z
总用量 4
-rw-------. 1 root root system_u:object_r:admin_home_t:s0     994 11月  2 17:32 anaconda-ks.cfg

分析 system_u:object_r:admin_home_t:s0 用冒号分为四个字段:
身份标识( Identify ):相当于账号方面的身份标识,主要有以下三种常见的类型:
root :表示 root 的账号身份;
system_u :表示程序方面的标识,通常就是进程;
unconfined_u :代表的是一般用户账号相关的身份。
角色( role :通过角色字段,可知道这个数据是属于程序、文件资源还是代表用户。一般角色
有:
object_r :代表的是文件或目录等文件资源;
system_r :代表的是进程。
类型( type :在默认的 targeted 策略中, Identify role 字段基本上是不重要的,重要的在于这个类型字段。而类型字段在文件与进程的定义不太相同,分别是:
type :在文件资源上面称为类型。
domain :在主体程序中则称为域。
domain 需要与 type 搭配,则该程序才能够顺利读取文件资源。
灵敏度:一般用 s0 s1 s2 来命名,数字代表灵敏度的分级。数值越大、灵敏度越高。

二、selinux的配置

 1.三种配置模式

enforcing :强制模式,启用 SELinux ,将拦截服务的不合法请求
permissive :宽容模式,启用 SELinux ,遇到服务越权访问时,只发出警告而不强制拦截
disabled :关闭模式, SELinux 没有运行

原理图: 

三种模式的切换:

 

临时关闭 

[root@server ~]# setenforce 0 # 临时关闭selinux,转为宽容模式,重启系统失效

[root@server ~] # getenforce
Permissive
[root@server ~] # setenforce 1 # 临时开启 selinux ,转为强制模式,重启失效
[root@server ~] # getenforce
Enforcing
永久关闭
[root@server ~] # vim /etc/selinux/config
SELINUX = disabled
[root@server ~] # reboot

注意:

enforcing与permissive之间切换时,需要重启系统
enforcing、permissive与disabled之间切换时,必须重启系统才会生效

 2.修改安全上下文

chcon命令

方法一:

chcon [-R] [-t type] [-u user] [-r role] 文件名
-R :递归修改,当前目录及目录下的所有文件都同时设置
-t 后面接安全上下文件的类型字段(重要)
-u :后面接身份标识
-r :后面接角色
-v :显示变动结果
方法二:
chcon -R --reference = 范例文件 文件名
restorecon命令
让文件的 SELinux 类型恢复为默认的 SELinux 类型
默认的 SELinux 类型与 semanage 命令有关,其参考 semanage 命令所查询的默认 SELinux 类型
restorecon [-Rv] 文件或目录
-R :连同子目录一起修改;
-v :将过程显示到屏幕上

 

 semanage命令

用于管理 SELinux 的策略 ,查询/修改/增加/删除文件的默认SELinux安全上下文 , 管理网络端口、消息接口等
格式:
semanage 选项 参数 文件
选项: login|user|port|interface|==fcontext==|translation|boolean ,注意: fcontext
查询默认安全上下文 ( 重要 )
-l : 查询
-a : 添加
-m : 修改
-d : 删除
-D : 全部删除
-t : 类型
-r : 角色
-s : 用户
-f : 文件
添加8888端口为服务端口:

3.综合实验 

(1)enforing模式下,nginx修改资源目录,并实现页面正常访问

 客户端测试: 

(2)在enforing 模式下,nginx的端口号被修改,并是实现页面正常访问

客户端测试:

 删除6666端口:

(3)在enforing 模式下,演示ssh端口号修改的selinux设定

测试: 

03-08
### SELinux 配置与故障排除 #### SELinux 基本概念 Security-Enhanced Linux (SELinux) 是一种强制访问控制机制,旨在提供更细粒度的安全策略来保护操作系统免受恶意攻击。通过定义严格的安全标签和权限规则,即使应用程序存在漏洞,也能有效防止未授权行为。 #### SELinux 配置文件及其伪文件系统 关于 SELinux 的配置文件及相关文件系统的描述可以在特定章节找到[^1]。这些资源提供了详细的说明,帮助管理员理解如何调整 SELinux 设置以适应不同的应用场景需求。具体来说: - **`/etc/selinux/config`**: 这个文件包含了全局性的 SELinux 参数设定; - **`/sys/fs/selinux/**`: 此路径下的虚拟文件允许实时查询当前状态并动态更改某些选项而无需重启服务; 对于希望深入了解 SELinux 工作方式的人来说,研究上述提到的伪文件系统尤为重要,因为它不仅展示了 SELinux 如何与其他组件交互,还揭示了其内部运作逻辑的一部分。 #### 单用户模式下处理 SELinux 问题 当遇到难以解决的 SELinux 错误时,在单用户模式(运行级别为 1)中操作可能是一个有效的解决方案[^2]。此时由于大部分服务都被关闭,能够减少干扰因素从而更容易定位问题根源所在。例如,如果怀疑某个特定的服务因为错误标记而导致冲突,则可以通过临时禁用该服务来进行验证测试。 另外值得注意的是,在这种环境下还可以直接编辑 `/etc/selinux/config` 文件或者利用命令行工具如 `setenforce` 来切换 SELinux 模式而不必担心影响到正常业务流程。 ```bash # 切换至宽容(permissive)模式而非强制(enforcing),以便观察是否有任何违反政策的行为发生但不阻止它们执行 sudo setenforce 0 ``` #### 故障排查技巧 面对复杂的 SELinux 报错信息,建议采用以下几种方法进行诊断: - 使用 `auditd` 和 `ausearch` 组合分析日志记录中的 AVC(访问向量缓存)消息,这有助于识别具体的违规尝试以及涉及的对象。 - 尝试将 SELinux 设定为 permissive 而不是 enforcing ,这样可以收集更多有关潜在冲突的信息同时不会中断实际功能。 - 查看官方文档和支持论坛获取针对已知问题的具体指导方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值