はじめに (対象読者・この記事でわかること)

この記事は、CentOS6サーバーを管理しているシステム管理者やインフラエンジニア、またvsftpdをインストールしたがFTP接続でエラーが発生している方を対象としています。FTPサーバーの基本的な設定方法は理解しているが、トラブルシューティングに悩んでいる方にも役立つ内容です。

この記事を読むことで、vsftpdをインストール後によく発生するFTP接続エラーの原因を特定する方法、SELinuxやファイアウォール設定による接続問題の解決策、具体的なエラーメッセージ別の対処法を学べます。さらに、セキュアなFTP接続環境を構築するためのベストプラクティスも理解できます。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。 前提となる知識1 (例: Linuxの基本的なコマンド操作) 前提となる知識2 (例: サーバー設定の基本的な知識) 前提となる知識3 (例: ネットワークの基本的な概念)

CentOS6にvsftpdをインストール後のFTP接続エラーの主な原因

CentOS6にvsftpdをインストールし、基本的な設定を行った後、FTPクライアントから接続を試みると、様々なエラーが発生することがあります。これらのエラーは、原因によって大きく分けて3つのカテゴリに分類できます。

  1. ネットワーク関連の問題: ファイアウォールの設定、ポートの開放漏れ、ネットワーク接続の問題など、サーバーとクライアント間の通信経路に起因する問題です。

  2. vsftpdの設定不備: vsftpdの設定ファイル(/etc/vsftpd/vsftpd.conf)の不適切な設定や、必要なディレクトリの権限設定不足など、vsftpd自体の設定問題です。

  3. システムセキュリティの影響: SELinuxの設定や、TCP Wrappersによるアクセス制限など、CentOS6のセキュリティ機能がFTP接続をブロックしている場合です。

これらの原因を特定し、適切に対処することで、FTP接続エラーを解決し、安定したFTP環境を構築することができます。

FTP接続エラーの具体的な解決策

ここでは、CentOS6でvsftpdを設定後によく発生するFTP接続エラーとその解決策について具体的に解説します。

ステップ1: 基本的な設定確認

まず、vsftpdが正しくインストールされ、サービスが起動していることを確認します。

Bash
# vsftpdのインストール確認 rpm -qa | grep vsftpd # サービスの起動確認 service vsftpd status

もしvsftpdがインストールされていない場合は、以下のコマンドでインストールします。

Bash
yum install vsftpd -y

サービスが停止している場合は、以下のコマンドで起動し、自動起動を設定します。

Bash
# サービスの起動 service vsftpd start # 自動起動の設定 chkconfig vsftpd on

ステップ2: ファイアウォールの設定確認

CentOS6では、デフォルトでiptablesが有効になっている場合があります。FTPはポート21(制御用)と20(データ転送用)を使用するため、これらのポートが開放されている必要があります。

Bash
# ファイアウォールの状態確認 service iptables status # 必要なポートの開放 iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 20 -j ACCEPT iptables -A INPUT -p tcp --dport 40000:50000 -j ACCEPT # パッシブモード用のポート範囲 # 設定の保存 service iptables save

ステップ3: vsftpdの設定確認

vsftpdの設定ファイル(/etc/vsftpd/vsftpd.conf)を確認し、必要な設定が有効になっていることを確認します。

Bash
# 設定ファイルの編集 vi /etc/vsftpd/vsftpd.conf

以下の設定が有効になっていることを確認します。

# 匿名ログインの禁止
anonymous_enable=NO

# ローカルユーザーのログインを許可
local_enable=YES

# ファイルの書き込みを許可
write_enable=YES

# ローカルユーザーをホームディレクトリにチェスト
chroot_local_user=YES

# パッシブモードを有効にする
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000

設定を変更した場合は、vsftpdサービスを再起動します。

Bash
service vsftpd restart

ステップ4: SELinuxの設定確認

SELinuxが有効になっている場合、FTP接続をブロックすることがあります。以下のコマンドでSELinuxの状態を確認します。

Bash
getenforce

"Enforcing"と表示されている場合は、一時的に無効化してFTP接続を試み、問題が解決するか確認します。

Bash
setenforce 0

問題が解決した場合は、SELinuxのFTP関連ポリシーを設定します。

Bash
# FTP用のポリシーを有効にする setsebool -P ftpd_full_access on

ステップ5: ユーザーアカウントと権限の確認

FTP接続に使用するユーザーアカウントが正しく設定されているか確認します。

Bash
# ユーザーアカウントの確認 grep /etc/passwd -e "ftpuser" # ホームディレクトリの確認 ls -ld /home/ftpuser # 権限の確認 ls -la /home/ftpuser

ホームディレクトリの権限が正しく設定されていない場合、以下のように修正します。

