CentOS 7 に vsftpd を入れたが動きません!


いろいろググってみましたが、デフォルトの設定ではまず動かないようです。こんなメッセージが出て起動できません。

Job for vsftpd.service failed. See 'systemctl status sftpd.service' and 'journalctl -xn' for details.

vsftpd.conf を下のように設定したら無事起動できました。

listen=NO
listen_ipv6=YES

これって変な設定です。今の環境では、ipv6 は使ってないし、listen=NO というのも変です。

さらにログインしようとすると 530 Permission denied. と出てしまいました。

これは、

userlist_enable=YES
userlist_deny=NO

となっていたせいで、/etc/vsftpd/user_list に使用するユーザを追加していなかったためです。

\# vsftpd userlist
\# If userlist_deny=NO, only allow users in this file
\# If userlist_deny=YES (default), never allow users in this file, and
中略
games
nobody
user \# <== 追加 (実際のユーザidに変えること)

起動方法ですが

sudo systemctl start vsftpd.service

とします。

もし、localhost 以外からアクセスできなければファイアウォールではじかれているかもしれません。下のようにしてファイアウォールをOFFにして試してみます。

sudo systemctl stop firewalld

さらに、デフォルトでブート時に自動起動されないので次のコマンドで自動的に起動するように設定します。

sudo systemctl enable vsftpd.service

自動的に起動されているかは、ブート後に下のようにしてポート21 が LISTEN になっているかで確認できます。

[user@localhost ~]$ ss -nat
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 50 *:3306 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
ESTAB 0 0 192.168.1.70:22 192.168.1.83:49882
LISTEN 0 128 :::80 :::*
LISTEN 0 32 :::21 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25
:::*

動作確認がOKだったら、下のようにしてファイアウォールで FTP を許可します。

sudo firewall-cmd --add-service=http --zone=public

これでOKかと思ったらさらに問題が発生しました。

550 Failed to open file.
553 Could not create file.

FFFTP で上のようなエラーが出てしまい GET も PUT もできません。これは、SELinux でftpd_full_access が OFF になっているためだそうです。次のようにして SELinux 自体を無効化すれば解決します。

sudo setenforce Permissive

ftpd_full_access を ON にする方法もありますが、実運用のサーバでなければこれで十分です。

同じ記事
この記事は上の記事のパクリではありません(作者が同じ)。