FTPS+chroot
20130105

以下の仕様に基づいて構築する。

 1.標準のFTPは避け、FTPSの実装
  →クライアント側ルータのSPI機能により、TLSハンドシェイクのパケットをドロップしてしまう場合があり、対策として標準FTPも同時に使用出来るものとする。
 2.一部の特権ユーザ以外はchrootを設定し、指定したディレクトリから上層へのアクセスを制限する。
  →ファイルサーバにFTPでアクセスする用途を想定し、ユーザ毎に任意の場所を指定出来る物とする。
 3.その他の標準的な設定については設定されている物とする。

 4.ホームディレクトリより上層へのアクセスが可能な特権ユーザ名「CentOS」
  →ホームディレクトリ「/var/www」
 5.ファイルサーバ用ユーザ名「Windows」
  ホームディレクトリ「/win」
 6.その他一般ユーザは「/home/ユーザ名/public_html」をホームディレクトリとする。
動作環境
 CentOS5.x
 CentOS6.x
 vsftpd
 FTPS(Explicit)
 ファイルサーバは「Windowsの共有フォルダをLinuxでマウントして使用する方法」を採用

※2010/08/25時点でのメモを6.xに対応出来るようにちょっと改変しただけで、2013/01/05時点では設定方法が違う点に注意
Linux機での作業
◆vsftpdの設定を変更
 [root@Server ~]# vi /etc/vsftpd/vsftpd.conf

 chroot_local_user=YES
→chroot機能の有効化

 chroot_list_enable=YES
→特権ユーザ設定の有効化

 local_root=public_html
→一般ユーザのログイン時のディレクトリパス

 chroot_list_file=/etc/vsftpd/chroot_conf/chroot_list
→特権ユーザ設定のファイルを指定

 user_config_dir=/etc/vsftpd/chroot_conf
→chroot先のディレクトリを個別に設定するためのファイルを指定

 ssl_enable=YES
→FTPSの有効化

 force_local_logins_ssl=NO
→標準FTPの接続を許可する。

 force_local_data_ssl=NO
→標準FTPの転送を許可する。

 rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem
→サーバ証明書
Centos6.xでのメモ
 [root@Server ~]# vi /etc/vsftpd/vsftpd.conf

 chroot_local_user=YES
→chroot機能の有効化

 chroot_list_enable=YES
→特権ユーザ設定の有効化

 local_root=public_html
→一般ユーザのログイン時のディレクトリパス

 chroot_list_file=/etc/vsftpd/chroot_list
→特権ユーザを指定するためのファイル
→ファイル内に「CentOS」と記述することでこのユーザを特権ユーザにする。
Linux機での作業の続き
◆ホームディレクトリより上層へのアクセスが可能な特権ユーザの指定
 [root@Server ~]# echo "CentOS" >> /etc/vsftpd/chroot_conf/chroot_list
 →「/etc/vsftpd/chroot_conf/chroot_list」にユーザ名を記述する事で指定出来ます。

◆ユーザ「CentOS」のホームディレクトリを設定
 [root@Server ~]# touch /etc/vsftpd/chroot_conf/CentOS
 [root@Server ~]# echo "local_root=/var/www/" >> /etc/vsftpd/chroot_conf/CentOS

◆ユーザ「Windows」のホームディレクトリ及び、chrootディレクトリを設定
 [root@Server ~]# touch /etc/vsftpd/chroot_conf/Windows
 [root@Server ~]# echo "local_root=/win/" >> /etc/vsftpd/chroot_conf/Windows

 「/etc/vsftpd/chroot_conf/」以下にユーザ名のファイルを作成して「local_root=ディレクトリパス」と記載する。

◆サーバー証明書を作成する
 [root@Server ~]# cd /etc/pki/tls/certs/

 [root@Server certs]# make vsftpd.pem

 Country Name (2 letter code) [GB]:JP(国名)
 State or Province Name (full name) [Berkshire]:都道府県
 Locality Name (eg, city) [Newbury]:市町村
 Organization Name (eg, company) [My Company Ltd]:サーバ名
 Organizational Unit Name (eg, section) []:空白
 Common Name (eg, your name or your server's hostname) []:ホスト名
 Email Address []:メールアドレス

◆起動(再起動)
 [root@Server ~]# /etc/rc.d/init.d/vsftpd restart

◆たまに忘れる自動起動化設定
 [root@Server ~]# chkconfig vsftpd on

終わり