スポンサードリンク

2012年11月25日日曜日

WindowsからのSFTP接続

最近Macからではなく、Windowsからの接続する機会が多い。

Windows8が世間では不評だが、個人的には気に入っている。
Appleとはそろそろ決別し、Microsoftへ回帰しようと思っている。
選択と集中!
Macはデザインはいいが、Windowsと比べると、
自由さや生産性に欠ける。(単に自分が不慣れなだけか!?)

まぁそういうことはさておいて、件名の件。

FTPはセキュリティ的に危ういので、SFTPを基本としている。
でもWindowsで選択できるSFTPクライアントツールは、
WinSCPが支持されているようだが、個人的には、FileZilla。
WinSCPは、鍵接続にPutty用に変換された鍵しか使用できず、
別途変換しろと注意されて終わりだが、
FileZillaは、一応同じように注意するが、その後、自動変換出力してくれる。※出力ファイル名と出力先を指定する必要がある。

このファイルをWinSCPで使用することも可能。
Puttyを使用したことがある人で変換方法知っている人はよいが、
もし同じように困っている人は、FileZillaをお試しください。

以上

SSHサーバを鍵認証のみの接続にする

SSHサーバへの外部からのアクセスを安全にする。
その備忘録。

内容としては、以下。
・パスワード空のときは接続できない
・鍵接続のみ。パスワードによる接続は禁止。
・ROOTでの接続は不可能とする。

1.rootになる
$su -

2.SSHサーバ設定ファイルを開く
#vi /etc/ssh/sshd_config

3. 設定ファイルの以下キーワードを有効にする。
 ※先頭に#がある場合は、削除する。#はコメントアウトの意味なので。

・空パスワードを禁止にする設定へ変更する
PermitEmptyPasswords no

・ROOTログイン禁止
 PermitRootLogin no

・パスワードによるアクセス禁止(=鍵認証のみ)
PasswordAuthentication no

以上 

2012年8月25日土曜日

SELinuxの無効・有効化

SELinuxって本当に厄介だ。
SELinuxは、ルートに対してもフォルダのアクセス制限を設ける機能らしい。
万が一侵入やサーバを乗っ取られても被害を最小限に抑えることが目的らしい。

でも!サーバを構築する上で非常に厄介。

たとえば、Windows共有サーバ=Sambaサーバを構築しても
SELinuxが有効であれば、普通に構築するだけではサーバにアクセスはできても
ファイルの読み書きなどができない・・・。

サーバ構築の際、動作確認するためには、SELinuxを一時的に無効にしたほうが
いいときもある。

そこでその方法について備忘録。

■SELinuxの状態確認
#getenforce
Enforcing 有効
Permissive   無効

■SELinuxを有効化(次回OS再起動まで有効)
#setenforce 1

■SELinuxを無効化 (次回OS再起動まで有効)
#setenforce 0

■SELinuxを永久に有効化
#vi /etc/selinux/config

SELinux=enforcing

■SELinuxを永久に無効化
#vi /etc/selinux/config

SELinux=disabled

以上

2012年8月22日水曜日

動画・写真配信サーバ構築(DLNAサーバ)

写真や動画を一元管理するため、DLNAサーバを構築する。

DLNAサーバとは、写真や動画をネットワーク経由でストリーミング配信するもの。
このサーバを設置すると、iPhoneやiPad、パソコンでファイルを見ることができる。

その備忘録。

< 注意 >
mediatombをyumでインストールするためには、まずRPMforgeリポジトリを追加する
必要があるらしいが、これが結構厄介。

priority=1と設定する必要があるが、mediatombインストール後、mediatombの設定変更前に
priority=1はコメントアウトするようにしたほうがよい。
こうしないと、それ以後、yumを使ってupdateやinstallができなくなる。
また、mediatombインストールし設定変更後に上記priority=1をコメントアウトして、
yum updateを行うと折角設定したものが、初期化されてしまい、また設定し直し・・・
ということになりかねない。


■RPMfrogeリポジトリ導入

注意!! CentOS6の場合は、以下だがCentOS5の場合は少し違うので注意。

1. yumのplugin-prioritiesをインストールする。

#yum -y install yum-plugin-priorities


2. 標準リポジトリ設定ファイル編集

#vi /etc/yum.repos.d/CentOS-Base.repo

↓ ----- ここから設定ファイル本文
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
priority=1

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
priority=1

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
priority=1
↑ ----- ここまで設定ファイル本文

3. rpmforgeの最新版をダウンロードする。
注意!! 最新版を確認し、URL指定すること。

#wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm


4. RMPForgeリポジトリをインストールする

#rpm -ivh rpmforge-release-0.5.2-2.el6.rf.i686.rpm


5.ダウンロードしたファイルを削除する

#rm -f rpmforge-release-*


6.rpmforge-releaseをアップデートする

#yum -y update rpm forge-release



■DLNAサーバソフトmediatombインストール


1. mediatombをダウンロード

    本家サイト http://mediatomb.cc/pages/download#source_codeから最新のバージョンを確認。
