Ftp

Vsftpd 在 LXC 容器中的被動模式下不起作用

  • July 16, 2016

我是 Docker 的初學者,我在 Debian 中有一個 vsftpd,我在 vsftpd 中配置了被動模式:

pasv_enable=YES
pasv_min_port=65000
pasv_max_port=65000
pasv_address=192.168.1.31

我用wireshark顯示伺服器響應是被動埠65000,但被動IP是0.0.0.0,我不明白為什麼我配置了被動IP。當我執行 docker 時,我綁定了埠 21 和 65000(並且在 Dockerfile 中我公開了 21 和 65000)並且在埠 21 和主動模式下的連接很好,但我還需要使用被動模式。在wireshark中我展示了它:

227 Entering Passive Mode (0,0,0,0,253,232).
Passive IP address: 0.0.0.0 (0.0.0.0)
Passive port: 65000
Passive IP NAT: True

Dockerfile:

FROM debian:jessie

RUN apt-get update
RUN apt-get dist-upgrade -y
RUN apt-get install -y -q --no-install-recommends vsftpd
RUN apt-get clean

RUN echo "local_enable=YES" >> /etc/vsftpd.conf
RUN echo "chroot_local_user=YES" >> /etc/vsftpd.conf
RUN echo "allow_writeable_chroot=YES" >> /etc/vsftpd.conf
RUN echo "write_enable=YES" >> /etc/vsftpd.conf
RUN echo "pasv_enable=YES" >> /etc/vsftpd.conf
RUN echo "pasv_min_port=65000" >> /etc/vsftpd.conf
RUN echo "pasv_max_port=65000" >> /etc/vsftpd.conf
RUN echo "pasv_address=192.168.1.31" >> /etc/vsftpd.conf

RUN mkdir -p /var/run/vsftpd/empty

EXPOSE 21/tcp
EXPOSE 65000/tcp

CMD vsftpd

我使用命令建構和執行:

docker build -t vsftpd .
docker run -d -p 21:21 -p 65000:65000 -v /etc/passwd:/etc/passwd:ro -v /etc/shadow:/etc/shadow:ro -v /etc/group:/etc/group:ro -v /home:/home vsftpd

我還嘗試使用更多參數執行 docker:

docker run -d -p 192.168.1.31:21:21 -p 192.168.1.31:65000:65000 -v /etc/passwd:/etc/passwd:ro -v /etc/shadow:/etc/shadow:ro -v /etc/group:/etc/group:ro -v /home:/home vsftpd

在主動模式下一切正常,只有被動模式失敗,我不明白為什麼伺服器對連接到 0.0.0.0 且配置了 pasv_address 的客戶端說。我將 passwd、shadow 和 group 掛載到容器中,以只讀方式用於 vsftpd 中的本地使用者和 chroot 本地使用者的 home,它發現在活動模式下很好。我正在以橋接模式在虛擬機中進行所有嘗試,並且在虛擬機中我有一個帶有 docker.io 1.2.0 的 Ubuntu 伺服器。

我現在可以修好了。預設情況下,vsftpd 正在使用預設配置等偵聽 IPv4 和 IPv6;我評論 IPv6 config 並且只配置 IPv4,然後一切正常。

引用自:https://serverfault.com/questions/660455