OpenSUSE Leap 42: FTPサーバのvsftpdをインストールする

FTPサーバのvsftpdをインストールする手順を記載します。

1 vsftpdのインストール

vsftpdパッケージをインストールします。

> sudo zypper -n in vsftpd

ローカルユーザによるアップロードを可能にします。匿名ユーザによる読み込みを可能にします。匿名ユーザによるアップロードを許可しません。

> cat <<EOF | sudo tee /etc/vsftpd.conf
listen=YES
local_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
pam_service_name=vsftpd

# Enable upload by local user.
write_enable=YES

# Enable read by anonymous user (without username and password).
anonymous_enable=YES
anon_root=/srv/ftp
no_anon_password=YES
EOF

anon_chrootのディレクトリにファイルを置きます。

> echo "anon" | sudo tee /srv/ftp/anon.txt

ファイアウォールでFTP用のポートを開放します。NETWORKの値をお使いのネットワークアドレスに変更してください(0/0だとすべてのIPアドレスからの接続を許可します)。

> for t in FW_CONFIGURATIONS_EXT FW_CONFIGURATIONS_DMZ FW_CONFIGURATIONS_INT; do
  sudo sed -e "s/^${t}=\"\(.*\)\"/${t}=\"\1 vsftpd\"/g" \
       -i /etc/sysconfig/SuSEfirewall2
done
> NETWORK=192.168.11.0/24
> for t in FW_SERVICES_ACCEPT_RELATED_EXT FW_SERVICES_ACCEPT_RELATED_DMZ \
                                        FW_SERVICES_ACCEPT_RELATED_INT; do
  sudo sed -e "s;^${t}=\"\(.*\)\";${t}=\"\1 ${NETWORK},tcp\";g" \
       -i /etc/sysconfig/SuSEfirewall2
done
> sudo sed -e 's/^FW_LOAD_MODULES="\(.*\)"/FW_LOAD_MODULES="\1 ip_conntrack_ftp"/g' \
       -i /etc/sysconfig/SuSEfirewall2
> sudo systemctl restart SuSEfirewall2

vsftpdを有効にして再起動します。

> sudo systemctl enable vsftpd
> sudo systemctl restart vsftpd

2 vsftpdへの接続

lftpでvsftpdへ接続します。

> sudo zypper -n in lftp

ユーザ名を指定して接続します。パスワードは-u <username>,<password>で指定できます。接続するとホームディレクトリが表示されます。ユーザの権限の範囲内ですべてのディレクトリへアクセスできます。

> lftp -u hiroom2 ftp-server.hiroom2.com
Password:
lftp hiroom2@ftp-server.hiroom2.com:~> pwd
ftp://hiroom2@ftp-server.hiroom2.com/%2Fhome/hiroom2
lftp hiroom2@ftp-server.hiroom2.com:~> ls /
drwxr-xr-x    2 0        0            4096 Jul 29 07:12 bin
drwxr-xr-x    4 0        0            1024 Aug 05 12:16 boot
drwxrwxr-x    2 0        0            4096 Oct 09  2016 cdrom
-rw-------    1 0        0        17711104 Jan 21  2017 core
drwxr-xr-x   21 0        0            4020 Aug 06 01:22 dev
drwxr-xr-x  133 0        0           12288 Aug 06 01:22 etc
drwxr-xr-x    4 0        0            4096 Aug 06 01:22 home
<snip>

ユーザ名を指定しない場合、匿名ユーザで接続します。anon_rootで指定したディレクトリが表示され、それより上のディレクトリへは移動できません(chrootした状態となります)。

> lftp ftp-server.hiroom2.com
lftp ftp-server.hiroom2.com:~> pwd
ftp://ftp-server.hiroom2.com
lftp ftp-server.hiroom2.com:~> ls /
-rw-r--r--    1 0        0               5 Aug 06 01:22 anon.txt