(2012.08.21時点の最新をダウンロード)

#wget http://jaist.dl.sourceforge.net/sourceforge/mediatomb/mediatomb-0.12.1.tar.gz


2. ダウンロードしたMediatombパッケージを展開

#tar zxvf mediatomb-0.12.1.tar.gz


3. /usr/src/にredhatディレクトリを作成

#mkdir /usr/src/redhat


4. /usr/src/redhatにSPECSディレクトリを作成

#mkdir /usr/src/redhat/SPECS


5. /usr/src/redhatにSOURCEディレクトリを作成

#mkdir /usr/src/redhat/SOURCE


6. 権限を付与

#chmod 755 -R /usr/src/redhat


7. ダウンロードしたファイル mediatomb.specをコピー

#cp mediatomb-0.12.1/mediatomb.spec /usr/src/redhat/SPECS/


8.ダウンロードしたファイルmediatomb-0.12.1.tar.gzをコピー

#cp mediatomb-0.12.1.tar.gz /usr/src/redhat/SOURCES/
#cp mediatomb-0.12.1.tar.gz /root/rpmbuild/SOURCES/


9. mediatomb.specをバックアップ待避

#cp /usr/src/redhat/SPECS/mediatomb.spec /usr/src/redhat/SPECS/mediatomb_orignal.spec


10. mediatomb.specのBuildRequiresのモジュール定義を編集

変更前
BuildRequires: sqlite-devel, mysql-devel, libexif-devel, taglib-devel, file-devel, js-devel, zlib-devel

変更後
BuildRequires: sqlite-devel, mysql-devel, libexif-devel, taglib-devel, file, js-devel, zlib-devel, expat-devel


11. MediaTombのRPMを作成する

#rpmbuild -bb --clean /usr/src/redhat/SPECS/mediatomb.spec


※ここでもしビルド依存性の失敗でエラーが発生した場合、
   必要なモジュールをすべてyumインストールすればよい。
   その後、再度11.のRPM作成を実行。

ex) taglib-devel is needed by ... とエラー表記されている場合
#yum -y install taglib-devel


12.MediaTombのRPMインストール

#yum -y localinstall --nogpgcheck /root/rpmbuild/RPMS/x86_64/mediatomb-0.12.1-1.el6.x86_64.rpm


13.後始末(インストールに使用したファイルを削除)

#rm -f /root/rpmbuild/RPMS/x86_64/mediatomb-*
#rm -rf mediatomb-0.12.1
#rm -f mediatomb-0.12.1.tar.gz


14.  2. 標準リポジトリ設定ファイル編集のpriority記述をコメントアウトする。(重要)


15. ファイアウォールのポート50500 TCP/UDP許可する。



■MySQLデータベース作成



1. MySQLにログイン

#mysql -u root -p


2. mediatombデータベースを作成

mysql > create database mediatomb;


3.mediatombユーザ作成

mysql > grant all privileges on media tomb.* to mediatomb@localhost identified by 'パスワード';


4. MySQLログアウト

mysql > exit;


5.mediatombデータベース初期設定

#mysql -p mediatomb < /usr/share/mediatomb/mysql.sql
Enter password:



■Mediatomb設定・稼働開始


1. mediatomb設定ファイルを待避

#cp /etc/mediatomb.conf /etc/mediatomb_original.conf


2.MediaTombの設定ファイルを変更する

#vi /etc/mediatomb.conf

↓ ----- ここから設定ファイル本文

MT_INTERFACE="NOT_SET"
MT_INTERFACE="eth0" ← ネットワークインタフェース名を指定
↑----- ここまで設定ファイル本文


3. config.xmlを作成するため起動し、即終了させる。

#service mediatomb start; service mediatomb stop


4. MegiaTombのconfig.xmlファイルを編集する。

#vi /etc/mediatomb/config.xml

↓ ----- ここから設定ファイル本文

<!-- ブラウザアクセス時にログイン認証する -->
      <accounts enabled="yes" session-timeout="30">
        <account user="shuji" password="shujinewhara19805587"/>
      </accounts>
<!-- ここまで -->


    <storage>
<!--sqliteを無効化-->
      <sqlite3 enabled="no">
        <database-file>mediatomb.db</database-file>
      </sqlite3>
<!--mysql有効化-->
      <mysql enabled="yes">
        <host>localhost</host>
        <username>mediatomb</username>
<!--MySQL mediatombユーザのパスワードを指定-->
        <password>パスワード</password>
        <database>mediatomb</database>
      </mysql>
    </storage>
