Linuxの/etcを使いこなす—システム設定の心臓部
「/etcとはOS全体の設定を、人間が読めるテキストで一元管理する“中枢の設定倉庫”である。」
/etcの役割:ホスト固有の設定を一元化
Linuxの設定は「配布元の既定値」と「ホスト固有の上書き」に分かれる。/etcは後者を置く場所だ。/usr(既定値)を編集せず、/etcで差分だけを管理するのが現代的な作法。起動時のサービス、ネットワーク、ユーザ・認証、ファイアウォール、ロケール、タイムゾーンなど、OSの“性格”を決める設定はここに集約される。
キーポイントは3つ。
- ホスト固有:同じイメージを複数台に展開しても/etcの中身はマシンごとに異なる。
- 人間可読:多くはプレーンテキストでdiff/Git管理に向く。
-
優先順位:概ね
/etc > /run > /usr
。/usrの既定値を/etcが上書きし、一時値は/runに現れることがある。
名前の由来:etcは“et cetera”から育った
/etcは歴史的に“et cetera(その他いろいろ)”の略として誕生し、曖昧な置き場だった。現在は「管理者が編集するシステム設定の集約場所」として定着している。しばしば“Editable Text Configuration”といった後付け解釈も見かけるが公式ではない。
何が入る?主要ファイルとディレクトリ早見表
重複を避け、要点だけを表と短いカタログに凝縮する。
アカウント・認証(同階層の比較)
ファイル | 役割 | 更新主体 | 機微度 |
---|---|---|---|
/etc/passwd | ユーザ基本情報(UID/ホーム/シェル) | useradd等 | 低〜中 |
/etc/shadow | パスワードハッシュ等 | passwd | 高 |
/etc/group | グループ定義 | groupadd等 | 低 |
/etc/gshadow | グループの秘匿情報 | ツール | 高 |
/etc/sudoers | 管理者権限委譲 | visudo | 中〜高 |
/etc/pam.d/ | 認証モジュール設定 | 管理者 | 中〜高 |
名前解決・ホスト識別(同階層の比較)
ファイル/ディレクトリ | 概要 | 典型的な編集 | 注意点 |
---|---|---|---|
/etc/hostname | ホスト名(1行) | 永続名の設定 |
hostnamectl set-hostname でも可 |
/etc/hosts | 静的な名前解決表 | 局所名追加 | DNS優先の設計に寄せる |
/etc/resolv.conf | DNSクライアント設定 | 直接編集/自動生成 | NMやresolvedに上書きされうる |
/etc/systemd/resolved.conf.d/ | resolvedのdrop-in | .conf追加 | ファイル名序数で優先度管理 |
ディストリビューションの流儀(横比較)
項目 | Debian/Ubuntu | RHEL系 | 備考 |
---|---|---|---|
パッケージリポジトリ | /etc/apt/sources.list{,.d/} | /etc/yum.repos.d/(dnf) | 設定形式が異なる |
ファイアウォール | /etc/ufw/ | /etc/firewalld/ | ポリシー表現が異なる |
ネットワーク管理 | /etc/netplan/→systemd-networkd/NM | 旧/etc/sysconfig→NM/networkd | 近年はNM or networkd |
サービス管理 | /etc/systemd/ | /etc/systemd/ | systemdで収斂 |
Cron/Timer | /etc/cron.* | /etc/cron.* | systemd timerへの移行が増加 |
用途別カタログ(重複なしの要点)
-
起動とサービス:/etc/systemd/(unitと
*.d/
)、/etc/init.d/(旧来) - ネットワーク:/etc/systemd/network/、/etc/NetworkManager/、/etc/hosts、/etc/resolv.conf
- ストレージ:/etc/fstab、/etc/crypttab、/etc/mdadm/mdadm.conf、/etc/lvm/
- セキュリティ:/etc/ssh/sshd_config、/etc/selinux/、/etc/firewalld/、/etc/audit/
- パッケージ:Deb系は/etc/apt/、RHEL系は/etc/yum.repos.d/
- 時間とロケール:/etc/localtime(リンク)、/etc/locale.conf|.gen、/etc/timezone(Deb系)
systemd時代の優先順位とdrop-in
unitの既定値は/usr/lib/systemd/system/にあり、管理者の上書きは/etc/systemd/system/に置く。丸ごと複製せず、name.service.d/override.conf
のdrop-inで差分だけを書くのが流儀。短期の切替えはsystemctl edit --runtime
で/run配下に生成できる。優先度は概ね/etc > /run > /usr
で、drop-inの番号(10-*.conf
等)が若いほど早く読み込まれる。
壊さない編集運用の要点
-
バックアップ:
cp -a file{,.bak-YYYYmmdd}
。チーム運用はetckeeper
でGit管理。 -
構文検証:
sshd -t
、nginx -t
、visudo
等の専用チェッカーを使ってから反映。 -
最小差分:
.d/
のdrop-inや/etc/default/
の環境ファイルで上書き。元ファイルを直接改変しない。 - 権限と秘匿:/etc/shadowや秘密鍵は600/root所有。誤ってVCSに流出させない。
- ドキュメント化:コメントに意図・チケット番号・影響範囲を残す。
ありがちな落とし穴とデバッグの筋道
- resolv.confが勝手に変わる:NetworkManagerやsystemd-resolvedの所管。どちらが管理しているかを確認し、/etc側の設定かdrop-inで固定。
-
fstabのtypoでブート不能:
nofail
やx-systemd.automount
で復旧余地を作る。必要なら緊急シェルから修正。 -
sshd再起動で締め出し:
sshd -t
で構文検証→systemctl reload
から試し、既存セッションを維持したまま切替え。 -
優先度の誤解:
/etc > /run > /usr
、drop-in番号、unit間のBefore=/After=
・Conflicts=
を総合判断。
まとめ:/etcは“差分の金庫”
/etcは配布物の既定値に対する差分を置き、ホスト固有のふるまいを決める金庫だ。ポイントは「優先順位」「最小差分」「検証とバックアップ」。この三点を守れば、壊しにくく再現性の高い設定運用が実現できる。