スポンサードリンク

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

以上