<!--PS3を使う人はここをyes に-->
    <protocolInfo extend="yes"/><!-- For PS3 support change to "yes" -->

  <import hidden-files="no">
        <filesystem-charset>UTF-8</filesystem-charset>
        <metadata-charset>CP932</metadata-charset>
        <extension-mimetype ignore-unknown="no">
        <map from="jpg" to="image/jpeg"/>
        <map from="jpeg" to="image/jpeg"/>
        <map from="gif" to="image/gif"/>
        <map from="png" to="image/png"/>
        <map from="m4v" to="video/mp4"/>
        <map from="mp4" to="video/mp4"/>
        <map from="mpg" to="video/mpeg"/>
        <map from="mpeg" to="video/mpeg"/>
        <map from="mp3" to="audio/mpeg"/>
        <map from="ogg" to="application/ogg"/>
        <map from="asf" to="video/x-ms-asf"/>
        <map from="asx" to="video/x-ms-asf"/>
        <map from="wma" to="audio/x-ms-wma"/>
        <map from="wax" to="audio/x-ms-wax"/>
        <map from="wmv" to="video/x-ms-wmv"/>
        <map from="wvx" to="video/x-ms-wvx"/>
        <map from="wm" to="video/x-ms-wm"/>
        <map from="wmx" to="video/x-ms-wmx"/>
        <map from="m3u" to="audio/x-mpegurl"/>
        <map from="pls" to="audio/x-scpls"/>
        <map from="flv" to="video/x-flv"/>
        <!-- Uncomment the line below for PS3 divx support -->
<!--PS3でdivX対応させる場合はここをコメントアウトをはずす-->
        <map from="avi" to="video/divx"/>
        <!-- Uncomment the line below for D-Link DSM / ZyXEL DMA-1000 -->
        <!-- <map from="avi" to="video/avi"/> -->
      </extension-mimetype>
↑ ----- ここまで設定ファイル本文


5. Mediatomb起動

#service mediatomb start


6. Mediatombサービス自動起動設定

#chkconfig mediatomb on


■MediaTombサーバで公開するファイルを選択


1. ブラウザのアドレスバーからMediaTombにアクセス

http://サーバのアドレス:50500



2. ログイン画面が表示される




3. ユーザ名・パスワードを入力

MegiaTombのconfig.xmlファイルのaccountタグ設定と同一を入力する


4. MediaTombの画面が表示される




5. 公開するファイルを選択

左上のFileSystemをクリックする。
サーバのディレクトリツリーが表示される。
任意のディレクトリまたはファイルを選択し、右上のプラスボタンで追加する。



6. 選択したファイルが公開されているか確認する。


左上のDataBaseをクリックする。
追加したディレクトリのツリーと、
写真を追加したらPhotos, 動画はMovieなどの表示がされていればOK.




ちなみに、公開したファイルを左クリックするとダウンロードできます。


■MediaTombクライアントで公開ファイルを閲覧

iPhoneやiPadで DLNAアプリをインストールして閲覧できます。
確認したところ、まだあまり使いやすいアプリはないみたいです・・・。

またなぜかサーバ側のMediaTombを再起動しないと、クライアント側で、
MediaTombの検索に失敗してしまうみたい・・・。

サーバ側の問題!?またこの件については解決次第追記します。



以上




2012年8月21日火曜日

内部向DNSサーバ

自宅サーバを用意したものの、LAN内からドメインでのサイトアクセスができない。
coregaのルータを使用しているときは何も気にせずアクセスできていたが、
NECのAtermにかえてからできなくなった。

内部向けDNSサーバを構築することで、内部からでもwwwアクセスできるらしい。
そのときの備忘録。

なお、構築に関して、こちらのサイトを参考にさせていただきました。
とても参考になりました。
http://centossrv.com/bind.shtml

ホスト名:websaba.com 
内部IP:192.168.0.20
DNSソフト : BIND
内部向けDNSサーバとして構築し、外部向け設定は省略する。(※1)

すべての操作はrootで行う。
#は、rootユーザでの操作を意味する。


朱色はコメントアウト箇所
赤色は追加箇所
青色は変更箇所

注意点として、
設定ファイルの"}"のあとは、";"(セミコロン)が必要なので注意!


1. BIND一連のソフトをインストールする

#yum -y install bind bind-chroot caching-nameserver


2. chroot化(※2)のためスクリプトを作成する。

#vi bind-chroot-admin

↓ ----- ここからスクリプト本文
#!/bin/sh
# bind-chroot install check
rpm -q bind-chroot > /dev/null 2>&1
[ $? -ne 0 ] && echo bind-chroot not install && exit 1

# bind-chroot enabled
sed -i '/^ROOTDIR=/d' /etc/sysconfig/named
echo ROOTDIR=/var/named/chroot >> /etc/sysconfig/named

# file copy
filelist=`mktemp`
rpm -ql bind|grep ^/etc >> ${filelist}
rpm -ql bind|grep ^/var >> ${filelist}
for file in `cat ${filelist}`
do
  # directory make
  if [ -d ${file} ]; then
      DIRNAME=/var/named/chroot${file}
      [ ! -d ${DIRNAME} ] && mkdir -p ${DIRNAME}
  fi
  # file copy
  if [ -f ${file} ]; then
      DIRNAME=/var/named/chroot`dirname ${file}`
      [ ! -d ${DIRNAME} ] && mkdir -p ${DIRNAME}
      /bin/cp -a ${file} ${DIRNAME}
  fi
done
rm -f ${filelist}

