「SELinux」の版間の差分
(同期) |
細 (記事内へのリンクを修正) |
||
(3人の利用者による、間の4版が非表示) | |||
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 が有効になったカーネル || |
+ | | 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 || |
+ | | 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つあります。 |
||
− | ==== |
+ | ==== 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}} をインストールして、{{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のビルドスクリプトを使用 ==== |
− | + | このリポジトリには {{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/ |
+ | {{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 の挙動は左右されます。 |
+ | ポリシーは SELinux の基幹です。ポリシーによって SELinux の挙動は左右されます。AURで利用可能な唯一のポリシーはリファレンスポリシーだけです。リファレンスポリシーをインストールするには、{{AUR|selinux-refpolicy-src}} パッケージから取得するか https://github.com/SELinuxProject/refpolicy/wiki/DownloadRelease#current-release から最新のリリースをダウンロードすることができます。AUR のパッケージを使う場合、{{ic|/etc/selinux/refpolicy/src/policy}} まで移動して以下のコマンドを実行してリファレンスポリシーをインストールしてください: |
− | + | # 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| |
+ | {{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 |
+ | SELINUXTYPE=refpolicy |
+ | }} |
||
ここで、再起動が必要です。再起動したら、次を実行してファイルシステムにラベルを付けて下さい: |
ここで、再起動が必要です。再起動したら、次を実行してファイルシステムにラベルを付けて下さい: |
||
299行目: | 291行目: | ||
その後、以下の内容で {{ic|requiredmod.te}} ファイルを作成します: |
その後、以下の内容で {{ic|requiredmod.te}} ファイルを作成します: |
||
− | {{hc|requiredmod.te| |
+ | {{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 |
+ | Max kernel policy version: 28 |
+ | }} |
||
− | コンテキストを適切に維持するに |
+ | コンテキストを適切に維持するために、{{ic|restorecond.service}}を有効にできます: |
# systemctl enable restorecond |
# systemctl enable restorecond |
||
377行目: | 372行目: | ||
スワップパーティションの代わりにスワップファイルを使う場合、適切なセキュリティコンテキストを設定するために次のコマンドを実行してください: |
スワップパーティションの代わりにスワップファイルを使う場合、適切なセキュリティコンテキストを設定するために次のコマンドを実行してください: |
||
− | + | # 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 は 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