运维专题.Docker功能权限(Capabilities)管理和查看

运维专题
Docker功能权限(Capabilities)

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/139234378
HuaWei:https://bbs.huaweicloud.com/blogs/428080

【介绍】:本文介绍Docker中功能权限(Capabilities)管理和查看。

在这里插入图片描述


1. Capabilities的概念

Linux系统中,Capabilities是一种细粒度的权限控制机制,它将传统的root权限分解为多个独立的权限单元。每个权限单元称为一个Capability

通过这种机制,可以为进程授予特定的权限,而不需要授予全部的root权限,从而提高系统的安全性。

2. Docker中的Capabilities

Docker中,容器 默认会被授予一组有限的Capabilities,以确保容器的安全性和隔离性。然而,有时容器需要额外的权限来执行特定的操作,这时可以通过添加或删除Capabilities来调整容器的权限。默认情况下Docker删减了一分部Capabilities,而仅仅保留了一部分Capabilities

2.1 Docker中默认保留的Capabilities

Docker默认保留的Capabilities如:

Capability描述
CAP_CHOWN修改文件的所有者。
CAP_DAC_OVERRIDE绕过文件读写检查。
CAP_FOWNER绕过文件所有者的权限检查。
CAP_FSETID设置文件的set-user-ID或set-group-ID位。
CAP_KILL发送信号给其他进程。
CAP_SETGID设置进程的组ID。
CAP_SETUID设置进程的用户ID。
CAP_SETPCAP修改进程的能力。
CAP_NET_BIND_SERVICE绑定到低编号的端口(<1024)。
CAP_NET_RAW使用RAW套接字和PACKET套接字。
CAP_SYS_CHROOT使用chroot()系统调用。
CAP_MKNOD创建特殊文件。
CAP_AUDIT_WRITE写入审计日志。
CAP_SETFCAP设置文件能力。

2.1 Docker中默认去除的Capabilities

以下是Docker默认情况下删除的Capabilities,这些Capabilities通常具有较高的风险,因此在默认配置中被禁用:

Capability描述
CAP_SYS_MODULE加载和卸载内核模块。
CAP_SYS_RAWIO直接访问硬件设备。
CAP_SYS_PACCT配置进程记账。
CAP_SYS_ADMIN执行系统管理操作(如挂载文件系统、加载内核模块等)。
CAP_SYS_NICE修改进程优先级。
CAP_SYS_RESOURCE增加资源限制。
CAP_SYS_TIME修改系统时间。
CAP_SYS_TTY_CONFIG配置TTY设备。
CAP_AUDIT_CONTROL配置审计子系统。
CAP_MAC_OVERRIDE绕过MAC(Mandatory Access Control)检查。
CAP_MAC_ADMIN配置MAC。
CAP_NET_ADMIN执行网络管理操作(如配置网络接口、路由表等)。
CAP_SYSLOG配置内核日志。
CAP_DAC_READ_SEARCH绕过目录读权限检查。
CAP_LINUX_IMMUTABLE设置文件的不可变属性。
CAP_IPC_LOCK锁定共享内存。
CAP_IPC_OWNER绕过IPC权限检查。
CAP_SYS_BOOT重新启动系统。
CAP_LEASE创建文件租约。
CAP_WAKE_ALARM设置系统唤醒闹钟。
CAP_BLOCK_SUSPEND阻止系统挂起。
CAP_AUDIT_READ读取审计日志。

3. --cap-add 选项添加Capabilities

可以使用--cap-add选项为容器添加特定的Capabilities。例如,添加NET_ADMINSYS_TIME权限:

docker run --cap-add=NET_ADMIN --cap-add=SYS_TIME ubuntu

4. --cap-drop 选项删除Capabilities

可以使用--cap-drop选项从容器中删除特定的Capabilities。例如,删除NET_RAW权限:

docker run --cap-drop=NET_RAW ubuntu

5. 在容器内查看容器的Capabilities

通过Linuxgetpcaps命令(需要安装libcap2-bin)可以查看一个Liniux系统的能力授权。因此我们可以进入容器内查看。

例如,我们通过--rm创建一个临时容器来演示。

  1. 启动一个容器并安装libcap2-bin:
docker run -it --rm ubuntu bash
  1. 在容器内安装libcap2-bin:
apt-get update
apt-get install -y libcap2-bin
  1. 查看容器内的Capabilities:
getpcaps 1

