Kozupon.com    
 
 etcディレクトリのそうそうたる面々!


Linux及びFreeBSD等のetcディレクトリには、色々な機能を持った設定ファイルが保存されている。ネットワークに関する設定、セキュリティに関する設定、アプリケーションに関する設定等々多彩な顔ぶれが揃っている。ここでは、その一部の設置ファイルの正しい設定方法及び注意点について述べてみたい。主に代表的なファイルを抜粋して紹介するので、全てではない事を了承していただきたい。
( 当たり前の事が書いて有るけど、小生は直ぐに忘れるのでメモ書きとして見てくださりませp(^^)q )


1.ホストを特定するhostsファイル

ホスト名とIPアドレスの関連付けを行うものにhostsファイルがある。世の中のホスト全てがIPアドレスで管理されるのであれば、不要なファイルであるが現実問題として無理な話しである。
DNSの代わりとしても重要なファイルで、システム起動時に読み込まれる。DNSは、ネットが繋がっている事が前提とされるため、DNSの障害時にはこのhostsファイルが威力を発揮する。さらに、システム起動時はやはりhostsが読み込まれ、少なくても身の回りのホストのありかは優先的に特定できるであろう。まず、hostsの一般的な書式について紹介する。
hostsファイルには基本的に自ドメインのホストは全て書き込むように心がけよう!

IPアドレス          ホスト名称(FQDN)       ホストの別名(エイリアス)(複数記述可)

良く人のhostsの設定を見るが、間違っている設定を行ってるホストを目にする。

正しい記述は、以下のように記述する

# vi hosts

# hostsの記述です。コメントは、#でお願いしますね!
# 一番初めには、ローカルホスト(自分自身)のアドレスとホスト名localhostの記述をする。別名は複数定義可能!

127.0.0.1        localhost.localdomain         localhost  myhost    もしくは
127.0.0.1                        localhost                                                 localhost      myhost

# 2番目には、必ずこのホストのホスト名とIPアドレスを記述する。

192.168.0.42       server.kozupon.com          server

# 3番目以降からは、自ドメインにある全てのホストを記述しょう!

192.168.0.1       router.kozupon.com          router
192.168.0.40      onechan.kozupon.com         onechan
192.168.0.41      mabui.kozupon.com          mabui
192.168.255.43     tabetai.kozupon.com         tabetai


このように、3番目以降に通常は参加してるドメインホストを全て記述する。また、routerがある場合には適当な名前を付けてやはり登録する(ここでは、routerと命名した)。hostsは見落としがちであるが、非常に大切なので正確に記述しておく事をお勧めする。


2.セキュアなサーバを作るためのhosts.allow及びhosts.denyファイル

セキュリティは、IPフィルタリングのみと思ってる方々がいるが決してそれだけではない、スーバーサーバinetd
及びxinetd
から起動されるデーモンちゃんにはアクセス制御がある。それがTCP_Wrapper(ラッパーですワッパーではありません)だ!
重要)TCP_Wrapperの基本は、まず全てdenyにして必要に応じてallowで許可するようにする。

hosts.allow : アクセスを許可するドメインもしくはホストを定義する。
hosts.deny  : 
アクセスを拒否を定義する。

Wrapperを設定する場合、必ずファイルhosts.denyを以下内容のように、拒否設定にしてからファイルhosts.allowを設定する事。

■ hosts.denyの設定

# vi hosts.deny

# hosts.denyの設定のコメントは#でお願いします。

ALL  :  ALL

このように、hosts.denyは必ず全て拒否設定にしておく事。

■ hosts.allowの設定

# hosts.allowのコメントも#でお願いします。

ALL   :    192.168.10.                ←192.168.10.0のネットワークからのアクセスを全てのサービスに対して許可する。最後に(.)を付けるのを忘れずに!
ALL   :    127.0.0.1                 ←自ホストからのアクセスは全てのサービスに対して許可する。
ALL   :    192.168.50.
ALL   :    192.168.0.
ALL   :    192.168.11.5               ←192.168.11.5のホストからのアクセスを全てのサービスに対して許可する。
ALL   :    server.unkodetai.com        ←ホストserver.unkodetai.comからのアクセスは全てのサービスに対して許可する。
ALL   :    .hogehoge.co.jp             ←ドメインhogehoge.co.jp内のホストは全てのサービスに対して許可する。
ALL   :    .hogehoge.com

# 特定のサービスのみ全てのホストに対して許可する。

sshd   :     ALL           :   allow          ←sshサービスを全てのホストに対して許可する。
in.proftpd :   203.141.144.180    :   allow          ←in.proftpdサービスを203.141.144.180のホストに対して許可する。          
ipop3d  :     ALL           :   allow