chown named:named /var/named/chroot/var/named/data
chmod 770 /var/named/chroot/var/named/data
chown named:named /var/named/chroot/var/named/dynamic
echo "Finished."
exit
↑ ----- ここまでスクリプト本文


3. chrootスクリプト(2.で作成したスクリプト)を実行する

#sh bind-chroot-admin


4. BIND設定ファイル書き換える前に別名保存(待避)させておく。

#cp /var/named/chroot/etc/named.conf /var/named/chroot/etc/named_original.conf


5. BIND設定ファイル書き換える。

#vi /var/named/chroot/etc/named.conf


↓ ----- ここからBIND設定ファイル本文
options {
        #listen-on port 53 { 127.0.0.1; };
        #listen-on-v6 port 53 { ::1; };
        version         "unknown"; ← bindのバージョン情報の非表示化
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        #サーバー及び、サーバーと同じネットワーク内のホストからの問合せのみ許可する。
        allow-query     { localhost; localnets; };
        recursion yes;
        
        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";
        forwarders{
#ルータ経由の場合は、ルータのアドレスを設定する
                192.168.0.1;
#プロバイダのDNSサーバを設定する ex)フレッツ東日本の場合
                220.210.194.67;
                220.210.194.68;
        };
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
#error (connection refused) resolvingエラーログの出力抑止
        category lame-servers { null; };
};
#内部向け設定
view "internal" {
        match-clients { localnets; };
        match-destinations { localnets; };

zone "." IN {
        type hint;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
        include "/etc/named.websaba.com.zone";
};
↑ ----- ここまでBIND設定ファイル


6.内部向けDNS用のゾーン定義ファイルを作成する

#vi /var/named/chroot/etc/named.websaba.com.zone

↓ ----- ここから設定ファイル本文

zone "websaba.com" {
        type master;
        file "websaba.com.db";
};
zone "0.168.192.in-addr.arpa" {
        type master;
        file "0.168.192.in-addr.arpa.db";
};
↑ ----- ここまで設定ファイル本文


7. IPv4のみ有効にする(error network unreachable resolvingエラーログの出力抑制)

#echo OPTIONS="-4" >> /etc/sysconfig/named


8. ルートゾーン最新化

#dig . ns @198.41.0.4 +bufsize=1024 > /var/named/chroot/var/named/named.ca


9. ルートゾーン自動更新スクリプト作成

#vi named.root_update


↓ ----- ここからスクリプト本文
#!/bin/bash

new=`mktemp`
errors=`mktemp`

dig . ns @198.41.0.4 +bufsize=1024 > $new 2> $errors

if [ $? -eq 0 ]; then
    sort_new=`mktemp`
    sort_old=`mktemp`
    diff_out=`mktemp`
    sort $new > $sort_new
    sort /var/named/chroot/var/named/named.ca > $sort_old
    diff --ignore-matching-lines=^\; $sort_new $sort_old > $diff_out
    if [ $? -ne 0 ]; then
        (
         echo '-------------------- old named.root --------------------'
         cat /var/named/chroot/var/named/named.ca
         echo
         echo '-------------------- new named.root --------------------'
         cat $new
         echo '---------------------- difference ----------------------'
         cat $diff_out
        ) | mail -s 'named.root updated' root
        cp -f $new /var/named/chroot/var/named/named.ca
        chown named. /var/named/chroot/var/named/named.ca
        chmod 644 /var/named/chroot/var/named/named.ca
        /etc/rc.d/init.d/named restart > /dev/null
    fi
    rm -f $sort_new $sort_old $diff_out
else
    cat $errors | mail -s 'named.root update check error' root
fi
rm -f $new $errors
↑ ----- ここまでスクリプト本文


10. ルートゾーン自動更新スクリプトの実行権限を変更

#chmod 700 named.root_update


11. ルートゾーン自動更新スクリプト自動実行 (月次実行)

#cp named.root_update /etc/cron.monthly


12.内部向け正引きゾーンデータベース作成

#vi /var/named/chroot/var/named/websaba.com.db


↓ ----- ここから設定ファイル本文
$TTL    86400
@       IN      SOA     websaba.com.  root.websaba.com.(
                                      2011062001 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN NS     websaba.com.
        IN MX 10 websaba.com.
@       IN A     192.168.1.20 ← サーバーのプライベートIPアドレスを指定(websaba.com用)
*       IN A     192.168.1.20 ← サーバーのプライベートIPアドレスを指定(*.websaba.com用)
↑ ----- ここまで設定ファイル本文


13.内部向け逆引きゾーンデータベース作成

#vi /var/named/chroot/var/named/0.168.192.in-addr.arpa.db


↓ ----- ここから設定ファイル本文
$TTL    86400
@       IN      SOA     websaba.com.  root.websaba.com.(
                                      2011062001 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS    websaba.com.
20             IN      PTR   websaba.com.  ← 行先頭にサーバのLANの最下位アドレスを指定すること
↑ ----- ここまで設定ファイル本文


14.bind再起動

#/etc/rc.d/init.d/named restart
or
#service named restart


15. ルータの53番ポートをTCP/UDP共に解放する。
ここはルータ毎の設定によるので、詳細は省略。


16. iptablesでファイアウォール構築している場合は、53番を解放する。

17. 自宅内のパソコンのDNS設定を変更する

DNSサーバのIPが192.168.0.20
ルータのIPが192.168.0.1
の場合、
DNSに上記IPを割り当てればよい。

結果、自宅内部からwwwドメインで自分のサイトにアクセスできるようになった。


(※1)
      著者の環境は固定IPではないため、内部向けのDNSサーバとする。
      固定IPでなければ外部向けDNSサーバは構築できないようです。


(※2)
      chrootとは、もしサーバが乗っ取られた場合にそのパス以外にアクセスできない
ようにする機構のこと。

ファイアウォールをコマンドで実行する

ファイアウォールをコマンドで実行する方法の備忘録。

iptablesが正体。
IPv6用にip6tablesもあるのでそれも同時に行う方がベター。

ルートユーザで行うこと。

■iptablesの起動
#/etc/rc.d/init.d/iptables restart


■ip6tablesの起動
#/etc/rc.d/init.d/ip6tables restart

■iptables ip6tablesの自動起動設定
#chkconfig iptables on
#chkconfig ip6tables on

■自動起動設定の確認
#chkconfig --list iptables
#chkconfig --list ip6tables

※3 4 5 が:onとなっていればよい

 確認には、別な方法もある
 chkconfig | grep iptables
 chkconfig | grep ip6tables

以上

2012年7月21日土曜日

CSVファイルをMySQLに取り込む

ソフトで毎回MySQL DBをオープンして登録するより、
ファイルに一気に出力し、そのあと一気にMySQLに登録させる方が早いことに気づいた。
その備忘録。

MySQL コマンド
load data local infile "CSVファイルのパス" into table テーブル名 fields terminated by ','

使用例)
CSVファイルは、/homeディレクトリ直下にData.csvがある。
CSVファイルは、,で区切られている。
登録するテーブルは、DataTableとする。

mysql > load data local infile /home/Data.csv into table DataTable fields terminated by ','; [ENTER]

※注意点
CSVファイルの,区切りで区切られている順に登録テーブルの列が定義されていること。
CSVファイルの文字列は、"" または '' で囲まれていないこと。
もし、""で囲まれている場合は、以下をSQLの最後に追加すればよい。

enclosed by '"';

以上

2012年7月1日日曜日

自宅サーバ再構築全手順

自宅サーバを一から構築するときの全手順をここにまとめる。
構築するサーバは、HTTPDサーバ、MySQLサーバ、SSHサーバとする。

おおまかな手順として、以下となる。

A. (旧サーバ) データ・設定のバックアップ
B.  OSの再インストール
C. (新サーバ) 初期設定
D. (新サーバ) サーバに必要な設定・ソフトウェアのインストール・調整
E. (新サーバ) 旧サーバデータの復元


A. (旧サーバ) データ・設定のバックアップ

バックアップ場所は、外付けHDDのBackupフォルダ(/media/HDD/Backup)とする。

1.MySQLのデータベースを全バックアップする。
 #su -
 #mysqldump --opt -u root -p --all-databases > /media/HDD/Backup/mysqlbackup.dump

2.MySQLの設定ファイルをバックアップする
  ※アクセス権もそのままでコピーしておけばそのまま使える
etcディレクトリ作成
#mkdir /media/HDD/Backup/etc
元設定ファイルをコピー
#cp /etc/my.cnf /media/HDD/Backup/etc/my.cnf

3.PHPの設定ファイルをバックアップする
#cp /etc/php.ini /media/HDD/Backup/etc/php.ini

4.HTTPの設定ファイルをバックアップする
#mkdir -R /etc/httpd/conf
#cp /etc/httpd/conf/httpd.conf /media/HDD/Backup/etc/httpd/conf/httpd.conf

5.その他、サイトサービスに関係するソフト・ファイルを退避する

B.  OSの再インストール

1.CentOS6のイメージを焼いたCDをPCにセットし、CDブートさせる。

2. 言語は、英語を選択する

3.HDDはカスタムレイアウトにする。

C. (新サーバ) 初期設定

1. ファイアウォールの以下のポート許可する。
    SSH      (22)      TCP/UDP
    smtp      (25)      TCP/UDP
    POP3    (110)    TCP/UDP
    VNC     (5900)  TCP/UDP
    MYSQL (3306) TCP/UDP
    IMAP    (143)    TCP/UDP

2. ネットワーク設定
     DHCP固定割当設定の通り、IPが割り当てられ、インターネットに
接続できるか確認。

3. PC再起動

D. (新サーバ) ソフトウェアのインストール・調整

※以降、SSH接続による作業
   ただし、公開鍵作成までは外部アクセスではなく、内部から設定すること。

1. 公開鍵を作成する

   (1). RSA暗号方式の鍵を生成する。
     $ssh-keygen -t rsa (ENTER)

   (2). そのままENTERキーを押す。

   (3). パスフレーズを入力する。
       (これはクライアントがアクセスするときに入力するフレーズになる。)

   (4). 再度パスフレーズを入力する。










  (5). (ホームディレクトリの.sshフォルダに鍵ファイルが作成されるので)
       鍵ファイル(id_rsa.pub)の名称をauthorized_keysに名称変更する。

      $mv id_rsa.pub authorized_keys

  (6). authorized_keysファイルのアクセス権を変更する。

      $chmod 600 authorized_keys


  (7) . id_rsaファイルは、SSHクライアントにて使用するので、
       クライアントのマシンで何らかの方法により渡すことで、
      外部アクセス時でも安全にSSH接続できるようになる。

2. HTTPDインストール・設定
   (1)  rootになる。
         #su -
   (2) インストールコマンドを実行 (既にインストールされている場合はそのまま終わるのでOK)
        #yum -y install httpd
 
   (3) デフォルトのHTTPD設定ファイルのhttpd.confを一応退避しておく。
        #cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf_org

   (4)バックアップ元からhttpd.confを復元する。(これで旧サーバと同じ設定になる)
       #cp /media/HDD/Backup/etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf

   (5)HTTPDサービスを開始 (本当は、startでよいが、一応一度停止させるため)
      #service httpd restart
 
   (6)OS起動時に自動的にサービス起動する設定
     #chkconfig httpd on

   (7) (6)設定の確認 (3, 5でONになっているのであればOK)
     #chkconfig | grep httpd

 3. MYSQLインストール・設定
 (1) MySQLインストール

     #yum -y install mysql-server

 (2)デフォルトのMySQL設定を一応退避する。

     #cp /etc/my.cnf /etc/my.cnf_org

 (3) 旧サーバのMySQL設定を復元する
     #cp /media/HDD/Backup/etc/my.cnf /etc/my.cnf

 (4) MySQLサービスを再起動する。

     #service mysqld restart

 (5) MySQLサービスの自動起動設定をする。

    #chkconfig mysqld on

 (6) (5)設定の確認

    #chkconfig | grep mysqld

  (7) 旧サーバのデータベースのデータを復元する。

     #mysql -u root < /media/HDD/Backup/mysqlbackup.dump

  (8) MySQLに接続
    #mysql -u root

  (9) ユーザリストを確認
    > select user,host,password from mysql.user;

  (10) root以外のユーザを削除する
   > delete from mysql.user where user='削除するユーザ名';

  (11) rootのパスワードを設定する。
  > set password for root@localhost=password('任意のパスワード');
  > set password for root@127.0.0.1=password('任意のパスワード');

  (12) root以外のユーザを作成する。(192.168.0ネットワークから接続できるユーザ)
  >grant all on *.* to 任意のユーザ名@"192.168.0.%" identified by '任意のパスワード' with grant option;

  (13)   ローカルホスト接続ユーザ作成
>grant all on *.* to 任意のユーザ名@localhost identified by '任意のパスワード' with grant option;

4. PHPインストール・調整
(1) PHP環境をインストール
 #yum -y install php php-mbstring php-pear php-mysql mysql-devel php-gd

(2) PHPのデフォルト設定ファイルを退避
 #cp /etc/php.ini /etc/php.ini_org

(3) 旧サーバのPHP設定ファイルを復元
 #cp /media/HDD/Backup/etc/php.ini /etc/php.ini

(4) HTTPD再起動
 #service httpd restart

4. cronの自動実行スクリプト設定
(1)  ユーザ用のcrontabファイルを作成する
      #crontab -u (ユーザ名) /etc/crontab
(2)  指定ユーザのcrontab設定ファイルを編集
     #crontab -u (ユーザ名) -e

(3) DynamicDNSへの通知を10分おきに実行する設定
  */10 * * * * wget --spider --http-user=(mydns割り当てID) --http-password=(mydns割り当てパスワード) http://www.mydns.jp/login.html

(4) 保存して閉じる
    :wq

(5) cronサービスを再起動する
   #service crond restart
 
5. MySQLデータベースドライバ for Java 配置
本ブログ管理者の環境では、サービス用ディレクトリと同じ階層にlib
フォルダを配置し、その中にmysqlconnector - *を配置する。


(その他、必要に応じて以下を設定する)

7.VNCサーバ動作させる設定。サーバ再起動後も動作するようにする。
(パスワードは8文字しか入力できないがそれ以上入力すればちゃんと読み込まれているので長いパスワードにすること)

8. HP用、サービス用ファイルを元あった場所にコピー

<確認>
1. ホームページアクセスできるか?
ファイアウォールの80番ポート許可していなければNGになるので注意
2. VNCクライアントでリモートデスクトップ使えるか
    ファイアウォールの5900番ポート許可していなければNGになるので注意
3. SSHで鍵を使用して接続できるか?
ファイアウォールの22番ポート許可していなければNGになるので注意
4. データベースで表示させて正常に復元できているか
   
以上

MySQLネットワーク接続

1.サーバのポート許可する
    3306 TCP/UDP オープン

2. mysqlにrootとして接続
  $mysql -u root (ENTER)
  パスワードを入力

3.ホストを作成する
  > grant all on *.* to test@"192.168.0.%" identified by 'pass' with grant option;

 ユーザ名 test
  接続できるネットワークアドレスは、192.168.0
   パスワード pass

4. ユーザが正しく作成されたか確認
   select user,host,password from mysql.user;




以上

2012年6月18日月曜日

サーバ構築やり直し

サーバのHDDを増設・増強するため、構築し直す。
とりあえず、やることを列挙してまとめてみた。

■既存サーバデータの退避
1.MySQLのデータをバックアップする。
   mysqldumpコマンドで全ユーザ全データ対象でバックアップすること。

2.以下ファイルをバックアップしておくこと。
 root:rootアクセス権の設定ファイルなので同じ場所にコピーしておけばそのまま使える
 /etc/my.cnf
 /etc/php.ini
 /etc/httpd/conf/httpd.conf
 postfix, dovecotの設定ファイルも同じく
 
3.メディアファイルをバックアップ
4.サイト用のソフトやHTMLファイル

■再構築
1.CentOSを再インストール
   LVボリュームでパーティションを準備 (あとでパーティション変更・増量等可能になる)
  ユーザ名、IPアドレス等は以前の物と同じにすること

2. Mysql, PHPのインストール

3.設定ファイルを上書き(元ファイルは_defaultなどして退避すること)

4.mysql.dumpバックアップファイルをリストア

5.CentOSのファイアウォール設定 以下ポートを許可すること
    80 tcp/udp (For HTTP)
    22 tcp/udp (For SSH)
  5900 tcp/udp (For VNC)
    3306 tcp/udp (For Mysql)
  110 tcp/udp (ForPOP3)
     143 tcp/udp (ForIMAP4)
     25 tcp/udp (ForSMTP)

6.SSH鍵ファイル作成、鍵をクライアントマシンに読み込ませる。

7.VNCサーバ動作させる設定。サーバ再起動後も動作するようにする。
  (パスワードは8文字しか入力できないがそれ以上入力すればちゃんと読み込まれているので長いパスワードにすること)

8. HP用、サービス用ファイルを元あった場所にコピー


<確認>
1. ホームページアクセスできるか?
ファイアウォールの80番ポート許可していなければNGになるので注意
2. VNCクライアントでリモートデスクトップ使えるか
    ファイアウォールの5900番ポート許可していなければNGになるので注意
3. SSHで鍵を使用して接続できるか?
ファイアウォールの22番ポート許可していなければNGになるので注意
4. データベース
   




2012年6月9日土曜日

MySQLパーティショニング

MySQLは、1つのテーブルに大量にデータを登録すると、
検索するときにものすごく時間がかかる。
これは、全部のデータをまず読み込んでから検索するからとのこと。
1つのテーブルの中でインデックスを使うと多少は検索速度向上するが、
大量のデータになるとやはり遅くなる。
大量のデータが登録されることが事前に分かっているのであれば有効なのが、
「パーティショニング」という機能だ。

その設定方法についての備忘録。

※ Noをインデックスとし、Noが0から2000まであるとする。
    このとき、Noが500毎にパーティションを作成する。

mysql > create table テーブル名
mysql >  (
mysql >   No Decimal(5,0)
mysql > , Name varchar(128)
mysql > , Age int
mysql > , KEY Index1 (No)
mysql > constraint KEY_NAME primary key(No)
mysql >  )
mysql > ENGINE=MyISAM DEFAULT CHARSET=utf8 PARTITION BY RANGE(No))
mysql >  (
mysql >    PARTITION p0 VALUES LESS THAN (500)
mysql >    PARTITION p1 VALUES LESS THAN (1000)
mysql > ,  PARTITION p2 VALUES LESS THAN (1500)
mysql > ,  PARTITION p3 VALUES LESS THAN MAXVALUE
mysql >  )

以上

2012年5月14日月曜日

mysqlデータをバックアップし、リストアする方法

サーバ壊れたときにデータベースファイルだけはなくしてはいけない。
定期的にバックアップする方法と、いざというときに復旧する方法。

■全データベースバックアップする
#mysqldump -u root -p --all-databases > バックアップファイル名 (mysqldump_20120514.dump)

■リストア
#mysql -u root -p < バックアップファイル名
※まだmysqlにパスワードをつけていない場合は、-pを省略できる。

以上

公開鍵作成方法(Linux)


SSH用の公開鍵の作成方法の備忘録。


1.RSA暗号方式の鍵を生成
$ssh-keygen -t rsa
2.そのままENTERキーを押す




3. パスフレーズを入力する。
 (これはクライアントがアクセスするときに入力するフレーズになる)
4. 再度パスフレーズを入力する。






5.ホームディレクトリの.sshフォルダに鍵ファイルが作成されるので、
 名称変更+アクセス権を変更する。








以上

2012年5月5日土曜日

macから公開鍵認証でsshサーバへ接続する方法

Linuxで稼働させているsshサーバにmacから接続する方法。
windowsでteratermとか使っているのであれば、アプリケーション起動時に
公開鍵を選択してsshサーバへ接続すればよいがmacだと少しやり方がある
のでメモ。

※既に鍵(id_rsa)は作られているものとする

1.ユーザのホームディレクトリに移動
[user@host Public]$cd ~

2.ホームディレクトリ以下に.sshフォルダを作成する

[user@host ~]$mkdir .ssh

3.鍵を2.で作成した.sshフォルダに移動する
[user@host ~]$mv  (鍵のあるパス)/id_rsa ./.ssh/id_rsa

4.鍵のアクセス券を600にする
[user@host ~]$chmod 600 ./.ssh/id_rsa

5.sshでサーバにアクセスする
[user@host ~]$ssh hostname@domain


6.ユーザ・パスワードを入力する画面が表示される。
入力する。












7.これで無事に接続できたはず!

補足:
もし公開鍵を再度設定する場合は、一度.sshフォルダにある
id_rsa と known_hostsを削除すること。
known_hostsが残っていれば接続に失敗してしまう。



mac : OS X 10.7 Lion
Linux : CentOS6


以上

2012年4月8日日曜日

Netbeansからサーバへファイルをアップロードする方法

Netbeansは本当に便利だ。
PHPのプロジェクトをFTPでアップロードすることもできる。

その備忘録。

FTPは、安全性を考慮して、SFTPを使用する。

<設定>

1.プロジェクトを選択し、右クリックメニューからプロパティを開く。

2.実行構成を選択し、管理ボタンを押す。
 ファイルのアップロードタイミングは、手動がオススメ。
3.ホスト名・ユーザ名・パスワード、非公開鍵ファイル(秘密鍵)を適切に入力。
初期ディレクトリも入力する。


5. 接続テストを押して、以下画面が表示されればOK!



<アップロードする方法>
1. ソースファイルを選択し、右クリックメニューからアップロードを選択する。



2. 以下画面の了解ボタンを押す。
 Netbeansのログ画面に転送された情報が表示されるので、問題なければOK。



以上

Netbeans(7.0.1)でBasic認証のPHPが動作しない!?

NetbeansでPHPを作成するのは非常に楽ってことに最近感じています。

でも!!

今まで動作していたBasic認証のコードを、
そのままNetbeansが自動生成したソースに移植しても動作しなくなってしまった。

そのことを解決したときの備忘録。

---
NetBeansで新規PHPを作成した場合、
以下のようなソースが自動で作成される。

//---------------------------------------------------
//Netbeans自動生成ソース抜粋
//---------------------------------------------------

<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        // put your code here
        //ここに普通はPHPのコードを記載する
        ?>
    </body>
</html>

上記朱記の箇所に、以下のソース抜粋(NG)のようにコード記載したら
Basic認証できなくなってしまった。
(Basic認証の入力画面が表示されない!)

//---------------------------------------------------
//Basic認証コード追加ソース抜粋(NG)
//---------------------------------------------------
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        // put your code here
        if ( !isset($_SERVER["PHP_AUTH_USER"])
        || !($_SERVER["PHP_AUTH_USER"] == "hogehoge"
        && $_SERVER["PHP_AUTH_PW"] == "hogehogepasswords") )
        {
                header("WWW-Authenticate: Basic realm=\"Welcome!!  \"");
                header("HTTP/1.0 401 Unauthorized");

                echo "ユーザまたはパスワードが不正です。\n";
                echo "<br>";
                echo "サイトアクセスしたい場合は、こちらへ連絡ください。\n";
                echo "<br>";
                echo "hogehoge@gmail.com\n";
                exit;
        }

        include("/var/www/php-bin/welcome.php");   

        ?>
    </body>
</html>

以下のようにしたらうまく動作するようになった。
index.phpとしているのに、"DOCTYPE html"とHTML宣言しているからかな。
理由はよくわからないけど、これで動作するようになったからOK!かな。

//---------------------------------------------------
//Basic認証コード追加ソース抜粋(OK)
//---------------------------------------------------
<?php
        if ( !isset($_SERVER["PHP_AUTH_USER"])
        || !($_SERVER["PHP_AUTH_USER"] == "hogehoge"
        && $_SERVER["PHP_AUTH_PW"] == "hogehogepasswords") )
        {
                header("WWW-Authenticate: Basic realm=\"Welcome!!  \"");
                header("HTTP/1.0 401 Unauthorized");

                echo "ユーザまたはパスワードが不正です。\n";
                echo "<br>";
                echo "サイトアクセスしたい場合は、こちらへ連絡ください。\n";
                echo "<br>";
                echo "hogehoge@gmail.com\n";
                exit;
        }

        include("/var/www/php-bin/welcome.php");        
?>

<!--To change this template, choose Tools | Templates
and open the template in the editor.-->

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        // put your code here
        ?>
    </body>
</html>


CentOS6
Netbeas7.0.1
以上