linux指定用户安装,linux – 在特定的用户命名空间配置中运行...

问题:

我试图以这种方式挂载目录作为Docker卷,

在容器内创建的用户可以写入

到该卷的文件中.同时,该文件应该

对容器外的用户lape至少是可读的.

本质上,我需要将用户UID从容器用户命名空间重新映射到主机用户命名空间上的特定UID.

我怎样才能做到这一点?

我更喜欢以下答案:

>不要涉及改变Docker守护进程的运行方式;

>并允许分别为每个容器配置容器用户命名空间;

>不要求重建图像;

>我会接受使用Access Control Lists显示一个很好的解决方案的答案;

建立:

这就是情况的复制方式.

我有我的Linux用户lape,分配给docker组,所以我

可以运行Docker容器而不是root.

lape@localhost ~ $id

uid=1000(lape) gid=1000(lape) groups=1000(lape),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),121(lpadmin),131(sambashare),999(docker)

Dockerfile:

FROM alpine

RUN apk add --update su-exec && rm -rf /var/cache/apk/*

# I create a user inside the image which i want to be mapped to my `lape`

RUN adduser -D -u 800 -g 801 insider

VOLUME /data

COPY ./entrypoint.sh /entrypoint.sh

ENTRYPOINT ["sh", "/entrypoint.sh"]

entrypoint.sh:

#!/bin/sh

chmod 755 /data

chown insider:insider /data

# This will run as `insider`, and will touch a file to the shared volume

# (the name of the file will be current timestamp)

su-exec insider:insider sh -c 'touch /data/$(date +%s)'

# Show permissions of created files

ls -las /data

一旦构建:

docker build -t nstest

我运行容器:

docker run --rm -v $(pwd)/data:/data nstest

输出如下:

total 8

4 drwxr-xr-x 2 insider insider 4096 Aug 26 08:44 .

4 drwxr-xr-x 31 root root 4096 Aug 26 08:44 ..

0 -rw-r--r-- 1 insider insider 0 Aug 26 08:44 1503737079

所以该文件似乎是作为用户内幕创建的.

从我的主机,权限看起来像这样:

lape@localhost ~ $ls -las ./data

total 8

4 drwxr-xr-x 2 800 800 4096 Aug 26 09:44 .

4 drwxrwxr-x 3 lape lape 4096 Aug 26 09:43 ..

0 -rw-r--r-- 1 800 800 0 Aug 26 09:44 1503737079

这表明该文件属于uid = 800(即内部用户甚至不存在于Docker命名空间之外).

我尝试过的事情:

>我尝试将–user参数指定为docker run,但似乎它只能映射主机上的哪个用户映射到docker命名空间内的uid = 0(root),在我的情况下,内部人员不是root.所以它在这种情况下并没有真正起作用.

>我从容器中实现内部(uid = 800)的唯一方法是将来自主机的lape(uid = 1000)视为添加–userns-remap =“default”到dockerd启动脚本,并添加dockremap:200:100000到文件/ etc / subuid和/ etc / subgid,如documentation for –userns-remap所示.巧合的是,这对我有用,但这还不够解决,因为:

>它需要重新配置Docker守护程序的运行方式;

>需要对用户ID进行一些算术运算:’200 = 1000 – 800′,其中1000是我的用户在主机上的UID,800是UID是内部用户;

>如果内部用户需要比我的主机用户更高的UID,那甚至都行不通;

>它只能配置全局映射用户命名空间的方式,而无法为每个容器配置唯一配置;

>这种解决方案有点工作,但实际使用有点太难看了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值