SELinux简介

前言

SELinux 是强制访问控制(Mandatory Access Control, MAC)的一种实现,提供了额外的安全层。SELinux 策略定义了用户和进程如何与系统中的文件进行交互。

SELinux fundamentally answers the question: May <subject> do <action> to <object>?, for example: May a web server access files in users’ home directories?

SELinux 的相关命令

查看 SELinux 的状态

root@localhost /e/selinux# 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
Memory protection checking:     actual (secure)
Max kernel policy version:      33

查看 SELinux 的日志

ausearch 是 Linux 审计框架 (auditd) 中用于查询和检索审计日志的命令行工具,它帮助系统管理员根据特定条件筛选和分析系统事件。

# 先检查下服务是否开启了
systemctl status auditd.service

# 查找所有失败的登录尝试
ausearch -m USER_LOGIN -sv no -i

# 查找所有成功的登录尝试
ausearch -m USER_LOGIN -sv yes -i

# 查看 SELinux 拒绝的操作
ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today

sealert是 SELinux 的策略诊断工具,用于分析和解释 SELinux 审计日志,帮助用户识别安全事件、检查权限问题并提供解决方案建议。

sealert的核心功能是解析 /var/log/audit/audit.log中的 SELinux 拒绝消息(通常是 avc: denied类事件),并以更友好、易懂的方式输出分析结果

root@localhost ~# dnf install setroubleshoot-server^C
root@localhost ~# sealert -l "*"

自定义 SELinux 策略

策略简介

来自:Quick start to write a custom SELinux policy – Red Hat Customer Portal

SELinux 安全策略是一组 SELinux 规则的集合。策略是 SELinux 的核心组件,由 SELinux 用户空间工具加载到内核中。内核通过使用 SELinux 策略来评估系统中的访问请求。默认情况下,SELinux 会拒绝所有请求,除非这些请求与已加载策略中指定的规则相对应。

每个 SELinux 策略规则描述了一个主体和目标资源之间的交互。

策略规则的一般形式为:

<rule type> <subject> <object>:<object class> <permissions>;
  • Subject – label of the process
  • Object – label of the resource being accessed
  • Object class – for example, a directory or a file
  • Permissions – the access being granted (for example, read, write)

要使用标准语言自定义 SELinux 策略,请使用以下文件:

  • <mypolicy>.te – 定义策略规则以及您的应用程序使用的新类型和域
  • <mypolicy>.fc – 包含文件上下文定义,换句话说,是为应用程序相关文件打标签的指令
  • <mypolicy>.if – 包含接口,这些接口是其他策略模块用于与此策略交互的策略宏

示例

我们找网上实际的参考示例,看看。

我们看下 vpp 的 selinux 吧。grafana 的 selinux,看的脑袋疼,就不看了。

/etc/vpp(/.*)? gen_context(system_u:object_r:vpp_config_rw_t,s0)
  • /etc/vpp目录及其所有内容都会被标记为vpp_config_rw_t类型
  • system_u – SELinux用户标识
  • object_r – 角色标识
  • vpp_config_rw_t – 类型标识,表示这些文件是VPP配置文件,具有读写权限
  • s0 – MLS(Multi-Level Security)级别
type vpp_config_rw_t;
files_config_file(vpp_config_rw_t)
read_files_pattern(vpp_t, vpp_config_rw_t, vpp_config_rw_t)
  • 义了一个新的SELinux类型(type),名为vpp_config_rw_t
  • 调用了一个SELinux策略宏,将vpp_config_rw_t类型声明为配置文件类型。这个宏会自动为该类型分配一些基本的配置文件属性和权限。
  • 定义了VPP进程(vpp_t类型)对vpp_config_rw_t类型文件的读写权限。

最后

远远看着 SELinux ,就知道它不是“善茬”。

所以,不到万不得已的时候,就不要使用SELinux。

这里时一些参考链接:

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