vsftpd構築メモ ポート変更含む
-
- インストール
# yum install vsftpd
-
- xinetd経由で起動できるようにする(以下xinetdからの起動の場合の説明)
// サービス停止 # service vsftpd stop # chkconfig vsftpd off // xinetd 設定をコピー # cp -f /usr/share/doc/vsftpd-2.0.5/vsftpd.xinetd /etc/xinetd.d/vsftpd # vi !$ // disable = no にする。 # cp -a /etc/vsftpd/vsftpd.conf{,.o} # vi /etc/vsftpd/vsftpd.conf // vsftpd.conf のスタンドアロンモードやめる。 listen=YES -> listen=NO
-
- FTPポート変更(xinetdからの起動の場合)
# vi /etc/vsftpd/vsftpd.conf // 20のポートを使わない connect_from_port_20=YES -> connect_from_port_20=NO(行削除でも良い?) (pasv_enable=YES は書かない状態デフォルトYESなの不要) (listen_port=xxx はスタンドアロンモードのときのポート番号を指定するので不要) // pasv データ転送ポート(20の代替) pasv_min_port=xxxx pasv_max_port=xxxx // 俺ポートを定義する(追記)これがポート21の代わりになる ここがミソ! # vi /etc/services ftp_private xxxx/tcp ftp_private xxxx/udp fsp fspd // 俺ポートにvsftpd起動設定を合わせる # vi /etc/xinetd.d/vsftpd service ftp -> service ftp_private // 同時接続数 instances = 1 // xinetd 再起動 # /etc/init.d/xinetd restart // iptables 設定 # vi /etc/sysconfig/iptables // ftpの制御用(21の代替)、転送用(20の代替)のポートを許可する -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport xxxx -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport xxxx -j ACCEPT # /etc/init.d/iptables restart
-
- umaskを022に。同グループからも操作できるようにする。
(local_umask=022 サンプルと同じ)
-
- サーバーアプリ名、バージョンを隠す。
// 適当な文字を入れておく(追記) ftpd_banner=test server
-
- FTP 専用ユーザを作る
# useradd -s /sbin/nologin xxxx
- 特定のユーザーのみftpログインできるように(他はログインできない)ユーザ制限の設定
userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd/user_list # vi /etc/vsftpd/user_list 許可したいユーザーを追加。デフォ設定とか必要なら削る。
chroot_local_user=YES (デフォルト:NO) chroot_list_enable=YES (デフォルト:NO) # touch /etc/vsftpd/chroot_list (空ファイルにする。chrootしないユーザー)
- 匿名ユーザー(anonymous)の禁止
anonymous_enable=NO
- ログ設定
// 詳しすぎ? xferlog_std_format=NO log_ftp_protocol=YES // 日本時間にする use_localtime=YES
- 設定確認?の仕方
// ftpコマンドの引数にポート変更はないので $ ftp > open localhost xxxx <- 変更したport // telnet でやる $ telnet localhost xxxx
- 特定の時間のみアクセス可
# vi /etc/xinet.d/vsftpd (追記) access_times = 17:00-23:59 0:00-4:00 // 24:00 は認識しなかったので日をまたぐときは xx:xx-23:59 0:00-xx:xx とする
- TODO
通常FTPは制御用21番、データ用20番のポートに双方で接続し処理をすることで転送が行われる
要するに、
1. 何番ポートでFTPをサービスするか決める。
2. 決めたポート番号に対するサービス名を決めて、/etc/servicesに追加(または既存サービスの修正)を行う。
3. /etc/xinetd.d/vsftpdの"service FTP"の"FTP"の部分を2.で決めたサービス名に書き換え、xinetdを再起動する。
これでいけるはずです。
スーパーサーバーとは、ポート監視用のデーモンプログラムで、あるポートに対してアクセスがあると、設定ファイル (/etc/xinetd.d/ 等) を元にポートに対応したサービス (ftp 等) を起動します。この際、ポートとサービスの関係は、/etc/services によって導かれます。