/etc一族...


/etc 以下は, いろんなファイルが集まっている. /etc/passwd や /etc/shadow はおなじみだが. 他のファイルは何のためのもの だろうか. 中には消すとヤバイものも多いので, 今日はちょっと全貌を見渡して みましょう. OS の種族やバージョン, また, サーバのコンパイル時のオプショ ンなどで, ファイル名が記事と異なる場合もあるので, 全面的に信頼せずに, シ ステムのマニュアルを必ず読むようにして下さい.

なお, 文中にある「HUPシグナルの送信」は, xyz を目標のプログラムのプロセス id として,

root@hoge:/etc # kill -HUP xyz
とかやること. kill -1 xyz でもいい. 詳しくは signal(7) と kill(1) を見よ. ああ, /etc を rm -r して消滅させて shutdown さえ出来なくなった事もありまし たっけねえ. 何もかも懐かしい.

exports
nfs サーバが, このファイルを見てIP によるファイル共有すなわち network file system による接続要求にどう応答するかを決める. このファイルを見るサーバは 2つある. rpc.mountd と rpc.nfsd だ. ファイルの書き方は exports(5) を見てもらおう. そう面倒なものではな い. 非常に便利だ.
しかし, これは本質的に面倒で, 安全にするのは難しいサービスだ. nfs は, ある意味で unix のアキレス腱だ. なんせ, プロトコルが udp(TCPの親戚で, IPの上位プロトコル)なので, うっかりしたら世界中からファイルを共有されてしまう. サーバにバッファオーバフローその他の穴があったら, 世界中から攻撃可能だ. だから, IP reachable でないところ(たとえば, IPマスカレードしているルータの内側) だけで nfs は使おう. nfs を起動する rc ファイルは別にしておこう. 普段は, 起動せず, 必要な時だけ起動しよう. rpc.mountd rpc.nfsd の二つのプログラムに HUP シグナルを送信すれば, exports の変更が反映される.
/etc/group
どのユーザがどのグループに属しているかを設定しているファ イルだ. たとえば, WWWサーバのドキュメント(コンテンツ)を複数のユーザで管 理している場合, "www" みたいなグループを作り, コンテンツのディレクトリ のグループを wwwに, 許可属性を 775 にし, 中のファイルも 664 にすれば良い. グループ wwwに属するユーザがウェブマスターズというわけだ.
ftpaccess
ftpd (wu.ftpd) の設定ファイル. シェルアカウントは無いが, 書き込み可能でユーザモードの ftp を許可する設定は, このファイルと /etc/shells とそのアカウントの login shell を次のよ うに設定する事で可能. ユーザ名を ftp とすると,
  1. /etc/shells に, 存在しないファイル名を書く. たとえば, /bin/hoge
  2. ftp の login shell を /bin/hoge にする.
  3. ftpaccess で guestgroup に指定したグループに, ftp を参加さ せる(/etc/group に書き込む)
  4. 必要な場合, guestgroup の書き込み制限を ftpaccess でかける. 書き込み制限は, デフォルトでは 無しなので, 注意(slackware では, 書き込みを許可 しない設定になっている).
  5. ユーザ名 "ftp" で接続すると, ユーザ認証がある. 認証されると, ユーザ "ftp" のホームディレクトリから上へは行 けなくなるアクセス制限がかかる(chroot).
  6. シェルが無いので, login はできない.
