tnblog
首页
视频
资源
登录

Kubernetes AppArmor 简单运用

6061人阅读 2022/6/27 22:13 总访问:3467433 评论:0 收藏:0 手机
分类: 容器编排

Kubernetes AppArmor 简单运用

AppArmor 简介


AppArmor 是一个有效且易于使用的 Linux 应用程序安全系统。AppArmor 通过强制执行良好行为并防止已知和未知的应用程序缺陷被利用,主动保护操作系统和应用程序免受外部或内部威胁,甚至是零日攻击。
AppArmor 通过提供强制访问控制 (MAC) 来补充传统的 Unix 自主访问控制 (DAC) 模型。自 2.6.36 版起,它已包含在主线 Linux 内核中,并且自 2009 年以来,它的开发得到了 Canonical 的支持。

AppArmor 模式


AppArmor 有两种工作模式:enforcement、complain。

模式 描述
Enforcement 配置文件里列出的限制条件都会得到执行,并且对于违反这些限制条件的程序会进行记录。
Complain 配置文件里的限制条件不会得到执行,Apparmor只是对程序的行为进行记录。例如程序可以写一个在配置文件里注明只读的文件,但 Apparmor 不会对程序的行为进行限制,只是进行记录。

访问控制与资源限制

文件系统的访问控制


Apparmor 可以对某一个文件,或者某一个目录下的文件进行访问控制,包括以下几种访问模式:

访问模式 描述
r 读模式
w 写模式
a 追加模式
f 锁定文件模式
l 链接模式


在配置文件中的写法,例如:

  1. # 表示可对/tmp目录下的文件进行读取
  2. /tmp r

注意:没在配置文件中列出的文件,程序是不能访问的。

资源限制


Apparmor 可以提供类似系统调用 setrlimit 一样的方式来限制程序可以使用的资源。要限制资源,可在配置文件中这样写:

  1. set rlimit [resource] <= [value],


其 resource 代表某一种资源,value 代表某一个值,要对程序可以使用的虚拟内存做限制时,可以这样写:

  1. # 可以使用的虚拟内存最大为1M
  2. set rlimit as <= 1M,

访问网络


Apparmor 可以限制程序的网络访问,在配置文件中的语法是:

  1. network [[domain][type][protocol]]


举例:

  1. # 设置程序可以进行所有的网络操作
  2. network
  3. # 允许程序使用IPv4中的TCP协议
  4. network inet tcp

配置文件的编写

编写完配置文件后,要把文件放到/etc/apparmor.d这个目录下

配置与安装


在k8s工作节点安装 apparmor 命令。

  1. # Ubuntu
  2. apt-get install apparmor-utils apparmor-profiles apparmor-profiles-extra -y
  3. # Centos请参考
  4. # https://gitlab.com/apparmor/apparmor/-/wikis/Distro_CentOS


接着我们查看当前AppArmor的状态。

  1. apparmor_status
  2. # 或者通过如下命令检查模块是否启用
  3. cat /sys/module/apparmor/parameters/enabled

注意:Apparmor 的profile配置文件均保存在目录/etc/apparmor.d,对应的日志文件记录在/var/log/messages

Demo


在工作节点创建/etc/apparmor.d/nginx_apparmor文件,并编写可以读取所有文件的策略和不可以做写文件的操作。

  1. vim /etc/apparmor.d/nginx_apparmor
  2. #include <tunables/global>
  3. profile nginx-profile flags=(attach_disconnected) {
  4. #include <abstractions/base>
  5. file,
  6. # Deny all file writes.
  7. # 拒绝所有对文件写的操作
  8. deny /** w,
  9. }


接着我们创建一个Pod,不加载apparmor配置。vim pod1.yaml

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: hello-apparmor
  5. annotations:
  6. container.apparmor.security.beta.kubernetes.io/hello: localhost/nginx-profile
  7. spec:
  8. containers:
  9. - name: hello
  10. image: busybox
  11. command: ["sh","-c","echo 'Hello AppArmor!' && sleep 1h"]


在集群的工作节点上,确保准备好的AppArmor文件在/etc/AppArmor.d的目录下,文件名称是nginx_apparmor。编辑位于~/pod1.yaml准备好的清单文件,以应用AppArmor配置。最后应用清单文件并创建pod指定清单文件。

  1. ssh node1
  2. apparmor_parser -q /etc/apparmor.d/nginx_apparmor
  3. apparmor_status | grep nginx
  4. exit

注意必须加入这一串:container.apparmor.security.beta.kubernetes.io/<容器名>: localhost/<策略>表示该容器启动时必须遵守配置的Apparmor策略规则。


读取文件,我们没有做限制,访问是没什么问题的。

  1. kubectl exec hello-apparmor -- cat /etc/hosts


写一个文件时,就会报错没权限。

  1. kubectl exec hello-apparmor -- touch /etc/test1


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

css定位的简单运用

父容器使用相对定位position: relative子容器使用绝对定位position: relative这样就可以子容器相对父容器定位了,可以写一...

EF Group Join简单运用

EF Group Join其实返回的就是一对多的情况,通常用来做有查看详情的,比如我们来实现一个查询学生与考试分数的例子,因为一...

.netcore3.1 RabbitMq 简单运用与相关方法的介绍

.netcore3.1 RabbitMq 简单运用与相关方法的介绍[TOC] 在这里我将使用简单的生产—-&gt;加入队列—-&gt;消费,做一个简...

Jenkins简单运用

Jenkins简单运用[TOC] 环境预备如果没有安装Jenkins,在此之前大家可以按照如下两篇文章进行安装:docker安装JenkinsJenki...

Jenkins Pipeline简单运用

Jenkins Pipeline简单运用[TOC] Pipeline简单运用创建一个任务流水线 我们从中可以看出,他最大的不同就是多了一个Pi...

安装 Windbg 简单运用

安装 Windbg 简单运用[TOC] 软件安装列表1.Visual Studio 2022: 安装 .NET Framework 4.8, .NET 6.0.5 ,支持 C++ 模板2....

Multus-CNI与whereabouts的简单运用

Multus-CNI[TOC] Multus-CNI 简介简单来讲,这玩意可以对一个pod插入多张网卡进行通信。同时也支持多种cni的插件,什么Fla...

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

cAPS.net 保存base64位格式的图片

publicvoidUpload() { //取出图片对应的base64位字符 stringimgBase=Request[&quot;imgBase&quot;]; //c#里边的base6...

Quartz.net实例动态改变周期调度。misfire、Cron

Quartz:Java编写的开源的任务调度作业框架 类似Timer之类定时执行的功能,但是更强大Quartz.NET:是把Quartz转成C# NuGet...

.net Windows服务发布、安装、卸载、监听脚本。服务调试

一、脚本 为方便不用每次都去写安装卸载的脚本1.安装脚本@echooff @echo开始安装【服务】 %SystemRoot%\Microsoft.NET\Fr...

c、VB.net中全角半角转换方法

///&lt;summary&gt; ///转全角的函数(SBCcase) ///&lt;/summary&gt; ///&lt;paramname=&quot;input&quot;&gt;任意字符串...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

C.net 配合小程序实现经过第三方服务器中转文件

某些时候,微信小程序前段上传文件的时候需要经过第三方服务器再将文件上传到客户的服务器;操作如下:1:(小程序内向中端服...

.net实现QQ邮箱发送邮件功能

1、微软已经帮我们封装好了发送邮件的类MailMessage,MailMessage类构造一些邮件信息,然后通过SmtpClient进行邮件发送。Mai...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术