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

news2024/9/24 23:22:42
运维专题
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.coloradmin.cn/o/1701291.html

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

相关文章

Python深度学习基于Tensorflow(12)实战生成式模型

文章目录 Deep Dream风格迁移参考资料 Deep Dream DeepDream 是一项将神经网络学习模式予以可视化展现的实验。与孩子们观察云朵并尝试解释随机形状相类似&#xff0c;DeepDream 会过度解释并增强其在图像中看到的图案。 DeepDream为了说明CNN学习到的各特征的意义&#xff0c…

SQL使用函数给多个分表添加同一字段

数据库中分表时&#xff0c;往往需要向多个分表中添加同一个字段&#xff0c;可以定义一个函数&#xff0c;每次调用这个函数向多个份表中添加同意字段。 1、创建函数示例&#xff1a; 在PostgreSQL中创建一个简单的函数 以下是一个在PostgreSQL中创建函数的简单示例&#x…

PXE + Kickstart 无人值守装机

目录 一、简介 二、PXE工作流程 三、搭建 PXE 远程安装服务器 1.安装包准备 2.环境准备 3.搭建PXE远程安装服务器 &#xff08;1&#xff09;关闭 firewalld 和 selinux &#xff08;2&#xff09;配置双网卡 1&#xff09;添加硬件网卡 2&#xff09;编辑网卡配置文…

强化学习,第 2 部分:政策评估和改进

目录 一、介绍 二、关于此文章 三、求解贝尔曼方程 四、策略评估 4.1 更新变体 4.2 例描述 五、策略改进 5.1 V函数描述 5.2 政策改进定理 六、策略迭代 七、值迭代 7.1 算法描述 7.2 异步值迭代 八、广义策略迭代 九、结论 一、介绍 R强化学习是机器学习中的一…

一屏万象,场景无限:蓝牙墨水屏标签多功能多场景应用带您领略未来

在数字化浪潮汹涌澎湃的今天&#xff0c;智能科技产品层出不穷&#xff0c;它们不仅极大地改变了我们的生活方式&#xff0c;更在无形中拓宽了我们的视野。而今&#xff0c;一款融合了创新技术与实用性于一体的蓝牙墨水屏标签&#xff0c;正以其多功能多场景应用的特性&#xf…

【C++/STL】vector(常见接口、模拟实现、迭代器失效)

&#x1f308;个人主页&#xff1a;秦jh_-CSDN博客&#x1f525; 系列专栏&#xff1a; https://blog.csdn.net/qinjh_/category_12575764.html?spm1001.2014.3001.5482 目录 简单使用 常见接口 find insert vector模板 模拟实现 尾插 构造 迭代器失效 使用memcpy拷贝问…

Web漏洞:网络安全的隐形杀手

随着互联网的深入发展&#xff0c;Web应用程序已成为企业和个人生活中不可或缺的一部分。然而&#xff0c;随着Web应用的普及&#xff0c;网络安全问题也日益凸显&#xff0c;其中Web漏洞是网络安全领域面临的重大挑战之一。本文将详细探讨一些常见的Web漏洞及其潜在的危害&…

使用 Azure DevOps 和 Azure Web Apps 进行 .NET Core 应用的 CI/CD

概览 在现代软件开发中&#xff0c;快速部署和高效的版本控制系统是非常关键的。通过利用 Azure DevOps 和 Azure Web Apps&#xff0c;开发团队可以实现自动化的持续集成和持续部署&#xff08;CI/CD&#xff09;&#xff0c;从而加快从开发到生产的过程。接下来我们一步步来…

深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥

系列文章目录 更新ing... MySQL操作全攻略&#xff1a;库、表、数据、事务全面指南深入探索MySQL SELECT查询&#xff1a;从基础到高级&#xff0c;解锁数据宝藏的密钥MySQL SELECT查询实战&#xff1a;练习题精选&#xff0c;提升你的数据库查询技能PyMySQL&#xff1a;连接P…

