ぱそくま ろご
linux > vsftpd > vsftpdサーバーに接続できない場合の対処

vsftpdサーバーに接続できない場合

vsftpdサーバーに接続できない理由

ftpクライアントからvsftpdサーバーに接続できない場合は以下のような理由が考えられます。

  • ユーザーが許可されていない場合
  • vsftpd.confで指定しているファイルが存在しない場合
  • hosts.allowで許可されていない場合
  • iptablesで許可されてない場合
  • 「500 OOPS: cannot change directory:..」と表示される(SELinuxで許可されていない)場合

これらの対象方法は以下の通りです。



ユーザーが許可されていない場合

ローカルユーザーがログインできない場合などは設定ファイルに問題があります。 vsftpd.confやそれに関する設定ファイルを確認してください。 設定ファイルはvsftpdとはの「vsftpd.confのサンプル」が参考になると思います。 なお、これでもログインできない場合は、大抵、userlist_fileディレクティブに設定しているパス等のスペルミスが原因です。

vsftpd.confの設定失敗例

[root ~]more /etc/vsftpd/vsftpd.conf
.
uesrlist_file=/etc/vsftpd/user_list <-そもそも「userlist_file」のスペルミス。
.
[root ~]ls /etc/vsftpd/user_list
ls: cannot access /etc/vsftpd/user_list: そのようなファイルやディレクトリはありません
*「userlist_file」で指定したファイルもなかったりする。

vsftpd.confで指定しているファイルが存在しない場合

「chroot_list_enable=YESはとりあえず設定して、chroot_listファイルは後で作ろう。」などと思っていると、残念ながらこの問題に陥ります。 「echo > chroot_list」で空のファイルでも作りましょう。

空のchroot_listを作る例

  • [root ~]cd /etc/vsftpd/
  • [root ~]echo > chroot_list

hosts.allowで許可されていない場合

hosts.denyに「ALL:ALL」や「vsftpd:ALL」が設定されているにもかかわらず、 hosts.allowにvsftpd:[アドレス]のエントリーがない場合に起きます。hosts.allowにエントリーを行いましょう。

hosts.allowにvsftpdの許可を追加する

  • [root ~]more /etc/hosts.deny
  • #
  • # hosts.deny This file....
  • .
  • ALL:ALL <- 全て拒否が設定
  • [root ~]more /etc/hosts.allow
  • #
  • # hosts.allow This file ..
  • .
  • vsftpd:192.168.11. .xxxx.com <- 許可エントリーが必要

iptablesで許可されていない場合

iptablesでftpのポートをブロックしていると接続ができません。 まずはftpのポートが許可されているか、「iptables -L」でチェックします。

  • [root ~] iptables -L
  • Chain INPUT (policy DROP)
  • target prot opt source
  • ACCEPT all -- anywhere anywhere
  • ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:http
  • Chain FORWAD (policy DROP)
  • .
  • .

上記のように、ftpに該当するようなルールが無い場合(上記はhttpのみ許可[ACCEPT]。それ以外は無視[DROP])は、 ftpに関するルールを追加する必要があります。

iptablesにftpの許可を追加する

  • [root ~]iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport ftp -j ACCEPT
  • [root ~]iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

「500 OOPS: cannot change directory:...」と表示される場合

ftpクライアントから接続できても、いざ接続すると「ls: ログインに失敗しました: 500 OOPS: cannot change directory:/home/xxxxx」とエラーが表示される場合があります。 これはSELinuxで許可されていない場合に表示されます。 手っ取り早く回避するにはSELinuxの設定を「Permissive」にします。

SELinuxでPermissiveに設定する例

  • [root ~] getenforce
  • Enforcing
  • [root ~] setenforce Permissive

厳密に設定したい方はSELinuxのftpに関する設定を1つ1つ行う必要があります。デフォルトでは以下のようにftpはまったく許可されていません。

  • [root ~] getsebool -a | grep ftp
  • allow_ftpd_anon_write --> off
  • allow_ftpd_full_access --> off
  • allow_ftpd_use_cifs --> off
  • allow_ftpd_use_nfs --> off
  • ftp_home_dir --> off
  • ftpd_connect_db --> off
  • httpd_enable_ftp_server --> off
  • sftpd_anon_write --> off
  • sftpd_enable_homedirs --> off
  • sftpd_full_access --> off
  • sftpd_write_ssh_home --> off
  • tftp_anon_write --> off

既定ユーザーのみ解放したい場合は以下の様にします。

  • [root ~]setsebool ftp_home_dir on
  • [root ~]setsebool allow_ftpd_full_access on