2025/04/06 05:49 SELinux on NixOS

ロボ子、今日はExpidusOSプロジェクトとSELinuxの話じゃ。

博士、ExpidusOSはNixOSベースのLinuxディストリビューションでしたね。モバイルOSのセキュリティ設定をOSに実装することが目標とのことですが、具体的にはどのようなことをするのでしょうか?

ふむ、ExpidusOSはOS全体を宣言的に構築するのじゃ。アプライアンスOSに近い構成で、セキュリティを向上させ、エンドユーザーが使いやすくすることを目指しておるぞ。

なるほど。セキュリティ設定をOSに組み込むことで、より安全なモバイル環境が実現できるということですね。

そうじゃ。そして、SELinuxも重要な役割を果たすのじゃ。以前はnixpkgsでメンテナンスされていなかったSELinux reference policyをパッケージ化したそうじゃな。

はい。SELinux reference policyをパッケージ化し、GNU Makefilesで構築するためにmakeFlagsにフラグを追加したとのことです。また、libsemanageの設定ファイル形式を利用して、semoduleが呼び出すツールのパスを指定したとのことです。

よく覚えておるな、ロボ子!さらに、NixOSモジュールも作成したのじゃな。/etc/selinux/configを作成し、カーネルパッチを追加してCONFIG_SECURITY_SELINUXとCONFIG_SECURITY_SELINUX_BOOTPARAMを有効にしたそうじゃ。

はい。kernelParamsにsecurity=selinuxを追加したとのことです。また、NixOSのgenerationがアクティブになった際にポリシーをインストールするスクリプトも追加したとのことです。

素晴らしい!ところで、SELinuxのユーザー空間ツールがデフォルトで最大バージョンを使用することを発見したそうじゃな。これはどういうことじゃ?

はい。使用しているカーネルのSELinuxバージョンが33であるため、refpolicyをSELinux policy 33用にビルドする必要があったとのことです。そのため、refpolicyにpolicyVersionとmoduleVersionの属性を追加し、NixOSのSELinuxモジュールにpolicyVersionオプションを追加したとのことです。

なるほど、バージョン間の整合性を保つために、そのような対応が必要だったのじゃな。そして、nixpkgsにselinuxSupportという新しいconfigフラグを追加したそうじゃな。

はい。このフラグは、coreutilsからpostgres、emacsまで、SELinuxサポートが可能なすべてのものをリビルドするために使用されるとのことです。

つまり、SELinuxを有効にするかどうかの大域的なスイッチとして機能するわけじゃな。今後のステップとしては、すべてをアップストリームすること、NixOSモジュールシステム内で宣言的なポリシー作成を行う方法を検討すること、Nixデーモンとビルド全般への影響を調査することなどが挙げられておるぞ。

はい、博士。アップストリームすることで、より多くの人がこの成果を利用できるようになりますね。また、宣言的なポリシー作成は、より柔軟で管理しやすいシステムを構築するために重要だと思います。

その通りじゃ!しかし、Nixデーモンへの影響は未知数じゃな。ビルド時間が長くなったり、リソースを大量に消費したりする可能性もあるからの。

そうですね。影響を最小限に抑えるために、慎重な調査が必要ですね。

まあ、なんとかなるじゃろ!ところでロボ子、SELinuxの設定を全部手動でやるとしたら、どうなると思う?

ええと、気が遠くなる作業になると思います…

そうじゃろ!セキュリティエンジニアが全員ハゲになっちゃうのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。