Docker安全--关于Docker使用root与非root用户的场景中的容器与host中的执行用户的研究_风去沙来的博客-CSDN博客


本站和网页 https://blog.csdn.net/yygydjkthh/article/details/47694929 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

Docker安全--关于Docker使用root与非root用户的场景中的容器与host中的执行用户的研究_风去沙来的博客-CSDN博客
Docker安全--关于Docker使用root与非root用户的场景中的容器与host中的执行用户的研究
风去沙来
于 2015-08-16 02:07:09 发布
39730
收藏
分类专栏:
系统运维
安全相关
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yygydjkthh/article/details/47694929
版权
系统运维
同时被 2 个专栏收录
43 篇文章
0 订阅
订阅专栏
安全相关
28 篇文章
0 订阅
订阅专栏
/************************************************* * Author : Samson * Date : 08/15/2015 * Test platform: * gcc 4.8.2 * GNU bash, 4.3.11(1)-release (x86_64-pc-linux-gnu) * ***********************************************/
结论
实际进行测试的Dockerfile是shadowsocks的Dockerfile,在此Dockerfile中添加两行即
可使后续运行应用程序时的权限为非root用户,将进行对比docker中的进程状态与Host
环境中的应用程序的运行状态进行对比,可以看出在docker中以普通用户权限运行的程
序在host主机中运行的也是普通用户权限,在docker中以root用户权限运行的程序在host
主机中运行的也是root用户权限。
前提说明
为了区分root与非root用户的区别,若在Dockerfile中不使用USER进行指定用户的情况
下,将会默认按root的权限进行启动应用程序,为了安全考虑,除非必须使用root权限,
绝不使用root权限,那么就在Dockerfile中要执行程序前使用USER指定非root用户来执行
应用程序,只需要在执行程序前添加一个非root权限用户并使用USER命令切换到此非root用户即可。
具体修改方法
添加如下两行在ENTRYPOINT [“/bin/tini”, “–”, “/usr/local/bin/shadowsocks.sh”]的前面:
RUN useradd noroot -u 1000 -s /bin/bash USER noroot
编译镜像方法
然后在Dockerfile目录下分别在修改前后执行: 修改前:
docker build -rm -t rootyygy .
修改后:
docker build -rm -t norootyygy .
其中rootyygy为默认root用户执行应用程序的镜像,norootyygy为普通用户执行应用程序的镜像。
启动镜像:
docker run -d --name rootyygy rootyygy
docker run -d --name norootyygy norootyygy
得到两个容器的进程号:
$ docker inspect -f {{.State.Pid}} rootyygy
9818
$ docker inspect -f {{.State.Pid}} norootyygy
9875
进入两个容器中:
noroot容器中:
sudo nsenter --target 9875 --mount --uts --ipc --net --pid
在容器中显示进程:
root@b5ddee5e9e3b:/# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
noroot 1 0.0 0.0 1104 4 ? Ss 08:14 0:00 /bin/tini -- /usr/local/bin/shadowsocks.sh
noroot 7 0.0 0.0 20032 2816 ? S 08:14 0:00 /bin/bash /usr/local/bin/shadowsocks.sh
noroot 8 0.0 0.3 45764 14368 ? S 08:14 0:00 /usr/bin/python /usr/local/bin/ssserver -c /etc/shadowsocks.json
root 20 0.0 0.0 20256 3192 ? S 08:17 0:00 -bash
root 25 0.0 0.0 17488 2040 ? R+ 08:21 0:00 ps aux
在host主机的进程查看:
$ ps aux | grep shadowsocks
ufo 10594 0.0 0.0 1104 4 ? Ss 16:51 0:00 /bin/tini -- /usr/local/bin/shadowsocks.sh
ufo 10599 0.0 0.0 20032 2808 ? S 16:51 0:00 /bin/bash /usr/local/bin/shadowsocks.sh
ufo 10600 0.0 0.3 45764 14292 ? S 16:51 0:00 /usr/bin/python /usr/local/bin/ssserver -c /etc/shadowsocks.json
ufo 10874 0.0 0.0 10152 1960 pts/1 S+ 16:52 0:00 grep shadowsocks
root容器中:
sudo nsenter --target 9818 --mount --uts --ipc --net --pid
在容器中显示进程:
root@4d3813cacaab:/# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 1104 4 ? Ss 08:13 0:00 /bin/tini -- /usr/local/bin/shadowsocks.sh
root 6 0.0 0.0 20032 2748 ? S 08:13 0:00 /bin/bash /usr/local/bin/shadowsocks.sh
root 7 0.0 0.3 45764 14392 ? S 08:13 0:00 /usr/bin/python /usr/local/bin/ssserver -c /etc/shadowsocks.json
root 19 0.0 0.0 20256 3232 ? S 08:16 0:00 -bash
root 24 0.0 0.0 17488 2044 ? R+ 08:24 0:00 ps aux
在host主机的进程查看:
$ ps aux | grep shadowsocks
root 9818 0.0 0.0 1104 4 ? Ss 16:13 0:00 /bin/tini -- /usr/local/bin/shadowsocks.sh
root 9823 0.0 0.0 20032 2748 ? S 16:13 0:00 /bin/bash /usr/local/bin/shadowsocks.sh
root 9824 0.0 0.3 45764 14392 ? S 16:13 0:00 /usr/bin/python /usr/local/bin/ssserver -c /etc/shadowsocks.json
ufo 10298 0.0 0.0 10152 1964 pts/1 R+ 16:48 0:00 grep shadowsocks
风去沙来
关注
关注
点赞
收藏
打赏
评论
Docker安全--关于Docker使用root与非root用户的场景中的容器与host中的执行用户的研究
实际进行测试的Dockerfile是shadowsocks的Dockerfile,在此Dockerfile中添加两行即可使后续运行应用程序时的权限为非root用户,将进行对比docker中的进程状态与Host环境中的应用程序的运行状态进行对比,可以看出在docker中以普通用户权限运行的程序在host主机中运行的也是普通用户权限,在docker中以root用户权限运行的程序在host主机.
复制链接
扫一扫
专栏目录
Docker使用非root用户
kongxx的专栏
09-02
3万+
Docker使用非root用户通常我们使用Docker的时候都是使用的root,官方说法如下:
The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can access it wit
参与评论
您还未登录,请先
登录
后发表或查看评论
用非root用户使用docker
最新发布
mibu110的博客
11-04
docker 非root用户使用
如何进入docker 使用root用户的方式
热门推荐
乎然的专栏
06-14
4万+
参考:
https://stackoverflow.com/questions/35734474/connect-to-docker-container-as-user-other-than-root
执行命令:
docker
exec -it --user root /bin/bash
进入之后直接显示的是root 用户
docker权限设置:让非root用户可以操作docker
良知犹存的博客
11-02
264
docker使用的时候需要sudo权限,但是很多时候我们账号是没有管理员权限的,为了不扩展管理员权限,我们可以把docker设置为非root用户操作
Dockerfile详解
Colin_Root
05-21
1905
Dockerfile详解
由于构建Docker镜像的源码,是一个包含一些指令的文本文档,
Dockerfile Format
Format
“#”: 注释
指令:参数
指令大小写不明感,但是一般采用代写,
.dockeringore
环境变量替换
${variablename:-word}:如果变量没有被设置,则采用“word”给其赋默认值,如果有则仍采用“variablename”本身的值。...
Dockerfile最佳实践
锐意工作室
07-16
2716
文章目录Dockerfile最佳实践一个容器对应一个进程选用合适的基础镜像把最少改动的步骤放在最前面Docker构建上下文中不要包含不需要的文件多阶段构建减少Docker镜像层的数量使用专门的user和group一次构建,多环境运行容易混淆的Dockerfile的指令ADD和COPYVOLUMECMD和ENTRYPOINTARG和ENV参考文档
Dockerfile最佳实践
一个容器对应一个进程
...
Dockerfile指令详解(六)
江晓龙的博客
09-01
793
dockfile详细配置
1.dockerfile主要组成部分
基础镜像信息
FROM centos:6.9
制作镜像操作指令
RUN yum -y install openssh-server
容器启动时操作指令
CMD ["/bin/bash"]
2.dockerfile常用指令
FROM
这个镜像来源于哪?(指定基础镜像),这里指定的镜像本地可以不存在,不存在的情况下默认去官方源去下载
例子:FROM centos:6.9
MAINTAINER
镜像的描述,目前已不
docker 优雅的关闭 spring boot 应用容器
weixin_34342578的博客
04-20
1119
2019独角兽企业重金招聘Python工程师标准>>>
...
docker常用命令
专注于AI领域前沿技术学习与分享:目标检测、图像修复、超分重建、AI工程化
01-03
170
查看正在运行的容器 docker ps
docker运行容器:docker start + 容器id 或者 容器
查看当前宿主机上所有的容器,包括正在运行的和已经停止的容器
搭建jenkins环境并自动关联打包好的工程jar进行自动发布
qq_20395245的博客
06-10
400
docker jenkins镜像发布
Docker学习总结(50)——Docker 微服务优雅关闭
科技D人生
05-29
1933
背景
使用 docker stop 关闭容器时, 只有 init(pid 1)进程能收到中断信号, 如果容器的pid 1 进程是 sh 进程, 它不具备转发结束信号到它的子进程的能力, 所以我们真正的java程序得不到中断信号, 也就不能实现优雅关闭. 解决思路是: 让pid 1 进程具备转发终止信号, 或者将 java 程序配成 pid 1 进程.需要说明的是, docker stop 默认是等待10秒钟, 这个时间有点太短了, 可以加 -t 参数, 比如 -t 30 等待30秒钟.上面的 Docker
docker 容器如何使用tini 作为启动进程并 清理、管理 Docker 容器僵死进程
LoveSummer
09-30
4195
请注意,创建“僵尸进程”通常是不被允许的(也就是说,理想情况下,您应该修复代码,这样就不会创建“僵尸进程”),但是对于像Jenkins这种应用来说,它们是不可避免的:因为Jenkins通常运行的代码不是由Jenkins维护者编写的(也就是您的Jenkins构建脚本),所以他们也无法“修复代码”。首先,如果将Jenkins以PID 1的身份运行,那么很难区分继承给Jenkins的进程(应该被收割)和Jenkins自己产生的进程(不应该被收割,因为还有其他代码已经在等待它们执行)。
解决非root用户使用docker的办法
学习随笔
08-20
956
docker命令默认只能root使用的,但我们可以赋权给其他用户。
关于此问题的官方说法如下:
The docker daemon binds to a Unix socket instead of a TCP port. By default that Unix socket is owned by the user root and other users can access it with sudo. For this reason, docker daemon always runs as t
如何在Linux中查看所有正在运行的进程
weixin_33672109的博客
02-12
3237
如何在Linux中查看所有正在运行的进程如何在Linux中查看所有正在运行的进程进程是一个其中运行着一个或多个线程的地址空间和这些线程所需要的系统资源。在Linux系统中有很多命令。那么哪些命令可以查看所有运行中的进程呢?让我们听飞哥介绍一下。你可以使用ps命令。它能显示当前运行中进程的相关信息,包括进程的PID。Linux和UNIX都支持ps命令,显示所有运行中进程的相关信...
Docker 踩得坑(docker root dir 默认路径占用过多)
wangjiakang12306的博客
08-26
3147
系统文件 100%了 经过排查后 发现是docker的问题
通过docker info 命令看到Docker Root Dir 进去发现/var/lib/docker这个文件占用过多
然后去百度了下怎么解决具体步骤如下
cd /home
mkdir docker
2 修改docker.service文件
vim /usr/lib/systemd/system/do...
docker 在宿主机上根据进程PID查找归属容器ID
acpf94337的博客
08-30
1880
在使用docker时经常出现一台docker主机上跑了多个容器,可能其中一个容器里的进程导致了整个宿主机load很高,其实一条命令就可以找出罪魁祸首
#查找容器ID
docker inspect -f "{{.Id}}" $(docker ps -q) |grep <PID>
#查找k8spod name
docker inspect -f "{{.I...
Dockerfile 研究-[zabbix 安装]
fantasywith的博客
03-22
6790
-一键编译生成zabbix docker镜像并启动zabbix-server
[root@localhost zbx_dk_60]# sh update_config-entrypoint.sh build
[root@localhost zbx_dk_60]# sh update_config-entrypoint.sh make
[root@localhost zbx_dk_60]# sh update_config-entrypoint.sh start
[root@localhost ~]#
服务器中docker新增和host一致的用户
heroacool的专栏
01-26
174
docker中用户id需要和host一致才能无缝
執行 Docker 容器可使用 dumb-init 或 tini 改善程序優雅結束的問題
01-13
538
現在越來越多環境都跑在 Docker 環境下,但不知道你是否有遇過想要停止容器,但執行docker stop之後卻無法立即停止的狀況?這個問題會牽扯到我在當 .NET Core 執行在 Linux 或 Docker 容器中如何優雅的結束文章中提到的訊號(Signal) 是如何傳送到容器的程序。這篇文章我將更深入的探討這個問題,以及提供解決方法。
關於容器與訊號的關係
當你在執行 Docker 容器時,主要執行程序(Process)的 PID 將會是1,只要這個程序停止,容器就會跟著停止。
...
C++--问题24--进程的上下文切换
数组越界,数组进栈
10-15
570
C++--问题21--进程的上下文切换
PCB 是进程存在的唯一标识,这意味着一个进程的存在,必然会有一个 PCB,如果进程消失了,那么 PCB 也会随之消失。
PCB 具体包含信息:
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:编程工作室
设计师:CSDN官方博客
返回首页
风去沙来
CSDN认证博客专家
CSDN认证企业博客
码龄16年
暂无认证
283
原创
5万+
周排名
1715
总排名
186万+
访问
等级
1万+
积分
187
粉丝
213
获赞
82
评论
530
收藏
私信
关注
热门文章
对一个deb包的解压、修改、重新打包全过程方法
92601
GNU Linux 64位系统中fatal error: stdio.h: 没有那个文件或目录的错误的解决方法
53728
vim如何跳转到函数定义处及找到在何处被调用-cscope使用
45135
Docker安全--关于Docker使用root与非root用户的场景中的容器与host中的执行用户的研究
39730
gcc: dereferencing pointer to incomplete type错误
38848
分类专栏
Linux security
3篇
arm学习
2篇
C 语言中的迷失
45篇
C++ 迷失
6篇
free style
2篇
linux program
44篇
linux命令使用及相关工具使用
73篇
VC 界面设计
1篇
VC点滴
18篇
测试
3篇
软件工程
7篇
IT趣事
1篇
网络通信
25篇
GNU线程进程相关
6篇
调试
4篇
新生带
1篇
linux线程与进程
17篇
nginx
9篇
操作系统相关
16篇
shell program(shell 编程)
10篇
android开发相关
9篇
安全相关
28篇
绘图与界面
1篇
gtk编程
2篇
python
3篇
应用技巧
8篇
虚拟化
1篇
系统运维
43篇
最新评论
对一个deb包的解压、修改、重新打包全过程方法
风去沙来:
不会有影响
对一个deb包的解压、修改、重新打包全过程方法
大老赖不赖:
不用root权限会不会有影响?
gdb如何调试没有符号表(未加-g选项的编译)的程序
qq_20999469:
加载的so不匹配
一个简单的执行程序的GNU automake自动生成Makefile的方法及案例
莽东:
我已经试过了,的确可以正常运行,不过代码文件只能在一个目录下,跨目录目前还解决不了呀!
一个简单的执行程序的GNU automake自动生成Makefile的方法及案例
棱角为零:
学到了!!谢谢~
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
iptables的Operation not supported问题解决
printf如何打印指定长度-防止非NUL结尾的字符串造成的读越界漏洞的方法
debian和redhat环境如何查看包的changelog
2022年6篇
2021年4篇
2018年2篇
2017年3篇
2016年14篇
2015年50篇
2014年98篇
2013年7篇
2012年47篇
2011年23篇
2010年12篇
2009年36篇
2008年11篇
目录
目录
分类专栏
Linux security
3篇
arm学习
2篇
C 语言中的迷失
45篇
C++ 迷失
6篇
free style
2篇
linux program
44篇
linux命令使用及相关工具使用
73篇
VC 界面设计
1篇
VC点滴
18篇
测试
3篇
软件工程
7篇
IT趣事
1篇
网络通信
25篇
GNU线程进程相关
6篇
调试
4篇
新生带
1篇
linux线程与进程
17篇
nginx
9篇
操作系统相关
16篇
shell program(shell 编程)
10篇
android开发相关
9篇
安全相关
28篇
绘图与界面
1篇
gtk编程
2篇
python
3篇
应用技巧
8篇
虚拟化
1篇
系统运维
43篇
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
风去沙来
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值