
参考URL:http://centossrv.com/vsftpd.shtml
修正:2014ー07ー27
vsftpdインストール
# yum -y install vsftpd
vsftpd設定
# gedit /etc/vsftpd/vsftpd.conf
anonymous_enable=NO ← noに変更
xferlog_file=/var/log/vsftpd.log ← #を取り、右辺の変更
xferlog_std_format=NO ← noに変更
ascii_upload_enable=YES ← コメントを外す
ascii_download_enable=YES ← コメントを外す
ftpd_banner=Welcome to blah FTP service. ← コメントを外す
chroot_local_user=YES ← コメントを外す
chroot_list_enable=NO ← コメントを外し、右辺を変更
chroot_list_file=/etc/vsftpd/chroot_list ← コメントを外す
userlist_deny=NO ← 追記
ls_recurse_enable=YES ← コメントを外す
以下を最下行へ追加
use_localtime=YES
port_promiscuous=YES
pasv_addr_resolve=NO
pasv_address=192.168.xx.xx ← 自分のIPアドレス
pasv_min_port=60000 ← PASVモード接続時の最小ポート番号
pasv_max_port=60030 ← PASVモード接続時の最大ポート番号
ssl_enable=YES ← SSLの有効化
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem ← サーバー証明書を指定
force_local_logins_ssl=YES ← ログイン時にSSL接続を強制
force_local_data_ssl=YES ← データ転送時にSSL接続を強制
port_promiscuous=YESから3行は参考にしたhttp://centossrv.com/vsftpd.shtml とは少し違う。オリジナルではFTPのIPアドレスが牽けるDNSのホスト名を設定するようになっているが、これだとテストをする時に問題がでた。と言うのはテストはLAN内のホストから行ったが、FTPサーバーが他に動いていたので、ルーターの設定は動いているFTPサーバーのIPにフォワードしている。当然DNSが返して来るIPはグローバルIPなのでルーターに着てもテスト中のFTPサーバーでは無く、動いている現行のFTPサーバーに行ってしまう。上記の設定のようにすれば同じ状態も問題ない。
ホームディレクトリより上層へのアクセスを許可しないユーザの登録
# echo ホームしかアクセスさせないユーザー名 >> /etc/vsftpd/chroot_list
ホームディレクトリより上層へのアクセスができないユーザのタイムスタンプを日本時間にする
新規ユーザ対処
# mkdir /etc/skel/etc
# cp /etc/localtime /etc/skel/etc/
既存ユーザ対処
# gedit localtimset
#!/bin/bash
for user in `ls /home`
do
id $user > /dev/null 2>&1
if [ $? -eq 0 ]; then
grep $user /etc/vsftpd/chroot_list > /dev/null 2>&1
if [ $? -ne 0 ] && [ ! -f /home/$user/etc/localtime ]; then
mkdir -p /home/$user/etc
cp /etc/localtime /home/$user/etc
echo $user
fi
fi
done
# sh localtimset
localtimeセットアップスクリプト削除
# rm -f localtimset
FTPサーバーへのアクセスを禁止するユーザの登録
# echo 禁止するユーザー名 >> /etc/vsftpd/ftpusers
サーバー証明書作成
# cd /etc/pki/tls/certs/
# make vsftpd.pem
前略
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Ota-ku
Organization Name (eg, company) [Default Company Ltd]:kinryokai.net
Organizational Unit Name (eg, section) []:空Enter
Common Name (eg, your name or your server's hostname) []:ftp.kinryokai.net
Email Address []:root@kinryokai.net
# cd
vsftpd起動
# service vsftpd start
# chkconfig vsftpd on

/root/iptables.sh の設定と外部から受け付けるため、マイグレーション時にルーターのポートもこのホストにフォワードする
アクセス制限は外部からこのWEBにFTPでアップする必要がある複数のユーザーがおり、特定するのが難しいためアクセス制限は行っていません。
*************
このFTPに接続するクライアントの設定
テストの為にこのサブホストの親ホスト(同じCenOS)にFTPクライアントをインストールします。
# yum -y install filezilla ←この時EPELのレポジトリーを有効にしておく必要があります。
これでアプリケーション→インターネット→FileZilla が出来ていますので、クリックし、ファイル→サイトマネージャーをクリックしますと図の様にサイトマネージャーが開きますので、赤線の所を設定していきます。今は実験段階なのでホスト名にはIP(一部伏せてあり)を設定しています。一般以外のタブはデフォルトでもOKでしたが、転送設定タブの転送モードはパッシブにしておいた方がいいかも。
*************
ここからはvsftpを入れたサーバーの設定
実は私自身頭がスパゲッティーになった部分があり、一つ目は暗号化の問題。FileZillaの設定で
sftpはSSHを使いFTPにアクセス、だからSSHにアクセス出来るユーザーのみ可能、(OSへのログインを許可しなければならないと思う)
fptで"明示的なFTP over TLSが必要"はFTPでTLSを使い(この設定を使用)ftpポートの21にアクセスする。(OSへのログインを不許可でも可)
ftpで"暗黙のFTP over TLSが必要"はFTPでTLSを使い、ftpポートの990にアクセスすると思う。(OSへのログインを不許可でも可)
これらはFileZillaのポートの設定をブランクにした場合。
次はlogの関連
http://www.nina.jp/server/redhat/vsftpd/vsftpd.conf.htmlのvsftpd の設定(ログ)にわかりやすい表がありますので見ておいて下さい。
次ににユーザーのリスト関係を整理しておきます。
1:/etc/vsftpd/ftpusers に設定してあるユーザーはFTPサーバーの設定に関わらずアクセスが認められない
2:設定に userlist_deny=NO なら、設定してあるユーザーはアクセスが認められるユーザー
3:設定に userlist_deny=YES なら、設定してあるユーザーはアクセスが認められないユーザー但し、ftpusersに設定すればいいので、これは意味が無いと思う。
上記の設定を施せばデフォルトの設定にある”local_enable=YES”はNOにしてもいいのかもと思い、やってみると見事にエラー
レスポンス: 500 OOPS: vsftpd: both local and anonymous access disabled!
次はchrootの関係
http://www.aconus.com/~oyaji/ftp/vsftpd_rpm.htmの11。アクセスディレクトリの制限 ( chroot )に見やすい表がありますので参考にして下さい。私の設定は上記ですがこの設定ですと chroot_list に記入するユーザーはホームページ以下にしかアクセスできなくなり、そのホームページをアクセスを許すWEB内のdirectoryにしておけばよい。
FTPサーバーだけにアクセス可能なユーザーの作成は -d でアクセスさせるWEBのdirectory -s /sbin/nologin でシステムへのログインを許可しない。
例:useradd -d /path/to/web/directory -s /sbin/nologin ユーザー名 で作成後 passwd ユーザー名でパスワードを設定する
最後に少し問題があります。その問題とは
1:このテストしているFTPサーバーとは物理的に別ですが同じLAN内のCentOS6.5(KVMを使った親ホスト)からは問題なく、又同じLAN内にあるwindows7からも、外部からアクセスした(ルーター越え、もちろんこの時のルーターの設定はこのテストサーバーにフォワードしています)Windows7も問題ありませんが、
2:アクセスできたKVM下のサブホストやこのFTPサーバーの親ホストであるKVM(CentOS6.5)からはエラーが出て接続できません。これは暗号化を外せばアクセス出来るので、LAN内でもあり、これらのホストは暗号化をしていません。(force_local_logins_ssl= と force_local_data_ssl= はNOにします)そのエラーは
11:06:29 状態: TLS を初期化しています...
11:06:29 エラー: GnuTLS error -50 in gnutls_priority_set_direct: The request is invalid.
11:06:29 エラー: TLS の初期化に失敗しました.
11:06:29 エラー: サーバに接続できませんでした。
正常につながるときはTLSの初期化後は状態: 証明書を検証中になります。アンインストールしたり色々やりましたが出来ませんでした。
つながっているホストもあるので、FTPサーバーの問題では無く、クライアントの方だと思うのですが、どこをいじればいいのかさっぱり?もちろんftpクライアントのバージョンはwindows7は3.8.1 CentOSは全て3.7.3で同じです。google先生に聞いたら、ここにあったが、パッチを入れるといいとあるが、ソースからやらないといけないのでやめた。あと他のWEBでssl_cipher=HIGHと入れるとよいとありましたが、私の場合は入れても出来ませんでした。
2014-08-04追記:このエラーはGnuTLSの問題だと思います。そこでGnuTLSのバージョンを調べると
OKなホスト:gnutls.x86_64 2.8.5-10.el6_4.2
ダメなホスト:gnutls.x86_64 2.8.5-14.el6_5
でした。OKなホストはCentOSの6.4でGnuTLSのバージョンは2.8.5-10だった。この辺が問題みたいだが、gnutlsの2.8.5-10のありかが分からない。ちなみにVSFTPDが動いているホストの分はダメなホストと同じ2.8.5-14.el6_5です
又、FTP用のバーチャルユーザーを作る方法もありますが、一部のユーザーでエラーが出て、うまくいきませんでした。エラーは
状態: TLS/SSL 接続が確立されました.
レスポンス: 331 Please specify the password.
コマンド: PASS *********
エラー: GnuTLS error -8: A record packet with illegal version was received.
2014-07-28追記:
今まではスタンドアローンでvsftpを走らせていましたが、FTPでデーターが転送されるのはそんなに多くないので、xinetd 経由でRQがあってからvsftpを走らすようにします。
CentOSではデフォルトでxinetdはインストールされ無いのでyumからインストールして下さい。私はサーバー制作 : 14:VNCサーバーの設定でインストール済みです。まずはvsftpdを止め、xinetdの設定ファイルを作ります。
# service vsftpd stop
# chkconfig vsftpd off
# gedit /etc/xinetd.d/vsftpd
service ftp {
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
server_args = /etc/vsftpd/vsftpd.conf
nice = 10
disable = no
flags = IPv4
}
CentOSの場合は /etc/services に
ftp-data 20/tcp
ftp-data 20/udp
# 21 is registered to ftp, but also used by fsp
ftp 21/tcp
ftp 21/udp fsp fspd
設定を変えたのでxinetdを再起動
# service xinetd restart
これでFTPクライアントからやるとエラー
状態: 接続を確立しました, ウェルカム メッセージを待っています...
エラー: サーバによって接続が閉じられました
listen=NO ← YESからNOに変更

http://www.starplatinum.jp/awstats/awstats70/を参考にしました。このページの "AWStats Ver.7.0完全日本語版のダウンロード” からダウンロードし、解凍をしておきます。(/Download/Awstats/AWStats70_Jpn に解凍)
私はvirtualhostで数個のWEBを動かすつもりなのでプログラム(.pl)は共通に出来るが、設定ファイルは独立していなければならない。と言う事で
データーとプログラムは /webdata/awstatsに置く。設定ファイルは /etc/awstats/awstats.www,kinryokai.net.conf とする
プログラムをコピーしrenameする。
# cp -pr /Download/Awstats/AWStats70_Jpn/wwwroot/cgi-bin/ /webdata/awstats
icon関連をコピーしますが、私はデフォルト(/var/www/icons)では無く /webdata/icons にしていますので
# cp -pr /Download/awstats/AWStats70_Jpn/wwwroot/icon/ /webdata/icons/
後で、必要になるファイルを/usr/share/perl5にコピー
# cp /Download/awstats/AWStats70_Jpn/tools/awstats_updateall.pl /usr/share/perl5/
# cp /Download/awstats/AWStats70_Jpn/tools/awstats_buildstaticpages.pl /usr/share/perl5/
awstatsを動かすにはCustomlog をcombined にしなくてはならないが、前の /etc/httpd/conf.d/virtualhost.confの設定で
CustomLog logs/kinryokai_access_log combined env=!no_log にしているので問題ない。
/etc/awstats/awstats.www,kinryokai.net.conf の設定をしますがサンプルがありますのでそれを変更します。
# mkdir /etc/awstats
# mv /webdata/awstats/awstats.model_jp.conf /etc/awstats/awstats.www,kinryokai.net.conf
wwwの次は本当は . でカンマでない(XOOPSが勝手にリンクを張る為)この後も同じでwww.と解釈してください。
同じ場所にある awstats.model.confは使いませんので削除しておきます。
# gedit /etc/awstats/awstats.www,kinryokai.net.conf
LogFile="/var/log/httpd/kinryokai_access_log"
SiteDomain="www,kinryokai.net"
HostAliases="localhost 127.0.0.1 REGEX[kinryokai\.net$]"
DirData="/webdata/awstats"
DirCgi="/awstats"
DirIcons="/icon"
上記は変更した部分のみ書き出してあります。
次に jcode.pm をインストールしますが、yumから出来ます。
# yum -y install perl-Jcode
で、/usr/share/perl5/Jcode.pm にインストールされた。
と、ここで困ったことになった。と言うのは私はプログラムはvirtualhost全部で同じプログラム(perl)を使おうとしているが、utf8_decode.plの中にホスト名前を設定する所がある。そうするとプログラムが共通にならない。
utf8_decode.plをハックして、ホスト分のチェックをするようにしてもいいが(実は私はperlをあまり理解していないので大変そう)、この数年のWEBのログを見てみると(完全に見た訳ではないが)全角で記録されている部分が見あたらなった。このutf8_decode.plと言うものは(多分)ログに全角がある時に使うと思うので、私はこの変換をしないことにした。
と言う事はawstatsだけならJcode.pmはインストールしなくてもよかったが、わざわざ消すこともないのでそのままにする。/etc/awstats/にあるconfファイルはvirtualhost分用意をするので、プログラムは共通化出来る。
なので、http://www.starplatinum.jp/awstats/awstats70/の3、4、5はやらない。
今はテストでapacheを動かしているので、ログは無いに等しいので、現在アクティブなWEBからログをコピーする。前回はNFSでコピーしたが、今回はrsyncでコピーする。
まず、/etc/rsyncd.conf の修正
[ht-log]
path = /var/log/httpd
auth users = root
secrets file = /etc/rsyncd.secrets
read only = no
を最後に追加し、CentOSはxinetd経由で動かしているので、
# service xinetd restart
*****************
ここからはコピー元のホストで
# rsync -av --delete --password-file=/etc/rsync.passwd /var/log/httpd/ rsync;//コピー先のIP/ht-log
(; は 本当は : )でデーターをコピーします。
*****************
ここで設定中のホストに戻ります。
私の場合はサーバーのマイグレーションなので、既にawstatsのデーターは元のサーバーで出来ており、これはすでにrsyncで/webdataをコピーした時に終わっている。
初期データーの作成はhttp://centossrv.com/awstats.shtmlの(1)AWStatsデータベース初期作成を参考にしてください。
/etc/httpd/conf.d/awstats.confに
Alias /icon/ /webdata/icons/
ScriptAlias /awstats/ /webdata/awstats/
<Directory /webdata/awstats/>
DirectoryIndex awstats.pl
Options ExecCGI
order deny,allow
deny from all
allow from all
#allow from 192.168
</Directory>
と記入し、httpd を再起動して設定ファイルを読み込ませる。この設定はすべてのホストから見れてしまう設定になっています。
テストをしたいが、www,kinryokai.net としてもアクティブなWEBを参照し、このテストのWEBには来ないので、/etc/hosts の "192.168.xxx.xxx www,kinryokai.net www" のIPをこのテスト用のサブホストのIPに変更し、ブラウザで www,kinryokai.net/awstats/awstats.pl にアクセスすると表示される筈.
ここからはまだ確認が終わっておりませんので、間違えがあるかも
httdのログの内容をawstatsに反映させてからロテイトするように、/etc/logrotate.d/httpd を
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
prerotate ←ここから
`/usr/share/perl5/awstats_updateall\.pl` now -confdir="/etc/awstats" \
-awstatsprog="/webdata/awstats/awstats\.pl >/dev/null
endscript ←ここまで追記
#delaycompress ←圧縮はしないのでコメントアウト
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
1時間毎にawstatsを更新する為に /etc/cron.hourly/awstats を作成
/usr/share/perl5/awstats_updateall.pl now -confdir="/etc" \
awstatsprog="/webdata/awstats/awstats.pl" >/dev/null
perlプログラムへのパスは各自の環境に合わせて下さい。
静的なHTMLのデータの作成
まずは/etc/httpd/conf.d/awstats.conf の最後に
Alias /awreport /webdata/awreport/kinryo
1日1回データーを作ります。そのスクリプトは
#!/bin/sh
site=$1
DirReport=$2
reportbuild() {
# AWStatsデータベース更新中断時ロックファイル残存対処(ここから)
if [ -f /tmp/awstats.$site.lock ]; then
ps -p `cat /tmp/awstats.$site.lock |awk '{print $6}'`
if [ $? -ne 0 ]; then
echo /tmp/awstats.$site.lock removed >&2
rm -f /tmp/awstats.$site.lock
fi
fi
# AWStatsデータベース更新中断時ロックファイル残存対処(ここまで)
/usr/share/perl5/awstats_buildstaticpages.pl \
-awstatsprog=/webdata/awstats/awstats.pl\
-config=$site -update -lang=jp -dir=$DirReport \
-year=$YEAR -month=$MONTH -builddate=$YEAR$MONTH
# 個別ページリンク切れ対処(ここから)
sed -i "s/href=\"${site}/href=\"awstats.${site}/g" \
$DirReport/$YEAR$MONTH.html
# 個別ページリンク切れ対処(ここまで)
if [ "$YEAR$MONTH" = $(date +%Y%m) ]; then
mv $DirReport/awstats.$site.$YEAR$MONTH.html $DirReport/index.html
else
mv $DirReport/awstats.$site.$YEAR$MONTH.html $DirReport/$YEAR$MONTH.html
fi
}
ls $DirReport/* > /dev/null 2>&1
if [ $? -eq 0 ]; then
YEAR=`date --date '1 days ago' +%Y`
MONTH=`date --date '1 days ago' +%m`
for site in `ls -l /etc/awstats |grep -v ~$|cut -d' ' -f 11|sed -e '/^$/d'|cut -d . -f 2-4`
# ↑ 全virtual host名を抽出する
do
DirReport=/webdata/awreport/`echo $site|cut -d . -f 2`
reportbuild
done
else
DirAwstats=`grep ^DirData /etc/awstats/awstats.$site.conf|awk -F= '{print $2}'|tr -d \"`
# ↑ awstatsのデーターがあるdirectoryを抽出
for log in `ls $DirAwstats/awstats*.$site.txt`
do
YEAR=`echo $log|cut -d / -f 6|cut -d . -f 1|sed -e 's/awstats..\([^ ]*\)/\1/p' -e d`
MONTH=`echo $log|cut -d / -f 6|cut -d . -f 1|sed -e 's/awstats\([^ ]*\)..../\1/p' -e d`
reportbuild
done
fi
私の環境はvrtualhostが5個も走っているので、色々参考に考えましたが、まだ検証していないので、このスクリプトはまったく自信がありません。多分数ヶ所間違えていると思います。検証をしたら、この一文を取ります。
これをawstatsreport.shとして/rootにしまい、パーミッションを変更し、毎日零時にHTML作成スクリプトを走らせます。
# chmod 700 awstatsreport.sh
# echo "00 00 * * * root /root/awstatsreport.sh > /dev/null" > /etc/cron.d/awstatsreport
最後にhttp://centossrv.com/referer_spam.shtmlを参考にリファラースパムの設定をしておくが、virtual webが5つも動いており、図部手のwebに設定すると時間がかかりそうなので、apacheとawstatsのログからリファラースパムを除去するスクリプトは作っておきません。スパムを発見したら、/etc/httpd/conf.d/referer_spam.confに追記し、apacheをreloadすれば以降は記録されません。また追加したスパムは
SetEnvIfNoCase Referer (\.|/)sportliga\.net no_log
SetEnvIfNoCase Referer (\.|/)sugarkun\.com no_log
SetEnvIfNoCase Referer (\.|/)lorazepam\.pw no_log
SetEnvIfNoCase Referer (\.|/)alprazolam\.pw no_log
SetEnvIfNoCase Referer (\.|/)blesktatu\.ru no_log
SetEnvIfNoCase Referer (\.|/)tyudon\.com no_log
SetEnvIfNoCase Referer (\.|/)bag77\.ru no_log
SetEnvIfNoCase Referer (\.|/)mxhack\.ru no_log
SetEnvIfNoCase Referer (\.|/)error404\.000webhost\.com no_log
SetEnvIfNoCase Referer (\.|/)berrymall\.ru no_log
SetEnvIfNoCase Referer (\.|/)trazodone\.pw no_log
SetEnvIfNoCase Referer (\.|/)buyviagraonlineprof\.com no_log
SetEnvIfNoCase Referer (\.|/)fluoxetine\.pw no_log
SetEnvIfNoCase Referer (\.|/)randecan\.com no_log
SetEnvIfNoCase Referer (\.|/)telesvoboda\.ru no_log
SetEnvIfNoCase Referer (\.|/)kochanelli\.com no_log
SetEnvIfNoCase Referer (\.|/)alkorpkf\.ru no_log
SetEnvIfNoCase Referer (\.|/)pornotubexxx\.name no_log
SetEnvIfNoCase Referer (\.|/)chimiver\.info no_log
SetEnvIfNoCase Referer (\.|/)zolotoy-lis\.ru no_log
SetEnvIfNoCase Referer (\.|/)lovecs\.ru no_log
です。

ダイジェスト認証に関して、http://blogs.yahoo.co.jp/mazbeer/309776.htmlにおもしろい記事を見つけた。一度見てみるといい。
本題に入ろう。mod_deflateはデフォルトで導入されているので、その設定ファイルと作る
# gedit /etc/httpd/conf.d/deflate.conf
<Location />
# DEFLATEの有効化
AddOutputFilterByType DEFLATE text/html text/plain text/xml
# 送信先ブラウザがNetscape 4.xの場合はtext/htmlのみ圧縮
BrowserMatch ^Mozilla/4 gzip-only-text/html
# 送信先ブラウザがNetscape 4.06-4.08の場合は圧縮しない
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# 送信先ブラウザがMSIEの場合は全て圧縮する
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# プロキシサーバーが圧縮未対応ブラウザへ圧縮ファイルを送信しないようにする
Header append Vary User-Agent env=!dont-vary
</Location>
設定の反映
# service httpd reload

ここも私のバイブルであるhttp://centossrv.com/apache-ssl.shtmlを参考
mod_sslのインストール
# yum -y install mod_ssl
ディレクトリーを移動する
# cd /etc/pki/tls/certs/
サーバー用証明書有効期限を1年から10年に変更
# sed -i 's/365/3650/g' Makefile
サーバー用秘密鍵・証明書作成
# make server.crt
前略
Enter pass phrase: ← 任意のパスワードを入力、後で消去するので何でもいい※表示はされない
Verifying - Enter pass phrase: ← 入力したのパスワードを応答(確認)※表示はされない
中略
Enter pass phrase for server.key: ← 上記で応答したパスワードを応答※表示はされない
中略
Country Name (2 letter code) [GB]:JP ← 国名応答
State or Province Name (full name) [Berkshire]:Tokyo ← 都道府県名応答
Locality Name (eg, city) [Newbury]:Ota-ku ← 市区町村名応答
Organization Name (eg, company) [Default Company Ltd]:kinryokai.net ← サイト名応答(なんでもいい
Organizational Unit Name (eg, section) []: ← 空ENTER
Common Name (eg, your name or your server's hostname) []:kinryokai.net ← Webサーバー名応答
Email Address []:webmaster@kinryokai.net ← 管理者メールアドレス応答
# openssl rsa -in server.key -out server.key
ちなみに最近世間を騒がしたSSLの問題は(ここに詳しく説明がある)
openssl-1.0.1e-16.el6_5.7以上がインストールされればOKです。
確認は
# yum list installed | grep openssl

重要 2016-5-17追記:phpMyAdmin-4.2.2にはここによると4.2.7.1未満のバージョンにはクロスサイトスクリプティングの脆弱性が存在するそうです。
この設定は参考にせず、ここを参考にしてください
一様記事は残しておきます。
データーベースの操作をWEBから行う為にphpMyAdminのインストールをします。http://www.phpmyadmin.net/home_page/downloads.phpからphpMyAdmin-4.2.2-all-languages.tar.bz2をダウンロードしますが、WEBに無いみたい。現在は 4.2.6が最終ですが、これはmysql5.5が必要で、centos6.5のmysqlは5.1.73ですので、4.2.2ダウンロードしたいのでここをクリックしてください、ダウンロードできます。その後ダウンロードしたDIRに移り、
# tar jxvf phpMyAdmin-4.2.2-all-languages.tar.bz2
DIR名が長いので短く、
# mv phpMyAdmin-4.2.2-all-languages phpMyAdmin
これをWEBのドキュメントルートにコピーします(私はデフォルトからは変更しています)
# cp -r phpMyAdmin /webdata/public/kinryokai/
# cd /webdata/public/kinryokai/phpMyAdmin
# mv config.sample.inc.php config.inc.php
動作には下記が必要です。
# yum install php mysql php-mbstring php-mysql
動作チェックの為にブラウザにhttp://localhost/phpMyAdmin/index.php と入力しEnterで表示させる。(mysqli 拡張がありません。PHP の設定をチェックしてみてください。と表示されたら、php-mysql がインストールされていないか、インストール後 httpd をリスタートしていない)言語を確認し、ユーザー名とパスワードを(mysql-serverに設定している物)を入力後、実行をクリックすると表示された。だが、下の方にスクロールダウンすると
設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。
mcrypt 拡張をロードできません。PHP の設定を確認してください
phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。
と三つのエラーが表示されていた。
最初のエラーはhttp://www.la-nouveau.mydns.jp/wordpress/?p=99を参考にexpectをインストールし、mkpasswdを行う
# yum -y install expect
# mkpasswd -l 46
でもって、ここで表示されたランダムのパスワードをphpMyAdminの下にあるconfig.inc.phpに書き込めばOK。
二つ目はmcryptをインストールします。
# yum install php-mcrypt
この時、EPELレポジトリーが有効になっていないといけません。(サーバー制作 : 5:EPELレポジトリの導入を参照)
三つめはhttp://www.kakashi.biz/プログラム/phpmyadmin-環境保管領域が完全に設定されていないため、を参考にしましたが、
phpMyAdmin 上で、右ペインのインポートタブをクリックし、参照をクリックし、インストールしたexamplesの中にあるcreate_tables.sqlを指定し、実行(スクロースダウンしないと見えない)をクリックし、phpmyadminデーターベースをインポートします。ブラウザの再読み込みを行うと、左ペインにphpmyadminが出来ています。
phpmyadmin用のユーザーの作成及びconfigファイルの設定をしていきます。
まず右ペインのSQLタブをクリックし、
GRANT ALL ON phpmyadmin.* TO pma@localhost IDENTIFIED BY 'xxxxxxx';
(xxxxxxxは設定したいパスワード)を入力し、実行をクリックするとユーザーが作成されます。その確認は左ペインのmysqlをクリックするとテーブルが表示されますので、userをクリックすると、右ペインにユーザとしてpmaが出来ています。先ほどのconfig.inc.phpを変更します。
/* User used to manipulate with storage */
$cfg['Servers'][$i]['controlhost'] = '';
$cfg['Servers'][$i]['controlport'] = '';
$cfg['Servers'][$i]['controluser'] = 'pma';
$cfg['Servers'][$i]['controlpass'] = 'xxxxxxx';
/* Storage database and tables */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['table_uiprefs'] = 'pma_table_uiprefs';
$cfg['Servers'][$i]['tracking'] = 'pma_tracking';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
$cfg['Servers'][$i]['userconfig'] = 'pma_userconfig';
$cfg['Servers'][$i]['recent'] = 'pma_recent';
$cfg['Servers'][$i]['favorite'] = 'pma__favorite';
$cfg['Servers'][$i]['users'] = 'pma__users';
$cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
$cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
$cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
/* Contrib / Swekey authentication */
$cfg['Servers'][$i]['auth_swekey_config'] = '/etc/swekey-pma.conf';
変更部分のみ抜粋。xxxxxxxは今、設定したパスワード、$cfgで始まる行のコメントを外す。
phpMyAdminからログアウト後、ログインすればOK

やっとWEBサーバーの設定になりますが、まず必要なプログラムのインストール(apacheはデフォルトでインストール済み)
# yum -y install php php-mbstring mysql mysql-server php-mysql
2019-8-6 追記 CentOS 7の場合は mysql mysql-server の代わりに mariadb mariadb-server
作ろうとしているWEBはXOOPSを使用しておりますので、mysql関係が必要です。
ここを参照し/etc/httpd/conf/httpd.confの設定をしていく。最後の方のパーティションを作るあたりは今回は既に出来ているので、無視していい。
virtualhost の設定をする。
/etc/httpd/conf.d/virtualhost.conf に
NameVirtualHost *:80
# kinryokai
<VirtualHost *:80>
DocumentRoot /webdata/public/kinryokai
ServerName www.kinryokai.net
ServerAlias kinryokai.net
ErrorLog logs/kinryokai_error_log
CustomLog logs/kinryokai_access_log combined env=!no_log
<Directory "/webdata/public/kinryokai/upfiles">
SetEnvIf Referer "^http://www\.kinryokai\.net" ref_ok
order deny,allow
deny from all
allow from env=ref_ok
</Directory>
<Directory "/webdata/public/kinryokai/uploads">
SetEnvIf Referer "^http://www\.kinryokai\.net" ref_ok
order deny,allow
deny from all
allow from env=ref_ok
</Directory>
ScriptAlias /cgi-kinryo/ "/webdata/cgi-kinryo/"
<Directory "/webdata/cgi-kinryo">
AllowOverride None
Options None
SetEnvIf Referer "^http://www\.kinryokai\.net" cgi-kinryo_ok
order deny,allow
deny from all
allow from env=cgi-kinryo_ok
</Directory>
</VirtualHost>
又、 "/webdata/public/kinryokai/upfiles"と "/webdata/public/kinryokai/uploads" の設定はここに画像などを置いておくので、他のWEBからリンクを張られ、遅くなるのを防ぐ設定です。
もう一度 conf のチェック
# apachectl configtest
ここを参考にmysqlの設定、起動をしてください。
デフォルトではアップ出来るサイズが小さいので、/etc/php.iniを変更します。
post_max_size = 50M
upload_max_filesize = 50M
date.timezone = Asia/Tokyo ← 先頭の;を取るのを忘れずに
webサーバーの起動
# service httpd start
# chkconfig httpd on
今はテストなので/etc/hostsにこのサーバーのIPとURLを設定し、
ブラウザでwww.kinryokai.net にアクセスし、表示されればOK。
マイグレーション時にルーターの設定を変更し、このサーバーにフォワードする。

まだapacheなどの設定が終わっていませんが、作ったWEBサーバーがバックアップされるように設定をしていきます。
まずはwebサーバーでbaculaに必要なプログラムをインストール
# yum -y install bacula-client bacula-console
次に/etc/bacula/bacula-fd.confの設定
# gedit /etc/bacula/bacula-fd.conf
Director {
Name = bacula-dir
Password = "XXXX"
}
Director {
Name = bacula-mon
Password = "xxxx"
Monitor = yes
}
FileDaemon {
Name = web-fd ← bacula-dir.confの名前に合わせる
FDport = 9102 # where we listen for the director
WorkingDirectory = /var/spool/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}
# Send all messages except skipped files back to Director
Messages {
Name = Standard
director = bacula-dir = all, !skipped, !restored
}
# gedit /etc/bacula/bconsole.conf
Director {
Name = bacula-dir
DIRport = 9101
address = 192.168.xxx.xxx ← directorの動いているホストの指定をする
Password = "xxxxx"
}
bacula-fdをスタートしておく
# service bacula-fd start
# chkconfig bacula-fd on
*************
ここからバックアップサーバーの設定
/etc/bacula/bacula-dir にWEBサーバーを追加するが、追加する項目は
Job { Name = "Backup-web"
Job { Name = "Restore-web"
FileSet { Name = "Full web"
Client { Name = web-fd
の四つであるが、それぞれ他のサーバーの設定から容易に設定内容が見当がつくと思われるので、ここでは表示しない。ただ FileSet の設定には注意の事。私の場合は/webdataや/homeは別のパーティションをマウントしているので includeに設定が必要になる。
設定が終わったら、bcula-dir を再起動
# service bacula-dir restart
webサーバーの最初のバックアップをする
# bconsole
Connecting to Director localhost:9101
1000 OK: bacula-dir Version: 5.0.0 (26 January 2010)
Enter a period to cancel a command.
*run ← 緑は入力する文字
Automatically selected Catalog: MyCatalog
Using Catalog "MyCatalog"
A job name must be specified.
The defined Job resources are:
1: Backup-samba
2: Backup-kvm
3: Backup-web
4: BackupCatalog
5: Restore-samba
6: Restore-kvm
7: Restore-web
Select Job resource (1-7): 3
Run Backup job
JobName: Backup-web
Level: Incremental
Client: web-fd
FileSet: Full web
Pool: File (From Job resource)
Storage: File (From Job resource)
When: 2014-05-20 21:46:47
Priority: 10
OK to run? (yes/mod/no): yes
これでバックアップが始まり、最初なのでかなり時間がかかる。

ここを参照しクローンを作る。
次にこのサーバーにマウントする領域を設定していくが、このWEBサーバーの構成は
vda: ここにさらに領域が作られ、ルートが出来ている。
vdb: SWAP領域
vdc: /Downloadにマウントされる、他のサーバーと共有している。ここまではクローンで出来ている
vdd: /webdataにマウント、ここにWEBコンテンツ、mysqlのデーターなどが保存される。
vde: /homeにマウント、メールデーター(IMAP)の保存場所でもある
元のサーバーとIPなどがダブっているが、参照先にその変更方法もあるので済まして置く。
次にサーバーを起動し、/etc/fstab を設定、下記を最後に追記
/dev/vdd /webdata ext4 defaults 0 0
/dev/vde /home ext4 defaults 0 0
新しいdirectoryの作成とアトリビュートの設定
# mkdir /webdata
# chmod 777 /webdata
そして設定の反映
# mount -a
次は本来ならapacheの設定だが、私はサーバーのマイグレーションをやろうとしているので、データーのコピーが必要。
色々考えたがrsyncを使うことにした。今はテストの段階だが、いずれデーターが必要なのでrsyncで同期をして置くことにした。
完全にテストが終わり、マイグレーションを実施する直前に再度 rsysnc で同期を取る。
rsyncの使い方はここに詳しく解説がある
rsyncデーモンをコピー元で動かすか、コピー先で動かすか迷ったが、コピー先つまりこのサーバーで動かすことにした。
CentOSではrsyncのデーモン動作はxinetd経由で動かすのだが、インストール済みである。また/etc/xinetd.d/rsync もxinetdのインストール時に出来ている。
service rsync
{
disable = no ← noに変更
# flags = IPv6 ← ここはよく分からない
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
flags=IPv6の設定の意味がよく分からない。これを行うとIPv4とIPv6の両方アクセプトするのか(多分この意味と思うが)、IPv6だけで通信を行うのか不明なのでコメントアウトしておいた。
次にrsyncの設定ファイルを作る
# gedit /etc/rsyncd.conf
# Global options
uid = root
gid = wheel
use chroot = yes
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.xx.xx/24
hosts deny = *
dont compress = *.gz *.tgz *.zip *.pdf *.sit *.sitx *.lzh *.bz2 *.jpg *.gif *.png
# Module options
[webdata]
comment = rsync server
path = /webdata
auth users = root
secrets file = /etc/rsyncd.secrets
read only = no
[home]
comment = rsync server
path = /home
auth users = root
secrets file = /etc/rsyncd.secrets
read only = no
hosts allow = で接続出来るホストをローカルネットワークに限定している。(xx.xx は環境に合わせる)
パスワードファイルの設定 /etc/rsyncd.secrets
root:xxxxxxxxxx
ユーザー名:パスワードのように設定。
私はrsyncd.confに別のユーザーを指定したが出来なかった。rootにすると出来るようになった。又、このパスワードはOSのパスワードとは関係ない、勝手に決めてよい。
xinetdを再起動すればRQが来た時、動作する
# service xinetd restart
xinetdの再起動までやったが、ここはdaemonモードでやりたいので、rsyncをデーモンでスタートする
# rsync --daemon
ちなみに停止はPIDを調べてkillする
# ps auxww | grep 'rsync --daemon'
root 2183 0.0 0.0 107624 536 ? Ss 12:52 0:00 rsync --daemon
root 2328 0.0 0.0 107464 892 pts/0 S+ 13:03 0:00 grep rsync --daemon
***************
ここからはコピー元のサーバーの設定。
パスワードファイルを作る。これはなくてもパスワードを聞いてくるのですが、スクリプトを組、cronで定期的に実行するにはパスワードを聞いて来ては困るので、それに備え作っておく。
# gedit /etc/rsync.passwd
xxxxxxx
とパスワードだけを書いておくそうな。
rsyncのデーモン動作の解説WEBには複数のユーザー設定もあるが、ユーザー名の指定が無いがどう動作するのかなー?
早速コピーをするが、万が一コピー元とコピー先を間違えると全部消えるので、まずはドライラン(実際にコピーはせずテストのみする)
rsyncの書式は rsync オプション コピー元 コピー先なので
# rsync -avn --password-file=/etc/rsync.passwd /webdata/ rsync;//192.168.xx.xx/webdata ← xoopsが悪さをするので : を ; に変えてある
もし、ユーザー認証で跳ねられる時は、rsync.passwd とrsyncがデーモンで動いているホストの rsyncd.secrets のパーミッションが600になっているか確認。
大丈夫そうなので
# rsync -av --password-file=/etc/rsync.passwd /webdata/ rsync;//192.168.xx.xx/webdata ← xoopsが悪さをするので : を ; に変えてある
もちろんIPは今制作中のホスト。
最初はrsyncd.confの auth users = root と secrets file = /etc/rsyncd.secrets をコメントアウトし、テストした方が問題が切り分けやすい。
もちろん --password-file=/etc/rsync.passwd は付けない
同様に/homeもコピーするがその前に元のWEBサーバーに登録してあるユーザーをこのサーバーにも登録しておく。ただしUIDを同じにしないといけない。
書式:useradd オプション 登録するユーザー名
私はこのWEBサーバーにFTPで接続を許すユーザーがおり、homeディレクトリーが違う。そのようなユーザーには
# useradd -u 元のWEBと同じUID -d 指定するディレクトリー ユーザー名
新規ユーザー作成ではGIDも指定したUIDと同じだが、usermodでUIDを変更したら、group IDも変更しておく
# groupmod -g 元のWEBと同じGID グループ名
次に作ったユーザーのパスワードを設定
書式:passwd ユーザー名
で2回同じパスワードを入れ設定する。
必要であれば所有者の変更(UIDが違う場合)
書式:chown -R ユーザー名:グループ名 設定するdirectoryのフルパス
その後rsyncで/homeをコピーする
****************
その後、制作中のホストに戻っておく。

このサーバーの領域の構成は
vda: ここにさらに領域が作られ、ルートが出来ている。
vdb: SWAP領域
vdc: /Downloadにマウントされる、他のサーバーと共有している。ここまではクローンで出来ている
vdd: /SmbDataにマウントされる。後で追加するsambaを使ったアクティブディレクトリーの領域。
vde: /Backupにマウントされ、全てのサーバーのバックアップしたデーターの保存場所
まず、クローンで作ったサーバーを停止して置き、ここを参照してこのサーバーにマウントする領域を追加していきます。
次にサーバーをスタートし、追加したパーティションをマウントするために fstab を設定
# gedit /etc/fstab
/dev/vdd /SmbData ext4 defaults 0 0
/dev/vde /Backup ext4 defaults 0 0
この2行を最後に追記(もちろん vdd vde は環境により変化)
マウントするdirectoryを作る
# mkdir /SmbData
# mkdir /Backup
マウントする
# mount -a
ここからはBacula(バックアップ)に挑戦に従い設定をしていきます。番号順に設定してね。
ただし、サブホストの webはまだないので3:bacula-dirの設定のbacula-dir.confの
Name="Backup-web", Name="Restore-web", Name=web-fdに関係する設定は#をつけコメントアウトにしておくこと。FileSetのFull webも関係するが、あっても問題ないと思うのでそのまま。
無事テストでバックアップが出来た。
このサーバーは後でアクティブディレクトリーを使ったファイルサーバーを入れるが、とりあえず、他のサーバーを作る。

やっとベースとなるサブホストの設定が終わったので、いよいよ本チャン用のサブホストを作ります。このサブホストは後で、samba4をインストールし、アクティブディレクトリーも構築しますが、まずはバックを作ります。ベースとなるサブホストは停止して置き、
画像1の様に、仮想マシンマネージャーで、作成した雛形用のサブホストを右クリックし、クローン(C)をクリックすると、新しいウィドウが開き(左側の画像)そこに表示された領域をクリックすると、詳細...が現れ、それをクリックすると、画像2が表示されますので、参照をクリックし、割り当てたい領域を選択後、OKをクリックし、同様に他の領域に付いても行います。私は全ての領域はLVMでそれぞれ作成し、Dowloadの領域は全てのサブホストで共有する設定にしてあります。
デフォルトでは親ホストの領域の中に、ディスクイメージを作るような設定なので、それをする為には、親ホストの領域をその分を見込みかなり大きく割り当てておく必要があります。
うっかりサブホストの設定をデフォルトのままにしてしまったので、混乱を防ぐため、サブホストの名前を変更します。クローンで出来たサブホストを選択後、開くアイコンをクリックし、iのアイコンをクリックし、右ペインでOverviewが選択されていれば、右ペインの名前の所で、設定したい名前を変更できます。
クローンで出来たサブホストは元のサブホストとhostname,IPアドレスなどがダブっていますので、変更をします。元のサブホストは停止したまま(IPアドレスが同じなので問題が出る)クローンされたサブホストを右クリックで実行します。実行中にAlt+d で詳細を表示させて見ていると、
Bringing up interface eth0: Device eth0 does not seem to be present, delaying initialization [FAILED]
まずはこの問題を解決する。rootでログインし、/var/log/dmseg 開き ethで検索し調べると udev: renamed network interface eth0 to eth1 があった。
これでググると http://d.hatena.ne.jp/ngyuki/20110805/p1 に回答があった。
さっそく /etc/udev/rules.d/70-persistent-net.rules をどっかに移し、再起動すると、又同じエラーが出ている。
/etc/udev/rules.d/70-persistent-net.rules を開いてみると
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:81:1f:bd",
ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" ← eth1になっていたのでeth0に変更。実際は一行
再起動すると今度は
Bringing up interface eth0: Device eth0 has different MAC address than expected, ignoring. [FAILED]
DEVICE=eth0
TYPE=Ethernet
#UUID=1f3d73ed-edc1-4939-a4d7-946d3bbd050a ← オリジナルのサブホストとかぶるのでコメントアウト
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=none
#HWADDR=52:54:00:49:9E:37 ← オリジナルのサブホストとかぶるのでコメントアウト
IPADDR=192.168.xx.xx ← ついでに設定したいIPにする
PREFIX=24
GATEWAY=192.168.xx.xx
#DNS1=192.168.xx.xx ← DNSは/etc/resolv.confで設定している
#DOMAIN=kinryokai.net
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
次にホスト名を変更する。/etc/sysconfig/networkを
NETWORKING=yes
HOSTNAME=xxxx.kinryokai.net ← 設定したいホスト名に
GATEWAY=192.168.xx.xx ← IPアドレスは伏せてあります
# service network restart
ブラウザを立ち上げ、外部のWEBが見れる事を確認。
VNCのポートもダブっているので、外部から接続するために、ポート番号を変更しておく(LAN内部からだけならIPが違うので問題ない)(設定ファイルは /etc/services (ここを参照)。私のfirewallの設定はローカルネットワークからのRQは受け付けるように設定しているので問題ないが、そうでない時か、外部からVNCを受ける場合にはfirewallの設定で、VNCにアサインしたTCPポートを開けておく事。
このサブホストで使うディレクトリーをここを参照して作る。私はファイルサーバーのデーターの保存場所(/SmbData)とバックアップデータの保存場所(/Backup)を別パーティションとして作った。
その後再起動したらVNC経由でログインしてみる。
やっとこれで本題に入れる。