cPanel WHM を運用していると、一番やっかいなのが FTP の接続エラーの問題。API 経由でcPanel のアカウントを追加すると、一定の確率で「cPanel にはログインできるけど、FTP に接続ができない」という問題が発生する。
Filezilla だと「530 Login authentication failed」などとエラーが表示されて、FTP ユーザ名・パスワードが合っていても接続できない。この問題の対処方法について。
FTP パスワードの同期
cPanel WHM にログインして root 権限で
/scripts/ftpupdate
を実行する。
cPanel WHM で設定しているアカウント数が多いとコマンドが終了するまで、2~3分かかる。
/scripts/ftpupdate でFTP のエラーが改善される確率は半々くらい。
アカウントの移行・マイグレートした時などは、このコマンドが必須。
ftpupdate は特に害はないので、FTP のエラーがでたらとりあえず実行。
Apache の設定ファイルのリビルド
cPanel WHM のWeb サーバの設定ファイルは
/usr/local/apache/conf/httpd.conf
にあるので、FTP 接続できないアカウントのユーザ名で該当のディレクティブを確認してみる。
バーチャルドメインの設定が上手くいってない場合には、
/scripts/rebuildhttpdconf
コマンドを実行してみる。
rebuildhttpdconf コマンドでも設定が直らないようであれば、
該当ユーザの以下のディレクトリを削除して再度rebuildhttpdconf を実行する。
/var/cpanel/userdata/ /var/cpanel/users/
FTP サーバの再起動・設定確認
とりあえず、稼働しているProFTPD、Pure-FTPなどのFTP サーバを再起動してみる。
その後、パッシブモードとFirewallの動作を確認。
PureFTP の場合だと、/etc/pure-ftpd.conf に
PassivePortRange 49152 65534
を設定して、以下のコマンドを実行するとPassive が有効になる。
/usr/local/cpanel/scripts/restartsrv_ftpserver rm -f /var/cpanel/conf/pureftpd/main.cache echo "PassivePortRange: 49152 65534" >> /var/cpanel/conf/pureftpd/main
あとは、iptables の設定が必要なので、以下を実行する
iptables -I INPUT -p tcp --dport 49152:65534 -j ACCEPT service iptables save
アカウントの再作成
cPanel のサポートに相談したり、色々と試したけど、現状だと上記の方法で直らなかったら、アカウントを再作成するしかない。
利用するIP アドレスとアカウント名が同じだと、問題が解消されないので、IPとアカウント名を変更して該当のドメインを設定すると正常にFTP でアクセスできる。
ちなみにパスワードを変更する場合には、chpass コマンド この問題は、cPanel WHM がアップデートされたタイミングでも起きたりするので何かと厄介。 大量にアカウントを追加すると 0.5% くらいの確率で発生している気がする。
/scripts/chpass まとめ
cPanel のサポートとやり取りをしたこともあるけど、ある程度の確率で発生するのは仕方がないという感じ。