【容器安全系列Ⅴ】- Linux强制访问控制:AppArmor 和 SELinux

news2024/11/27 4:29:15

图片

       在本系列中,我们介绍了各种安全层,这些安全层不仅可以将容器与主机上的其他进程隔离开来,还可以将容器与其底层主机隔离开来。在这篇文章中,我们将讨论 AppArmor 和 SELinux 如何在我们之前讨论过的其他隔离层之外提供额外的限制。

强制访问控制系统

       AppArmor 和 SELinux 是强制访问控制 (MAC) 系统的示例。这些系统与其他安全控制(通常称为自主访问控制(DAC)系统)的不同之处在于,用户通常无法更改其操作。

       文件权限是 DAC 系统的一个示例。文件的所有者可以调整其权限,以允许主机上的任何人修改它。使用 MAC 系统时,用户可能无法修改对他们拥有的资源施加的约束。这些限制甚至包括 root 用户,尽管系统上的 root 用户只需禁用整个 MAC 系统即可绕过此限制。Linux 中的 MAC 系统允许你限制对各种系统资源的访问,以便即使是其他特权进程也无法访问它们。

       虽然可以在任何 Linux 主机上同时使用 AppArmor 或 SELinux,但通常只启用其中一个MAC策略 ,这因不同发行版而异。默认情况下,Debian 衍生系统使用 AppArmor,而基于 Red Hat 的系统则使用 SELinux。

AppArmor

       AppArmor 通过定义可应用于主机上运行的进程的不同配置文件来实现其控制能力。这些配置文件可以限制对许多资源的访问,包括文件、网络流量和 Linux capabilities。

       在安装了 AppArmor 的系统上,我们可以开始探索如何使用 sudo aa-status 命令来使其发挥作用。这将显示有关 AppArmor 配置和状态的信息。

图片

aa-status 的输出

       从这个输出中,我们可以看到几个有趣的信息:

  • AppArmor 已加载并正常工作。

  • 系统上定义了 34 个配置文件。

  • 目前,没有进程具有启用的 AppArmor 配置文件。

       从容器化的角度来看,配置文件列表中最有趣的部分是 docker-default 。默认情况下,此配置文件在 Docker 中默认用于提供一些保护,且不会影响应用程序兼容性。但是,这意味着它并没有像它可能的那样被锁定,因此有必要为需要额外保护的应用程序创建更严格的配置文件。

       为了演示当进程获取活动 AppArmor 配置文件时会发生什么,我们可以通过 docker run -d nginx 启动一个新的 Docker 容器,然后运行 aa-status 命令。可以看到,我们现在有五个进程(由我们的容器启动)定义了一个配置文件,还有五个进程处于强制模式,这意味着 AppArmor 将根据为每个进程定义的配置文件限制它们的操作。

图片

应用于 NGINX 的 Docker 默认 AppArmor 配置文件

       现在我们已经了解了 AppArmor 的基础知识,让我们看看可以使用自定义 AppArmor 配置文件执行哪些操作,以及如何将其应用于 Docker 容器。

使用 AppArmor 的自定义配置文件

       AppArmor 允许你控制许多 Linux 资源,包括网络和文件访问。为了通过一个简单的示例来演示这一点,我们可以创建一个配置文件来阻止对容器内/etc目录的写入访问,即使运行容器的用户是 root 。

       首先,我们将创建一个最小的配置文件来实现我们的目标。

