Linux の使い方: FTP サーバー接続時に chroot されず接続できない場合 (CentOS 5.4)
ホームディレクトリーへ接続できない
CentOS 5.4 上で稼働している vsftpd 2.0.5 への接続の際、正しいユーザー名とパスワードを入力しているにもかかわらず、chroot に失敗して接続できない場合がありました。このとき FTP クライアントには次のメッセージが表示されました。
500 OOPS: chroot
500 OOPS: child died
接続がリモート ホストによって閉じられました。これは SELinux というセキュリティーポリシーによってアクセス制御がされているために発生するもののようでした。
SELinux を設定するためには、"setenforce 0" を実行して SELinux を Permissive モードで起動した上で、vsftpd を起動させます。
すると、SELinux の影響で起動できなくなっている場合には正しく動作するようになるので、まずは次のようにして vsftpd がどの SELinux ドメインで実行されているかを確認します。
ps -eZ | grep vsftpd
これで、出力結果の ":" で区切られた 3 番目の内容から、vsftpd が "ftpd_t" ドメイン内で動作していることが分かります。
後はこのドメインに対して適切な許可を追加することになります。
試してみた感じでは、以下の許可設定を追加すれば大丈夫なようでした。
allow ftpd_t file_t:dir { read search };
allow ftpd_t self:capability { dac_read_search dac_override };
allow ftpd_t user_home_t:dir { write search read remove_name create getattr add_name };
allow ftpd_t user_home_t:file { write getattr lock create unlink append };ただ、それぞれのパスの中での関係ファイルの取り扱いについて、SELinux の許可設定を行う必要があるようですので、設定ファイル内のパスに応じても上記内容は変わってくるかもしれません。
なお、SELinux の設定方法については Linux のセキュリティ設定 (SELinux) の方に記してありますので、そちらを参考にしてください。