vsftpd でユーザーのルートディレクトリを変更する

目的

  1. vsftpd のログイン時のルートディレクトリを変更する
  2. 別のユーザーのホームディレクトリ内にルートディレクトリを作る

前提

  1. (FTPサーバーに登録されている)ローカルユーザーは複数登録されている
  2. 管理者: chroot除外
  3. 他のユーザー: chroot 対象ユーザー
  4. 今回対象となるユーザー: chroot の除外にする
    (除外対象にしないと、他ユーザーのホームディレクトリ内にルートディレクトリが作成できない)

/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

これで設定完了。

注意

こんな設定を行うと、セキュリティ上、非常に問題あり。他の運用方法で済むのならば、このような設定はしない方がよい。