这里的1是容器内的第一个进程(通常是/bin/bash/bin/sh)。运行后,命令行显示:

cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep

在这里插入图片描述
从输出中,可以看到输出格式为:

1: cap_chown,cap_dac_override,...=ep

这个输出中:

  • 1: 表示进程IDPID)为1的进程。通常在Docker容器中,PID为1的进程是容器的主进程(例如/bin/bash);

  • cap_chown,cap_dac_override,cap_fowner,... 是进程拥有的Capabilities列表;

  • =ep:

    • e 表示Effective(有效的):该Capability在进程中是有效的。

    • p 表示Permitted(允许的):该Capability被允许使用。

Capabilities列表部分,可以看到这个容器:

Capability描述
cap_chown修改文件的所有者。
cap_dac_override绕过文件读写检查。
cap_fowner绕过文件所有者的权限检查。
cap_fsetid设置文件的set-user-ID或set-group-ID位。
cap_kill发送信号给其他进程。
cap_setgid设置进程的组ID。
cap_setuid设置进程的用户ID。
cap_setpcap修改进程的能力。
cap_net_bind_service绑定到低编号的端口(<1024)。
cap_net_raw使用RAW套接字和PACKET套接字。
cap_sys_chroot使用chroot()系统调用。
cap_mknod创建特殊文件。
cap_audit_write写入审计日志。
cap_setfcap设置文件能力。

就是上面我们说过的在Docker中默认保留的Capability

6. 通过 sh -c 在启动容器时查看Capabilities

你也可以在运行容器时通过sh -c来直接查看CapabilitiesDocker中,sh -c 是一个常见的命令行用法,用于在一个新的 shell 会话中执行指定的命令字符串。
其中

  • sh: 表示一个指向 Bourne shell 的命令,它启动一个新的 shell 会话。
  • -c: 该选项表示接下来的字符串将作为命令在新的 shell 会话中执行。

下面我们再次通过--rm创建一个临时容器来作为示例:

docker run --rm ubuntu sh -c "apt-get update && apt-get install -y libcap2-bin && getpcaps 1"

可以看到控制台输出:

Get:1 http://archive.ubuntu.com/ubuntu noble InRelease [256 kB]
Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [89.7 kB]
Get:3 http://archive.ubuntu.com/ubuntu noble-updates InRelease [89.7 kB]
Get:4 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages [37.7 kB]
Get:5 http://archive.ubuntu.com/ubuntu noble-backports InRelease [89.7 kB]
Get:6 http://security.ubuntu.com/ubuntu noble-security/universe amd64 Packages [18.6 kB]
Get:7 http://archive.ubuntu.com/ubuntu noble/restricted amd64 Packages [117 kB]
Get:8 http://archive.ubuntu.com/ubuntu noble/universe amd64 Packages [19.3 MB]
Get:9 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages [1808 kB]
Get:10 http://archive.ubuntu.com/ubuntu noble/multiverse amd64 Packages [331 kB]
Get:11 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages [93.2 kB]
Get:12 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 Packages [41.7 kB]
Get:13 http://archive.ubuntu.com/ubuntu noble-backports/universe amd64 Packages [6387 B]
Fetched 22.3 MB in 6s (3993 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:libpam-cap
The following NEW packages will be installed:libcap2-bin libpam-cap
0 upgraded, 2 newly installed, 0 to remove and 1 not upgraded.
Need to get 46.9 kB of archives.
After this operation, 196 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble/main amd64 libcap2-bin amd64 1:2.66-5ubuntu2 [34.5 kB]
Get:2 http://archive.ubuntu.com/ubuntu noble/main amd64 libpam-cap amd64 1:2.66-5ubuntu2 [12.4 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 46.9 kB in 1s (40.7 kB/s)
Selecting previously unselected package libcap2-bin.
(Reading database ... 4368 files and directories currently installed.)
Preparing to unpack .../libcap2-bin_1%3a2.66-5ubuntu2_amd64.deb ...
Unpacking libcap2-bin (1:2.66-5ubuntu2) ...
Selecting previously unselected package libpam-cap:amd64.
Preparing to unpack .../libpam-cap_1%3a2.66-5ubuntu2_amd64.deb ...
Unpacking libpam-cap:amd64 (1:2.66-5ubuntu2) ...
Setting up libcap2-bin (1:2.66-5ubuntu2) ...
Setting up libpam-cap:amd64 (1:2.66-5ubuntu2) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC entries checked: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.38.2 /usr/local/share/perl/5.38.2 /usr/lib/x86_64-linux-gnu/perl5/5.38 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.38 /usr/share/perl/5.38 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 8.)
debconf: falling back to frontend: Teletype
1: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep

