
Home > FTPサーバ > vsftpdの設定(ホームディレクトリ)
| vsftpdの設定 - ホームディレクトリ編 - |
このページでは、vsftpdを使用してFTPサーバの構築を行います。ここで設定する仕様としては、
ユーザはFTPにアクセスすると、自分のホームディレクトリにアクセスするような設定になります。
なお、共有ディレクトリにアクセスするような仕様にしたい場合は、こちらを参考にしてみてください。
また、ルートディレクトリより上層へ行くことが可能なユーザと、行くことができないユーザについて
どのような設定にすれば効率的でセキュアかを考え、その設定も行なっていきます。
| vsftpdの設定(ホームディレクトリ) |
先ずはvsftpdがインストールされているか確認し、無い場合にはインストールを行います。
| # rpm -q vsftpd ←インストールされてるかの確認 # yum -y install vsftpd ←入ってない場合はインストール |
vsfptdの設定ファイルは、/etc/vsftpd/vsftpd.confになりますので、早速編集していきます。
| # vi /etc/vsftpd/vsftpd.conf anonymous_enable=YES ←12行目 ↓ anonymous_enable=NO ←NOに。アノニマス接続は拒否 xferlog_enable=YES ←38行目 xferlog_file=/var/log/vsftpd.log ←追加。/var/log/vsftpd.logへログを記録 #idle_session_timeout=600 ←57行目 ↓ idle_session_timeout=600 ←コメント解除 #ascii_upload_enable=YES ←81、82行目 #ascii_download_enable=YES ↓ ascii_upload_enable=YES ←コメント解除 ascii_download_enable=YES #chroot_list_enable=YES ←96行目 ↓ chroot_list_enable=YES ←コメント解除 #chroot_list_file=/etc/vsftpd.chroot_list ←98行目 ↓ chroot_list_file=/etc/vsftpd.chroot_list ←コメント解除 #ls_recurse_enable=YES ←104行目 ↓ ls_recurse_enable=YES ←有効にするとディレクトリごと削除できるようになる use_localtime=YES ←追加。タイムスタンプを日本時間に合わせる userlist_enable=YES ←追加。ユーザごとのアクセス制御 (行数については、あくまでも目安です) |
以上で設定は完了です。上の記述について何点か説明したいと思います。
chroot_list_enable=YESとchroot_list_file=/etc/vsftpd.chroot_listを有効にしました。
この2つを有効にすると、/etc/vsftpd.chroot_listに記述したユーザのルートディレクトリより上層への
アクセスを拒否するという設定になります。
なので、ルートディレクトリよりも上層へ移動させたくないユーザを、/etc/vsftpd.chroot_list
に以下のように記述します。
| # vi /etc/vsftpd.chroot_list chibi ←追加 |
これで、chibiユーザは自分のホームディレクトリよりも上層へアクセスできなくなります。
ルートディレクトリよりも上層へアクセスさせてしまうのは非常に危険ですので、上層へアクセス
させたく無いユーザを確実に記述するようにしてください。
また、vsftpd.confのその他の記述の部分は、vsftpdの設定(共有ディレクトリ)で
説明したものと重複になりますが、ここでももう1度、書いておきます。
anonymous_enableですが、これは匿名でのアクセスを許可するかどうかです。
プライベートな環境で使いたい場合には必ず、NOにしてください。
idle_session_timeout=600の指定は、接続して10分間何も無い状態だと接続状態では無くなるという設定です。
ascii_upload_enableとascii_download_enableは、アスキーモードを有効にするかどうかの設定です。
テキストファイルなどを転送する機会がある場合には、ここの2つは有効にしておきます。
Windowsで編集したテキストファイルをアスキーモードでは無くバイナリモードで転送すると、
そのまま転送します。LinuxとWindowsとでは、改行コードが異なるので、この場合には、
テキストファイルの中身がぐちゃぐちゃになってしまいます。
userlist_enable=YESは、ユーザごとのアクセス制御です。
この設定をしないと全てのユーザがFTPにアクセスできるようになっています。
なので、今回設定したFTPの共有ディレクトリにアクセスさせる必要の無いユーザや
アクセスさせたくないユーザを制限する必要があります。上の記述を追加してから
次に以下のファイルを開き、アクセスさせたくないユーザの記述を行います。
| # vi /etc/vsftpd.user_list chibi ←ユーザ名を記述 |
ここでは例として、chibiユーザをFTPにアクセスできないようにしてみました。
1行につき1ユーザを記述します。
以上で準備が整いましたので、vsftpdを起動させ、自動起動もオンに設定しておきます。
| # service vsftpd start # chkconfig --level 345 vsftpd on |
またFTPはポートの20番と21番を使用します。
当サイトのファイアウォールスクリプト使用の場合は、そのままでOKです。
スクリプトを使用せず、iptablesを有効にしている場合は、以下のような記述を追加してポートをオープンし、
設定を反映させる為iptablesを再起動させます。
| # vi /etc/sysconfig/iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT # service iptables restart |
以上で準備はできました。これで、FTPにログインすると各ユーザは自分のホームディレクトリにアクセスし、
特定のユーザだけはルートディレクトリより上層へアクセスできる設定になっています。
| ルートディレクトリに対するユーザの制限 |
上記で設定した内容をもう1度確認すると、次のようなものになります。
各ユーザは自分のホームディレクトリにアクセスし、特定のユーザだけはルートディレクトリより上層へ
アクセスできる設定。
ここには少し問題があります。というのも、先ほどの/etc/vsftpd.chroot_listへの記述です。
たくさんのユーザを管理している場合、各ホームディレクトリより上層へ行けるユーザは、
行けないユーザよりも少ないと思います。本当に特別なユーザだけが上層へ移動できるように
設定すると思います。
しかし、もしこのままの設定だと、上層へのアクセスを拒否したいユーザを/etc/vsftpd.chroot_listに
記述していかなければなりません。今、言ったように、上層へ行けるユーザのほうが少ないなら
この選択はあまり賢い選択とは言えません。それに、もし記述漏れがあったら、本来なら上層へ
行かせたくないユーザが上層へ行けてしまうという事態も発生します。
基本が上層へのアクセスを許可する仕様になっているからです。
それなら、基本が上層へのアクセスを拒否する設定にすれば問題解決できます。
以下の1行をvsfptd.confに追加してください。
| # vi /etc/vsftpd/vsftpd.conf chroot_local_user=YES ←追加 |
これは96行目付近にchrootに関する記述が並んでますので、その辺に追記しておきます。
この1行を追加すると、先ほどとは逆になり、/etc/vsftpd.chroot_listに記述したユーザだけが上層へ行ける
という設定になります。これで基本が上層への移動が禁止になります。
このようにしておけば、上層へ行かせたいユーザだけ記述すればいいので、記述ミスなどで、
本当は上層へ行かせたくなかったユーザが、上層へ行けてしまった。なんてミスも防ぐことができます。
/etc/vsftpd.chroot_listにルートディレクトリより上層へ行かせたいユーザを記述したら、
vsftpd.confの設定を変更していますので、再起動して設定を反映させます。
これで、/etc/vsftpd.chroot_listに記述したユーザだけが上層へアクセスできるようになります。
| # service vsftpd restart |
【注意】
chroot_local_userとchroot_list_enableをどちらもYESに設定した場合は、/etc/vsftpd.chroot_listの
ファイル自体が無いと全てのユーザがFTPにアクセスできなくなってしまいます。
最終更新 : 05/31/2005