#include <tunables/global>profile docker-block-bin flags=(attach_disconnected, mediate_deleted) {  #include <abstractions/base>  file,  deny /etc/** wl,}

       这里的关键行是 deny /etc/** wl,它阻止对/etc和任何子目录的写入访问。我们将此配置文件写入 /etc/apparmor.d/containers/docker-block-etc ,然后使用命令 sudo apparmor_parser -r /etc/apparmor.d/containers/docker-block-etc 将其加载到内核中。一旦准备就绪,我们就可以用 Docker 进行测试了。

       我们可以创建一个新容器并使用 --security-opt 标志将我们的 etc 阻止配置文件应用于它:

docker run --rm -it --name block-bin --security-opt "apparmor=docker-block-etc" ubuntu:22.04 /bin/bash

       然后,我们可以从容器内部尝试向/etc写入文件.输出证明,尽管我们是 root 用户,但我们无

无法写入该目录。

图片

自定义 AppArmor 配置文件阻止写入 /etc

       如果您需要为 Docker 容器开发更复杂的配置文件,有一些工具可以帮助简化该过程,例如 Bane。Bane 的优点是自动为所有 Docker 容器添加基本限制。它还为配置文件规范提供了简化的语法。

SELinux

       SELinux 在 Linux 方面有着悠久的历史。美国国家安全局最初在 2000 年将其作为 Linux 内核的一系列补丁实施。从那时起,Linux 生态系统中的开发仍在继续,如今,SELinux 默认用于基于 Red Hat 的发行版等。

       与 AppArmor 相比,SELinux 采用了完全不同的安全方法。SELinux 没有将离散配置文件应用于进程,而是标记 Linux 资源(例如文件和端口),并根据每个资源的标签和尝试访问资源的进程的属性来限制对它们的访问。

       在安装了 SELinux 的系统上,我们可以使用 sestatus 命令来查看它的配置方式。

图片

sestatus 的输出

       此命令返回有关如何在此主机上配置 SELinux 的关键信息。

       第一行表示已启用 SELinux。Loaded policy name 告诉我们我们在 targeted 模式下运行(这意味着 SELinux 将应用于主机上的分发提供商(例如 Red Hat)选择的特定进程),而不是 mls 模式,后者更严格,并且对每个进程施加限制。通常,mls 模式不适用于通用系统,因为管理所有进程的标记和权限很复杂。

       下一行是:Current mode: enforcing.在这里,可能的选项是:enforcing、 permissive 和 disabled。permissive模式对于设置 SELinux 很有用,因为它不会阻止操作。相反,它将记录在系统处于enforcing模式时可能发生的任何拒绝。

       现在我们已经注意到在此主机上启用了 SELinux,我们可以探索有关当前配置的更多详细信息。运行 sudo semanage login -l 将向我们展示如何配置 SELinux 以处理标准用户进程。

图片

semanage login -l 的输出

       从这个输出中,我们可以看到 SELinux 认为普通用户(用__default__表示)和 root 用户是不受限制的,这意味着它不会对他们施加限制。

       您可以使用标准系统工具和-Z开关来查看 SELinux 使用的标签。例如,pf -efZ 将显示有关应用于不同进程的标签的信息。在下面的示例中,我们可以看到 dockerd 和 containerd 进程的标签应用了 container_runtime_t 类型,并且标准用户使用的 bash 和 ssh 进程具有 unconfined_t 类型。

图片

进程上的 SELinux 属性

       我们还可以使用类似 ls -alZ .

图片

文件上的 SELinux 属性

容器 SELinux 策略

       在 Fedora 或 Red Hat 等 Linux 发行版下运行 Docker 时,通用的 SELinux 策略将应用于所有新容器。与 Docker 的默认 AppArmor 配置文件一样,此常规配置文件必须在提供的保护中做出权衡,因为它将相同的策略应用于每个容器。

       要查看此策略的效果,我们可以运行类似 docker run --rm -it --name home_container -v /home/rorym:/hosthome fedora /bin/bash 启动名为“home_container”的新容器,该容器将我们的主目录挂载到容器中。如果我们尝试在容器内的 /hosthome 目录中创建一个文件,即使我们以 root 用户身份运行,我们也会被阻止。

图片

SELinux 阻止对主机上 /home 的访问

        为了确认 SELinux 是否阻止了访问,我们可以运行同一个容器并将 --security-opt label:disable 添加到命令中,这实际上禁用了该容器的 SELinux。如果我们随后尝试在 /hosthome 目录中创建一个文件,我们可以看到它是成功的。

图片

禁用了 SELinux 的容器

       如果我们想创建一个自定义的 SELinux 策略来允许我们访问我们的主目录,一种选择是使用 udica 之类的工具。此工具分析有关正在运行的容器的数据,以创建 SELinux 策略,然后可以加载和使用该策略。

       首先,让我们检查我们的容器,并通过运行命令 docker inspect home_container | sudo udica home_container 将结果传递给 udica。完成此操作后,udica 将指示我们加载新的 SELinux 模块(它已创建),然后在指定新策略的同时重新启动我们的容器。使用此策略启动容器后,我们可以看到可以根据需要写入主目录。

图片

通过UDICA定制标签的容器

结论

       强制访问控制系统可以为容器提供额外的保护层。但是,它还需要努力学习如何有效地使用它们,并且自定义它们以大规模使用容器是一项艰巨的任务。因此,组织通常需要评估其风险状况,以确定使用它们是否有意义。在本系列的下一部分中,我们将介绍使用 seccomp 配置文件进行低级容器强化的另一种选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2100179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PDF的4大限制功能详解:如何保护你的文件?

PDF是我们工作中常用的文件格式之一。有时候&#xff0c;为了保护文件的内容或使用权限&#xff0c;我们需要对PDF文件进行某些限制。通过PDF编辑器&#xff0c;可以对PDF文件设置限制保护&#xff0c;下面介绍4种常见的限制功能&#xff0c;一起来看看吧。 限制功能一&#xf…

推荐大模型面临的严峻挑战

一、技术瓶颈 &#xff08;一&#xff09;可靠性与幻觉问题 大模型在运行过程中有时会出现事实性错误&#xff0c;这便是可靠性问题&#xff0c;也被称为 “幻觉”。例如&#xff0c;它可能会弄错诗词作者&#xff0c;给出错误的文学知识。这种错误并非个例&#xff0c;而是在…

面试必备:熟悉Spring MVC工作流程,掌握Spring MVC常见注解

一、SpringMvc 基础知识点 1. Spring MVC概况 1.1 如何理解Spring MVC 大家都知道Spring MVC很强大&#xff0c;胡广问大家一个问题&#xff0c;Spring MVC为什么会出现&#xff1f;一项技术的出现必定是为了解决旧技术考虑不全所积累的软件熵。《程序员修炼之道》在软件的熵…

PTA整数的分类处理

作者 陈越 单位 浙江大学 给定 N 个正整数&#xff0c;要求你从中得到下列三种计算结果&#xff1a; A1 能被 3 整除的最大整数A2 存在整数 K 使之可以表示为 3K1 的整数的个数A3 存在整数 K 使之可以表示为 3K2 的所有整数的平均值&#xff08;精确到小数点后 1 位&…

0901作业+思维导图梳理

一、作业 1、代码 #include <iostream> #include <string.h> #include <stdio.h> using namespace std; class Mystring { public://无参构造Mystring():size(128),len(0){str new char[size];cout<<"无参构造完成"<<endl;}//有参构…

Git之2.35版本重要特性及用法实例(六十三)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者. 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列…

版本控制系统Git/Gitlab/GitHub

版本控制系统 git和svn:公司内部的代码仓库&#xff0c;用于存放项目代码&#xff0c;方便整合开发过程 公共代码仓库&#xff1a;github全球 gitee国内 git 分布式 ---没有中心代码库&#xff0c;所有机器之间的地位同等&#xff08;每台机器上都有相同的代码&#xff09; …

【C++ 面试 - STL】每日 3 题(三)

​ ✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏&…

2024年8月——大模型更新汇总

让我们来看一下8月份有哪些大模型更新&#xff0c;涵盖了多个领域&#xff0c;包括语言模型、视觉模型以及数学模型等。以下是本次更新的主要亮点&#xff1a; 1、 智谱系列升级&#xff1a; a、GLM-4-Flash&#xff1a;免费供应&#xff0c;提供快速响应的对话体验。 b、GLM-4…

Linux--网络指令UDP,TCPwindows连接服务器

网络指令 ping命令 用来检测网络连通性的。 比如ping 百度的官网 ping www.bai.com 这个指令执行后默认是不会停下来的&#xff0c;我们可以加入 -c 数字选项&#xff0c;表示要ping几次 比如ping两次 ping -c2 www.bai.com netstat 查看所有的网络连接活动 netstat…

《云原生安全攻防》-- K8s攻击案例:高权限Service Account接管集群

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 在本节课程中…

提高编程效率的秘密武器:探索高效开发工具

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《热点时事》 期待您的关注 目录 引言 一、工具介绍 Visual Studio Code (VS Code) Docker GitHub 二、效率对比 三、未来趋…

详细解说一下Python中的递归和基例

大家好&#xff0c;感谢阅读胡萝卜不甜的文章&#xff0c;谢谢你的关注和点赞。好戏马上开始 考点&#xff1a; 递归函数是一种在函数定义中调用自身的函数。递归函数通常包含两个主要部分&#xff1a;递归部分和基例&#xff08;也称为递归终止条件&#xff09;。 递归部分&am…

给你的头像加个口罩网站html源码

源码介绍 给你的头像加个口罩网站html源码&#xff0c;html网页源码&#xff0c;直接打开即可使用&#xff0c;也可以上传到网站。 效果预览 源码获取 给你的头像加个口罩网站html源码

【亚马逊运营经验帖】跨境选品9大实操策略,小白必看!

一个新手卖家要想在亚马逊这个庞大的平台上分得一杯羹&#xff0c;不深入了解一些选品的技巧恐怕是不行的。七分靠选品&#xff0c;三分靠运营。可见选品的成功与否对于一个 listing 能否快速爆单至关重要&#xff0c;这篇文章是从帮助小白的角度去分析选品的一些基本思路。 1…

科研论文必须要了解的25个学术网站

各位同学大家好&#xff0c;我是Toby老师&#xff0c;今天介绍一下科研论文必须要了解的25个学术网站。下述论文网站收藏内容有差异&#xff0c;大家可以检索比较。 1.SCI SCI&#xff08;Science Citation Index&#xff09;是一个学术引文数据库&#xff0c;收录了全球多个学…

《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层(5)

接前一篇文章&#xff1a;《PCI Express体系结构导读》随记 —— 第II篇 第7章 PCIe总线的数据链路层与物理层&#xff08;4&#xff09; 7.1 数据链路层的组成结构 7.1.1 数据链路层的状态 数据链路层需要通过物理层监控PCIe链路的状态&#xff0c;并维护数据链路层的“控制与…

鸿蒙开发画廊效果

鸿蒙开发画廊效果&#xff1a; 画廊这种效果确实不错&#xff0c;看起来高端大气。在Android那边已经有不少案例了&#xff0c;但是鸿蒙这边还是很少。今天来分享一个。 先看下效果图&#xff1a; 没法弄gif,就是左右可以看到前一张&#xff0c;下一张。 也可以看我b站完整的…

C# 编译程序引用C++DLL托管动态链接库实例

构建 C# 程序引用CDLL托管动态链接库 前言1、统一框架版本2、统一编译平台3、C 托管动态链接库的优点3.1、C 托管动态链接库引用方便简单3.2、C 托管动态链接库加快了程序构建和重复利用3.3、C 托管动态链接库源代码更加安全 4、构建与 C# 程序进行互操作的C.DLL动态链接库的三…

UTB定位技术能不能精准定位

在当今科技日新月异的时代&#xff0c;定位技术以其广泛的应用场景和不断提升的精度&#xff0c;成为了多个领域的核心支撑。其中&#xff0c;UTB定位技术以其高精度、低延迟和高抗干扰性等特点&#xff0c;在众多定位技术中脱颖而出&#xff0c;成为精准定位领域的佼佼者。那么…