以上のように、アクセス制御が設定できる。設定の反映に関してはマシンのモジュールのリロード及びマシンリセット等の処理は必要ない。さらに、設定後はhosts.allowの設定が反映されてるかチェックする事をお勧めする。チェックは以下のtcpdmatchコマンドで行える。

# tcpdmatch in.proftpd 203.141.144.180

client: address 203.141.144.180
server: process in.proftpd
matched: /etc/hosts.allow line 6
access: granted

203.141.144.180には、in.proftpdを許可。

# tcpdmatch in.proftpd unko.morashita.com

client: hostname unko.morashita.com
client: address ***.***.***.***
server: process in.proftpd
matched: /etc/hosts.deny line 9
access: denied

unko.morashita.comには、in.proftpdを拒否。


3.sendmail、postfixで使うaliasesファイル

MTA特にsendmailもしくはpostfixでおなじみのaliasesファイルについて説明してみたい。
内容的には、aliasesファイルはメールの別名を定義する。さらに、メールのグループを登録すると言う機能である。
おなじみのpostmasterやroot宛てのメールの配送先のユーザ名などを定義しておく。
ここでは、その内容の詳しい説明はしないが、小生はaliasesファイルの置き場所に迷う時がある。それは、/etc/aliasesに有ったり、/etc/mail/aliasesに有ったりOSによってもまちまちである。そこいら辺をはっきりさせるために色々と調べた。
まず、aliasesファイルの更新を反映するのは、newaliasesと言うコマンドである。aliasesファイルを編集した場合、
必ずnewaliasesコマンドを編集後に実行しないと設定が反映されないのはご存知だろう。
このnewaliasesコマンドは、

# newaliases

と実行すると、/etc/aliasesファイルパスで同aliasesファイルが更新される。したがって、/etc/mail/aliasesであった場合は、更新されない。この事は、知らない方も多いのではないであろうか?この場合の対処方法としては、以下の2つがある。

■ newaliasesオプションを使用する。

# newaliases -oA/etc/mail/aliases

を実行して、パスを指定する方法。

■ シンボルリンクを張る。

/etc/mail/aliasesファイルと/etc/aliasesでシンボルリンクを張る。

以上の方法何れかで対処すればいいかと思う。しかし、事実上メール関係のファイルなので/etc/mail/aliases
にまとめた方がすっきりするのではないかと、私的には考える。


4.リゾルバファイルresolv.conf

DNSクライアントの事をリゾルバと言う!だから、resolv.confはDNSを利用する全てのホストに存在するはずである。
しかし、DNSを利用しないサイトはまず無いのでホストには必須のファイルと言っても過言ではない。これの設定忘れでネットに繋がらないこともたびたび有る。
resolv.confファイルの書式は簡単である。以下が基本的なresolv.confファイルの書式である。

search        <ドメイン名リスト(複数設定可スペースで区切る)>
nameserver     <プライマリDNSサーバのIPアドレス>
nameserver     <セカンダリDNSサーバのIPアドレス>

search以外に、domainと言う記述があるが両者の違いはdomainの場合、ドメイン名が1つしか指定できない。
しかし、searchは複数指定可能である。
domainで自動的に記述されているresolv.confファイルがあった場合には、searchに直しておくと良いだろう。


5./etc/cron.xxxxxディレクトリのcronスクリプト

RedHet系Linuxの場合、cronのジョブは/etcのcrontabでスケジューリングされる。さらに、このcrontabの中で、

■ cron.hourly
■ cron.daily
■ cron.weekly
■ cron.monthly

これらのディレクトリにcrontabのrun-partsジョブ、すなわち以下の記述がこれに相当する。

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

■ cron.hourlyジョブ

毎時行いたいジョブがある場合は、このディレクトリの下に置く。
デフォルトでは何もいない。
ディレクトリに置くファイルは、プログラム本体ではなくスクリプトで書いたファイルを置くこと。

■ cron.dailyジョブ

毎日1回実行したいジョブがある場合は、このディレクトリの下に置く。
デフォルトで置いてあるジョブの紹介。

@ logwatch

logwatchはlogを監視するためのPerlスクリプトである。
/var/log/messagesの内容で怪しいログが発生した場合にroot宛にメール送信する。この手のジョブは他のユーティリティでも実現してるが、RedHatLinuxでは標準で組み込まれている。

A webalizer

webalizerは、Apacheのログファイルを解析しグラフ化その他をするユーティリティである。
ここでは、webalizerについては詳しく述べない。別途、manページを参照して欲しい。

B anacron

