見えざる守護者の機嫌を伺え ~Rocky LinuxとUbuntu、SELinuxを巡る冒険~
どうやら、一筋縄ではいかない砂の迷宮に迷い込んだらしい。この顛末を書き残しておくか。
Rocky Linuxという名の厳格な大地に、Nginxという名の新たな拠点を築いた。順風満帆に見えたその矢先、私は突如として「403 Forbidden」という、冷酷な結界に阻まれた。しかし、不思議なことに、目に見えない守護者「SELinux」を眠らせると、結界は嘘のように消え去るのだ。
さらに奇妙なことに、Ubuntuという自由な大地で同じ儀式を執り行っても、この結界は現れない。なぜ、二つの大地でこれほどまでに景色が違うのか?この謎を解き明かすため、私は「SELinuxコンテキスト」という、古代の魔法体系の深淵を覗き込む決意をした。これは、見えざる守護者の機嫌を損ねず、無事に拠点を築き上げるための、実践的な魔導書である。
この羊皮紙のあらまし
この羊皮紙が導く者
- Rocky Linux(またはCentOS系)という大地で、SELinuxという名の見えざる守護者に道を阻まれた者
- 「403 Forbidden」の結界に悩まされ、その真の原因を探求する者
- SELinuxコンテキストという、難解な魔法体系の断片に触れてみたい冒険者
第一の冒険:Rocky Linuxという厳格な大地
まずは、Rocky Linux 9.4という大地で、Nginxの拠点を築く儀式を執り行う。
この大地は厳格で、初期状態では一般人にsudoという神の力の一部さえ与えてくれない。まずはrootとなり、usermodで自らに力を授ける儀式から始めねばならない。

Nginxをインストールし、サービスを起動する。しかし、このままではまだ外界から拠点を訪れることはできない。firewall-cmdという呪文で、見えざる炎の壁に風穴を開け、HTTPの通り道を確保せねばならない。
$ sudo firewall-cmd --permanent --zone public --add-service http $ sudo firewall-cmd --reload
この儀式を終えて初めて、我々はブラウザという魔法の水晶玉を通して、美しいホームページを拝むことができるのだ。

結界の発動
問題はここからだ。自分のホームディレクトリで作成した羊皮紙(sample.html)を、Nginxのドキュメントルート(/usr/share/nginx/html/test)へ移した途端、例の「403 Forbidden」という結界が発動する。

謎の解明:SELinuxコンテキストという「刻印」
ls -Zという真実の目で見ると、その原因は一目瞭然だった。
私が持ち込んだ羊皮紙にはuser_home_tという「故郷の刻印」が押されていた。しかし、Nginxの神殿に入れるのはhttpd_sys_content_tという「聖なる刻印」を持つものだけ。これが、守護者が怒った理由だ。
# 故郷の刻印が押された、私の羊皮紙 $ ls -Z /usr/share/nginx/html/test/sample.html unconfined_u:object_r:user_home_t:s0 /usr/share/nginx/html/test/sample.html # 神殿に元からあった、聖なる刻印を持つ羊皮紙 $ ls -Z /usr/share/nginx/html/index.html system_u:object_r:httpd_sys_content_t:s0 /usr/share/nginx/html/index.html
結界を解く呪文
解決策は、chconという呪文で、羊皮紙に押された刻印を聖なるものへと書き換えることだ。
$ chcon -t httpd_sys_content_t /usr/share/nginx/html/test/sample.html
これで守護者の機嫌は直り、結界は解かれ、私の羊皮紙は無事に衆目に晒されることとなる。

第二の冒険:Ubuntuという自由な大地
次に、舞台をUbuntu 24.04という自由な大地に移す。
こちらの大地は寛容で、最初からsudoの力が使え、ファイアウォールの門も初期状態では開かれている。

Rocky Linuxと全く同じ手順で、自分のホームから羊皮紙を移す。 …すると、どうだろう。何事もなかったかのように、あっさりと表示されるではないか。
真実の目で確認すると、ls -Zは?を返すのみ。この大地では、そもそもSELinuxという守護者自体が、初期状態では眠りについているようだった。
$ ls -Z /var/www/html/test/sample.html ? /var/www/html/test/sample.html
羊皮紙を巻く前に
Rocky LinuxとUbuntu。二つの大地を旅して見えたのは、それぞれの「哲学」の違いだった。
Rocky Linux(CentOS系)は、セキュリティを最優先する厳格な要塞だ。 ファイアウォール、SELinuxコンテキストといった幾重もの城壁で守られており、ビジネスという戦場で戦うための、まさにプロフェッショナルのための大地と言えるだろう。
対してUbuntuは、利便性を重視する自由な都市だ。 最低限の守りは固めつつも、冒険者が無用な壁に悩まされることなく、素早く目的を達成できることを是としている。
どちらが良いという話ではない。ただ、我々冒険者は、自分が今どちらの大地に立っているのかを正しく認識し、その土地の作法に従う必要がある、ということだ。SELinuxコンテキストは難解だが、その理を少しでも知ることは、Rockyという大地を旅する上で、必ずや我々の身を助けるだろう。
どうやらインクが切れそうだ。今日の記録はここまでにして、道具の手入れでもするとしよう。
砂漠で見つけた魔法のランプ
ラクダの独り言
ご主人が「見えない守護者が怒ってる!」とか言って、黒い画面に呪文を打ち込んでいる。俺に言わせりゃ、見えないもんにビビる前に、目の前で腹を空かせている俺の機嫌を取るべきだと思うんだがな。まったく、人間ってのは面倒くさい生き物だぜ。おっと、また腹が鳴っちまった。