<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=S3-odara</id>
	<title>ArchWiki - 利用者の投稿記録 [ja]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.archlinux.jp/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=S3-odara"/>
	<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php/%E7%89%B9%E5%88%A5:%E6%8A%95%E7%A8%BF%E8%A8%98%E9%8C%B2/S3-odara"/>
	<updated>2026-04-13T14:01:53Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB/Arch_build_system&amp;diff=34084</id>
		<title>カーネル/Arch build system</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB/Arch_build_system&amp;diff=34084"/>
		<updated>2023-09-27T12:29:08Z</updated>

		<summary type="html">&lt;p&gt;S3-odara: 2023-09-08版に同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:カーネル]]&lt;br /&gt;
[[de:Eigenen Kernel erstellen]]&lt;br /&gt;
[[en:Kernel/Arch build system]]&lt;br /&gt;
[[ru:Kernel (Русский)/Arch Build System]]&lt;br /&gt;
[[zh-hans:Kernel/Arch Build System]]&lt;br /&gt;
[[Arch Build System]] を使うことで、公式の {{Pkg|linux}} パッケージをベースにカスタムカーネルをビルドすることができます。このコンパイル方法は全体のプロセスを自動化でき、よくテストされたパッケージに基づいています。PKGBUILD を編集することでカスタムカーネルの設定や[[パッチ]]の追加が可能です。&lt;br /&gt;
&lt;br /&gt;
== 材料の入手 ==&lt;br /&gt;
&lt;br /&gt;
[[makepkg]] を使用するので、以下のベストプラクティスに従ってください。例えば、makepkg を [[root ユーザ]]として実行することはできません。したがって、まずはホームディレクトリに {{ic|build}} ディレクトリを作成してください:&lt;br /&gt;
&lt;br /&gt;
 $ mkdir ~/build/&lt;br /&gt;
 $ cd ~/build/&lt;br /&gt;
