2009年10月15日木曜日

FTPサーバの構築

壊れかかっているFTPサーバを再構築した。その時の構築とデータ移行手順です。

指定ユーザのみがログインしてアップロードやダウンロードが行えるようにします。またChroot対応にしてユーザのホームディレクトリ(public_html)より上位ディレクトリには移行できないようにする。
  • CentOS 5.3
  • vsftpd-2.0.5-12.el5_3.1
【事前準備】
接続ユーザにシェルを使わせないようにするため架空のシェルを登録しておく。
shellsファイルに「/bin/login」の1行を追記する。
# vi /etc/shells
 /bin/login

chroot対応のユーザは/etc/localtimeの参照ができなくなるため時刻が狂うことがある。これを防ぐためユーザディレクトリの直下にetcディレクトリを作成してetcのlocaltimeファイルをコピーしてユーザ用localtimeファイルを設置するようにする。
ユーザ追加時に毎回public_htmlやlocaltimeを作るのは面倒なので、ユーザ追加と同時にこれらが作られるようにしておく。
# mkdir /etc/skel/public_html
# mkdir /etc/skel/etc
# cp /etc/localtime /etc/skel/etc

ユーザの追加とパスワードを設定する。(架空のシェルを割り当てるのでログインしても実質シェルは使えない)
# useradd -s /bin/login hoge
# passwd hoge

ユーザのホームディレクトリとlocaltimeの場所確認
/home/hoge/public_html
/home/hoge/etc/localtime

【インストール】
yumを使いRPMパッケージ版をインストールします。
# yum install vsftpd

【設定1】
confファイルを編集します。各項目は"オプション名=値"というスタイルですが、=(イコール)の前後にスペース等空白は入れないようにしてください。
# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.org (オリジナルを保存)
# vi /etc/vsftpd/vsftpd.conf

#ログインを必要とするため匿名ログインを許可しない
anonymous_enable=NO

#ローカルユーザのログインを許可する
local_enable=YES

#書き込みを許可する
write_enable=YES

#作成したディレクトリやアップロードしたファイルのパーミッションをログインユーザ限定にする
#Webのアップロード用に使いたいときは755になるように022を指定する
#計算方法:777(フル権限)-077(マスク)=700(設定権限)
local_umask=077

#ユーザーがメッセージファイルを持つディレクトリに入った時に、メッセージを表示する
#特に使いません
dirmessage_enable=NO

#ログ関連
xferlog_enable=YES
xferlog_file= /var/log/vsftpd.log
xferlog_std_format=NO

#転送用ポートを指定する
connect_from_port_20=YES

#アスキーモードを許可する
ascii_upload_enable=YES
ascii_download_enable=YES

#接続が確立された時点での情報表示を隠蔽する
ftpd_banner=unkown.

#chroot_listでchroot除外ユーザ(ホームディレクトリより上位へ移動可)を記述する
#ホームディレクトリをpublic_htmlとする
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
local_root=public_html

#ディレクトリ単位での削除やアップロードを許可する
ls_recurse_enable=YES

#スタントアロンモードで起動させる
listen=YES

#サービス名の指定
pam_service_name=vsftpd

#ユーザ制限
#接続許可を/vsftpd/user_listに記述してあるユーザに限定する
#/vsftpd/ftpusersに記述してあるユーザは無条件に接続を拒否する
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

#タイムゾーンをローカルのものを使用する
use_localtime=YES

#ドットファイル(.から始まる隠しファイル)は表示させない
force_dot_file=NO

上記以外にも様々な設定できます。詳しくはこちらを参考にしてください。

【設定2】
無条件に拒否するユーザを記述する(1ユーザ1行に記述するようにします)
/etc/passwordを参考にシステム系ユーザをすべて記述する(任意)
# vi /etc/vsftpd/ftpusers
 # Users that are not allowed to login via ftp

 root
 bin
 daemon
 adm
 lp
 sync
 shutdown
 halt
 mail
 news
 uucp
 operator
 games
 nobody
 gopher
 ftp
 rpc
 mailnull
 smmsp
 nscd
 vcsa
 sshd
 rpcuser
 nfsnobody
 pcap
 dbus
 haldaemon
 avahi
 avahi-autoipd
 xfs
 ntp

