Ftp
Vsftpd 在 LXC 容器中的被動模式下不起作用
我是 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,然後一切正常。