【ITニュース解説】Day-5: SELinux | 100 Days of DevOps
2025年09月26日に「Dev.to」が公開したITニュース「Day-5: SELinux | 100 Days of DevOps」について初心者にもわかりやすく解説しています。
ITニュース概要
SELinuxは、Linuxのセキュリティを強化する機能。通常のファイル権限に加え、アプリやユーザーが実行できる操作を厳格なルール(ポリシー)で制御し、システムを保護する。Enforcing(有効)、Permissive(ログのみ)、Disabled(無効)の3モードがあり、設定ファイルやコマンドで管理する。不正なアクセスや攻撃からシステムを守る重要な仕組みだ。
ITニュース解説
Linuxサーバーを運用する上で、セキュリティは常に極めて重要な課題である。通常のファイルパーミッション、つまりファイルやディレクトリに対する読み込み、書き込み、実行の権限設定は、基本的なセキュリティ対策として機能する。しかし、現代の複雑なシステム環境では、アプリケーションやサービスが多様な方法で相互に連携するため、これだけでは十分な保護とは言えない。そこで登場するのが、SELinux(Security-Enhanced Linux)である。
SELinuxは、Linuxカーネルに組み込まれた強力なセキュリティメカニズムである。これは単に通常のLinuxパーミッションに依存するのではなく、システム内で動作するアプリケーション、ユーザー、プロセスが何を実行できるかを厳格に制御する。SELinuxは、あらかじめ定義された「ポリシー」と呼ばれる厳格なルールセットに従い、何が許可され、何が許可されないかを明確に規定する。これにより、たとえ通常のLinuxパーミッションではアクセスが許可されている場合でも、SELinuxのポリシーによってその操作がブロックされる可能性がある。
SELinuxを導入する理由はいくつかある。まず、通常のファイルパーミッションでは提供できない、追加の保護層をシステムにもたらす点である。もしアプリケーションが何らかの理由で脆弱性を突かれ、悪意のある攻撃者に乗っ取られた場合でも、SELinuxはそのアプリケーションがシステム内の機密ファイルにアクセスしたり、本来の範囲を超えて操作を行ったりするのを阻止できる。また、SELinuxはルールに違反しようとするあらゆる試行を詳細にログとして記録する。これにより、潜在的なセキュリティ脅威や不審な動きを後から追跡し、分析することが可能になる。システム上で動作する各アプリケーションの活動範囲を最小限に制限することで、システム全体の安全性を格段に高めることができるのだ。
SELinuxには、主に三つの動作モードがある。一つは「Enforcing」モードで、これはSELinuxが完全に有効な状態を指す。このモードでは、定義されたルールが積極的に適用され、許可されていないすべての操作はSELinuxによってブロックされる。二つ目は「Permissive」モードである。このモードでは、SELinuxはルール違反を検出し、その情報をログに記録するが、実際の操作をブロックすることはない。これは、新しいポリシーをテストしたり、SELinuxが導入された環境でのアプリケーションの動作を評価したりする際に非常に有用なモードである。そして三つ目は「Disabled」モードで、これはSELinuxが完全に無効化されている状態を意味する。現在のSELinuxのモードはgetenforceコマンドで簡単に確認でき、より詳細な状態はsestatusコマンドで表示できる。
SELinuxのインストールは、使用しているLinuxディストリビューションによって異なる。RHEL、CentOS、FedoraといったRed Hat系のシステムでは、sudo yum install -y selinux-policy selinux-policy-targeted policycoreutilsコマンドで必要なパッケージをインストールする。DebianやUbuntuのようなDebian系のシステムでは、まずsudo apt updateでパッケージリストを更新し、次にsudo apt install selinux-basics selinux-policy-default auditdでSELinux関連のパッケージと監査デーモンをインストールする。Debian/Ubuntuの場合、インストール後にsudo selinux-activateコマンドを実行してSELinuxをアクティベートする必要がある。
SELinuxの設定を変更する際は、通常/etc/selinux/configファイルを編集する。このファイル内にはSELINUX=enforcingのような行が見つかるだろう。ここでenforcingをpermissiveに変更すれば、SELinuxはPermissiveモードで動作するようになり、disabledに変更すれば完全に無効化される。このファイルへの変更は、通常システムを再起動した後に適用される。ただし、システムを再起動せずに一時的にSELinuxのモードを変更することも可能である。sudo setenforce 0コマンドを実行するとPermissiveモードに切り替わり、sudo setenforce 1コマンドでEnforcingモードに戻すことができる。これは、トラブルシューティングや一時的な設定変更が必要な場合に便利だ。
SELinuxの運用において役立つコマンドもいくつか存在する。SELinuxによって拒否された操作を確認するには、sudo cat /var/log/audit/audit.log | grep deniedコマンドを使用する。これにより、SELinuxがどのようなアクションをブロックしたかを把握し、必要に応じてポリシーの調整を行うための手がかりを得られる。また、SELinuxには「ブーリアン」と呼ばれるスイッチがあり、これらをオンまたはオフにすることで、特定の操作を許可したり禁止したりできる。例えば、WebサーバーであるApacheがデータベースにネットワーク接続することを許可したい場合、sudo setsebool -P httpd_can_network_connect_db onコマンドを実行する。-Pオプションは、この設定を永続化し、システム再起動後も有効にする。利用可能なすべてのブーリアンを表示するには、getsebool -aコマンドを使うことで一覧を確認できる。
最後に、SELinuxを無効にすることは、システムセキュリティの観点からは推奨されない。もしSELinuxを無効にする必要がある場合は、/etc/selinux/configファイルを編集し、SELINUX=disabledと設定してからシステムを再起動する。しかし、この操作はシステムから重要なセキュリティ層を一つ取り除くことを意味し、攻撃者やバグのあるアプリケーションからの保護が大幅に低下するリスクを伴うため、極力避けるべきである。
SELinuxは、その複雑さから初心者が戸惑うことも少なくない。しかし、その基本を理解し、適切に設定することで、システムをより安全に保つための非常に強力なツールとなる。初めてSELinuxを扱う際は、まずPermissiveモードで運用を開始し、システムログを通じてSELinuxが何をブロックしようとしているのかを観察することから始めるのが良いだろう。その後、システムの挙動を十分に理解し、必要な調整を行った上で、Enforcingモードへと移行することが推奨される。SELinuxを適切に導入し運用することで、攻撃者による不正な侵入や、アプリケーションのバグによる意図しないシステムへの損害から、あなたのシステムを堅固に守ることができる。