Njrjd842ufshbcs
''目次''
#contents
~
----

*時刻の同期 [#ld716f12]
下記のコマンドでOS時刻をntpサーバに同期できる。~
 [root@XXXXX ~]# ntpdate ntp.nict.jp
''ntp.nict.jp''は日本標準時を供給している[[独立行政法人情報通信研究機構(NICT)>http://www.nict.go.jp/]]の公開NTPサーバ。~
**定期的に時刻を同期 [#sd5bdf44]
''ntpdate''コマンドで時刻同期させても、その後時間の経過とともにOS時刻にズレが生じるので、''cron''で定期的に時刻同期を行い、正確さを保つようにする。cronとは、決められた時刻にコマンドを定期的に実行させるためのデーモンプロセス。~
~
まずは、cronが動作しているかどうか確認。~
 [root@XXXXX ~]# /etc/rc.d/init.d/crond status
 crond (pid ****) is running...  ←動作中

動作していない場合は起動する。
 [root@XXXXX ~]# /etc/rc.d/init.d/crond start
 Starting crond:     [ OK ]

cronの設定を行う。
 [root@XXXXX ~]# crontab -e
初期状態では何も設定されていない(空欄)ので設定を追加する。
 (例)毎日AM6時に時刻同期を行う場合
 0 6 * * * ntpdate ntp.nict.jp
 
 (※cronの設定については詳しく説明されたサイトが他にあるので割愛)
設定を終了すると、
 crontab: installing new crontab
とコンソールに表示される。
 
(cronの参考にしたサイト → [[Linuxで自宅サーバ構築»Linux»cronの設定・実行>http://linuxserver.jp/linux/cron%E8%A8%AD%E5%AE%9A.php]])


~
*コマンド実行結果のログを残す [#b5668b38]
コマンド実行時、画面にコマンド実行結果が表示されるが量が多くて表示しきれない場合がある。~
例えば make コマンドは、エラーが起こっても途中で終了せず、以降の処理を続けることがあるが、どこで失敗したのか画面上で確認したくても、~
画面上からスクロールしてしまっており確認できないことが多い。だからといって、出力をファイルにリダイレクトしてしまうと、画面上で処理過程を見ることができなくなってしまう。~
~
以上のように出力内容を後から見返したい場合もあるのでコマンド実行結果をログとして残す場合は tee コマンドを使用して下記のようにすることで、画面とファイルの両方に出力される。~
 (例) opensslのconfig時のログをソースフォルダに20130207_config.logとして残す場合
 
 [root@XXXXX ~]# cd /usr/local/src/openssl-1.0.1d
 [root@XXXXX openssl-1.0.1d]# ./config --prefix=/usr --openssldir=/etc/pki/tls shared | tee 20130207_config.log
tee コマンドの後ろには複数のファイル名を記述する事もできる。また、-a オプションを付けると同名ファイルがある場合には上書きせずに追記することができる。
~
*フロッピーのマウント [#g375d5fb]
参考サイト:[[Linux/CentOS ネットワーク実験室>http://centos.it-cafe.jp/]]-第9話/ファイルシステムの管理
+''カーネルモジュールのロード''~
最近のバージョンの OS では、フロッピーのカーネルモジュール(デバイスドライバ)がロードされていない場合があるので、次のコマンドでロードする。~
 # modprobe floppy
~
+''マウントポイントのフォルダを作成''
 # mkdir /mnt/floppy
~
+''/etc/fstabを編集する''
 # vi /etc/fstab
 /dev/fd0                /mnt/floppy             vfat    noauto          0 0    ← この1行を追加
~
+''root以外でもmountできるようにする''
 # visudo
 〜(略)〜
 ## Allow root to run any commands anyware
 root     ALL=(ALL)       ALL
 hoge  ALL=(ALL)       ALL        ← この1行を追加
~
+''使い方''
-最近のバージョンの OS では、フロッピーのカーネルモジュール(デバイスドライバ)がロードされていない場合があるので、次のコマンドでロードする。 
 # modprobe floppy
-マウント
 # mount /mnt/floppy
root以外では
 $ sudo mount /mnt/floppy

-マウント解除
 # umount /mnt/floppy
~
*NASドライブのマウント [#vf55d4e4]
NASには共有フォルダとユーザー、パスワードを設定しておく~
今回は
 共有フォルダ名:backup
 ユーザー名:hoge
 パスワード:hogehoge
+''マウントポイントのフォルダを作成''
 #mkdir /mnt/backup
+''/etc/fstabを編集する''
 #vi /etc/fstab
最後の行に下記を追加
 //100.100.100.100/backup  /mnt/backup             cifs    rw,user=hoge,password=hogehoge 0 0
+''使い方''
 #mount /mnt/backup
*バックアップの実行 [#edadb4fd]
**スクリプトの例 [#tbc590e5]
どこかのサイトからそのまま拝借して修正~
-バックアップする環境
 tracとsubversionで1プロジェクトを構成
 ~/proj01ディレクトリにtracとsvnのディレクトリがある
 tracのDBにはPostgreSQLを使用
 subversionはfsで運用(BerkeleyDBは使っていない
 バックアップ先にはNASを利用
~
出来上がったスクリプト「backup.sh」には実行権限が必要
 #chmod 755 /path/backup.sh
~
ただし、作成したスクリプトを実行すると、下記エラーがログに出力された。
 sudo: sorry, you must have a tty to run sudo
なので''sudo''の設定を修正。
 #visudo
 #Defaults    requiretty   ←この行をコメントアウト
~
以下スクリプトサンプル
 #!/bin/bash
 
 #
 # ローカル内でバックアップ
 #
 
 LANG=C
 
 #
 # 設定開始
 #
 
 # バックアップ先ディレクトリ名
 BACKUPDIR=/mnt/backup
 
 # バックアップ保存世代数
 # ※当日分を含めた過去分バックアップを保存する世代数
 # ※過去分バックアップを保存しない場合は1を指定する
 BACKUPGEN=3
 
 # バックアップログファイル名
 BACKUPLOG=$BACKUPDIR/backup.log
 
 #PostgreSQL
 PGPATH=/usr/local/pgsql/bin
 
 #
 # 設定終了
 #
 
 cd $BACKUPDIR
 
 #==========================================================================
 # 前回バックアップをリネーム
 #==========================================================================
 
 #Log
 BACKUPFILE=`ls backup.log 2>/dev/null`
 if [ -f $BACKUPFILE ]; then
    TIMESTAMP=`ls --full-time $BACKUPFILE|awk '{print $6}'|tr -d -`
    mv $BACKUPDIR/$BACKUPFILE $BACKUPDIR/${TIMESTAMP}$BACKUPFILE > /dev/null  2>&1
 fi
 
 #/////////////////////////////////////////////////////////
 #//
 #//  Sample Proj01
 #//
 
 for j in 1 2 3
 do
 
   case $j in
     '1') PROJ_NAME=Sample-proj01 ;;
     '2') PROJ_NAME=Sample-proj02 ;;
     '3') PROJ_NAME=Sample-proj03 ;;
   esac
 
   for i in 1 2 3
   do
 
     case $i in
       '1') BACKUPFILE=`ls ${PROJ_NAME}_pgdump.backup.gz 2>/dev/null` ;;
       '2') BACKUPFILE=`ls ${PROJ_NAME}_trac.tar.gz 2>/dev/null` ;;
       '3') BACKUPFILE=`ls ${PROJ_NAME}_svn.tar.gz 2>/dev/null` ;;
     esac
 
     if [ -f $BACKUPFILE ]; then
         TIMESTAMP=`ls --full-time $BACKUPFILE|awk '{print $6}'|tr -d -`
        mv $BACKUPDIR/$BACKUPFILE $BACKUPDIR/${TIMESTAMP}$BACKUPFILE >  /dev/null 2>&1
     fi
 
   done
 
 done
 
 #//
 #//
 #///////////////////////////////////////////////////////////
 
 #==========================================================================
 # バックアップログファイル作成
 #==========================================================================
 rm -f $BACKUPLOG
 touch $BACKUPLOG
 chmod 400 $BACKUPLOG
 
 #==========================================================================
 # バックアップ実行
 #==========================================================================
 
 #/////////////////////////////////////////////////////////
 #//
 #//  Sample Proj
 #//
 
 for j in 1 2 3
 do 
 
   case $j in
     '1') PROJ_NAME=Sample-proj01
          PROJ_PATH=/home/htdocs/Sample/proj01 ;;
     '2') PROJ_NAME=Sample-proj02
          PROJ_PATH=/home/htdocs/Sample/proj02 ;;
     '3') PROJ_NAME=Sample-proj03
          PROJ_PATH=/home/htdocs/Sample/proj03 ;;
   esac
 
   # tracのDBバックアップ
   echo "`date` backup start [DB:trac_${PROJ_NAME}]" >> $BACKUPLOG
   sudo -u postgres $PGPATH/vacuumdb trac_${PROJ_NAME} >> $BACKUPLOG 2>&1
   sudo -u postgres $PGPATH/pg_dump --file=${PROJ_NAME}_pgdump.backup trac_${PROJ_NAME} >> $BACKUPLOG 2>&1
   gzip ${PROJ_NAME}_pgdump.backup >> $BACKUPLOG 2>&1
   echo "`date` backup end   [DB:trac_${PROJ_NAME}]" >> $BACKUPLOG
 
   for i in trac svn
   do
  
     echo "`date` backup start [${PROJ_NAME} ${i}]" >> $BACKUPLOG
     tar czvfP $BACKUPDIR/${PROJ_NAME}_${i}.tar.gz $PROJ_PATH/${i} >> $BACKUPLOG  2>&1
     echo "`date` backup end   [${PROJ_NAME} ${i}]" >> $BACKUPLOG
 
   done
 
 done
 
 #//
 #//
 #///////////////////////////////////////////////////////////
 
 #==========================================================================
 # バックアップ保存世代を超えた古いバックアップを削除
 #==========================================================================
 
 #Log
 BACKUPFILE=$BACKUPDIR/*backup.log
 if [ $(ls $BACKUPFILE|wc -l) -gt $BACKUPGEN ]; then
     OLDBACKUPCNT=`expr $(ls $BACKUPFILE|wc -l) - $BACKUPGEN`
     for file in `ls -t $BACKUPFILE|tail -n $OLDBACKUPCNT`
     do
         rm -f $file
     done
 fi
 
 #/////////////////////////////////////////////////////////
 #//
 #//  Sample Proj
 #//
 
 for j in 1 2 3
 do 
 
   case $j in
     '1') PROJ_NAME=Sample-proj01 ;;
     '2') PROJ_NAME=Sample-proj02 ;;
     '3') PROJ_NAME=Sample-proj03 ;;
   esac
 
   for i in 1 2 3
   do
 
     case $i in
       '1') BACKUPFILE=$BACKUPDIR/*${PROJ_NAME}_pgdump.backup.gz ;;
       '2') BACKUPFILE=$BACKUPDIR/*${PROJ_NAME}_trac.tar.gz ;;
       '3') BACKUPFILE=$BACKUPDIR/*${PROJ_NAME}_svn.tar.gz ;;
     esac
 
     if [ $(ls $BACKUPFILE|wc -l) -gt $BACKUPGEN ]; then
         OLDBACKUPCNT=`expr $(ls $BACKUPFILE|wc -l) - $BACKUPGEN`
         for file in `ls -t $BACKUPFILE|tail -n $OLDBACKUPCNT`
         do
             rm -f $file
         done
     fi
 
   done
 
 done
 
 #//
 #//
 #///////////////////////////////////////////////////////////
**cronでの自動実行 [#z73e242e]
参考サイト:[[NEC 8番街 - croの設定ガイド:http://www.express.nec.co.jp/linux/distributions/knowledge/system/crond.html]]
 #crontab -e
~
毎日1時に実行
 0 1 * * * /path/backup.sh
日時指定の書式は左から「分、時、日、月、曜日」それにコマンドが続く
上記の例では「1時0分」それ以外が「*」なので毎日実行される。~
これが例えば
 0 1 1 * * /path/backup.sh
だったら毎月1日の1時0分に実行される
~
*htpasswdへのユーザー登録 [#l978336f]
ユーザーhogehogeで新規に認証用ファイル.htpasswdを作成
 # htpasswd -c /home/htdocs/.htpasswd hogehoge
~
ユーザーhogehoge2を既存の認証用ファイル.htpasswdに追加
 # htpasswd /home/htdocs/.htpasswd hogehoge2
~
「command not found」が出たら
 # PATH=$PATH:/usr/local/apache2/bin
 # export PATH
~
*ファイアウォールの設定 [#wda4f7fd]
参考サイト:[[CentOSで自宅サーバー構築 ファイアウォール構築(iptables)>http://centossrv.com/iptables.shtml]]
**iptables設定 [#qc0eb70b]
+''iptablesの設定用スクリプトを作成''
 # vi iptables.sh
~
下記の通り記述~
公開するポートのみコメントを外す
 #!/bin/bash
 
 #---------------------------------------#
 # 設定開始                              #
 #---------------------------------------#
 
 # インタフェース名定義
 LAN=eth0
 
 #---------------------------------------#
 # 設定終了                              #
 #---------------------------------------#
 
 # 内部ネットワークのネットマスク取得
 LOCALNET_MASK=`ifconfig $LAN|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`
 
 # 内部ネットワークアドレス取得
 LOCALNET_ADDR=`netstat -rn|grep $LAN|grep $LOCALNET_MASK|cut -f1 -d' '`
 LOCALNET=$LOCALNET_ADDR/$LOCALNET_MASK
 
 # ファイアウォール停止(すべてのルールをクリア)
 /etc/rc.d/init.d/iptables stop
 
 # デフォルトルール(以降のルールにマッチしなかった場合に適用するルール)設定
 iptables -P INPUT   DROP   # 受信はすべて破棄
 iptables -P OUTPUT  ACCEPT # 送信はすべて許可
 iptables -P FORWARD DROP   # 通過はすべて破棄
 
 # 自ホストからのアクセスをすべて許可
 iptables -A INPUT -i lo -j ACCEPT
 
 # 内部からのアクセスをすべて許可
 iptables -A INPUT -s $LOCALNET -j ACCEPT
 
 # 内部から行ったアクセスに対する外部からの返答アクセスを許可
 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
 # SYN Cookiesを有効にする
 # ※TCP SYN Flood攻撃対策
 sysctl -w net.ipv4.tcp_syncookies=1 > /dev/null
 sed -i '/net.ipv4.tcp_syncookies/d' /etc/sysctl.conf
 echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf
 
 # ブロードキャストアドレス宛pingには応答しない
 # ※Smurf攻撃対策
 sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1 > /dev/null
 sed -i '/net.ipv4.icmp_echo_ignore_broadcasts/d' /etc/sysctl.conf
 echo "net.ipv4.icmp_echo_ignore_broadcasts=1" >> /etc/sysctl.conf
 
 # ICMP Redirectパケットは拒否
 sed -i '/net.ipv4.conf.*.accept_redirects/d' /etc/sysctl.conf
 for dev in `ls /proc/sys/net/ipv4/conf/`
 do
     sysctl -w net.ipv4.conf.$dev.accept_redirects=0 > /dev/null
     echo "net.ipv4.conf.$dev.accept_redirects=0" >> /etc/sysctl.conf
 done
 
 # Source Routedパケットは拒否
 sed -i '/net.ipv4.conf.*.accept_source_route/d' /etc/sysctl.conf
 for dev in `ls /proc/sys/net/ipv4/conf/`
 do
     sysctl -w net.ipv4.conf.$dev.accept_source_route=0 > /dev/null
     echo "net.ipv4.conf.$dev.accept_source_route=0" >> /etc/sysctl.conf
 done
 
 # フラグメント化されたパケットはログを記録して破棄
 iptables -A INPUT -f -j LOG --log-prefix '[IPTABLES FRAGMENT] : '
 iptables -A INPUT -f -j DROP
 
 # 外部とのNetBIOS関連のアクセスはログを記録せずに破棄
 # ※不要ログ記録防止
 iptables -A INPUT -s ! $LOCALNET -p tcp -m multiport --dports 135,137,138,139,445 -j DROP
 iptables -A INPUT -s ! $LOCALNET -p udp -m multiport --dports 135,137,138,139,445 -j DROP
 iptables -A OUTPUT -d ! $LOCALNET -p tcp -m multiport --sports 135,137,138,139,445 -j DROP
 iptables -A OUTPUT -d ! $LOCALNET -p udp -m multiport --sports 135,137,138,139,445 -j DROP
 
 # 1秒間に4回を超えるpingはログを記録して破棄
 # ※Ping of Death攻撃対策
 iptables -N LOG_PINGDEATH
 iptables -A LOG_PINGDEATH -m limit --limit 1/s --limit-burst 4 -j ACCEPT
 iptables -A LOG_PINGDEATH -j LOG --log-prefix '[IPTABLES PINGDEATH] : '
 iptables -A LOG_PINGDEATH -j DROP
 iptables -A INPUT -p icmp --icmp-type echo-request -j LOG_PINGDEATH
 
 # 全ホスト(ブロードキャストアドレス、マルチキャストアドレス)宛パケットはログを記録せずに破棄
 # ※不要ログ記録防止
 iptables -A INPUT -d 255.255.255.255 -j DROP
 iptables -A INPUT -d 224.0.0.1 -j DROP
 
 # 113番ポート(IDENT)へのアクセスには拒否応答
 # ※メールサーバ等のレスポンス低下防止
 iptables -A INPUT -p tcp --dport 113 -j REJECT --reject-with tcp-reset
 
 # ACCEPT_COUNTRY_MAKE関数定義
 # 指定された国のIPアドレスからのアクセスを許可するユーザ定義チェイン作成
 ACCEPT_COUNTRY_MAKE(){
     for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'`
     do
         iptables -A ACCEPT_COUNTRY -s $addr -j ACCEPT
     done
 }
 
 # DROP_COUNTRY_MAKE関数定義
 # 指定された国のIPアドレスからのアクセスを破棄するユーザ定義チェイン作成
 DROP_COUNTRY_MAKE(){
     for addr in `cat /tmp/cidr.txt|grep ^$1|awk '{print $2}'`
     do
         iptables -A DROP_COUNTRY -s $addr -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES DENY_COUNTRY] : '
         iptables -A DROP_COUNTRY -s $addr -j DROP
     done
 }
 
 # IPアドレスリスト取得
 . /root/iptables_functions
 IPLISTGET
 
 # 日本からのアクセスを許可するユーザ定義チェインACCEPT_COUNTRY作成
 iptables -N ACCEPT_COUNTRY
 ACCEPT_COUNTRY_MAKE JP
 # 以降,日本からのみアクセスを許可したい場合はACCEPTのかわりにACCEPT_COUNTRYを指定する
 
 # 中国・韓国・台湾※からのアクセスをログを記録して破棄
 # ※全国警察施設への攻撃元上位3カ国(日本・アメリカを除く)
 # http://www.cyberpolice.go.jp/detect/observation.htmlより
 iptables -N DROP_COUNTRY
 DROP_COUNTRY_MAKE CN
 DROP_COUNTRY_MAKE KR
 DROP_COUNTRY_MAKE TW
 iptables -A INPUT -j DROP_COUNTRY
 
 #----------------------------------------------------------#
 # 各種サービスを公開する場合の設定(ここから)               #
 #----------------------------------------------------------#
 
 # 外部からのTCP22番ポート(SSH)へのアクセスを日本からのみ許可
 # ※SSHサーバーを公開する場合のみ
 #iptables -A INPUT -p tcp --dport 22 -j ACCEPT_COUNTRY
 
 # 外部からのTCP/UDP53番ポート(DNS)へのアクセスを許可
 # ※外部向けDNSサーバーを運用する場合のみ
 #iptables -A INPUT -p tcp --dport 53 -j ACCEPT
 #iptables -A INPUT -p udp --dport 53 -j ACCEPT
 
 # 外部からのTCP80番ポート(HTTP)へのアクセスを許可
 # ※Webサーバーを公開する場合のみ
 #iptables -A INPUT -p tcp --dport 80 -j ACCEPT
 
 # 外部からのTCP443番ポート(HTTPS)へのアクセスを許可
 # ※Webサーバーを公開する場合のみ
 #iptables -A INPUT -p tcp --dport 443 -j ACCEPT
 
 # 外部からのTCP21番ポート(FTP)へのアクセスを日本からのみ許可
 # ※FTPサーバーを公開する場合のみ
 #iptables -A INPUT -p tcp --dport 21 -j ACCEPT_COUNTRY
 
 # 外部からのPASV用ポート(FTP-DATA)へのアクセスを日本からのみ許可
 # ※FTPサーバーを公開する場合のみ
 # ※PASV用ポート60000:60030は当サイトの設定例
 #iptables -A INPUT -p tcp --dport 60000:60030 -j ACCEPT_COUNTRY
 
 # 外部からのTCP25番ポート(SMTP)へのアクセスを許可
 # ※SMTPサーバーを公開する場合のみ
 #iptables -A INPUT -p tcp --dport 25 -j ACCEPT
 
 # 外部からのTCP465番ポート(SMTPS)へのアクセスを日本からのみ許可
 # ※SMTPSサーバーを公開する場合のみ
 #iptables -A INPUT -p tcp --dport 465 -j ACCEPT_COUNTRY
 
 # 外部からのTCP110番ポート(POP3)へのアクセスを日本からのみ許可
 # ※POP3サーバーを公開する場合のみ
 #iptables -A INPUT -p tcp --dport 110 -j ACCEPT_COUNTRY
 
 # 外部からのTCP995番ポート(POP3S)へのアクセスを日本からのみ許可
 # ※POP3Sサーバーを公開する場合のみ
 #iptables -A INPUT -p tcp --dport 995 -j ACCEPT_COUNTRY
 
 # 外部からのTCP143番ポート(IMAP)へのアクセスを日本からのみ許可
 # ※IMAPサーバーを公開する場合のみ
 #iptables -A INPUT -p tcp --dport 143 -j ACCEPT_COUNTRY
 
 # 外部からのTCP993番ポート(IMAPS)へのアクセスを日本からのみ許可
 # ※IMAPSサーバーを公開する場合のみ
 #iptables -A INPUT -p tcp --dport 993 -j ACCEPT_COUNTRY
 
 # 外部からのUDP1194番ポート(OpenVPN)へのアクセスを日本からのみ許可
 # ※OpenVPNサーバーを公開する場合のみ
 #iptables -A INPUT -p udp --dport 1194 -j ACCEPT_COUNTRY
 
 # VPNインタフェース用ファイアウォール設定
 # ※OpenVPNサーバーを公開する場合のみ
 #[ -f /etc/openvpn/openvpn-startup ] && /etc/openvpn/openvpn-startup
 
 #----------------------------------------------------------#
 # 各種サービスを公開する場合の設定(ここまで)               #
 #----------------------------------------------------------#
 
 # 拒否IPアドレスからのアクセスはログを記録せずに破棄
 # ※拒否IPアドレスは/root/deny_ipに1行ごとに記述しておくこと
 # (/root/deny_ipがなければなにもしない)
 if [ -s /root/deny_ip ]; then
     for ip in `cat /root/deny_ip`
     do
         iptables -I INPUT -s $ip -j DROP
     done
 fi
 
 # 上記のルールにマッチしなかったアクセスはログを記録して破棄
 iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
 iptables -A INPUT -j DROP
 iptables -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
 iptables -A FORWARD -j DROP
 
 # サーバー再起動時にも上記設定が有効となるようにルールを保存
 /etc/rc.d/init.d/iptables save
 
 # ファイアウォール起動
 /etc/rc.d/init.d/iptables start
~
+''設定用スクリプトに実行権限を付加''
 # chmod 700 iptables.sh
~
+''設定スクリプト外部関数作成''
 # vi iptables_functions
~
下記の通り記述
 # IPアドレスリスト取得関数定義
 IPLISTGET(){
     # http://nami.jp/ipv4bycc/から最新版IPアドレスリストを取得する
     wget -q http://nami.jp/ipv4bycc/cidr.txt.gz
     gunzip cidr.txt.gz
     # 最新版IPアドレスリストが取得できなかった場合
     if [ ! -f cidr.txt ]; then
         if [ -f /tmp/cidr.txt ]; then
             # バックアップがある場合はその旨をroot宛にメール通知して処理を打ち切る
             echo cidr.txt was read from the backup! | mail -s $0 root
             exit 1
         else
             # バックアップがない場合はその旨をroot宛にメール通知して処理を打ち切る
             echo cidr.txt not found!|mail -s $0 root
             exit 1
         fi
     fi
     # 最新版IPアドレスリストを /tmpへバックアップする
     /bin/mv cidr.txt /tmp/cidr.txt
 }
~
**IPアドレスリスト更新チェック [#e11867bb]
IPアドレスリストは頻繁に更新されるので、毎日自動でIPアドレスリストの更新有無をチェックし、更新がある場合はファイアウォール設定スクリプトを再起動するようにする。
+''IPアドレスリストチェックスクリプト作成''
 # vi /etc/cron.daily/iplist_check.sh
~
下記の通り記述
 #!/bin/bash
 
 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 
 # チェック国コード
 COUNTRY_CODE='JP CN KR TW'
 
 # iptables設定スクリプトパス
 IPTABLES=/root/iptables.sh
 
 # iptables設定スクリプト外部関数取り込み
 . /root/iptables_functions
 
 # IPアドレスリスト最新化
 rm -f IPLIST.new
 IPLISTGET
 for country in $COUNTRY_CODE
 do
     if [ -f /tmp/cidr.txt ]; then
         grep ^$country /tmp/cidr.txt >> IPLIST.new
     else
         grep ^$country /tmp/IPLIST >> IPLIST.new
     fi
 done
 
 # IPアドレスリスト更新チェック
 diff -q /tmp/IPLIST IPLIST.new > /dev/null 2>&1
 if [ $? -ne 0 ]; then
     /bin/mv IPLIST.new /tmp/IPLIST
     $IPTABLES > /dev/null
 else
     rm -f IPLIST.new
 fi
~
+''スクリプトに実行権限を付加''
 # chmod +x /etc/cron.daily/iplist_check.sh
~
**iptables起動 [#oe124956]
+''設定スクリプト実行''
 # ./iptables.sh
 ファイアウォールルールを適用中:                            [  OK  ]
 チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
 iptables モジュールを取り外し中                            [  OK  ]
 ファイアウォールのルールを /etc/sysconfig/iptables に保存中[  OK  ]
 ファイアウォールルールを適用中:                            [  OK  ]
 チェインポリシーを ACCEPT に設定中filter                   [  OK  ]
 iptables モジュールを取り外し中                            [  OK  ]
 iptables ファイアウォールルールを適用中:                   [  OK  ]
 iptables モジュールを読み込み中ip_conntrack_netbios_ns     [  OK  ]
+''iptables自動起動設定''
 # chkconfig iptables on
~
*ログローテーション [#ued603c7]
-''/etc/logrotate.conf'' の内容
 # see "man logrotate" for details
 # rotate log files weekly
 weekly
 ↑毎週ログを置き換える。毎日はdaily、毎月はmonthly
 
 # keep 4 weeks worth of backlogs
 rotate 4
 ↑※ログを4世代分残す。weeky を指定した場合は4週間という意味
 
 # create new (empty) log files after rotating old ones
 create
 ↑※新規ログファイルをローテーションした直後に作成する
 
 # use date as a suffix of the rotated file
 dateext
 
 # uncomment this if you want your log files compressed
 #compress
 ↑※圧縮する。デフォルトは圧縮''しない''(コメントアウト)
 
 # RPM packages drop log rotation information into this directory
 include /etc/logrotate.d
 ↑※各ログファイルの設定がおかれているパスを指定。
   このディレクトリに自身で作成したconfを入れておけば良い
 
 # no packages own wtmp and btmp -- we'll rotate them here
 /var/log/wtmp {
     monthly
     create 0664 root utmp
         minsize 1M
     rotate 1
 }
 
 /var/log/btmp {
     missingok
     monthly
     create 0600 root utmp
     rotate 1
 }
 
 # system-specific logs may be also be configured here.
~
**設定値 [#ee9ba0f2]
-daily or weekly or monthly~
ログのローテーション間隔~
~
-missingok~
ログファイルがない場合でもエラーにしない~
~
-rotate n~
n回ローテーションする~
~
-compress~
ローテーションされたログを圧縮~
~
-delaycompress~
次回のログローテーションサイクルになるまで圧縮しない~
~
-notifempty~
ログファイルが空ならローテートしない~
~
-create 0644 user group~
ログファイルのパーミッションと所有ユーザの設定~
~
-copytruncate~
通常、ローテートするときは、既存のログを移動させた後に新しいログファイルを作る。copytruncateを指定した場合は動作が変わり、ログのコピーした後に、既存のログのサイズを0にする動作になる。ログファイルを閉じないプログラム(rails含む)は、この指定をしないとずっと同じログファイルに書き込みが行われてしまう。コピーしてサイズを0にする少しの間だけログがlostされる。この指定をするとcreateが無効になる(新しいファイルを作らないので)~
~
-dateext~
ログファイル末尾につく数値の代わりに日付(YYYYMMDD)がつく~
~
**apache用のログローテーション設定 [#t1c9bfe3]
+''設定ファイルの作成''
 # vi /etc/logrotate.d/httpd
 
 /usr/local/apache2/logs/access_log /usr/local/apache2/logs/error_log {
       weekly
       rotate 4
       missingok
       sharedscripts
       postrotate
            /bin/killall -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null
       endscript
 }
~
+''確認''~
ログのローテートを実行し、/var/lib/logrotate.log を見て、ローテートが実行されたかどうか確認する。~
 # /usr/sbin/logrotate /etc/logrotate.conf      ← ローテート実行
 # cat /var/lib/logrotate.status
 "/usr/local/apache2/logs/access_log" 2011-12-1 ← 設定したログが表示される
 "/usr/local/apache2/logs/error_log" 2011-12-1  ← 設定したログが表示される
~
**Redmine用のログローテーション設定 [#t1c9bfe3]
+''設定ファイルの作成''
 # vi /etc/logrotate.d/redmine
 
 /home/htdocs/redmine/log/production.log {
       weekly
       rotate 4
       missingok
       copytruncate
       notifempty
 }
~
+''確認''~
ログのローテートを実行し、/var/lib/logrotate.log を見て、ローテートが実行されたかどうか確認する。~
 # /usr/sbin/logrotate /etc/logrotate.conf      ← ローテート実行
 # cat /var/lib/logrotate.status
 "/home/htdocs/redmine/log/production.log" 2011-12-1 ← 設定したログが表示される
~
*ランレベル [#g934a7ae]
参考:[[ランレベルとは?(http://www.atmarkit.co.jp)>http://www.atmarkit.co.jp/flinux/rensai/linuxtips/156whatrunlv.html]]
| 0 |シャットダウン(システムの停止)|シャットダウンに向かう状態|
| 1 |シングルユーザーモード(rootのみ) |シングルユーザモード|
| 2 |ネットワークなしのマルチユーザーモード |使用されない|
| 3 |通常のマルチユーザーモード(テキストログイン) |標準的な状態|
| 4 | 未使用 |使用されない|
| 5 | グラフィカルログインによるマルチユーザーモード |GUIでログインする状態|
| 6 | システムの再起動 |再起動に向かう状態|
~
httpd の自動起動を on にする場合
 # chkconfig httpd on
~
httpd の自動起動を ランレベル3と5のみ on にする場合
 chkconfig --level 35 httpd on
~
現在のランレベルを調べる場合
 # runlevel
 N 3                    ←ひとつ前のランレベルは存在せず、現在のランレベルは3。
~
*バージョン確認 [#m502e11f]
**OS [#scb8de06]
 # cat /etc/issue
 CentOS release 6.5 (Final)
 Kernel \r on an \m
**カーネル [#yd9ec247]
 # uname -a
 Linux hogehoge 2.6.32-431.5.1.el6.i686 #1 SMP Tue Feb 11 21:56:33 UTC 2014 i686 i686 i386 GNU/Linux
**Apache [#b196ccbc]
 # httpd -v
 Server version: Apache/2.2.26 (Unix)
 Server built:   Mar  7 2014 17:07:03
または、
 # httpd -V
 Server version: Apache/2.2.26 (Unix)
 Server built:   Mar  7 2014 17:07:03
 Server's Module Magic Number: 20051115:33
 Server loaded:  APR 1.5.0, APR-Util 1.5.3
 Compiled using: APR 1.5.0, APR-Util 1.5.3
 Architecture:   32-bit
 Server MPM:     Prefork
   threaded:     no
     forked:     yes (variable process count)
 Server compiled with....
  -D APACHE_MPM_DIR="server/mpm/prefork"
  -D APR_HAS_SENDFILE
  -D APR_HAS_MMAP
  -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
  -D APR_USE_SYSVSEM_SERIALIZE
  -D APR_USE_PTHREAD_SERIALIZE
  -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
  -D APR_HAS_OTHER_CHILD
  -D AP_HAVE_RELIABLE_PIPED_LOGS
  -D DYNAMIC_MODULE_LIMIT=128
  -D HTTPD_ROOT="/etc/httpd"
  -D SUEXEC_BIN="/usr/sbin/suexec"
  -D DEFAULT_PIDLOG="logs/httpd.pid"
  -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
  -D DEFAULT_LOCKFILE="logs/accept.lock"
  -D DEFAULT_ERRORLOG="logs/error_log"
  -D AP_TYPES_CONFIG_FILE="conf/mime.types"
  -D SERVER_CONFIG_FILE="conf/httpd.conf"
**OpenSSH [#p4c2c7c7]
 # ssh -V
 OpenSSH_6.5p1, OpenSSL 1.0.1e-fips 11 Feb 2013
**Postfix [#y29a1188]
 # postconf | grep mail_version
 mail_version = 2.6.6
 milter_macro_v = $mail_name $mail_version
**OpenSSL [#ha17286b]
 # openssl version
 OpenSSL 1.0.1e-fips 11 Feb 2013
**Ruby [#x24fc118]
 # ruby -v
 ruby 2.0.0p451 (2014-02-24 revision 45167) [i686-linux]
**Subversion [#d961e7d8]
 # svn --version
 svn, version 1.8.8 (r1568071)
    compiled Feb 17 2014, 18:18:15 on i686-pc-linux-gnu
 
 Copyright (C) 2013 The Apache Software Foundation.
 This software consists of contributions made by many people;
 see the NOTICE file for more information.
 Subversion is open source software, see http://subversion.apache.org/
 
 以下のリポジトリアクセス (RA) モジュールが利用できます:
 
 * ra_svn : svn ネットワークプロトコルを使ってリポジトリにアクセスするモジュール。
   - Cyrus SASL 認証を併用
   - 'svn' スキームを操作します
 * ra_local : ローカルディスク上のリポジトリにアクセスするモジュール。
   - 'file' スキームを操作します
 * ra_serf : Module for accessing a repository via WebDAV protocol using serf.
   - using serf 1.3.4
   - 'http' スキームを操作します
   - 'https' スキームを操作します
**PostgreSQL [#m3ee8d8c]
 # yum list installed | grep postgres
 postgresql93.i686       9.3.3-1PGDG.rhel6 @pgdg93
 postgresql93-devel.i686 9.3.3-1PGDG.rhel6 @pgdg93
 postgresql93-libs.i686  9.3.3-1PGDG.rhel6 @pgdg93
 postgresql93-server.i686
または、
 # psql -U postgres
 postgres=# select version();
                                                 version
 -------------------------------------------------------------------------------------------------------
  PostgreSQL 9.3.3 on i686-pc-linux-gnu, compiled by gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-4), 32-bit
 (1 行)
 postgres=# \quit 
**yumでの確認 [#p55a370a]
 # yum list installed
または、
 # yum list installed | grep XXXX
XXXXは調べたいもの。例えばzlibなら、
 # yum list installed | grep zlib
 zlib.i686               1.2.3-29.el6      @anaconda-CentOS-201311271240.i386/6.5
 zlib-devel.i686         1.2.3-29.el6      @base
~
 # yum list installed
とした時に表示されるリストに黄色と赤の色付きで表示されるものがある。
 # man yum.conf
を参照すると、黄色に関するものは 
 color_list_installed_newer  The colorization/highlighting for packages in list/info installed which are
 newer than the latest available package with the same name and  arch.  Default  is  ‘bold,yellow’.  See
 color_list_installed_older for possible values.
赤に関するものは
 color_list_installed_extra  The colorization/highlighting for packages in list/info installed which has
 no available package with the same name and arch. Default is ‘bold,red’. See color_list_installed_older
 for possible values.
と記載されている。yum.confはデフォルトのまま使用しているので、~
黄色は「yumが参照しているリポジトリの最新よりも新しいもの。」~
赤色は「yumが参照しているリポジトリには同じ名前の利用可能なものがない。」~
といったところかな?~
*容量を調べる [#m63f2220]
例えば/etc/httpdディレクトリの使用容量を調べる場合
 # du -h /etc/httpd
 76K     /etc/httpd/conf/extra
 60K     /etc/httpd/conf/original/extra
 84K     /etc/httpd/conf/original
 188K    /etc/httpd/conf/proj
 12K     /etc/httpd/conf/ssl
 472K    /etc/httpd/conf
 8.0K    /etc/httpd/conf.d
 484K    /etc/httpd                       ←/etc/httpd全体の使用容量

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS