首页
学习
活动
专区
圈层
工具
发布

隔离 Docker 容器中的用户

笔者在前文《理解 docker 容器中的 uid 和 gid》介绍了 docker 容器中的用户与宿主机上用户的关系,得出的结论是:docker 默认没有隔离宿主机用户和容器中的用户。...在容器中,该用户在自己的 user namespace 中认为自己就是 root,也具有 root 的各种权限,但是对于宿主机上的资源,它只有很有限的访问权限(普通用户)。...此时即便容器中的进程具有 root 权限,但也仅仅是在容器所在的 user namespace 中,一旦到了宿主机中,你顶多也就有 nick 用户的权限而已。...宿主机中的 uid 与容器中 uid 在 docker daemon 启用了用户隔离的功能后,让我们看看宿主机中的 uid 与容器中 uid 的变化。...rootfile 只有 root 用户可以读写,用户 nick 具有 nickfile 的读写权限,uid 165536 具有文件 165536file 的读写权限,任何用户都可以读写 testfile

3.8K10

理解 Docker 容器中的 uid 和 gid

笔者在宿主机中的登录用户是 nick,uid 为 1000: 在宿主机中查看 sleep 进程的信息: $ ps aux | grep sleep sleep 进程的有效用户名称是 root,也就是说...在 Dockerfile 中指定用户身份 我们可以在 Dockerfile 中添加一个用户 appuser,并使用 USER 命令指定以该用户的身份运行程序,Dockerfile 的内容如下: FROM...事实上,系统内核管理的 uid 1000 只有一个,在宿主机中它被认为是用户 nick,而在容器中,它则被认为是用户 appuser。...总结 从本文中的示例我们可以了解到,容器中运行的进程同样具有访问主机资源的权限(docker 默认并没有对用户进行隔离),当然一般情况下容器技术会把容器中进程的可见资源封锁在容器中。...所以比较安全的做法是为容器中的进程指定一个具有合适权限的用户,而不要使用默认的 root 用户。

7.3K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    安全研究 | CentOS 7系统利用suid提权获取Root Shell

    一般情况下,Real UID与EUID相同,但在运行设置了SUID权限的程序时,进程的EUID会被设置为程序文件属主的UID。 Saved UID:在高权限用户降权后,保留的UID。...进程的GID与UID情况类似。 CentOS系统中存在可执行程序/bin/cat,属主属组均为root,任何用户对其都拥有执行权限。...假设系统中存在一个普通用户,名为user1,UID和GID都是1000。该用户对/bin/cat具有执行权限,对/etc/shadow不具有任何权限。...root shell中运行的程序的EUID也都是0,具备超级权限。 为可执行文件添加suid权限的目的是简化操作流程,让普通用户也能做一些高权限才能做的的工作。...在nano的shell中无法显示命令内容,但是可以看到命令的结果。 提权成功,得到了root shell。 24、nice 输入下面的命令进行提权: nice /bin/sh -p ?

    3.6K31

    金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap

    LDAP是非常典型的层级结构,信息模型是建立在属性条目(entries)的基础上。一个属性条目是一些属性的集合,并且具有一个全局唯一的"可区分名称"DN,一个条目可以通过DN来引用。...dn :Distinguished Name 惟一辨别名,类似于文件系统中的绝对路径,每个对象都有一个惟一的名称,类似于mysql的全局唯一索引,如“uid= tom,ou=market,dc=example...可通过程序代码向目录数据库中添加数据,也可使用ldap3库的ldapadd命令来完成添加数据的操作,该命令可将一个LDIF文件中的条目添加到目录:     这里我们来添加一个OU,也就是组织(OrganizationalUnit...可以理解为用户名,sn为姓,userPassword顾名思义就是该用户的密码,dn则是该用户在系统中的唯一标识,注意指定刚刚建立的群组mygroup,返回: liuyue:mytornado liuyue...,完成数据的同步,从而避免OpenLDAP 服务器出现单点故障,实现了高可用架构。

    50500

    Linux 提权总结

    UID: 在高权限用户降权后,保留的其原本UID (不展开说) 所以增加了一个s权限,该程序在实际运行时Effective UID就会变为0,即root的UID sudo 就是能把一个命令视作root来执行...crontab管理,非root用户是无法列出root用户的计划任务的,但我们可以列出/etc的系统任务,系统任务默认是root权限运行的 ls -l /etc/cron* 如果我们有幸有权限能更改其中一个任务指定的脚本...在进行特权操作的时候,如果euid不是root,那么系统就会检查是否具有执行特权操作的对应capabilities ,并以此为凭据决定特权操作是否能被执行。...//赋予读权限 cat shadow | grep root //查看shadow文件的内容 Docker Docker用户组提权 如果我们拿到了一个Docker用户组的用户权限,那么我们可以很轻松地完成提权...首先我们执行如下命令 docker run -v /:/mnt --rm -it crf_web1 chroot /mnt sh 然后在其中的/etc/passwd中写入一个root权限用户(我这里直接无密码了

    7.1K20

    利用docker提权的一次尝试

    不具有 sudo 权限,无法安装软件等,由于是普通用户,所以也用不了 docker,但是为了演示本次提权过程,我在 root 用户用以下命令将 用户 kevin 添加到了 docker 组 创建一个名为...kevin 用户在 kevin 和 docker 组里面 $ id kevin uid=1000(kevin) gid=1000(kevin) groups=1000(kevin),1001(docker...ubuntu 我们知道,在 docker 中我们是拥有 root 权限的,这也是为什么能够用 docker 进行提权的原因,docker 有个选项 -v 能够将 host 的目录映射到 docker 中访问...-it -v /etc:/etc ubuntu 然后在 docker 中利用下面这个命令将 kevin 用户添加到 root 组,因为这里没有 sudo 组,只有 root 组,其实也一样 $ usermod...,说明在 docker 中进行的改动已经生效 uid=1000(kevin) gid=1000(kevin) groups=1000(kevin),0(root),1001(docker) 一般情况下的话

    2.6K20

    docker 非root用户修改mount到容器的文件出现“Operation not permitted

    id都是 65534 ,该UID被称为unmapped user id,定义在/proc/sys/kernel/overflowuid中,是默认的UID(GID)。...的范围,在docker上查看init进程映射到root namespace的uid范围,可以看到根进程映射到231072,最大映射的uid为231072+65536。...65536 解决方法: 一种解决方法就是修改root namespace下/mnt的属性,让其成为容器中root 用户对应的uid,即231072 # chown 231073:231072 test.sh...-rw-r--r--. 1 5000 5000 0 Dec 18 08:49 test.sh 当然也可以在docker run 的参数中使用--privileged,这样docker的不会创建新的...查看容器init进程的信息,如下,其在root namespace中的EUID为231072,因此无法操作root namespace中EUID为0的文件,使用上述解决方法将其配置为相同的值就可以解决问题

    5.4K20

    Podman 保姆级使用教程,太顶了!

    第三个参数(count):用户命名空间内部与外部可映射 uid 数量(可理解为所有容器普通用户的 uid 数量和) 以上两个文件允许运行进程的 uid 映射范围,在 /proc//uid_map...uid 0 都映射为 hualf 用户的 uid 1001(运行容器进程的用户),而容器中普通用户的 uid 映射至宿主机的 subuid 范围中,对于此例 subuid 范围为 165536~231071...,容器中的 uid 1 用户映射为宿主机 uid 165536,因此容器中 admin 用户 uid 1000 映射为宿主机 uid 166535(165536+999)。...通过容器宿主机上每个普通用户的用户命名空间的 subuid 映射范围,可分配众多 uid 在 rootless 容器中运行应用进程。...pod 中创建新的容器 如下所示,创建名为 nginx-docs 的容器并同时创建名为 docker-docs 的 pod,也可创建其他容器添加至 pod 中,使用该容器即可访问 nginx-docs

    22.8K53

    Linux Capabilities 与容器的水乳交融

    其中这就是我在?第一篇文章提到的 ping 文件具有 capabilities 感知能力。...我只知道 capsh --print 输出中的 Securebits 控制着从普通用户切换到 UID 0 或者从 UID 0 切换到普通用户时如何继承 capabilities。...编译完成后,需要给二进制文件添加该 capabilities,如果它自己没有这个 capabilities,是无法将其添加到新进程中的: $ sudo setcap cap_net_bind_service...另外需要注意的是,容器中的 Ambient 集合是空的,目前在 Docker 和 Kubernetes 中还无法配置 Ambient 集合,过在底层的 runc 运行时中是可以配置的。...Docker 中还有一个选项可以防止容器中的用户获得新的 capabilities,它可以有效阻止攻击者提升权限来避免受到攻击,同时也阻止了再容器中执行 set_ambient 程序。

    2.2K52

    待补充说明

    DIND(Docker-in-Docker)是让你可以在 Docker 容器里面运行 Docker 的一种方式,在 Docker 6.0 中实现的方式是,为容器添加特权模式。...我们使用 UID 而不是用户的名字,因为 Kubernetes 无法在启动容器前将镜像的默认用户名映射到 UID 上,并且在部署时指定 runAsNotRoot: true,会返回有关错误。...通常,这些设置与包含具有相同所有权 ID 的文件的卷挂载结合在一起。...如果我们配置一个不同的用户,它将无法启动,因为该用户不存在于镜像的 /etc/passwd 文件中。即使它以某种方式存在,它也很可能在读写 jenkins:jenkins 拥有的文件时出现问题。...请注意,当在 securityContext 中列出要放弃或添加的 Capabilities 时,你要删除内核在命名 Capabilities 时使用的 CAP_ 前缀。

    93620

    搭建harbor仓库

    之后,此设置将被忽略,并且应在UI中设置管理员的密码。请注意,默认用户名/密码为admin / Harbor12345。 auth_mode:使用的身份验证类型。...重要提示:从现有的Harbor 实例升级时,必须确保auth_modeharbor.cfg在启动新版本的Harbor之前是一样的。否则,升级后用户可能无法登录。...ldap_searchdn:具有搜索LDAP / AD服务器权限的用户的DN(例如uid=admin,ou=people,dc=mydomain,dc=com)。...LDAP_FILTER:用于查找用户,例如,搜索过滤器(objectClass=person)。 ldap_uid:用于在LDAP搜索期间匹配用户的属性,它可以是uid,cn,电子邮件或其他属性。...:) 使用 首先在harbor上新建一个项目text,之后在本地的docker配置文件下面修改 ➜ vim /etc/docker/daemon.json { "registry-mirrors"

    1.7K20

    Docker 实践中的一些经验总结

    Docker 实践中的一些经验总结 最近读完了 Jeff Nickoloff 的《Docker 实战》,不知道是中文翻译还是书原本就这样,感觉很一般,但是也有不少干货,读完感觉还可以,把其中几条我觉得还可以的干货分享出来...9.Docker 还不支持 USR 命名空间,容器上的用户和组 ID 与主机上具有相同 ID 的用户和组是等效的。...如果容器内部没有相关的用户和组 ID,那么容器将以 -u 选项指定的 UID 和 GID 读写文件。如果 -u 选项指定的用户在容器内不存在,那么容器将不能正常运行。...如果 -u 选项指定的用户在宿主机上不存在,那么容器将以指定的 uid 身份运行。...10.在 Dockerfile 指定的 USER 如果在新构建容器的 passwd 文件中不存在,那么该镜像是无法构建成功的。

    34320

    转转平台IM系统架构设计与实践(二):详细设计与实现

    5、IM消息收发5.1场景说明数据流中以用户A和用户B的对话为例,其中用户A的uid为1,用户B的uid为2。...下图为用户聊天场景图:下图为用户聊天IM系统的数据流转图:5.2数据结构登陆信息存储在Redis中,联系人和消息数据放在TiDB中。...业务逻辑上,考量支持已读、删除联系人;索引性能上,考虑用户查询联系人时,sql条件为where uid_a=?,联系人表索引为uid_a,如果存单条数据,无法有效利用索引。...该表索引为uid, small_uid>联合索引,无论是用户A查询与用户B的聊天信息,还是用户B查询用户A的聊天信息,其sql统统为where big_uid =max(uid_a,uid_b...7、IM高可用、高并发1)扩缩容:依托公司rpc服务注册发现能力,借助docker快速扩容,核心处理逻辑logic服务实现秒级扩容。

    26410

    理解 Docker 容器中 UID 和 GID 的工作原理

    例如,当一个进程尝试写入文件时,内核会检查创建该进程的uid和gid,以确定它是否具有足够的特权来修改文件。这里不使用用户名,而是使用uid。 在服务器上运行 Docker 容器时,仍然只有一个内核。...因此,在不同的容器中不能使用相同的 uid 分配给不同的用户。...因此,你可能会看到不同的用户名,但是即使在不同的容器中,对于相同的 uid/gid,你也不能拥有不同的权限。...由于容器外显示的用户名是“root”,我可以确定容器内的进程是以具有uid = 0的用户启动的。...总结 现在我们已经探讨了这一点,可以理解以有限权限运行容器的方式都利用了主机的用户系统: 如果容器内部的进程正在执行的已知 uid,那么简单地限制对主机系统的访问,使容器中的 uid 仅具有有限访问权限就可以了

    82910

    在Kubernetes中配置Container Capabilities

    在 Linux 2.2 版本之前,当内核对进程进行权限验证的时候,Linux 将进程划分为两类:特权进程(UID=0,也就是超级用户)和非特权进程(UID!...之外的所有 capabilities,因为在容器中我们经常会以 root 用户来运行,使用 capabilities 现在后,容器中的使用的 root 用户权限就比我们平时在宿主机上使用的 root...下面表格中列出的 Capabilities 是 Docker 默认给容器添加的,我们可以通过 --cap-drop 去除其中一个或者多个: ?...下面表格中列出的 Capabilities 是 Docker 默认删除的,我们可以通过 --cap-add添加其中一个或者多个: ?...Kubernetes 配置 Capabilities 上面我介绍了在 Docker 容器下如何来配置 Capabilities,在 Kubernetes 中也可以很方便的来定义,我们只需要添加到 Pod

    4.5K30

    理解OpenShfit(5):从 Docker Volume 到 OpenShift Persistent Volume

    使用一Docker 镜像启动一个容器实例后,Docker 会在镜像层之上添加一个可读写的容器层(Container layer)。容器中所有新增或修改的数据都保存在该容器层之中。...Docker 卷具有自己独立的生命周期,可以使用 Docker volume 命令独立地被创建和管理。在容器实例被删除后,卷依然存在,因此卷中的数据会被保留,从而实现数据持久化。...通常情况下,NFS 服务器端匹配到的用户不会是 nfsnobdy,根据文件夹上的权限设置,此时Pod 中是无法写入文件的。这就是 2.2.1 中说描述的场景的结果。...(2)修改 Pod 的 uid 根据前面对 NFS 权限管理的分析,可以将 Pod 中的 uid 修改为 nfsnobody 对应的 uid,这样Pod 就会具有 NFS 共享目录的写入权限。...] 之内,因此无法将 uid 设置为 65534.

    1.7K10
    领券