0anacronスクリプトは以下のような記述である。

#!/bin/sh

anacron -u cron.daily

" -u "のオプションは、タイムスタンプを更新するがその他何も実行しない。
何も実行しないのは、cronとanacronを排他的に実行している。以下は、/var/spool/anacron/cron.dailyの中身。

[root@yh /etc]# more /var/spool/anacron/cron.daily

20030918

これは、どういう事かというと元々Unixマスィーンは電源を入れっぱなしにして運用するのが常識だった。だから、つまりcronは電源を常時入れっぱなしでスケジューリングして実行するモジュールで有ることが言える。昨今、俺も含めて鯖以外のマシンは常時電源投入されていないことの方が多いだろう。cronのジョブというのは、夜中に実行されるスクリプトが多いはずである。したがって、anacronは実行されると最後に実行された日付のタイムスタンプファイル( /var/spool/anacron/cron.daily )をチェックし、/etc/anacrontabで指定した時間が経過している場合だけ処理(/etc/cron.xxxxxディレクトリ下のスクリプト)を実行する。つまり、anacronはcronが何かしらの理由で予定時間になっても実行しなかったとき、予備として使われる物でありcronモジュールの補佐的役割を果たしている。ちなみに、/etc/anacrontabはデフォルトで以下のようになっている。

[root@yh /etc]# more /etc/anacrontab

# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# These entries are useful for a Red Hat Linux system.

1    5    cron.daily    run-parts     /etc/cron.daily
7   10    cron.weekly   run-parts     /etc/cron.weekly
30   15    cron.monthly  run-parts     /etc/cron.monthly

C logrotate

これは、有名なログファイルのローテーションを行いログの切り分けをするためのジョブである。スクリプトの内容は以下である。

[root@yh cron.daily]# more logrotate

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf

logrotate.confの内容では、各週ごとに切り替え4つ迄過去ログを切り分ける設定になっている。しかし、wtmpファイルのみは毎月ごとに切り替えて1つ迄の過去ログしか残さない。
その他のログファイルに関しては、/etc/logrotate.dのディレクトリ下のスクリプトファイルで詳細が決められている。

D makewhatis

これは、whatisコマンド用のデータベースを更新するスクリプトである。以下がスクリプトの内容である。

#!/bin/bash

LOCKFILE=/var/lock/makewhatis.lock
PATH=$PATH:/usr/sbin

# the lockfile is not meant to be perfect, it's just in case the
# two makewhatis cron scripts get run close to each other to keep
# them from stepping on each other's toes. The worst that will
# happen is that they will temporarily corrupt the database...

[ -f $LOCKFILE ] && exit 0
trap "rm -f $LOCKFILE" EXIT
touch $LOCKFILE
makewhatis -u -w
exit 0

whatisコマンドは、目的のコマンドに関するオンラインマニュアル一覧を出力するコマンドである。manに関する情報を管理するのにデータベースを使っている。

E rpm

このスクリプトは、RedHatのRPMパッケージのデータベースを更新して、/var/log/rpmpkgsファイルに書き込む物である。つまり、これを見ればインストール済みのバイナリパッケージが解る。
コマンドでは、 # rpm -qa でインストール済みのバイナリパッケージ一覧が表示されるが、/var/log/rpmpkgsファイルを展開した方が調べるのが早いかもしれない(笑)。

F slocate

このスクリプトは、目的のファイルを検索するlocate用のデータベースを更新する。みなさん知ってるかどうか解らないが、目的のファイルを検索する場合、locateコマンドはfindコマンドより高速な検索が行える。
しかし、高速に検索が行える代わりに定期的にlocate用データベースの更新が必要になると言うことである。

G tetex

このスクリプトは、tmpwatchコマンドを使って/var/lib/texmfディレクトリ下のフォントを削除する。このフォントはTeTeXコマンドが自動的にフォントを生成するのだが、180日使われないでいると削除している。

H tmpwatch

このスクリプトは、/tmp、/var/tmpディレクトリ下のゴミファイルを掃除するジョブ。/tmpは10日間、/var/tmpは30日間アクセスがなければ削除対象となる。
tmpwatchを使うのはRedHat系特有で通常は、findコマンドを使うことが多い。削除すると言うジョブなので安全性が問題となるのでtmpwatchはその安全性を考慮している。

■ cron.weeklyジョブ

このディレクトリの下には、anacronとmakewhatisスクリプトしかない。機能はすでに説明した通りである。

■ cron.monthlyジョブ

このディレクトリの下には、anacronスクリプトしかない。機能はすでに説明したとおりである。

以上


 
 
 



Copyright 2005 Kozupon.com.