【docker】如何运行没有Root权限的Docker?

news/2025/1/21 13:07:46/文章来源:https://www.cnblogs.com/o-O-oO/p/18683423

以下文章来源于运维自习室 ,作者运维自习室

Rootless模式的目的是让Docker守护进程以非root用户身份运行。该方案以实验特性的方式在v19.03版本引入,并在v20.10版本成为正式功能。

实践

官方文档已经做了详细的介绍,这里仅仅做一下实践复现。

具体实践环境为:

CentOS 7.2

docker-ce 23.0.0

详细安装升级过程就略过了。CentOS 7.2上默认安装的docker 是1.13版本,需要升级到v20.10以上版本。

第一步,用户准备。

准备一个普通用户u,后续就使用它来运行docker了。配置subuid、subgid、max_user_namespaces等信息,做好准备工作。

useradd rootless

sysctl user.max_user_namespaces=28633

第二步,从官方下载rootless脚本,并运行。

curl -fsSL https://get.docker.com/rootless | sh

运行成功后,会在用户目录下创建bin目录,包含了dockerd-rootless.sh等文件。

根据提示需要设置一些环境变量。可以把环境变量配置写入~/.bashrc,并执行source ~/.bashrc命令使之生效。

export XDG_RUNTIME_DIR=/home/u/.docker/run
export PATH=/home/u/bin:$PATH
export DOCKER_HOST=unix:///home/u/.docker/run/docker.sock

第三步,启动docker服务。

一般情况下,可以使用systemctl方式运行,在后台启动docker服务。

$ systemctl --user restart docker

但是 CentOS 7 不支持这种方式,可以直接运行dockerd-rootless.sh脚本来启动docker服务。

$ dockerd-rootless.sh

运行后,可以看到docker的服务都是以普通用户u的身份运行。

使用rootless模式后,从安全角度考虑,也就没必要再使用root以及其他用户操作docker了。

效果

在rootless模式下启动nginx容器后。

容器内,依然可以看到root身份的master进程和nginx身份的worker进程。此时容器内应用以为自己使用的是root用户身份。

实际上,宿主机上,因为user namespaces机制的缘故,这些进程也只是普通用户身份。

总结

Docker Rootless模式是官方提供的一种安全解决方案,可以让Docker守护进程以普通用户身份运行,从而避免容器应用利用Docker漏洞获得宿主机root权限的风险。

另外,要注意的是因为Docker作为容器本身需要利用很多系统高级特性,因此Docker守护进程以非Root身份运行实际上也会导致一些功能受限。这点可以参与官方文档详细了解。

至此Docker的用户安全机制,基本了解完毕。只要清楚地掌握容器的安全机制,做好日常安全管理和风险响应,可以为容器应用化提供较好的安全保障。

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

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

相关文章

从0开始的ctf旅行之pwn篇

*最后更新时间:2025-01-21 10:17:43 星期二 * 零、前言 本篇文章是我个人从0开始打pwn的真实 坐牢 做题经验,包含了大量的参考链接和个人思考,绝大多数题目来自MoeCTF2024(https://ctf.xidian.edu.cn/) 本文默认你有以下基础:python3 会装虚拟机+基本的Linux操作 C语言一、…

识别两个表格文件,根据手机号进行匹配相同行并按照需要字段输出

python代码# -*- coding: utf-8 -*- # encoding:utf-8 from flask import Flask, render_template, request, send_file,jsonify import os, requests import pandas as pd from datetime import datetime, timedelta import time, json from log import logging import thread…

语音播报,套件多少异常的问题。(含源代码)

在工作中遇到一家工厂老板的需求:因为产品是有多个配件组成,在生产的时候,经常会多生产,少生产,在组装时,也会出现配件多少的问题,现就此问题设计一款程序。多出,少的,异常的,正常好,会开语音播报。现将全部代码给出以备。 import inspect import os import threadi…

EDMA3学习笔记1

1.1 EDMA3简介 EDMA3(Enhanced Direct Memory Access 3):增强型直接存储器访问的控制器。它是DSP中一个高级数据传输引擎,其结构适合数据的高速传输,可以在没有CPU主要参与的情况下,由控制器完成数据转移,主要服务外部内存(DDR)、片上内存(L2 SRAM)以及串口外设等。…

又一个新项目完结,炸裂!

除了全程直播讲解的、50 个小时的保姆级视频教程之外,我还写了整套文字教程(15 万多字),细致入微!大家好,我是程序员鱼皮。经过了 2 个月的爆肝,我在自己的编程导航的第 11 套有 保姆级教程 的大项目 —— 企业级智能协同云图库平台,完结啦!除了全程直播讲解的、50 个…

kylin V10 SP2 离线单机部署tidb v8.3.0

准备离线组件包 在官方下载页面选择对应版本的 TiDB server 离线镜像包(包含 TiUP 离线组件包)。需要同时下载 TiDB-community-server 软件包和 TiDB-community-toolkit 软件包。 部署离线环境TiUP组件 将离线包传至服务器,执行以下命令安装 TiUP 组件: tar zxvf tidb-comm…

生成型AI应用的质量为何常常不尽人意,以及如何改进

生成型AI应用的质量为何常常不尽人意,以及如何改进2025年,图片来源:elements.envato.com,Marcel Mller 编辑过去两年,生成型AI的热潮席卷了商业世界。这项技术可以提高业务流程的执行效率,减少等待时间,降低过程缺陷。像ChatGPT这样的接口使得与大型语言模型(LLM)的互…

C# WEB API windows server 发布注意事项

1、使用背景: 数据请求方通过接口获取数据,同时使用方通过用户名称进行功能限制;2、实现方法: C# web服务功能,不同机型使用不同接口进行数据获取,请求数据需要包含产品条码信息、请求方用户名信息; 接口请求如下: 3、部署注意事项: 在windows server IIS 管理器中添…

菜单权限的设计与实现

说明该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。 友情提醒:本篇文章是属于系列文章,…

第十一章 成本管理(2025年详细解析版)

目录导语章节介绍什么是成本管理?关注两类成本11.1 管理基础项目成本管理的作用和意义项目成本失控原因(了解)成本类型机会成本沉没成本发展趋势和新兴实践如何计算进度偏差?11.2 项目成本管理过程过程概述项目成本管理过程裁剪时需要考虑的因素(不重要)在敏捷或适应型环…