Linux SELinux

2023-11-10

Security-Enhanced Linux(SELinux)是一种Linux系统的安全体系结构,允许管理员对系统访问权限进行更精细的控制。它最初由美国国家安全局(NSA)开发,使用Linux安全模块(LSM)对Linux内核打了一系列补丁。

SELinux于2000年发布给开源社区,并于2003年集成到Linux内核中。

SELinux如何工作?

SELinux为系统上的应用、进程和文件定义访问控制。它使用安全策略,安全策略是一组规则,告诉SELinux什么可以或不能被访问,以执行策略允许的访问。

当主体(如应用或进程)发出请求访问对象(如文件)时,SELinux会检查访问向量高速缓存(AVC),其中缓存了主体和对象的权限。

如果SELinux无法根据缓存就访问权限做出决定,它会将请求发送到安全服务器。安全服务器会检查应用、进程和文件的安全上下文做出决定。安全上下文是根据SELinux策略数据库生成的。

如果权限被拒绝,avc: denied消息将出现在/var/log.messages

SELinux如何配置

有几种方式可以配置SELinux来保护系统。最常见的是针对策略(targeted policy)或多级安全(MLS)。

针对策略是默认选项,涵盖一系列进程、任务和服务。MLS可能非常复杂,通常仅政府组织使用。

可以通过查看/etc/sysconfig/selinux文件来确定系统应该运行的内容。该文件将包含一个部分,显示SELinux是否处于宽容模式强制模式禁用模式,以及应加载哪种策略。

  • /etc/sysconfig/selinux
# 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 values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted 

SELinux的视角下,系统中的所有文件、进程和端口都有关联的标签。标签用于将这些受保护资源按照逻辑分类。内核会在启动过程中管理标签。

标签格式为:user:role:type:level(level可选)userrolelevel更常用于MLS等高级SELinux实现。对于目标策略,type是最重要的。

SELinux依据类型来执行策略。这些策略定义了是否此种类型的进程可以访问这种类型的文件?

常用用例

  • 隔离服务: 为不同的服务指定不同的域,实现进程隔离。例如,可以为httpd、mysqld等服务指定不同的域,防止它们相互访问。
  • 实现最小权限: 给不同的服务指定最小的权限,限制其访问权限范围。例如,可以禁止httpd访问用户home目录。
  • 保护系统文件: 定义不同的文件类型,并指定哪种类型的进程可以访问这些文件。例如,可以禁止普通用户进程访问系统日志文件。
  • 限制软件功能: 禁止某些软件的某些功能。例如,可以禁止sshd进行端口转发。
  • 防止未知漏洞利用:SELinux以策略为中心,当某个服务出现漏洞时,攻击者即使获取了服务权限,也无法轻易破坏系统或访问重要文件,因为策略可以限制服务的权限范围。
  • 审计与监控: 审计所有访问控制决策,可以根据审计日志监控谁在访问什么资源,检测异常活动。
  • 容器化: 为容器技术如Docker提供了安全机制,可以为不同容器指定安全上下文,实现容器隔离。