其中最后一行是这样的:

1: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep

在这里插入图片描述
这样就显示了我们像查看的Capabilities

当然,还可在运行容器时使用了--cap-add=ALL选项:

docker run --rm --cap-add=ALL ubuntu sh -c "apt-get update && apt-get install -y libcap2-bin && getpcaps 1"

执行后,最后一行变成了:

1: =ep

这个结果表示进程ID1的进程(通常是容器的主进程)拥有所有的有效(Effective)和允许(Permitted)Capabilities。(
=ep: 表示该进程拥有所有的有效(Effective)和允许(Permitted)Capabilities。)

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

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

相关文章

MedSegDiff: Medical Image Segmentation with Diffusion Probabilistic Model 论文总结

题目&#xff1a;MedSegDiff: Medical Image Segmentation&#xff08;图像分割&#xff09;with Diffusion Probabilistic Model&#xff08;扩散概率模型&#xff09; 论文&#xff08;MIDL会议&#xff09;&#xff1a;MedSegDiff: Medical Image Segmentation with Diffusi…

勇于创新,勤于探索 —— 我的创作纪念日

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

纯CSS丝滑边框线条动画

在这个网站&#xff08;minimal-portfolio-swart.vercel.app&#xff09;发现一个不错的交互效果&#xff0c;用户体验效果很不错。如封面图所示&#xff0c;这个卡片上有一根白色的线条围绕着卡片移动&#xff0c;且在线条的卡片内部跟随这一块模糊阴影&#xff0c;特别是在线…

关于Nginx热部署的细节分析

文章目录 前言一、环境准备二、热部署步骤总结 前言 Nginx由于其高并发、高性能、可扩展性好、高可靠性、热部署、BSD许可证等优势被广泛使用&#xff0c;本人主要针对热部署的部分展开说明热部署的具体步骤以及步骤背后发生的具体事情。 本次热部署采用的Nginx版本号为&…

高通 Android 12/13冻结屏幕

冻结屏幕很多第一次听到以为是Android一种异常现象&#xff0c;实则不然&#xff0c;就是防止用户在做一些非法操作导致问题防止安全漏洞问题。 1、主要通过用户行为比如禁止下拉状态栏和按键以及onTouch事件拦截等&#xff0c;不知道请看这篇文章&#xff08;Touch事件传递流…

GitHub打不开的解决方案

1、打开https://sites.ipaddress.com/github.com/找到DNS Resource Records&#xff0c;复制github的ip地址&#xff0c;先保存起来&#xff1a; 140.82.112.32、打开https://sites.ipaddress.com/fastly.net/找到DNS Resource Records&#xff0c;复制其中一个ip地址&#xf…

基于Nacos实现Sentinel规则持久化

基于Nacos实现Sentinel规则持久化 一、Sentinel使用痛点二、解决方案2.1 保存本地文件2.2 保存数据库2.3 保存到Nacos 三、规则持久化到Nacos3.1 Nacos服务端修改配置3.2 Sentinel控制台修改配置3.3 Nacos数据源整合到Sentinel中 一、Sentinel使用痛点 SpringCloudAlibaba帮我…

迷你手持小风扇哪个牌子质量好点?这五款迷你手持小风扇不要错过

随着空调的普及&#xff0c;我们对夏日热浪的抵抗力逐渐减弱。当从凉爽的空调屋步入闷热的户外、拥挤的交通工具或公共场所时&#xff0c;如何抵御热浪的侵袭成为大众关注的焦点。在这样的背景下&#xff0c;迷你手持小风扇凭借其便携性和即时降温功能&#xff0c;成为众多人的…

降价!免费!AI大模型开启价格战,企业如何“薅”出绿色财富?

近期&#xff0c;国内大模型技术供应商之间的价格战&#xff0c;使得这项原本成本较高的技术变得更加亲民&#xff0c;极大降低了企业的技术采用门槛。这不仅为企业提供了经济实惠的技术解决方案&#xff0c;更为他们的绿色低碳转型之路带来了新的机遇。 随着全球气候变化问题…

MySQL -- 相关知识点

