首页 > 其他分享 >在dockerfile中使用非root用户

在dockerfile中使用非root用户

时间:2023-04-13 11:35:04浏览次数:33  
标签:容器 run root 用户 ubuntu docker dockerfile

16、在dockerfile中使用非root用户
前言:

当在运行容器时,默认都是以root的账号进行启动的,但这个root账号和宿主机的root账号的权限

是不一样的,会受到capabilities的限制。那如果是非特权的容器,使用容器的root账号启动是否

安全的呢。

(1) 启动一个 centos-test 的容器

# docker run -itd --name centos_test -v /etc:/mnt centos:7 bash

 

(2) 尝试修改 /mnt/shadow 文件,这个就是宿主机的 /etc/shadow 文件

# docker exec -it centos_test bash -c "echo hello >> /mnt/shadow"

 

(3) 在宿主机上,查看 /etc/shadow ,主机的文件被修改了

 

16.1 使用"docker run"命令方式指定容器内运行非root用户,增强容器的安全性

1、参数说明

-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
-u, --user string 用户名或UID(格式:<名称|uid>[:<组别|gid>])。

 

2、示例

# docker run -u 1001:1001 -itd --name centos_test -v /etc:/mnt centos:7 bash

# docker exec -it centos_test bash

提示: 由于容器中 /etc/passwd 文件中没有 uid 为 1001 的用户,所以 shell 终端显示为"bash-4.2$"(没有用户家目录)。

 

16.2 在Dockerfile中指定容器内运行非root用户,增强容器的安全性

Dockerfile中使用新建用户,不需要启动容器时增加 -u

1、以下是一个示例Dockerfile,使用一个名为“myuser”的非root用户来运行容器。

FROM ubuntu:18.04
# 创建 myuser 用户
RUN groupadd -g 1002 myuser && \
useradd -u 1002 -g 1002 -m -s /usr/sbin/nologin myuser
# 切换到 myuser 用户
USER myuser
# 运行命令
CMD ["/bin/bash"]

在这个例子中,我们首先创建一个名为“myuser”的用户,并使用 USER 命令切换到该用户。然后我们运行一个简单的命令来测试容器是否能够成功运行。
注意:
(1) 使用非root用户需要确保该用户具有执行容器中任何必要操作的权限。
(2) RUN 参数放到 USER 参数下会受到普通用户权限的限制(COPY、ADD 参数类似于 docker 基础命令中的 cp,将宿主机目录下的文件拷贝到镜像,不受影响)。

 

2、示例

# docker build -t ubuntu_image .

# docker run -itd --name ubuntu_test -v /root/ubuntu_volume:/home/myuser/ubuntu_volume ubuntu_image

注意: 挂卷时需要在宿主机上手动创建目录并赋予和容器用户一样的 属主:属组。

 

16.3 补充

我们在使用官方的容器镜像启动容器后进入容器会发现容器的用户是 root,而运行应用的的进程是普通用户,这种方式也能
提高应用的安全性,我通过如下实验来演示该方式。

1、项目目录

# mkdir -p /root/compose
# cd /root/compose
# ls
Dockerfile run.sh

2、Dockerfile 文件

FROM ubuntu:18.04
COPY ./run.sh /root/
CMD ["/bin/bash","/root/run.sh"]

3、run.sh 文件

#!/bin/bash
useradd -M mysql
chown -R mysql.mysql /var/lib/mysql/
su - mysql -c "sleep 10000"

4、构建镜像

# docker build -t ubuntu_image .

5、创建容器

# docker run -itd --name ubuntu_test -v /root/mysql/data:/var/lib/mysql ubuntu_image

6、查看

 

标签:容器,run,root,用户,ubuntu,docker,dockerfile
From: https://www.cnblogs.com/LiuChang-blog/p/17312875.html

