FTPサーバのchroot
WEBコンテンツのアップロードでFTPを使用することは多々あります。共有ホスティングサービスを提供する場合はログイン後に縦横無尽にディレクトリを移動できないようにするのが一般的。
FTP接続時のホームディレクトリ
共有ホスティングサービス上で、WEBのドキュメントルートが「/path/to/public_html」の場合、FTP接続時のホームディレクトリをどのパスにするか?
/path/toor
/path/to/public_html「/path/to」と設定した場合、FTPログイン時に「public_html」が表示されFTPユーザが誤ってドキュメントルートを消してしまう場合もあります。その場合、WEBページが表示されなくなり、サーバ管理者は復旧や削除された原因調査を依頼される等、色々と手間が発生することもあります。
サーバ管理者の立場からするとFTPログイン時に直接ドキュメントルートにchrootさせたい訳です。
そのような理由から、FTP接続時のホームディレクトリを「/path/to/public_html」にしてサービス提供をすることが多いですね。でもドキュメントルートと同階層にライブラリ等を置いてページ構成をしたいという要望もあります。
chroot
通常のFTPアカウントはWEBのドキュメントルートにchrootさせるが、特定のFTPアカウントのみ「/etc/passwd」で設定しているホームディレクトリにchrootさせるといった内容です。
ProFTPDであればDefaultRootを複数記述できますので、特定のGIDのものだけをホームディレクトリにということができます。
例えば、
- usersグループに属しているFTPアカウントは/etc/passwdの設定に従ってchroot
- その他のFTPアカウントはWEBのドキュメントルートである/path/to/public_htmlにchroot
の場合は、proftpd.confに以下の記述をします。
DefaultRoot ~/users
DefaultRoot ~/public_htmlでは、vsftpdでFTPを提供するサーバで同じようなことを実現するのはどのようにすればよいのか?
確認すべきファイルは2つ
- vsftpd.conf
- passwd
まずvsftpd.confですが、public_htmlにchrootする為に以下の記述があるサーバです。
chroot_local_user=YES
local_root=public_html
chroot_list_enable=YES
chroot_list_file=/path/to/vsftpd.chroot_list
chroot_list_filedで指定されているファイルに記述のあるFTPアカウントは、アクセス権のあるディレクトリに移動することができます。その他のFTPアカウントはホームディレクトリのpublic_htmlにchrootされます。
試しにchroot_list_fileの/path/to/vsftpd.chroot_listに特定のFTPアカウントを記述してみます。
「chroot_local_user=YES」の設定では、vsftpd.chroot_listに記述のあるFTPアカウントはchrootが無効になり縦横無尽にディレクトリを移動できるようになります。ホームディレクトリ内での移動であれば問題無いのですが、それ以上の階層にも行けますので意図するものではありません。
実現する為にvsftpd.confを主体にするのでは無く発想を変え以下のように設定をしました。
/etc/passwd
変更前
abc:x:1001:1001:,,,:/home/abc:/bin/false ← public_htmlにchroot(通常FTPアカウント)
def:x:1002:1002:,,,:/home/def:/bin/false ← ホームディレクトリをログインディレクトリ変更後
abc:x:1001:1001:,,,:/home/abc/public_html:/bin/false ← public_htmlにchroot(通常FTPアカウント)
def:x:1002:1002:,,,:/home/def:/bin/false ← ホームディレクトリをログインディレクトリvsftpd.conf
chroot_local_user=YES
#local_root=public_html ← コメントアウト
chroot_list_enable=YES
chroot_list_file=/path/to/vsftpd.chroot_listこれでvsftpdを再起動すると、通常のFTPアカウントはpublic_htmlにchrootされ、特定のFTPアカウントのみホームディレクトリがログインディレクトリとなります。
厳密に言うと、これってchrootではないよね。

この記事へのコメントはありません。