wu.ftpd は inetd(後述) から呼ばれるので, このファイルを更新したあ とのftpdへの接続から更新が反映される. HUP シグナルを送信する必要は 無い. なお, ここに書いた方法は wu.ftpd でのはなしであり, 私は他の ftp サーバでの事情を知らないのであしからず.
host.conf
レゾルバ(名前を IPアドレスに変換するライブラリ)が, データベースを引く優先度の設定だ. resolv.conf には, ネームサーバのリストが載っているが, ローカルの /etc/hosts を先に引く設定にしておけば, resolv.conf に載っているサー バから応答が無くても, /etc/hosts に載っているホスト(頻繁に使うリモー トホストを, ここに登録しておく と良い)に関しては, name resolution が 可能で, かつ速い. つまり障害に強い.
hosts.allow と hosts.deny
tcpd (通称 tcpwrapper ) が使う設定ファイル. inetd から呼ばれるサービスは, 直接には tcpd が起動するようになっており, tcpd は これら 2つのファイルを用いてアクセス制限や, log を取る. サービスとホスト名が hosts.allow に出現したら, 許可. hosts.deny に書いてあったら不許可. どちらにも書いてない時は, 許可. となる. 例えば特定のホストからだけ telnet を許可したい場合は, hosts.allow に
in.telnetd : 許可したいホストのリスト
hosts.deny に
in.telnetd : ALL
と書けば良い. くわしくは, man hosts_access(5)
hosts.equiv
localhost 以外は何も書かない方が良い. これは, rlogind が使うファイルで, ここに書いてあるホストからは, 同じユーザ名なら, 認証無しでlogin できる という設定だ. とんでもねえ話だが, 私が昔いたサイトは, 幾つかのホス トでこういう設定がしてあった. Goodbye to the Good Old Days of the Internet. ですか?
inetd.conf
こいつは, ネットワークに接続されているホストにとっては, /etc に存在するファイルのなかで, passwd や shadow に匹敵する重要ファイ ルだ. ここに書いてあるサービスは, 常時サーバが起動されているわけではない が, 必要に応じて inetd という統一窓口サーバから呼び出されるものだ. なんでこんな設計になっているかと言うと, ネットワークサービスからの負荷を 制限するための仕組みだ. それに, どういうサービスを起こすかを, 統一的に管理できるという利点もある. 設計が古いので, 現状に合わなくなって来ているという面もあるが, 制御のやりかたが簡単で広く知られているという利点もある. とはいえ, inetd.conf の書き方は, そう簡単ではない.
inetd から起動されるサービスにどんなものがあるかを調べる時は, grep だ. grep -v ^# inetd.conf で, どんなサービスが許可されているかが判る. 使ってないとわかりきっているサービスは, コメントにしてしまえ. inetd.conf を変更したら, inetd に HUP シグナルを送信することで, 現在起動している inetd に, 新しい設定が反映される. でも, ネットワークは linux システムにとって, しばしば生命線だから, 有効になっていたサービスを停止したり, hosts.deny に書くのはちょっ と注意した方が良いこともある. 特に, リモートからこれを間違えて, 接 続できなくなったりしたら, サーバが置いてある場所まで御出勤だ. 詳しくは inetd.conf(5) を見よ.
inittab
こいつは下手にいじらない方がいい. 間違えると起動しなくなったり, login できなくなる. runlevel を変更する事で, システム全体の状態を根本的に変更できる. init 1 とかやって, 要らんサービスを全部止めてから, 各ファイルシス テムをumount して fsck するというのは, 月に一度くらいやると良いか も. 異常が無ければ, init3 なり 4(slackware なら, xdmが動く) なり して戻れば, リブートしなくて良い. inittab を変更したら, init を HUP すればいい. kill -1 1 だ. なぜなら, init の pid は 1 だから. 詳しくは, inittab(5) と init(8).
issue.net
telnet とかで接続された時に出るメッセージを書いたファイル. デフォルトは, welcometo Linux 2.0 とかそんな感じだが, OS のタイプとか を教えたくない人は, ここをカスタマイズするかね.
motd
message of today の略らしい. rlogin とかで login した時に出るメッセージ(ssh でも使われる).
mtab
今mountされているファイルシステムに関する情報が書いてある. だから, 手でいじるな.
fstab
boot した時に mount されるファイルシステムの記述. 他に, mount できるファイルシステムと, そのオプションとかも書ける. mount コマンドから指定できるオプションと, ここに書けるオプションは, 必ずしも一致しなかったりするのでややこしい. ここらへんをいじくって失敗すると, 起動しなくなるし, いじってもそんなに便 利になるというわけでもないので, あまりいじらない方が良いかも.
named.boot
ネームサーバ bind 4.x のための設定ファイル. サーバの基本的な設定と, データベースのファイルに関する記述がある.
named.conf
bind 8.x の設定ファイル. 設定できる項目は bind 4.x に比 べて飛躍的に増え, いろいろやりやすくなった. いまんところ, まだちゃ んと実装されていない機能もあるみたいだが, 個人的には 4.x に戻る気 にはならない.
securetty
root として login できるターミナルの設定. ローカルのコンソールだけにすべきである. なぜなら, ユーザ"root" が存在することは判り切っており, そいつが login できる端末があれば, あとは パスワードをクラックする だけだからだ.
shutdown.allow
ctrl+alt+del の「3本指の敬礼」で shutdown しても良 いユーザをここで記述する. 無ければ, 誰でも shutdown 可能. うひょひょ. でも, telnet して, これをやっても死ぬのは自分のシステムだぜ(爆笑).
skel/
adduser した時に新しいユーザに配られるファイル. ユーザに変更して欲しくない設定は, root 所有のファイルへの symlink にしておけば良い.
syslog.conf
syslogd の設定ファイル. xconsole を使う人は, 緊急時の メッセージを /dev/console に出力するように設定しとけば, リアルタイ ムでモニタできる. この設定を変更したら, 現在動作している syslogd を停止せずに HUP シグナルを送信するだけで, 設定が反映される. 一般に, 一瞬たりとも停止してはならないサービスを提供するプログラム は, HUP シグナルを送信することで, 設定の変更を反映する事が出来る ようになっている. ppp を使う人は, *.info;*.notice /dev/console とか書いとけば, いちいち tail -f しなくても, console に log が吐かれる. xdm の login 画面にはデフォルトでは xconsole が一個出てるが, これにもメッセージが出るので, login しなくても見れて良いが, login しなくても見られちまうというのは, ちょっとアレな場合もあるか もだな. まあ, 便利になればやばくなるのだ.
sendmail.cf
メールサーバ sendmail の, アレな感じの設定ファイル. CF を使わずに vi でナマ書きする人も居るらしい. 私は幸いにして, 触った事が無い.