灯塔工厂产业数字化平台解决方案(50页PPT)

方案介绍&#xff1a; 随着工业4.0和智能制造的快速发展&#xff0c;传统工厂正面临着转型升级的迫切需求。为了提升生产效率、优化资源配置、增强市场竞争力&#xff0c;我们推出了灯塔工厂产业数字化平台解决方案。该方案旨在通过先进的信息技术手段&#xff0c;将传统工厂转…

感谢信∣高成长型动力电池供应商『华鼎国联』采购管理平台项目上线,企企通SRM加速新能源汽车发展新质生产力

近日&#xff0c;企企通收到来自华鼎国联四川动力电池有限公司&#xff08;以下简称“华鼎国联”&#xff09;的感谢信&#xff0c;对企企通团队在采购数字化项目实施中所付出的努力表示感谢。 华鼎国联在感谢信中特别指出&#xff0c;回首披荆斩棘的2023年&#xff0c;企企通的…

通过css实现------简单边框流动特效

效果展示 代码部分 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice…

阿里云产品DTU评测报告(三)

这阿里云产品DTU评测报告&#xff08;三&#xff09; 连接物联网平台创建项目 连接物联网平台 在开始连接物联网平台之前&#xff0c;首先需要下载开发工具Visual Studio Code 开发工具&#xff0c;开发工具可以到https://code.visualstudio.com/ 去查找下载&#xff0c;下载完…

9.Redis之list类型

list相当于链表、数据表 1.list类型基本介绍 列表中的元素是有序的"有序"的含义,要根据上下文区分~~有的时候,谈到有序,指的是"升序","降序”有的时候,谈到的有序,指的是, 顺序很关键~~如果把元素位置颠倒,顺序调换.此时得到的新的 List 和之前的 Li…

神奇动物在哪里?斯洛文尼亚旅游之野生动物寻踪

不仅拥有优美动人的自然风光&#xff0c;斯洛文尼亚还以其丰富的生物多样性而闻名。得益于国家对大自然开展的保护工作&#xff0c;斯洛文尼亚超过三分之一的国土面积都被规划为保护区&#xff0c;拥有约1.5万种动物和6000种植物&#xff0c;其中不乏众多特有、稀有和濒危动植物…

如何选择一款开放式耳机?六大独家选购技巧超详细汇总!

​喜欢户外活动的朋友们&#xff0c;你们都是懂得享受生活的达人吧&#xff01;想象一下&#xff0c;在户外活动时&#xff0c;如果能有一副既适合场景又提供超棒音乐体验的耳机&#xff0c;那该多完美啊&#xff01;这时候&#xff0c;开放式耳机就闪亮登场了&#xff01;它的…

存储方式 - 前端学习

1. cookie是什么&#xff1f;你了解cookie吗&#xff1f; 在计算机领域中&#xff0c;特指一种由服务器发送到用户浏览器并保存在用户计算机上的小型文本文件。这个文件可以被服务器用来识别用户身份、跟踪用户活动、保存用户设置等。它通常由名称、值、域名、路径、过期时间等…

外贸邮箱怎么注册

外贸邮箱指的是用于外贸业务的电子邮箱&#xff0c;其功能比一般的电子邮箱更加专业化。注册外贸邮箱既能提高工作效率&#xff0c;又能展示企业的专业性。那么如何注册外贸邮箱呢&#xff1f;本文将详细介绍注册外贸邮箱的步骤和注意事项。 一、选择邮箱服务商 注册外贸邮箱首…

【408真题】2009-19

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

byzer plugin install log

离线插件参考地址&#xff1a; Byzer Documentation 离线安装方式&#xff08;错误过程记录&#xff09;&#xff1a; 参考文档&#xff1a;https://docs.byzer.org/#/byzer-lang/zh-cn/extension/README Byzer-lang 支持插件安装&#xff0c;删除&#xff0c;获取列表等。安装…