ログイン許可するユーザを記述する(1ユーザ1行に記述するようにします)
デフォルトでシステム系のユーザが記述されていますのですべて削除または行頭に#を付けます。
ここでは最初に追加したユーザhogeを許可しています。
# vi /etc/vsftpd/user_list
 # vsftpd userlist

 # If userlist_deny=NO, only allow users in this file
 # If userlist_deny=YES (default), never allow users in this file, and
 # do not even prompt for a password.
 # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
 # for users that are denied.
 #root
 #bin
 #daemon
 #adm
 #lp
 #sync
 #shutdown
 #halt
 #mail
 #news
 #uucp
 #operator
 #games
 #nobody
 hoge

chroot除外者用リストの作成
# vi /etc/vsftpd/chroot_list
 ※chroot除外するユーザを記述する(1ユーザ1行に記述するようにします)

【起動設定】 
起動
# /etc/init.d/vsftpd start

自動起動
# chkconfig vsftpd on
ランレベル確認
# chkconfig --list vsftpd
vsftpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

【データ移行】
さてここから旧サーバからデータを移行します。ただ単に移行するだけではなく、タイムスタンプをそのまま引き継ぐようにしたいと思います。
※移行元もvsFTPDで構築されており設定もほぼ同じ構成になっています。
  • 移行元サーバIP 192.168.0.5
  • 移行先サーバIP 192.168.0.6
【移行元192.168.0.5での作業】
ユーザごとにデータ(public_html以下)をアーカイブして圧縮します。
サーバにログイン(ssh等)してrootになります。
# cd /home/hoge
# tar cvzf hoge_backupdata.tar.gz ./public_html/*
# ls -al
total    9860100

drwx------        5 hoge hoge                  4096 Oct 15 12:45 .
drwxr-xr-x    138 root root                    4096 Sep 11 19:34 ..
-rw-r--r--         1 hoge hoge                      24 Dec 21 2004 .bash_logout
-rw-r--r--         1 hoge hoge                    191 Dec 21 2004 .bash_profile
-rw-r--r--         1 hoge hoge                    124 Dec 21 2004 .bashrc
-rw-r--r--         1 hoge hoge                    383 Dec 21 2004 .emacs
drwxr-xr-x        2 hoge hoge                  4096   Jul   2 2005 etc
drwx------        6 hoge hoge                  4096 Sep 14 21:05 Maildir
-rw-r--r--         1 root root      10086831455 Oct 14 19:59 hoge_backupdata.tar.gz
drwxr-xr-x     85 hoge hoge                   4096 Oct 15 12:45 public_html

FTPのホームディレクトリに移動する。
# mv ./hoge_backupdata.tar.gz ./public_html

【移行先192.168.0.6での作業】
サーバにログイン(ssh等)してrootになります。
FTPコマンドを使用して移行元サーバにログインします。
# ftp 192.168.0.5
Connected to 192.168.0.5.

220 unknown.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (192.168.0.5:root):hoge ← 移行元サーバのユーザ
331 Please specify the password.
Password: ← パスワード入力
230 Login successful.

Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ログインが成功しました。もし以下のようなメッセージが表示された場合はログインに失敗ですのでftpコマンドから抜けて再度ログインをします。
530 Login incorrect.

Login failed.
ftp> quit
# もう一度”ftp 192.168.0.5”でログインを試みます。
 
移行元サーバで作成したアーカイブデータをダウンロードします。
ftp>get hoge_backupdata.tar.gz
    ・
    ・
ftp>quit
移行先のpublic_html(/home/hoge/public_html)ディレクトリを削除します。
※public_htmlの中身があるときは事前にバックアップを取っておきます。
# tar zxvf  hoge_backupdata.tar.gz
 
解凍後public_htmlが出来上がりますのでパーミッション等を変更して完了です。
# chown -R hoge.hoge ./public_html
# chmod -R 700 ./public_html
 

0 件のコメント:

Google検索