システム運用時、大切となってくるファイル達

システム管理者にとって運用上、特に大事になるだろうファイルについて以前調べたので、今回はそれをまとめてみます。
以下に書いたような、ディレクトリ構造や、何のためのファイルか?という事の全体像を知った事で作業がしやすくなりました。

参考にさせていただいたメインの教材はこちらです。

Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)

Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)

管理者にとって特に大事なファイル

/etcと/varディレクトリ以下のファイルが大切だと言えると思います。
前者は、システムの設定ファイルが保存されるディレクトリ。
後者は、主にシステムのログファイルが保存されるディレクトリです。
では、次から、それぞれのディレクトリの下にどのようなファイルがあるか見ていきたいと思います。

/etc以下

fstab

マウントの方法について記載されています。
linuxツリー(/ディレクトリを頭にして、他のディレクトリがぶら下がっていく構造)に、「どのデバイス」の「どのパーティション」が「何のファイルシステム」でマウントされるのかという事を指定してあげるファイルです。

実際に見てみると、以下のようになっています。

[admin@localhost ~]$ cat /etc/fstab
/dev/VolGroup00/LogVol00 / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/VolGroup00/LogVol01 swap swap defaults 0 0

一番左の列から1として順番に見てみると、
1:デバイス・ファイル名の指定をする。ハードディスクやそのパーティション、CDドライブなどのデバイス名を記述します。
2:マウント・ポイントの指定。1番目の項目で指定されたデバイスが、linuxツリーのどこでマウントされるかを示します。
3:ファイルシステムの指定します。
4:マウント・オプションの指定します。
5:バックアップの指定。dumpコマンドのバックアップの対象とするかを指定する。0は対象外、1は対象となります。
6:ファイルシステムの整合性をチェックの対象とするかを指定します。0は対象外、他の数字は対象となります。数字の大きさはチェックをする順番で、/をマウントするデバイスに1を指定してあげて、他は2以上の数字を指定しあげます。

modprobe.conf

各機器のドライバソフトのようなカーネルモジュールの設定を行うファイルです。
バイスの認識がうまくいかない場合はこのファイルを指定します。

[admin@localhost ~]$ cat /etc/modprobe.conf
alias eth0 b44
alias snd-card-0 snd-atiixp
options snd-card-0 index=0
options snd-atiixp index=0
remove snd-atiixp { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-atiixp

上を見てわかるように、NICがeth0という名前に置き換えられているようです。

rc.d

インストールしたソフトの起動用ファイルがインストールされるディレクトリです。

[admin@localhost ~]$ ls /etc/rc.d/
init.d rc.local rc0.d rc2.d rc4.d rc6.d
rc rc.sysinit rc1.d rc3.d rc5.d

この中のinit.dディレクトリに、起動用ファイルが存在します。また、システム起動時に自動的にソフトを起動させるために、rcN.d(Nは1〜6)ディレクトリ以下に、init.d以下の起動ファイルのシンボリックリンクを作成します。ちなみに、Nとランレベルが対応していて、たとえばランレベル3で、iptablesを起動させたければ、/etc/rc.d/init.d/iptablesシンボリックリンクを/etc/rc.d/rc3.dに作成すれば良いです。

hosts

LAN内でDNSを使用しないでホスト名での通信を行いたい場合は/etc/hostsを設定します。

[admin@localhost ~]$ cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost

1 localhost6.localdomain6 localhost6

これは、「IPアドレスが一番左の列のマシンに対して、右の列にある名称でアクセスできるようにする」という意味を持つようになります。
今回は、127.0.0.1(自マシン)に対して、localhost.localdomain または localhostという名前でアクセスできるようにするという意味になります。下の行は、IPv6の時の記述です。

resolve.conf

名前解決をする時、どのDNSサーバを利用するかを設定するためのファイルです。

[admin@localhost ~]$ cat /etc/resolv.conf
; generated by /sbin/dhclient-script
nameserver 192.168.0.1
search localdomain

IPアドレスが192.168.0.1のマシンを利用して、localdomainというドメイン内でホスト名を探すように指定しています。

nsswitch.conf

名前解決の際に、上記した/etc/hostsと/etc/resulve.confのどちらを優先するかを指定します。

hosts.allow,hosts.deny

アクセス制御を行うための設定ファイルがこれらです。これらが適用されるのは、libwrap.aというライブリを利用しているネットワークサービスデーモンです。sshd,xinetd,sendmail等がこれに該当します。
ちょっと仕組みを考えてみると、自マシンにクライアントマシンからのアクセスがあった場合、
最初に/etc/hosts.allowが参照され、設定と適合する場合サービスとの通信を許可します。
次に、/etc/hosts.denyを参照して、この設定と適合する場合、通信を拒否します。
そして、どちらにも該当しない場合は通信の許可をします。
たとえば以下の設定の時、

[admin@localhost ~]$ cat /etc/hosts.allow
sshd: 192.168.0.3

[admin@localhost ~]$ cat /etc/hosts.deny
ALL : ALL#

sshによる接続を192,1680.3のクライアントのみに許可して、他のlibwrap.aライブラリを利用するサービスは全てシャットアウトするという設定になります。

xinetd, ineted

「ポートを監視して、接続の要求が来た時に該当するサーバプログラムを起動させる『スーパーデーモン』」の設定を行うファイルです。現在は、xinetdがメインで使われているようです。

sysconfig

ネットワーク関連の設定などを、sysconfig以下のファイルに書き込みます。
たとえば、ネットワークインターフェースの設定は、networkおよび、network-scripts/ifcfg-eth0を見ればわかります。

[admin@localhost ~]$ cat /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=localhost.localdomain
[admin@localhost ~]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Broadcom Corporation BCM4401-B0 100Base-TX
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=xx:xx:xx:xx:xx:xx
ONBOOT=yes

上からIPv6を利用しないことが分かったり、IP割り振りはdhcpである事が分かります。

/var以下

/log/messages

システムの動作に関する様々な情報書き込まれています。

# cat /var/log/messages
Mar 28 07:42:34 localhost syslogd 1.4.1: restart.

今朝、再起動したみたいですね。

/log/cron

cronによって定期的に実行されるコマンドの実行結果が、ここに記録されます。

# cat /var/log/cron
Mar 28 07:43:01 localhost anacron[2562]: Job `cron.daily' terminated
Mar 28 07:47:31 localhost anacron[2562]: Job `cron.weekly' started
Mar 28 07:49:55 localhost anacron[2562]: Job `cron.weekly' terminated
Mar 28 07:49:55 localhost anacron[2562]: Normal exit (2 jobs run)
Mar 28 08:01:01 localhost crond[2258]: (root) CMD (run-parts /etc/cron.hourly)
Mar 28 09:01:01 localhost crond[2366]: (root) CMD (run-parts /etc/cron.hourly)
Mar 28 10:01:01 localhost crond[2479]: (root) CMD (run-parts /etc/cron.hourly)

とくにcronは設定していないので面白いことは書いてありませんでした。


以上です。
まとめると、設定をしたかったら/etc、ログを見たかったら/varに行け!って感じですね。(いいすぎ?)
構造を理解するって、やはり凄く重要なのだなぁと実感したこの前でした。