如何在 ubuntu 容器中以非 root 用户身份运行 vsftpd?

问题描述

我正在尝试重建 bogem/ftp 以使容器以非 root 身份运行。 我创建了自己的 repo,您可以在其中找到所有文件

我在本地构建它:

docker build -t bram_ftp:v0.4 .
Sending build context to Docker daemon  8.704kB
Step 1/17 : FROM ubuntu:latest
 ---> f643c72bc252
Step 2/17 : RUN apt-get update && apt-get install -y --no-install-recommends vsftpd db-util sudo && apt-get clean
 ---> Using cache
 ---> 8ab5e8a0d3d7
Step 3/17 : RUN useradd -m ftpuser
 ---> Using cache
 ---> 179c738d8a8b
Step 4/17 : ENV FTP_USER admin
 ---> Using cache
 ---> 3f55c42bccda
Step 5/17 : ENV FTP_PASS admin
 ---> Using cache
 ---> a44874a4d54e
Step 6/17 : ENV PASV_ADDRESS=127.0.0.1
 ---> Using cache
 ---> 824c15835a7f
Step 7/17 : copY vsftpd_virtual /etc/pam.d/
 ---> Using cache
 ---> 5045135bb1ca
Step 8/17 : copY run-vsftpd.sh /usr/sbin/
 ---> Using cache
 ---> 30bd2be7d610
Step 9/17 : copY config-vsftpd.sh /usr/sbin/
 ---> Using cache
 ---> 8347833c2f63
Step 10/17 : RUN /usr/sbin/config-vsftpd.sh
 ---> Using cache
 ---> 58237fe9a8be
Step 11/17 : copY vsftpd.conf /etc/vsftpd/
 ---> Using cache
 ---> 92c9cbc75356
Step 12/17 : RUN chown -R ftpuser:ftpuser /etc/vsftpd/ && chown ftpuser:ftpuser /usr/sbin/*-vsftpd.sh && chmod +x /usr/sbin/*-vsftpd.sh && mkdir -p /var/run/vsftpd/empty
 ---> Running in 91f03e3198df
Removing intermediate container 91f03e3198df
 ---> 94cfaf7209a9
Step 13/17 : VOLUME /home/ftpuser/vsftpd
 ---> Running in cfdf44372c17
Removing intermediate container cfdf44372c17
 ---> 5d7416bd2844
Step 14/17 : VOLUME /var/log/vsftpd
 ---> Running in c2b5121adb49
Removing intermediate container c2b5121adb49
 ---> 620cc085a235
Step 15/17 : EXPOSE 20 21
 ---> Running in f12d22af36cc
Removing intermediate container f12d22af36cc
 ---> 1dd7698c18b3
Step 16/17 : USER ftpuser
 ---> Running in d7a2cdcc3aa1
Removing intermediate container d7a2cdcc3aa1
 ---> 3a88a4a89ac8
Step 17/17 : CMD ["/usr/sbin/run-vsftpd.sh"]
 ---> Running in 86f5dec18f71
Removing intermediate container 86f5dec18f71
 ---> 50fdae730864
Successfully built 50fdae730864
Successfully tagged bram_ftp:v0.4

当我按照自述文件中的描述在本地运行它时,容器只会不断重新启动,而我看不到任何日志/错误。 当我以交互方式运行容器(所以 -it 而不是 -d)而不是作为守护进程时,我收到此错误

docker run -it -v /tmp/vsftpd:/home/ftpuser/vsftpd \
                                -p 20:20 -p 21:21 -p 47400-47470:47400-47470 \
                                -e FTP_USER=admin \
                                -e FTP_PASS=admin \
                                -e PASV_ADDRESS=127.0.0.1 \
                                --name ftp \
                                --restart=always \bram_ftp:v0.4

500 OOPS: config file not owned by correct user,or not a file

但是当我检查容器正在运行的用户以及 vsftpd.conf 权限时,一切似乎都很好:

docker run bram_ftp:v0.4 id                        
uid=1000(ftpuser) gid=1000(ftpuser) groups=1000(ftpuser)

docker run bram_ftp:v0.4 ls -la /etc/vsftpd 
total 28
drwxr-xr-x 1 ftpuser ftpuser  4096 Dec 31 13:12 .
drwxr-xr-x 1 root    root     4096 Dec 31 14:28 ..
-rw-r--r-- 1 ftpuser ftpuser 12288 Dec 31 13:12 virtual_users.db
-rw-r--r-- 1 ftpuser ftpuser    12 Dec 31 13:12 virtual_users.txt
-rw-r--r-- 1 ftpuser ftpuser  1734 Dec 31 13:09 vsftpd.conf

当我像下面这样运行容器时,我可以毫无问题地进入容器:

docker run -it bram_ftp:v0.4 bash                   
ftpuser@5358b2368c55:/$ 

然后我手动启动 vsftpd:

docker run -it bram_ftp:v0.4 bash                   
ftpuser@5358b2368c55:/$ vsftpd /etc/vsftpd/vsftpd.conf

如果我检查容器中正在运行的进程,我会看到:

docker exec 5358b2368c55 ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
ftpuser      1     0  0 14:31 pts/0    00:00:00 bash
ftpuser     10     1  0 14:32 pts/0    00:00:00 vsftpd /etc/vsftpd/vsftpd.conf
ftpuser     11     0  0 14:33 ?        00:00:00 ps -ef

我对 vsftpd 没有任何经验,所以我不知道我在这里做错了什么。希望有人可以帮助我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)