1.数据库相关介绍 数据库的选择通常取决于具体的应用需求&#xff0c;如性能、扩展性、数据一致性和易用性等因素。 1. 关系型数据库&#xff08;RDBMS&#xff09; MySQL&#xff1a; 广泛使用的开源数据库&#xff0c;支持大多数操作系统。强调易用性、灵活性和广泛的社区支…

基于Java+MySQL+Swing的学生管理系统

1.系统简介和开发背景 该同学工作积极主动、高效&#xff0c;学习认真&#xff0c;待人诚恳&#xff0c;能够做到服从指挥、认真听取老同志的指导&#xff0c;不怕苦、不怕累&#xff0c;表现有较强的求知欲&#xff0c;积极观察、体验、思考&#xff0c;并能够灵活运用自己的知…

自养号测评是什么?亚马逊、沃尔玛、Target卖家如何建立自己的护城河?

近期有跨境卖家咨询我自养买家账号测评的事情&#xff0c;他们还是有不了解自养号测评的&#xff0c;所以珑哥觉得有必要再讲一下卖家测评的一些事情&#xff0c;之前文章也说过。这可能是跨境卖家运营的一个趋势。今天珑哥着重来介绍一下自养号测评 一、什么叫做自养号测评&a…

OrangePi AIpro初体验之图片视频检测案例真实测评

OrangePi AIpro简介 OrangePi AIpro官网 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;其搭载了昇腾AI 处理器&#xff0c;可提供8TOPS INT8 的计算能力&#xff0c;内存提供了8GB 和16GB两种版本。可以实现图像、视频等多种数据分析与推理…

全球点赞最高的人颜廷利:真正的人生目标是什么

在那个充满生机的2024年春天&#xff0c;记者有幸对中国第一起名大师的老师颜廷利教授进行了深入的访谈。带着对其人生哲学的强烈好奇&#xff0c;记者紧张而期待地提出了问题&#xff1a;“颜教授&#xff0c;您在漫长的人生旅途中最追求的是什么&#xff1f;” 宁夏银川、山东…

PMP考试没有考过应该如何再考?

一、接受失败&#xff0c;理性分析 其实&#xff0c;PMP考试可以在PMI一年有效期内提交补考申请&#xff0c;若已经过了一年有效期&#xff0c;考生则需要重新进行完整的PMP考试报名流程。PMP考试补考费用&#xff1a;2500元/次。 1.接受失败&#xff1a;接受并处理情绪。面对…

【Python数据分析】基于自回归积分滑动平均模型的疫情分析报告 附完整python代码

资源地址&#xff1a;Python数据分析大作业 2000字 图文分析文档 疫情分析完整python代码 数据分析 数据来自法国疫情数据 资源地址&#xff1a;Python数据分析大作业 2000字 图文分析文档 疫情分析完整python代码 代码详解 完整代码文件 主要是对时间序列数据进行分析和预…

技术面‍:前端代码是如何与服务器交互的

前言&#xff1a; 本篇文章主要是想讲解 .html 文件和 .CSS 文件在实际开发中和后端服务器交互最后上线的基础原理。 面向的人群&#x1f195;&#xff1a;是刚入行不久&#xff0c;且目前只会写前端业务代码而不清楚整个工作流的前端新人。我会从 0 开始一步一步带你理解整个…

大规模敏捷SA(Leading SAFe)证书是什么意思?如何报名,含金量高吗?

大规模敏捷SA(Leading SAFe)证书是什么意思&#xff1f; 常规的敏捷框架适用于中小型项目团队&#xff0c;而且不具有扩展性。基于常规的敏捷框架&#xff0c;SAFe定义了一个可扩展的敏捷框架模型&#xff0c;它适用于大型团队的合作开发&#xff0c;可以提高团队之间的协作性…

【再探】设计模式—职责链模式、命令模式及迭代器模式

行为型设计模式研究系统在运行时对象之间的交互&#xff0c;进一步明确对象的职责。有职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式及访问模式共11种。 1 职责链模式 需求&#xff1a;1) 请求能被多…

如何使用golang自带工具对代码进行覆盖率测试

在 Go 语言中&#xff0c;测试代码覆盖率通常使用 go test 命令结合 -cover 和 -coverprofile 1. 基本代码覆盖率报告 在项目目录下运行以下命令 go test -cover这将在控制台输出一个代码覆盖率的百分比。但是&#xff0c;这种方式不会保存覆盖率数据&#xff08;可以指定目…