&lt;br /&gt;
パッケージ {{Pkg|devtools}} と {{Pkg|base-devel}} を[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
カスタマイズを開始するには、クリーンなカーネルが必要です。以下を実行して、[[Arch Build System#PKGBUILD ソースを取得する|git を使って PKGBUILD ソースを取得]]し、他のいくつかのファイルも取得してください:&lt;br /&gt;
&lt;br /&gt;
 $ pkgctl repo clone --protocol=https linux&lt;br /&gt;
&lt;br /&gt;
この時点で、ディレクトリツリーは以下のようになります（他にもいくつかファイルがあるかもしれません）&lt;br /&gt;
&lt;br /&gt;
{{bc|~/build/linux/-+&lt;br /&gt;
               +--config&lt;br /&gt;
               \__PKGBUILD&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、必要なファイル (例:カスタム設定ファイル、パッチなど) をそれぞれのソースから取得してください。&lt;br /&gt;
&lt;br /&gt;
== PKGBUILD の修正 ==&lt;br /&gt;
&lt;br /&gt;
PKGBUILD を編集して、{{ic|pkgbase}} パラメータをあなたのカスタムパッケージの名前に変えて下さい、例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|PKGBUILD|2=&lt;br /&gt;
pkgbase=linux-custom}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|linux}} を {{ic|provides}} 配列に &#039;&#039;&#039;追加しないでください&#039;&#039;&#039;。カスタムカーネルは、そのカーネルに対して構築されたバイナリモジュールと互換性がないため、その依存関係を満たすことはできません。 同様に、同様の理由で、ヘッダーパッケージの {{ic|provides}} 配列に {{ic|linux-headers}} を追加しないでください。}}&lt;br /&gt;
&lt;br /&gt;
=== ドキュメントの作成を避ける ===&lt;br /&gt;
&lt;br /&gt;
長い[[#コンパイル|コンパイル]]作業の大部分は、ドキュメントの作成に費やされています。2022年8月25日の時点で、PKGBUILD への次のパッチにより作成を回避します:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
63c63&lt;br /&gt;
&amp;lt;   make htmldocs all&lt;br /&gt;
---&lt;br /&gt;
&amp;gt;   make all&lt;br /&gt;
195c195&lt;br /&gt;
&amp;lt; pkgname=(&amp;quot;$pkgbase&amp;quot; &amp;quot;$pkgbase-headers&amp;quot; &amp;quot;$pkgbase-docs&amp;quot;)&lt;br /&gt;
---&lt;br /&gt;
&amp;gt; pkgname=(&amp;quot;$pkgbase&amp;quot; &amp;quot;$pkgbase-headers&amp;quot;)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
このパッチは行#63 と行#195 を変更します。 PKGBUILD ファイルが正しく適用されない場合は、手動で編集する必要がある場合があります。&lt;br /&gt;
&lt;br /&gt;
=== prepare() の変更 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|prepare()}} 関数では、[[パッケージにパッチを適用#パッチの適用|パッチの適用]] やカーネルビルドの設定を変更することができます。&lt;br /&gt;
[https://gitlab.archlinux.org/archlinux/packaging/packages/linux/-/commit/fbf5b3b8adaf4274e53f35634124e1c3d2e4d328 2018-08-01]以降、PKGBUILDは自動的にソース内の{{ic|*.patch}}ファイルを適用します。&lt;br /&gt;
&lt;br /&gt;
もし、いくつかの設定を変更する必要があるなら、ソースの {{ic|config}} を編集することができます。&lt;br /&gt;
&lt;br /&gt;
また、GUI ツールを使ってオプションを調整することもできます。PKGBUILD の prepare() 関数に {{ic|make olddefconfig}} とコメントし、好きなツールを追加してください (利用可能な設定ターゲットをすべてリストアップするには {{ic|make help}} を実行してください):&lt;br /&gt;
&lt;br /&gt;
{{hc|PKGBUILD|&lt;br /&gt;
...&lt;br /&gt;
  msg2 &amp;quot;Setting config...&amp;quot;&lt;br /&gt;
  cp ../config .config&lt;br /&gt;
  #make olddefconfig&lt;br /&gt;
&lt;br /&gt;
  make nconfig     # new CLI menu for configuration&lt;br /&gt;
  #make menuconfig # CLI menu for configuration&lt;br /&gt;
  #make xconfig    # X-based configuration&lt;br /&gt;
  #make oldconfig  # using old config from previous kernel version&lt;br /&gt;
  # ... or manually edit .config&lt;br /&gt;
  make prepare&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|systemd には、汎用的なユースケース、特定のユースケース (例: UEFI)、特定の systemd の機能 (例: bootchart) を使用するために、設定する必要があるカーネルコンフィグが多数存在します。正しく設定しないとシステムの調子がおかしくなったり全く使えなくなったりします。必須あるいは推奨されているカーネルコンフィグのリストは {{ic|/usr/share/doc/systemd/README}} に書かれています。コンパイルする前によく確認してください。必要なコンフィグはときどき変わっています。Arch では基本的に公式カーネルを使用することになっているので、要件が変わってもアナウンスはされません。新しいバージョンの systemd をインストールする前に、リリースノートをチェックして使用しているカスタムカーネルが新しい systemd の要件を満たしているか確認してください。}}&lt;br /&gt;
&lt;br /&gt;
=== 新しいチェックサムを生成 ===&lt;br /&gt;
&lt;br /&gt;
[[#prepare() の変更]] では、{{ic|$_srcname/.config}} への変更の可能性を示唆しています。 このパスはパッケージファイルのダウンロードが終了した場所ではないため、そのチェックサムは makepkg によってチェックされませんでした (実際は {{ic|$_srcname/../../config}} をチェックしました)。&lt;br /&gt;
&lt;br /&gt;
makepkg を実行する前に、ダウンロードした {{ic|config}} を別の設定ファイルに置き換えた場合は、{{Pkg|pacman-contrib}} パッケージを[[インストール]]し、以下を実行して新しいチェックサムを生成してください:&lt;br /&gt;
&lt;br /&gt;
 $ updpkgsums&lt;br /&gt;
&lt;br /&gt;
== コンパイル ==&lt;br /&gt;
&lt;br /&gt;
これで、いつものコマンド {{ic|makepkg}} を使って、あなたのカーネルをコンパイルできるようになりました。&lt;br /&gt;
&lt;br /&gt;
カーネルパラメータの設定に (menuconfig などの) インタラクティブなプログラムを選んだ場合は、コンパイル中に設定を行ってください。&lt;br /&gt;
&lt;br /&gt;
 $ makepkg -s&lt;br /&gt;
&lt;br /&gt;
{{ic|-s}} パラメータによって xml やドキュメントなど最近のカーネルが必要とする依存パッケージがダウンロードされます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* カーネルソースは [https://www.kernel.org/signature.html#kernel-org-web-of-trust PGP 署名] が付いており、makepkg は署名を検証します。詳しくは [[Makepkg#署名チェック]]を見てください。&lt;br /&gt;
* ハードウェアのパフォーマンスによっては、コンパイルに数時間かかる可能性があります。マルチコアのシステムでは[[Makepkg#並列コンパイル|複数のコンパイルジョブを同時に実行する]]ことでコンパイル時間を大幅に削減することが可能です。&lt;br /&gt;
* 上記の {{ic|makepkg}} を {{ic|time}} コマンドを使って実行すれば、コンパイルにどれだけの時間が掛かったのかを知ることができます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
コンパイルのステップを終えると、{{ic|~/build/linux}} フォルダ内に 2 つのパッケージが作成されています。1 つはカーネルで、もう一つはカーネルのヘッダファイル群です。これらは以下のような名前かもしれません:&lt;br /&gt;
&lt;br /&gt;
 linux-custom-5.8.12-x86_64.pkg.tar.zst&lt;br /&gt;
 linux-custom-headers-5.8.12-x86_64.pkg.tar.zst&lt;br /&gt;
&lt;br /&gt;
ベストプラクティスは、両方のパッケージを一緒に[[インストール]]することです。両方とも必要になるかもしれませんから (例えば [[DKMS]]):&lt;br /&gt;
&lt;br /&gt;
 # pacman -U &#039;&#039;linux-custom-headers-5.8.12-x86_64.pkg.tar.zst&#039;&#039; &#039;&#039;linux-custom-5.8.12-x86_64.pkg.tar.zst&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
(先のフォルダ内にあるファイルの実際の名前に置き換えてください)&lt;br /&gt;
&lt;br /&gt;
== ブートローダー ==&lt;br /&gt;
&lt;br /&gt;
新しいカーネルをデフォルトのカーネルと共存させるために {{ic|pkgbase}} を変更した場合、ブートローダーの設定ファイルを更新し、関連する initramfs イメージとカスタムカーネルの新しいエントリ (&#039;default&#039; と &#039;fallback&#039;) を追加する必要があります。&lt;br /&gt;
&lt;br /&gt;
== アップデート ==&lt;br /&gt;
&lt;br /&gt;
更新したい arch kernel source を持っていると仮定すると、そのための一つの方法は https://github.com/archlinux/linux を使うことです。以下では、カーネルソースの最上位ディレクトリを {{ic|~/build/linux/}} とします。&lt;br /&gt;
&lt;br /&gt;
一般に、arch は2つのローカル git リポジトリを持つ arch kernel source を設定します。{{ic|archlinux-linux/}} にあるのは、{{ic|&amp;lt;nowiki&amp;gt;https://github.com/archlinux/linux.git&amp;lt;/nowiki&amp;gt;}} を指しているローカルの裸の [[git]] リポジトリです。もう一つは {{ic|&#039;&#039;&#039;src/&#039;&#039;&#039;archlinux-linux/}} にあり、最初のリポジトリから取り出します。可能なローカルパッチとビルドは、{{ic|&#039;&#039;&#039;src/&#039;&#039;&#039;archlinux-linux/}} にあると期待されます。&lt;br /&gt;
&lt;br /&gt;
この例では、{{ic|archlinux-linux/}} にローカルにインストールされた bare git リポジトリソースの HEAD が最初に指されています:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=&lt;br /&gt;
$ cd ~/build/linux/archlinux-linux/&lt;br /&gt;
$ git log --oneline --max-count 1 HEAD|2=&lt;br /&gt;
4010b622f1d2 Merge branch &#039;dax-fix-5.3-rc3&#039; of &amp;lt;nowiki&amp;gt;git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
v5.2.5-arch1とv5.2.6-arch1の間のどこかにあります。&lt;br /&gt;
&lt;br /&gt;
 $ git fetch --verbose&lt;br /&gt;
&lt;br /&gt;
取得した新しいタグを出力するため、最新の archlinux タグである v5.2.7-arch1 をフェッチしたことがわかります。 新しいタグが取得されなかった場合、利用可能な新しい archlinux ソースはありません。&lt;br /&gt;
&lt;br /&gt;
これで、実際のビルドが行われる場所でソースを更新できます。&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/build/linux/src/archlinux-linux/&lt;br /&gt;
 $ git checkout master&lt;br /&gt;
 $ git pull&lt;br /&gt;
 $ git fetch --tags --verbose&lt;br /&gt;
 $ git branch --verbose 5.2.7-arch1 v5.2.7-arch1&lt;br /&gt;
 $ git checkout 5.2.7-arch1&lt;br /&gt;
&lt;br /&gt;
次のような方法で状況が進んでいることを確認できます &lt;br /&gt;
&lt;br /&gt;
{{hc|1=$ git log --oneline 5.2.7-arch1 --max-count=7|2=&lt;br /&gt;
13193bfc03d4 &#039;&#039;&#039;Arch Linux kernel v5.2.7-arch1&#039;&#039;&#039;&lt;br /&gt;
9475c6772d05 netfilter: nf_tabf676926c7f60les: fix module autoload for redir&lt;br /&gt;
498d650048f6 iwlwifi: Add support for SAR South Korea limitation&lt;br /&gt;
bb7293abdbc7 iwlwifi: mvm: disable TX-AMSDU on older NICs&lt;br /&gt;
f676926c7f60 ZEN: Add CONFIG for unprivileged_userns_clone&lt;br /&gt;
5e4e503f4f28 add sysctl to disallow unprivileged CLONE_NEWUSER by default&lt;br /&gt;
5697a9d3d55f &#039;&#039;&#039;Linux 5.2.7&#039;&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これは、{{ic|Arch Linux kernel v5.2.7-arch1}} と {{ic|Linux 5.2.7}} の間のいくつかの特定の archlinux パッチを示しています。&lt;br /&gt;
&lt;br /&gt;
最新の PKGBUILD および archlinux カーネルのコンフィグレーションファイルは、{{ic|git}} を使ってパッケージディレクトリへ取得できます:&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/build/linux/&lt;br /&gt;
 $ git pull&lt;br /&gt;
&lt;br /&gt;
{{ic|~/build/linux/linux/*}} 内のファイルを {{ic|~/build/linux/}} へ[[Vim#ファイルのマージ|マージする]]必要があります。マージは手動で行うことができますし、[[アプリケーション一覧#Comparison, diff, merge|特定のユーティリティ]]を使うこともできます。[[#prepare() の変更]] を見て、PKGBUILD::prepare() のシェルコマンドを (全てではないにしろ) ほぼ全て手動で実行してください。&lt;br /&gt;
&lt;br /&gt;
この時点で、 {{ic|makepkg--verifysource}} は成功するはずです。[[#コンパイル]] の時には、{{ic|makepkg}} {{ic|--noextract}} オプションも追加してください。これによりソースが makepkg --nobuild によって抽出されたかのようにパッケージをビルドできるはずです。そして [[#インストール]] に戻ります。&lt;br /&gt;
&lt;br /&gt;
=== クリーンアップ ===&lt;br /&gt;
&lt;br /&gt;
マージした後、{{ic|~/build/linux/linux/}} を削除したい場合があるでしょう。{{ic|~/build/linux/src/archlinux}} は、より新しい更新がこの方法で行われた場合、{{ic|5.2.7-arch1}} の形でブランチを蓄積します。 これらは以下で削除することができます:&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/build/linux/src/archlinux&lt;br /&gt;
 $ git branch --delete --force --verbose 5.2.7-arch1&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* https://docs.kernel.org/kbuild/kconfig.html とその親ディレクトリ&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Kernel/Arch build system|2023-06-04|780280}}&lt;/div&gt;</summary>
		<author><name>S3-odara</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=SELinux&amp;diff=34027</id>
		<title>SELinux</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=SELinux&amp;diff=34027"/>
		<updated>2023-09-18T03:06:04Z</updated>

		<summary type="html">&lt;p&gt;S3-odara: 記事内へのリンクを修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:アクセス制御]]&lt;br /&gt;
[[Category:カーネル]]&lt;br /&gt;
[[Category:Red Hat]]&lt;br /&gt;
[[en:SELinux]]&lt;br /&gt;
[[ru:SELinux]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related|AppArmor}}&lt;br /&gt;
{{Related|TOMOYO Linux}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
Security-Enhanced Linux (SELinux) は Linux カーネルの Linux Security Module (LSM) を使って、アメリカ国防総省式の[[強制アクセス制御]]などの様々なセキュリティポリシーを提供する Linux の機能です。Linux ディストリビューションではなく、むしろ Linux や BSD などの Unix ライクなオペレーティングシステムに使うことができる改造セットと言えます。&lt;br /&gt;
&lt;br /&gt;
Linux ディストリビューションで SELinux を動かすには3つのことが必要です: SELinux が有効になったカーネル、SELinux のユーザースペースツールとライブラリ、そして SELinux のポリシー (大半はリファレンスポリシーがベース) です。また、SELinux 機能を有効にするパッチをあててコンパイルする必要がある Linux プログラムも存在します。&lt;br /&gt;
&lt;br /&gt;
==Arch Linux における現在の状態==&lt;br /&gt;
&lt;br /&gt;
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/]を参照)。&lt;br /&gt;
非公式サポートの現状は以下の通りです。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 名前 !! 状態 !! 入手先&lt;br /&gt;
|-&lt;br /&gt;
| 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] から公式リポジトリで利用できます。&lt;br /&gt;
|-&lt;br /&gt;
| SELinux のユーザースペースツールとライブラリ || AUR で実装: https://aur.archlinux.org/packages/?O=0&amp;amp;K=selinux || https://github.com/archlinuxhardened/selinux に成果があります。&lt;br /&gt;
|-&lt;br /&gt;
| SELinux のポリシー || 作業中です。[https://github.com/TresysTechnology/refpolicy Reference Policy] を上流として使用。 || 上流: https://github.com/TresysTechnology/refpolicy (2017年8月5日のリリースから systemd と /usr/bin ディレクトリのサポートがポリシーに統合されました)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
公式の core パッケージと AUR にあるパッケージの変更点:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 名前 !! 状態とコメント&lt;br /&gt;
|-&lt;br /&gt;
| linux, linux-lts, linux-zen, linux-hardened || [[#SELinuxのLSMを有効化|lsm=のカーネルパラメーター]]が必要&lt;br /&gt;
|-&lt;br /&gt;
| coreutils || {{ic|--with-selinux}} フラグを使って libselinux とリンクしてリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| cronie || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| dbus || {{ic|--enable-libaudit}} と {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| findutils || libselinux をインストールしてリビルドを行なって SELinux-specific オプションを有効にします。&lt;br /&gt;
|-&lt;br /&gt;
| iproute2 || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| logrotate || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| openssh || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| pam || Linux-PAM のために {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。pam_unix2 のパッチが必要で、最近のバージョンの libselinux で実装されている関数を削除します。&lt;br /&gt;
|-&lt;br /&gt;
| pambase || 設定を変更して {{ic|/etc/pam.d/system-login}} に pam_selinux.so を追加します。&lt;br /&gt;
|-&lt;br /&gt;
| psmisc || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| shadow || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| sudo || {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| systemd || {{ic|--enable-audit}} と {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| util-linux || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
他の SELinux 関連のパッケージはおそらく変更を加えずに安全に使うことができます。&lt;br /&gt;
&lt;br /&gt;
==強制アクセス制御==&lt;br /&gt;
&lt;br /&gt;
{{Note|このセクションはビギナーのために書かれています。SELinux が何でどういう仕組みで動作するのか知っている場合は、インストールの項にスキップしてください。}}&lt;br /&gt;
&lt;br /&gt;
SELinux を有効にする前に、SELinux が何をするのか理解したほうが良いでしょう。簡単に言うと、SELinux は Linux で&#039;&#039;強制アクセス制御 (Mandatory Access Control, MAC)&#039;&#039; を実施します。SELinux と対比するように、伝統的なユーザー/グループ/rwx のパーミッションは一種の&#039;&#039;任意アクセス制御 (Discretionary Access Control, DAC)&#039;&#039;です。MAC は DAC と異なり、セキュリティポリシーとその実行が完全に区別されています。&lt;br /&gt;
&lt;br /&gt;
例として &#039;&#039;sudo&#039;&#039; コマンドの使用が挙げられます。DAC が使用されている場合、sudo は root への一時的な権限昇格を許可し、プロセスはシステム全体に制限なくアクセスできるようになります。しかしながら、MAC を使用した場合、プロセスがアクセスできる特定のファイルセットをセキュリティ管理者が指定しておけば、どんな権限昇格を用いたとしても、セキュリティポリシーが変わらないかぎり、プロセスがアクセスできるファイルは制限されます。そのため、SELinux が動作しているマシンで &#039;&#039;sudo&#039;&#039; を使ってポリシーが許可しないファイルにアクセスしようとしても、アクセスは不可能です。&lt;br /&gt;
&lt;br /&gt;
他の例としては、ファイルに与えられる伝統的な (-rwxr-xr-x) タイプのパーミッションがあります。DAC の下では、パーミッションはユーザーによって変更できます。しかしながら、MAC の下では、セキュリティ管理者が特定のファイルのパーミッションを凍結することが可能です。ファイルに関連するポリシーが変更されないかぎり、ファイルのパーミッションをユーザーが変更することは不可能になります。&lt;br /&gt;
&lt;br /&gt;
このことが、ウェブサーバーなど、危険にさらされる可能性のあるプロセスで特に有用なのは想像に難くないでしょう。DAC が使われている場合、権限昇格ができるプログラムを奪取されて大損害を被る危険が十分あるのです。&lt;br /&gt;
&lt;br /&gt;
もっと詳しい情報は、Wikipedia の [[Wikipedia:ja:強制アクセス制御|MAC]] のページを見て下さい。&lt;br /&gt;
&lt;br /&gt;
==SELinux のインストール==&lt;br /&gt;
&lt;br /&gt;
===パッケージの説明===&lt;br /&gt;
&lt;br /&gt;
SELinux 関連のパッケージは全て、AUR の &#039;&#039;selinux&#039;&#039; グループに含まれています。これらのいずれかを自分でインストールしようとする前に[[#インストール]]を読んで完全なインストールのために推奨されるオプションを確認してください。&lt;br /&gt;
&lt;br /&gt;
====SELinux 対応のシステムユーティリティ====&lt;br /&gt;
&lt;br /&gt;
;{{AUR|coreutils-selinux}}&lt;br /&gt;
:SELinux のサポートを有効にしてコンパイルされた修正版 coreutils パッケージ。{{pkg|coreutils}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|cronie-selinux}}&lt;br /&gt;
:SELinux が有効になっている Vixie cron の Fedora フォーク。{{pkg|cronie}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|dbus-selinux}}&lt;br /&gt;
:SELinux 対応版の [[D-Bus]]。{{pkg|dbus}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|findutils-selinux}}&lt;br /&gt;
:指定したセキュリティコンテキストを使ってファイルの検索をできるようにするため SELinux のサポートを有効にしてコンパイルされたパッチ済みの findutils パッケージ。{{pkg|findutils}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|iproute2-selinux}}&lt;br /&gt;
:SELinux のサポートを有効にしてコンパイルされた iproute2 パッケージ。{{ic|ss}} の {{ic|-Z}} オプションを追加するなどの修正があります。{{pkg|iproute2}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|logrotate-selinux}}&lt;br /&gt;
:SELinux のサポートを有効にしてコンパイルされた Logrotate パッケージ。{{pkg|logrotate}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|openssh-selinux}}&lt;br /&gt;
:SELinux のサポートを有効にしてコンパイルされ、ユーザーセッションのセキュリティコンテキストを設定する [[OpenSSH]] パッケージ。{{pkg|openssh}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|pam-selinux}} と {{AUR|pambase-selinux}}&lt;br /&gt;
:pam_selinux.so が入った PAM パッケージとそのベースパッケージ。それぞれ {{pkg|pam}} と {{pkg|pambase}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|psmisc-selinux}}&lt;br /&gt;
:SELinux サポートを有効にしてコンパイルされた Psmisc パッケージ。例えば、{{ic|killall}} に {{ic|-Z}} オプションを追加します。{{pkg|psmisc}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|shadow-selinux}}&lt;br /&gt;
:SELinux サポートを有効にしてコンパイルされた Shadow パッケージ。ログイン後のユーザーに適切なセキュリティコンテキストを設定するように修正された {{ic|/etc/pam.d/login}} ファイルが含まれています。{{pkg|shadow}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|sudo-selinux}}&lt;br /&gt;
:適切にセキュリティコンテキストを設定する SELinux サポートを有効にしてコンパイルされた修正版 [[sudo]] パッケージ。{{pkg|sudo}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|systemd-selinux}}&lt;br /&gt;
:SELinux 対応版の [[Systemd]]。{{pkg|systemd}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|util-linux-selinux}}&lt;br /&gt;
:SELinux のサポートを有効にしてコンパイルされた修正版 util-linux パッケージ。{{pkg|util-linux}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
====SELinux のユーザースペースユーティリティ====&lt;br /&gt;
;{{AUR|checkpolicy}}&lt;br /&gt;
:SELinux ポリシーを作成するためのツール。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|mcstrans}}&lt;br /&gt;
:libselinux によって MCS ラベルを変換するのに使われるデーモン。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|libselinux}}&lt;br /&gt;
:セキュリティが求められるアプリケーションのためのライブラリ。&#039;&#039;semanage&#039;&#039; と &#039;&#039;setools&#039;&#039; に必要な Python バインディングが含まれています。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|libsemanage}}&lt;br /&gt;
:ポリシー管理のためのライブラリ。&#039;&#039;semanage&#039;&#039; と &#039;&#039;setools&#039;&#039; に必要な Python バインディングが含まれています。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|libsepol}}&lt;br /&gt;
:バイナリポリシーの操作のためのライブラリ。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|policycoreutils}}&lt;br /&gt;
:newrole や setfiles などの SELinux のコアユーティリティ。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|restorecond}}&lt;br /&gt;
:ファイルのラベルを管理するデーモン。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|secilc}}&lt;br /&gt;
:CIL (共通中間言語) で書かれた SELinux ポリシーのコンパイラ。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-dbus-config}}&lt;br /&gt;
:SELinux の設定を管理できる DBus サービス。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-gui}}&lt;br /&gt;
:SELinux の GUI ツール (system-config-selinux)。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-python}} と {{AUR|selinux-python2}}&lt;br /&gt;
:SELinux の python ツールとライブラリ (semanage, sepolgen, sepolicy など)。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-sandbox}}&lt;br /&gt;
:SELinux のサンドボックスツール。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|semodule-utils}}&lt;br /&gt;
:ポリシーをビルドするときに SELinux モジュールを処理するツール。&lt;br /&gt;
&lt;br /&gt;
====SELinux のポリシーパッケージ====&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-refpolicy-src}}&lt;br /&gt;
:リファレンスポリシーのソース。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-refpolicy-git}}&lt;br /&gt;
:Arch Linux 用の設定でビルドされるリファレンスポリシーの git マスター (https://github.com/TresysTechnology/refpolicy)。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-refpolicy-arch}}&lt;br /&gt;
:コンパイル済みモジュールのリファレンスポリシー。ヘッダーやドキュメントは付いていますがソースは付いていません。Arch Linux の Refpolicy パッチが含まれており、パスのラベリングと systemd サポートに関連する問題を修正します。パッチは Reference Policy メンテナにも送られており、{{AUR|selinux-refpolicy-arch}} に含まれることで Refpolicy リリースのアップデートが行われます。&lt;br /&gt;
&lt;br /&gt;
====その他の SELinux のツール====&lt;br /&gt;
&lt;br /&gt;
;{{AUR|setools}}&lt;br /&gt;
:SELinux を管理するための CLI と GUI ツール。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-alpm-hook}}&lt;br /&gt;
:パッケージのインストール・アップデート時に SELinux ポリシーにあわせてファイルをラベリングする pacman フック。&lt;br /&gt;
&lt;br /&gt;
=== インストール ===&lt;br /&gt;
&lt;br /&gt;
必要な SELinux パッケージをインストールする方法は2つあります。&lt;br /&gt;
&lt;br /&gt;
==== GitHubのバイナリを使用 ====&lt;br /&gt;
&lt;br /&gt;
全てのパッケージは非公式ユーザーリポジトリ(https://wiki.archlinux.org/title/Unofficial_user_repositories#selinux)で入手可能です。&#039;&#039;base&#039;&#039;パッケージはシステムインストールの{{ic|arch-bootstrap}}段階で&#039;&#039;base-selinux&#039;&#039;に置き換え可能です。&lt;br /&gt;
&lt;br /&gt;
{{Warning|現状、このリポジトリでは署名付きパッケージを提供していないため、ダウンロードしたバイナリはpacmanによって検証されません。これにはセキュリティ上のリスクが伴います。十分注意してください。}}&lt;br /&gt;
&lt;br /&gt;
==== GitHubのビルドスクリプトを使用 ====&lt;br /&gt;
&lt;br /&gt;
このリポジトリには {{ic|build_and_install_all.sh}} という名前のスクリプトが含まれており、全てのパッケージを正しい順番でビルド・インストール (あるいはアップデート) します。以下はユーザーシェルでスクリプトを使って全てのパッケージをインストールする例です (GPG 鍵をダウンロードしてパッケージのソース tarball を検証します):&lt;br /&gt;
&lt;br /&gt;
 $ git clone https://github.com/archlinuxhardened/selinux&lt;br /&gt;
 $ cd selinux&lt;br /&gt;
 $ ./recv_gpg_keys.sh&lt;br /&gt;
 $ ./build_and_install_all.sh&lt;br /&gt;
&lt;br /&gt;
もちろん、スクリプトを実行する前に {{ic|build_and_install_all.sh}} の中身を変更することもできます。例えば既に SELinux のサポートが有効になっているカーネルを使っている場合などに変更を加えます。&lt;br /&gt;
&lt;br /&gt;
==== AUR を使用 ====&lt;br /&gt;
&lt;br /&gt;
* まず、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}}。&lt;br /&gt;
* 次に {{AUR|pambase-selinux}} と {{AUR|pam-selinux}} をインストールして、インストール完了後にユーザーのログインができることを確認します。{{pkg|pambase}} が {{AUR|pambase-selinux}} で置き換えられるときに、{{ic|/etc/pam.d/}} のファイルが削除されて、作成されなおすためです。&lt;br /&gt;
* その後、コアパッケージを再コンパイルするために以下のパッケージをインストールします。: {{AUR|coreutils-selinux}}, {{AUR|findutils-selinux}}, {{AUR|iproute2-selinux}}, {{AUR|logrotate-selinux}}, {{AUR|openssh-selinux}}, {{AUR|psmisc-selinux}}, {{AUR|shadow-selinux}}, {{AUR|cronie-selinux}}。&lt;br /&gt;
* そして、{{ic|/etc/sudoers}} ファイルをバックアップします。{{AUR|sudo-selinux}} をインストールしてから {{ic|/etc/sudoers}} を元に戻してください ({{pkg|sudo}} を置き換えるときにファイルが上書きされます)。&lt;br /&gt;
* 次は util-linux と systemd です。修正できない循環依存が存在するため ({{bug|39767}})、{{AUR|systemd-selinux}} のソースパッケージをビルドしてから、{{AUR|systemd-libs-selinux}}をインストールして、{{AUR|util-linux-selinux}}を{{AUR|util-linux-libs-selinux}}と一緒にビルドしてインストールし、そして {{AUR|systemd-selinux}} を再ビルドして再インストールします。&lt;br /&gt;
* それから、{{AUR|dbus-selinux}} をインストールしてください。&lt;br /&gt;
* その後、{{AUR|selinux-alpm-hook}} をインストールして pacman でパッケージをインストールするたびに restorecon が実行されるようにします。&lt;br /&gt;
&lt;br /&gt;
上記の手順が全て終わったら、SELinux カーネル ({{Pkg|linux}}などとポリシー({{AUR|selinux-refpolicy-arch}} や {{AUR|selinux-refpolicy-git}} など) をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== SELinuxのLSMを有効化 ===&lt;br /&gt;
&lt;br /&gt;
起動時にSELinuxをデフォルトのセキュリティモデルとして有効にするには、次の[[カーネルパラメータ]]が必要です。:&lt;br /&gt;
&lt;br /&gt;
 lsm=landlock,lockdown,yama,integrity,selinux,bpf&lt;br /&gt;
&lt;br /&gt;
{{Note|The {{ic|1=lsm=}}カーネルパラメーターはLinuxセキュリティモジュールの初期化順序を設定します。カーネルに設定された{{ic|1=lsm=}}の値は{{ic|1=zgrep CONFIG_LSM= /proc/config.gz}}で見つけることができ、現在の値は{{ic|cat /sys/kernel/security/lsm}}で見ることができます。&lt;br /&gt;
&lt;br /&gt;
=== カスタムカーネル ===&lt;br /&gt;
&lt;br /&gt;
[[カーネル/Arch_build_system#.E3.82.B3.E3.83.B3.E3.83.91.E3.82.A4.E3.83.AB|カーネルをコンパイル]]するときには少なくとも以下のオプションを設定する必要があります。:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_SECURITY_SELINUX=y&lt;br /&gt;
 CONFIG_AUDIT=y&lt;br /&gt;
&lt;br /&gt;
SELinuxをデフォルトで有効にし、カーネルパラメータの設定を省略するには、加えて{{ic|CONFIG_LSM}}を有効にし、リストの最初の&amp;quot;major&amp;quot;モジュールとして{{ic|selinux}}を設定します。:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_LSM=&amp;quot;landlock,lockdown,yama,integrity,selinux,bpf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===PAM の確認===&lt;br /&gt;
&lt;br /&gt;
ログイン後に適切なセキュリティコンテキストを得るために [[PAM]] を正しく設定する必要があります。以下の行が {{ic|/etc/pam.d/system-login}} に存在するか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|# pam_selinux.so close should be the first session rule&lt;br /&gt;
session         required        pam_selinux.so close}}&lt;br /&gt;
&lt;br /&gt;
{{bc|# pam_selinux.so open should only be followed by sessions to be executed in the user context&lt;br /&gt;
session         required        pam_selinux.so open}}&lt;br /&gt;
&lt;br /&gt;
===ポリシーのインストール===&lt;br /&gt;
&lt;br /&gt;
{{Warning|[https://github.com/SELinuxProject/refpolicy/wiki SELinuxProject] によるリファレンスポリシーはあまり Arch Linux に適しているとは言えません。、ポリシーを改善するパッチを投稿している人の多くが他のディストリビューション (Debian, Gentoo, RHEL など) を使っているため、Arch Linux パッケージとの互換性は完璧ではありません (例えばプログラムの新しい機能をポリシーがサポートしていない場合があります)。}}&lt;br /&gt;
&lt;br /&gt;
ポリシーは SELinux の基幹です。ポリシーによって SELinux の挙動は左右されます。AURで利用可能な唯一のポリシーはリファレンスポリシーだけです。リファレンスポリシーをインストールするには、{{AUR|selinux-refpolicy-src}} パッケージから取得するか https://github.com/SELinuxProject/refpolicy/wiki/DownloadRelease#current-release から最新のリリースをダウンロードすることができます。AUR のパッケージを使う場合、{{ic|/etc/selinux/refpolicy/src/policy}} まで移動して以下のコマンドを実行してリファレンスポリシーをインストールしてください:&lt;br /&gt;
&lt;br /&gt;
 # make bare&lt;br /&gt;
 # make conf&lt;br /&gt;
 # make install&lt;br /&gt;
&lt;br /&gt;
SELinux ポリシーの書き方を知っているならば上記のコマンドを実行する前に存分にポリシーを調整することができます。コマンドはしばらく時間がかかりジョブを実行してシステムの1つのコアに負担をかけます、心配は要りません。のんびりと構えてコマンドを実行させておいて下さい。&lt;br /&gt;
&lt;br /&gt;
リファレンスポリシーをロードするには次を実行:&lt;br /&gt;
&lt;br /&gt;
 # make load&lt;br /&gt;
&lt;br /&gt;
そして、以下の内容で {{ic|/etc/selinux/config}} ファイルを作成してください (上記のデフォルト設定を使用する場合。ポリシーの名前を変更したときは、ファイルを修正する必要があります):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/selinux/config|2=&lt;br /&gt;
# This file controls the state of SELinux on the system.&lt;br /&gt;
# SELINUX= can take one of these three values:&lt;br /&gt;
#       enforcing - SELinux security policy is enforced.&lt;br /&gt;
#                   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&lt;br /&gt;
#       permissive - SELinux prints warnings instead of enforcing.&lt;br /&gt;
#                    Use this to customise your SELinux policies and booleans prior to deployment. Recommended during policy development.&lt;br /&gt;
#       disabled - No SELinux policy is loaded.&lt;br /&gt;
#                  This is not a recommended setting, for it may cause problems with file labelling&lt;br /&gt;
SELINUX=permissive&lt;br /&gt;
# SELINUXTYPE= takes the name of SELinux policy to&lt;br /&gt;
# be used. Current options are:&lt;br /&gt;
#       refpolicy (vanilla reference policy)&lt;br /&gt;
#       &amp;lt;custompolicy&amp;gt; - Substitute &amp;lt;custompolicy&amp;gt; with the name of any custom policy you choose to load&lt;br /&gt;
SELINUXTYPE=refpolicy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここで、再起動が必要です。再起動したら、次を実行してファイルシステムにラベルを付けて下さい:&lt;br /&gt;
&lt;br /&gt;
 # restorecon -r /&lt;br /&gt;
&lt;br /&gt;
その後、以下の内容で {{ic|requiredmod.te}} ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|requiredmod.te|2=&lt;br /&gt;
module requiredmod 1.0;&lt;br /&gt;
&lt;br /&gt;
require {&lt;br /&gt;
        type devpts_t;&lt;br /&gt;
        type kernel_t;&lt;br /&gt;
        type device_t;&lt;br /&gt;
        type var_run_t;&lt;br /&gt;
        type udev_t;&lt;br /&gt;
        type hugetlbfs_t;&lt;br /&gt;
        type udev_tbl_t;&lt;br /&gt;
        type tmpfs_t;&lt;br /&gt;
        class sock_file write;&lt;br /&gt;
        class unix_stream_socket { read write ioctl };&lt;br /&gt;
        class capability2 block_suspend;&lt;br /&gt;
        class dir { write add_name };&lt;br /&gt;
        class filesystem associate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#============= devpts_t ==============&lt;br /&gt;
allow devpts_t device_t:filesystem associate;&lt;br /&gt;
&lt;br /&gt;
#============= hugetlbfs_t ==============&lt;br /&gt;
allow hugetlbfs_t device_t:filesystem associate;&lt;br /&gt;
&lt;br /&gt;
#============= kernel_t ==============&lt;br /&gt;
allow kernel_t self:capability2 block_suspend;&lt;br /&gt;
&lt;br /&gt;
#============= tmpfs_t ==============&lt;br /&gt;
allow tmpfs_t device_t:filesystem associate;&lt;br /&gt;
&lt;br /&gt;
#============= udev_t ==============&lt;br /&gt;
allow udev_t kernel_t:unix_stream_socket { read write ioctl };&lt;br /&gt;
allow udev_t udev_tbl_t:dir { write add_name };&lt;br /&gt;
allow udev_t var_run_t:sock_file write;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そして以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;# checkmodule -m -o requiredmod.mod requiredmod.te&lt;br /&gt;
# semodule_package -o requiredmod.pp -m requiredmod.mod&lt;br /&gt;
# semodule -i requiredmod.pp&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上記の設定はリファレンスポリシーで発生する厄介なメッセージを {{ic|/var/log/audit/audit.log}} から削除するために必要です。汚いハックであり、正しくないラベリングの影響を隠すためにリファレンスポリシーにパッチをあてることを明確にするべきです。&lt;br /&gt;
&lt;br /&gt;
===Vagrant 仮想マシンでテスト===&lt;br /&gt;
&lt;br /&gt;
[[Vagrant]] を使うことで SELinux が設定された Arch Linux の仮想マシンをプロビジョニングできます。現在の環境に影響を与えないで Arch Linux の SELinux を簡単にテストすることが可能です。以下のコマンドを使用してテストしてください:&lt;br /&gt;
&lt;br /&gt;
 $ git clone &amp;lt;nowiki&amp;gt;https://github.com/archlinuxhardened/selinux&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $ cd selinux/_vagrant&lt;br /&gt;
 $ vagrant up&lt;br /&gt;
 $ vagrant ssh&lt;br /&gt;
&lt;br /&gt;
==インストール後の作業==&lt;br /&gt;
&lt;br /&gt;
SELinux が動作しているかは {{ic|sestatus}} で確認できます。以下のように表示されるはずです:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /sys/fs/selinux&lt;br /&gt;
SELinux root directory:         /etc/selinux&lt;br /&gt;
Loaded policy name:             refpolicy&lt;br /&gt;
Current mode:                   permissive&lt;br /&gt;
Mode from config file:          permissive&lt;br /&gt;
Policy MLS status:              disabled&lt;br /&gt;
Policy deny_unknown status:     allowed&lt;br /&gt;
Max kernel policy version:      28&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
コンテキストを適切に維持するために、{{ic|restorecond.service}}を有効にできます:&lt;br /&gt;
&lt;br /&gt;
 # systemctl enable restorecond&lt;br /&gt;
&lt;br /&gt;
再起動しないで enforcing モードに切り替えたい場合、次のコマンドを使います:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/fs/selinux/enforce&lt;br /&gt;
&lt;br /&gt;
===スワップファイル===&lt;br /&gt;
&lt;br /&gt;
スワップパーティションの代わりにスワップファイルを使う場合、適切なセキュリティコンテキストを設定するために次のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # semanage fcontext -a -t swapfile_t &amp;quot;&#039;&#039;/path/to/swapfile&#039;&#039;&amp;quot;&lt;br /&gt;
 # restorecon &#039;&#039;/path/to/swapfile&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==SELinux の使い方==&lt;br /&gt;
&lt;br /&gt;
SELinux は伝統的な Unix のアクセス制御とは異なる方法でセキュリティを定義します。SELinux を理解するにはサンプルを見るのが一番です。例えば、apache のホームページの SELinux セキュリティコンテキストは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ls -lZ /var/www/html/index.html&lt;br /&gt;
 -rw-r--r--  username username system_u:object_r:httpd_sys_content_t /var/www/html/index.html&lt;br /&gt;
&lt;br /&gt;
最初の3つと最後のカラムは (Arch) Linux ユーザーなら誰でも見覚えがあるはずです。新しいのは4番目のカラムであり以下のフォーマットになっています:&lt;br /&gt;
&lt;br /&gt;
 user:role:type[:level]&lt;br /&gt;
&lt;br /&gt;
それぞれを説明すると:&lt;br /&gt;
#&#039;&#039;&#039;User:&#039;&#039;&#039; SELinux のユーザー識別子。SELinux ユーザーが使用することができる複数のロールに関連付けることができます。&lt;br /&gt;
#&#039;&#039;&#039;Role:&#039;&#039;&#039; SELinux のロール。SELinux ユーザーがアクセスすることができる複数のタイプに関連付けることができます。&lt;br /&gt;
#&#039;&#039;&#039;Type:&#039;&#039;&#039; プロセスにタイプが関連付けられると、SELinux ユーザー (サブジェクト) がアクセスできるプロセスが (ドメイン) が決定します。タイプがオブジェクトと関連付けられた場合、SELinux がオブジェクトにアクセスする際のパーミッションが決まります。&lt;br /&gt;
#&#039;&#039;&#039;Level:&#039;&#039;&#039; ポリシーが MCS や MLS をサポートしている場合にのみ使用する任意のフィールドです。範囲とも呼びます。&lt;br /&gt;
&lt;br /&gt;
これが重要になるのは、自分でポリシーを作成して、SELinux の基本的な構成要素にしたいという場合です。ほとんどの場合リファレンスポリシーで十分間に合うので、理解する必要はありません。ただし、あなたがパワーユーザーであり何か特別な必要性があるのであれば、自ら SELinux のポリシーを作成する方法を学ぶ絶好の機会でしょう。&lt;br /&gt;
&lt;br /&gt;
SELinux の仕組みを理解したい人には [http://www.fosteringlinux.com/tag/selinux/ こちら] のシリーズを読むのをおすすめします。&lt;br /&gt;
&lt;br /&gt;
==トラブルシューティング==&lt;br /&gt;
&lt;br /&gt;
SELinux のエラーは systemd の [[journal]] で確認できます。例えば {{ic|system_u:system_r:policykit_t:s0}} ラベルに関する SELinux のメッセージを表示するには、次を実行:&lt;br /&gt;
&lt;br /&gt;
 # journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0&lt;br /&gt;
&lt;br /&gt;
===便利なツール===&lt;br /&gt;
&lt;br /&gt;
SELinux を補助するツール/コマンドがいくつか存在します。&lt;br /&gt;
&lt;br /&gt;
;restorecon: ポリシールールに基づいてファイル/ディレクトリのコンテキストを付け直す ({{ic|-R}} を付けると再帰的に実行)。&lt;br /&gt;
;chcon: 指定したファイルのコンテキストを変更。&lt;br /&gt;
&lt;br /&gt;
===問題の報告===&lt;br /&gt;
&lt;br /&gt;
問題の報告は GitHub でしてください: https://github.com/archlinuxhardened/selinux/issues&lt;br /&gt;
&lt;br /&gt;
==参照==&lt;br /&gt;
*[[wikipedia:ja:Security-Enhanced Linux|Security Enhanced Linux]]&lt;br /&gt;
*[https://fedoraproject.org/wiki/SELinux Fedora プロジェクトの SELinux Wiki]&lt;br /&gt;
*[https://www.nsa.gov/what-we-do/research/selinux/ NSA の SELinux 公式ホームページ]&lt;br /&gt;
* [http://userspace.selinuxproject.org/ SELinux のユーザー空間ホームページ]&lt;br /&gt;
**[http://oss.tresys.com/projects/refpolicy リファレンスポリシーのホームページ]&lt;br /&gt;
**[http://oss.tresys.com/projects/setools SETools ホームページ]&lt;br /&gt;
*[https://web.archive.org/web/20140816115906/http://jamesthebard.net/archlinux-selinux-and-you-a-trip-down-the-rabbit-hole/ ArchLinux, SELinux and You (アーカイブ)]&lt;/div&gt;</summary>
		<author><name>S3-odara</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=SELinux&amp;diff=34026</id>
		<title>SELinux</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=SELinux&amp;diff=34026"/>
		<updated>2023-09-18T03:01:09Z</updated>

		<summary type="html">&lt;p&gt;S3-odara: 2023-05-22版に翻訳を同期&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:アクセス制御]]&lt;br /&gt;
[[Category:カーネル]]&lt;br /&gt;
[[Category:Red Hat]]&lt;br /&gt;
[[en:SELinux]]&lt;br /&gt;
[[ru:SELinux]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related|AppArmor}}&lt;br /&gt;
{{Related|TOMOYO Linux}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
Security-Enhanced Linux (SELinux) は Linux カーネルの Linux Security Module (LSM) を使って、アメリカ国防総省式の[[強制アクセス制御]]などの様々なセキュリティポリシーを提供する Linux の機能です。Linux ディストリビューションではなく、むしろ Linux や BSD などの Unix ライクなオペレーティングシステムに使うことができる改造セットと言えます。&lt;br /&gt;
&lt;br /&gt;
Linux ディストリビューションで SELinux を動かすには3つのことが必要です: SELinux が有効になったカーネル、SELinux のユーザースペースツールとライブラリ、そして SELinux のポリシー (大半はリファレンスポリシーがベース) です。また、SELinux 機能を有効にするパッチをあててコンパイルする必要がある Linux プログラムも存在します。&lt;br /&gt;
&lt;br /&gt;
==Arch Linux における現在の状態==&lt;br /&gt;
&lt;br /&gt;
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/]を参照)。&lt;br /&gt;
非公式サポートの現状は以下の通りです。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 名前 !! 状態 !! 入手先&lt;br /&gt;
|-&lt;br /&gt;
| 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] から公式リポジトリで利用できます。&lt;br /&gt;
|-&lt;br /&gt;
| SELinux のユーザースペースツールとライブラリ || AUR で実装: https://aur.archlinux.org/packages/?O=0&amp;amp;K=selinux || https://github.com/archlinuxhardened/selinux に成果があります。&lt;br /&gt;
|-&lt;br /&gt;
| SELinux のポリシー || 作業中です。[https://github.com/TresysTechnology/refpolicy Reference Policy] を上流として使用。 || 上流: https://github.com/TresysTechnology/refpolicy (2017年8月5日のリリースから systemd と /usr/bin ディレクトリのサポートがポリシーに統合されました)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
公式の core パッケージと AUR にあるパッケージの変更点:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 名前 !! 状態とコメント&lt;br /&gt;
|-&lt;br /&gt;
| linux, linux-lts, linux-zen, linux-hardened || [[#SELinuxのLSMを有効化|lsm=のカーネルパラメーター]が必要]&lt;br /&gt;
|-&lt;br /&gt;
| coreutils || {{ic|--with-selinux}} フラグを使って libselinux とリンクしてリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| cronie || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| dbus || {{ic|--enable-libaudit}} と {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| findutils || libselinux をインストールしてリビルドを行なって SELinux-specific オプションを有効にします。&lt;br /&gt;
|-&lt;br /&gt;
| iproute2 || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| logrotate || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| openssh || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| pam || Linux-PAM のために {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。pam_unix2 のパッチが必要で、最近のバージョンの libselinux で実装されている関数を削除します。&lt;br /&gt;
|-&lt;br /&gt;
| pambase || 設定を変更して {{ic|/etc/pam.d/system-login}} に pam_selinux.so を追加します。&lt;br /&gt;
|-&lt;br /&gt;
| psmisc || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| shadow || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| sudo || {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| systemd || {{ic|--enable-audit}} と {{ic|--enable-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
| util-linux || {{ic|--with-selinux}} フラグを使ってリビルドする必要があります。&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
他の SELinux 関連のパッケージはおそらく変更を加えずに安全に使うことができます。&lt;br /&gt;
&lt;br /&gt;
==強制アクセス制御==&lt;br /&gt;
&lt;br /&gt;
{{Note|このセクションはビギナーのために書かれています。SELinux が何でどういう仕組みで動作するのか知っている場合は、インストールの項にスキップしてください。}}&lt;br /&gt;
&lt;br /&gt;
SELinux を有効にする前に、SELinux が何をするのか理解したほうが良いでしょう。簡単に言うと、SELinux は Linux で&#039;&#039;強制アクセス制御 (Mandatory Access Control, MAC)&#039;&#039; を実施します。SELinux と対比するように、伝統的なユーザー/グループ/rwx のパーミッションは一種の&#039;&#039;任意アクセス制御 (Discretionary Access Control, DAC)&#039;&#039;です。MAC は DAC と異なり、セキュリティポリシーとその実行が完全に区別されています。&lt;br /&gt;
&lt;br /&gt;
例として &#039;&#039;sudo&#039;&#039; コマンドの使用が挙げられます。DAC が使用されている場合、sudo は root への一時的な権限昇格を許可し、プロセスはシステム全体に制限なくアクセスできるようになります。しかしながら、MAC を使用した場合、プロセスがアクセスできる特定のファイルセットをセキュリティ管理者が指定しておけば、どんな権限昇格を用いたとしても、セキュリティポリシーが変わらないかぎり、プロセスがアクセスできるファイルは制限されます。そのため、SELinux が動作しているマシンで &#039;&#039;sudo&#039;&#039; を使ってポリシーが許可しないファイルにアクセスしようとしても、アクセスは不可能です。&lt;br /&gt;
&lt;br /&gt;
他の例としては、ファイルに与えられる伝統的な (-rwxr-xr-x) タイプのパーミッションがあります。DAC の下では、パーミッションはユーザーによって変更できます。しかしながら、MAC の下では、セキュリティ管理者が特定のファイルのパーミッションを凍結することが可能です。ファイルに関連するポリシーが変更されないかぎり、ファイルのパーミッションをユーザーが変更することは不可能になります。&lt;br /&gt;
&lt;br /&gt;
このことが、ウェブサーバーなど、危険にさらされる可能性のあるプロセスで特に有用なのは想像に難くないでしょう。DAC が使われている場合、権限昇格ができるプログラムを奪取されて大損害を被る危険が十分あるのです。&lt;br /&gt;
&lt;br /&gt;
もっと詳しい情報は、Wikipedia の [[Wikipedia:ja:強制アクセス制御|MAC]] のページを見て下さい。&lt;br /&gt;
&lt;br /&gt;
==SELinux のインストール==&lt;br /&gt;
&lt;br /&gt;
===パッケージの説明===&lt;br /&gt;
&lt;br /&gt;
SELinux 関連のパッケージは全て、AUR の &#039;&#039;selinux&#039;&#039; グループに含まれています。これらのいずれかを自分でインストールしようとする前に[[#インストール]]を読んで完全なインストールのために推奨されるオプションを確認してください。&lt;br /&gt;
&lt;br /&gt;
====SELinux 対応のシステムユーティリティ====&lt;br /&gt;
&lt;br /&gt;
;{{AUR|coreutils-selinux}}&lt;br /&gt;
:SELinux のサポートを有効にしてコンパイルされた修正版 coreutils パッケージ。{{pkg|coreutils}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|cronie-selinux}}&lt;br /&gt;
:SELinux が有効になっている Vixie cron の Fedora フォーク。{{pkg|cronie}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|dbus-selinux}}&lt;br /&gt;
:SELinux 対応版の [[D-Bus]]。{{pkg|dbus}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|findutils-selinux}}&lt;br /&gt;
:指定したセキュリティコンテキストを使ってファイルの検索をできるようにするため SELinux のサポートを有効にしてコンパイルされたパッチ済みの findutils パッケージ。{{pkg|findutils}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|iproute2-selinux}}&lt;br /&gt;
:SELinux のサポートを有効にしてコンパイルされた iproute2 パッケージ。{{ic|ss}} の {{ic|-Z}} オプションを追加するなどの修正があります。{{pkg|iproute2}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|logrotate-selinux}}&lt;br /&gt;
:SELinux のサポートを有効にしてコンパイルされた Logrotate パッケージ。{{pkg|logrotate}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|openssh-selinux}}&lt;br /&gt;
:SELinux のサポートを有効にしてコンパイルされ、ユーザーセッションのセキュリティコンテキストを設定する [[OpenSSH]] パッケージ。{{pkg|openssh}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|pam-selinux}} と {{AUR|pambase-selinux}}&lt;br /&gt;
:pam_selinux.so が入った PAM パッケージとそのベースパッケージ。それぞれ {{pkg|pam}} と {{pkg|pambase}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|psmisc-selinux}}&lt;br /&gt;
:SELinux サポートを有効にしてコンパイルされた Psmisc パッケージ。例えば、{{ic|killall}} に {{ic|-Z}} オプションを追加します。{{pkg|psmisc}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|shadow-selinux}}&lt;br /&gt;
:SELinux サポートを有効にしてコンパイルされた Shadow パッケージ。ログイン後のユーザーに適切なセキュリティコンテキストを設定するように修正された {{ic|/etc/pam.d/login}} ファイルが含まれています。{{pkg|shadow}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|sudo-selinux}}&lt;br /&gt;
:適切にセキュリティコンテキストを設定する SELinux サポートを有効にしてコンパイルされた修正版 [[sudo]] パッケージ。{{pkg|sudo}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|systemd-selinux}}&lt;br /&gt;
:SELinux 対応版の [[Systemd]]。{{pkg|systemd}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|util-linux-selinux}}&lt;br /&gt;
:SELinux のサポートを有効にしてコンパイルされた修正版 util-linux パッケージ。{{pkg|util-linux}} パッケージを置き換えます。&lt;br /&gt;
&lt;br /&gt;
====SELinux のユーザースペースユーティリティ====&lt;br /&gt;
;{{AUR|checkpolicy}}&lt;br /&gt;
:SELinux ポリシーを作成するためのツール。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|mcstrans}}&lt;br /&gt;
:libselinux によって MCS ラベルを変換するのに使われるデーモン。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|libselinux}}&lt;br /&gt;
:セキュリティが求められるアプリケーションのためのライブラリ。&#039;&#039;semanage&#039;&#039; と &#039;&#039;setools&#039;&#039; に必要な Python バインディングが含まれています。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|libsemanage}}&lt;br /&gt;
:ポリシー管理のためのライブラリ。&#039;&#039;semanage&#039;&#039; と &#039;&#039;setools&#039;&#039; に必要な Python バインディングが含まれています。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|libsepol}}&lt;br /&gt;
:バイナリポリシーの操作のためのライブラリ。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|policycoreutils}}&lt;br /&gt;
:newrole や setfiles などの SELinux のコアユーティリティ。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|restorecond}}&lt;br /&gt;
:ファイルのラベルを管理するデーモン。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|secilc}}&lt;br /&gt;
:CIL (共通中間言語) で書かれた SELinux ポリシーのコンパイラ。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-dbus-config}}&lt;br /&gt;
:SELinux の設定を管理できる DBus サービス。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-gui}}&lt;br /&gt;
:SELinux の GUI ツール (system-config-selinux)。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-python}} と {{AUR|selinux-python2}}&lt;br /&gt;
:SELinux の python ツールとライブラリ (semanage, sepolgen, sepolicy など)。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-sandbox}}&lt;br /&gt;
:SELinux のサンドボックスツール。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|semodule-utils}}&lt;br /&gt;
:ポリシーをビルドするときに SELinux モジュールを処理するツール。&lt;br /&gt;
&lt;br /&gt;
====SELinux のポリシーパッケージ====&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-refpolicy-src}}&lt;br /&gt;
:リファレンスポリシーのソース。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-refpolicy-git}}&lt;br /&gt;
:Arch Linux 用の設定でビルドされるリファレンスポリシーの git マスター (https://github.com/TresysTechnology/refpolicy)。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-refpolicy-arch}}&lt;br /&gt;
:コンパイル済みモジュールのリファレンスポリシー。ヘッダーやドキュメントは付いていますがソースは付いていません。Arch Linux の Refpolicy パッチが含まれており、パスのラベリングと systemd サポートに関連する問題を修正します。パッチは Reference Policy メンテナにも送られており、{{AUR|selinux-refpolicy-arch}} に含まれることで Refpolicy リリースのアップデートが行われます。&lt;br /&gt;
&lt;br /&gt;
====その他の SELinux のツール====&lt;br /&gt;
&lt;br /&gt;
;{{AUR|setools}}&lt;br /&gt;
:SELinux を管理するための CLI と GUI ツール。&lt;br /&gt;
&lt;br /&gt;
;{{AUR|selinux-alpm-hook}}&lt;br /&gt;
:パッケージのインストール・アップデート時に SELinux ポリシーにあわせてファイルをラベリングする pacman フック。&lt;br /&gt;
&lt;br /&gt;
=== インストール ===&lt;br /&gt;
&lt;br /&gt;
必要な SELinux パッケージをインストールする方法は2つあります。&lt;br /&gt;
&lt;br /&gt;
==== GitHubのバイナリを使用 ====&lt;br /&gt;
&lt;br /&gt;
全てのパッケージは非公式ユーザーリポジトリ(https://wiki.archlinux.org/title/Unofficial_user_repositories#selinux)で入手可能です。&#039;&#039;base&#039;&#039;パッケージはシステムインストールの{{ic|arch-bootstrap}}段階で&#039;&#039;base-selinux&#039;&#039;に置き換え可能です。&lt;br /&gt;
&lt;br /&gt;
{{Warning|現状、このリポジトリでは署名付きパッケージを提供していないため、ダウンロードしたバイナリはpacmanによって検証されません。これにはセキュリティ上のリスクが伴います。十分注意してください。}}&lt;br /&gt;
&lt;br /&gt;
==== GitHubのビルドスクリプトを使用 ====&lt;br /&gt;
&lt;br /&gt;
このリポジトリには {{ic|build_and_install_all.sh}} という名前のスクリプトが含まれており、全てのパッケージを正しい順番でビルド・インストール (あるいはアップデート) します。以下はユーザーシェルでスクリプトを使って全てのパッケージをインストールする例です (GPG 鍵をダウンロードしてパッケージのソース tarball を検証します):&lt;br /&gt;
&lt;br /&gt;
 $ git clone https://github.com/archlinuxhardened/selinux&lt;br /&gt;
 $ cd selinux&lt;br /&gt;
 $ ./recv_gpg_keys.sh&lt;br /&gt;
 $ ./build_and_install_all.sh&lt;br /&gt;
&lt;br /&gt;
もちろん、スクリプトを実行する前に {{ic|build_and_install_all.sh}} の中身を変更することもできます。例えば既に SELinux のサポートが有効になっているカーネルを使っている場合などに変更を加えます。&lt;br /&gt;
&lt;br /&gt;
==== AUR を使用 ====&lt;br /&gt;
&lt;br /&gt;
* まず、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}}。&lt;br /&gt;
* 次に {{AUR|pambase-selinux}} と {{AUR|pam-selinux}} をインストールして、インストール完了後にユーザーのログインができることを確認します。{{pkg|pambase}} が {{AUR|pambase-selinux}} で置き換えられるときに、{{ic|/etc/pam.d/}} のファイルが削除されて、作成されなおすためです。&lt;br /&gt;
* その後、コアパッケージを再コンパイルするために以下のパッケージをインストールします。: {{AUR|coreutils-selinux}}, {{AUR|findutils-selinux}}, {{AUR|iproute2-selinux}}, {{AUR|logrotate-selinux}}, {{AUR|openssh-selinux}}, {{AUR|psmisc-selinux}}, {{AUR|shadow-selinux}}, {{AUR|cronie-selinux}}。&lt;br /&gt;
* そして、{{ic|/etc/sudoers}} ファイルをバックアップします。{{AUR|sudo-selinux}} をインストールしてから {{ic|/etc/sudoers}} を元に戻してください ({{pkg|sudo}} を置き換えるときにファイルが上書きされます)。&lt;br /&gt;
* 次は util-linux と systemd です。修正できない循環依存が存在するため ({{bug|39767}})、{{AUR|systemd-selinux}} のソースパッケージをビルドしてから、{{AUR|systemd-libs-selinux}}をインストールして、{{AUR|util-linux-selinux}}を{{AUR|util-linux-libs-selinux}}と一緒にビルドしてインストールし、そして {{AUR|systemd-selinux}} を再ビルドして再インストールします。&lt;br /&gt;
* それから、{{AUR|dbus-selinux}} をインストールしてください。&lt;br /&gt;
* その後、{{AUR|selinux-alpm-hook}} をインストールして pacman でパッケージをインストールするたびに restorecon が実行されるようにします。&lt;br /&gt;
&lt;br /&gt;
上記の手順が全て終わったら、SELinux カーネル ({{Pkg|linux}}などとポリシー({{AUR|selinux-refpolicy-arch}} や {{AUR|selinux-refpolicy-git}} など) をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== SELinuxのLSMを有効化 ===&lt;br /&gt;
&lt;br /&gt;
起動時にSELinuxをデフォルトのセキュリティモデルとして有効にするには、次の[[カーネルパラメータ]]が必要です。:&lt;br /&gt;
&lt;br /&gt;
 lsm=landlock,lockdown,yama,integrity,selinux,bpf&lt;br /&gt;
&lt;br /&gt;
{{Note|The {{ic|1=lsm=}}カーネルパラメーターはLinuxセキュリティモジュールの初期化順序を設定します。カーネルに設定された{{ic|1=lsm=}}の値は{{ic|1=zgrep CONFIG_LSM= /proc/config.gz}}で見つけることができ、現在の値は{{ic|cat /sys/kernel/security/lsm}}で見ることができます。&lt;br /&gt;
&lt;br /&gt;
=== カスタムカーネル ===&lt;br /&gt;
&lt;br /&gt;
[[カーネル/Arch_build_system#.E3.82.B3.E3.83.B3.E3.83.91.E3.82.A4.E3.83.AB|カーネルをコンパイル]]するときには少なくとも以下のオプションを設定する必要があります。:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_SECURITY_SELINUX=y&lt;br /&gt;
 CONFIG_AUDIT=y&lt;br /&gt;
&lt;br /&gt;
SELinuxをデフォルトで有効にし、カーネルパラメータの設定を省略するには、加えて{{ic|CONFIG_LSM}}を有効にし、リストの最初の&amp;quot;major&amp;quot;モジュールとして{{ic|selinux}}を設定します。:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_LSM=&amp;quot;landlock,lockdown,yama,integrity,selinux,bpf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===PAM の確認===&lt;br /&gt;
&lt;br /&gt;
ログイン後に適切なセキュリティコンテキストを得るために [[PAM]] を正しく設定する必要があります。以下の行が {{ic|/etc/pam.d/system-login}} に存在するか確認してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|# pam_selinux.so close should be the first session rule&lt;br /&gt;
session         required        pam_selinux.so close}}&lt;br /&gt;
&lt;br /&gt;
{{bc|# pam_selinux.so open should only be followed by sessions to be executed in the user context&lt;br /&gt;
session         required        pam_selinux.so open}}&lt;br /&gt;
&lt;br /&gt;
===ポリシーのインストール===&lt;br /&gt;
&lt;br /&gt;
{{Warning|[https://github.com/SELinuxProject/refpolicy/wiki SELinuxProject] によるリファレンスポリシーはあまり Arch Linux に適しているとは言えません。、ポリシーを改善するパッチを投稿している人の多くが他のディストリビューション (Debian, Gentoo, RHEL など) を使っているため、Arch Linux パッケージとの互換性は完璧ではありません (例えばプログラムの新しい機能をポリシーがサポートしていない場合があります)。}}&lt;br /&gt;
&lt;br /&gt;
ポリシーは SELinux の基幹です。ポリシーによって SELinux の挙動は左右されます。AURで利用可能な唯一のポリシーはリファレンスポリシーだけです。リファレンスポリシーをインストールするには、{{AUR|selinux-refpolicy-src}} パッケージから取得するか https://github.com/SELinuxProject/refpolicy/wiki/DownloadRelease#current-release から最新のリリースをダウンロードすることができます。AUR のパッケージを使う場合、{{ic|/etc/selinux/refpolicy/src/policy}} まで移動して以下のコマンドを実行してリファレンスポリシーをインストールしてください:&lt;br /&gt;
&lt;br /&gt;
 # make bare&lt;br /&gt;
 # make conf&lt;br /&gt;
 # make install&lt;br /&gt;
&lt;br /&gt;
SELinux ポリシーの書き方を知っているならば上記のコマンドを実行する前に存分にポリシーを調整することができます。コマンドはしばらく時間がかかりジョブを実行してシステムの1つのコアに負担をかけます、心配は要りません。のんびりと構えてコマンドを実行させておいて下さい。&lt;br /&gt;
&lt;br /&gt;
リファレンスポリシーをロードするには次を実行:&lt;br /&gt;
&lt;br /&gt;
 # make load&lt;br /&gt;
&lt;br /&gt;
そして、以下の内容で {{ic|/etc/selinux/config}} ファイルを作成してください (上記のデフォルト設定を使用する場合。ポリシーの名前を変更したときは、ファイルを修正する必要があります):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/selinux/config|2=&lt;br /&gt;
# This file controls the state of SELinux on the system.&lt;br /&gt;
# SELINUX= can take one of these three values:&lt;br /&gt;
#       enforcing - SELinux security policy is enforced.&lt;br /&gt;
#                   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&lt;br /&gt;
#       permissive - SELinux prints warnings instead of enforcing.&lt;br /&gt;
#                    Use this to customise your SELinux policies and booleans prior to deployment. Recommended during policy development.&lt;br /&gt;
#       disabled - No SELinux policy is loaded.&lt;br /&gt;
#                  This is not a recommended setting, for it may cause problems with file labelling&lt;br /&gt;
SELINUX=permissive&lt;br /&gt;
# SELINUXTYPE= takes the name of SELinux policy to&lt;br /&gt;
# be used. Current options are:&lt;br /&gt;
#       refpolicy (vanilla reference policy)&lt;br /&gt;
#       &amp;lt;custompolicy&amp;gt; - Substitute &amp;lt;custompolicy&amp;gt; with the name of any custom policy you choose to load&lt;br /&gt;
SELINUXTYPE=refpolicy&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ここで、再起動が必要です。再起動したら、次を実行してファイルシステムにラベルを付けて下さい:&lt;br /&gt;
&lt;br /&gt;
 # restorecon -r /&lt;br /&gt;
&lt;br /&gt;
その後、以下の内容で {{ic|requiredmod.te}} ファイルを作成します:&lt;br /&gt;
&lt;br /&gt;
{{hc|requiredmod.te|2=&lt;br /&gt;
module requiredmod 1.0;&lt;br /&gt;
&lt;br /&gt;
require {&lt;br /&gt;
        type devpts_t;&lt;br /&gt;
        type kernel_t;&lt;br /&gt;
        type device_t;&lt;br /&gt;
        type var_run_t;&lt;br /&gt;
        type udev_t;&lt;br /&gt;
        type hugetlbfs_t;&lt;br /&gt;
        type udev_tbl_t;&lt;br /&gt;
        type tmpfs_t;&lt;br /&gt;
        class sock_file write;&lt;br /&gt;
        class unix_stream_socket { read write ioctl };&lt;br /&gt;
        class capability2 block_suspend;&lt;br /&gt;
        class dir { write add_name };&lt;br /&gt;
        class filesystem associate;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#============= devpts_t ==============&lt;br /&gt;
allow devpts_t device_t:filesystem associate;&lt;br /&gt;
&lt;br /&gt;
#============= hugetlbfs_t ==============&lt;br /&gt;
allow hugetlbfs_t device_t:filesystem associate;&lt;br /&gt;
&lt;br /&gt;
#============= kernel_t ==============&lt;br /&gt;
allow kernel_t self:capability2 block_suspend;&lt;br /&gt;
&lt;br /&gt;
#============= tmpfs_t ==============&lt;br /&gt;
allow tmpfs_t device_t:filesystem associate;&lt;br /&gt;
&lt;br /&gt;
#============= udev_t ==============&lt;br /&gt;
allow udev_t kernel_t:unix_stream_socket { read write ioctl };&lt;br /&gt;
allow udev_t udev_tbl_t:dir { write add_name };&lt;br /&gt;
allow udev_t var_run_t:sock_file write;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
そして以下のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;# checkmodule -m -o requiredmod.mod requiredmod.te&lt;br /&gt;
# semodule_package -o requiredmod.pp -m requiredmod.mod&lt;br /&gt;
# semodule -i requiredmod.pp&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上記の設定はリファレンスポリシーで発生する厄介なメッセージを {{ic|/var/log/audit/audit.log}} から削除するために必要です。汚いハックであり、正しくないラベリングの影響を隠すためにリファレンスポリシーにパッチをあてることを明確にするべきです。&lt;br /&gt;
&lt;br /&gt;
===Vagrant 仮想マシンでテスト===&lt;br /&gt;
&lt;br /&gt;
[[Vagrant]] を使うことで SELinux が設定された Arch Linux の仮想マシンをプロビジョニングできます。現在の環境に影響を与えないで Arch Linux の SELinux を簡単にテストすることが可能です。以下のコマンドを使用してテストしてください:&lt;br /&gt;
&lt;br /&gt;
 $ git clone &amp;lt;nowiki&amp;gt;https://github.com/archlinuxhardened/selinux&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 $ cd selinux/_vagrant&lt;br /&gt;
 $ vagrant up&lt;br /&gt;
 $ vagrant ssh&lt;br /&gt;
&lt;br /&gt;
==インストール後の作業==&lt;br /&gt;
&lt;br /&gt;
SELinux が動作しているかは {{ic|sestatus}} で確認できます。以下のように表示されるはずです:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
SELinux status:                 enabled&lt;br /&gt;
SELinuxfs mount:                /sys/fs/selinux&lt;br /&gt;
SELinux root directory:         /etc/selinux&lt;br /&gt;
Loaded policy name:             refpolicy&lt;br /&gt;
Current mode:                   permissive&lt;br /&gt;
Mode from config file:          permissive&lt;br /&gt;
Policy MLS status:              disabled&lt;br /&gt;
Policy deny_unknown status:     allowed&lt;br /&gt;
Max kernel policy version:      28&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
コンテキストを適切に維持するために、{{ic|restorecond.service}}を有効にできます:&lt;br /&gt;
&lt;br /&gt;
 # systemctl enable restorecond&lt;br /&gt;
&lt;br /&gt;
再起動しないで enforcing モードに切り替えたい場合、次のコマンドを使います:&lt;br /&gt;
&lt;br /&gt;
 # echo 1 &amp;gt; /sys/fs/selinux/enforce&lt;br /&gt;
&lt;br /&gt;
===スワップファイル===&lt;br /&gt;
&lt;br /&gt;
スワップパーティションの代わりにスワップファイルを使う場合、適切なセキュリティコンテキストを設定するために次のコマンドを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # semanage fcontext -a -t swapfile_t &amp;quot;&#039;&#039;/path/to/swapfile&#039;&#039;&amp;quot;&lt;br /&gt;
 # restorecon &#039;&#039;/path/to/swapfile&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==SELinux の使い方==&lt;br /&gt;
&lt;br /&gt;
SELinux は伝統的な Unix のアクセス制御とは異なる方法でセキュリティを定義します。SELinux を理解するにはサンプルを見るのが一番です。例えば、apache のホームページの SELinux セキュリティコンテキストは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 $ls -lZ /var/www/html/index.html&lt;br /&gt;
 -rw-r--r--  username username system_u:object_r:httpd_sys_content_t /var/www/html/index.html&lt;br /&gt;
&lt;br /&gt;
最初の3つと最後のカラムは (Arch) Linux ユーザーなら誰でも見覚えがあるはずです。新しいのは4番目のカラムであり以下のフォーマットになっています:&lt;br /&gt;
&lt;br /&gt;
 user:role:type[:level]&lt;br /&gt;
&lt;br /&gt;
それぞれを説明すると:&lt;br /&gt;
#&#039;&#039;&#039;User:&#039;&#039;&#039; SELinux のユーザー識別子。SELinux ユーザーが使用することができる複数のロールに関連付けることができます。&lt;br /&gt;
#&#039;&#039;&#039;Role:&#039;&#039;&#039; SELinux のロール。SELinux ユーザーがアクセスすることができる複数のタイプに関連付けることができます。&lt;br /&gt;
#&#039;&#039;&#039;Type:&#039;&#039;&#039; プロセスにタイプが関連付けられると、SELinux ユーザー (サブジェクト) がアクセスできるプロセスが (ドメイン) が決定します。タイプがオブジェクトと関連付けられた場合、SELinux がオブジェクトにアクセスする際のパーミッションが決まります。&lt;br /&gt;
#&#039;&#039;&#039;Level:&#039;&#039;&#039; ポリシーが MCS や MLS をサポートしている場合にのみ使用する任意のフィールドです。範囲とも呼びます。&lt;br /&gt;
&lt;br /&gt;
これが重要になるのは、自分でポリシーを作成して、SELinux の基本的な構成要素にしたいという場合です。ほとんどの場合リファレンスポリシーで十分間に合うので、理解する必要はありません。ただし、あなたがパワーユーザーであり何か特別な必要性があるのであれば、自ら SELinux のポリシーを作成する方法を学ぶ絶好の機会でしょう。&lt;br /&gt;
&lt;br /&gt;
SELinux の仕組みを理解したい人には [http://www.fosteringlinux.com/tag/selinux/ こちら] のシリーズを読むのをおすすめします。&lt;br /&gt;
&lt;br /&gt;
==トラブルシューティング==&lt;br /&gt;
&lt;br /&gt;
SELinux のエラーは systemd の [[journal]] で確認できます。例えば {{ic|system_u:system_r:policykit_t:s0}} ラベルに関する SELinux のメッセージを表示するには、次を実行:&lt;br /&gt;
&lt;br /&gt;
 # journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0&lt;br /&gt;
&lt;br /&gt;
===便利なツール===&lt;br /&gt;
&lt;br /&gt;
SELinux を補助するツール/コマンドがいくつか存在します。&lt;br /&gt;
&lt;br /&gt;
;restorecon: ポリシールールに基づいてファイル/ディレクトリのコンテキストを付け直す ({{ic|-R}} を付けると再帰的に実行)。&lt;br /&gt;
;chcon: 指定したファイルのコンテキストを変更。&lt;br /&gt;
&lt;br /&gt;
===問題の報告===&lt;br /&gt;
&lt;br /&gt;
問題の報告は GitHub でしてください: https://github.com/archlinuxhardened/selinux/issues&lt;br /&gt;
&lt;br /&gt;
==参照==&lt;br /&gt;
*[[wikipedia:ja:Security-Enhanced Linux|Security Enhanced Linux]]&lt;br /&gt;
*[https://fedoraproject.org/wiki/SELinux Fedora プロジェクトの SELinux Wiki]&lt;br /&gt;
*[https://www.nsa.gov/what-we-do/research/selinux/ NSA の SELinux 公式ホームページ]&lt;br /&gt;
* [http://userspace.selinuxproject.org/ SELinux のユーザー空間ホームページ]&lt;br /&gt;
**[http://oss.tresys.com/projects/refpolicy リファレンスポリシーのホームページ]&lt;br /&gt;
**[http://oss.tresys.com/projects/setools SETools ホームページ]&lt;br /&gt;
*[https://web.archive.org/web/20140816115906/http://jamesthebard.net/archlinux-selinux-and-you-a-trip-down-the-rabbit-hole/ ArchLinux, SELinux and You (アーカイブ)]&lt;/div&gt;</summary>
		<author><name>S3-odara</name></author>
	</entry>
</feed>