使用单个Dockerfile添加vsftpd用户目录并设置密码

14 浏览
0 Comments

使用单个Dockerfile添加vsftpd用户目录并设置密码

我有一个Docker容器,里面运行了一些进程(uwsgi和celery)。我想为这些进程创建一个uwsgi用户和一个celery用户,并为它们创建一个工作组,以便分配权限。

我尝试将RUN adduser uwsgiRUN adduser celery添加到我的Dockerfile中,但这会导致问题,因为这些命令需要输入(我在下面发布了构建时的响应)。

为了为容器中运行的worker设置权限,添加用户到Docker容器的最佳方法是什么?

我的Docker镜像是从官方的Ubuntu14.04基础镜像构建的。

当运行adduser命令时,以下是Dockerfile的输出:

正在添加用户'uwsgi'...
正在添加新组'uwsgi'(1000)...
正在添加新用户'uwsgi'(1000),与组'uwsgi'...
正在创建家目录'/home/uwsgi'...
正在从'/etc/skel'复制文件...
[91m输入新的UNIX密码:重新输入新的UNIX密码:[0m
[91mpasswd:身份验证令牌操作错误
passwd:密码未更改
[0m
[91m在/usr/sbin/adduser第563行,chop中未初始化的值$answer的使用。
[0m
[91m在/usr/sbin/adduser第564行中,未初始化的值$answer的使用。
[0m
再试一次?[y/N]
为uwsgi更改用户信息
输入新值,或按ENTER使用默认值
全名[]: 
房间号[]:     工作电话[]:  家庭电话[]:  其他[]: 
[91m在/usr/sbin/adduser第589行,chop中未初始化的值$answer的使用。
[0m
[91m在/usr/sbin/adduser第590行中,未初始化的值$answer的使用。
[0m
信息正确吗?[Y/n]
---> 258f2f2f13df
正在删除中间容器59948863162a
步骤5:RUN adduser celery
---> 正在运行中be06f1e20f64
正在添加用户'celery'...
正在添加新组'celery'(1001)...
正在添加新用户'celery'(1001),与组'celery'...
正在创建家目录'/home/celery'...
正在从'/etc/skel'复制文件...
[91m输入新的UNIX密码:重新输入新的UNIX密码:[0m
[91mpasswd:身份验证令牌操作错误
passwd:密码未更改
[0m
[91m在/usr/sbin/adduser第563行,chop中未初始化的值$answer的使用。
[0m
[91m在/usr/sbin/adduser第564行中,未初始化的值$answer的使用。
[0m
再试一次?[y/N]
为celery更改用户信息
输入新值,或按ENTER使用默认值
全名[]:   房间号[]:     工作电话[]: 
家庭电话[]:  其他[]: 
[91m在/usr/sbin/adduser第589行,chop中未初始化的值$answer的使用。
[0m
[91m在/usr/sbin/adduser第590行中,未初始化的值$answer的使用。
[0m
信息正确吗?[Y/n]

0
0 Comments

问题的原因是在Dockerfile中使用adduser命令时,无法设置用户密码和附加信息。解决方法是使用--disabled-password参数来禁用密码,并在后续步骤中设置密码。

为了避免adduser命令的交互问题,可以使用以下参数调用:

RUN adduser --disabled-password --gecos '' newuser

其中,--gecos参数用于设置附加信息,这里设置为空。

在使用busybox系统(如Alpine)时,可以使用以下命令:

RUN adduser -D -g '' newuser

详见busybox adduser文档。

感谢!看起来一般更倾向于使用adduser高级解决方案,而不是使用useradd等低级函数。

adduser: unrecognized option: gecos 这在Alpine上似乎不起作用。

--disabled-password参数的作用是禁用密码,那么如何在Dockerfile中同时设置用户的密码呢?

0
0 Comments

问题的出现原因是无法通过单个Dockerfile来添加vsftpd用户目录并设置密码。解决方法是使用以下命令在Dockerfile中添加用户目录和设置密码:

RUN useradd -rm -d /home/ubuntu -s /bin/bash -g root -G sudo -u 1001 ubuntu

USER ubuntu

WORKDIR /home/ubuntu

其中,`useradd`命令的选项包括:

- `-r`或`--system`:创建系统账户。

- `-m`或`--create-home`:创建用户的家目录。

- `-d`或`--home-dir HOME_DIR`:指定新账户的家目录。

- `-s`或`--shell SHELL`:指定新账户的登录shell。

- `-g`或`--gid GROUP`:指定主要组的名称或ID。

- `-G`或`--groups GROUPS`:指定附加组的列表。

- `-u`或`--uid UID`:指定用户ID。

- `-p`或`--password PASSWORD`:指定新账户的加密密码。

如果需要设置用户密码,可以在`useradd`命令中添加`-p "$(openssl passwd -1 ubuntu)"`。另一种方法是在Dockerfile中添加以下命令:

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

RUN echo 'ubuntu:ubuntu' | chpasswd

第一个`shell`指令是为了确保在具有管道的`RUN`命令之前启用`-o pipefail`选项。这样可以避免一些潜在的问题。

关于为什么用户会在root组中的问题,这取决于具体的使用情况。root组并不表示用户具有root访问权限,只是表示用户对某些文件(如日志)具有更多的读取权限,这在某些项目中是有用的。

至于生成的文件仍然属于root所有的问题,可能是由于在使用bash命令时以root权限执行。可以检查一下是否在执行bash命令时要求输入root密码。另外,也可以尝试使用`USER user`命令将用户切换为非root用户。

关于以交互方式设置密码的问题,可以尝试使用以下命令:

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

RUN echo 'ubuntu:ubuntu' | chpasswd

如果这种方式不起作用,可能是出现了错误。可以检查一下是否有其他步骤或命令导致了问题。

为了安全起见,推荐使用`-p "$(openssl passwd -6 YOUR_PASS_HERE)"`来设置密码。`-1`选项使用基于MD5的哈希,这是不安全的(在数据库泄漏的情况下)。

以上是解决"Add vsftpd user directory using single Dockerfile and set password"问题的方法和原因。

0
0 Comments

问题的出现原因:需要在Dockerfile中添加vsftpd用户目录并设置密码,但是使用交互式命令adduser时遇到问题。

解决方法:可以使用非交互式命令useradd来创建用户,并通过设置权限和执行程序来确保用户可以正常运行。在Dockerfile中使用以下命令:

RUN useradd -ms /bin/bash newuser
USER newuser
WORKDIR /home/newuser

然后可以使用chpasswd命令来设置密码:

RUN echo 'newuser:newpassword' | chpasswd

如果需要给用户sudo权限,可以使用以下命令:

RUN adduser  sudo

需要注意的是,在alpine Linux中,需要安装shadow包才能使用useradd命令:

RUN apk add shadow

而在Windows系统中,可以使用adduser命令来添加用户。

如果遇到权限问题,可以尝试使用sudo命令,但可能会遇到sudo: no tty present and no askpass program specified的错误。

如果需要将用户添加到特定的组中,可以使用以下命令:

RUN usermod -aG  newuser

通过使用非交互式命令useradd和chpasswd,以及设置权限和执行程序,可以在Dockerfile中添加vsftpd用户目录并设置密码。如果需要sudo权限或将用户添加到特定组中,可以使用相应的命令。在alpine Linux中,可能需要安装shadow包才能使用useradd命令。在Windows系统中,可以使用adduser命令来添加用户。

0