CentOSでホームサーバを作ろう
FTPサーバ(vsftp)の導入
最終更新:
centos-homeserver
-
view
はじめに
ローカルネットワーク内だけで有効なFTPサーバ(vsftpd)を構築する。
また、スタンドアロン型ではなくxinetdによる起動を行うように設定をする。
また、スタンドアロン型ではなくxinetdによる起動を行うように設定をする。
インストール
# yum -y install vsftpd
設定ファイルを編集
基本的なポリシーは以下の通り
- 匿名ユーザ(anonymous)の接続禁止。
- サーバにアカウントがあるユーザ(ローカルユーザ)のみ接続可能。
- ローカルユーザでも一部のユーザは接続不可に設定できるようにする。
- 接続ユーザはそれぞれのホームディレクトリ配下のみアクセス可能。その上位ディレクトリはアクセス禁止。
- 一部のユーザだけは"/"以下のアクセスを可能にする。(特権ユーザの設定を可能にする。)
- FTPサーバはスタンドアロン型ではなく、xinetdによって起動する。
# vi /etc/vsftpd/vsftpd.conf
プロパティ 設定値 説明 ローカルユーザの設定 anonymous_enable NO 匿名ユーザはログインさせない。 local_enable YES ローカルユーザの接続を許可する。 local_umask 022 ローカルユーザのumaskを"022"にする。デフォルトの"077"のままだと
UPしたディレクトリは他のユーザにアクセス不可でファイルは読めなくなるため。write_enable YES 書き込みを許可する。 connect_from_port_20 YES FTPの接続ポートを通常通り"20"に設定する。 pam_service_name vsftpd PAM認証のサービス名指定 ls_recurse_enable YES ディレクトリを削除可能にする。 ユーザ制限の設定 userlist_enable NO userlist_fileを使用した制御を行わない。ローカルユーザはログイン可能。 chroot_local_user YES ローカルユーザのchrootを有効にする。 chroot_list_enable YES chroot_listファイルに記載されたユーザは"/"にアクセス可能になる。
注意:意味を逆(「chroot_listに記述されたユーザが制限される」)に取りやすいので要注意。chroot_list_file /etc/vsftpd/chroot_list chroot_list_fileのパス。chroot_list_enable=YESにした場合、
このパスにファイル(内容が空でも)が存在していないと誰も接続できなくなるので要注意。chrootの設定は「ローカルユーザのchrootを有効にする」だけなら、一番上の「chroot_local_user=YES」だけで良い。
ただ、その下の2つの設定はを行うとchroot_list_fileが有効になり、記載されたユーザは「chrootされなくなる」。
特権ユーザを明示的に指定することになるので、この設定が一番判りやすい設定。
なお、接続禁止にしたいローカルユーザは/etc/vsftpd/ftpusersに記述すれば接続不可になる。その他の設定 idle_session_timeout 300 アイドル時のタイムアウトを設定(300秒)。 data_connection_timeout 30 接続時時のタイムアウトを設定(30秒)。 ascii_upload_enable YES アスキーモードでアップロード・ダウンロードを許可する。 ascii_download_enable YES listen NO xinetdで起動するのでNOに変更する。
なお、Standaloneモードで動作させる場合はYESのまま。(CentOSのデフォルト)use_localtime YES タイムスタンプ時間を日本時間に合わせる。
ログイン可能はアカウントを以下のコマンドで一覧可能。
(ログインシェルが"/sbin/nologin"以外に設定されているものを検索。)
(ログインシェルが"/sbin/nologin"以外に設定されているものを検索。)
# cat /etc/passwd | grep -v nologin$root
sync
shutdown
halt
news
apache (←後述のインストール、設定作業で追加される。)
mysql (←後述のインストール、設定作業で追加される。)
ユーザが作成した一般ユーザ〜
デフォルトでrootからnewsまでは"/etc/vsftpd/ftpusers"に含まれているので、
それ以外のユーザで接続させたくないユーザを追加する。
上記例であれば、
それ以外のユーザで接続させたくないユーザを追加する。
上記例であれば、
# vi /etc/vsftpd/ftpusers
で、apache、mysql、ユーザが作成した一般ユーザでFTP接続させたくないユーザ、などを適宜追加していく運用が考えられる。
当然だが、もし今後ログイン可能なローカルユーザを追加した場合は、自動的にFTP接続可能になってしまう。
ただし、その場合でも自分のホームディレクトリ以外は閲覧できない。
当然だが、もし今後ログイン可能なローカルユーザを追加した場合は、自動的にFTP接続可能になってしまう。
ただし、その場合でも自分のホームディレクトリ以外は閲覧できない。
xinetdの設定
# vi /etc/xinet.d/vsftpdservice ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
server_args = /etc/vsftpd/vsftpd.conf
log_on_success += HOST USERID DURATION
log_on_failure += HOST USERID
nice = 10
only_from = 192.168.1.0
flags = IPV4
}
設定値の意味の詳細解説は参考資料を参照のこと。
最後にxinetdを再起動する。
最後にxinetdを再起動する。
# service xinetd restart
出力されるログを確認して、正常に起動して構文ミスが無いかを確認する。
# tail /var/log/messages
活用例:特定のディレクトリにだけアクセス可能なFTP専用ユーザの作成
FTP専用のユーザ(例:hogehoge)を作成し、
そのユーザで特定のディレクトリだけFTPできるようにする。
そのユーザで特定のディレクトリだけFTPできるようにする。
# useradd hogehoge
# passwd hogehoge
でユーザとパスワードの設定を行う。
その後passwdファイルのホームディレクトリを変更することで
アクセス可能なディレクトリを制限する事ができる。
その後passwdファイルのホームディレクトリを変更することで
アクセス可能なディレクトリを制限する事ができる。
# vi /etc/passwdhogehoge:x:511:511::/home/temp:/bin/bash
↓
hogehoge:x:511:511::/tmp/hogehoge:/bin/bash
この例ではユーザhogehogeは/tmp/hogehoge以下のディレクトリにアクセス可能となる。
実際にユーザhogehogeでログイン可能で、他のユーザではログイン不可になることを確認すると良い。
実際にユーザhogehogeでログイン可能で、他のユーザではログイン不可になることを確認すると良い。
参考