Bash
# ホームディレクトリの権限設定 chown ftpuser:ftpuser /home/ftpuser chmod 755 /home/ftpuser

ハマった点やエラー解決

エラー1: "530 Login incorrect" エラー

症状: FTPクライアントから接続しようとすると、ユーザー名とパスワードを入力後に"530 Login incorrect"というエラーが表示される。

原因: 主に以下のいずれか。 - ユーザーアカウントのロック - パスワードの不一致 - vsftpdの設定ファイルでユーザーアクセスが制限されている

解決策: 1. ユーザーアカウントがロックされていないか確認します。

Bash
passwd -S ftpuser

"LK"と表示されている場合は、アカウントがロックされています。以下のコマンドでロックを解除します。

Bash
passwd -u ftpuser
  1. パスワードを再設定します。
Bash
passwd ftpuser
  1. vsftpdの設定ファイルで、ユーザーアカウントがアクセス制限されていないか確認します。
Bash
vi /etc/vsftpd/ftpusers vi /etc/vsftpd/user_list

これらのファイルにftpuserが記述されている場合は、行頭に#を付けてコメントアウトします。

エラー2: "500 OOPS: vsftpd: refusing to run with writable root inside chroot()" エラー

症状: ログイン後、ディレクトリ一覧を取得しようとすると"500 OOPS: vsftpd: refusing to run with writable root inside chroot()"というエラーが表示される。

原因: chroot設定が有効になっている場合、ルートディレクトリに書き込み権限があるとセキュリティ上の問題が発生するため、vsftpdは接続を拒否します。

解決策: 1. vsftpdの設定ファイルで以下の設定を追加します。

Bash
allow_writeable_chroot=YES
  1. vsftpdサービスを再起動します。
Bash
service vsftpd restart

エラー3: "425 Security: Bad IP connecting" エラー

症状: パッシブモードで接続しようとすると"425 Security: Bad IP connecting"というエラーが表示される。

原因: パッシブモードで接続する場合、サーバーがクライアントに返すIPアドレスが実際の接続元IPアドレスと一致しない場合に発生します。

解決策: 1. vsftpdの設定ファイルで、pasv_addressにサーバーの正しいIPアドレスを設定します。

Bash
pasv_address=サーバーのIPアドレス
  1. vsftpdサービスを再起動します。
Bash
service vsftpd restart

エラー4: "227 Entering Passive Mode (xxx,xxx,xxx,xxx,xxx,xxx)" エラー後の接続失敗

症状: パッシブモードで接続しようとすると、PASVコマンドに対してIPアドレスとポート番号が返ってくるが、その後のデータ接続でタイムアウトする。

原因: ファイアウォールでパッシブモードで使用するポート範囲が開放されていない。

解決策: 1. vsftpdの設定ファイルで、パッシブモードで使用するポート範囲を設定します。

Bash
pasv_min_port=40000 pasv_max_port=50000
  1. ファイアウォールでポート範囲を開放します。
Bash
iptables -A INPUT -p tcp --dport 40000:50000 -j ACCEPT service iptables save
  1. vsftpdサービスを再起動します。
Bash
service vsftpd restart

解決策

これまでの手順でほとんどのFTP接続エラーは解決するはずです。それでも問題が解決しない場合は、以下の手順でさらに詳細な調査を行います。

  1. vsftpdのログ確認:
Bash
# vsftpdのログファイルの場所を確認 ls -la /var/log/ # vsftpdのログを確認 tail -f /var/log/xferlog
  1. システムログの確認:
Bash
# システムログを確認 tail -f /var/log/secure | grep vsftpd
  1. ネットワーク接続の確認:
Bash
# ポート21がリッスンしているか確認 netstat -tuln | grep 21 # FTP接続をテスト telnet サーバーIPアドレス 21
  1. vsftpdの再インストール: 設定ファイルをバックアップした後、vsftpdを再インストールします。
Bash
# 設定ファイルのバックアップ cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak # vsftpdのアンインストール yum remove vsftpd -y # vsftpdの再インストール yum install vsftpd -y # 設定ファイルの復元 cp /etc/vsftpd/vsftpd.conf.bak /etc/vsftpd/vsftpd.conf # サービスの起動 service vsftpd start

まとめ

本記事では、CentOS6にvsftpdをインストール後によく発生するFTP接続エラーとその解決策について解説しました。

  • ネットワーク関連の問題: ファイアウォール設定やポート開放の確認が重要
  • vsftpdの設定不備: 設定ファイルの見直しと適切なパラメータ設定が解決の鍵
  • システムセキュリティの影響: SELinuxやTCP Wrappersの設定が原因の場合も

これらの手順を順番に実行することで、ほとんどのFTP接続エラーは解決できます。セキュアなFTP環境を構築し、安定したファイル転送を実現してください。

参考資料