vsftpd でユーザーのルートディレクトリを変更する
前提
/etc/vsftpd.conf の設定
chroot に関する設定。
chroot_local_user の設定を「YES」にするか「NO」にするかは、chroot の対象になるユーザーが多いか少ないかによって決める。
chroot 対象外のユーザーが少ない場合は「chroot_local_user=YES」にして、除外対象のユーザーを「/etc/vsftpd/chroot_list」に記述する。逆に除外対象が多い場合は「chroot_local_user=NO」にして、chroot 対象にしたいユーザーを「/etc/vsftpd/chroot_list」に記述する。
# ローカルに登録されているユーザーを chroot 対象にする chroot_local_user=YES # chroot_list に記載されたユーザーは、 # chroot_local_userが「YES」の場合、chroot 対象「外」になる # chroot_local_userが「NO」の場合、chroot 対象「外」になる chroot_list_enable=YES # それぞれの設定で例外にするユーザー名を記入する chroot_list_file=/etc/vsftpd/chroot_list
/etc/vsftpd/chroot_list に例外にするユーザー名を記述する。
% sudo vi /etc/vsftpd/chroot_list littlebuddha hoge foo moo yourname
個別のユーザー毎に設定をする場合
別のユーザーのホームディレクトリ内にルートディレクトリを設定するユーザーは例外となるので、個別の vsftpd 設定ファイルを用意する。
vsftpd 全体の設定に適用される「/etc/vsftpd.conf」で、ユーザー毎に設定を個別に設定する。
まずは、ユーザー専用の設定ファイルの場所を「/etc/vsftpd.conf」に「user_config_dir」の設定を追記する。
% sudo vi /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/vsftpd_user_conf
次にユーザー毎の設定ファイルを保存するディレクトリを作成する。
% sudo mkdir /etc/vsftpd/vsftpd_user_conf
そして、ユーザー毎の設定ファイルを作成する。ファイル名はユーザー名になる。例えば、ユーザー名が「hoge」の場合、ファイル名は「hoge」になる。
% touch vi /etc/vsftpd/vsftpd_user_conf/hoge
vsftpd のログインのルートディレクトリだけを変更するので、下記のように記述する。今回は「foo」ユーザーのホームディレクトリ内にルートディレクトリ「hoge_root」を設定する。
% sudo vi /etc/vsftpd/vsftpd_user_conf/hoge local_root=/home/hoge/hoge_root
作成をしたら、vsftpd を再起動する。
% sudo /etc/init.d/vsftpd restart
そして、「foo」ユーザーのホームディレクトリ内にルートディレクトリ「hoge_root」を作成する。ただし、作成しただけでは、システムのユーザー権限でアクセスできないので、権限も変更する。
ユーザー「foo」とユーザー「hoge」は同じグループ「fuga」に所属する前提とする。
% sudo mkdir /home/foo/hoge_roo % sudo chmod 0770 /home/foo % sudo chown hoge:fuga /home/foo/hoge_roo % sudo chmod 0700 /home/foo/hoge_roo
これで設定完了。
注意
こんな設定を行うと、セキュリティ上、非常に問題あり。他の運用方法で済むのならば、このような設定はしない方がよい。