总之,是一个功能强大的mandatory access control机制。可以为系统提供全面的安全控制,应用于服务隔离、最小权限原理、重要文件保护、软件限制、漏洞利用防护、审计与监控等方面。结合容器等新技术,还可以实现微服务与容器安全。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux SELinux 的相关文章

  • 我们如何在使用循环时调用 ansible playbook 中的变量

    我有两个文件 其中这些文件包含server names and server IP s 我想更改 替换一些特定的server names and IP addressees根据要求在两个文件中 这与这篇文章 因为它被要求开设一个新职位 ht
  • 段错误...关于你好世界

    这段代码非常简单 但我在 x86 64 Linux 系统上遇到了段错误 这让我很烦恼 刚开始接触asm 请耐心等待 与 NASM 组装nasm f elf64 test asm 与连接ld o test test o SECTION tex
  • Pthreads - 高内存使用率

    我正在用 C 编写一些东西 在 256Mb 系统上的 Linux 中创建大量 Pthread 我通常有 200Mb 的免费空间 当我使用少量线程运行该程序时 它可以工作 但是一旦我让它创建大约 100 个线程 它就会出现错误 因为系统内存不
  • 如何在Linux上用C/C++编写Web服务器[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在考虑在 Linux 平台上开发一个小型 阅读 初级 Web 服务器 但我不知道从哪里开始 我希望它能够做的是 监听特定端口 接受
  • Linux中如何避免sleep调用因信号而中断?

    我在 Linux 中使用实时信号来通知串行端口中新数据的到达 不幸的是 这会导致睡眠呼叫在有信号时被中断 有人知道避免这种行为的方法吗 我尝试使用常规信号 SIGUSR1 但我不断得到相同的行为 来自 nanosleep 联机帮助页 nan
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • MySQL 与 PHP 的连接无法正常工作

    这是我的情况 我正在尝试使用 Apache 服务器上的 PHP 文件连接到 MySQL 数据库 现在 当我从终端运行 PHP 时 我的 PHP 可以连接到 MySQL 数据库 使用 php f file php 但是当我从网页执行它时 它只
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • Linux无法删除文件

    当我找到文件时 我在删除它们时遇到问题 任务 必须找到带有空格的文件并将其删除 我的尝试 rm find L root grep i 但我有错误 rm cannot remove root test No such file or dire
  • 在汇编中使用 printf 会导致管道传输时输出为空,但可以在终端上使用

    无输出 https stackoverflow com questions 54507957 printf call from assembly do not print to stdout即使在终端上 当输出不包含换行符时也有相同的原因
  • Linux 使用 boost asio 拒绝套接字绑定权限

    我在绑定套接字时遇到问题 并且以用户身份运行程序时权限被拒绝 这行代码会产生错误 acceptor new boost asio ip tcp acceptor io boost asio ip tcp endpoint boost asi
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • 找不到包“gdk-pixbuf-2.0”

    我正在尝试在 Amazon Linux 发行版实例上构建 librsvg 我已经通过 yum 安装了大部分依赖项 其中一些在实例上启用的默认 yum 存储库中不可用 因此必须从头开始构建它们 我已经走了很远 但还停留在最后一点 跑步时sud
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe

随机推荐

  • Android Studio的升级

    一般大家自己电脑都可以自升级 直接在Android Studio中上面导航栏找到check for updates选项点击就行 而如果大家所在公司保密做的比较好 不允许访问外网就只能另想办法了 下面提供两种方案 一 增量更新 增量更新就是在
  • C++ std::thread多线程详解

    c 多线程详解 一 std thread线程创建 1 函数指针 2 Lambda函数 3 functor Funciton Object 4 非静态成员函数 5 静态成员函数 二 std thread线程停止 1 join函数 2 deta
  • 编译报错:error: no matching function for call to

    No matching function for call 表示当我们调用某些函数时 该函数的参数与函数定义的参数不匹配 因此 我们得到一个错误 No matching function for call 所以当我们继续向函数传递不正确类型
  • 小程序微信支付流程(商城余额支付,优惠券支付,积分抵消,微信支付)

    小程序微信支付的流程图 1 登录微信公众平台 开通微信支付功能 这是准备工作的第一步 确保小程序对应的支付功能已经开启 2 登录微信商户平台 该步骤需要获取两个参数 一个是商户号 一个是支付秘钥 如下图所示 注意秘钥自己要保护好 相当于支付
  • idea 2022.1 全新ui 配置

    idea 2022 1 全新ui 配置 版本 IntelliJ IDEA 2022 1 221 5080 210 build 其他的没有测过 以后再也不说大话了 丑陋 具体步骤 打开IDEA 双击shift 在弹出的搜索框中输入Regist
  • 程序部署到服务器服务无法启动问题

    问题描述 原先有一个程序在服务器正常运行 但是客户突然把重装了服务器系统 改为了 无限的未知 win2003 完整克隆版 V8 32位 虽然不太理解客户的心理 但是谁让人家是客户呢 老老实实重装环境部署程序 万幸一切正常 但是我想的太简单了
  • 关于2022年软件测试的5大趋势探讨

    随着数字化技术应用的广泛普及 业界对于软件测试的要求也在持续迭代与增加 当前 越来越多的企业和组织都相继采用了Agile 敏捷 和DevOps之类的软件开发方法 以鼓励和促进测试团队和开发团队之间的紧密协作 根据Gartner的预测 到20
  • deepin v20安装mysql

    deepin v20 换源和安装mysql 由于deepin v20不能直接安装mysql所以先进行换源 更换成阿里源 这样以后速度可以更快 修改文件 sudo vim etc apt sources list 删除内容 并添加以下内容 G
  • DDlog语言特征

    原文地址 这里写链接内容 DDlog是一种语法为datalog式 用来编写DeepDive应用的语言 一个ddlog程序会被编译成deepdive格式下的配置文件 我们通常用这个文件来运行我们的应用 一个ddlog程序由一组声明组成 这些声
  • 【Doxygen】Vscode 插件 DoxyGen Documentation Generator C语言详细设置

    DoxyGen Documentation Generatorc 这个VsCode插件可以设置C C 的doxygen格式自动填充 本文只介绍C语言的json文件配置 触发方式 doxdocgen c triggerSequence 输入
  • Eclipse查看JDK源码

    1 找到jdk 2 配置rt的源码
  • 关于Connection aborted等问题的解决

    错误类型 在爬虫中报如下的错误 requests exceptions ConnectionError Connection aborted RemoteDisconnected Remote end closed connection w
  • Win10远程桌面连接怎么用?(远程桌面连接教程)

    怎么开启远程桌面连接 电脑远程桌面连接怎么用 要使用远程桌面控制电脑 您需先在电脑上开启远程桌面连接并且两台电脑还需在同一个局域网中 否则您的设置端口转发才能使用远程桌面连 那么怎么开启远程桌面连接呢 具体操作步骤如下 步骤1 在Win10
  • Redis的String常用命令

    Redis 基础知识 不想key被更改 再key的后面加上nx eg 127 0 0 1 6379 gt set s 11 OK 127 0 0 1 6379 gt set ss 111 OK 127 0 0 1 6379 gt renam
  • Jest 单元测试术语解析:describe、it、expect、test

    jest测试代码片段 describe number test gt it 1 is true gt expect 1 toBeTruthy test 2 is true gt expect 2 toBeTruthy describe 描述
  • Vue研习录(08)——Vue引入Swiper知识详解及示例分析

    Vue研习录 08 Vue引入Swiper知识详解及示例分析 版权声明 一 Swiper 版权声明 本文原创作者 清风不渡 博客地址 https blog csdn net WXKKang 重拾前端记忆 记录学习笔记 现在进入Vue引入Sw
  • uniapp的webview实现左滑返回上一个页面

    uniapp默认左滑是关闭整个webview 而不是关闭当前页 实现思路 拦截webview的url跳转操作 将新url用webview组件重新打开 当左滑的时候 默认关闭的就是当前webview 继而跳转到上一次的页面中
  • 100 道 Linux 常见面试题,慢慢读~

    1 Linux 概述 1 1 什么是 Linux Linux 是一套免费使用和自由传播的类 Unix 操作系统 是一个基于 POSIX 和 Unix 的多用户 多任务 支持多线程和多 CPU 的操作系统 它能运行主要的 Unix 工具软件
  • 关于对话机器人,你需要了解这些技术

    对话系统 对话机器人 本质上是通过机器学习和人工智能等技术让机器理解人的语言 它包含了诸多学科方法的融合使用 是人工智能领域的一个技术集中演练营 图1给出了对话系统开发中涉及到的主要技术 对话系统技能进阶之路 图1给出的诸多对话系统相关技术
  • Linux SELinux

    Security Enhanced Linux SELinux 是一种Linux系统的安全体系结构 允许管理员对系统访问权限进行更精细的控制 它最初由美国国家安全局 NSA 开发 使用Linux安全模块 LSM 对Linux内核打了一系列补