Linux の使い方: vsftpd でホームディレクトリより上を参照禁止にする (CentOS 5.4)


vsftpd で chroot を設定する

CentOS 5.4 では FTP サーバーとして "vsftpd" が用意されています。

これの chroot 機能を有効化して、ログインしてきたユーザーが、自分のホームディレクトリ以上のディレクトリへアクセスできないようにすることが可能です。

 

設定は /etc/vsftpd の次の設定箇所を変更することで行えます。

chroot_local_user=YES

このように設定して vsftpd を再起動すれば、ログインしてきたアカウントが、自分のホームディレクトリを "/" として認識するようになります。

なお "chroot_list_enable=YES" となっている場合には、/etc/vsftpd/chroot_list に記載されているアカウントには chroot 機能が働きません。これは "chroot_local_user=NO" の場合の動作とは逆の動きとなるので十分注意が必要です。

なお、vsftpd の再起動は、次のように行います。

service vsftpd restart

もしこれで、接続時に chroot できないというエラーが発生してしまう場合には、SELinux によりアクセス制御がかけられている場合があります。chroot を行うためにはおそらく "allow ftpd_t self:capability { dac_read_search dac_override };" の許可も必要になってくるような感じでした。

 

 

また、アカウント毎にホームディレクトリを任意のディレクトリに変更することも可能です。

これにはまず "/etc/vsftpd/vsftpd.conf" 内で、ホームディレクトリの設定ファイルを格納するディレクトリを設定します。

user_config_dir=/etc/vsftpd/userconf

その上で、上記で指定したディレクトリに、ユーザー毎の設定内容が記載されたファイルを用意します。

ファイル名はユーザーアカウント名とします。

 

たとえば、username アカウントのホームディレクトリを "/tmp/username" としたい場合には、上記の設定例では、次の内容を記した "/etc/vsftpd/userconf/username" ファイルを作成します。

local_root=/tmp/username

これで設定は完了です。

とくに vsftpd を再起動しなくても、そのユーザーが次回ログインしたときから、この設定内容が有効になります。