「SELinux」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Pkg/AUR テンプレートの更新)
(記事内へのリンクを修正)
 
(2人の利用者による、間の3版が非表示)
16行目: 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 が有効になったカーネル || {{pkg|linux}}, {{pkg|linux-zen}}, {{pkg|linux-hardened}} で実装済み || [https://git.archlinux.org/svntogit/packages.git/commit/?id=c46609a4b0325c363455264844091b71de01eddc 4.18.8] から公式リポジトリで利用できます。
+
| 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 のユーザースペースツールとライブラリ || AUR で実装: https://aur.archlinux.org/packages/?O=0&K=selinux || https://github.com/archlinuxhardened/selinux に成果があります。
 
| SELinux のユーザースペースツールとライブラリ || AUR で実装: https://aur.archlinux.org/packages/?O=0&K=selinux || https://github.com/archlinuxhardened/selinux に成果があります。
33行目: 34行目:
 
! 名前 !! 状態とコメント
 
! 名前 !! 状態とコメント
 
|-
 
|-
| linux || 起動時に次の[[カーネルパラメータ]]が必要: {{ic|1=selinux=1 security=selinux}}
+
| linux, linux-lts, linux-zen, linux-hardened || [[#SELinuxのLSMを有効化|lsm=のカーネルパラメータ]]が必要
|-
 
| linux-hardened || 起動時に次の[[カーネルパラメータ]]が必要: {{ic|1=selinux=1 security=selinux}}
 
 
|-
 
|-
 
| coreutils || {{ic|--with-selinux}} フラグを使って libselinux とリンクしてリビルドする必要があります。
 
| coreutils || {{ic|--with-selinux}} フラグを使って libselinux とリンクしてリビルドする必要があります。
43行目: 42行目:
 
| dbus || {{ic|--enable-libaudit}} と {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。
 
| dbus || {{ic|--enable-libaudit}} と {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。
 
|-
 
|-
| findutils || libselinux をインストールしてリビルドを行なって SELinux オプションを有効にします。
+
| findutils || libselinux をインストールしてリビルドを行なって SELinux-specific オプションを有効にします。
 
|-
 
|-
 
| iproute2 || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。
 
| iproute2 || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。
67行目: 66行目:
 
|}
 
|}
   
他の SELinux 関連のパッケージは変更を加えずに安全に使うことができます。
+
他の SELinux 関連のパッケージはおそらく変更を加えずに安全に使うことができます。
   
 
==強制アクセス制御==
 
==強制アクセス制御==
85行目: 84行目:
 
==SELinux のインストール==
 
==SELinux のインストール==
   
===パッケージ===
+
===パッケージの説明===
   
SELinux 関連のパッケージは全て、AUR の ''selinux'' グループに含まれています。
+
SELinux 関連のパッケージは全て、AUR の ''selinux'' グループに含まれています。これらのいずれかを自分でインストールしようとする前に[[#インストール]]を読んで完全なインストールのために推奨されるオプションを確認してください
   
 
====SELinux 対応のシステムユーティリティ====
 
====SELinux 対応のシステムユーティリティ====
123行目: 122行目:
 
;{{AUR|sudo-selinux}}
 
;{{AUR|sudo-selinux}}
 
:適切にセキュリティコンテキストを設定する SELinux サポートを有効にしてコンパイルされた修正版 [[sudo]] パッケージ。{{pkg|sudo}} パッケージを置き換えます。
 
:適切にセキュリティコンテキストを設定する SELinux サポートを有効にしてコンパイルされた修正版 [[sudo]] パッケージ。{{pkg|sudo}} パッケージを置き換えます。
 
;{{AUR|util-linux-selinux}}
 
:SELinux のサポートを有効にしてコンパイルされた修正版 util-linux パッケージ。{{pkg|util-linux}} パッケージを置き換えます。
 
   
 
;{{AUR|systemd-selinux}}
 
;{{AUR|systemd-selinux}}
 
:SELinux 対応版の [[Systemd]]。{{pkg|systemd}} パッケージを置き換えます。
 
:SELinux 対応版の [[Systemd]]。{{pkg|systemd}} パッケージを置き換えます。
  +
  +
;{{AUR|util-linux-selinux}}
  +
:SELinux のサポートを有効にしてコンパイルされた修正版 util-linux パッケージ。{{pkg|util-linux}} パッケージを置き換えます。
   
 
====SELinux のユーザースペースユーティリティ====
 
====SELinux のユーザースペースユーティリティ====
193行目: 192行目:
 
必要な SELinux パッケージをインストールする方法は2つあります。
 
必要な SELinux パッケージをインストールする方法は2つあります。
   
==== AUR を使用 ====
+
==== GitHubのバイナリを使用 ====
   
  +
全てのパッケージは非公式ユーザーリポジトリ(https://wiki.archlinux.org/title/Unofficial_user_repositories#selinux)で入手可能です。''base''パッケージはシステムインストールの{{ic|arch-bootstrap}}段階で''base-selinux''に置き換え可能です。
* まず、SELinux のユーザースペースツールとライブラリをインストールしてください。順番は次の通りです (依存関係があるため順番を守る必要があります): {{AUR|libsepol}}, {{AUR|libselinux}}, {{AUR|secilc}}, {{AUR|checkpolicy}}, {{AUR|setools}}, {{AUR|libsemanage}}, {{AUR|semodule-utils}}, {{AUR|policycoreutils}}, {{AUR|selinux-python}} ({{AUR|python-ipy}}) が必要), {{AUR|mcstrans}}, {{AUR|restorecond}}。
 
* 次に {{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|libsystemd-selinux}}{{Broken package link|パッケージが存在しません}} をインストールして、{{AUR|util-linux-selinux}} (と {{AUR|libutil-linux-selinux}}) をビルド・インストールし、それから {{AUR|systemd-selinux}} を再ビルド・インストールします。
 
* それから、{{AUR|dbus-selinux}} をインストールしてください。
 
* その後、{{AUR|selinux-alpm-hook}} をインストールして pacman でパッケージをインストールするたびに restorecon が実行されるようにします。
 
   
  +
{{Warning|現状、このリポジトリでは署名付きパッケージを提供していないため、ダウンロードしたバイナリはpacmanによって検証されません。これにはセキュリティ上のリスクが伴います。十分注意してください。}}
上記の手順が全て終わったら、SELinux カーネル ({{AUR|linux-selinux}} など) とポリシー ({{AUR|selinux-refpolicy-arch}} や {{AUR|selinux-refpolicy-git}} など) をインストールします。
 
   
==== GitHub ポジを使用 ====
+
==== GitHubのビルドスクトを使用 ====
   
全てのパッケージは https://github.com/archlinuxhardened/selinux でメンテナンスされています。このリポジトリには {{ic|build_and_install_all.sh}} という名前のスクリプトが含まれており、全てのパッケージを正しい順番でビルド・インストール (あるいはアップデート) します。以下はユーザーシェルでスクリプトを使って全てのパッケージをインストールする例です (GPG 鍵をダウンロードしてパッケージのソース tarball を検証します):
+
このリポジトリには {{ic|build_and_install_all.sh}} という名前のスクリプトが含まれており、全てのパッケージを正しい順番でビルド・インストール (あるいはアップデート) します。以下はユーザーシェルでスクリプトを使って全てのパッケージをインストールする例です (GPG 鍵をダウンロードしてパッケージのソース tarball を検証します):
   
 
$ git clone https://github.com/archlinuxhardened/selinux
 
$ git clone https://github.com/archlinuxhardened/selinux
216行目: 209行目:
 
もちろん、スクリプトを実行する前に {{ic|build_and_install_all.sh}} の中身を変更することもできます。例えば既に SELinux のサポートが有効になっているカーネルを使っている場合などに変更を加えます。
 
もちろん、スクリプトを実行する前に {{ic|build_and_install_all.sh}} の中身を変更することもできます。例えば既に SELinux のサポートが有効になっているカーネルを使っている場合などに変更を加えます。
   
  +
==== 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}}。
新しいカーネルをインストールしたら、ブートローダーの設定を更新してください。
 
  +
* 次に {{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}} など) をインストールします。
====GRUB====
 
   
  +
=== SELinuxのLSMを有効化 ===
{{ic|/etc/default/grub}} の {{ic|GRUB_CMDLINE_LINUX_DEFAULT}} 変数に {{ic|1=security=selinux selinux=1}} を追加して次のコマンドを実行:
 
   
  +
起動時にSELinuxをデフォルトのセキュリティモデルとして有効にするには、次の[[カーネルパラメータ]]が必要です。:
# grub-mkconfig -o /boot/grub/grub.cfg
 
   
  +
lsm=landlock,lockdown,yama,integrity,selinux,bpf
====Syslinux====
 
   
  +
{{Note|The {{ic|1=lsm=}}カーネルパラメーターはLinuxセキュリティモジュールの初期化順序を設定します。カーネルに設定された{{ic|1=lsm=}}の値は{{ic|1=zgrep CONFIG_LSM= /proc/config.gz}}で見つけることができ、現在の値は{{ic|cat /sys/kernel/security/lsm}}で見ることができます。
{{ic|syslinux.cfg}} ファイルを編集して一番最後に以下を追加:
 
   
  +
=== カスタムカーネル ===
{{hc|/boot/syslinux/syslinux.cfg|<nowiki>LABEL arch-selinux
 
LINUX ../vmlinuz-linux-selinux
 
APPEND root=/dev/sda2 ro security=selinux selinux=1
 
INITRD ../initramfs-linux-selinux.img</nowiki>}}
 
   
  +
[[カーネル/Arch_build_system#.E3.82.B3.E3.83.B3.E3.83.91.E3.82.A4.E3.83.AB|カーネルをコンパイル]]するときには少なくとも以下のオプションを設定する必要があります。:
"linux-selinux" は使用するカーネルにあわせて適当に変更してください。
 
   
  +
CONFIG_SECURITY_SELINUX=y
====systemd-boot====
 
  +
CONFIG_AUDIT=y
   
  +
SELinuxをデフォルトで有効にし、カーネルパラメータの設定を省略するには、加えて{{ic|CONFIG_LSM}}を有効にし、リストの最初の"major"モジュールとして{{ic|selinux}}を設定します。:
新しいローダーエントリを作成します (例: {{ic|/boot/loader/entries/arch-selinux.conf}}):
 
   
  +
CONFIG_LSM="landlock,lockdown,yama,integrity,selinux,bpf"
{{hc|/boot/loader/entries/arch-selinux.conf|2=
 
title Arch Linux SELinux
 
linux /vmlinuz-linux-selinux
 
initrd /initramfs-linux-selinux.img
 
options root=/dev/sda2 ro selinux=1 security=selinux
 
}}
 
   
 
===PAM の確認===
 
===PAM の確認===
260行目: 252行目:
 
===ポリシーのインストール===
 
===ポリシーのインストール===
   
{{Warning|[https://github.com/TresysTechnology/refpolicy/wiki Tresys] によるリファレンスポリシーはあまり Arch Linux に適しているとは言えません。リース 20170805 以前ではほとファイルくラベル付けされからです。主問題は以下の通:
+
{{Warning|[https://github.com/SELinuxProject/refpolicy/wiki SELinuxProject] によるリファレンスポリシーはあまり Arch Linux に適しているとは言えません。、ポを改善するパッチを投稿している人の多くが他のディトリビューション (Debian, Gentoo, RHEL など) を使っているため、Arch Linux パッケージとの互換性は完璧ではありませ (例えばプログラム新しい機能をポリシーサポートしていない場合があ)。}}
* {{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 )。
 
refpolicy のリリース 20170805 から上記の問題は解決されましたが、ポリシーを改善するパッチを投稿している人の多くが他のディストリビューション (Debian, Gentoo, RHEL など) を使っているため、Arch Linux パッケージとの互換性は完璧ではありません (例えばプログラムの新しい機能をポリシーがサポートしていない場合があります)。}}
 
   
ポリシーは SELinux の基幹です。ポリシーによって SELinux の挙動は左右されます。現在 AURはリファレンスポリシーだけが存在します。リファレンスポリシーをインストールするには、ソースファイルを使う必要があり、{{AUR|selinux-refpolicy-src}} パッケージから取得するか https://github.com/TresysTechnology/refpolicy/wiki/DownloadRelease#current-release から最新のリリースをダウンロードすることができます。AUR のパッケージを使う場合、{{ic|/etc/selinux/refpolicy/src/policy}} まで移動して以下のコマンドを実行してリファレンスポリシーをインストールしてください:
+
ポリシーは SELinux の基幹です。ポリシーによって SELinux の挙動は左右されます。AURで利用可能な唯一のポリシーはリファレンスポリシーだけす。リファレンスポリシーをインストールするには、{{AUR|selinux-refpolicy-src}} パッケージから取得するか https://github.com/SELinuxProject/refpolicy/wiki/DownloadRelease#current-release から最新のリリースをダウンロードすることができます。AUR のパッケージを使う場合、{{ic|/etc/selinux/refpolicy/src/policy}} まで移動して以下のコマンドを実行してリファレンスポリシーをインストールしてください:
   
{{bc|# make bare
+
# make bare
# make conf
+
# make conf
# make install}}
+
# make install
   
 
SELinux ポリシーの書き方を知っているならば上記のコマンドを実行する前に存分にポリシーを調整することができます。コマンドはしばらく時間がかかりジョブを実行してシステムの1つのコアに負担をかけます、心配は要りません。のんびりと構えてコマンドを実行させておいて下さい。
 
SELinux ポリシーの書き方を知っているならば上記のコマンドを実行する前に存分にポリシーを調整することができます。コマンドはしばらく時間がかかりジョブを実行してシステムの1つのコアに負担をかけます、心配は要りません。のんびりと構えてコマンドを実行させておいて下さい。
   
 
リファレンスポリシーをロードするには次を実行:
 
リファレンスポリシーをロードするには次を実行:
  +
{{bc|# make load}}
 
  +
# make load
   
 
そして、以下の内容で {{ic|/etc/selinux/config}} ファイルを作成してください (上記のデフォルト設定を使用する場合。ポリシーの名前を変更したときは、ファイルを修正する必要があります):
 
そして、以下の内容で {{ic|/etc/selinux/config}} ファイルを作成してください (上記のデフォルト設定を使用する場合。ポリシーの名前を変更したときは、ファイルを修正する必要があります):
   
{{hc|/etc/selinux/config|<nowiki># This file controls the state of SELinux on the system.
+
{{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.
291行目: 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</nowiki>}}
+
SELINUXTYPE=refpolicy
  +
}}
   
 
ここで、再起動が必要です。再起動したら、次を実行してファイルシステムにラベルを付けて下さい:
 
ここで、再起動が必要です。再起動したら、次を実行してファイルシステムにラベルを付けて下さい:
299行目: 291行目:
 
その後、以下の内容で {{ic|requiredmod.te}} ファイルを作成します:
 
その後、以下の内容で {{ic|requiredmod.te}} ファイルを作成します:
   
{{hc|requiredmod.te|<nowiki>module requiredmod 1.0;
+
{{hc|requiredmod.te|2=
  +
module requiredmod 1.0;
   
 
require {
 
require {
355行目: 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
363行目: 357行目:
 
Policy MLS status: disabled
 
Policy MLS status: disabled
 
Policy deny_unknown status: allowed
 
Policy deny_unknown status: allowed
Max kernel policy version: 28</nowiki>}}
+
Max kernel policy version: 28
  +
}}
   
コンテキストを適切に維持するに''restorecond'' 使います:
+
コンテキストを適切に維持するために、{{ic|restorecond.service}}有効にできます:
   
 
# systemctl enable restorecond
 
# systemctl enable restorecond
377行目: 372行目:
 
スワップパーティションの代わりにスワップファイルを使う場合、適切なセキュリティコンテキストを設定するために次のコマンドを実行してください:
 
スワップパーティションの代わりにスワップファイルを使う場合、適切なセキュリティコンテキストを設定するために次のコマンドを実行してください:
   
{{bc|# semanage fcontext -a -t swapfile_t "/path/to/swapfile"
+
# semanage fcontext -a -t swapfile_t "''/path/to/swapfile''"
# restorecon /path/to/swapfile}}
+
# restorecon ''/path/to/swapfile''
   
 
==SELinux の使い方==
 
==SELinux の使い方==

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 が何をするのか理解したほうが良いでしょう。簡単に言うと、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-Busdbus パッケージを置き換えます。
findutils-selinuxAUR
指定したセキュリティコンテキストを使ってファイルの検索をできるようにするため SELinux のサポートを有効にしてコンパイルされたパッチ済みの findutils パッケージ。findutils パッケージを置き換えます。
iproute2-selinuxAUR
SELinux のサポートを有効にしてコンパイルされた iproute2 パッケージ。ss-Z オプションを追加するなどの修正があります。iproute2 パッケージを置き換えます。
logrotate-selinuxAUR
SELinux のサポートを有効にしてコンパイルされた Logrotate パッケージ。logrotate パッケージを置き換えます。
openssh-selinuxAUR
SELinux のサポートを有効にしてコンパイルされ、ユーザーセッションのセキュリティコンテキストを設定する OpenSSH パッケージ。openssh パッケージを置き換えます。
pam-selinuxAURpambase-selinuxAUR
pam_selinux.so が入った PAM パッケージとそのベースパッケージ。それぞれ pampambase パッケージを置き換えます。
psmisc-selinuxAUR
SELinux サポートを有効にしてコンパイルされた Psmisc パッケージ。例えば、killall-Z オプションを追加します。psmisc パッケージを置き換えます。
shadow-selinuxAUR
SELinux サポートを有効にしてコンパイルされた Shadow パッケージ。ログイン後のユーザーに適切なセキュリティコンテキストを設定するように修正された /etc/pam.d/login ファイルが含まれています。shadow パッケージを置き換えます。
sudo-selinuxAUR
適切にセキュリティコンテキストを設定する SELinux サポートを有効にしてコンパイルされた修正版 sudo パッケージ。sudo パッケージを置き換えます。
systemd-selinuxAUR
SELinux 対応版の Systemdsystemd パッケージを置き換えます。
util-linux-selinuxAUR
SELinux のサポートを有効にしてコンパイルされた修正版 util-linux パッケージ。util-linux パッケージを置き換えます。

SELinux のユーザースペースユーティリティ

checkpolicyAUR
SELinux ポリシーを作成するためのツール。
mcstransAUR
libselinux によって MCS ラベルを変換するのに使われるデーモン。
libselinuxAUR
セキュリティが求められるアプリケーションのためのライブラリ。semanagesetools に必要な Python バインディングが含まれています。
libsemanageAUR
ポリシー管理のためのライブラリ。semanagesetools に必要な Python バインディングが含まれています。
libsepolAUR
バイナリポリシーの操作のためのライブラリ。
policycoreutilsAUR
newrole や setfiles などの SELinux のコアユーティリティ。
restorecondAUR
ファイルのラベルを管理するデーモン。
secilcAUR
CIL (共通中間言語) で書かれた SELinux ポリシーのコンパイラ。
selinux-dbus-configAUR
SELinux の設定を管理できる DBus サービス。
selinux-guiAUR
SELinux の GUI ツール (system-config-selinux)。
selinux-pythonAURselinux-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に置き換え可能です。

警告: 現状、このリポジトリでは署名付きパッケージを提供していないため、ダウンロードしたバイナリはpacmanによって検証されません。これにはセキュリティ上のリスクが伴います。十分注意してください。

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 カーネル (linuxなどとポリシー(selinux-refpolicy-archAURselinux-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

ポリシーのインストール

警告: SELinuxProject によるリファレンスポリシーはあまり Arch Linux に適しているとは言えません。、ポリシーを改善するパッチを投稿している人の多くが他のディストリビューション (Debian, Gentoo, RHEL など) を使っているため、Arch Linux パッケージとの互換性は完璧ではありません (例えばプログラムの新しい機能をポリシーがサポートしていない場合があります)。

ポリシーは 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]

それぞれを説明すると:

  1. User: SELinux のユーザー識別子。SELinux ユーザーが使用することができる複数のロールに関連付けることができます。
  2. Role: SELinux のロール。SELinux ユーザーがアクセスすることができる複数のタイプに関連付けることができます。
  3. Type: プロセスにタイプが関連付けられると、SELinux ユーザー (サブジェクト) がアクセスできるプロセスが (ドメイン) が決定します。タイプがオブジェクトと関連付けられた場合、SELinux がオブジェクトにアクセスする際のパーミッションが決まります。
  4. 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

参照