「SELinux」の版間の差分
imported>IooNag 細 (→AUR を使用: Christmas wiki cleanup: selinux-logrotate was renamed to logrotate-selinux) |
細 (記事内へのリンクを修正) |
||
(4人の利用者による、間の16版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category:セ |
+ | [[Category:アクセス制御]] |
[[Category:カーネル]] |
[[Category:カーネル]] |
||
+ | [[Category:Red Hat]] |
||
[[en:SELinux]] |
[[en:SELinux]] |
||
[[ru:SELinux]] |
[[ru:SELinux]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|セキュリティ}} |
{{Related|セキュリティ}} |
||
− | {{ |
+ | {{Related|AppArmor}} |
+ | {{Related|TOMOYO Linux}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | Security-Enhanced Linux (SELinux) は Linux カーネルの Linux Security Module (LSM) を使って、アメリカ国防総省式の強制アクセス制御などの様々なセキュリティポリシーを提供する Linux の機能です。Linux ディストリビューションではなく、むしろ Linux や BSD などの Unix ライクなオペレーティングシステムに使うことができる改造セットと言えます。 |
+ | Security-Enhanced Linux (SELinux) は Linux カーネルの Linux Security Module (LSM) を使って、アメリカ国防総省式の[[強制アクセス制御]]などの様々なセキュリティポリシーを提供する Linux の機能です。Linux ディストリビューションではなく、むしろ Linux や BSD などの Unix ライクなオペレーティングシステムに使うことができる改造セットと言えます。 |
Linux ディストリビューションで SELinux を動かすには3つのことが必要です: SELinux が有効になったカーネル、SELinux のユーザースペースツールとライブラリ、そして SELinux のポリシー (大半はリファレンスポリシーがベース) です。また、SELinux 機能を有効にするパッチをあててコンパイルする必要がある Linux プログラムも存在します。 |
Linux ディストリビューションで SELinux を動かすには3つのことが必要です: SELinux が有効になったカーネル、SELinux のユーザースペースツールとライブラリ、そして SELinux のポリシー (大半はリファレンスポリシーがベース) です。また、SELinux 機能を有効にするパッチをあててコンパイルする必要がある Linux プログラムも存在します。 |
||
14行目: | 16行目: | ||
==Arch Linux における現在の状態== |
==Arch Linux における現在の状態== |
||
+ | SELinuxは公式にはサポートされていません([https://lists.archlinux.org/archives/list/arch-general@lists.archlinux.org/message/4LXUXQSFEPVLN7S2DDBIGVUS7L7ES5S2/][https://lists.archlinux.org/archives/list/arch-general@lists.archlinux.org/message/VM72SI36VDX4PVUP4ZZEDIOSBVYTI7OG/]を参照)。 |
||
− | Arch Linux におけるそれぞれの要素の現状: |
||
+ | 非公式サポートの現状は以下の通りです。 |
||
{| class="wikitable" |
{| class="wikitable" |
||
! 名前 !! 状態 !! 入手先 |
! 名前 !! 状態 !! 入手先 |
||
|- |
|- |
||
+ | | SELinux が有効になったカーネル || [[カーネル#.E5.85.AC.E5.BC.8F.E3.82.B5.E3.83.9D.E3.83.BC.E3.83.88.E3.82.AB.E3.83.BC.E3.83.8D.E3.83.AB|公式サポートカーネル]] で実装済み || [https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/commit/3a29867f8266250b10aa9fa8368abc4306fa9c4b 4.18.8] から公式リポジトリで利用できます。 |
||
− | | SELinux が有効になったカーネル || 実装済み || 公式の Arch カーネルでは 3.14 から削除されています: audit を無効化する Kconfig のオプションがデフォルトで存在しないのが主な理由です。AUR から利用可能です。 |
||
|- |
|- |
||
− | | SELinux のユーザースペースツールとライブラリ || |
+ | | SELinux のユーザースペースツールとライブラリ || AUR で実装: https://aur.archlinux.org/packages/?O=0&K=selinux || https://github.com/archlinuxhardened/selinux に成果があります。 |
|- |
|- |
||
− | | SELinux のポリシー || 作業中です。 |
+ | | SELinux のポリシー || 作業中です。[https://github.com/TresysTechnology/refpolicy Reference Policy] を上流として使用。 || 上流: https://github.com/TresysTechnology/refpolicy (2017年8月5日のリリースから systemd と /usr/bin ディレクトリのサポートがポリシーに統合されました) |
|} |
|} |
||
31行目: | 34行目: | ||
! 名前 !! 状態とコメント |
! 名前 !! 状態とコメント |
||
|- |
|- |
||
+ | | linux, linux-lts, linux-zen, linux-hardened || [[#SELinuxのLSMを有効化|lsm=のカーネルパラメーター]]が必要 |
||
− | | linux || KConfig オプションを有効にしてリビルドする必要があります。 |
||
|- |
|- |
||
− | | coreutils || libselinux とリンクしてリビルドする必要があります。 |
+ | | coreutils || {{ic|--with-selinux}} フラグを使って libselinux とリンクしてリビルドする必要があります。 |
|- |
|- |
||
| cronie || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。 |
| cronie || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。 |
||
|- |
|- |
||
+ | | dbus || {{ic|--enable-libaudit}} と {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。 |
||
− | | findutils || SELinux のパッチが必要です。上流では既に含まれています。 |
||
+ | |- |
||
+ | | findutils || libselinux をインストールしてリビルドを行なって SELinux-specific オプションを有効にします。 |
||
+ | |- |
||
+ | | iproute2 || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。 |
||
+ | |- |
||
+ | | logrotate || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。 |
||
|- |
|- |
||
| openssh || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。 |
| openssh || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。 |
||
|- |
|- |
||
− | | pam || Linux-PAM のために {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。pam_unix2 のパッチが必要で、 |
+ | | pam || Linux-PAM のために {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。pam_unix2 のパッチが必要で、最近のバージョンの libselinux で実装されている関数を削除します。 |
|- |
|- |
||
− | | pambase || 設定を変更して pam_selinux.so を追加し |
+ | | pambase || 設定を変更して {{ic|/etc/pam.d/system-login}} に pam_selinux.so を追加します。 |
|- |
|- |
||
+ | | psmisc || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。 |
||
− | | psmisc || パッチが必要です。上流では既に含まれています。バージョン 22.21 で含まれる予定です。 |
||
|- |
|- |
||
− | | shadow || |
+ | | shadow || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。 |
|- |
|- |
||
| sudo || {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。 |
| sudo || {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。 |
||
|- |
|- |
||
− | | systemd || {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。 |
+ | | systemd || {{ic|--enable-audit}} と {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。 |
|- |
|- |
||
− | | util-linux || {{ic|-- |
+ | | util-linux || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。 |
|- |
|- |
||
|} |
|} |
||
− | 他の SELinux 関連のパッケージは変更を加えずに安全に使うことができます。 |
+ | 他の SELinux 関連のパッケージはおそらく変更を加えずに安全に使うことができます。 |
==強制アクセス制御== |
==強制アクセス制御== |
||
75行目: | 84行目: | ||
==SELinux のインストール== |
==SELinux のインストール== |
||
− | ===パッケージ=== |
+ | ===パッケージの説明=== |
− | SELinux 関連のパッケージは全て、AUR の ''selinux'' グループか |
+ | SELinux 関連のパッケージは全て、AUR の ''selinux'' グループに含まれています。これらのいずれかを自分でインストールしようとする前に[[#インストール]]を読んで完全なインストールのために推奨されるオプションを確認してください。 |
====SELinux 対応のシステムユーティリティ==== |
====SELinux 対応のシステムユーティリティ==== |
||
84行目: | 93行目: | ||
:SELinux のサポートを有効にしてコンパイルされた修正版 coreutils パッケージ。{{pkg|coreutils}} パッケージを置き換えます。 |
:SELinux のサポートを有効にしてコンパイルされた修正版 coreutils パッケージ。{{pkg|coreutils}} パッケージを置き換えます。 |
||
− | ;{{AUR| |
+ | ;{{AUR|cronie-selinux}} |
− | : |
+ | :SELinux が有効になっている Vixie cron の Fedora フォーク。{{pkg|cronie}} パッケージを置き換えます。 |
− | ;{{AUR| |
+ | ;{{AUR|dbus-selinux}} |
− | : |
+ | :SELinux 対応版の [[D-Bus]]。{{pkg|dbus}} パッケージを置き換えます。 |
− | |||
− | ;{{AUR|systemd-selinux}} |
||
− | :SELinux 対応版の Systemd。{{pkg|systemd}} パッケージを置き換えます。 |
||
− | |||
− | ;{{AUR|util-linux-selinux}} |
||
− | :SELinux のサポートを有効にしてコンパイルされた修正版 util-linux パッケージ。{{pkg|util-linux}} パッケージを置き換えます。 |
||
;{{AUR|findutils-selinux}} |
;{{AUR|findutils-selinux}} |
||
:指定したセキュリティコンテキストを使ってファイルの検索をできるようにするため SELinux のサポートを有効にしてコンパイルされたパッチ済みの findutils パッケージ。{{pkg|findutils}} パッケージを置き換えます。 |
:指定したセキュリティコンテキストを使ってファイルの検索をできるようにするため SELinux のサポートを有効にしてコンパイルされたパッチ済みの findutils パッケージ。{{pkg|findutils}} パッケージを置き換えます。 |
||
− | ;{{AUR| |
+ | ;{{AUR|iproute2-selinux}} |
− | : |
+ | :SELinux のサポートを有効にしてコンパイルされた iproute2 パッケージ。{{ic|ss}} の {{ic|-Z}} オプションを追加するなどの修正があります。{{pkg|iproute2}} パッケージを置き換えます。 |
+ | |||
+ | ;{{AUR|logrotate-selinux}} |
||
+ | :SELinux のサポートを有効にしてコンパイルされた Logrotate パッケージ。{{pkg|logrotate}} パッケージを置き換えます。 |
||
+ | |||
+ | ;{{AUR|openssh-selinux}} |
||
+ | :SELinux のサポートを有効にしてコンパイルされ、ユーザーセッションのセキュリティコンテキストを設定する [[OpenSSH]] パッケージ。{{pkg|openssh}} パッケージを置き換えます。 |
||
+ | |||
+ | ;{{AUR|pam-selinux}} と {{AUR|pambase-selinux}} |
||
+ | :pam_selinux.so が入った PAM パッケージとそのベースパッケージ。それぞれ {{pkg|pam}} と {{pkg|pambase}} パッケージを置き換えます。 |
||
;{{AUR|psmisc-selinux}} |
;{{AUR|psmisc-selinux}} |
||
108行目: | 120行目: | ||
:SELinux サポートを有効にしてコンパイルされた Shadow パッケージ。ログイン後のユーザーに適切なセキュリティコンテキストを設定するように修正された {{ic|/etc/pam.d/login}} ファイルが含まれています。{{pkg|shadow}} パッケージを置き換えます。 |
:SELinux サポートを有効にしてコンパイルされた Shadow パッケージ。ログイン後のユーザーに適切なセキュリティコンテキストを設定するように修正された {{ic|/etc/pam.d/login}} ファイルが含まれています。{{pkg|shadow}} パッケージを置き換えます。 |
||
− | ;{{AUR| |
+ | ;{{AUR|sudo-selinux}} |
− | :SELinux を有効にした |
+ | :適切にセキュリティコンテキストを設定する SELinux サポートを有効にしてコンパイルされた修正版 [[sudo]] パッケージ。{{pkg|sudo}} パッケージを置き換えます。 |
− | ;{{AUR| |
+ | ;{{AUR|systemd-selinux}} |
− | :SELinux |
+ | :SELinux 対応版の [[Systemd]]。{{pkg|systemd}} パッケージを置き換えます。 |
− | ;{{AUR| |
+ | ;{{AUR|util-linux-selinux}} |
− | : |
+ | :SELinux のサポートを有効にしてコンパイルされた修正版 util-linux パッケージ。{{pkg|util-linux}} パッケージを置き換えます。 |
====SELinux のユーザースペースユーティリティ==== |
====SELinux のユーザースペースユーティリティ==== |
||
;{{AUR|checkpolicy}} |
;{{AUR|checkpolicy}} |
||
− | :SELinux ポリシーを作成するためのツール |
+ | :SELinux ポリシーを作成するためのツール。 |
+ | |||
+ | ;{{AUR|mcstrans}} |
||
+ | :libselinux によって MCS ラベルを変換するのに使われるデーモン。 |
||
;{{AUR|libselinux}} |
;{{AUR|libselinux}} |
||
133行目: | 148行目: | ||
:newrole や setfiles などの SELinux のコアユーティリティ。 |
:newrole や setfiles などの SELinux のコアユーティリティ。 |
||
− | ;{{AUR| |
+ | ;{{AUR|restorecond}} |
+ | :ファイルのラベルを管理するデーモン。 |
||
− | :ポリシーソースを解析・修正するための Python ライブラリ。 |
||
+ | ;{{AUR|secilc}} |
||
− | ====SELinux のポリシーパッケージ==== |
||
+ | :CIL (共通中間言語) で書かれた SELinux ポリシーのコンパイラ。 |
||
− | ;{{AUR|selinux- |
+ | ;{{AUR|selinux-dbus-config}} |
+ | :SELinux の設定を管理できる DBus サービス。 |
||
− | :コンパイル済みモジュールのバニラなリファレンスポリシー。ヘッダーやドキュメントは付いていますがソースは付いていません。 |
||
+ | |||
+ | ;{{AUR|selinux-gui}} |
||
+ | :SELinux の GUI ツール (system-config-selinux)。 |
||
+ | |||
+ | ;{{AUR|selinux-python}} と {{AUR|selinux-python2}} |
||
+ | :SELinux の python ツールとライブラリ (semanage, sepolgen, sepolicy など)。 |
||
+ | |||
+ | ;{{AUR|selinux-sandbox}} |
||
+ | :SELinux のサンドボックスツール。 |
||
+ | |||
+ | ;{{AUR|semodule-utils}} |
||
+ | :ポリシーをビルドするときに SELinux モジュールを処理するツール。 |
||
+ | |||
+ | ====SELinux のポリシーパッケージ==== |
||
;{{AUR|selinux-refpolicy-src}} |
;{{AUR|selinux-refpolicy-src}} |
||
− | :リファレンスポリシーのソース |
+ | :リファレンスポリシーのソース。 |
+ | |||
+ | ;{{AUR|selinux-refpolicy-git}} |
||
+ | :Arch Linux 用の設定でビルドされるリファレンスポリシーの git マスター (https://github.com/TresysTechnology/refpolicy)。 |
||
;{{AUR|selinux-refpolicy-arch}} |
;{{AUR|selinux-refpolicy-arch}} |
||
− | :コンパイル済みモジュールのリファレンスポリシー。ヘッダーやドキュメントは付いていますがソースは付いていません。Arch Linux の Refpolicy パッチが含まれて |
+ | :コンパイル済みモジュールのリファレンスポリシー。ヘッダーやドキュメントは付いていますがソースは付いていません。Arch Linux の Refpolicy パッチが含まれており、パスのラベリングと systemd サポートに関連する問題を修正します。パッチは Reference Policy メンテナにも送られており、{{AUR|selinux-refpolicy-arch}} に含まれることで Refpolicy リリースのアップデートが行われます。 |
− | |||
− | {{Note|''selinux-refpolicy-arch'' パッケージが最後に更新されたのは2011年であり、今でも使えるかは不確かです。}} |
||
====その他の SELinux のツール==== |
====その他の SELinux のツール==== |
||
153行目: | 184行目: | ||
;{{AUR|setools}} |
;{{AUR|setools}} |
||
:SELinux を管理するための CLI と GUI ツール。 |
:SELinux を管理するための CLI と GUI ツール。 |
||
+ | |||
+ | ;{{AUR|selinux-alpm-hook}} |
||
+ | :パッケージのインストール・アップデート時に SELinux ポリシーにあわせてファイルをラベリングする pacman フック。 |
||
=== インストール === |
=== インストール === |
||
+ | 必要な SELinux パッケージをインストールする方法は2つあります。 |
||
− | SELinux の使用をサポートしているファイルシステムは ext2, ext3, ext4, JFS, [[XFS|XFS]], [[Btrfs|BtrFS]] だけです。3.13 のカーネルアップデートから、SELinux を動作させるのに必要なオプションはデフォルトのカーネル設定で有効になっており、デフォルトで何の問題もないはずです。カスタムカーネルを使用する場合は、コンフィグで Xattr (Extended Attributes), {{ic|CONFIG_AUDIT}}, {{ic|CONFIG_SECURITY_SELINUX}} を有効にするようにしてください (ソース: [http://wiki.debian.org/SELinux/Setup#kernel Debian Wiki])。 |
||
+ | ==== GitHubのバイナリを使用 ==== |
||
− | {{Note|[[NVIDIA|NVIDIA]] グラフィックドライバーなどの、プロプライエタリなドライバーを使っている場合、カスタムカーネルを使うために[[NVIDIA#Alternate install: カスタムカーネル|リビルド]]する必要があります。}} |
||
+ | 全てのパッケージは非公式ユーザーリポジトリ(https://wiki.archlinux.org/title/Unofficial_user_repositories#selinux)で入手可能です。''base''パッケージはシステムインストールの{{ic|arch-bootstrap}}段階で''base-selinux''に置き換え可能です。 |
||
− | 必要な SELinux パッケージをインストールする方法は2つあります。 |
||
+ | {{Warning|現状、このリポジトリでは署名付きパッケージを提供していないため、ダウンロードしたバイナリはpacmanによって検証されません。これにはセキュリティ上のリスクが伴います。十分注意してください。}} |
||
− | ==== 非公式リポジトリを使用 ==== |
||
+ | ==== GitHubのビルドスクリプトを使用 ==== |
||
− | {{ic|pacman.conf}} に [[Unofficial user repositories#siosm-selinux|siosm-selinux]] リポジトリを追加して Siosm のキーを[[Pacman-key#非公式のキーの追加|追加]]してください。 |
||
+ | このリポジトリには {{ic|build_and_install_all.sh}} という名前のスクリプトが含まれており、全てのパッケージを正しい順番でビルド・インストール (あるいはアップデート) します。以下はユーザーシェルでスクリプトを使って全てのパッケージをインストールする例です (GPG 鍵をダウンロードしてパッケージのソース tarball を検証します): |
||
− | それから {{ic|su -}} コマンドを使うか root でログインして以下のパッケージをインストールします: |
||
+ | $ git clone https://github.com/archlinuxhardened/selinux |
||
− | * ''pambase-selinux'' |
||
− | + | $ cd selinux |
|
+ | $ ./recv_gpg_keys.sh |
||
− | * ''coreutils-selinux'' |
||
+ | $ ./build_and_install_all.sh |
||
− | * ''libsemanage'' |
||
− | * ''shadow-selinux'' |
||
− | * ''libcgroup'' |
||
− | * ''policycoreutils'' |
||
− | * ''cronie-selinux'' |
||
− | * ''findutils-selinux'' |
||
− | * ''selinux-flex'' |
||
− | * ''selinux-logrotate'' |
||
− | * ''openssh-selinux'' |
||
− | * ''psmisc-selinux'' |
||
− | * ''python2-ipy'' |
||
− | * ''setools'' |
||
− | * ''systemd-selinux'' |
||
+ | もちろん、スクリプトを実行する前に {{ic|build_and_install_all.sh}} の中身を変更することもできます。例えば既に SELinux のサポートが有効になっているカーネルを使っている場合などに変更を加えます。 |
||
− | {{Warning|以上のパッケージをインストールするのに ''sudo'' コマンドは使わないで下さい。''sudo'' の認証に使われる {{Pkg|pam}} が置き換わるためです。}} |
||
==== AUR を使用 ==== |
==== AUR を使用 ==== |
||
+ | * まず、SELinux のユーザースペースツールとライブラリをインストールしてください。依存関係があるため順番通りに行う必要があります。: {{AUR|libsepol}}, {{AUR|libselinux}}, {{AUR|checkpolicy}}, {{AUR|secilc}}, {{AUR|setools}}, {{AUR|libsemanage}}, {{AUR|semodule-utils}}, {{AUR|policycoreutils}}, {{AUR|selinux-python}} ({{Pkg|python-ipy}}) が必要), {{AUR|mcstrans}}, {{AUR|restorecond}}。 |
||
− | このセクションは主に [https://jamesthebard.net/archlinux-selinux-and-you-a-trip-down-the-rabbit-hole jamesthebard] のドキュメントによります。 |
||
+ | * 次に {{AUR|pambase-selinux}} と {{AUR|pam-selinux}} をインストールして、インストール完了後にユーザーのログインができることを確認します。{{pkg|pambase}} が {{AUR|pambase-selinux}} で置き換えられるときに、{{ic|/etc/pam.d/}} のファイルが削除されて、作成されなおすためです。 |
||
+ | * その後、コアパッケージを再コンパイルするために以下のパッケージをインストールします。: {{AUR|coreutils-selinux}}, {{AUR|findutils-selinux}}, {{AUR|iproute2-selinux}}, {{AUR|logrotate-selinux}}, {{AUR|openssh-selinux}}, {{AUR|psmisc-selinux}}, {{AUR|shadow-selinux}}, {{AUR|cronie-selinux}}。 |
||
+ | * そして、{{ic|/etc/sudoers}} ファイルをバックアップします。{{AUR|sudo-selinux}} をインストールしてから {{ic|/etc/sudoers}} を元に戻してください ({{pkg|sudo}} を置き換えるときにファイルが上書きされます)。 |
||
+ | * 次は util-linux と systemd です。修正できない循環依存が存在するため ({{bug|39767}})、{{AUR|systemd-selinux}} のソースパッケージをビルドしてから、{{AUR|systemd-libs-selinux}}をインストールして、{{AUR|util-linux-selinux}}を{{AUR|util-linux-libs-selinux}}と一緒にビルドしてインストールし、そして {{AUR|systemd-selinux}} を再ビルドして再インストールします。 |
||
+ | * それから、{{AUR|dbus-selinux}} をインストールしてください。 |
||
+ | * その後、{{AUR|selinux-alpm-hook}} をインストールして pacman でパッケージをインストールするたびに restorecon が実行されるようにします。 |
||
+ | 上記の手順が全て終わったら、SELinux カーネル ({{Pkg|linux}}などとポリシー({{AUR|selinux-refpolicy-arch}} や {{AUR|selinux-refpolicy-git}} など) をインストールします。 |
||
− | 最初にインストールが必要なのは {{AUR|pambase-selinux}} と {{AUR|pam-selinux}} です。ただし、{{ic|yaourt -S selinux-pam selinux-pambase}} を使ったり、ビルドした後にパッケージをインストールするのに {{ic|sudo}} を使わないで下さい。pam が認証を処理しているためです。そのため、{{ic|makepkg}} を使って通常ユーザーでパッケージをビルドしてから、''root'' で {{ic|pacman -U <packagename>}} を実行してインストールしてください。 |
||
+ | === SELinuxのLSMを有効化 === |
||
− | 次に、AUR から {{AUR|coreutils-selinux}}, {{AUR|libsemanage}}, {{AUR|shadow-selinux}}, {{AUR|libcgroup}}, {{AUR|policycoreutils}}, {{AUR|cronie-selinux}}, {{AUR|findutils-selinux}}, {{AUR|selinux-flex}}, {{AUR|logrotate-selinux}}, {{AUR|openssh-selinux}}, {{AUR|psmisc-selinux}} をビルドしてインストール、''community'' リポジトリから {{pkg|python2-ipy}} をインストールする必要があります。 |
||
+ | 起動時にSELinuxをデフォルトのセキュリティモデルとして有効にするには、次の[[カーネルパラメータ]]が必要です。: |
||
− | {{Tip|{{AUR|openssh-selinux}} パッケージは gui 環境でビルドする必要があります。そうしないとコンパイル中に ''pairs.sh'' のテストが失敗します。}} |
||
+ | lsm=landlock,lockdown,yama,integrity,selinux,bpf |
||
− | そして {{AUR|setools}} パッケージです。このパッケージをビルドするには、{{pkg|jdk7-openjdk}} パッケージをインストールして、{{ic|JAVA_HOME}} 変数を正しく設定しておく必要があります。設定されてない場合はパッケージをインストールした後に、次を実行: |
||
+ | {{Note|The {{ic|1=lsm=}}カーネルパラメーターはLinuxセキュリティモジュールの初期化順序を設定します。カーネルに設定された{{ic|1=lsm=}}の値は{{ic|1=zgrep CONFIG_LSM= /proc/config.gz}}で見つけることができ、現在の値は{{ic|cat /sys/kernel/security/lsm}}で見ることができます。 |
||
− | $ export JAVA_HOME=/usr/lib/jvm/java-7-openjdk |
||
+ | === カスタムカーネル === |
||
− | その後、{{ic|/etc/sudoers}} ファイルをバックアップします。{{AUR|sudo-selinux}}, {{AUR|checkpolicy}}, {{AUR|util-linux-selinux}}, {{AUR|systemd-selinux}} をインストールしてください。 |
||
+ | [[カーネル/Arch_build_system#.E3.82.B3.E3.83.B3.E3.83.91.E3.82.A4.E3.83.AB|カーネルをコンパイル]]するときには少なくとも以下のオプションを設定する必要があります。: |
||
− | ===ブートローダーの設定の変更=== |
||
+ | CONFIG_SECURITY_SELINUX=y |
||
− | 新しいカーネルをインストールしたら、ブートローダーの設定を更新してください。 |
||
+ | CONFIG_AUDIT=y |
||
+ | SELinuxをデフォルトで有効にし、カーネルパラメータの設定を省略するには、加えて{{ic|CONFIG_LSM}}を有効にし、リストの最初の"major"モジュールとして{{ic|selinux}}を設定します。: |
||
− | ====GRUB==== |
||
+ | CONFIG_LSM="landlock,lockdown,yama,integrity,selinux,bpf" |
||
− | 次のコマンドを実行: |
||
− | |||
− | # grub-mkconfig -o /boot/grub/grub.cfg |
||
− | |||
− | ====Syslinux==== |
||
− | |||
− | {{ic|syslinux.cfg}} ファイルを編集して一番最後に以下を追加: |
||
− | |||
− | {{hc|/boot/syslinux/syslinux.cfg|<nowiki>LABEL arch-selinux |
||
− | LINUX ../vmlinuz-linux-selinux |
||
− | APPEND root=/dev/sda2 ro |
||
− | INITRD ../initramfs-linux-selinux.img</nowiki>}} |
||
− | |||
− | "linux-selinux" は使用するカーネルにあわせて適当に変更してください。 |
||
===PAM の確認=== |
===PAM の確認=== |
||
− | ログイン後に適切なセキュリティコンテキストを得るために PAM を正しく設定する必要があります。以下の行が {{ic|/etc/pam.d/system-login}} に存在するか確認してください: |
+ | ログイン後に適切なセキュリティコンテキストを得るために [[PAM]] を正しく設定する必要があります。以下の行が {{ic|/etc/pam.d/system-login}} に存在するか確認してください: |
{{bc|# pam_selinux.so close should be the first session rule |
{{bc|# pam_selinux.so close should be the first session rule |
||
236行目: | 252行目: | ||
===ポリシーのインストール=== |
===ポリシーのインストール=== |
||
− | {{Warning|[ |
+ | {{Warning|[https://github.com/SELinuxProject/refpolicy/wiki SELinuxProject] によるリファレンスポリシーはあまり Arch Linux に適しているとは言えません。、ポリシーを改善するパッチを投稿している人の多くが他のディストリビューション (Debian, Gentoo, RHEL など) を使っているため、Arch Linux パッケージとの互換性は完璧ではありません (例えばプログラムの新しい機能をポリシーがサポートしていない場合があります)。}} |
+ | ポリシーは SELinux の基幹です。ポリシーによって SELinux の挙動は左右されます。AURで利用可能な唯一のポリシーはリファレンスポリシーだけです。リファレンスポリシーをインストールするには、{{AUR|selinux-refpolicy-src}} パッケージから取得するか https://github.com/SELinuxProject/refpolicy/wiki/DownloadRelease#current-release から最新のリリースをダウンロードすることができます。AUR のパッケージを使う場合、{{ic|/etc/selinux/refpolicy/src/policy}} まで移動して以下のコマンドを実行してリファレンスポリシーをインストールしてください: |
||
− | * {{ic|/lib}} と {{ic|/usr/lib}} は別のディレクトリとして扱われています ({{ic|/bin}}, {{ic|/sbin}}, {{ic|/usr/bin}}, {{ic|/usr/sbin}} も同様)。そのせいでシステム全体にラベルを適用する時に不安定になります。 |
||
− | * systemd はまだサポートされていません (refpolicy のメインデベロッパーである C. PeBenito は2014年10月に GitHub で systemd に対応する作業を行っていることを発表しています: http://oss.tresys.com/pipermail/refpolicy/2014-October/007430.html )。}} |
||
+ | # make bare |
||
− | ポリシーは SELinux の基幹です。ポリシーによって SELinux の挙動は左右されます。現在 AUR にはリファレンスポリシーだけが存在します。リファレンスポリシーをインストールするには、ソースファイルを使う必要があり、{{AUR|selinux-refpolicy-src}} パッケージから取得するか https://github.com/TresysTechnology/refpolicy/wiki/DownloadRelease#current-release から最新のリリースをダウンロードすることができます。AUR のパッケージを使う場合、{{ic|/etc/selinux/refpolicy/src/policy}} まで移動して以下のコマンドを実行してリファレンスポリシーをインストールしてください: |
||
+ | # make conf |
||
− | |||
− | + | # make install |
|
− | # make conf |
||
− | # make install}} |
||
SELinux ポリシーの書き方を知っているならば上記のコマンドを実行する前に存分にポリシーを調整することができます。コマンドはしばらく時間がかかりジョブを実行してシステムの1つのコアに負担をかけます、心配は要りません。のんびりと構えてコマンドを実行させておいて下さい。 |
SELinux ポリシーの書き方を知っているならば上記のコマンドを実行する前に存分にポリシーを調整することができます。コマンドはしばらく時間がかかりジョブを実行してシステムの1つのコアに負担をかけます、心配は要りません。のんびりと構えてコマンドを実行させておいて下さい。 |
||
リファレンスポリシーをロードするには次を実行: |
リファレンスポリシーをロードするには次を実行: |
||
− | {{bc|# make load}} |
||
+ | # make load |
||
− | そして、以下の内容で {{ic|/etc/selinux/config}} ファイルを作成してください (Only works if you used the defaults as mentioned above. If you decided to change the name of the policy, you need to tweak the file): |
||
+ | |||
+ | そして、以下の内容で {{ic|/etc/selinux/config}} ファイルを作成してください (上記のデフォルト設定を使用する場合。ポリシーの名前を変更したときは、ファイルを修正する必要があります): |
||
− | {{hc|/etc/selinux/config| |
+ | {{hc|/etc/selinux/config|2= |
+ | # This file controls the state of SELinux on the system. |
||
# SELINUX= can take one of these three values: |
# SELINUX= can take one of these three values: |
||
# enforcing - SELinux security policy is enforced. |
# enforcing - SELinux security policy is enforced. |
||
267行目: | 282行目: | ||
# refpolicy (vanilla reference policy) |
# refpolicy (vanilla reference policy) |
||
# <custompolicy> - Substitute <custompolicy> with the name of any custom policy you choose to load |
# <custompolicy> - Substitute <custompolicy> with the name of any custom policy you choose to load |
||
− | SELINUXTYPE=refpolicy |
+ | SELINUXTYPE=refpolicy |
+ | }} |
||
ここで、再起動が必要です。再起動したら、次を実行してファイルシステムにラベルを付けて下さい: |
ここで、再起動が必要です。再起動したら、次を実行してファイルシステムにラベルを付けて下さい: |
||
275行目: | 291行目: | ||
その後、以下の内容で {{ic|requiredmod.te}} ファイルを作成します: |
その後、以下の内容で {{ic|requiredmod.te}} ファイルを作成します: |
||
− | {{hc|requiredmod.te| |
+ | {{hc|requiredmod.te|2= |
+ | module requiredmod 1.0; |
||
require { |
require { |
||
316行目: | 333行目: | ||
# semodule -i requiredmod.pp</nowiki>}} |
# semodule -i requiredmod.pp</nowiki>}} |
||
+ | 上記の設定はリファレンスポリシーで発生する厄介なメッセージを {{ic|/var/log/audit/audit.log}} から削除するために必要です。汚いハックであり、正しくないラベリングの影響を隠すためにリファレンスポリシーにパッチをあてることを明確にするべきです。 |
||
− | This is required to remove a few messages from {{ic|/var/log/audit/audit.log}} which are a nuisance to deal with in the reference policy. This is an ugly hack and it should be made very clear that the policy so installed simply patches the reference policy in order to hide the effects of incorrect labelling. |
||
+ | |||
+ | ===Vagrant 仮想マシンでテスト=== |
||
+ | |||
+ | [[Vagrant]] を使うことで SELinux が設定された Arch Linux の仮想マシンをプロビジョニングできます。現在の環境に影響を与えないで Arch Linux の SELinux を簡単にテストすることが可能です。以下のコマンドを使用してテストしてください: |
||
+ | |||
+ | $ git clone <nowiki>https://github.com/archlinuxhardened/selinux</nowiki> |
||
+ | $ cd selinux/_vagrant |
||
+ | $ vagrant up |
||
+ | $ vagrant ssh |
||
==インストール後の作業== |
==インストール後の作業== |
||
322行目: | 348行目: | ||
SELinux が動作しているかは {{ic|sestatus}} で確認できます。以下のように表示されるはずです: |
SELinux が動作しているかは {{ic|sestatus}} で確認できます。以下のように表示されるはずです: |
||
+ | {{bc| |
||
− | {{bc|<nowiki>SELinux status: enabled |
||
+ | SELinux status: enabled |
||
SELinuxfs mount: /sys/fs/selinux |
SELinuxfs mount: /sys/fs/selinux |
||
SELinux root directory: /etc/selinux |
SELinux root directory: /etc/selinux |
||
330行目: | 357行目: | ||
Policy MLS status: disabled |
Policy MLS status: disabled |
||
Policy deny_unknown status: allowed |
Policy deny_unknown status: allowed |
||
− | Max kernel policy version: 28 |
+ | Max kernel policy version: 28 |
+ | }} |
||
− | コンテキストを適切に維持するに |
+ | コンテキストを適切に維持するために、{{ic|restorecond.service}}を有効にできます: |
# systemctl enable restorecond |
# systemctl enable restorecond |
||
344行目: | 372行目: | ||
スワップパーティションの代わりにスワップファイルを使う場合、適切なセキュリティコンテキストを設定するために次のコマンドを実行してください: |
スワップパーティションの代わりにスワップファイルを使う場合、適切なセキュリティコンテキストを設定するために次のコマンドを実行してください: |
||
− | + | # semanage fcontext -a -t swapfile_t "''/path/to/swapfile''" |
|
− | # restorecon /path/to/swapfile |
+ | # restorecon ''/path/to/swapfile'' |
==SELinux の使い方== |
==SELinux の使い方== |
||
359行目: | 387行目: | ||
それぞれを説明すると: |
それぞれを説明すると: |
||
+ | #'''User:''' SELinux のユーザー識別子。SELinux ユーザーが使用することができる複数のロールに関連付けることができます。 |
||
− | #'''User:''' The SELinux user identity. This can be associated to one or more roles that the SELinux user is allowed to use. |
||
+ | #'''Role:''' SELinux のロール。SELinux ユーザーがアクセスすることができる複数のタイプに関連付けることができます。 |
||
− | #'''Role:''' The SELinux role. This can be associated to one or more types the SELinux user is allowed to access. |
||
+ | #'''Type:''' プロセスにタイプが関連付けられると、SELinux ユーザー (サブジェクト) がアクセスできるプロセスが (ドメイン) が決定します。タイプがオブジェクトと関連付けられた場合、SELinux がオブジェクトにアクセスする際のパーミッションが決まります。 |
||
− | #'''Type:''' When a type is associated with a process, it defines what processes (or domains) the SELinux user (the subject) can access. When a type is associated with an object, it defines what access permissions the SELinux user has to that object. |
||
+ | #'''Level:''' ポリシーが MCS や MLS をサポートしている場合にのみ使用する任意のフィールドです。範囲とも呼びます。 |
||
− | #'''Level:''' This optional field can also be know as a range and is only present if the policy supports MCS or MLS. |
||
これが重要になるのは、自分でポリシーを作成して、SELinux の基本的な構成要素にしたいという場合です。ほとんどの場合リファレンスポリシーで十分間に合うので、理解する必要はありません。ただし、あなたがパワーユーザーであり何か特別な必要性があるのであれば、自ら SELinux のポリシーを作成する方法を学ぶ絶好の機会でしょう。 |
これが重要になるのは、自分でポリシーを作成して、SELinux の基本的な構成要素にしたいという場合です。ほとんどの場合リファレンスポリシーで十分間に合うので、理解する必要はありません。ただし、あなたがパワーユーザーであり何か特別な必要性があるのであれば、自ら SELinux のポリシーを作成する方法を学ぶ絶好の機会でしょう。 |
||
370行目: | 398行目: | ||
==トラブルシューティング== |
==トラブルシューティング== |
||
− | SELinux のエラーは systemd の journal で確認できます。例えば {{ic|system_u:system_r:policykit_t:s0}} ラベルに関する SELinux のメッセージを表示するには、次を実行: |
+ | SELinux のエラーは systemd の [[journal]] で確認できます。例えば {{ic|system_u:system_r:policykit_t:s0}} ラベルに関する SELinux のメッセージを表示するには、次を実行: |
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0 |
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0 |
||
386行目: | 414行目: | ||
==参照== |
==参照== |
||
− | *[ |
+ | *[[wikipedia:ja:Security-Enhanced Linux|Security Enhanced Linux]] |
+ | *[https://fedoraproject.org/wiki/SELinux Fedora プロジェクトの SELinux Wiki] |
||
− | *[http://www.gentoo.org/proj/ja/hardened/selinux/selinux-handbook.xml Gentoo SELinux ハンドブック] |
||
+ | *[https://www.nsa.gov/what-we-do/research/selinux/ NSA の SELinux 公式ホームページ] |
||
− | *[http://fedoraproject.org/wiki/SELinux Fedora プロジェクトの SELinux Wiki] |
||
− | *[http:// |
+ | * [http://userspace.selinuxproject.org/ SELinux のユーザー空間ホームページ] |
− | *[http://oss.tresys.com/projects/refpolicy |
+ | **[http://oss.tresys.com/projects/refpolicy リファレンスポリシーのホームページ] |
− | *[http:// |
+ | **[http://oss.tresys.com/projects/setools SETools ホームページ] |
+ | *[https://web.archive.org/web/20140816115906/http://jamesthebard.net/archlinux-selinux-and-you-a-trip-down-the-rabbit-hole/ ArchLinux, SELinux and You (アーカイブ)] |
||
− | *[http://oss.tresys.com/projects/setools SETools ホームページ] |
2023年9月18日 (月) 12:06時点における最新版
関連記事
Security-Enhanced Linux (SELinux) は Linux カーネルの Linux Security Module (LSM) を使って、アメリカ国防総省式の強制アクセス制御などの様々なセキュリティポリシーを提供する Linux の機能です。Linux ディストリビューションではなく、むしろ Linux や BSD などの Unix ライクなオペレーティングシステムに使うことができる改造セットと言えます。
Linux ディストリビューションで SELinux を動かすには3つのことが必要です: SELinux が有効になったカーネル、SELinux のユーザースペースツールとライブラリ、そして SELinux のポリシー (大半はリファレンスポリシーがベース) です。また、SELinux 機能を有効にするパッチをあててコンパイルする必要がある Linux プログラムも存在します。
目次
Arch Linux における現在の状態
SELinuxは公式にはサポートされていません([1][2]を参照)。 非公式サポートの現状は以下の通りです。
名前 | 状態 | 入手先 |
---|---|---|
SELinux が有効になったカーネル | 公式サポートカーネル で実装済み | 4.18.8 から公式リポジトリで利用できます。 |
SELinux のユーザースペースツールとライブラリ | AUR で実装: https://aur.archlinux.org/packages/?O=0&K=selinux | https://github.com/archlinuxhardened/selinux に成果があります。 |
SELinux のポリシー | 作業中です。Reference Policy を上流として使用。 | 上流: https://github.com/TresysTechnology/refpolicy (2017年8月5日のリリースから systemd と /usr/bin ディレクトリのサポートがポリシーに統合されました) |
公式の core パッケージと AUR にあるパッケージの変更点:
名前 | 状態とコメント |
---|---|
linux, linux-lts, linux-zen, linux-hardened | lsm=のカーネルパラメーターが必要 |
coreutils | --with-selinux フラグを使って libselinux とリンクしてリビルドする必要があります。
|
cronie | --with-selinux フラグを使ってリビルドする必要があります。
|
dbus | --enable-libaudit と --enable-selinux フラグを使ってリビルドする必要があります。
|
findutils | libselinux をインストールしてリビルドを行なって SELinux-specific オプションを有効にします。 |
iproute2 | --with-selinux フラグを使ってリビルドする必要があります。
|
logrotate | --with-selinux フラグを使ってリビルドする必要があります。
|
openssh | --with-selinux フラグを使ってリビルドする必要があります。
|
pam | Linux-PAM のために --enable-selinux フラグを使ってリビルドする必要があります。pam_unix2 のパッチが必要で、最近のバージョンの libselinux で実装されている関数を削除します。
|
pambase | 設定を変更して /etc/pam.d/system-login に pam_selinux.so を追加します。
|
psmisc | --with-selinux フラグを使ってリビルドする必要があります。
|
shadow | --with-selinux フラグを使ってリビルドする必要があります。
|
sudo | --enable-selinux フラグを使ってリビルドする必要があります。
|
systemd | --enable-audit と --enable-selinux フラグを使ってリビルドする必要があります。
|
util-linux | --with-selinux フラグを使ってリビルドする必要があります。
|
他の SELinux 関連のパッケージはおそらく変更を加えずに安全に使うことができます。
強制アクセス制御
SELinux を有効にする前に、SELinux が何をするのか理解したほうが良いでしょう。簡単に言うと、SELinux は Linux で強制アクセス制御 (Mandatory Access Control, MAC) を実施します。SELinux と対比するように、伝統的なユーザー/グループ/rwx のパーミッションは一種の任意アクセス制御 (Discretionary Access Control, DAC)です。MAC は DAC と異なり、セキュリティポリシーとその実行が完全に区別されています。
例として sudo コマンドの使用が挙げられます。DAC が使用されている場合、sudo は root への一時的な権限昇格を許可し、プロセスはシステム全体に制限なくアクセスできるようになります。しかしながら、MAC を使用した場合、プロセスがアクセスできる特定のファイルセットをセキュリティ管理者が指定しておけば、どんな権限昇格を用いたとしても、セキュリティポリシーが変わらないかぎり、プロセスがアクセスできるファイルは制限されます。そのため、SELinux が動作しているマシンで sudo を使ってポリシーが許可しないファイルにアクセスしようとしても、アクセスは不可能です。
他の例としては、ファイルに与えられる伝統的な (-rwxr-xr-x) タイプのパーミッションがあります。DAC の下では、パーミッションはユーザーによって変更できます。しかしながら、MAC の下では、セキュリティ管理者が特定のファイルのパーミッションを凍結することが可能です。ファイルに関連するポリシーが変更されないかぎり、ファイルのパーミッションをユーザーが変更することは不可能になります。
このことが、ウェブサーバーなど、危険にさらされる可能性のあるプロセスで特に有用なのは想像に難くないでしょう。DAC が使われている場合、権限昇格ができるプログラムを奪取されて大損害を被る危険が十分あるのです。
もっと詳しい情報は、Wikipedia の MAC のページを見て下さい。
SELinux のインストール
パッケージの説明
SELinux 関連のパッケージは全て、AUR の selinux グループに含まれています。これらのいずれかを自分でインストールしようとする前に#インストールを読んで完全なインストールのために推奨されるオプションを確認してください。
SELinux 対応のシステムユーティリティ
- coreutils-selinuxAUR
- SELinux のサポートを有効にしてコンパイルされた修正版 coreutils パッケージ。coreutils パッケージを置き換えます。
- cronie-selinuxAUR
- SELinux が有効になっている Vixie cron の Fedora フォーク。cronie パッケージを置き換えます。
- dbus-selinuxAUR
- SELinux 対応版の D-Bus。dbus パッケージを置き換えます。
- findutils-selinuxAUR
- 指定したセキュリティコンテキストを使ってファイルの検索をできるようにするため SELinux のサポートを有効にしてコンパイルされたパッチ済みの findutils パッケージ。findutils パッケージを置き換えます。
- iproute2-selinuxAUR
- SELinux のサポートを有効にしてコンパイルされた iproute2 パッケージ。
ss
の-Z
オプションを追加するなどの修正があります。iproute2 パッケージを置き換えます。
- logrotate-selinuxAUR
- SELinux のサポートを有効にしてコンパイルされた Logrotate パッケージ。logrotate パッケージを置き換えます。
- openssh-selinuxAUR
- SELinux のサポートを有効にしてコンパイルされ、ユーザーセッションのセキュリティコンテキストを設定する OpenSSH パッケージ。openssh パッケージを置き換えます。
- pam-selinuxAUR と pambase-selinuxAUR
- pam_selinux.so が入った PAM パッケージとそのベースパッケージ。それぞれ pam と pambase パッケージを置き換えます。
- psmisc-selinuxAUR
- SELinux サポートを有効にしてコンパイルされた Psmisc パッケージ。例えば、
killall
に-Z
オプションを追加します。psmisc パッケージを置き換えます。
- shadow-selinuxAUR
- SELinux サポートを有効にしてコンパイルされた Shadow パッケージ。ログイン後のユーザーに適切なセキュリティコンテキストを設定するように修正された
/etc/pam.d/login
ファイルが含まれています。shadow パッケージを置き換えます。
- sudo-selinuxAUR
- 適切にセキュリティコンテキストを設定する SELinux サポートを有効にしてコンパイルされた修正版 sudo パッケージ。sudo パッケージを置き換えます。
- systemd-selinuxAUR
- SELinux 対応版の Systemd。systemd パッケージを置き換えます。
- util-linux-selinuxAUR
- SELinux のサポートを有効にしてコンパイルされた修正版 util-linux パッケージ。util-linux パッケージを置き換えます。
SELinux のユーザースペースユーティリティ
- checkpolicyAUR
- SELinux ポリシーを作成するためのツール。
- mcstransAUR
- libselinux によって MCS ラベルを変換するのに使われるデーモン。
- libselinuxAUR
- セキュリティが求められるアプリケーションのためのライブラリ。semanage と setools に必要な Python バインディングが含まれています。
- libsemanageAUR
- ポリシー管理のためのライブラリ。semanage と setools に必要な Python バインディングが含まれています。
- libsepolAUR
- バイナリポリシーの操作のためのライブラリ。
- policycoreutilsAUR
- newrole や setfiles などの SELinux のコアユーティリティ。
- restorecondAUR
- ファイルのラベルを管理するデーモン。
- secilcAUR
- CIL (共通中間言語) で書かれた SELinux ポリシーのコンパイラ。
- selinux-dbus-configAUR
- SELinux の設定を管理できる DBus サービス。
- selinux-guiAUR
- SELinux の GUI ツール (system-config-selinux)。
- selinux-pythonAUR と selinux-python2AUR
- SELinux の python ツールとライブラリ (semanage, sepolgen, sepolicy など)。
- selinux-sandboxAUR
- SELinux のサンドボックスツール。
- semodule-utilsAUR
- ポリシーをビルドするときに SELinux モジュールを処理するツール。
SELinux のポリシーパッケージ
- selinux-refpolicy-srcAUR
- リファレンスポリシーのソース。
- selinux-refpolicy-gitAUR
- Arch Linux 用の設定でビルドされるリファレンスポリシーの git マスター (https://github.com/TresysTechnology/refpolicy)。
- selinux-refpolicy-archAUR
- コンパイル済みモジュールのリファレンスポリシー。ヘッダーやドキュメントは付いていますがソースは付いていません。Arch Linux の Refpolicy パッチが含まれており、パスのラベリングと systemd サポートに関連する問題を修正します。パッチは Reference Policy メンテナにも送られており、selinux-refpolicy-archAUR に含まれることで Refpolicy リリースのアップデートが行われます。
その他の SELinux のツール
- setoolsAUR
- SELinux を管理するための CLI と GUI ツール。
- selinux-alpm-hookAUR
- パッケージのインストール・アップデート時に SELinux ポリシーにあわせてファイルをラベリングする pacman フック。
インストール
必要な SELinux パッケージをインストールする方法は2つあります。
GitHubのバイナリを使用
全てのパッケージは非公式ユーザーリポジトリ(https://wiki.archlinux.org/title/Unofficial_user_repositories#selinux)で入手可能です。baseパッケージはシステムインストールのarch-bootstrap
段階でbase-selinuxに置き換え可能です。
GitHubのビルドスクリプトを使用
このリポジトリには build_and_install_all.sh
という名前のスクリプトが含まれており、全てのパッケージを正しい順番でビルド・インストール (あるいはアップデート) します。以下はユーザーシェルでスクリプトを使って全てのパッケージをインストールする例です (GPG 鍵をダウンロードしてパッケージのソース tarball を検証します):
$ git clone https://github.com/archlinuxhardened/selinux $ cd selinux $ ./recv_gpg_keys.sh $ ./build_and_install_all.sh
もちろん、スクリプトを実行する前に build_and_install_all.sh
の中身を変更することもできます。例えば既に SELinux のサポートが有効になっているカーネルを使っている場合などに変更を加えます。
AUR を使用
- まず、SELinux のユーザースペースツールとライブラリをインストールしてください。依存関係があるため順番通りに行う必要があります。: libsepolAUR, libselinuxAUR, checkpolicyAUR, secilcAUR, setoolsAUR, libsemanageAUR, semodule-utilsAUR, policycoreutilsAUR, selinux-pythonAUR (python-ipy) が必要), mcstransAUR, restorecondAUR。
- 次に pambase-selinuxAUR と pam-selinuxAUR をインストールして、インストール完了後にユーザーのログインができることを確認します。pambase が pambase-selinuxAUR で置き換えられるときに、
/etc/pam.d/
のファイルが削除されて、作成されなおすためです。 - その後、コアパッケージを再コンパイルするために以下のパッケージをインストールします。: coreutils-selinuxAUR, findutils-selinuxAUR, iproute2-selinuxAUR, logrotate-selinuxAUR, openssh-selinuxAUR, psmisc-selinuxAUR, shadow-selinuxAUR, cronie-selinuxAUR。
- そして、
/etc/sudoers
ファイルをバックアップします。sudo-selinuxAUR をインストールしてから/etc/sudoers
を元に戻してください (sudo を置き換えるときにファイルが上書きされます)。 - 次は util-linux と systemd です。修正できない循環依存が存在するため (FS#39767)、systemd-selinuxAUR のソースパッケージをビルドしてから、systemd-libs-selinuxAURをインストールして、util-linux-selinuxAURをutil-linux-libs-selinuxAURと一緒にビルドしてインストールし、そして systemd-selinuxAUR を再ビルドして再インストールします。
- それから、dbus-selinuxAUR をインストールしてください。
- その後、selinux-alpm-hookAUR をインストールして pacman でパッケージをインストールするたびに restorecon が実行されるようにします。
上記の手順が全て終わったら、SELinux カーネル (linuxなどとポリシー(selinux-refpolicy-archAUR や selinux-refpolicy-gitAUR など) をインストールします。
SELinuxのLSMを有効化
起動時にSELinuxをデフォルトのセキュリティモデルとして有効にするには、次のカーネルパラメータが必要です。:
lsm=landlock,lockdown,yama,integrity,selinux,bpf
{{Note|The lsm=
カーネルパラメーターはLinuxセキュリティモジュールの初期化順序を設定します。カーネルに設定されたlsm=
の値はzgrep CONFIG_LSM= /proc/config.gz
で見つけることができ、現在の値はcat /sys/kernel/security/lsm
で見ることができます。
カスタムカーネル
カーネルをコンパイルするときには少なくとも以下のオプションを設定する必要があります。:
CONFIG_SECURITY_SELINUX=y CONFIG_AUDIT=y
SELinuxをデフォルトで有効にし、カーネルパラメータの設定を省略するには、加えてCONFIG_LSM
を有効にし、リストの最初の"major"モジュールとしてselinux
を設定します。:
CONFIG_LSM="landlock,lockdown,yama,integrity,selinux,bpf"
PAM の確認
ログイン後に適切なセキュリティコンテキストを得るために PAM を正しく設定する必要があります。以下の行が /etc/pam.d/system-login
に存在するか確認してください:
# pam_selinux.so close should be the first session rule session required pam_selinux.so close
# pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open
ポリシーのインストール
ポリシーは SELinux の基幹です。ポリシーによって SELinux の挙動は左右されます。AURで利用可能な唯一のポリシーはリファレンスポリシーだけです。リファレンスポリシーをインストールするには、selinux-refpolicy-srcAUR パッケージから取得するか https://github.com/SELinuxProject/refpolicy/wiki/DownloadRelease#current-release から最新のリリースをダウンロードすることができます。AUR のパッケージを使う場合、/etc/selinux/refpolicy/src/policy
まで移動して以下のコマンドを実行してリファレンスポリシーをインストールしてください:
# make bare # make conf # make install
SELinux ポリシーの書き方を知っているならば上記のコマンドを実行する前に存分にポリシーを調整することができます。コマンドはしばらく時間がかかりジョブを実行してシステムの1つのコアに負担をかけます、心配は要りません。のんびりと構えてコマンドを実行させておいて下さい。
リファレンスポリシーをロードするには次を実行:
# make load
そして、以下の内容で /etc/selinux/config
ファイルを作成してください (上記のデフォルト設定を使用する場合。ポリシーの名前を変更したときは、ファイルを修正する必要があります):
/etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # Set this value once you know for sure that SELinux is configured the way you like it and that your system is ready for deployment # permissive - SELinux prints warnings instead of enforcing. # Use this to customise your SELinux policies and booleans prior to deployment. Recommended during policy development. # disabled - No SELinux policy is loaded. # This is not a recommended setting, for it may cause problems with file labelling SELINUX=permissive # SELINUXTYPE= takes the name of SELinux policy to # be used. Current options are: # refpolicy (vanilla reference policy) # <custompolicy> - Substitute <custompolicy> with the name of any custom policy you choose to load SELINUXTYPE=refpolicy
ここで、再起動が必要です。再起動したら、次を実行してファイルシステムにラベルを付けて下さい:
# restorecon -r /
その後、以下の内容で requiredmod.te
ファイルを作成します:
requiredmod.te
module requiredmod 1.0; require { type devpts_t; type kernel_t; type device_t; type var_run_t; type udev_t; type hugetlbfs_t; type udev_tbl_t; type tmpfs_t; class sock_file write; class unix_stream_socket { read write ioctl }; class capability2 block_suspend; class dir { write add_name }; class filesystem associate; } #============= devpts_t ============== allow devpts_t device_t:filesystem associate; #============= hugetlbfs_t ============== allow hugetlbfs_t device_t:filesystem associate; #============= kernel_t ============== allow kernel_t self:capability2 block_suspend; #============= tmpfs_t ============== allow tmpfs_t device_t:filesystem associate; #============= udev_t ============== allow udev_t kernel_t:unix_stream_socket { read write ioctl }; allow udev_t udev_tbl_t:dir { write add_name }; allow udev_t var_run_t:sock_file write;</nowiki>
そして以下のコマンドを実行してください:
# checkmodule -m -o requiredmod.mod requiredmod.te # semodule_package -o requiredmod.pp -m requiredmod.mod # semodule -i requiredmod.pp
上記の設定はリファレンスポリシーで発生する厄介なメッセージを /var/log/audit/audit.log
から削除するために必要です。汚いハックであり、正しくないラベリングの影響を隠すためにリファレンスポリシーにパッチをあてることを明確にするべきです。
Vagrant 仮想マシンでテスト
Vagrant を使うことで SELinux が設定された Arch Linux の仮想マシンをプロビジョニングできます。現在の環境に影響を与えないで Arch Linux の SELinux を簡単にテストすることが可能です。以下のコマンドを使用してテストしてください:
$ git clone https://github.com/archlinuxhardened/selinux $ cd selinux/_vagrant $ vagrant up $ vagrant ssh
インストール後の作業
SELinux が動作しているかは sestatus
で確認できます。以下のように表示されるはずです:
SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: refpolicy Current mode: permissive Mode from config file: permissive Policy MLS status: disabled Policy deny_unknown status: allowed Max kernel policy version: 28
コンテキストを適切に維持するために、restorecond.service
を有効にできます:
# systemctl enable restorecond
再起動しないで enforcing モードに切り替えたい場合、次のコマンドを使います:
# echo 1 > /sys/fs/selinux/enforce
スワップファイル
スワップパーティションの代わりにスワップファイルを使う場合、適切なセキュリティコンテキストを設定するために次のコマンドを実行してください:
# semanage fcontext -a -t swapfile_t "/path/to/swapfile" # restorecon /path/to/swapfile
SELinux の使い方
SELinux は伝統的な Unix のアクセス制御とは異なる方法でセキュリティを定義します。SELinux を理解するにはサンプルを見るのが一番です。例えば、apache のホームページの SELinux セキュリティコンテキストは以下のようになります:
$ls -lZ /var/www/html/index.html -rw-r--r-- username username system_u:object_r:httpd_sys_content_t /var/www/html/index.html
最初の3つと最後のカラムは (Arch) Linux ユーザーなら誰でも見覚えがあるはずです。新しいのは4番目のカラムであり以下のフォーマットになっています:
user:role:type[:level]
それぞれを説明すると:
- User: SELinux のユーザー識別子。SELinux ユーザーが使用することができる複数のロールに関連付けることができます。
- Role: SELinux のロール。SELinux ユーザーがアクセスすることができる複数のタイプに関連付けることができます。
- Type: プロセスにタイプが関連付けられると、SELinux ユーザー (サブジェクト) がアクセスできるプロセスが (ドメイン) が決定します。タイプがオブジェクトと関連付けられた場合、SELinux がオブジェクトにアクセスする際のパーミッションが決まります。
- Level: ポリシーが MCS や MLS をサポートしている場合にのみ使用する任意のフィールドです。範囲とも呼びます。
これが重要になるのは、自分でポリシーを作成して、SELinux の基本的な構成要素にしたいという場合です。ほとんどの場合リファレンスポリシーで十分間に合うので、理解する必要はありません。ただし、あなたがパワーユーザーであり何か特別な必要性があるのであれば、自ら SELinux のポリシーを作成する方法を学ぶ絶好の機会でしょう。
SELinux の仕組みを理解したい人には こちら のシリーズを読むのをおすすめします。
トラブルシューティング
SELinux のエラーは systemd の journal で確認できます。例えば system_u:system_r:policykit_t:s0
ラベルに関する SELinux のメッセージを表示するには、次を実行:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
便利なツール
SELinux を補助するツール/コマンドがいくつか存在します。
- restorecon
- ポリシールールに基づいてファイル/ディレクトリのコンテキストを付け直す (
-R
を付けると再帰的に実行)。 - chcon
- 指定したファイルのコンテキストを変更。
問題の報告
問題の報告は GitHub でしてください: https://github.com/archlinuxhardened/selinux/issues