相关文章

  • Ubuntu和Centos设备出厂后添加给普通用户docker权限
    Ubuntu#查看用户组group#将当前普通用户加入docker用户组,执行命令:sudousermod-aGdocker{用户账号}#如果提示Usingdefaulttag:latestGotpermissiondeniedwhiletryingtoconnecttotheDockerdaemonsocketatunix:///var/run/docker.sock:Post"http://%2F......
  • win10远程桌面连接,使用正确的用户名和密码仍然不能成功连接
    最近笔记本重置后,台式使用“远程桌面连接”远程笔记本失败了,总是提示“登录没有成功”。 开始自查:win10专业版,允许远程的相关设置也都开了,连接的ip正确,也没问题。因为我的笔记本用户是用微软账户登录的,远程时用户名和密码也要用微软用户名和密码(不是那个PIN码)。再三确认用户名......
  • APISIX 是怎么保护用户的敏感数据不被泄露的?
    本文以APISIX作为例子,为大家介绍了如何借助GlobalDataEncryption功能来保护敏感数据,确保不会有任何敏感数据进行明文存储,这样即使etcd中所有存储的数据都被盗取,也不会造成敏感数据泄露,从而有效提升了APISIX的安全性。作者刘维,API7.ai技术工程师,ApacheAPISIXContrib......
  • Django自带的Admin后台中如何获取当前登录用户
    需求背景在使用Django快速开发一个IT电脑、显示器资产管理小系统的时候,遇到一个问题是,当变更资产设备(新增、修改、删除)的时候,能记录是谁在什么时间进行的变更。确认的是肯定是登录状态,但是在使用Django的signal中获取不到当前登录的用户问题演示1、定义资产设备模型和 自定义日志......
  • 火山引擎数智平台协助洞察美图类 APP 新增长 付费用户转化超过 124%
     更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群美图类APP的下一个增长点在哪里?目前,国内市场上的美图类APP大多都遵循着基础功能免费使用、个性化热门功能收费使用的原则。即用户可以在APP内选择基础的免费修图功能,比如「瘦脸瘦身」、......
  • UniApp小程序开发如何获取用户手机号
    我们在小程序开发的时候经常遇到这种需求,需要在账号登陆的时候进行手机号获取,并使用手机号登陆。本文讲述如何在前后端分离的状态下获取手机号查阅官网文档不难发现我们需要使用uni.login()这个方法来获取用户的code,获取用户的openid和session_key是需要后端去发请求的,因......
  • VMware ESXi6.7服务器,确认用户名密码正确,但是web管理界面无法正常登陆
    VMwareESXi6.7服务器,确认用户名密码正确,但是web管理界面无法正常登陆。修改完成密码后,连接显示器键盘,操作没有问题。但是远程通过web管理界面访问时,提示:“由于用户名火密码不正确,无法完成登陆”确认用户名密码没错,连接显示器键盘,操作没有问题。 需要restartmanagementage......
  • 切换用户并执行命令
    #########在当前用户下,不切换用户的前提下,用另一个用户执行命令一:在shell脚本里切换用户执行命令,适合复杂命令新建文件:cattest.sh编辑文件内容:#!/bin/bashsu-test<<EOFpwd;exit;EOF在exit前,可以编写多条命令执行。shell脚本编写完成后,直接./test.sh来执行脚本即可二:直......
  • HTML form input shadow-root All In One
    HTMLforminputshadow-rootAllInOne禁用DOM编辑MutationObserverAPIshadow-root无法编辑DOM???forminput#shadow-root(user-agent)<divclass="write_public_box4write_public_samebox"><divclass="f_l"><p>......
  • vmware esxi 用户名(账号)密码明明正确,网页却无法登录管理后台的解决办法大全
    相信使用过VmwareEsxi虚拟系统的网友们可能都偶尔遇到过,明明vmwareesxi用户名密码是正确的,管理网页却无法登录管理的现象。一、账号密码正常但无法登录现象:隔了一段时间没有登录,用服务器名或IP再登录Vmware的网页管理后台,输入正确的管理员用户名及密码,之前登录都非常正常......