<?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=Hikali</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=Hikali"/>
	<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/Hikali"/>
	<updated>2026-04-05T16:26:50Z</updated>
	<subtitle>利用者の投稿記録</subtitle>
	<generator>MediaWiki 1.44.3</generator>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=YubiKey&amp;diff=39617</id>
		<title>YubiKey</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=YubiKey&amp;diff=39617"/>
		<updated>2025-02-03T01:03:09Z</updated>

		<summary type="html">&lt;p&gt;Hikali: 誤字の修正 s/性的/静的&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:OpenPGP]]&lt;br /&gt;
[[Category:スマートカード]]&lt;br /&gt;
[[Category:Universal 2nd Factor]]&lt;br /&gt;
[[en:YubiKey]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Universal 2nd Factor}}&lt;br /&gt;
{{Related|OATH}}&lt;br /&gt;
{{Related|dm-crypt/システム全体の暗号化}}&lt;br /&gt;
{{Related|PAM}}&lt;br /&gt;
{{Related|GnuPG}}&lt;br /&gt;
{{Related|KeePass}}&lt;br /&gt;
{{Related|OpenPGP-card-tools}}&lt;br /&gt;
{{Related|スマートカード}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://www.yubico.com YubiKey] は小さな [[Wikipedia:ja:セキュリティトークン|USB セキュリティトークン]]です。モデルにも依りますが、以下のようなことができます:&lt;br /&gt;
&lt;br /&gt;
* スマートカードのように振る舞う([[Wikipedia:CCID (protocol)|CCID protocol]] を使用) - [https://developers.yubico.com/PGP/ PGP] と [https://developers.yubico.com/PIV/ PIV] 秘密鍵の両方を保存できます。&lt;br /&gt;
* [[Universal 2nd Factor]] (U2F) リクエストを処理する。&lt;br /&gt;
* 約 30 個の[[オープン認証イニシアチブ]] (OATH) 資格情報を保存・クエリする。&lt;br /&gt;
* Yubico OTP モードか HMAC-SHA1 モードで[[Wikipedia:Challenge–response authentication|チャレンジレスポンス認証]]を処理する。&lt;br /&gt;
* [[Wikipedia:ja:ワンタイムパスワード|ワンタイムパスワード]] (OTP) を生成する - [https://developers.yubico.com/OTP/ Yubico&#039;s AES based standard]。&lt;br /&gt;
* 63 文字までの静的パスワードを&amp;quot;入力&amp;quot;する。&lt;br /&gt;
&lt;br /&gt;
多くの機能を提供する一方、YubiKey の新しいバージョンは[https://www.yubico.com/blog/secure-hardware-vs-open-source/ オープンソースとしてリリースされていません]。代替としては [[Solo]]、[[Tillitis TKey|TKey]]、[[Nitrokey]] があります。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
=== 管理ツール ===&lt;br /&gt;
&lt;br /&gt;
* {{App|YubiKey Manager|USB を通して YubiKey の設定とクエリをするための Python ライブラリとコマンドラインツール({{ic|ykman}})。オプションの GUI あり。|https://developers.yubico.com/yubikey-manager/|{{Pkg|yubikey-manager}}, {{Pkg|yubikey-manager-qt}}}}&lt;br /&gt;
::{{Note|インストール後、{{ic|pcscd.service}} を[[有効化]]してください。}}&lt;br /&gt;
* {{App|YubiKey Personalization|OTP USB 接続を通して YubiKey の設定とクエリをするためのライブラリとツール。ykman よりも強力ですが、使うのが難しいです。オプションの GUI あり。|https://developers.yubico.com/yubikey-personalization/|{{Pkg|yubikey-personalization}}, {{Pkg|yubikey-personalization-gui}}}}&lt;br /&gt;
&lt;br /&gt;
=== 認証ツール ===&lt;br /&gt;
&lt;br /&gt;
* {{App|Yubico PAM|Yubico OTP または チャレンジレスポンス認証による [[PAM]] ユーザ認証。|https://developers.yubico.com/yubico-pam/|{{Pkg|yubico-pam}}}}&lt;br /&gt;
* {{App|Yubico PAM-U2F|[[U2F]] により [[PAM]] ユーザ認証。|https://developers.yubico.com/pam-u2f/|{{Pkg|pam-u2f}}}}&lt;br /&gt;
* {{App|Yubico Authenticator for Desktop|USB を通して YbiKey から OATH コードを読み込む GUI。古いスロットベースの実装 (YubiKey Standard と Edge) と新しい OATH 実装をサポート (YubiKey NEO と 4)。注: [https://gitlab.archlinux.org/archlinux/packaging/packages/yubioath-desktop/-/issues/2 archlinux/packaging/packages/yubioath-desktop]。&amp;lt;!-- TODO: issue テンプレートを使う --&amp;gt;|https://developers.yubico.com/OATH/YubiKey_OATH_software.html|{{Pkg|yubioath-desktop}}}}&lt;br /&gt;
* {{App|Yubico Authenticator 6.0+ for Desktop|Yubico Authenticator 6.0+ (バージョン 6.0 及びそれ以降) は、YubiKey の第二要素クレデンシャルを管理するためのアプリケーションです。バージョン 6.0 から、コードベースが Flutter フレームワークを使って完全に書き換えられました。|https://developers.yubico.com/yubioath-flutter/|{{AUR|yubico-authenticator-bin}}}}&lt;br /&gt;
* {{App|libfido2|クライアントサイドの U2F サポート。ウェブブラウザで U2F プロトコルを YubiKey による認証のために利用できるようになります。|https://developers.yubico.com/libfido2/|{{Pkg|libfido2}}}}&lt;br /&gt;
* {{App|YubiKey Full Disk Encryption|チャレンジレスポンスモードを使用し、強力な LUKS パスフレーズを生成します。完全なディスク暗号化をサポート。|https://github.com/agherzan/yubikey-full-disk-encryption|{{Pkg|yubikey-full-disk-encryption}}}}&lt;br /&gt;
&lt;br /&gt;
== 入力 ==&lt;br /&gt;
&lt;br /&gt;
YubiKey は、USB を通して API を呼び出したりボタンを押したりする形で入力を受け付けます。&lt;br /&gt;
&lt;br /&gt;
ボタンはとても敏感です。状況にも依りますが、ボタンを押すと以下のどれか1つを行います:&lt;br /&gt;
&lt;br /&gt;
* 静的パスワードやワンタイムパスワード(OTP)をトリガーする(短く押すとスロット1、長く押すとスロット2)。これはデフォルトの挙動で、うっかりトリガーしてしまうことは簡単です。&lt;br /&gt;
* 機能やアクセスを確定/許可する。LED が点灯し、ユーザに入力を促します。&lt;br /&gt;
* スマートカードを挿入/除去する。&lt;br /&gt;
&lt;br /&gt;
== 出力 ==&lt;br /&gt;
&lt;br /&gt;
YubiKey は以下の入力を出力に変換します:&lt;br /&gt;
&lt;br /&gt;
* キーストローク(USB キーボードをエミュレートします)、静的パスワードや OTP をタイプするために使用します。(静的パスワードはキーロガーに対して脆弱であることに注意してください。)&lt;br /&gt;
* 組み込みの LED は:&lt;br /&gt;
** 挿入した際に一度光ります。トラブルシューティングに便利です。&lt;br /&gt;
** API の応答を許可するためにボタンを押すことを要求された際に安定して光ります。&lt;br /&gt;
* USB を通した API 応答。これは以下のように使用されます:&lt;br /&gt;
** チャレンジレスポンス認証(Yubico OTP モードか HMAC-SHA1 モードを使って計算されます)&lt;br /&gt;
** U2F チャレンジレスポンス認証&lt;br /&gt;
** CCID スマートカード関連のリクエスト&lt;br /&gt;
&lt;br /&gt;
== USB 接続モード ==&lt;br /&gt;
&lt;br /&gt;
YubiKey のモデルによりますが、デバイスは3つまでの異なる USB インターフェイスを提供します。これらのインターフェイスのうち2つは USB HID (Human Interface Device) デバイスクラスを実装しています; 3つ目はスマートカードインターフェイス(CCID)です。3つすべて独立して有効化/無効化できます。これにより、それらに関連したプロトコルの制御ができます。&lt;br /&gt;
&lt;br /&gt;
以下の表はどのプロトコルがどのインターフェイスを使用するかを示しています:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! プロトコル !! インターフェイス&lt;br /&gt;
|-&lt;br /&gt;
|OTP || Keyboard HID&lt;br /&gt;
|-&lt;br /&gt;
|FIDO || Other HID&lt;br /&gt;
|-&lt;br /&gt;
|PIV || CCID&lt;br /&gt;
|-&lt;br /&gt;
|OpenPGP || CCID&lt;br /&gt;
|-&lt;br /&gt;
|OATH || CCID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ic|ykman}} は &amp;quot;modes&amp;quot; という用語を使用します、OTP、FIDO、CCID と名付けられています。&lt;br /&gt;
&lt;br /&gt;
{{Note|ykman はリリース 0.6.1 (2018-04-16)で &amp;quot;U2F&amp;quot; を &amp;quot;FIDO&amp;quot; と名前を変更しました。https://developers.yubico.com/yubikey-manager/Release_Notes.html}}&lt;br /&gt;
&lt;br /&gt;
=== 有効になっているモードを取得 ===&lt;br /&gt;
&lt;br /&gt;
バージョン 5 以前の YubiKey では:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ykman config mode|&lt;br /&gt;
Current connection mode is: OTP+FIDO+CCID&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|ykman mode}} というコマンドは非推奨となっており、今後削除されるでしょう。}}&lt;br /&gt;
&lt;br /&gt;
YubiKey バージョン 5 では:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ykman info|&lt;br /&gt;
Device type: YubiKey 5 NFC&lt;br /&gt;
Serial number: XXXXXXXXX&lt;br /&gt;
Firmware version: 5.4.3&lt;br /&gt;
Form factor: Keychain (USB-A)&lt;br /&gt;
Enabled USB interfaces: OTP, FIDO, CCID&lt;br /&gt;
NFC transport is enabled.&lt;br /&gt;
&lt;br /&gt;
Applications    USB     NFC&lt;br /&gt;
FIDO2           Enabled Enabled&lt;br /&gt;
OTP             Enabled Enabled&lt;br /&gt;
FIDO U2F        Enabled Enabled&lt;br /&gt;
OATH            Enabled Enabled&lt;br /&gt;
YubiHSM Auth    Enabled Enabled&lt;br /&gt;
OpenPGP         Enabled Enabled&lt;br /&gt;
PIV             Enabled Enabled&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== モードをセット ===&lt;br /&gt;
&lt;br /&gt;
すべてのモードが出荷時から有効化されています。変更するには:&lt;br /&gt;
&lt;br /&gt;
 $ ykman mode &#039;&#039;[OPTIONS]&#039;&#039; &#039;&#039;MODE&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* {{ic|&#039;&#039;MODE&#039;&#039;}} には文字列を使用できます。例えば、{{ic|OTP+FIDO+CCID}}。短い形式もあります: {{ic|o+f+c}}。&lt;br /&gt;
* {{ic|&#039;&#039;MODE&#039;&#039;}} にはモード番号を使用できます。複数の有効化するモードをエンコードしたものです。&lt;br /&gt;
&lt;br /&gt;
以下にモード番号の表があります:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|0||OTP device only.&lt;br /&gt;
|-&lt;br /&gt;
|1||CCID device only.&lt;br /&gt;
|-&lt;br /&gt;
|2||OTP/CCID composite device.&lt;br /&gt;
|-&lt;br /&gt;
|3||U2F device only.&lt;br /&gt;
|-&lt;br /&gt;
|4||OTP/U2F composite device.&lt;br /&gt;
|-&lt;br /&gt;
|5||U2F/CCID composite device.&lt;br /&gt;
|-&lt;br /&gt;
|6||OTP/U2F/CCID composite device.&lt;br /&gt;
|-&lt;br /&gt;
|81||CCID device only, with touch-eject.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|一部の例では 86 という番号を使用しています。これは[https://github.com/Yubico/yubikey-manager/issues/20#issuecomment-326496204 無効な番号]です。80 は無視され、6 のように振る舞います。}}&lt;br /&gt;
&lt;br /&gt;
オプション:&lt;br /&gt;
* {{ic|--touch-eject}} - ボタンを押すとスマートカードを挿入/除去します。これは CCID のみのモードでのみ動作します; FIDO と OTP は無効化されていなければなりません。&lt;br /&gt;
* {{ic|--autoeject-timeout &#039;&#039;SECONDS&#039;&#039;}} - 一定時間立つとスマートカードを自動的に除去します。{{ic|--touch-eject}} と同じような制限があります。&lt;br /&gt;
* {{ic|--chalresp-timeout &#039;&#039;SECONDS&#039;&#039;}} - チャレンジレスポンス認証のタイムアウトを設定します。&lt;br /&gt;
&lt;br /&gt;
さらなる情報は、{{ic|ykman mode --help}} を見てください。&lt;br /&gt;
&lt;br /&gt;
== ワンタイムパスワード ==&lt;br /&gt;
&lt;br /&gt;
どういうわけか、この機能には誤解を招く名前が付けられています。この機能には静的パスワードとチャレンジレスポンス認証の機能も含まれているのです。&lt;br /&gt;
&lt;br /&gt;
2つのスロットがこの機能のために提供されています。それぞれのスロットには、短くボタンを押したり、長くボタンを押すことでアクセスできます。それぞれのスロットは以下のうち&#039;&#039;&#039;1つ&#039;&#039;&#039;を設定できます:&lt;br /&gt;
&lt;br /&gt;
* Yubico OTP&lt;br /&gt;
* OATH-HOTP&lt;br /&gt;
* OATH-TOTP&lt;br /&gt;
* チャレンジレスポンス認証&lt;br /&gt;
* 静的パスワード&lt;br /&gt;
&lt;br /&gt;
それぞれの機能には、作成時に提供できる複数の設定オプションがあります。しかし、一度設定すると読み返すことができません。{{ic|ykman otp swap}} により、スロット1とスロット2を入れ替えることはできます。&lt;br /&gt;
&lt;br /&gt;
=== 工場出荷時の設定 ===&lt;br /&gt;
&lt;br /&gt;
新しい YubiKey では、Yubico OTP がスロット1に事前に設定されています。この初期の AES 共通鍵はその YubiKey と Yubico の認証サーバーに保存されています。これにより、YubiCloud に対して認証でき、Yubico Forum ウェブサイトや https://demo.yubico.com と組み合わせて Yubico OTP を使用できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|スロット1にある工場出荷時のキーを上書きしてしまうと、同じ信頼レベルの新しいキーを作成することはできなくなります。工場で生成された Yubico OTP 認証情報は {{ic|CC}} という接頭辞で始まります。一方、ユーザが生成した認証情報は {{ic|VV}} で始まります。セキュリティおよび機能的には基本的な違いはありませんが、一部のサービスは {{ic|CC}} の認証情報のみを信頼します。さらなる情報はこの[https://forum.yubico.com/viewtopic12ca.html?f%3D16&amp;amp;t%3D1960 フォーラムスレッド]で見られます。}}&lt;br /&gt;
&lt;br /&gt;
=== Yubico OTP ===&lt;br /&gt;
&lt;br /&gt;
[https://developers.yubico.com/OTP/ Yubico OTP] は[[Wikipedia:ja:共通鍵暗号|共通鍵暗号]]に基づいています。より具体的には、それぞれの YubiKey にはそのデバイスにユニークな128ビットの [[Wikipedia:ja:Advanced_Encryption_Standard|AES]] 鍵が含まれており、この鍵は検証サーバーにも保存されています。パスワードを尋ねられた際には、YubiKey は鍵の ID、カウンタ、乱数などの異なるフィールドを連結し、その結果を暗号化することでトークンを作成します。&lt;br /&gt;
&lt;br /&gt;
この OTP は対象のシステムに送られ、検証サーバーに渡されます。検証サーバー(同じく秘密鍵を所有しています)はそれを復号し、内部の情報を検証します。その結果は対象のシステムに返されます。そして、システムはアクセスを許可するかどうかを判断することができます。&lt;br /&gt;
&lt;br /&gt;
==== YubiCloud と検証サーバー ====&lt;br /&gt;
&lt;br /&gt;
Yubico は、YubiCloud と呼ばれる、無料かつ制限無しでアクセスできる検証サーバーを提供しています。YubiCloud はすべての YubiKey の工場出荷時の設定を把握しており、これは (例えば) {{Pkg|yubico-pam}} によって使用される「デフォルト」の検証サービスです。Yubico はまた、サーバーの[https://developers.yubico.com/Software_Projects/Yubico_OTP/YubiCloud_Validation_Servers/ オープンソースの実装]も提供しています。&lt;br /&gt;
&lt;br /&gt;
{{Note|Yubico の検証サーバーを認証する場合:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;HMAC&#039;&#039;&#039; を使用: https://upgrade.yubico.com/getapikey/ から HMAC 鍵と ID を取得してください。&lt;br /&gt;
* &#039;&#039;&#039;HTTPS&#039;&#039;&#039; を使用: 検証サーバーの証明書は GoDaddy によって署名されています。Arch ではデフォルトで GoDaddy を信頼しています ({{Pkg|ca-certificates}} をインストールしていれば)。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 設定と使用 ====&lt;br /&gt;
&lt;br /&gt;
スロットに新しいキーを生成してください。そして、それを YubiCloud にアップロードしてください(ブラウザで開きます):&lt;br /&gt;
&lt;br /&gt;
 $ ykman otp yubiotp --generate-key --upload 2&lt;br /&gt;
&lt;br /&gt;
さらなる情報は、{{ic|ykman otp yubiotp --help}} で見てください。&lt;br /&gt;
&lt;br /&gt;
==== セキュリティリスク ====&lt;br /&gt;
&lt;br /&gt;
===== AES 鍵の漏洩 =====&lt;br /&gt;
&lt;br /&gt;
ご想像の通り、AES 鍵は絶対に秘密にする必要があります。Yubikey から AES 鍵を抜き取ることはできません (少なくともソフトウェアを使って抜き取るのは不可能に近い)。AES 鍵は検証サーバーにも存在するため、このサーバーのセキュリティというのがとても重要になります。&lt;br /&gt;
&lt;br /&gt;
===== 検証リクエスト/レスポンスの盗聴 =====&lt;br /&gt;
&lt;br /&gt;
システムは検証サーバーの決定に従っているため、検証サーバーになりすます攻撃が考えられます。これを防ぐには、対象のシステムが、HMAC か HTTPS を使用して、検証サーバーを認証する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== チャレンジレスポンス認証 ===&lt;br /&gt;
&lt;br /&gt;
チャレンジは YubiKey に送られ、YubeKey はとある秘密に基づいてレスポンスを計算します。同じチャレンジに対しては常に同じレスポンスが返されます。その秘密無しでは、この計算は現実的ではありません。たとえ、大量のチャレンジレスポンス認証を行ったとしてもです。&lt;br /&gt;
&lt;br /&gt;
これは以下のように利用できます:&lt;br /&gt;
&lt;br /&gt;
* 真の二要素認証: ユーザーはチャレンジを与えられ、パスワードに加えて正しいレスポンスを返さなければなりません。両方が秘密鍵を持っていなければなりません。&lt;br /&gt;
* 「準」二要素認証: チャレンジはパスワードのように振る舞い、サーバーは正しいレスポンスを保持しています。これは OTP ではなく、レスポンス鍵を手に入れれば誰でもアクセス許可を得ることができます。しかし、サーバーが秘密鍵を必要としないので、よりシンプルです。&lt;br /&gt;
&lt;br /&gt;
2つのチャレンジレスポンス認証アルゴリズムがあります:&lt;br /&gt;
&lt;br /&gt;
* HMAC-SHA1&lt;br /&gt;
* Yubico OTP&lt;br /&gt;
&lt;br /&gt;
これは、{{Pkg|yubikey-personalization-gui}} を使って GUI で、あるいは以下の指示で設定できます。&lt;br /&gt;
&lt;br /&gt;
==== HMAC-SHA1 アルゴリズム ====&lt;br /&gt;
&lt;br /&gt;
生成された鍵を使ってスロット2をチャレンジレスポンス認証モードで設定してください:&lt;br /&gt;
&lt;br /&gt;
 $ ykman otp chalresp --generate 2&lt;br /&gt;
&lt;br /&gt;
キーを与えるための {{ic|--generate}} フラグは省略できます ({{ic|ykman otp chalresp --help}} を参照)。キーを与える主な利点は、バックアップ用の2つ目のデバイスをセットアップする際に使用できることです。例えば、{{ic|openssl rand -hex 20}} は適切な鍵を生成します。&lt;br /&gt;
&lt;br /&gt;
==== Yubico OTP アルゴリズム ====&lt;br /&gt;
&lt;br /&gt;
{{ic|ykman}} は chal-yubico アルゴリズムの設定にはサポートしていないようです。しかし、{{ic|ykpersonalize}} を使用できます。スロット2にランダムな鍵を生成してください:&lt;br /&gt;
&lt;br /&gt;
 $ ykpersonalize -2 -ochal-resp -ochal-yubico&lt;br /&gt;
&lt;br /&gt;
さらなる情報は {{man|1|ykpersonalize}} を見てください。&lt;br /&gt;
&lt;br /&gt;
==== チャレンジを送信 ====&lt;br /&gt;
&lt;br /&gt;
チャレンジを送信してレスポンスを受信するには、{{ic|ykchalresp -&#039;&#039;slot&#039;&#039; &#039;&#039;challenge&#039;&#039;}} コマンドを使用できます。例えば:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ ykchalresp -2 &#039;&#039;archie&#039;&#039;|&lt;br /&gt;
12a19763be77d75af46fb76f0b737c117fa47205&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
このコマンドは、プログラム済みのスロット2のユニークな 40 バイトの SHA1 ハッシュ値を返します。チャレンジが異なると、異なるユニークなレスポンスが返されます。&lt;br /&gt;
&lt;br /&gt;
=== 静的パスワード ===&lt;br /&gt;
&lt;br /&gt;
静的パスワードも生成できます:&lt;br /&gt;
&lt;br /&gt;
 $ ykman otp static --generate &#039;&#039;slot&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
あるいは、パスワードを与えることも:&lt;br /&gt;
&lt;br /&gt;
 $ ykman otp static &#039;&#039;slot&#039;&#039; &#039;&#039;password&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
複数のオプションがあります; 生成されるパスワードの長さと文字セットや、Enter キーストロークを送るかどうかを設定できます。詳細は {{ic|ykman otp static --help}} で見てください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ほとんどの YubiKey では、静的パスワードを保存するためのスロットの数 (2個) は限られています。チャレンジレスポンス認証のスロットは、無制限のチャレンジに対して静的ハッシュ値のレスポンスを提供します。これらは数字と小文字アルファベットのみですが、レスポンスの長さによってかなりのエントロピーが生まれます。}}&lt;br /&gt;
&lt;br /&gt;
=== エミュレートされた USB キーボードの限界、「なぜ私のパスワードは弱く見えるのか」 ===&lt;br /&gt;
&lt;br /&gt;
ほとんどのキーボードレイアウトで YubiKey が機能するようにするために、パスワードはデフォルトで ModHex アルファベット({{ic|cbdefghijklnrtuv}})、数値 {{ic|0-9}}、{{ic|!}} に制限されています。これらの文字は非常に多くのキーボードレイアウトで同じスキャンコードを使用し、ほとんどのコンピュータで互換性が保証されます。&lt;br /&gt;
&lt;br /&gt;
Yubico はこの問題に関する[https://resources.yubico.com/53ZDUYE6/as/9hccqgx9bwwqq96mhkk8jb4h/Static_Password_Function.pdf 白書]を提供しています。&lt;br /&gt;
&lt;br /&gt;
== OATH ==&lt;br /&gt;
&lt;br /&gt;
YubiKey は2つの [[OATH]] 実装を提供します:&lt;br /&gt;
; OATH API: 新しい手法であり、モデルによっては約30個の認証情報を格納できます。(YubiKey 4、NEO、それ以降)&lt;br /&gt;
; OTP slot: 古い手法であり、両方の OTP スロットが1つの認証情報を格納できます。(チャレンジレスポンス認証をサポートするすべてのモデル)&lt;br /&gt;
&lt;br /&gt;
=== OATH API ===&lt;br /&gt;
&lt;br /&gt;
GUI がお好みならば、{{Pkg|yubioath-desktop}} を使用できます。&lt;br /&gt;
&lt;br /&gt;
{{ic|ykman}} は、{{ic|ykman oath uri}} を使って URI 形式のコードを追加できます。以下は、QR コードのイメージから認証情報を追加するワンライナーです:&lt;br /&gt;
&lt;br /&gt;
 $ zbarimg qr_code.png --quiet --raw | xargs ykman oath uri&lt;br /&gt;
&lt;br /&gt;
手動で行うこともできます。TOTP 鍵をプログラムし、コードを生成するためにボタンへのタッチを要求します:&lt;br /&gt;
&lt;br /&gt;
 $ ykman oath add --touch &#039;&#039;name&#039;&#039; &#039;&#039;secret&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
HOTP 鍵をプログラムします:&lt;br /&gt;
&lt;br /&gt;
 $ ykman oath add --oath-type HOTP &#039;&#039;name&#039;&#039; &#039;&#039;secret&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
認証情報を一覧表示します:&lt;br /&gt;
&lt;br /&gt;
 $ ykman oath list&lt;br /&gt;
&lt;br /&gt;
コードを生成します:&lt;br /&gt;
&lt;br /&gt;
 $ ykman oath code &#039;&#039;query&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
利用可能なサブコマンドをすべて見るには、{{ic|ykman oath --help}} を実行してください。それぞれのサブコマンドの情報を見るには、{{ic|ykman oath &#039;&#039;subcommand&#039;&#039; --help}} を使ってください。&lt;br /&gt;
&lt;br /&gt;
=== OTP スロット実装 ===&lt;br /&gt;
&lt;br /&gt;
スロット2で HOTP をプログラムします:&lt;br /&gt;
&lt;br /&gt;
 $ ykman otp hotp 2 &#039;&#039;key&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
TOTP をプログラムします:&lt;br /&gt;
&lt;br /&gt;
 $ ykman otp chalresp --totp &#039;&#039;slot&#039;&#039; &#039;&#039;key&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
HOTP を生成します:&lt;br /&gt;
&lt;br /&gt;
 $ ykman otp calculate &#039;&#039;slot&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
TOTP を生成します:&lt;br /&gt;
&lt;br /&gt;
 $ ykman otp calculate --totp &#039;&#039;slot&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|ykman otp --help}} と https://developers.yubico.com/OATH/ も参照してください。&lt;br /&gt;
&lt;br /&gt;
== U2F ==&lt;br /&gt;
&lt;br /&gt;
YubiKey を用いた [[Universal 2nd Factor]] (U2F) はとても単純です。鍵そのものに対する設定は必要ありません。このモードは一部のドキュメントやユーティリティでは &#039;FIDO&#039; とも呼ばれていることに注意してください。{{ic|ykman}} ユーティリティを通じていくつかの限定された管理オプションがあります:&lt;br /&gt;
&lt;br /&gt;
* PIN を設定:  {{ic|ykman fido access change-pin}}&lt;br /&gt;
* 個別の資格情報を削除: {{ic|ykman fido credentials delete &#039;&#039;QUERY&#039;&#039;}}&lt;br /&gt;
* すべての資格情報と PIN をリセット: {{ic|ykman fido reset}}&lt;br /&gt;
&lt;br /&gt;
U2F を認証に使用するには、[[U2F]] の指示を見てください。&lt;br /&gt;
&lt;br /&gt;
[[WebAuthn]] も参照。&lt;br /&gt;
&lt;br /&gt;
== CCID スマートカード ==&lt;br /&gt;
&lt;br /&gt;
CCID (Chip Card Interface Device) は、スマートカードリーダーとして振る舞う USB デバイスによって使用されたり、YubiKey のように USB を通して直接接続するセキュリティトークンで使用されたりする USB 標準デバイスクラスです。HID (Human Interface Device) と CCID は両方とも USB デバイスクラスです。つまり、これらは USB 仕様の同じカテゴリに属すということです。HID は、キーボードなどのようなコンピュータ周辺機器のための仕様です。YubiKey は、OTP モードと FIDO モードで使用されたときは USB (HID) キーボードのように働きます。しかし、PIV アプリケーションを使用する時や OpenPGP デバイスとして使用する時は CCID プロトコルに切り替わります。&lt;br /&gt;
&lt;br /&gt;
CCID モードは 2015 年11以降に出荷された YubiKey のすべてでデフォルトで有効になっているはずです[https://www.yubico.com/support/knowledge-base/categories/articles/use-yubikey-yubikey-windows-hello-app/]。少なくとも CCID モードは有効化してください。[[#有効になっているモードを取得]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== PIV ===&lt;br /&gt;
&lt;br /&gt;
YubiKey NEO 以降から、YubiKey はチップ上に PIV (Personal Identity Verification) アプリケーションが含まれています。PIV は、RSA や ECC(楕円曲線暗号) を使用するトークンが個人電子証明書にどのように使用されるかを定めた米国政府規格(FIPS 201)です。YubiKey NEO は RSA 暗号のみをサポートしますが、その後のモデル(YubiKey 4 と 5)は RSA と ECC の両方をサポートします。PIV トークンの特徴は、秘密鍵を保護しオンチップで動作するように構築されているという点です。秘密鍵は、トークン上にインストールされた後は決してトークン外に出ることはありません。オプションで、オンチップの乱数生成器を使って秘密鍵をオンチップで生成することもできます。秘密鍵がオンチップで生成された場合、秘密鍵はチップの外部で処理されることはなく、トークンから秘密鍵を復元する方法もありません。PIV メカニズムを使用する際は、YubiKey は CCID デバイスとして機能します。&lt;br /&gt;
&lt;br /&gt;
=== OpenPGP スマートカード ===&lt;br /&gt;
&lt;br /&gt;
YubiKey は標準の GPG スマートカードとしてとして振る舞うことができます; セットアップと使用法に関する説明は [[GnuPG#スマートカード]] セクションを見てください。Yubico は https://developers.yubico.com/PGP/ でドキュメントも提供しています。&lt;br /&gt;
&lt;br /&gt;
他の機能(U2F と OTP)を使用したくない場合、ボタンはキーを挿入/除去するように設定でき、自動除去のタイムアウトも設定できます。詳細は [[#USB 接続モード]] を見てください。&lt;br /&gt;
&lt;br /&gt;
デフォルトのユーザ PIN は {{ic|123456}} で、デフォルトの admin PIN は {{ic|12345678}} です。デフォルトの PUK も {{ic|12345678}} です。覚えておきましょう。&lt;br /&gt;
&lt;br /&gt;
== 使用例 ==&lt;br /&gt;
&lt;br /&gt;
このセクションでは、様々な認証の目的での YubiKey の使用法について説明しています。しかし、以下は使用法について完全に網羅されたリストではありません。&lt;br /&gt;
&lt;br /&gt;
=== LUKS による完全なディスク暗号化 ===&lt;br /&gt;
&lt;br /&gt;
複数の選択肢があります:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;チャレンジレスポンス認証:&#039;&#039;&#039; とあるチャレンジに対する[[#チャレンジレスポンス認証|レスポンス]]が LUKS 鍵として使用されます。チャレンジは、真の二要素認証においてはパスワードとして機能し、一要素認証においてはチャレンジは平文で保存することができます。&lt;br /&gt;
* &#039;&#039;&#039;GnuPG:&#039;&#039;&#039; YubiKey の [[#CCID スマートカード|PGP スマートカード]]の機能を使用します。長いパスフレーズ無しで強力な二要素認証を提供します。&lt;br /&gt;
* &#039;&#039;&#039;FIDO HMAC Secret:&#039;&#039;&#039; あなたの YubiKey が [[U2F]] をサポートしているのであれば、共通鍵を返すように設定できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|ディスクの暗号化の強度は、使用している鍵のうち最も弱いものの強さと同じです。上記のツールの内一つを設定したら、初期のパスフレーズを削除するか、より長いものに置き換えることを検討してください。}}&lt;br /&gt;
&lt;br /&gt;
==== 共通の前提条件 ====&lt;br /&gt;
&lt;br /&gt;
* [[dm-crypt/システム全体の暗号化|LUKS により暗号化された]]起動可能なシステム。少なくとも1つの空きキースロットがあり、{{ic|encrypt}} [[mkinitcpio]] フックを使用していること。&lt;br /&gt;
** {{AUR|mkinitcpio-ykfde}} を例外として、{{ic|sd-encrypt}} はこれらのツールの全てでサポートされていません。&lt;br /&gt;
* LUKS ヘッダーのバックアップ(任意ですが、推奨)&lt;br /&gt;
&lt;br /&gt;
==== チャレンジレスポンス認証 ====&lt;br /&gt;
&lt;br /&gt;
完全な手順については {{Pkg|yubikey-full-disk-encryption}} の [https://github.com/agherzan/yubikey-full-disk-encryption#usage 公式ドキュメント] を見てください。大まかには:&lt;br /&gt;
&lt;br /&gt;
# {{Pkg|yubikey-full-disk-encryption}} をインストール。&lt;br /&gt;
# {{ic|/etc/ykfde.conf}} を設定。&lt;br /&gt;
# 対象のディスクを登録: {{ic|# ykfde-enroll -d /dev/&#039;&#039;DISK&#039;&#039; -s &#039;&#039;LUKS_SLOT&#039;&#039;}}&lt;br /&gt;
# {{ic|ykfde}} [[mkinitcpio#HOOKS|mkinitcpio フック]] を {{ic|encrypt}} フックの前に追加。&lt;br /&gt;
# [[Initramfs の再生成]]&lt;br /&gt;
&lt;br /&gt;
:{{Note|Plymouth ユーザーは、{{ic|plymouth-encrypt}} フックを {{ic|ykfde}} フックに置き換えてください。}}&lt;br /&gt;
&lt;br /&gt;
いくつかの利用可能なバリエーションがあります:&lt;br /&gt;
&lt;br /&gt;
* 2FA: デフォルトの挙動。対象デバイスの登録時、および起動時にパスワードとしてチャレンジを与えなければなりません。&lt;br /&gt;
* 1FA: {{ic|ykfde.conf}} に {{ic|YKFDE_CHALLENGE}} を設定してください。これは平文で保存されることに注意してください。このファイルに対する非ルートユーザの読み込みアクセスを禁止することを検討してください。&lt;br /&gt;
* [https://github.com/agherzan/yubikey-full-disk-encryption#enable-nfc-support-in-ykfde-initramfs-hook-experimental NFC サポート] (実験的)&lt;br /&gt;
* [https://github.com/agherzan/yubikey-full-disk-encryption#enable-ykfde-suspend-service-experimental サスペンドと復帰のサポート] (実験的) サスペンド時に、暗号化されたボリュームが自動的にロックされます。復帰時に自動でアンロックします。&lt;br /&gt;
&lt;br /&gt;
設定の変更を行った時は、変更を反映させるために initramfs の再生成を行わなければなりません。&lt;br /&gt;
&lt;br /&gt;
==== systemd ベースの initramfs ====&lt;br /&gt;
&lt;br /&gt;
{{ic|sd-encrypt}} フックのユーザは {{AUR|mkinitcpio-ykfde}} か {{AUR|mkinitcpio-ykfde-git}} をインストールし、[https://github.com/eworm-de/mkinitcpio-ykfde/blob/master/README-mkinitcpio.md プロジェクトのドキュメント]にある手順に従ってください。手順は、大まかに言えば {{Pkg|yubikey-full-disk-encryption}} に似ています。&lt;br /&gt;
&lt;br /&gt;
==== GnuPG 暗号化キーファイル ====&lt;br /&gt;
&lt;br /&gt;
これを行うためのツールの一つは [https://github.com/fuhry/initramfs-scencrypt initramfs-scencrypt] です。完全な手順についてはドキュメントを見てください。2022年10月以降、このパッケージは、GitHub で PKGBUILD が提供されていますが、AUR に存在せず、徹底的にテストもされていないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[dm-crypt/特記事項#GPG や OpenSSL で暗号化されたキーファイルを使う|Dm-crypt のページ]]ではいくつかの代替策が提示されています。しかし、それらの殆どがフォーラムの古い投稿へのリンクです。&lt;br /&gt;
&lt;br /&gt;
==== FIDO2 プロトコルの HMAC secret extension ====&lt;br /&gt;
&lt;br /&gt;
YubiKey を完全ディスク暗号化に使うもう一つの方法は、[https://fidoalliance.org/specs/fido-v2.0-id-20180227/fido-client-to-authenticator-protocol-v2.0-id-20180227.html#sctn-hmac-secret-extension HMAC Secret Extension] を使用して、YubiKey から LUKS のパスワードを取得することです。これはパスフレーズによって保護することができます。この機能には、少なくとも[https://support.yubico.com/hc/en-us/articles/360016649319-YubiKey-5-2-3-Enhancements-to-FIDO-2-Support ファームウェア 5.2.3+ のYubiKey 5] が必要です。&lt;br /&gt;
パスフレーズによる保護の方法では、{{AUR|khefin}} をインストールし、[https://github.com/mjec/khefin/wiki/Arch-Linux-LUKS-configuration プロジェクトのドキュメント]にある手順に従ってください。&lt;br /&gt;
systemd 248 以降での(任意で PIN による保護が施された)1要素による方法では、FIDO2 キーを LUKS2 キースロットとして使用できます。手順は[https://0pointer.net/blog/unlocking-luks2-volumes-with-tpm2-fido2-pkcs11-security-hardware-on-systemd-248.html 作者のブログ投稿]で見られます。&lt;br /&gt;
&lt;br /&gt;
=== KeePass ===&lt;br /&gt;
&lt;br /&gt;
[[KeePass]] は YubiKey をサポートするように設定できます。手順は [[KeePass#Yubikey|YubiKey セクション]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== SSH 鍵 ===&lt;br /&gt;
&lt;br /&gt;
==== CCID ====&lt;br /&gt;
&lt;br /&gt;
あなたの YubiKey が CCID スマートカードをサポートしているのであれば、GPG 鍵や PIV 鍵のどちらかをベースとしてハードウェアによる [[SSH 鍵]] として使用することができます。Yubico は品質の良いドキュメントを提供しています:&lt;br /&gt;
* [https://developers.yubico.com/PIV/Guides/Securing_SSH_with_OpenPGP_or_PIV.html PGP と PIV の両方の可能性から見た概要]、それらの利点と欠点を挙げています。&lt;br /&gt;
* [https://developers.yubico.com/PGP/SSH_authentication/index.html PGP 認証]のための手順&lt;br /&gt;
* [https://developers.yubico.com/PIV/Guides/SSH_user_certificates.html ユーザ証明書による PIV 認証]のための手順&lt;br /&gt;
* [https://developers.yubico.com/PIV/Guides/SSH_with_PIV_and_PKCS11.html #PKCS11 による PIV 認証]のための手順&lt;br /&gt;
&lt;br /&gt;
:{{Note|YubiKey 上の PIV アプリケーションデフォルトの PIN コードは {{ic|123456}} です。デフォルトの管理キーと一緒に PIN コードも変更しておくべきでしょう。詳細は [https://developers.yubico.com/PIV/Guides/Device_setup.html デバイスセットアップの手順] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
==== U2F ====&lt;br /&gt;
&lt;br /&gt;
YubiKey の U2F の機能を使用してハードウェアによる SSH 鍵を作成することもできます。手順は [[SSH 鍵#FIDO/U2F]] を見てください。&lt;br /&gt;
&lt;br /&gt;
==== PIV ====&lt;br /&gt;
&lt;br /&gt;
{{AUR|yubikey-agent}} は SSH 鍵 を PIV トークンとして保存します。セットアップガイドは https://github.com/FiloSottile/yubikey-agent#readme を見てください。&lt;br /&gt;
&lt;br /&gt;
=== PAM を用いた Linux ユーザ認証 ===&lt;br /&gt;
&lt;br /&gt;
ユーザ認証のために [[PAM]] を使用するすべてのものは、ユーザ認証のプロセスの一つの要素として YubiKey を使用するように設定できます。これには sudo、su、ssh、スクリーンロッカー、ディスプレイマネージャー、そして Linux システムがユーザを認証する必要のあるほぼすべての場面を含みます。その柔軟な設定により、システム全体や特定のアプリケーション、あるいはアプリケーションのグループに対して、あなたのニーズに合う認証要件を自由に設定することができます。例えば、ローカルセッションではパスワードの代わりとして YubiKey を受け入れ、リモートのセッションでは両方を要求することができます。これがどのように機能し、どのように設定するのかを理解するために、Arch Wiki の記事に加えて、{{man|8|pam}} や {{man|5|pam.conf}} を読むことをおすすめします。&lt;br /&gt;
&lt;br /&gt;
YubiKey がサポートするプロトコルを PAM に統合するのに利用できるモジュールが複数あります:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|pam-u2f}} - FIDO2 規格による [[#U2F]] をサポート。どの手法を使うべきかわからない場合、これが良い選択です。&lt;br /&gt;
** [[Universal 2nd Factor#Arch Linux の認証|Arch Wiki の記事]]&lt;br /&gt;
** [https://developers.yubico.com/pam-u2f/ Yubico の公式ドキュメント]、サポートされるモジュールパラメータのリストがあります。&lt;br /&gt;
** Man ページ: {{man|8|pam_u2f}}、{{man|1|pamu2fcfg}}&lt;br /&gt;
* {{Pkg|oath-toolkit}} - [[#OATH]] ワンタイムパスワードをサポート(HOTP か TOTP)。&lt;br /&gt;
** [[pam_oath]]&lt;br /&gt;
* {{Pkg|yubico-pam}} - [[#Yubico OTP]] と チャレンジレスポンス認証 OTP をサポート。Yubico OTP モードでは認証サーバーへのネットワーク接続が必要であることに注意してください。チャレンジレスポンス認証では必要ありません。&lt;br /&gt;
** [https://developers.yubico.com/yubico-pam/ Yubico の公式ドキュメント]&lt;br /&gt;
** {{man|8|pam_yubico}} - チャレンジレスポンス認証モードを設定するのに使用される {{ic|mode}} パラメータに注意してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|PAM の設定ファイルを変更する際には厳重な注意が必要です。間違うと、システムが完全に安全ではなくなったり、安全すぎて認証できなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
PAM の設定はこの記事の範囲を超えますが、簡単な概要としては:&lt;br /&gt;
&lt;br /&gt;
* 認証されたキーを含むファイルをホームディレクトリ内か一元的に作成する。&lt;br /&gt;
* 適切な PAM 設定ファイルの適切な場所に、以下のフォーマットに従う行を追加する:&lt;br /&gt;
    auth [required|sufficient] [module_name].so [module arguments]&lt;br /&gt;
* 多要素認証には {{ic|auth required}}、単一要素認証には {{ic|auth sufficient}}。&lt;br /&gt;
* {{ic|module_name}} - 例: {{ic|pam_u2f.so}}。インストールされているモジュールのリストを見てください: {{ic|ls /usr/lib/security }}&lt;br /&gt;
* モジュールの設定引数は、キーファイルの場所や、認証するためにどの手法をモジュールが使用すべきかなどです。&lt;br /&gt;
&lt;br /&gt;
==== SSH における注意事項 ====&lt;br /&gt;
&lt;br /&gt;
* Yubico は[https://developers.yubico.com/yubico-pam/Yubikey_and_SSH_via_PAM.html 追加のガイダンス]を公開しています。これは Ubuntu の古いバージョン向けですが、アップデートされている Arch システムにも適用できます。&lt;br /&gt;
* 遠隔地にあるサーバを YubiKey を使用するように設定する場合、追加で少なくとも一つの緊急用 SSH セッションを開いておくべきです。こうすれば、設定ミスにより締め出されないで済みます。&lt;br /&gt;
* {{ic|/etc/ssh/sshd_config}} に以下の設定が含まれていることを確認してください。{{Pkg|openssh}} に同梱されている {{ic|sshd_config}} はデフォルトでこれらが正しく設定されています。&lt;br /&gt;
    ChallengeResponseAuthentication no&lt;br /&gt;
    UsePAM yes&lt;br /&gt;
&lt;br /&gt;
=== ブラウザ/web 統合 ===&lt;br /&gt;
&lt;br /&gt;
多くのウェブサービスが FIDO ハードウェアトークンをサポートし始めています。詳細は [[U2F]] や [[WebAuthn]] のページを見てください。しかし、通常、するべきことといえば {{Pkg|libfido2}} をインストールして [https://demo.yubico.com/webauthn-technical/registration 試してみる]ことくらいです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== YubiKey デバイスの挿入/除去時にアクションを実行する ===&lt;br /&gt;
&lt;br /&gt;
例えば、USB スロットから YubiKey を抜いた時にアクションを実行したいとしましょう。{{ic|/etc/udev/rules.d/80-yubikey-actions.rules}} を作成し、以下の内容を追加してください:&lt;br /&gt;
&lt;br /&gt;
 ACTION==&amp;quot;remove&amp;quot;, ENV{ID_VENDOR}==&amp;quot;Yubico&amp;quot;, ENV{ID_VENDOR_ID}==&amp;quot;1050&amp;quot;, ENV{ID_MODEL_ID}==&amp;quot;0010|0111|0112|0113|0114|0115|0116|0401|0402|0403|0404|0405|0406|0407|0410&amp;quot;, RUN+=&amp;quot;&#039;&#039;/usr/local/bin/script args&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
注意すべきなのは、ほとんどのキーはこの例でカバーされていますが、すべてのバージョンの YubiKey で動作するとは限らないということです。lsusb の出力を見て、ベンダーとモデル ID をデバイスの説明と共に得るか、udevadm を使って情報を得る必要があります。もちろん、YubiKey の挿入時にスクリプトを実行したい場合は、アクションを &amp;quot;remove&amp;quot; ではなく &amp;quot;add&amp;quot; にしてください。&lt;br /&gt;
&lt;br /&gt;
=== 挿入時に Yubico Authenticator を開始する ===&lt;br /&gt;
&lt;br /&gt;
Authenticator は長時間実行される GUI プロセスです。Udev ルール内で直接実行すると、プロセスが udev の処理をブロックしてしまいます。フォークすると、イベント処理の終了後に udev は無条件で (フォークによって生成された) プロセスをキルしてしまいます。なので、authenticator を udev ルールから開始することはできません。しかし、systemd.device を使うことができます。&lt;br /&gt;
&lt;br /&gt;
上記と同じように、{{ic|/etc/udev/rules.d/80-yubikey-actions.rules}} を作成して、以下の内容を書き込んでください:&lt;br /&gt;
&lt;br /&gt;
 ENV{ID_VENDOR}==&amp;quot;Yubico&amp;quot;, ENV{ID_VENDOR_ID}==&amp;quot;1050&amp;quot;, ENV{ID_MODEL_ID}==&amp;quot;0010|0111|0112|0113|0114|0115|0116|0401|0402|0403|0404|0405|0406|0407|0410&amp;quot;, SYMLINK+=&amp;quot;yubikey&amp;quot;, TAG+=&amp;quot;systemd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
そして、新しい systemd [[ユーザーユニット]]を[[作成]]してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/systemd/user/yubioath-desktop.service|2=&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Autostart Yubico Authenticator&lt;br /&gt;
# Uncomment if you want to stop the authenticator when unplugged.&lt;br /&gt;
#StopPropagatedFrom=dev-yubikey.device&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=dev-yubikey.device&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/yubioath-desktop&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
そして、このユニットを[[有効化]]してください。&#039;&#039;systemctl&#039;&#039; が、このユニットが存在しない {{ic|dev-yubikey.device}} ユニットの依存関係として追加されたことを警告してきますが、問題ありません。このユニットは、YubiKey が挿入されると開始されます。&lt;br /&gt;
&lt;br /&gt;
== メンテナンス/アップグレード ==&lt;br /&gt;
&lt;br /&gt;
=== YubiKey NEO 用に OATH アプレットをインストールする ===&lt;br /&gt;
&lt;br /&gt;
以下のステップで、YubiKey NEO に OATH アプレットをインストールできます。Google Play Store の Yubico Authenticator を使えるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=以下のステップは、ファームウェアバージョン &amp;lt;= 3.1.2 の NEO でのみ必要です。現在の世代の NEO (U2F 搭載) は OpenPGP アプレットがすでにインストールされています。}}&lt;br /&gt;
&lt;br /&gt;
==== NEO を CCID デバイスとして設定する ====&lt;br /&gt;
&lt;br /&gt;
# {{Pkg|yubikey-personalization-gui}} ({{AUR|yubikey-personalization-gui-git}}) を[[インストール]]。&lt;br /&gt;
# udev ルールを追加して再起動すれば root にならなくても YubiKey を扱えるようになります。&lt;br /&gt;
# {{ic|ykpersonalize -m82}} を実行し、{{ic|y}} を入力、エンターを押す。&lt;br /&gt;
&lt;br /&gt;
==== アプレットをインストールする ====&lt;br /&gt;
&lt;br /&gt;
# {{AUR|gpshell}}、{{AUR|gppcscconnectionplugin}}、{{AUR|globalplatform}}、{{Pkg|pcsclite}} を[[インストール]]。&lt;br /&gt;
# {{ic|pcscd.service}} を[[起動]]。&lt;br /&gt;
# 最も最近の CAP ファイルを [https://developers.yubico.com/ykneo-oath/Releases/ ykneo-oath] サイトからダウンロード。&lt;br /&gt;
# {{ic|gpinstall.txt}} を [https://github.com/Yubico/ykneo-oath/blob/master/gpinstall.txt GitHub] からダウンロード。&lt;br /&gt;
# gpinstall.txt を編集して {{ic|install -file}} から始まる行を CAP ファイルが置かれているパスに修正。&lt;br /&gt;
# ターミナルを開き、{{ic|gpshell &#039;&#039;path/to/gpinstall.txt&#039;&#039;}} を実行。&lt;br /&gt;
# 理想的には、大量のテキストが流れて、最後に以下のようなものが書かれていることです:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;Command --&amp;gt; 80E88013D7C000C400BE00C700CA00CA00B400BE00CE00D200D500D700B000DB00C700DF00BEFFFF00BE00E400AC00AE00AE00DB00E700A&lt;br /&gt;
A00EA00ED00ED00ED00BE00EF00F100F400F100F700FA00FF00BE00F700AA01010103010700CA00C400B400AA00F700B400AA00B600C7010C&lt;br /&gt;
010C00AA0140012001B0056810B0013005600000056810E0011006B4B44304B44404B44106B44B4405B443400343B002410636810E06B4B44&lt;br /&gt;
407326810B004B43103441003334002B102B404B3B403BB4003B440076820A4100221024405B4341008B44600000231066820A100&lt;br /&gt;
Wrapped command --&amp;gt; 84E88013DFC000C400BE00C700CA00CA00B400BE00CE00D200D500D700B000DB00C700DF00BEFFFF00BE00E400AC00AE00AE00DB00E700A&lt;br /&gt;
A00EA00ED00ED00ED00BE00EF00F100F400F100F700FA00FF00BE00F700AA01010103010700CA00C400B400AA00F700B400AA00B600C7010C&lt;br /&gt;
010C00AA0140012001B0056810B0013005600000056810E0011006B4B44304B44404B44106B44B4405B443400343B002410636810E06B4B44&lt;br /&gt;
407326810B004B43103441003334002B102B404B3B403BB4003B440076820A4100221024405B4341008B44600000231066820A15D848CB77&lt;br /&gt;
27D0EDA00&lt;br /&gt;
Response &amp;lt;-- 009000&lt;br /&gt;
Command --&amp;gt; 80E60C002107A000000527210108A00000052721010108A000000527210101010003C901000000&lt;br /&gt;
Wrapped command --&amp;gt; 84E60C002907A000000527210108A00000052721010108A000000527210101010003C9010000B4648127914A4C7C00&lt;br /&gt;
Response &amp;lt;-- 009000&lt;br /&gt;
card_disconnect&lt;br /&gt;
release_context&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
# NEO を抜き、Yubico Authenticator アプリで試す。&lt;br /&gt;
&lt;br /&gt;
==== (任意)Yubico Authenticator デスクトップクライアントをインストールする ====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|yubioath-desktop}} をインストールすることで、Yubico Authenticator のデスクトップバージョンを取得できます。&lt;br /&gt;
&lt;br /&gt;
{{ic|pcscd.service}} が実行中の間に、{{ic|yubioath-desktop}} を実行して、プロンプトが表示されたら YubiKey を挿入してください。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
Yubikey が最後に機能したときからアップデートを実行した場合特に、再起動を行ってください。一部の機能が問題なく動いているようでも再起動してください。&lt;br /&gt;
&lt;br /&gt;
=== YubiKey が HID デバイスとして機能しない ===&lt;br /&gt;
&lt;br /&gt;
{{Note|1=[https://github.com/systemd/systemd/commit/d45ee2f31a8358db0accde2e7c81777cedadc3c2 バージョン 244以降の systemd は]この機能に対するネイティブサポートを追加したので、以下のステップはもはや必要ありません。}}&lt;br /&gt;
&lt;br /&gt;
[https://michaelheap.com/yubikey-on-arch/ この記事]で説明されているように、udev ルールを追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/udev/rules.d/10-security-key.rules|2=&lt;br /&gt;
KERNEL==&amp;quot;hidraw*&amp;quot;, SUBSYSTEM==&amp;quot;hidraw&amp;quot;, MODE=&amp;quot;0664&amp;quot;, GROUP=&amp;quot;users&amp;quot;, ATTRS{idVendor}==&amp;quot;2581&amp;quot;, ATTRS{idProduct}==&amp;quot;f1d0&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
その後、{{ic|udevadm trigger}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
=== ykman が YubiKey に接続できない ===&lt;br /&gt;
&lt;br /&gt;
マネージャが YubiKey への接続に失敗する場合、{{ic|pcscd.service}} か {{ic|pcscd.socket}} が起動していることを確認してください。&lt;br /&gt;
&lt;br /&gt;
=== Error: Failed connecting to YubiKey 5 [OTP+FIDO+CCID]. Make sure the application have the required permissions. ===&lt;br /&gt;
&lt;br /&gt;
これは、{{ic|scdaemon}} がすでにデバイスの排他的な制御を取得している場合に {{ic|ykman}} がデバイスの oath 認証情報にアクセスした際に発生する可能性があります。[https://github.com/Yubico/yubikey-manager/issues/35]&lt;br /&gt;
&lt;br /&gt;
これを修正するには、{{ic|~/.gnupg/scdaemon.conf}} 内であなたのデバイスに対して {{ic|reader-port}} オプションを正しい値で設定することができます。[https://support.yubico.com/hc/en-us/articles/360013714479-Troubleshooting-Issues-with-GPG]&lt;br /&gt;
&lt;br /&gt;
{{Note|これにより、ykman を通して YubiKey にアクセスするたびに gpgagent が YubiKey をアンロックするプロンプトを表示するようになります。}}&lt;br /&gt;
&lt;br /&gt;
YubiKey NEO と YubiKey 4 の場合:&lt;br /&gt;
&lt;br /&gt;
 reader-port Yubico Yubikey&lt;br /&gt;
&lt;br /&gt;
YubiKey 5 の場合:&lt;br /&gt;
&lt;br /&gt;
 reader-port Yubico Yubi&lt;br /&gt;
&lt;br /&gt;
=== YubiKey がゲスト VM 内でバインドできない ===&lt;br /&gt;
&lt;br /&gt;
YubiKey がゲストで利用可能であると仮定すると、この問題はドライバがホストのデバイスにバインドしている結果です。デバイスのバインドを解除するには、ホストの [[dmesg]] からバスとポートの情報を手に入れる必要があります:&lt;br /&gt;
&lt;br /&gt;
 # dmesg | grep -B1 Yubico | tail -n 2 | head -n 1 | sed -E &#039;s/^\&amp;lt;nowiki&amp;gt;[[^]]&amp;lt;/nowiki&amp;gt;+\] usb (&amp;lt;nowiki&amp;gt;[^:]&amp;lt;/nowiki&amp;gt;*):.*/\1/&#039;&lt;br /&gt;
&lt;br /&gt;
出力の USB id は {{ic|X-Y.Z}} または {{ic|X-Y}} の形式であるはずです。そして、ホスト上で、{{ic|find}} を使って {{ic|/sys/bus/usb/drivers}} を検索し、YubiKey がバインドしているドライバを探します (例: {{ic|usbhid}} または {{ic|usbfs}})。&lt;br /&gt;
&lt;br /&gt;
 $ find /sys/bus/usb/drivers -name &amp;quot;*X-Y.Z*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
デバイスのバインドを解除するには、先のコマンドの出力を使ってください (つまり、{{ic|/sys/bus/usb/drivers/&#039;&#039;DRIVER&#039;&#039;/X-Y.Z:1.0}}):&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;X-Y.Z:1.0&#039; &amp;gt; /sys/bus/usb/drivers/&#039;&#039;DRIVER&#039;&#039;/unbind&lt;br /&gt;
&lt;br /&gt;
=== Error: [key] could not be locally signed or gpg: No default secret key: No public key ===&lt;br /&gt;
&lt;br /&gt;
これは、YubiKey が挿入された状態で非標準的なキーリングでキーの署名をしようとした際に起こります(例えば、[[pacman-key|Pacman]] が {{ic|pacman-key --populate}} で行うように)。解決策は、問題を起こしている YubiKey を取り外してやり直すことです。&lt;br /&gt;
&lt;br /&gt;
=== YubiKey が Yubico Authenticator で消えたり現れたりする ===&lt;br /&gt;
&lt;br /&gt;
これは、CCID ドライバがインストールされていない際に起こります。{{Pkg|ccid}} パッケージを[[インストール]]する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== YubiKey core error: timeout ===&lt;br /&gt;
&lt;br /&gt;
おそらく間違ったスロットを使用しています。もう一方のスロットで試してみてください。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|YubiKey|2024-08-26|814790}}&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Btrfs&amp;diff=39047</id>
		<title>Btrfs</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Btrfs&amp;diff=39047"/>
		<updated>2024-09-19T13:50:41Z</updated>

		<summary type="html">&lt;p&gt;Hikali: &amp;#039;&amp;#039;mylabel&amp;#039;&amp;#039; と /dev/&amp;#039;&amp;#039;partition&amp;#039;&amp;#039; の間にspace( )を追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[de:Arch auf BtrFS]]&lt;br /&gt;
[[en:Btrfs]]&lt;br /&gt;
[[es:Btrfs]]&lt;br /&gt;
[[pt:Btrfs]]&lt;br /&gt;
[[ru:Btrfs]]&lt;br /&gt;
[[zh-hans:Btrfs]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ファイルシステム}}&lt;br /&gt;
{{Related|Snapper}}&lt;br /&gt;
{{Related|Yabsnap}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://btrfs.wiki.kernel.org/index.php/Main_Page Btrfs Wiki] より:&lt;br /&gt;
&lt;br /&gt;
:Btrfs は、耐障害性、修復、および簡単な管理に重点を置きながら、高度な機能を実装することを目的とした Linux 用の最新のコピーオンライト(CoW)ファイルシステムです。複数の企業で共同開発された Btrfs は、GPL に基づいてライセンスされており、誰からの寄付も受け付けています。&lt;br /&gt;
&lt;br /&gt;
{{Note|他のファイルシステムと同様に、Btrfs は継続的に開発中です。これは、特定の機能がまだ日常的に使用できる状態になっていない可能性があります。使用事例が影響を受ける可能性があるかどうかを確認するには、Btrfs ドキュメントの [https://btrfs.readthedocs.io/en/latest/Status.html Status] とこの記事の [[Btrfs#既知の問題|既知の問題]] セクションを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
== 準備 ==&lt;br /&gt;
&lt;br /&gt;
ユーザースペースのユーティリティについては、基本的な操作に必要な {{Pkg|btrfs-progs}} パッケージを [[インストール]] してください。&lt;br /&gt;
&lt;br /&gt;
Btrfs ファイルシステムから起動する必要がある場合 (つまり、カーネルと initramfs が Btrfs パーティションにある場合)、あなたの [[ブートローダー]] が Btrfs をサポートしているか確認してください。&lt;br /&gt;
&lt;br /&gt;
== ファイルシステムの作成 ==&lt;br /&gt;
&lt;br /&gt;
以下は、新しい Btrfs [[ファイルシステム]] を作成する方法を示しています。ext3/4 パーティションを Btrfs に変換するには、[[Btrfs#Ext3/4 から Btrfs への変換|Ext3/4 から Btrfs への変換]] を見て下さい。パーティションレスなセットアップを使うには、[[Btrfs#パーティションレス Btrfs ディスク|パーティションレス Btrfs ディスク]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|8|mkfs.btrfs}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 単一デバイス上のファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
パーティション {{ic|/dev/&#039;&#039;partition&#039;&#039;}} に Btrfs ファイルシステムを作るには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L &#039;&#039;mylabel&#039;&#039; /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
メタデータの Btrfs のデフォルトのノードサイズは 16KB ですが、データのデフォルトのセクターサイズはページサイズと同じで、自動検出されます。メタデータに大きなノードサイズを使用するには(セクターサイズの倍数である必要があり、最大 64KB が許可されます)、この例に示すように、{{ic|-n}} スイッチを介して {{ic|nodesize}} の値を指定します 32KB ブロックの使用例:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L &#039;&#039;mylabel&#039;&#039; -n 32k /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|8|mkfs.btrfs|OPTIONS}} によると、&amp;quot;[a]ノードサイズが小さいほど断片化は増加しますが、bツリーが高くなり、ロックの競合が少なくなります。ノードサイズが大きいほど、メタデータブロックを更新する際のメモリ操作のコストが高くなりますが、パッキングが向上し、断片化が少なくなります&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== マルチデバイス対応ファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|Btrfs の RAID 5 と RAID 6 モードには致命的な欠陥があり、&amp;quot;捨てデータでのテスト以外&amp;quot; には使用しないでください。[https://lore.kernel.org/linux-btrfs/20200627032414.GX10769@hungrycats.org/ 既知の問題と部分的な回避策のリスト]。状況の更新については [https://btrfs.wiki.kernel.org/index.php/RAID56 the Btrfs page on RAID5 and RAID6] を見て下さい (更新されていないようです)}}&lt;br /&gt;
&lt;br /&gt;
複数のデバイスを使用して RAID を作成することができます。サポートされている RAID レベルは RAID 0, RAID 1, RAID 10, RAID 5, RAID 6 です。カーネル 5.5 からは RAID1c3 と RAID1c4 で RAID1 レベルの 3-コピーと 4-コピーが可能です。RAIDレベルは、データ用とメタデータ用にそれぞれ {{ic|-d}} と {{ic|-m}} オプションを使って別々に設定することができます。デフォルトでは、データは1つのコピー ({{ic|single}}) で、メタデータはミラーリング ({{ic|raid1}}) された状態になっています。これは &lt;br /&gt;
[[W:JBOD|JBOD configuration]] を作成すると、ディスクは1つのファイルシステムとして認識されますが、ファイルは複製されません。Btrfs RAID ボリュームを作成する方法についての詳しい情報は [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices Using Btrfs with Multiple Devices] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -d single -m raid1 /dev/&#039;&#039;part1&#039;&#039; /dev/&#039;&#039;part2&#039;&#039; ...&lt;br /&gt;
&lt;br /&gt;
プールで複数の Btrfs デバイスを使うには {{ic|udev}} フックか {{ic|btrfs}} フックを {{ic|/etc/mkinitcpio.conf}} に記述する必要があります。詳しくは [[Mkinitcpio#HOOKS]] の記事を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* マルチデバイスファイルシステムに後からデバイスを追加することも可能です。詳しくは [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices Btrfs wiki article] を見て下さい。&lt;br /&gt;
* デバイスは異なるサイズにすることができます。しかし、RAID 構成の1つのドライブが他のドライブより大きい場合、この余分なスペースは使用されません。&lt;br /&gt;
* [[Syslinux]] などのいくつかの [[ブートローダー]] はマルチデバイスファイルシステムをサポートしません。&lt;br /&gt;
* Btrfs は自動的に最速のデバイスから読み込むわけではないので、異なる種類のディスクを混在させるとパフォーマンスに一貫性がなくなります。詳しくは [https://stackoverflow.com/a/55408367] を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
マルチデバイス Btrfs ファイルシステム特有のメンテナンスに関するアドバイスは [[#RAID]] をご覧下さい。&lt;br /&gt;
&lt;br /&gt;
== ファイルシステムの構成 ==&lt;br /&gt;
&lt;br /&gt;
=== コピーオンライト (CoW)===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは Btrfs は全てのファイルに対して常に [[Wikipedia:copy-on-write|copy-on-write]] を使用します。書き込みはその場のデータを上書きしません; 代わりに、ブロックの修正されたコピーが新しい場所に書き込まれ、メタデータは新しい場所を指すように更新されます。実装の詳細や利点と欠点については [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Copy_on_Write_.28CoW.29 Btrfs Sysadmin Guide セクション] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== CoW の無効化 ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|Btrfs で CoW を無効にすると、チェックサムも無効になります。 Btrfs は破損した {{ic|nodatacow}} ファイルを検出できません。 RAID 1 と組み合わせると、停電やその他の破損原因により、データが同期しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
マウントされたサブボリュームで新しく作成されたファイルのコピー オン ライトを無効にするには、{{ic|nodatacow}} マウント オプションを使用します。これは、新しく作成されたファイルにのみ影響します。コピーオンライトは、既存のファイルに対して引き続き影響します。 {{ic|nodatacow}} オプションも圧縮を無効にします。詳しくは {{man|5|btrfs}} をご覧ください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|5|btrfs|MOUNT OPTIONS}} から:&lt;br /&gt;
&lt;br /&gt;
:単一のファイル システム内で、一部のサブボリュームを {{ic|nodatacow}} でマウントし、他のサブボリュームを {{ic|datacow}} でマウントすることはできません。最初にマウントされたサブボリュームのマウント オプションは、他のサブボリュームに適用されます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファイルやディレクトリ単体で CoW を無効化するには、次のコマンドを使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ chattr +C &amp;lt;/dir/file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これにより、ファイルへの参照が 1つしかない操作のコピーオンライトが無効になります。複数の参照がある場合。ファイル クローン/軽量クローンまたはファイルシステムスナップショットが原因で、コピーオンライトが引き続き発生します。{{Pkg|coreutils}} 9.0 以降、{{ic|cp}} はデフォルトで軽量コピーを実行しようとすることに注意してください。詳細については、{{man|1|cp}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|1|chattr}} から:&lt;br /&gt;
&lt;br /&gt;
:btrfs の場合、&#039;{{ic|C}}&#039; フラグを新しいファイルまたは空のファイルに設定する必要があります。すでにデータブロックがあるファイルに設定されている場合、ファイルに割り当てられたブロックが完全に安定する時期は未定義です。&#039;{{ic|C}}&#039; フラグがディレクトリに設定されている場合、ディレクトリには影響しませんが、そのディレクトリに作成された新しいファイルには {{ic|No_COW}} 属性が含まれます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=上記のメモに従い、次のトリックを使用して、ディレクトリ内の既存のファイルのコピーオンライトを無効にすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ mv &#039;&#039;/path/to/dir&#039;&#039; &#039;&#039;/path/to/dir&#039;&#039;_old&lt;br /&gt;
 $ mkdir &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ chattr +C &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ cp -a --reflink=never &#039;&#039;/path/to/dir&#039;&#039;_old/. &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ rm -rf &#039;&#039;/path/to/dir&#039;&#039;_old&lt;br /&gt;
&lt;br /&gt;
このプロセス中にデータが使用されていないことを確認してください。また、後述のように {{ic|1=--reflink=never}} を指定しない {{ic|mv}} または {{ic|cp}} は機能しないことに注意してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== スナップショットへの影響 =====&lt;br /&gt;
&lt;br /&gt;
ファイルのコピーオンライトが無効 (NOCOW) でスナップショットが作成された場合、スナップショットは古いファイルブロックを所定の位置にロックするため、スナップショット後のファイルブロックへの最初の書き込みは [https://www.spinics.net/lists/linux-btrfs/msg33090.html COW 操作] になります。ただし、ファイルは NOCOW 属性を保持し、同じファイルブロックへの後続の書き込みは次のスナップショットまでそのまま残ります。&lt;br /&gt;
&lt;br /&gt;
スナップショットを頻繁に行うと、最初の書き込みで COW が必要になるため、NOCOW の効果が低下する可能性があります。そのようなファイルのコピーオンライトを完全に避けるには、それらを別のサブボリュームに入れ、そのサブボリュームのスナップショットを作成しないでください。&lt;br /&gt;
&lt;br /&gt;
=== 圧縮 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は [https://btrfs.wiki.kernel.org/index.php/Compression 透過的自動圧縮] をサポートしています。これはファイルサイズを小さくするだけでなく、書き込み増幅を減らすことでフラッシュベースのメディアの寿命を大幅に延ばします。[[Fedora:Changes/BtrfsByDefault#Compression]], [https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/NTV77NFF6NDZM3QTPUM2TQZ5PCM6GOO2/], [https://pagure.io/fedora-btrfs/project/issue/36#comment-701551] を参照して下さい。また、[https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs_compress_2635&amp;amp;num=1 パフォーマンスを向上させる] 場合もありますが(例:重いファイル I/O を持つシングルスレッド)、(例:大きなファイル I/O を持つマルチスレッドや CPU 集中タスク)では明らかにパフォーマンスを低下させることがあります。一般に、最速の圧縮アルゴリズムである &#039;&#039;zstd&#039;&#039; と &#039;&#039;lzo&#039;&#039; を用いると、より良いパフォーマンスが得られます。いくつかの [https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs-zstd-compress benchmarks] では、詳細な比較がなされています。&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;alg&#039;&#039;}} は {{ic|zlib}}, {{ic|lzo}}, {{ic|zstd}}, あるいは {{ic|no}} のいずれかです。(圧縮しない場合) このオプションを使うと、btrfs はデータの最初の部分を圧縮することで縮小されるかどうかをチェックします。 もしそうなら、そのファイルへの書き込み全体が圧縮されます。 そうでない場合は、何も圧縮されません。 このオプションでは、書き込みの最初の部分が縮小しない場合、残りのデータが非常に縮小しても、書き込みに圧縮は適用されません。[https://btrfs.wiki.kernel.org/index.php/Compression#What_happens_to_incompressible_files.3F] これは、書き込むべき全てのデータが btrfs に完全に与えられ圧縮されるまで、ディスクの書き込み開始を待たせるのを防ぐために行われます。&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|1=compress-force=&#039;&#039;alg&#039;&#039;}} マウントオプションを使うと、btrfs が最初の部分を圧縮しているかどうかのチェックをスキップし、全てのファイルに対して自動的に圧縮を試行することが可能になります。 最悪の場合、これは何の目的もなく CPU 使用量を (少し) 増加させる可能性があります。しかし、複数の用途が混在するシステムでの経験的なテストでは、 {{ic|1=compress-force=&#039;&#039;zstd&#039;&#039;}} を使うことで、ただの {{ic|1=compress=&#039;&#039;zstd&#039;&#039;}} に比べて約10%のディスク圧縮という大きな改善がありました、この場合も 10% のディスク圧縮でした。&lt;br /&gt;
&lt;br /&gt;
マウントオプションが追加された後に作成または変更されたファイルのみが圧縮されます。&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;alg&#039;&#039;}} は {{ic|zlib}}, {{ic|lzo}}, {{ic|zstd}} のいずれかです。例えば、ファイルシステム全体を {{pkg|zstd}} で再圧縮する場合、以下のコマンドを実行します。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem defragment -r -v -czstd /&lt;br /&gt;
&lt;br /&gt;
空の Btrfs パーティションに Arch をインストールするときに圧縮を有効にするには、ファイルシステムを [[マウント]] するときに {{ic|compress}} オプションを使ってください。{{ic|1=mount -o compress=zstd /dev/sd&#039;&#039;xY&#039;&#039; /mnt/}} となります。設定時に、[[fstab]]でルートファイルシステムのマウントオプションに {{ic|1=compress=zstd}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|マウントオプション {{ic|compress}} を使わずにファイル単位で圧縮を有効にすることもできます; そうするためには、ファイルに {{ic|chattr +c}} を適用します。ディレクトリに適用すると、新しいファイルが来たときに自動的に圧縮されます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* このオプションを使うと、古いカーネルや {{ic|zstd}} をサポートしていない {{pkg|btrfs-progs}} を使っているシステムは、ファイルシステムを読んだり修復したりできない可能性があります。&lt;br /&gt;
* [[GRUB]] は 2.04 で &#039;&#039;zstd&#039;&#039; のサポートを導入しました。MBR/ESP にインストールされたブートローダを実際にアップグレードしたことを確認してください。BIOS/UEFI セットアップに適したオプションで {{ic|grub-install}} を実行して、{{Bug|63235}} を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 圧縮の種類と比率を表示する ====&lt;br /&gt;
&lt;br /&gt;
{{pkg|compsize}} はファイルのリスト (または btrfs ファイルシステム全体) を受け取り、使用された圧縮タイプと有効な圧縮率を測定します。 非圧縮サイズは {{man|1|du}} のような他のプログラムによって与えられる数値と一致しないかもしれません。なぜなら、たとえ何度も再リンクされていても、たとえその一部がもうどこにも使われていないけれどゴミ収集されていないとしても、全てのエクステントは一度にカウントされるからです。 これは {{ic|compsize -x /}} のような状況で便利で、btrfs でないサブディレクトリを探そうとして、実行全体が失敗するのを避けます。&lt;br /&gt;
&lt;br /&gt;
=== サブボリューム ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;btrfs サブボリュームはブロックデバイスではありません(そしてブロックデバイスとして扱えません)代わりに btrfs サブボリュームは POSIX ファイル名空間として考えることができます。このネームスペースはファイルシステムのトップレベルのサブボリュームからアクセスすることもできますし、それ自体でマウントすることもできます&amp;quot; [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes]&lt;br /&gt;
&lt;br /&gt;
各 Btrfs ファイルシステムには ID 5 のトップレベルのサブボリュームがあります。これは {{ic|/}} としてマウントすることができます。(デフォルト) または、代わりに別のサブボリュームを [[Btrfs#サブボリュームをマウントする|マウントする]] こともできます。サブボリュームはファイルシステム内で移動することができ、パスよりもむしろその ID で識別されます。&lt;br /&gt;
&lt;br /&gt;
詳細については、次のリンクを参照してください:&lt;br /&gt;
&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes Btrfs Wiki SysadminGuide#Subvolumes]&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/Getting_started#Basic_Filesystem_Commands Btrfs Wiki Getting started#Basic Filesystem Commands]&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/Trees Btrfs Wiki Trees]&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームを作成する ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームを作成するには:&lt;br /&gt;
 # btrfs subvolume create &#039;&#039;/path/to/subvolume&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームを一覧する ====&lt;br /&gt;
&lt;br /&gt;
現在のサブボリュームのリストを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume list -p .&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームの削除 ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームを削除するには&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume delete &#039;&#039;/path/to/subvolume&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Linux 4.18 以降では、通常のディレクトリのようにサブボリュームを削除することもできます ({{ic|rm -r}}, {{ic|rmdir}})&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームをマウントする ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームは {{ic|1=subvol=&#039;&#039;/path/to/subvolume&#039;&#039;}} や {{ic|1=subvolid=&#039;&#039;objectid&#039;&#039;}} マウントフラグを使うことでファイルシステムのパーティションと同じようにマウントできます。例えば、{{ic|subvol_root}} という名前のサブボリュームが存在したら {{ic|/}} にマウントすることができます。ファイルシステムのトップレベルにサブボリュームを作成して適切なマウントポイントにマウントすることで、伝統的なファイルシステムのパーティションと同じように使うことができ、[[Btrfs#スナップショット|スナップショット]] を使用してファイルシステムを前の状態に簡単に戻すことが可能です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=トップレベルのサブボリューム (ID=5) を {{ic|/}} として使用しないことでサブボリュームのレイアウトの変更を簡単にできます。サブボリュームを作成して実際のデータを保存して {{ic|/}} にマウントします。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|5|btrfs|MOUNT OPTIONS}} から&lt;br /&gt;
:ほとんどのマウントオプションは &#039;&#039;&#039;ファイルシステム全体&#039;&#039;&#039; に適用され、マウントされる最初のサブボリュームのオプションだけが有効になります。これは実装不足によるもので、将来的に変更されるかもしれません。&lt;br /&gt;
&lt;br /&gt;
サブボリュームごとにどのマウントオプションが使えるかは [https://btrfs.wiki.kernel.org/index.php/FAQ#Can_I_mount_subvolumes_with_different_mount_options.3F Btrfs Wiki FAQ] を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Snapper#推奨ファイルシステムレイアウト]], [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Managing_Snapshots Btrfs SysadminGuide#Managing Snapshots], [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Layout Btrfs SysadminGuide#Layout] などにサブボリュームを使用するファイルシステムレイアウトの例が存在します。&lt;br /&gt;
&lt;br /&gt;
btrfs 固有のマウントオプションの完全なリストは {{man|5|btrfs}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームをルートとしてマウントする ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームをルートマウントポイントとして使用するには、{{ic|1=rootflags=subvol=&#039;&#039;/path/to/subvolume&#039;&#039;}} を使用して [[カーネルパラメータ#設定|カーネルパラメータ]] 経由でサブボリュームを指定します。{{ic|/etc/fstab}} でルート・マウントポイントを編集し、マウント・オプションに {{ic|1=subvol=}} を指定します。または、サブボリュームの ID {{ic|1=rootflags=subvolid=&#039;&#039;objectid&#039;&#039;}} をカーネルパラメータとして使い、{{ic|1=subvolid=&#039;&#039;objectid&#039;&#039;}} を {{ic|/etc/fstab}} のマウントオプションとして指定することもできます。&lt;br /&gt;
&lt;br /&gt;
==== デフォルトのサブボリュームを設定する ====&lt;br /&gt;
&lt;br /&gt;
マウントオプションに {{ic|1=subvol=}} が指定されない場合、デフォルトのサブボリュームがマウントされます。デフォルトサブボリュームを変更するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume set-default &#039;&#039;subvolume-id&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
ここで、&#039;&#039;subvolume-id&#039;&#039; は [[Btrfs#サブボリュームを一覧する|listing]] で見つけることができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=[[GRUB]] があるシステムでデフォルトのサブボリュームを変更した後、ブートローダに変更を通知するために {{ic|grub-install}} を再度実行する必要があります。[https://bbs.archlinux.org/viewtopic.php?pid=1615373 このフォーラムのスレッド] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|btrfs subvolume set-default}} でデフォルトのサブボリュームを変更すると、ファイルシステムのトップレベルは {{ic|1=subvol=/}} や {{ic|1=subvolid=5}} マウントオプションを使ってアクセスする以外ではアクセスできなくなります [https://btrfs.wiki.kernel.org/index.php/SysadminGuide]&lt;br /&gt;
&lt;br /&gt;
=== クォータ ===&lt;br /&gt;
&lt;br /&gt;
{{warning|Qgroup はまだ安定状態ではなくサブボリュームのスナップショットとクォータを組み合わせると操作によってパフォーマンスに問題をきたします (スナップショットの削除など)。さらに [https://btrfs.wiki.kernel.org/index.php/Quota_support#Known_issues 既知の問題] が存在しています。}}&lt;br /&gt;
&lt;br /&gt;
Btrfs におけるクォータのサポートはクォータグループ (qgroup) を利用してサブボリュームレベルで実装されています: 各サブボリュームにはデフォルトで &#039;&#039;0/&amp;lt;subvolume id&amp;gt;&#039;&#039; という形式でクォータグループが割り当てられています。必要であればクォータグループを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
クォータグループを使うにはまずクォータを有効にする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # btrfs quota enable &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上記のコマンドを実行してから新しいサブボリュームを作成すると、グループによって制御が可能になります。既存のサブボリュームでも制御を行いたい場合、クォータを有効にしてから、&#039;&#039;&amp;lt;subvolume id&amp;gt;&#039;&#039; を使ってサブボリュームごとにクォータグループを作成して再スキャンしてください:&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d&#039; &#039; -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Btrfs のクォータグループはツリー構造になっていて、サイズ制限はクォータグループごとに設定し、ツリーに属しているサブボリュームに制限が課せられます。&lt;br /&gt;
&lt;br /&gt;
クォータグループで設定できる制限は合計データ使用量・非共有のデータ使用量・圧縮データ使用量、あるいはそれらを組み合わせたものです。元のボリュームファイルを削除してコピーを残す場合、他のクォータグループの非共有制限が変わるため、ファイルのコピーや削除で制限に抵触する可能性があります。例えば、新しいスナップショットが元のサブボリュームの全てのブロックと同じデータを持っている場合、どちらかのサブボリュームだけで共通データを削除するともう片方のサブボリュームの制限に引っかかる可能性があります。&lt;br /&gt;
&lt;br /&gt;
クォータグループに制限を設定するには、{{ic|btrfs qgroup limit}} コマンドを使います。合計使用量の制限や非共有制限 ({{ic|-e}}) または圧縮制限 ({{ic|-c}}) が設定できます。ファイルシステムの特定のパスにおける使用量や制限を表示するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs qgroup show -reF &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== コミット間隔の設定 ===&lt;br /&gt;
&lt;br /&gt;
データがファイルシステムに書き込まれる解像度は、Btrfs自体とシステム全体の設定によって決まります。 Btrfs のデフォルトは、新しいデータがファイルシステムにコミットされる30秒のチェックポイント間隔です。これは、btrfs パーティションの {{ic|/etc/fstab}} に {{ic|commit}} マウントオプションを追加することで変更できます。&lt;br /&gt;
&lt;br /&gt;
 LABEL=arch64 / btrfs defaults,compress=zstd,commit=120 0 0&lt;br /&gt;
&lt;br /&gt;
システム全体の設定もコミット間隔に影響します。これらには {{ic|/proc/sys/vm/*}} の下のファイルが含まれており、このwiki記事の範囲外です。それらのカーネルドキュメントは、https://www.kernel.org/doc/html/latest/admin-guide/sysctl/vm.html で入手できます。&lt;br /&gt;
&lt;br /&gt;
=== SSD TRIM ===&lt;br /&gt;
&lt;br /&gt;
Btrfs ファイルシステムは、TRIM コマンドをサポートする SSD ドライブから未使用のブロックを解放できます。カーネルバージョン 5.6 以降、非同期破棄がサポートされ、マウントオプション {{ic|1=discard=async}} で有効になります。解放されたエクステントはすぐには破棄されませんが、グループ化され、後で別のワーカースレッドによってトリミングされるため、コミットの待ち時間が短縮されます。&lt;br /&gt;
&lt;br /&gt;
TRIM の有効化と使用に関するより詳しい情報は [[ソリッドステートドライブ#TRIM]] に記載されています。&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
=== スワップファイル ===&lt;br /&gt;
&lt;br /&gt;
Btrfs の [[スワップファイル]] は Linux カーネル5.0 以降でサポートされています。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ed46ff3d423780fa5173b38a844bf0fdb210a2a7] スワップファイルを初期化する適切な方法は、最初にファイルをホストする非圧縮、非スナップショットのサブボリュームを作成し、そのディレクトリに &#039;&#039;cd&#039;&#039; してから、長さゼロのファイルを作成し、{{ic|No_COW}} を設定することです。 属性を [https://wiki.archlinux.jp/index.php/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E5%B1%9E%E6%80%A7#chattr_.E3.81.A8_lsattr chattr] で指定し、圧縮が無効になっていることを確認します。&lt;br /&gt;
&lt;br /&gt;
 # cd &#039;&#039;/path/to/swapfile&#039;&#039;&lt;br /&gt;
 # truncate -s 0 ./swapfile&lt;br /&gt;
 # chattr +C ./swapfile&lt;br /&gt;
 # btrfs property set ./swapfile compression none&lt;br /&gt;
&lt;br /&gt;
詳細な設定については、 [https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E4.BD.9C.E6.88.90 スワップファイルの作成] を参照してください。スワップファイルへの休止状態の構成については、[https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate#Hibernation_into_swap_file_on_Btrfs Hibernation into swap file on Btrfs]で説明されています。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Linux カーネル5.0 以降、 Btrfs にはネイティブスワップファイルのサポートがありますが、いくつかの制限があります。&lt;br /&gt;
* スワップファイルをスナップショットサブボリュームに置くことはできません。適切な手順は、スワップファイルを配置する新しいサブボリュームを作成することです。&lt;br /&gt;
* 複数のデバイスにまたがるファイルシステム上のスワップファイルはサポートされていません。 [https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F Btrfs wiki: Does btrfs support swap files?] および [https://bbs.archlinux.org/viewtopic.php?pid=1849371#p1849371 Arch forums discussion]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 使用領域 空き領域の表示 ===&lt;br /&gt;
&lt;br /&gt;
{{man|1|df}} のような一般的な linux ユーザースペースツールは Btrfs パーティションの空き容量を不正確に報告します。Btrfs パーティションを調べるには {{ic|btrfs filesystem usage}} を使うことが推奨されます。例えば、デバイスのアロケーションと使用状況の統計の完全な内訳を見るには、{{ic|btrfs filesystem usage}} を使って下さい。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem usage /&lt;br /&gt;
&lt;br /&gt;
{{Note|現在、{{ic|btrfs filesystem usage}} コマンドは {{ic|RAID5/RAID6}} では正しく動作していません。}}&lt;br /&gt;
&lt;br /&gt;
あるいは、{{ic|btrfs filesystem df}} を使えば、root で実行しなくても、割り当てられた領域の使用状況を素早くチェックすることができます。&lt;br /&gt;
&lt;br /&gt;
 $ btrfs filesystem df /&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://btrfs.wiki.kernel.org/index.php/FAQ#How_much_free_space_do_I_have.3F] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|du}} や {{man|1|ncdu}} のような、ファイルシステムのあるサブセットについて空間の使用状況を分析するツールにも同じ制限が適用され、これらは reflinks, snapshots, 圧縮を考慮しません。代わりに、btrfs を意識した代替手段は {{AUR|btdu}} と [[Btrfs#圧縮の種類と比率を表示する|圧縮の種類と比率を表示する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== デフラグメンテーション ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|Linux カーネル バージョン 5.16.x &amp;lt; 5.16.5 のメジャーレグレッションにより、一部のシステムで Btrfs デフラグが無限ループし、手動および自動デフラグの両方に影響があります。これにより、影響を受けるドライブに極端な I/O 負荷がかかり、ドライブの寿命が極端に短くなり、パフォーマンスに影響を与える可能性があります。このため、これらのバージョンで {{ic|autodefrag}} を使うことは推奨されません。むしろ {{ic|noautodefrag}} を使ってオンラインデフラグが無効になるようにすべきです。[https://www.reddit.com/r/linux/comments/sgybyr/psa_linux_516_has_major_regression_in_btrfs/] と [https://lore.kernel.org/linux-btrfs/CAEwRaO4y3PPPUdwYjNDoB9m9CLzfd3DFFk2iK1X6OyyEWG5-mg@mail.gmail.com/] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
Btrfs はマウントオプション {{ic|autodefrag}} でオンラインデフラグをサポートしています、{{man|5|btrfs|MOUNT OPTIONS}} を見て下さい。手動でルートのデフラグをするには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem defragment -r /&lt;br /&gt;
&lt;br /&gt;
上記のコマンドを {{ic|-r}} スイッチなしで使用すると、ディレクトリを含むサブボリュームが保持するメタデータのみがデフラグされる結果となります。このため、パスを指定するだけで単一ファイルのデフラグが可能です。&lt;br /&gt;
&lt;br /&gt;
COW コピー (スナップショット コピーまたは {{ic|cp}} や bcp で作成されたもの) を持つファイルに圧縮アルゴリズムで {{ic|-c}} スイッチを使用したデフラグを行うと、無関係の 2 つのファイルが効果的にディスク使用量を増加させる結果になることがあります。&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は [[Btrfs#マルチデバイス対応ファイルシステム|マルチデバイス対応ファイルシステム]] のためのネイティブな &#039;&#039;RAID&#039;&#039; を提供します。btrfs RAID を [[mdadm]] と区別する注目すべき機能は自己回復型の冗長アレイとオンラインバランシングです。より詳しい情報は [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices the Btrfs wiki page] を見て下さい。Btrfs sysadmin ページにも [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#RAID_and_data_replication にセクションがありますので参照して下さい。] 技術的な背景があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Parity RAID (RAID 5/6) コードには、複数の重大なデータ損失のバグがあります。より詳細な情報は Btrfs Wiki の [https://btrfs.wiki.kernel.org/index.php/RAID56 RAID5/6 page] と [https://lore.kernel.org/linux-btrfs/8695beeb-f991-28c4-cf6b-8c92339e468f@inwind.it/ linux-btrfs mailing list] のバグレポートを見て下さい。2020年6月、誰かが [https://lore.kernel.org/linux-btrfs/20200627030614.GW10769@hungrycats.org/ 現在の問題の包括的なリスト] と [https://lore.kernel.org/linux-btrfs/20200627032414.GX10769@hungrycats.org/ 役に立つ回復ガイド] を投稿しています}}&lt;br /&gt;
&lt;br /&gt;
==== Scrub ====&lt;br /&gt;
&lt;br /&gt;
[https://btrfs.wiki.kernel.org/index.php/Glossary Btrfs Wiki Glossary] によると、Btrfs スクラブはオンラインファイルシステムチェックツールです。ファイルシステム上のすべてのデータとメタデータを読み取り、チェックサムと RAID ストレージからの複製コピーを使用して、破損したデータを特定して修復します。&lt;br /&gt;
&lt;br /&gt;
{{Note|実行中のスクラブプロセスはシステムのサスペンドを防ぎます。詳細は [https://lore.kernel.org/linux-btrfs/20140227190656.GA28338@merlins.org/ このスレッド] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
===== 手動で開始する =====&lt;br /&gt;
&lt;br /&gt;
{{ic|/}} を含むファイルシステムに対して (バックグラウンド) scrub を開始する場合。&lt;br /&gt;
&lt;br /&gt;
 # btrfs scrub start /&lt;br /&gt;
&lt;br /&gt;
実行中の scrub の状態を確認する。&lt;br /&gt;
&lt;br /&gt;
 # btrfs scrub status /&lt;br /&gt;
&lt;br /&gt;
===== サービスまたはタイマーを使って起動する =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|btrfs-progs}} パッケージは、指定したマウントポイントを毎月 scrubbing するためのユニット {{ic|btrfs-scrub@.timer}} を提供します。例えば {{ic|/}} の場合は {{ic|btrfs-scrub@-.timer}} 、{{ic|/home}} の場合は {{ic|btrfs-scrub@home.timer}} のように、エスケープしたパスでタイマーを [[有効化]] してください。パスのエスケープは {{ic|systemd-escape -p &#039;&#039;/path/to/mountpoint&#039;&#039;}} で行えます、詳しくは {{man|1|systemd-escape}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
scrub を実行するには {{ic|btrfs-scrub@.service}} を [[systemd#ユニットを使う|スタート]] します。(同じエンコードされたパスで) この方法の利点は {{ic|btrfs scrub}} と比べても同じです。(root ユーザーで) scrub の結果が [[systemd/ジャーナル]] に記録されることです。&lt;br /&gt;
&lt;br /&gt;
冷却が不十分な大きな NVMe ドライブ (ラップトップなど) では、scrub はドライブを速く、長く読み込んで、ドライブを非常に高温にします。systemd で scrub を実行している場合、[[ドロップインファイル]] を使って {{man|5|systemd.resource-control}} にある {{ic|IOReadBandwidthMax}} オプションで簡単にスクラブ速度を制限することができます。&lt;br /&gt;
&lt;br /&gt;
==== Balance ====&lt;br /&gt;
&lt;br /&gt;
balance はファイルシステム上の全てのデータをアロケータに再度流し込みます。デバイスが追加されたり削除された場合にファイルシステム上のデータを再配置するために実行します。balance はデバイスが故障した場合に、冗長な RAID レベルのコピーを再生成します。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|btrfs-progs}}-3.12 から&#039;&#039;バランシング&#039;&#039;はバックグラウンドプロセスになりました - 詳しくは {{ic|man 8 btrfs-balance}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 # btrfs balance start /&lt;br /&gt;
 # btrfs balance status /&lt;br /&gt;
&lt;br /&gt;
=== スナップショット ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;スナップショットとは、btrfs の COW 機能を使って、そのデータ(とメタデータ)を他のサブボリュームと共有する、サブボリュームのことです&amp;quot; 詳しくは [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Snapshots Btrfs Wiki SysadminGuide#Snapshots] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
スナップショットを作成するには&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume snapshot &#039;&#039;source&#039;&#039; [&#039;&#039;dest&#039;&#039;/]&#039;&#039;name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
読み取り専用のスナップショットを作成するには、{{ic|-r}} フラグを追加します。readonly スナップショットの書き込み可能バージョンを作成するには、単純にそのスナップショットを作成します。&lt;br /&gt;
&lt;br /&gt;
{{Note|{Note&lt;br /&gt;
* スナップショットを読み込み専用から書き込み専用に変換することは可能です。しかし、これは将来のインクリメンタル送受信で問題が発生するため、推奨されません[https://lore.kernel.org/linux-btrfs/06e92a0b-e71b-eb21-edb5-9d2a5513b718@gmail.com/] 新しい書き込み可能なスナップショットを作成することで、そのような問題を防ぐことができます。&lt;br /&gt;
* スナップショットは再帰的ではありません。ネストされたサブボリュームは、スナップショット内部では空のディレクトリになります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 送信/受信 ===&lt;br /&gt;
&lt;br /&gt;
サブボリュームは {{ic|send}} コマンドを使って標準出力やファイルに送信することができます。Btrfs の {{ic|receive}} コマンドにパイプで渡すことで非常に便利に使うことが可能です。例えば、{{ic|/root_backup}} という名前のスナップショットを {{ic|/backup}} に送信するには以下のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 # btrfs send /root_backup | btrfs receive /backup&lt;br /&gt;
&lt;br /&gt;
送信するスナップショットは読み取り専用である必要があります。上記のコマンドは外部デバイスにサブボリュームをコピーするのにも使えます (例えば上の {{ic|/backup}} を USB ディスクにマウント)。&lt;br /&gt;
&lt;br /&gt;
また、スナップショットの差分だけを送信することも可能です。例えば、上記のように {{ic|root_backup}} のコピーを送信したことがある場合、{{ic|root_backup_new}} という名前の読み取り専用のスナップショットを新しく作成してから、増加差分だけを {{ic|/backup}} に送信するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs send -p /root_backup /root_backup_new | btrfs receive /backup&lt;br /&gt;
&lt;br /&gt;
これで {{ic|root_backup_new}} という名前の新しいサブボリュームが {{ic|/backup}} に作成されます。&lt;br /&gt;
&lt;br /&gt;
差分バックアップをしたり自動的にバックアップを行うツールは [https://btrfs.wiki.kernel.org/index.php/Incremental_Backup Btrfs Wiki&#039;s Incremental Backup] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== 重複排除 ===&lt;br /&gt;
&lt;br /&gt;
コピーオンライトを使用した場合、Btrfs は実際にはデータをコピーしないでファイルやサブボリュームをコピーできます。ファイルに変更が加えられたときに新しい本当のコピーが作成されます。重複排除はさらに共通部分が存在するデータブロックを認識して、コピーオンライトと同じようにエクステントにまとめてしまいます。&lt;br /&gt;
&lt;br /&gt;
Btrfs パーティションの重複排除に使用するツールについては [https://btrfs.wiki.kernel.org/index.php/Deduplication#Batch 上流の Wiki エントリ] を見てください。{{Pkg|duperemove}}, {{aur|bedup}}, &#039;&#039;btrfs-dedup&#039;&#039; などが存在します。{{pkg|rmlint}} あるいは {{aur|jdupes}} などを使うことでファイルベースでデータの重複排除を行うこともできます。&lt;br /&gt;
&lt;br /&gt;
Btrfs の開発者はインバンド (同期的・インライン) 重複排除に取り組んでおり、新しいデータがファイルシステムに書き込まれたときに重複排除が実行されます。現在のところ実験的な機能としてツリー外で開発されています。新しい機能をテストしてみたい場合は [https://btrfs.wiki.kernel.org/index.php/User_notes_on_dedupe カーネルの wiki ページ] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== リサイズ ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|データの損失を防ぐために、サイズ変更作業を始める前に必ずデータをバックアップしてください}}&lt;br /&gt;
&lt;br /&gt;
ファイルシステムは、デバイスで利用可能な最大のスペースまで拡大することができ、正確なサイズを指定することもできます。ファイルシステムのサイズを大きくする前に、デバイスまたは論理ボリュームのサイズを大きくすることを確認します。&lt;br /&gt;
ファイルシステムに正確なサイズを指定する場合、新しいサイズが次の条件を満たすことを確認します。&lt;br /&gt;
&lt;br /&gt;
* 新しいサイズは既存のデータサイズより大きくなければなりません。&lt;br /&gt;
* ファイルシステムのサイズは、使用可能な領域を超えて拡張できないため、新しいサイズは現在のデバイスサイズと同じかそれ以下でなければなりません。&lt;br /&gt;
&lt;br /&gt;
デバイス上のファイルシステムのサイズを小さくする場合は、新しいサイズが以下の条件を満たすことを確認する。&lt;br /&gt;
&lt;br /&gt;
* 新しいサイズは既存のデータサイズより大きくなければなりません。&lt;br /&gt;
* ファイルシステムのサイズは使用可能な領域を超えて拡張できないため、新しいサイズは現在のデバイスのサイズと同じかそれ以下でなければなりません。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルシステムを保持する論理ボリュームのサイズも小さくする場合は、デバイスまたは論理ボリュームのサイズを小さくする前に、必ずファイルシステムのサイズを小さくしてください。}}&lt;br /&gt;
&lt;br /&gt;
ファイルシステムのサイズをデバイスの利用可能な最大サイズに拡張するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ファイルシステムを特定のサイズに拡張する場合。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize &#039;&#039;size&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;size&#039;&#039;}} は、希望するサイズにバイト単位で置き換えてください。K(キロバイト)、M(メガバイト)、G(ギガバイト)など、値の単位を指定することも可能です。また、値の前にプラス (+) 記号、マイナス (-) 記号を付けることで、現在のサイズに対する増減をそれぞれ指定することも可能です。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize +&#039;&#039;size&#039;&#039; /&lt;br /&gt;
 # btrfs filesystem resize -&#039;&#039;size&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
== 既知の問題 ==&lt;br /&gt;
&lt;br /&gt;
試す前に、いくつかの制限を知っておく必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 暗号化 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs には暗号化のサポートが組み込まれていませんが、この [https://lwn.net/Articles/700487/] は将来的に提供される可能性があります。 ユーザーは、 {{ic|mkfs.btrfs}} を実行する前にパーティションを暗号化できます。 [https://wiki.archlinux.jp/index.php/Dm-crypt/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%85%A8%E4%BD%93%E3%81%AE%E6%9A%97%E5%8F%B7%E5%8C%96#Btrfs_.E3.82.B5.E3.83.96.E3.83.9C.E3.83.AA.E3.83.A5.E3.83.BC.E3.83.A0.E3.81.A8.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97 dm-crypt/スワップを使用したsystem#Btrfsサブボリューム全体の暗号化] を参照してください。&lt;br /&gt;
&lt;br /&gt;
既存の Btrfs ファイルシステムは [[EncFS]] や [[TrueCrypt]] のようなものを使用できますが、おそらく Btrfs の機能の一部はありません。&lt;br /&gt;
&lt;br /&gt;
=== btrfs チェックの問題 ===&lt;br /&gt;
ツール{{ic|btrfs check}} には既知の問題があるため、セクション [[#btrfscheck]] をよく参照してから実行してください。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== パーティションレス Btrfs ディスク ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* ほとんどのユーザーはこのタイプのセットアップを望まず、代わりに通常のパーティションにBtrfsをインストールする必要があります。 さらに、 GRUB はパーティションレスディスクへのインストールを強くお勧めしません。&lt;br /&gt;
* {{Pkg|grub}} 2.04 以降、GRUB の {{ic|core.img}} は大きすぎてBtrfsVBRに収まりません。 {{Bug|63656}} を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Btrfs は、 [[#Subvolumes|subvolumes]] を使用してパーティションをシミュレートし、 [[MBR]] または [[GPT]] パーティションスキームを置き換えて、データストレージデバイス全体を占有できます。 ただし、別の方法で作成された既存の [https://wiki.archlinux.jp/index.php/%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0 パーティション] で [[#File systemcreation|create a Btrfsfilesystem]] を実行するためにパーティションレスセットアップを使用する必要はありません。 パーティションレスのシングルディスクセットアップには、いくつかの制限があります。&lt;br /&gt;
&lt;br /&gt;
* 他の [[ファイルシステム]] を同じディスク上の別のパーティションに配置することはできません。&lt;br /&gt;
* バージョン5.0より前の Linux カーネルを使用している場合、 [[スワップ|スワップ領域]] は使用できません。 Btrfs は[https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB スワップファイル] 5.0 より前をサポートしておらず、 [https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.91.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B7.E3.83.A7.E3.83.B3 スワップパーティション] を作成する場所もありませんでした。&lt;br /&gt;
* [[UEFI]] を使用して起動することはできません。&lt;br /&gt;
&lt;br /&gt;
既存のパーティションテーブルを Btrfs で上書きするには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/sd&#039;&#039;X&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
たとえば、 {{ic|/dev/sda1}} ではなく {{ic|/dev/sda}} を使用します。後者は、パーティショニングスキーム全体を置き換えるのではなく、既存のパーティションをフォーマットします。ルートパーティションは Btrfs なので、 {{ic|btrfs}} がカーネルに組み込まれていることを確認するか、 {{ic|btrfs}} を [[mkinitcpio.conf#MODULES]] と [https://wiki.archlinux.jp/index.php/Mkinitcpio#.E3.82.A4.E3.83.A1.E3.83.BC.E3.82.B8.E4.BD.9C.E6.88.90.E3.81.A8.E3.82.A2.E3.82.AF.E3.83.86.E3.82.A3.E3.83.99.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3 initramfsを再生成する] に入れてください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.jp/index.php/Arch_%E3%83%96%E3%83%BC%E3%83%88%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9#.E3.83.96.E3.83.BC.E3.83.88.E3.83.AD.E3.83.BC.E3.83.80.E3.83.BC ブートローダ] を、 [https://wiki.archlinux.jp/index.php/%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0#Master_Boot_Record マスターブートレコード] を備えたデータ記憶装置の場合と同様にインストールします。[[Syslinux#手動インストール]] または [[GRUB/Tips and tricks#パーティションまたはパーティションレスディスクへのインストール]] を参照してください。 {{ic|/sysrootをマウントできませんでした。}} が原因でカーネルがブートしない場合は、 {{ic|/etc/default/grub}} に {{ic|1=GRUB_PRELOAD_MODULES=&amp;quot;btrfs&amp;quot;}} を追加して、 grub 設定 ([[GRUB#メイン設定ファイルの生成]]) を生成してください。&lt;br /&gt;
&lt;br /&gt;
=== Ext3/4 から Btrfs への変換 ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|btrfs メーリングリストには、不完全/破壊/破損した変換に関する多くの報告があります。 失いたくないデータや &#039;&#039;作業中&#039;&#039; のバックアップがあることを確認してください。 詳細については、 btrfswiki の [https://btrfs.wiki.kernel.org/index.php/Conversion_from_Ext3Conversion fromExt3] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
インストール CD から起動し、次の手順で変換します:&lt;br /&gt;
&lt;br /&gt;
 # btrfs-convert /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションをマウントし、ファイルを確認して変換をテストしてください。 必ず {{ic|/etc/fstab}} を変更してください ({{ic|/etc/fstab}} の &#039;&#039;&#039;type&#039;&#039;&#039; を {{ic|btrfs}} に、 &#039;&#039;&#039;fs_passno&#039;&#039; をに変更すること) [最後のフィールド] を {{ic|0}} に設定します(Btrfs は起動時にファイルシステムのチェックを行わないため)また、パーティションの UUID が変更されていることに注意してください、UUID を使うときは fstab もそれに合わせて更新してください。システムに {{ic|chroot}} して、ブートローダのメニューリストを再構築します([[既存の Linux からインストール]] を参照)ルートファイルシステムを変換する場合、chroot したまま {{ic|mkinitcpio -p linux}} を実行して initramfs を再生成しないと、システムが正常に起動しません。&lt;br /&gt;
&lt;br /&gt;
{{Note|新しく変換された btrfs にファイルをマウントまたは書き込みできないなどの問題がある場合は、バックアップサブボリューム {{ic|/ext2_saved}} がまだ存在する限り、常にロールバックするオプションがあります。 {{ic|btrfs-convert -r /dev/&#039;&#039;partition&#039;&#039;}} コマンドを使用してロールバックします。これにより、新しく変換された btrfs ファイルシステムへの変更が破棄されます。}}&lt;br /&gt;
&lt;br /&gt;
問題がないことを確認したら、バックアップ {{ic|ext2_saved}} サブボリュームを削除して変換を完了します。 これがないと ext3/4 に戻れないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
最後に [[#Balance|balance]] ファイルシステムでスペースを再利用します。&lt;br /&gt;
&lt;br /&gt;
以前にインストールされた一部のアプリケーションは、 Btrfs に適合させる必要があることに注意してください。 特に [[TLP#Btrfs]] はファイルシステムの破損を避けるために特別な注意が必要です。&lt;br /&gt;
&lt;br /&gt;
=== チェックサムのハードウェアアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
Btrfs のチェックサムでハードウェアアクセラレーションが使われているかどうか確認するには:&lt;br /&gt;
{{hc|&amp;lt;nowiki&amp;gt;$ dmesg | grep crc32c&amp;lt;/nowiki&amp;gt;|&amp;lt;nowiki&amp;gt;Btrfs loaded, crc32c=crc32c-intel&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&amp;lt;nowiki&amp;gt;crc32c=crc32c-generic&amp;lt;/nowiki&amp;gt;}} と表示された場合、ルートパーティションが Btrfs であるため、ハードウェアアクセラレーションを使うにはカーネルに {{ic|crc32c-intel}} を組み込む必要があります。[[mkinitcpio.conf]] に {{ic|crc32c-intel}} を追加するだけでは機能しません。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステム破損のリカバリ ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|btrfs check}} ツールには既知の問題があります。セクション [[Btrfs#btrfs check|btrfs check]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;btrfs-check&#039;&#039; はマウントされているファイルシステムでは使えません。ライブ USB から起動しないで &#039;&#039;btrfs-check&#039;&#039; を使えるようにするには、初期 RAM ディスクに以下のように追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|output=&lt;br /&gt;
BINARIES=&amp;quot;/usr/bin/btrfs&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
設定したら [[mkinitcpio]] を使って initramfs を再生成してください。&lt;br /&gt;
&lt;br /&gt;
起動に問題が発生したら、ユーティリティを使って修復することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|fsck でキャッシュを無効化する必要がある場合、起動後に一定時間フリーズするのは通常の動作です (btrfs-transaction がハングアップしているというメッセージがコンソールに表示されます)。しばらく経てばシステムは復帰します。}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://btrfs.wiki.kernel.org/index.php/Btrfsck Btrfs Wiki] を参照。&lt;br /&gt;
&lt;br /&gt;
=== スナップショットから起動する ===&lt;br /&gt;
&lt;br /&gt;
スナップショットをブートするためには、セクション [[Btrfs#サブボリュームをルートとしてマウントする|サブボリュームをルートとしてマウントする]] で説明されているように、サブボリュームをルートパーティションとしてマウントする場合と同じ手順が適用されます。スナップショットはサブボリュームのようにマウントできます。&lt;br /&gt;
&lt;br /&gt;
* [[GRUB]] を使用している場合、{{Pkg|grub-btrfs}} または {{AUR|grub-btrfs-git}} を使用して設定ファイルを再生成すると、自動的に btrfs スナップショットをブートメニューに取り込むことができます。&lt;br /&gt;
* [[rEFInd]] を使用している場合は、{{ic|refind-btrfs.service}} を [[systemd#ユニットを使う|有効]] にして開始後に、{{AUR|refind-btrfs}} を使用してブートメニューに btrfs スナップショットを自動的に取り込むことができます。&lt;br /&gt;
&lt;br /&gt;
=== systemd-nspawn で Btrfs サブボリュームを使う ===&lt;br /&gt;
&lt;br /&gt;
[[Systemd-nspawn#Btrfs のサブボリュームをコンテナのルートとして使う]]や [[Systemd-nspawn#コンテナの一時的な Btrfs スナップショットを使う]]を見てください。&lt;br /&gt;
&lt;br /&gt;
=== アクセス時間のメタデータ更新を削減 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は書き込み時にコピーの性質を持つため、ファイルにアクセスするだけでメタデータのコピーと書き込みを開始します。アクセス時間の更新頻度を減らすと、この予期しないディスク使用がなくなり、パフォーマンスが向上する可能性があります。使用可能なオプションについては、 [[fstab#atime オプション|atime オプション]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 外付けドライブへの増分バックアップ ===&lt;br /&gt;
&lt;br /&gt;
以下のパッケージは {{ic|btrfs send}} と {{ic|btrfs receive}} を使って、外部ドライブに増分バックアップを送信します。実装や機能、要件の違いを見るにはそれぞれのドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
* {{App|btrbk|Btrfs サブボリュームのスナップショットとリモートバックアップを作成するためのツール。|https://github.com/digint/btrbk|{{AUR|btrbk}}}} &lt;br /&gt;
* {{App|buttersink|Buttersink は Btrfs スナップショット用の rsync のようなものです。|https://github.com/AmesCornish/buttersink.git|{{AUR|buttersink-git}}}}&lt;br /&gt;
* {{App|snap-sync|[[Snapper]] スナップショットを使用して、外付けドライブまたはリモートマシンにバックアップします。|https://github.com/wesbarnett/snap-sync.git|{{Pkg|snap-sync}}}}&lt;br /&gt;
* {{App|snapsync|[[Snapper]] の同期ツール。|https://github.com/doudou/snapsync|{{AUR|ruby-snapsync}}}}&lt;br /&gt;
&lt;br /&gt;
以下のパッケージでは、Snapper のスナップショットを Btrfs 以外のファイルシステムへバックアップすることができます。&lt;br /&gt;
&lt;br /&gt;
* {{App|snapborg|Snapper スナップショットを {{Pkg|borg}} バックアップと統合する borgmatic のようなツール。|https://github.com/enzingerm/snapborg|{{AUR|snapborg}}}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
一般的なトラブルシューティングについては [https://btrfs.wiki.kernel.org/index.php/Problem_FAQ Btrfs Problem FAQ] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== GRUB ===&lt;br /&gt;
&lt;br /&gt;
==== パーティションオフセット ====&lt;br /&gt;
&lt;br /&gt;
オフセットの問題は、パーティションのあるディスクに {{ic|core.img}} を埋め込もうとしたときに発生する可能性があります。つまり、GRUB の {{ic|core.img}} をパーティションレスディスク (例: {{ic|/dev/sd&#039;&#039;X&#039;&#039;}}) の Btrfs プールに直接埋め込んでも [[Special:Diff/319474|大丈夫]] です。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] は Btrfs パーティションを起動できますが、モジュールが他の [[ファイルシステム]] よりも大きくなる可能性があります。また、{{ic|grub-install}} で作成した {{ic|core.img}} ファイルは、MBR と最初のパーティションの間にあるドライブの最初の 63 セクタ (31.5KiB) に収まらないかもしれません。{{ic|fdisk}} や {{ic|gdisk}} のような最新のパーティションツールは、最初のパーティションをおよそ 1MiB または 2MiB オフセットすることでこの問題を回避しています。&lt;br /&gt;
&lt;br /&gt;
==== root が見つからない ====&lt;br /&gt;
&lt;br /&gt;
RAID セットアップから起動した時にエラー {{ic|1=error no such device: root}} が表示される場合、{{ic|/usr/share/grub/grub-mkconfig_lib}} を編集して {{ic|1=echo &amp;quot;  search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}&amp;quot;}} からクォートを削除してください。grub の設定を再生成すればエラーを出さずに起動できるはずです。&lt;br /&gt;
&lt;br /&gt;
=== マウントがタイムアウト ===&lt;br /&gt;
&lt;br /&gt;
特に大きな RAID1 アレイでは、ブート中にマウントがタイムアウトして、次のようなジャーナルメッセージが表示されることがあります。&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
Jan 25 18:05:12 host systemd[1]: storage.mount: Mounting timed out. Terminating.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: storage.mount: Mount process exited, code=killed, status=15/TERM&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: storage.mount: Failed with result &#039;timeout&#039;.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: Failed to mount /storage.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: Startup finished in 32.943s (firmware) + 3.097s (loader) + 7.247s (kernel)&amp;gt;&lt;br /&gt;
Jan 25 18:05:46 host kernel: BTRFS error (device sda): open_ctree failed&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
この問題は、[[fstab]] のシステム固有のマウントオプション {{ic|x-systemd.mount-timeout}} で長いタイムアウトを指定することで簡単に回避することが可能です。例:&lt;br /&gt;
&lt;br /&gt;
 /dev/sda                /storage    btrfs       rw,relatime,x-systemd.mount-timeout=5min  0 0&lt;br /&gt;
&lt;br /&gt;
=== BTRFS: open_ctree failed ===&lt;br /&gt;
&lt;br /&gt;
2014年11月現在、{{ic|mkinitcpio.conf}} で {{ic|btrfs}} フックを使用してマルチデバイスの Btrfs を使っている場合に以下のエラーが発生するというバグが [[systemd]] か [[mkinitcpio]] のどちらかに存在します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
BTRFS: open_ctree failed&lt;br /&gt;
mount: wrong fs type, bad option, bad superblock on /dev/sdb2, missing codepage or helper program, or other error&lt;br /&gt;
&lt;br /&gt;
In some cases useful info is found in syslog - try dmesg|tail or so.&lt;br /&gt;
&lt;br /&gt;
You are now being dropped into an emergency shell.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 行から {{ic|btrfs}} を削除して代わりに {{ic|MODULES}} 行に {{ic|btrfs}} を追加することで解決します。修正を施したら {{ic|mkinitcpio -p linux}} で initramfs を再生成して (必要ならプリセットを調整します) 再起動してください。&lt;br /&gt;
&lt;br /&gt;
デバイスが存在しない raid アレイをマウントしようとしたときも同じエラーが表示されます。その場合は {{ic|/etc/fstab}} に {{ic|degraded}} マウントオプションを追加してください。ルートパーティションがアレイ上にある場合、[[カーネルパラメータ]]に {{ic|1=rootflags=degraded}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
2016年8月現在、このバグの回避策として考えられるのは、{{ic|/etc/fstab}} で単一ドライブのみでアレイをマウントし、他のドライブは btrfs が自動的に発見して追記するようにすることです。UUID や LABEL のようなグループベースの識別子は、この不具合の原因になっているようです。例えば、&#039;disk1&#039; と &#039;disk2&#039; からなる2デバイスの RAID1 アレイには UUID が割り当てられますが、UUID を使う代わりに {{ic|/dev/mapper/disk1}} のみを {{ic|/etc/fstab}} で使用します。より詳しい説明は、以下の [https://web.archive.org/web/20161108175034/http://blog.samcater.com/fix-for-btrfs-open_ctree-failed-when-running-root-fs-on-raid-1-or-raid10-arch-linux/ ブログ記事] を参照してください。&lt;br /&gt;
&lt;br /&gt;
また、[[mkinitcpio#設定|mkinitcpio.conf]] の {{ic|udev}} フックを削除し、{{ic|systemd}} フックに置き換えることも可能な対処法です。この場合、{{ic|btrfs}} は{{ic|HOOKS}}や{{ic|MODULES}} 配列に &#039;&#039;not&#039;&#039; とする必要があります。&lt;br /&gt;
&lt;br /&gt;
詳細は [https://bbs.archlinux.org/viewtopic.php?id=189845 フォーラムスレッド] や {{Bug|42884}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== btrfs check ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|Btrfs はまだ開発途上であり、特に {{ic|btrfs check}} コマンドについては仕様が固まっていないので、{{ic|--repair}} スイッチを付けて {{ic|btrfs check}} を実行するときはあらかじめ Btrfs のドキュメントを読んでバックアップを作成することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-check btrfs check]&#039;&#039; コマンドを使うことでアンマウントされた Btrfs ファイルシステムをチェックしたり修復することが可能です。ただし、この修復ツールはまだ開発中であり、特定のファイルシステムエラーは修復することができません。&lt;br /&gt;
&lt;br /&gt;
=== 絶え間ないドライブアクティビティ ===&lt;br /&gt;
&lt;br /&gt;
[[カーネル]] バージョン 6.2 以降、{{ic|1=discard=async}} {{man|8|mount}} オプションがデフォルトで設定されています。これ [https://lore.kernel.org/linux-btrfs/Y%2F%2Bn1wS%2F4XAH7X1p@nz/#r 報告] により、廃棄キューがいっぱいになると、アイドル状態でも一部のドライブで一定のドライブアクティビティが発生し、処理されるよりも速くなります。これにより、特に NVMe ベースのドライブで電力使用量が増加する可能性があります。&lt;br /&gt;
&lt;br /&gt;
回避策の 1 つは、ドライブのアクティビティが停止するまで破棄 {{ic|iops_limit}} を増やすことです。&lt;br /&gt;
&lt;br /&gt;
これは、[[Wikipedia:sysfs|sysfs]] を使用して実現できます。例:&lt;br /&gt;
&lt;br /&gt;
 # echo 1000 &amp;gt; /sys/fs/btrfs/&#039;&#039;uuid&#039;&#039;/discard/iops_limit&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|&#039;&#039;uuid&#039;&#039;}} は btrfs ファイルシステムの UUID です。{{ic|1000}} の制限は実験的に調整する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動時にパラメータを設定するには、[[systemd-tmpfiles]] を使用できます。たとえば、次のファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/btrfs-discard.conf|&lt;br /&gt;
w /sys/fs/btrfs/&#039;&#039;uuid&#039;&#039;/discard/iops_limit - - - - 1000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
あるいは、[[fstab]] の {{ic|nodiscard}} マウントオプションを使用してマウントし、代わりに [[ソリッドステートドライブ#定期的な TRIM|定期的な TRIM]] を使用して、非同期破棄を完全に無効にすることもできます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* 公式サイト&lt;br /&gt;
** [https://btrfs.wiki.kernel.org/ Btrfs Wiki]&lt;br /&gt;
* パフォーマンス関連&lt;br /&gt;
** [https://superuser.com/questions/432188/should-i-put-my-multi-device-btrfs-filesystem-on-disk-partitions-or-raw-devices Btrfs on raw disks?]&lt;br /&gt;
** [http://comments.gmane.org/gmane.comp.file-systems.btrfs/19440 Varying leafsize and nodesize in Btrfs]&lt;br /&gt;
** [http://comments.gmane.org/gmane.comp.file-systems.btrfs/15646 Btrfs support for efficient SSD operation (data blocks alignment)]&lt;br /&gt;
** [https://btrfs.wiki.kernel.org/index.php/FAQ#Is_Btrfs_optimized_for_SSD.3F Is Btrfs optimized for SSDs?]&lt;br /&gt;
** Phoronix によるマウントオプションのベンチマーク&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs-mount-linux49 Linux 4.9]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=linux_314_btrfs Linux 3.14]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=linux_btrfs_311&amp;amp;num=1 Linux 3.11]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTM0OTU Linux 3.9]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs_linux37_mounts&amp;amp;num=1 Linux 3.7]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=linux_btrfs_options&amp;amp;num=1 Linux 3.2]&lt;br /&gt;
** [http://blog.erdemagaoglu.com/post/4605524309/lzo-vs-snappy-vs-lzf-vs-zlib-a-comparison-of Lzo vs. zLib]&lt;br /&gt;
* その他&lt;br /&gt;
** [http://www.funtoo.org/wiki/BTRFS_Fun Funtoo Wiki Btrfs Fun]&lt;br /&gt;
** [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTA0ODU Avi Miller presenting Btrfs] at SCALE 10x, January 2012.&lt;br /&gt;
** [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTA4Mzc Summary of Chris Mason&#039;s talk] from LFCS 2012&lt;br /&gt;
** [https://git.kernel.org/?p&amp;amp;#61;linux/kernel/git/torvalds/linux-2.6.git;a&amp;amp;#61;commit;h&amp;amp;#61;35054394c4b3cecd52577c2662c84da1f3e73525 Btrfs: stop providing a bmap operation to avoid swapfile corruptions] 2009-01-21&lt;br /&gt;
** [http://marc.merlins.org/perso/btrfs/post_2014-03-22_Btrfs-Tips_-Doing-Fast-Incremental-Backups-With-Btrfs-Send-and-Receive.html Doing Fast Incremental Backups With Btrfs Send and Receive]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Btrfs&amp;diff=39046</id>
		<title>Btrfs</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Btrfs&amp;diff=39046"/>
		<updated>2024-09-19T13:49:29Z</updated>

		<summary type="html">&lt;p&gt;Hikali: Hikali (トーク) による版 39045 を取り消し&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[de:Arch auf BtrFS]]&lt;br /&gt;
[[en:Btrfs]]&lt;br /&gt;
[[es:Btrfs]]&lt;br /&gt;
[[pt:Btrfs]]&lt;br /&gt;
[[ru:Btrfs]]&lt;br /&gt;
[[zh-hans:Btrfs]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ファイルシステム}}&lt;br /&gt;
{{Related|Snapper}}&lt;br /&gt;
{{Related|Yabsnap}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://btrfs.wiki.kernel.org/index.php/Main_Page Btrfs Wiki] より:&lt;br /&gt;
&lt;br /&gt;
:Btrfs は、耐障害性、修復、および簡単な管理に重点を置きながら、高度な機能を実装することを目的とした Linux 用の最新のコピーオンライト(CoW)ファイルシステムです。複数の企業で共同開発された Btrfs は、GPL に基づいてライセンスされており、誰からの寄付も受け付けています。&lt;br /&gt;
&lt;br /&gt;
{{Note|他のファイルシステムと同様に、Btrfs は継続的に開発中です。これは、特定の機能がまだ日常的に使用できる状態になっていない可能性があります。使用事例が影響を受ける可能性があるかどうかを確認するには、Btrfs ドキュメントの [https://btrfs.readthedocs.io/en/latest/Status.html Status] とこの記事の [[Btrfs#既知の問題|既知の問題]] セクションを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
== 準備 ==&lt;br /&gt;
&lt;br /&gt;
ユーザースペースのユーティリティについては、基本的な操作に必要な {{Pkg|btrfs-progs}} パッケージを [[インストール]] してください。&lt;br /&gt;
&lt;br /&gt;
Btrfs ファイルシステムから起動する必要がある場合 (つまり、カーネルと initramfs が Btrfs パーティションにある場合)、あなたの [[ブートローダー]] が Btrfs をサポートしているか確認してください。&lt;br /&gt;
&lt;br /&gt;
== ファイルシステムの作成 ==&lt;br /&gt;
&lt;br /&gt;
以下は、新しい Btrfs [[ファイルシステム]] を作成する方法を示しています。ext3/4 パーティションを Btrfs に変換するには、[[Btrfs#Ext3/4 から Btrfs への変換|Ext3/4 から Btrfs への変換]] を見て下さい。パーティションレスなセットアップを使うには、[[Btrfs#パーティションレス Btrfs ディスク|パーティションレス Btrfs ディスク]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|8|mkfs.btrfs}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 単一デバイス上のファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
パーティション {{ic|/dev/&#039;&#039;partition&#039;&#039;}} に Btrfs ファイルシステムを作るには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L &#039;&#039;mylabel&#039;&#039;/dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
メタデータの Btrfs のデフォルトのノードサイズは 16KB ですが、データのデフォルトのセクターサイズはページサイズと同じで、自動検出されます。メタデータに大きなノードサイズを使用するには(セクターサイズの倍数である必要があり、最大 64KB が許可されます)、この例に示すように、{{ic|-n}} スイッチを介して {{ic|nodesize}} の値を指定します 32KB ブロックの使用例:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L &#039;&#039;mylabel&#039;&#039; -n 32k /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|8|mkfs.btrfs|OPTIONS}} によると、&amp;quot;[a]ノードサイズが小さいほど断片化は増加しますが、bツリーが高くなり、ロックの競合が少なくなります。ノードサイズが大きいほど、メタデータブロックを更新する際のメモリ操作のコストが高くなりますが、パッキングが向上し、断片化が少なくなります&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== マルチデバイス対応ファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|Btrfs の RAID 5 と RAID 6 モードには致命的な欠陥があり、&amp;quot;捨てデータでのテスト以外&amp;quot; には使用しないでください。[https://lore.kernel.org/linux-btrfs/20200627032414.GX10769@hungrycats.org/ 既知の問題と部分的な回避策のリスト]。状況の更新については [https://btrfs.wiki.kernel.org/index.php/RAID56 the Btrfs page on RAID5 and RAID6] を見て下さい (更新されていないようです)}}&lt;br /&gt;
&lt;br /&gt;
複数のデバイスを使用して RAID を作成することができます。サポートされている RAID レベルは RAID 0, RAID 1, RAID 10, RAID 5, RAID 6 です。カーネル 5.5 からは RAID1c3 と RAID1c4 で RAID1 レベルの 3-コピーと 4-コピーが可能です。RAIDレベルは、データ用とメタデータ用にそれぞれ {{ic|-d}} と {{ic|-m}} オプションを使って別々に設定することができます。デフォルトでは、データは1つのコピー ({{ic|single}}) で、メタデータはミラーリング ({{ic|raid1}}) された状態になっています。これは &lt;br /&gt;
[[W:JBOD|JBOD configuration]] を作成すると、ディスクは1つのファイルシステムとして認識されますが、ファイルは複製されません。Btrfs RAID ボリュームを作成する方法についての詳しい情報は [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices Using Btrfs with Multiple Devices] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -d single -m raid1 /dev/&#039;&#039;part1&#039;&#039; /dev/&#039;&#039;part2&#039;&#039; ...&lt;br /&gt;
&lt;br /&gt;
プールで複数の Btrfs デバイスを使うには {{ic|udev}} フックか {{ic|btrfs}} フックを {{ic|/etc/mkinitcpio.conf}} に記述する必要があります。詳しくは [[Mkinitcpio#HOOKS]] の記事を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* マルチデバイスファイルシステムに後からデバイスを追加することも可能です。詳しくは [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices Btrfs wiki article] を見て下さい。&lt;br /&gt;
* デバイスは異なるサイズにすることができます。しかし、RAID 構成の1つのドライブが他のドライブより大きい場合、この余分なスペースは使用されません。&lt;br /&gt;
* [[Syslinux]] などのいくつかの [[ブートローダー]] はマルチデバイスファイルシステムをサポートしません。&lt;br /&gt;
* Btrfs は自動的に最速のデバイスから読み込むわけではないので、異なる種類のディスクを混在させるとパフォーマンスに一貫性がなくなります。詳しくは [https://stackoverflow.com/a/55408367] を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
マルチデバイス Btrfs ファイルシステム特有のメンテナンスに関するアドバイスは [[#RAID]] をご覧下さい。&lt;br /&gt;
&lt;br /&gt;
== ファイルシステムの構成 ==&lt;br /&gt;
&lt;br /&gt;
=== コピーオンライト (CoW)===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは Btrfs は全てのファイルに対して常に [[Wikipedia:copy-on-write|copy-on-write]] を使用します。書き込みはその場のデータを上書きしません; 代わりに、ブロックの修正されたコピーが新しい場所に書き込まれ、メタデータは新しい場所を指すように更新されます。実装の詳細や利点と欠点については [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Copy_on_Write_.28CoW.29 Btrfs Sysadmin Guide セクション] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== CoW の無効化 ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|Btrfs で CoW を無効にすると、チェックサムも無効になります。 Btrfs は破損した {{ic|nodatacow}} ファイルを検出できません。 RAID 1 と組み合わせると、停電やその他の破損原因により、データが同期しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
マウントされたサブボリュームで新しく作成されたファイルのコピー オン ライトを無効にするには、{{ic|nodatacow}} マウント オプションを使用します。これは、新しく作成されたファイルにのみ影響します。コピーオンライトは、既存のファイルに対して引き続き影響します。 {{ic|nodatacow}} オプションも圧縮を無効にします。詳しくは {{man|5|btrfs}} をご覧ください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|5|btrfs|MOUNT OPTIONS}} から:&lt;br /&gt;
&lt;br /&gt;
:単一のファイル システム内で、一部のサブボリュームを {{ic|nodatacow}} でマウントし、他のサブボリュームを {{ic|datacow}} でマウントすることはできません。最初にマウントされたサブボリュームのマウント オプションは、他のサブボリュームに適用されます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファイルやディレクトリ単体で CoW を無効化するには、次のコマンドを使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ chattr +C &amp;lt;/dir/file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これにより、ファイルへの参照が 1つしかない操作のコピーオンライトが無効になります。複数の参照がある場合。ファイル クローン/軽量クローンまたはファイルシステムスナップショットが原因で、コピーオンライトが引き続き発生します。{{Pkg|coreutils}} 9.0 以降、{{ic|cp}} はデフォルトで軽量コピーを実行しようとすることに注意してください。詳細については、{{man|1|cp}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|1|chattr}} から:&lt;br /&gt;
&lt;br /&gt;
:btrfs の場合、&#039;{{ic|C}}&#039; フラグを新しいファイルまたは空のファイルに設定する必要があります。すでにデータブロックがあるファイルに設定されている場合、ファイルに割り当てられたブロックが完全に安定する時期は未定義です。&#039;{{ic|C}}&#039; フラグがディレクトリに設定されている場合、ディレクトリには影響しませんが、そのディレクトリに作成された新しいファイルには {{ic|No_COW}} 属性が含まれます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=上記のメモに従い、次のトリックを使用して、ディレクトリ内の既存のファイルのコピーオンライトを無効にすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ mv &#039;&#039;/path/to/dir&#039;&#039; &#039;&#039;/path/to/dir&#039;&#039;_old&lt;br /&gt;
 $ mkdir &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ chattr +C &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ cp -a --reflink=never &#039;&#039;/path/to/dir&#039;&#039;_old/. &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ rm -rf &#039;&#039;/path/to/dir&#039;&#039;_old&lt;br /&gt;
&lt;br /&gt;
このプロセス中にデータが使用されていないことを確認してください。また、後述のように {{ic|1=--reflink=never}} を指定しない {{ic|mv}} または {{ic|cp}} は機能しないことに注意してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== スナップショットへの影響 =====&lt;br /&gt;
&lt;br /&gt;
ファイルのコピーオンライトが無効 (NOCOW) でスナップショットが作成された場合、スナップショットは古いファイルブロックを所定の位置にロックするため、スナップショット後のファイルブロックへの最初の書き込みは [https://www.spinics.net/lists/linux-btrfs/msg33090.html COW 操作] になります。ただし、ファイルは NOCOW 属性を保持し、同じファイルブロックへの後続の書き込みは次のスナップショットまでそのまま残ります。&lt;br /&gt;
&lt;br /&gt;
スナップショットを頻繁に行うと、最初の書き込みで COW が必要になるため、NOCOW の効果が低下する可能性があります。そのようなファイルのコピーオンライトを完全に避けるには、それらを別のサブボリュームに入れ、そのサブボリュームのスナップショットを作成しないでください。&lt;br /&gt;
&lt;br /&gt;
=== 圧縮 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は [https://btrfs.wiki.kernel.org/index.php/Compression 透過的自動圧縮] をサポートしています。これはファイルサイズを小さくするだけでなく、書き込み増幅を減らすことでフラッシュベースのメディアの寿命を大幅に延ばします。[[Fedora:Changes/BtrfsByDefault#Compression]], [https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/NTV77NFF6NDZM3QTPUM2TQZ5PCM6GOO2/], [https://pagure.io/fedora-btrfs/project/issue/36#comment-701551] を参照して下さい。また、[https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs_compress_2635&amp;amp;num=1 パフォーマンスを向上させる] 場合もありますが(例:重いファイル I/O を持つシングルスレッド)、(例:大きなファイル I/O を持つマルチスレッドや CPU 集中タスク)では明らかにパフォーマンスを低下させることがあります。一般に、最速の圧縮アルゴリズムである &#039;&#039;zstd&#039;&#039; と &#039;&#039;lzo&#039;&#039; を用いると、より良いパフォーマンスが得られます。いくつかの [https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs-zstd-compress benchmarks] では、詳細な比較がなされています。&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;alg&#039;&#039;}} は {{ic|zlib}}, {{ic|lzo}}, {{ic|zstd}}, あるいは {{ic|no}} のいずれかです。(圧縮しない場合) このオプションを使うと、btrfs はデータの最初の部分を圧縮することで縮小されるかどうかをチェックします。 もしそうなら、そのファイルへの書き込み全体が圧縮されます。 そうでない場合は、何も圧縮されません。 このオプションでは、書き込みの最初の部分が縮小しない場合、残りのデータが非常に縮小しても、書き込みに圧縮は適用されません。[https://btrfs.wiki.kernel.org/index.php/Compression#What_happens_to_incompressible_files.3F] これは、書き込むべき全てのデータが btrfs に完全に与えられ圧縮されるまで、ディスクの書き込み開始を待たせるのを防ぐために行われます。&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|1=compress-force=&#039;&#039;alg&#039;&#039;}} マウントオプションを使うと、btrfs が最初の部分を圧縮しているかどうかのチェックをスキップし、全てのファイルに対して自動的に圧縮を試行することが可能になります。 最悪の場合、これは何の目的もなく CPU 使用量を (少し) 増加させる可能性があります。しかし、複数の用途が混在するシステムでの経験的なテストでは、 {{ic|1=compress-force=&#039;&#039;zstd&#039;&#039;}} を使うことで、ただの {{ic|1=compress=&#039;&#039;zstd&#039;&#039;}} に比べて約10%のディスク圧縮という大きな改善がありました、この場合も 10% のディスク圧縮でした。&lt;br /&gt;
&lt;br /&gt;
マウントオプションが追加された後に作成または変更されたファイルのみが圧縮されます。&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;alg&#039;&#039;}} は {{ic|zlib}}, {{ic|lzo}}, {{ic|zstd}} のいずれかです。例えば、ファイルシステム全体を {{pkg|zstd}} で再圧縮する場合、以下のコマンドを実行します。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem defragment -r -v -czstd /&lt;br /&gt;
&lt;br /&gt;
空の Btrfs パーティションに Arch をインストールするときに圧縮を有効にするには、ファイルシステムを [[マウント]] するときに {{ic|compress}} オプションを使ってください。{{ic|1=mount -o compress=zstd /dev/sd&#039;&#039;xY&#039;&#039; /mnt/}} となります。設定時に、[[fstab]]でルートファイルシステムのマウントオプションに {{ic|1=compress=zstd}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|マウントオプション {{ic|compress}} を使わずにファイル単位で圧縮を有効にすることもできます; そうするためには、ファイルに {{ic|chattr +c}} を適用します。ディレクトリに適用すると、新しいファイルが来たときに自動的に圧縮されます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* このオプションを使うと、古いカーネルや {{ic|zstd}} をサポートしていない {{pkg|btrfs-progs}} を使っているシステムは、ファイルシステムを読んだり修復したりできない可能性があります。&lt;br /&gt;
* [[GRUB]] は 2.04 で &#039;&#039;zstd&#039;&#039; のサポートを導入しました。MBR/ESP にインストールされたブートローダを実際にアップグレードしたことを確認してください。BIOS/UEFI セットアップに適したオプションで {{ic|grub-install}} を実行して、{{Bug|63235}} を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 圧縮の種類と比率を表示する ====&lt;br /&gt;
&lt;br /&gt;
{{pkg|compsize}} はファイルのリスト (または btrfs ファイルシステム全体) を受け取り、使用された圧縮タイプと有効な圧縮率を測定します。 非圧縮サイズは {{man|1|du}} のような他のプログラムによって与えられる数値と一致しないかもしれません。なぜなら、たとえ何度も再リンクされていても、たとえその一部がもうどこにも使われていないけれどゴミ収集されていないとしても、全てのエクステントは一度にカウントされるからです。 これは {{ic|compsize -x /}} のような状況で便利で、btrfs でないサブディレクトリを探そうとして、実行全体が失敗するのを避けます。&lt;br /&gt;
&lt;br /&gt;
=== サブボリューム ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;btrfs サブボリュームはブロックデバイスではありません(そしてブロックデバイスとして扱えません)代わりに btrfs サブボリュームは POSIX ファイル名空間として考えることができます。このネームスペースはファイルシステムのトップレベルのサブボリュームからアクセスすることもできますし、それ自体でマウントすることもできます&amp;quot; [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes]&lt;br /&gt;
&lt;br /&gt;
各 Btrfs ファイルシステムには ID 5 のトップレベルのサブボリュームがあります。これは {{ic|/}} としてマウントすることができます。(デフォルト) または、代わりに別のサブボリュームを [[Btrfs#サブボリュームをマウントする|マウントする]] こともできます。サブボリュームはファイルシステム内で移動することができ、パスよりもむしろその ID で識別されます。&lt;br /&gt;
&lt;br /&gt;
詳細については、次のリンクを参照してください:&lt;br /&gt;
&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes Btrfs Wiki SysadminGuide#Subvolumes]&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/Getting_started#Basic_Filesystem_Commands Btrfs Wiki Getting started#Basic Filesystem Commands]&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/Trees Btrfs Wiki Trees]&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームを作成する ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームを作成するには:&lt;br /&gt;
 # btrfs subvolume create &#039;&#039;/path/to/subvolume&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームを一覧する ====&lt;br /&gt;
&lt;br /&gt;
現在のサブボリュームのリストを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume list -p .&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームの削除 ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームを削除するには&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume delete &#039;&#039;/path/to/subvolume&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Linux 4.18 以降では、通常のディレクトリのようにサブボリュームを削除することもできます ({{ic|rm -r}}, {{ic|rmdir}})&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームをマウントする ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームは {{ic|1=subvol=&#039;&#039;/path/to/subvolume&#039;&#039;}} や {{ic|1=subvolid=&#039;&#039;objectid&#039;&#039;}} マウントフラグを使うことでファイルシステムのパーティションと同じようにマウントできます。例えば、{{ic|subvol_root}} という名前のサブボリュームが存在したら {{ic|/}} にマウントすることができます。ファイルシステムのトップレベルにサブボリュームを作成して適切なマウントポイントにマウントすることで、伝統的なファイルシステムのパーティションと同じように使うことができ、[[Btrfs#スナップショット|スナップショット]] を使用してファイルシステムを前の状態に簡単に戻すことが可能です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=トップレベルのサブボリューム (ID=5) を {{ic|/}} として使用しないことでサブボリュームのレイアウトの変更を簡単にできます。サブボリュームを作成して実際のデータを保存して {{ic|/}} にマウントします。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|5|btrfs|MOUNT OPTIONS}} から&lt;br /&gt;
:ほとんどのマウントオプションは &#039;&#039;&#039;ファイルシステム全体&#039;&#039;&#039; に適用され、マウントされる最初のサブボリュームのオプションだけが有効になります。これは実装不足によるもので、将来的に変更されるかもしれません。&lt;br /&gt;
&lt;br /&gt;
サブボリュームごとにどのマウントオプションが使えるかは [https://btrfs.wiki.kernel.org/index.php/FAQ#Can_I_mount_subvolumes_with_different_mount_options.3F Btrfs Wiki FAQ] を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Snapper#推奨ファイルシステムレイアウト]], [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Managing_Snapshots Btrfs SysadminGuide#Managing Snapshots], [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Layout Btrfs SysadminGuide#Layout] などにサブボリュームを使用するファイルシステムレイアウトの例が存在します。&lt;br /&gt;
&lt;br /&gt;
btrfs 固有のマウントオプションの完全なリストは {{man|5|btrfs}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームをルートとしてマウントする ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームをルートマウントポイントとして使用するには、{{ic|1=rootflags=subvol=&#039;&#039;/path/to/subvolume&#039;&#039;}} を使用して [[カーネルパラメータ#設定|カーネルパラメータ]] 経由でサブボリュームを指定します。{{ic|/etc/fstab}} でルート・マウントポイントを編集し、マウント・オプションに {{ic|1=subvol=}} を指定します。または、サブボリュームの ID {{ic|1=rootflags=subvolid=&#039;&#039;objectid&#039;&#039;}} をカーネルパラメータとして使い、{{ic|1=subvolid=&#039;&#039;objectid&#039;&#039;}} を {{ic|/etc/fstab}} のマウントオプションとして指定することもできます。&lt;br /&gt;
&lt;br /&gt;
==== デフォルトのサブボリュームを設定する ====&lt;br /&gt;
&lt;br /&gt;
マウントオプションに {{ic|1=subvol=}} が指定されない場合、デフォルトのサブボリュームがマウントされます。デフォルトサブボリュームを変更するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume set-default &#039;&#039;subvolume-id&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
ここで、&#039;&#039;subvolume-id&#039;&#039; は [[Btrfs#サブボリュームを一覧する|listing]] で見つけることができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=[[GRUB]] があるシステムでデフォルトのサブボリュームを変更した後、ブートローダに変更を通知するために {{ic|grub-install}} を再度実行する必要があります。[https://bbs.archlinux.org/viewtopic.php?pid=1615373 このフォーラムのスレッド] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|btrfs subvolume set-default}} でデフォルトのサブボリュームを変更すると、ファイルシステムのトップレベルは {{ic|1=subvol=/}} や {{ic|1=subvolid=5}} マウントオプションを使ってアクセスする以外ではアクセスできなくなります [https://btrfs.wiki.kernel.org/index.php/SysadminGuide]&lt;br /&gt;
&lt;br /&gt;
=== クォータ ===&lt;br /&gt;
&lt;br /&gt;
{{warning|Qgroup はまだ安定状態ではなくサブボリュームのスナップショットとクォータを組み合わせると操作によってパフォーマンスに問題をきたします (スナップショットの削除など)。さらに [https://btrfs.wiki.kernel.org/index.php/Quota_support#Known_issues 既知の問題] が存在しています。}}&lt;br /&gt;
&lt;br /&gt;
Btrfs におけるクォータのサポートはクォータグループ (qgroup) を利用してサブボリュームレベルで実装されています: 各サブボリュームにはデフォルトで &#039;&#039;0/&amp;lt;subvolume id&amp;gt;&#039;&#039; という形式でクォータグループが割り当てられています。必要であればクォータグループを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
クォータグループを使うにはまずクォータを有効にする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # btrfs quota enable &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上記のコマンドを実行してから新しいサブボリュームを作成すると、グループによって制御が可能になります。既存のサブボリュームでも制御を行いたい場合、クォータを有効にしてから、&#039;&#039;&amp;lt;subvolume id&amp;gt;&#039;&#039; を使ってサブボリュームごとにクォータグループを作成して再スキャンしてください:&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d&#039; &#039; -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Btrfs のクォータグループはツリー構造になっていて、サイズ制限はクォータグループごとに設定し、ツリーに属しているサブボリュームに制限が課せられます。&lt;br /&gt;
&lt;br /&gt;
クォータグループで設定できる制限は合計データ使用量・非共有のデータ使用量・圧縮データ使用量、あるいはそれらを組み合わせたものです。元のボリュームファイルを削除してコピーを残す場合、他のクォータグループの非共有制限が変わるため、ファイルのコピーや削除で制限に抵触する可能性があります。例えば、新しいスナップショットが元のサブボリュームの全てのブロックと同じデータを持っている場合、どちらかのサブボリュームだけで共通データを削除するともう片方のサブボリュームの制限に引っかかる可能性があります。&lt;br /&gt;
&lt;br /&gt;
クォータグループに制限を設定するには、{{ic|btrfs qgroup limit}} コマンドを使います。合計使用量の制限や非共有制限 ({{ic|-e}}) または圧縮制限 ({{ic|-c}}) が設定できます。ファイルシステムの特定のパスにおける使用量や制限を表示するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs qgroup show -reF &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== コミット間隔の設定 ===&lt;br /&gt;
&lt;br /&gt;
データがファイルシステムに書き込まれる解像度は、Btrfs自体とシステム全体の設定によって決まります。 Btrfs のデフォルトは、新しいデータがファイルシステムにコミットされる30秒のチェックポイント間隔です。これは、btrfs パーティションの {{ic|/etc/fstab}} に {{ic|commit}} マウントオプションを追加することで変更できます。&lt;br /&gt;
&lt;br /&gt;
 LABEL=arch64 / btrfs defaults,compress=zstd,commit=120 0 0&lt;br /&gt;
&lt;br /&gt;
システム全体の設定もコミット間隔に影響します。これらには {{ic|/proc/sys/vm/*}} の下のファイルが含まれており、このwiki記事の範囲外です。それらのカーネルドキュメントは、https://www.kernel.org/doc/html/latest/admin-guide/sysctl/vm.html で入手できます。&lt;br /&gt;
&lt;br /&gt;
=== SSD TRIM ===&lt;br /&gt;
&lt;br /&gt;
Btrfs ファイルシステムは、TRIM コマンドをサポートする SSD ドライブから未使用のブロックを解放できます。カーネルバージョン 5.6 以降、非同期破棄がサポートされ、マウントオプション {{ic|1=discard=async}} で有効になります。解放されたエクステントはすぐには破棄されませんが、グループ化され、後で別のワーカースレッドによってトリミングされるため、コミットの待ち時間が短縮されます。&lt;br /&gt;
&lt;br /&gt;
TRIM の有効化と使用に関するより詳しい情報は [[ソリッドステートドライブ#TRIM]] に記載されています。&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
=== スワップファイル ===&lt;br /&gt;
&lt;br /&gt;
Btrfs の [[スワップファイル]] は Linux カーネル5.0 以降でサポートされています。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ed46ff3d423780fa5173b38a844bf0fdb210a2a7] スワップファイルを初期化する適切な方法は、最初にファイルをホストする非圧縮、非スナップショットのサブボリュームを作成し、そのディレクトリに &#039;&#039;cd&#039;&#039; してから、長さゼロのファイルを作成し、{{ic|No_COW}} を設定することです。 属性を [https://wiki.archlinux.jp/index.php/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E5%B1%9E%E6%80%A7#chattr_.E3.81.A8_lsattr chattr] で指定し、圧縮が無効になっていることを確認します。&lt;br /&gt;
&lt;br /&gt;
 # cd &#039;&#039;/path/to/swapfile&#039;&#039;&lt;br /&gt;
 # truncate -s 0 ./swapfile&lt;br /&gt;
 # chattr +C ./swapfile&lt;br /&gt;
 # btrfs property set ./swapfile compression none&lt;br /&gt;
&lt;br /&gt;
詳細な設定については、 [https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E4.BD.9C.E6.88.90 スワップファイルの作成] を参照してください。スワップファイルへの休止状態の構成については、[https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate#Hibernation_into_swap_file_on_Btrfs Hibernation into swap file on Btrfs]で説明されています。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Linux カーネル5.0 以降、 Btrfs にはネイティブスワップファイルのサポートがありますが、いくつかの制限があります。&lt;br /&gt;
* スワップファイルをスナップショットサブボリュームに置くことはできません。適切な手順は、スワップファイルを配置する新しいサブボリュームを作成することです。&lt;br /&gt;
* 複数のデバイスにまたがるファイルシステム上のスワップファイルはサポートされていません。 [https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F Btrfs wiki: Does btrfs support swap files?] および [https://bbs.archlinux.org/viewtopic.php?pid=1849371#p1849371 Arch forums discussion]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 使用領域 空き領域の表示 ===&lt;br /&gt;
&lt;br /&gt;
{{man|1|df}} のような一般的な linux ユーザースペースツールは Btrfs パーティションの空き容量を不正確に報告します。Btrfs パーティションを調べるには {{ic|btrfs filesystem usage}} を使うことが推奨されます。例えば、デバイスのアロケーションと使用状況の統計の完全な内訳を見るには、{{ic|btrfs filesystem usage}} を使って下さい。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem usage /&lt;br /&gt;
&lt;br /&gt;
{{Note|現在、{{ic|btrfs filesystem usage}} コマンドは {{ic|RAID5/RAID6}} では正しく動作していません。}}&lt;br /&gt;
&lt;br /&gt;
あるいは、{{ic|btrfs filesystem df}} を使えば、root で実行しなくても、割り当てられた領域の使用状況を素早くチェックすることができます。&lt;br /&gt;
&lt;br /&gt;
 $ btrfs filesystem df /&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://btrfs.wiki.kernel.org/index.php/FAQ#How_much_free_space_do_I_have.3F] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|du}} や {{man|1|ncdu}} のような、ファイルシステムのあるサブセットについて空間の使用状況を分析するツールにも同じ制限が適用され、これらは reflinks, snapshots, 圧縮を考慮しません。代わりに、btrfs を意識した代替手段は {{AUR|btdu}} と [[Btrfs#圧縮の種類と比率を表示する|圧縮の種類と比率を表示する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== デフラグメンテーション ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|Linux カーネル バージョン 5.16.x &amp;lt; 5.16.5 のメジャーレグレッションにより、一部のシステムで Btrfs デフラグが無限ループし、手動および自動デフラグの両方に影響があります。これにより、影響を受けるドライブに極端な I/O 負荷がかかり、ドライブの寿命が極端に短くなり、パフォーマンスに影響を与える可能性があります。このため、これらのバージョンで {{ic|autodefrag}} を使うことは推奨されません。むしろ {{ic|noautodefrag}} を使ってオンラインデフラグが無効になるようにすべきです。[https://www.reddit.com/r/linux/comments/sgybyr/psa_linux_516_has_major_regression_in_btrfs/] と [https://lore.kernel.org/linux-btrfs/CAEwRaO4y3PPPUdwYjNDoB9m9CLzfd3DFFk2iK1X6OyyEWG5-mg@mail.gmail.com/] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
Btrfs はマウントオプション {{ic|autodefrag}} でオンラインデフラグをサポートしています、{{man|5|btrfs|MOUNT OPTIONS}} を見て下さい。手動でルートのデフラグをするには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem defragment -r /&lt;br /&gt;
&lt;br /&gt;
上記のコマンドを {{ic|-r}} スイッチなしで使用すると、ディレクトリを含むサブボリュームが保持するメタデータのみがデフラグされる結果となります。このため、パスを指定するだけで単一ファイルのデフラグが可能です。&lt;br /&gt;
&lt;br /&gt;
COW コピー (スナップショット コピーまたは {{ic|cp}} や bcp で作成されたもの) を持つファイルに圧縮アルゴリズムで {{ic|-c}} スイッチを使用したデフラグを行うと、無関係の 2 つのファイルが効果的にディスク使用量を増加させる結果になることがあります。&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は [[Btrfs#マルチデバイス対応ファイルシステム|マルチデバイス対応ファイルシステム]] のためのネイティブな &#039;&#039;RAID&#039;&#039; を提供します。btrfs RAID を [[mdadm]] と区別する注目すべき機能は自己回復型の冗長アレイとオンラインバランシングです。より詳しい情報は [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices the Btrfs wiki page] を見て下さい。Btrfs sysadmin ページにも [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#RAID_and_data_replication にセクションがありますので参照して下さい。] 技術的な背景があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Parity RAID (RAID 5/6) コードには、複数の重大なデータ損失のバグがあります。より詳細な情報は Btrfs Wiki の [https://btrfs.wiki.kernel.org/index.php/RAID56 RAID5/6 page] と [https://lore.kernel.org/linux-btrfs/8695beeb-f991-28c4-cf6b-8c92339e468f@inwind.it/ linux-btrfs mailing list] のバグレポートを見て下さい。2020年6月、誰かが [https://lore.kernel.org/linux-btrfs/20200627030614.GW10769@hungrycats.org/ 現在の問題の包括的なリスト] と [https://lore.kernel.org/linux-btrfs/20200627032414.GX10769@hungrycats.org/ 役に立つ回復ガイド] を投稿しています}}&lt;br /&gt;
&lt;br /&gt;
==== Scrub ====&lt;br /&gt;
&lt;br /&gt;
[https://btrfs.wiki.kernel.org/index.php/Glossary Btrfs Wiki Glossary] によると、Btrfs スクラブはオンラインファイルシステムチェックツールです。ファイルシステム上のすべてのデータとメタデータを読み取り、チェックサムと RAID ストレージからの複製コピーを使用して、破損したデータを特定して修復します。&lt;br /&gt;
&lt;br /&gt;
{{Note|実行中のスクラブプロセスはシステムのサスペンドを防ぎます。詳細は [https://lore.kernel.org/linux-btrfs/20140227190656.GA28338@merlins.org/ このスレッド] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
===== 手動で開始する =====&lt;br /&gt;
&lt;br /&gt;
{{ic|/}} を含むファイルシステムに対して (バックグラウンド) scrub を開始する場合。&lt;br /&gt;
&lt;br /&gt;
 # btrfs scrub start /&lt;br /&gt;
&lt;br /&gt;
実行中の scrub の状態を確認する。&lt;br /&gt;
&lt;br /&gt;
 # btrfs scrub status /&lt;br /&gt;
&lt;br /&gt;
===== サービスまたはタイマーを使って起動する =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|btrfs-progs}} パッケージは、指定したマウントポイントを毎月 scrubbing するためのユニット {{ic|btrfs-scrub@.timer}} を提供します。例えば {{ic|/}} の場合は {{ic|btrfs-scrub@-.timer}} 、{{ic|/home}} の場合は {{ic|btrfs-scrub@home.timer}} のように、エスケープしたパスでタイマーを [[有効化]] してください。パスのエスケープは {{ic|systemd-escape -p &#039;&#039;/path/to/mountpoint&#039;&#039;}} で行えます、詳しくは {{man|1|systemd-escape}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
scrub を実行するには {{ic|btrfs-scrub@.service}} を [[systemd#ユニットを使う|スタート]] します。(同じエンコードされたパスで) この方法の利点は {{ic|btrfs scrub}} と比べても同じです。(root ユーザーで) scrub の結果が [[systemd/ジャーナル]] に記録されることです。&lt;br /&gt;
&lt;br /&gt;
冷却が不十分な大きな NVMe ドライブ (ラップトップなど) では、scrub はドライブを速く、長く読み込んで、ドライブを非常に高温にします。systemd で scrub を実行している場合、[[ドロップインファイル]] を使って {{man|5|systemd.resource-control}} にある {{ic|IOReadBandwidthMax}} オプションで簡単にスクラブ速度を制限することができます。&lt;br /&gt;
&lt;br /&gt;
==== Balance ====&lt;br /&gt;
&lt;br /&gt;
balance はファイルシステム上の全てのデータをアロケータに再度流し込みます。デバイスが追加されたり削除された場合にファイルシステム上のデータを再配置するために実行します。balance はデバイスが故障した場合に、冗長な RAID レベルのコピーを再生成します。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|btrfs-progs}}-3.12 から&#039;&#039;バランシング&#039;&#039;はバックグラウンドプロセスになりました - 詳しくは {{ic|man 8 btrfs-balance}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 # btrfs balance start /&lt;br /&gt;
 # btrfs balance status /&lt;br /&gt;
&lt;br /&gt;
=== スナップショット ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;スナップショットとは、btrfs の COW 機能を使って、そのデータ(とメタデータ)を他のサブボリュームと共有する、サブボリュームのことです&amp;quot; 詳しくは [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Snapshots Btrfs Wiki SysadminGuide#Snapshots] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
スナップショットを作成するには&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume snapshot &#039;&#039;source&#039;&#039; [&#039;&#039;dest&#039;&#039;/]&#039;&#039;name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
読み取り専用のスナップショットを作成するには、{{ic|-r}} フラグを追加します。readonly スナップショットの書き込み可能バージョンを作成するには、単純にそのスナップショットを作成します。&lt;br /&gt;
&lt;br /&gt;
{{Note|{Note&lt;br /&gt;
* スナップショットを読み込み専用から書き込み専用に変換することは可能です。しかし、これは将来のインクリメンタル送受信で問題が発生するため、推奨されません[https://lore.kernel.org/linux-btrfs/06e92a0b-e71b-eb21-edb5-9d2a5513b718@gmail.com/] 新しい書き込み可能なスナップショットを作成することで、そのような問題を防ぐことができます。&lt;br /&gt;
* スナップショットは再帰的ではありません。ネストされたサブボリュームは、スナップショット内部では空のディレクトリになります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 送信/受信 ===&lt;br /&gt;
&lt;br /&gt;
サブボリュームは {{ic|send}} コマンドを使って標準出力やファイルに送信することができます。Btrfs の {{ic|receive}} コマンドにパイプで渡すことで非常に便利に使うことが可能です。例えば、{{ic|/root_backup}} という名前のスナップショットを {{ic|/backup}} に送信するには以下のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 # btrfs send /root_backup | btrfs receive /backup&lt;br /&gt;
&lt;br /&gt;
送信するスナップショットは読み取り専用である必要があります。上記のコマンドは外部デバイスにサブボリュームをコピーするのにも使えます (例えば上の {{ic|/backup}} を USB ディスクにマウント)。&lt;br /&gt;
&lt;br /&gt;
また、スナップショットの差分だけを送信することも可能です。例えば、上記のように {{ic|root_backup}} のコピーを送信したことがある場合、{{ic|root_backup_new}} という名前の読み取り専用のスナップショットを新しく作成してから、増加差分だけを {{ic|/backup}} に送信するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs send -p /root_backup /root_backup_new | btrfs receive /backup&lt;br /&gt;
&lt;br /&gt;
これで {{ic|root_backup_new}} という名前の新しいサブボリュームが {{ic|/backup}} に作成されます。&lt;br /&gt;
&lt;br /&gt;
差分バックアップをしたり自動的にバックアップを行うツールは [https://btrfs.wiki.kernel.org/index.php/Incremental_Backup Btrfs Wiki&#039;s Incremental Backup] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== 重複排除 ===&lt;br /&gt;
&lt;br /&gt;
コピーオンライトを使用した場合、Btrfs は実際にはデータをコピーしないでファイルやサブボリュームをコピーできます。ファイルに変更が加えられたときに新しい本当のコピーが作成されます。重複排除はさらに共通部分が存在するデータブロックを認識して、コピーオンライトと同じようにエクステントにまとめてしまいます。&lt;br /&gt;
&lt;br /&gt;
Btrfs パーティションの重複排除に使用するツールについては [https://btrfs.wiki.kernel.org/index.php/Deduplication#Batch 上流の Wiki エントリ] を見てください。{{Pkg|duperemove}}, {{aur|bedup}}, &#039;&#039;btrfs-dedup&#039;&#039; などが存在します。{{pkg|rmlint}} あるいは {{aur|jdupes}} などを使うことでファイルベースでデータの重複排除を行うこともできます。&lt;br /&gt;
&lt;br /&gt;
Btrfs の開発者はインバンド (同期的・インライン) 重複排除に取り組んでおり、新しいデータがファイルシステムに書き込まれたときに重複排除が実行されます。現在のところ実験的な機能としてツリー外で開発されています。新しい機能をテストしてみたい場合は [https://btrfs.wiki.kernel.org/index.php/User_notes_on_dedupe カーネルの wiki ページ] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== リサイズ ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|データの損失を防ぐために、サイズ変更作業を始める前に必ずデータをバックアップしてください}}&lt;br /&gt;
&lt;br /&gt;
ファイルシステムは、デバイスで利用可能な最大のスペースまで拡大することができ、正確なサイズを指定することもできます。ファイルシステムのサイズを大きくする前に、デバイスまたは論理ボリュームのサイズを大きくすることを確認します。&lt;br /&gt;
ファイルシステムに正確なサイズを指定する場合、新しいサイズが次の条件を満たすことを確認します。&lt;br /&gt;
&lt;br /&gt;
* 新しいサイズは既存のデータサイズより大きくなければなりません。&lt;br /&gt;
* ファイルシステムのサイズは、使用可能な領域を超えて拡張できないため、新しいサイズは現在のデバイスサイズと同じかそれ以下でなければなりません。&lt;br /&gt;
&lt;br /&gt;
デバイス上のファイルシステムのサイズを小さくする場合は、新しいサイズが以下の条件を満たすことを確認する。&lt;br /&gt;
&lt;br /&gt;
* 新しいサイズは既存のデータサイズより大きくなければなりません。&lt;br /&gt;
* ファイルシステムのサイズは使用可能な領域を超えて拡張できないため、新しいサイズは現在のデバイスのサイズと同じかそれ以下でなければなりません。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルシステムを保持する論理ボリュームのサイズも小さくする場合は、デバイスまたは論理ボリュームのサイズを小さくする前に、必ずファイルシステムのサイズを小さくしてください。}}&lt;br /&gt;
&lt;br /&gt;
ファイルシステムのサイズをデバイスの利用可能な最大サイズに拡張するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ファイルシステムを特定のサイズに拡張する場合。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize &#039;&#039;size&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;size&#039;&#039;}} は、希望するサイズにバイト単位で置き換えてください。K(キロバイト)、M(メガバイト)、G(ギガバイト)など、値の単位を指定することも可能です。また、値の前にプラス (+) 記号、マイナス (-) 記号を付けることで、現在のサイズに対する増減をそれぞれ指定することも可能です。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize +&#039;&#039;size&#039;&#039; /&lt;br /&gt;
 # btrfs filesystem resize -&#039;&#039;size&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
== 既知の問題 ==&lt;br /&gt;
&lt;br /&gt;
試す前に、いくつかの制限を知っておく必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 暗号化 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs には暗号化のサポートが組み込まれていませんが、この [https://lwn.net/Articles/700487/] は将来的に提供される可能性があります。 ユーザーは、 {{ic|mkfs.btrfs}} を実行する前にパーティションを暗号化できます。 [https://wiki.archlinux.jp/index.php/Dm-crypt/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%85%A8%E4%BD%93%E3%81%AE%E6%9A%97%E5%8F%B7%E5%8C%96#Btrfs_.E3.82.B5.E3.83.96.E3.83.9C.E3.83.AA.E3.83.A5.E3.83.BC.E3.83.A0.E3.81.A8.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97 dm-crypt/スワップを使用したsystem#Btrfsサブボリューム全体の暗号化] を参照してください。&lt;br /&gt;
&lt;br /&gt;
既存の Btrfs ファイルシステムは [[EncFS]] や [[TrueCrypt]] のようなものを使用できますが、おそらく Btrfs の機能の一部はありません。&lt;br /&gt;
&lt;br /&gt;
=== btrfs チェックの問題 ===&lt;br /&gt;
ツール{{ic|btrfs check}} には既知の問題があるため、セクション [[#btrfscheck]] をよく参照してから実行してください。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== パーティションレス Btrfs ディスク ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* ほとんどのユーザーはこのタイプのセットアップを望まず、代わりに通常のパーティションにBtrfsをインストールする必要があります。 さらに、 GRUB はパーティションレスディスクへのインストールを強くお勧めしません。&lt;br /&gt;
* {{Pkg|grub}} 2.04 以降、GRUB の {{ic|core.img}} は大きすぎてBtrfsVBRに収まりません。 {{Bug|63656}} を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Btrfs は、 [[#Subvolumes|subvolumes]] を使用してパーティションをシミュレートし、 [[MBR]] または [[GPT]] パーティションスキームを置き換えて、データストレージデバイス全体を占有できます。 ただし、別の方法で作成された既存の [https://wiki.archlinux.jp/index.php/%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0 パーティション] で [[#File systemcreation|create a Btrfsfilesystem]] を実行するためにパーティションレスセットアップを使用する必要はありません。 パーティションレスのシングルディスクセットアップには、いくつかの制限があります。&lt;br /&gt;
&lt;br /&gt;
* 他の [[ファイルシステム]] を同じディスク上の別のパーティションに配置することはできません。&lt;br /&gt;
* バージョン5.0より前の Linux カーネルを使用している場合、 [[スワップ|スワップ領域]] は使用できません。 Btrfs は[https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB スワップファイル] 5.0 より前をサポートしておらず、 [https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.91.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B7.E3.83.A7.E3.83.B3 スワップパーティション] を作成する場所もありませんでした。&lt;br /&gt;
* [[UEFI]] を使用して起動することはできません。&lt;br /&gt;
&lt;br /&gt;
既存のパーティションテーブルを Btrfs で上書きするには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/sd&#039;&#039;X&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
たとえば、 {{ic|/dev/sda1}} ではなく {{ic|/dev/sda}} を使用します。後者は、パーティショニングスキーム全体を置き換えるのではなく、既存のパーティションをフォーマットします。ルートパーティションは Btrfs なので、 {{ic|btrfs}} がカーネルに組み込まれていることを確認するか、 {{ic|btrfs}} を [[mkinitcpio.conf#MODULES]] と [https://wiki.archlinux.jp/index.php/Mkinitcpio#.E3.82.A4.E3.83.A1.E3.83.BC.E3.82.B8.E4.BD.9C.E6.88.90.E3.81.A8.E3.82.A2.E3.82.AF.E3.83.86.E3.82.A3.E3.83.99.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3 initramfsを再生成する] に入れてください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.jp/index.php/Arch_%E3%83%96%E3%83%BC%E3%83%88%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9#.E3.83.96.E3.83.BC.E3.83.88.E3.83.AD.E3.83.BC.E3.83.80.E3.83.BC ブートローダ] を、 [https://wiki.archlinux.jp/index.php/%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0#Master_Boot_Record マスターブートレコード] を備えたデータ記憶装置の場合と同様にインストールします。[[Syslinux#手動インストール]] または [[GRUB/Tips and tricks#パーティションまたはパーティションレスディスクへのインストール]] を参照してください。 {{ic|/sysrootをマウントできませんでした。}} が原因でカーネルがブートしない場合は、 {{ic|/etc/default/grub}} に {{ic|1=GRUB_PRELOAD_MODULES=&amp;quot;btrfs&amp;quot;}} を追加して、 grub 設定 ([[GRUB#メイン設定ファイルの生成]]) を生成してください。&lt;br /&gt;
&lt;br /&gt;
=== Ext3/4 から Btrfs への変換 ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|btrfs メーリングリストには、不完全/破壊/破損した変換に関する多くの報告があります。 失いたくないデータや &#039;&#039;作業中&#039;&#039; のバックアップがあることを確認してください。 詳細については、 btrfswiki の [https://btrfs.wiki.kernel.org/index.php/Conversion_from_Ext3Conversion fromExt3] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
インストール CD から起動し、次の手順で変換します:&lt;br /&gt;
&lt;br /&gt;
 # btrfs-convert /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションをマウントし、ファイルを確認して変換をテストしてください。 必ず {{ic|/etc/fstab}} を変更してください ({{ic|/etc/fstab}} の &#039;&#039;&#039;type&#039;&#039;&#039; を {{ic|btrfs}} に、 &#039;&#039;&#039;fs_passno&#039;&#039; をに変更すること) [最後のフィールド] を {{ic|0}} に設定します(Btrfs は起動時にファイルシステムのチェックを行わないため)また、パーティションの UUID が変更されていることに注意してください、UUID を使うときは fstab もそれに合わせて更新してください。システムに {{ic|chroot}} して、ブートローダのメニューリストを再構築します([[既存の Linux からインストール]] を参照)ルートファイルシステムを変換する場合、chroot したまま {{ic|mkinitcpio -p linux}} を実行して initramfs を再生成しないと、システムが正常に起動しません。&lt;br /&gt;
&lt;br /&gt;
{{Note|新しく変換された btrfs にファイルをマウントまたは書き込みできないなどの問題がある場合は、バックアップサブボリューム {{ic|/ext2_saved}} がまだ存在する限り、常にロールバックするオプションがあります。 {{ic|btrfs-convert -r /dev/&#039;&#039;partition&#039;&#039;}} コマンドを使用してロールバックします。これにより、新しく変換された btrfs ファイルシステムへの変更が破棄されます。}}&lt;br /&gt;
&lt;br /&gt;
問題がないことを確認したら、バックアップ {{ic|ext2_saved}} サブボリュームを削除して変換を完了します。 これがないと ext3/4 に戻れないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
最後に [[#Balance|balance]] ファイルシステムでスペースを再利用します。&lt;br /&gt;
&lt;br /&gt;
以前にインストールされた一部のアプリケーションは、 Btrfs に適合させる必要があることに注意してください。 特に [[TLP#Btrfs]] はファイルシステムの破損を避けるために特別な注意が必要です。&lt;br /&gt;
&lt;br /&gt;
=== チェックサムのハードウェアアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
Btrfs のチェックサムでハードウェアアクセラレーションが使われているかどうか確認するには:&lt;br /&gt;
{{hc|&amp;lt;nowiki&amp;gt;$ dmesg | grep crc32c&amp;lt;/nowiki&amp;gt;|&amp;lt;nowiki&amp;gt;Btrfs loaded, crc32c=crc32c-intel&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&amp;lt;nowiki&amp;gt;crc32c=crc32c-generic&amp;lt;/nowiki&amp;gt;}} と表示された場合、ルートパーティションが Btrfs であるため、ハードウェアアクセラレーションを使うにはカーネルに {{ic|crc32c-intel}} を組み込む必要があります。[[mkinitcpio.conf]] に {{ic|crc32c-intel}} を追加するだけでは機能しません。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステム破損のリカバリ ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|btrfs check}} ツールには既知の問題があります。セクション [[Btrfs#btrfs check|btrfs check]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;btrfs-check&#039;&#039; はマウントされているファイルシステムでは使えません。ライブ USB から起動しないで &#039;&#039;btrfs-check&#039;&#039; を使えるようにするには、初期 RAM ディスクに以下のように追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|output=&lt;br /&gt;
BINARIES=&amp;quot;/usr/bin/btrfs&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
設定したら [[mkinitcpio]] を使って initramfs を再生成してください。&lt;br /&gt;
&lt;br /&gt;
起動に問題が発生したら、ユーティリティを使って修復することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|fsck でキャッシュを無効化する必要がある場合、起動後に一定時間フリーズするのは通常の動作です (btrfs-transaction がハングアップしているというメッセージがコンソールに表示されます)。しばらく経てばシステムは復帰します。}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://btrfs.wiki.kernel.org/index.php/Btrfsck Btrfs Wiki] を参照。&lt;br /&gt;
&lt;br /&gt;
=== スナップショットから起動する ===&lt;br /&gt;
&lt;br /&gt;
スナップショットをブートするためには、セクション [[Btrfs#サブボリュームをルートとしてマウントする|サブボリュームをルートとしてマウントする]] で説明されているように、サブボリュームをルートパーティションとしてマウントする場合と同じ手順が適用されます。スナップショットはサブボリュームのようにマウントできます。&lt;br /&gt;
&lt;br /&gt;
* [[GRUB]] を使用している場合、{{Pkg|grub-btrfs}} または {{AUR|grub-btrfs-git}} を使用して設定ファイルを再生成すると、自動的に btrfs スナップショットをブートメニューに取り込むことができます。&lt;br /&gt;
* [[rEFInd]] を使用している場合は、{{ic|refind-btrfs.service}} を [[systemd#ユニットを使う|有効]] にして開始後に、{{AUR|refind-btrfs}} を使用してブートメニューに btrfs スナップショットを自動的に取り込むことができます。&lt;br /&gt;
&lt;br /&gt;
=== systemd-nspawn で Btrfs サブボリュームを使う ===&lt;br /&gt;
&lt;br /&gt;
[[Systemd-nspawn#Btrfs のサブボリュームをコンテナのルートとして使う]]や [[Systemd-nspawn#コンテナの一時的な Btrfs スナップショットを使う]]を見てください。&lt;br /&gt;
&lt;br /&gt;
=== アクセス時間のメタデータ更新を削減 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は書き込み時にコピーの性質を持つため、ファイルにアクセスするだけでメタデータのコピーと書き込みを開始します。アクセス時間の更新頻度を減らすと、この予期しないディスク使用がなくなり、パフォーマンスが向上する可能性があります。使用可能なオプションについては、 [[fstab#atime オプション|atime オプション]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 外付けドライブへの増分バックアップ ===&lt;br /&gt;
&lt;br /&gt;
以下のパッケージは {{ic|btrfs send}} と {{ic|btrfs receive}} を使って、外部ドライブに増分バックアップを送信します。実装や機能、要件の違いを見るにはそれぞれのドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
* {{App|btrbk|Btrfs サブボリュームのスナップショットとリモートバックアップを作成するためのツール。|https://github.com/digint/btrbk|{{AUR|btrbk}}}} &lt;br /&gt;
* {{App|buttersink|Buttersink は Btrfs スナップショット用の rsync のようなものです。|https://github.com/AmesCornish/buttersink.git|{{AUR|buttersink-git}}}}&lt;br /&gt;
* {{App|snap-sync|[[Snapper]] スナップショットを使用して、外付けドライブまたはリモートマシンにバックアップします。|https://github.com/wesbarnett/snap-sync.git|{{Pkg|snap-sync}}}}&lt;br /&gt;
* {{App|snapsync|[[Snapper]] の同期ツール。|https://github.com/doudou/snapsync|{{AUR|ruby-snapsync}}}}&lt;br /&gt;
&lt;br /&gt;
以下のパッケージでは、Snapper のスナップショットを Btrfs 以外のファイルシステムへバックアップすることができます。&lt;br /&gt;
&lt;br /&gt;
* {{App|snapborg|Snapper スナップショットを {{Pkg|borg}} バックアップと統合する borgmatic のようなツール。|https://github.com/enzingerm/snapborg|{{AUR|snapborg}}}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
一般的なトラブルシューティングについては [https://btrfs.wiki.kernel.org/index.php/Problem_FAQ Btrfs Problem FAQ] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== GRUB ===&lt;br /&gt;
&lt;br /&gt;
==== パーティションオフセット ====&lt;br /&gt;
&lt;br /&gt;
オフセットの問題は、パーティションのあるディスクに {{ic|core.img}} を埋め込もうとしたときに発生する可能性があります。つまり、GRUB の {{ic|core.img}} をパーティションレスディスク (例: {{ic|/dev/sd&#039;&#039;X&#039;&#039;}}) の Btrfs プールに直接埋め込んでも [[Special:Diff/319474|大丈夫]] です。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] は Btrfs パーティションを起動できますが、モジュールが他の [[ファイルシステム]] よりも大きくなる可能性があります。また、{{ic|grub-install}} で作成した {{ic|core.img}} ファイルは、MBR と最初のパーティションの間にあるドライブの最初の 63 セクタ (31.5KiB) に収まらないかもしれません。{{ic|fdisk}} や {{ic|gdisk}} のような最新のパーティションツールは、最初のパーティションをおよそ 1MiB または 2MiB オフセットすることでこの問題を回避しています。&lt;br /&gt;
&lt;br /&gt;
==== root が見つからない ====&lt;br /&gt;
&lt;br /&gt;
RAID セットアップから起動した時にエラー {{ic|1=error no such device: root}} が表示される場合、{{ic|/usr/share/grub/grub-mkconfig_lib}} を編集して {{ic|1=echo &amp;quot;  search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}&amp;quot;}} からクォートを削除してください。grub の設定を再生成すればエラーを出さずに起動できるはずです。&lt;br /&gt;
&lt;br /&gt;
=== マウントがタイムアウト ===&lt;br /&gt;
&lt;br /&gt;
特に大きな RAID1 アレイでは、ブート中にマウントがタイムアウトして、次のようなジャーナルメッセージが表示されることがあります。&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
Jan 25 18:05:12 host systemd[1]: storage.mount: Mounting timed out. Terminating.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: storage.mount: Mount process exited, code=killed, status=15/TERM&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: storage.mount: Failed with result &#039;timeout&#039;.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: Failed to mount /storage.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: Startup finished in 32.943s (firmware) + 3.097s (loader) + 7.247s (kernel)&amp;gt;&lt;br /&gt;
Jan 25 18:05:46 host kernel: BTRFS error (device sda): open_ctree failed&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
この問題は、[[fstab]] のシステム固有のマウントオプション {{ic|x-systemd.mount-timeout}} で長いタイムアウトを指定することで簡単に回避することが可能です。例:&lt;br /&gt;
&lt;br /&gt;
 /dev/sda                /storage    btrfs       rw,relatime,x-systemd.mount-timeout=5min  0 0&lt;br /&gt;
&lt;br /&gt;
=== BTRFS: open_ctree failed ===&lt;br /&gt;
&lt;br /&gt;
2014年11月現在、{{ic|mkinitcpio.conf}} で {{ic|btrfs}} フックを使用してマルチデバイスの Btrfs を使っている場合に以下のエラーが発生するというバグが [[systemd]] か [[mkinitcpio]] のどちらかに存在します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
BTRFS: open_ctree failed&lt;br /&gt;
mount: wrong fs type, bad option, bad superblock on /dev/sdb2, missing codepage or helper program, or other error&lt;br /&gt;
&lt;br /&gt;
In some cases useful info is found in syslog - try dmesg|tail or so.&lt;br /&gt;
&lt;br /&gt;
You are now being dropped into an emergency shell.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 行から {{ic|btrfs}} を削除して代わりに {{ic|MODULES}} 行に {{ic|btrfs}} を追加することで解決します。修正を施したら {{ic|mkinitcpio -p linux}} で initramfs を再生成して (必要ならプリセットを調整します) 再起動してください。&lt;br /&gt;
&lt;br /&gt;
デバイスが存在しない raid アレイをマウントしようとしたときも同じエラーが表示されます。その場合は {{ic|/etc/fstab}} に {{ic|degraded}} マウントオプションを追加してください。ルートパーティションがアレイ上にある場合、[[カーネルパラメータ]]に {{ic|1=rootflags=degraded}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
2016年8月現在、このバグの回避策として考えられるのは、{{ic|/etc/fstab}} で単一ドライブのみでアレイをマウントし、他のドライブは btrfs が自動的に発見して追記するようにすることです。UUID や LABEL のようなグループベースの識別子は、この不具合の原因になっているようです。例えば、&#039;disk1&#039; と &#039;disk2&#039; からなる2デバイスの RAID1 アレイには UUID が割り当てられますが、UUID を使う代わりに {{ic|/dev/mapper/disk1}} のみを {{ic|/etc/fstab}} で使用します。より詳しい説明は、以下の [https://web.archive.org/web/20161108175034/http://blog.samcater.com/fix-for-btrfs-open_ctree-failed-when-running-root-fs-on-raid-1-or-raid10-arch-linux/ ブログ記事] を参照してください。&lt;br /&gt;
&lt;br /&gt;
また、[[mkinitcpio#設定|mkinitcpio.conf]] の {{ic|udev}} フックを削除し、{{ic|systemd}} フックに置き換えることも可能な対処法です。この場合、{{ic|btrfs}} は{{ic|HOOKS}}や{{ic|MODULES}} 配列に &#039;&#039;not&#039;&#039; とする必要があります。&lt;br /&gt;
&lt;br /&gt;
詳細は [https://bbs.archlinux.org/viewtopic.php?id=189845 フォーラムスレッド] や {{Bug|42884}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== btrfs check ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|Btrfs はまだ開発途上であり、特に {{ic|btrfs check}} コマンドについては仕様が固まっていないので、{{ic|--repair}} スイッチを付けて {{ic|btrfs check}} を実行するときはあらかじめ Btrfs のドキュメントを読んでバックアップを作成することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-check btrfs check]&#039;&#039; コマンドを使うことでアンマウントされた Btrfs ファイルシステムをチェックしたり修復することが可能です。ただし、この修復ツールはまだ開発中であり、特定のファイルシステムエラーは修復することができません。&lt;br /&gt;
&lt;br /&gt;
=== 絶え間ないドライブアクティビティ ===&lt;br /&gt;
&lt;br /&gt;
[[カーネル]] バージョン 6.2 以降、{{ic|1=discard=async}} {{man|8|mount}} オプションがデフォルトで設定されています。これ [https://lore.kernel.org/linux-btrfs/Y%2F%2Bn1wS%2F4XAH7X1p@nz/#r 報告] により、廃棄キューがいっぱいになると、アイドル状態でも一部のドライブで一定のドライブアクティビティが発生し、処理されるよりも速くなります。これにより、特に NVMe ベースのドライブで電力使用量が増加する可能性があります。&lt;br /&gt;
&lt;br /&gt;
回避策の 1 つは、ドライブのアクティビティが停止するまで破棄 {{ic|iops_limit}} を増やすことです。&lt;br /&gt;
&lt;br /&gt;
これは、[[Wikipedia:sysfs|sysfs]] を使用して実現できます。例:&lt;br /&gt;
&lt;br /&gt;
 # echo 1000 &amp;gt; /sys/fs/btrfs/&#039;&#039;uuid&#039;&#039;/discard/iops_limit&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|&#039;&#039;uuid&#039;&#039;}} は btrfs ファイルシステムの UUID です。{{ic|1000}} の制限は実験的に調整する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動時にパラメータを設定するには、[[systemd-tmpfiles]] を使用できます。たとえば、次のファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/btrfs-discard.conf|&lt;br /&gt;
w /sys/fs/btrfs/&#039;&#039;uuid&#039;&#039;/discard/iops_limit - - - - 1000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
あるいは、[[fstab]] の {{ic|nodiscard}} マウントオプションを使用してマウントし、代わりに [[ソリッドステートドライブ#定期的な TRIM|定期的な TRIM]] を使用して、非同期破棄を完全に無効にすることもできます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* 公式サイト&lt;br /&gt;
** [https://btrfs.wiki.kernel.org/ Btrfs Wiki]&lt;br /&gt;
* パフォーマンス関連&lt;br /&gt;
** [https://superuser.com/questions/432188/should-i-put-my-multi-device-btrfs-filesystem-on-disk-partitions-or-raw-devices Btrfs on raw disks?]&lt;br /&gt;
** [http://comments.gmane.org/gmane.comp.file-systems.btrfs/19440 Varying leafsize and nodesize in Btrfs]&lt;br /&gt;
** [http://comments.gmane.org/gmane.comp.file-systems.btrfs/15646 Btrfs support for efficient SSD operation (data blocks alignment)]&lt;br /&gt;
** [https://btrfs.wiki.kernel.org/index.php/FAQ#Is_Btrfs_optimized_for_SSD.3F Is Btrfs optimized for SSDs?]&lt;br /&gt;
** Phoronix によるマウントオプションのベンチマーク&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs-mount-linux49 Linux 4.9]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=linux_314_btrfs Linux 3.14]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=linux_btrfs_311&amp;amp;num=1 Linux 3.11]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTM0OTU Linux 3.9]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs_linux37_mounts&amp;amp;num=1 Linux 3.7]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=linux_btrfs_options&amp;amp;num=1 Linux 3.2]&lt;br /&gt;
** [http://blog.erdemagaoglu.com/post/4605524309/lzo-vs-snappy-vs-lzf-vs-zlib-a-comparison-of Lzo vs. zLib]&lt;br /&gt;
* その他&lt;br /&gt;
** [http://www.funtoo.org/wiki/BTRFS_Fun Funtoo Wiki Btrfs Fun]&lt;br /&gt;
** [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTA0ODU Avi Miller presenting Btrfs] at SCALE 10x, January 2012.&lt;br /&gt;
** [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTA4Mzc Summary of Chris Mason&#039;s talk] from LFCS 2012&lt;br /&gt;
** [https://git.kernel.org/?p&amp;amp;#61;linux/kernel/git/torvalds/linux-2.6.git;a&amp;amp;#61;commit;h&amp;amp;#61;35054394c4b3cecd52577c2662c84da1f3e73525 Btrfs: stop providing a bmap operation to avoid swapfile corruptions] 2009-01-21&lt;br /&gt;
** [http://marc.merlins.org/perso/btrfs/post_2014-03-22_Btrfs-Tips_-Doing-Fast-Incremental-Backups-With-Btrfs-Send-and-Receive.html Doing Fast Incremental Backups With Btrfs Send and Receive]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Btrfs&amp;diff=39045</id>
		<title>Btrfs</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Btrfs&amp;diff=39045"/>
		<updated>2024-09-19T13:48:34Z</updated>

		<summary type="html">&lt;p&gt;Hikali: # mkfs.btrfs -L &amp;#039;&amp;#039;mylabel&amp;#039; &amp;#039;/dev/&amp;#039;&amp;#039;partition&amp;#039;&amp;#039; 内の  mylabel と/dev/partition の間にスペースを追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ファイルシステム]]&lt;br /&gt;
[[de:Arch auf BtrFS]]&lt;br /&gt;
[[en:Btrfs]]&lt;br /&gt;
[[es:Btrfs]]&lt;br /&gt;
[[pt:Btrfs]]&lt;br /&gt;
[[ru:Btrfs]]&lt;br /&gt;
[[zh-hans:Btrfs]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ファイルシステム}}&lt;br /&gt;
{{Related|Snapper}}&lt;br /&gt;
{{Related|Yabsnap}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://btrfs.wiki.kernel.org/index.php/Main_Page Btrfs Wiki] より:&lt;br /&gt;
&lt;br /&gt;
:Btrfs は、耐障害性、修復、および簡単な管理に重点を置きながら、高度な機能を実装することを目的とした Linux 用の最新のコピーオンライト(CoW)ファイルシステムです。複数の企業で共同開発された Btrfs は、GPL に基づいてライセンスされており、誰からの寄付も受け付けています。&lt;br /&gt;
&lt;br /&gt;
{{Note|他のファイルシステムと同様に、Btrfs は継続的に開発中です。これは、特定の機能がまだ日常的に使用できる状態になっていない可能性があります。使用事例が影響を受ける可能性があるかどうかを確認するには、Btrfs ドキュメントの [https://btrfs.readthedocs.io/en/latest/Status.html Status] とこの記事の [[Btrfs#既知の問題|既知の問題]] セクションを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
== 準備 ==&lt;br /&gt;
&lt;br /&gt;
ユーザースペースのユーティリティについては、基本的な操作に必要な {{Pkg|btrfs-progs}} パッケージを [[インストール]] してください。&lt;br /&gt;
&lt;br /&gt;
Btrfs ファイルシステムから起動する必要がある場合 (つまり、カーネルと initramfs が Btrfs パーティションにある場合)、あなたの [[ブートローダー]] が Btrfs をサポートしているか確認してください。&lt;br /&gt;
&lt;br /&gt;
== ファイルシステムの作成 ==&lt;br /&gt;
&lt;br /&gt;
以下は、新しい Btrfs [[ファイルシステム]] を作成する方法を示しています。ext3/4 パーティションを Btrfs に変換するには、[[Btrfs#Ext3/4 から Btrfs への変換|Ext3/4 から Btrfs への変換]] を見て下さい。パーティションレスなセットアップを使うには、[[Btrfs#パーティションレス Btrfs ディスク|パーティションレス Btrfs ディスク]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|8|mkfs.btrfs}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 単一デバイス上のファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
パーティション {{ic|/dev/&#039;&#039;partition&#039;&#039;}} に Btrfs ファイルシステムを作るには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L &#039;&#039;mylabel&#039; &#039;/dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
メタデータの Btrfs のデフォルトのノードサイズは 16KB ですが、データのデフォルトのセクターサイズはページサイズと同じで、自動検出されます。メタデータに大きなノードサイズを使用するには(セクターサイズの倍数である必要があり、最大 64KB が許可されます)、この例に示すように、{{ic|-n}} スイッチを介して {{ic|nodesize}} の値を指定します 32KB ブロックの使用例:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -L &#039;&#039;mylabel&#039;&#039; -n 32k /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|8|mkfs.btrfs|OPTIONS}} によると、&amp;quot;[a]ノードサイズが小さいほど断片化は増加しますが、bツリーが高くなり、ロックの競合が少なくなります。ノードサイズが大きいほど、メタデータブロックを更新する際のメモリ操作のコストが高くなりますが、パッキングが向上し、断片化が少なくなります&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
=== マルチデバイス対応ファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|Btrfs の RAID 5 と RAID 6 モードには致命的な欠陥があり、&amp;quot;捨てデータでのテスト以外&amp;quot; には使用しないでください。[https://lore.kernel.org/linux-btrfs/20200627032414.GX10769@hungrycats.org/ 既知の問題と部分的な回避策のリスト]。状況の更新については [https://btrfs.wiki.kernel.org/index.php/RAID56 the Btrfs page on RAID5 and RAID6] を見て下さい (更新されていないようです)}}&lt;br /&gt;
&lt;br /&gt;
複数のデバイスを使用して RAID を作成することができます。サポートされている RAID レベルは RAID 0, RAID 1, RAID 10, RAID 5, RAID 6 です。カーネル 5.5 からは RAID1c3 と RAID1c4 で RAID1 レベルの 3-コピーと 4-コピーが可能です。RAIDレベルは、データ用とメタデータ用にそれぞれ {{ic|-d}} と {{ic|-m}} オプションを使って別々に設定することができます。デフォルトでは、データは1つのコピー ({{ic|single}}) で、メタデータはミラーリング ({{ic|raid1}}) された状態になっています。これは &lt;br /&gt;
[[W:JBOD|JBOD configuration]] を作成すると、ディスクは1つのファイルシステムとして認識されますが、ファイルは複製されません。Btrfs RAID ボリュームを作成する方法についての詳しい情報は [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices Using Btrfs with Multiple Devices] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs -d single -m raid1 /dev/&#039;&#039;part1&#039;&#039; /dev/&#039;&#039;part2&#039;&#039; ...&lt;br /&gt;
&lt;br /&gt;
プールで複数の Btrfs デバイスを使うには {{ic|udev}} フックか {{ic|btrfs}} フックを {{ic|/etc/mkinitcpio.conf}} に記述する必要があります。詳しくは [[Mkinitcpio#HOOKS]] の記事を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* マルチデバイスファイルシステムに後からデバイスを追加することも可能です。詳しくは [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices Btrfs wiki article] を見て下さい。&lt;br /&gt;
* デバイスは異なるサイズにすることができます。しかし、RAID 構成の1つのドライブが他のドライブより大きい場合、この余分なスペースは使用されません。&lt;br /&gt;
* [[Syslinux]] などのいくつかの [[ブートローダー]] はマルチデバイスファイルシステムをサポートしません。&lt;br /&gt;
* Btrfs は自動的に最速のデバイスから読み込むわけではないので、異なる種類のディスクを混在させるとパフォーマンスに一貫性がなくなります。詳しくは [https://stackoverflow.com/a/55408367] を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
マルチデバイス Btrfs ファイルシステム特有のメンテナンスに関するアドバイスは [[#RAID]] をご覧下さい。&lt;br /&gt;
&lt;br /&gt;
== ファイルシステムの構成 ==&lt;br /&gt;
&lt;br /&gt;
=== コピーオンライト (CoW)===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは Btrfs は全てのファイルに対して常に [[Wikipedia:copy-on-write|copy-on-write]] を使用します。書き込みはその場のデータを上書きしません; 代わりに、ブロックの修正されたコピーが新しい場所に書き込まれ、メタデータは新しい場所を指すように更新されます。実装の詳細や利点と欠点については [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Copy_on_Write_.28CoW.29 Btrfs Sysadmin Guide セクション] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== CoW の無効化 ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|Btrfs で CoW を無効にすると、チェックサムも無効になります。 Btrfs は破損した {{ic|nodatacow}} ファイルを検出できません。 RAID 1 と組み合わせると、停電やその他の破損原因により、データが同期しなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
マウントされたサブボリュームで新しく作成されたファイルのコピー オン ライトを無効にするには、{{ic|nodatacow}} マウント オプションを使用します。これは、新しく作成されたファイルにのみ影響します。コピーオンライトは、既存のファイルに対して引き続き影響します。 {{ic|nodatacow}} オプションも圧縮を無効にします。詳しくは {{man|5|btrfs}} をご覧ください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|5|btrfs|MOUNT OPTIONS}} から:&lt;br /&gt;
&lt;br /&gt;
:単一のファイル システム内で、一部のサブボリュームを {{ic|nodatacow}} でマウントし、他のサブボリュームを {{ic|datacow}} でマウントすることはできません。最初にマウントされたサブボリュームのマウント オプションは、他のサブボリュームに適用されます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ファイルやディレクトリ単体で CoW を無効化するには、次のコマンドを使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ chattr +C &amp;lt;/dir/file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
これにより、ファイルへの参照が 1つしかない操作のコピーオンライトが無効になります。複数の参照がある場合。ファイル クローン/軽量クローンまたはファイルシステムスナップショットが原因で、コピーオンライトが引き続き発生します。{{Pkg|coreutils}} 9.0 以降、{{ic|cp}} はデフォルトで軽量コピーを実行しようとすることに注意してください。詳細については、{{man|1|cp}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|1|chattr}} から:&lt;br /&gt;
&lt;br /&gt;
:btrfs の場合、&#039;{{ic|C}}&#039; フラグを新しいファイルまたは空のファイルに設定する必要があります。すでにデータブロックがあるファイルに設定されている場合、ファイルに割り当てられたブロックが完全に安定する時期は未定義です。&#039;{{ic|C}}&#039; フラグがディレクトリに設定されている場合、ディレクトリには影響しませんが、そのディレクトリに作成された新しいファイルには {{ic|No_COW}} 属性が含まれます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=上記のメモに従い、次のトリックを使用して、ディレクトリ内の既存のファイルのコピーオンライトを無効にすることができます:&lt;br /&gt;
&lt;br /&gt;
 $ mv &#039;&#039;/path/to/dir&#039;&#039; &#039;&#039;/path/to/dir&#039;&#039;_old&lt;br /&gt;
 $ mkdir &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ chattr +C &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ cp -a --reflink=never &#039;&#039;/path/to/dir&#039;&#039;_old/. &#039;&#039;/path/to/dir&#039;&#039;&lt;br /&gt;
 $ rm -rf &#039;&#039;/path/to/dir&#039;&#039;_old&lt;br /&gt;
&lt;br /&gt;
このプロセス中にデータが使用されていないことを確認してください。また、後述のように {{ic|1=--reflink=never}} を指定しない {{ic|mv}} または {{ic|cp}} は機能しないことに注意してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== スナップショットへの影響 =====&lt;br /&gt;
&lt;br /&gt;
ファイルのコピーオンライトが無効 (NOCOW) でスナップショットが作成された場合、スナップショットは古いファイルブロックを所定の位置にロックするため、スナップショット後のファイルブロックへの最初の書き込みは [https://www.spinics.net/lists/linux-btrfs/msg33090.html COW 操作] になります。ただし、ファイルは NOCOW 属性を保持し、同じファイルブロックへの後続の書き込みは次のスナップショットまでそのまま残ります。&lt;br /&gt;
&lt;br /&gt;
スナップショットを頻繁に行うと、最初の書き込みで COW が必要になるため、NOCOW の効果が低下する可能性があります。そのようなファイルのコピーオンライトを完全に避けるには、それらを別のサブボリュームに入れ、そのサブボリュームのスナップショットを作成しないでください。&lt;br /&gt;
&lt;br /&gt;
=== 圧縮 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は [https://btrfs.wiki.kernel.org/index.php/Compression 透過的自動圧縮] をサポートしています。これはファイルサイズを小さくするだけでなく、書き込み増幅を減らすことでフラッシュベースのメディアの寿命を大幅に延ばします。[[Fedora:Changes/BtrfsByDefault#Compression]], [https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/NTV77NFF6NDZM3QTPUM2TQZ5PCM6GOO2/], [https://pagure.io/fedora-btrfs/project/issue/36#comment-701551] を参照して下さい。また、[https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs_compress_2635&amp;amp;num=1 パフォーマンスを向上させる] 場合もありますが(例:重いファイル I/O を持つシングルスレッド)、(例:大きなファイル I/O を持つマルチスレッドや CPU 集中タスク)では明らかにパフォーマンスを低下させることがあります。一般に、最速の圧縮アルゴリズムである &#039;&#039;zstd&#039;&#039; と &#039;&#039;lzo&#039;&#039; を用いると、より良いパフォーマンスが得られます。いくつかの [https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs-zstd-compress benchmarks] では、詳細な比較がなされています。&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;alg&#039;&#039;}} は {{ic|zlib}}, {{ic|lzo}}, {{ic|zstd}}, あるいは {{ic|no}} のいずれかです。(圧縮しない場合) このオプションを使うと、btrfs はデータの最初の部分を圧縮することで縮小されるかどうかをチェックします。 もしそうなら、そのファイルへの書き込み全体が圧縮されます。 そうでない場合は、何も圧縮されません。 このオプションでは、書き込みの最初の部分が縮小しない場合、残りのデータが非常に縮小しても、書き込みに圧縮は適用されません。[https://btrfs.wiki.kernel.org/index.php/Compression#What_happens_to_incompressible_files.3F] これは、書き込むべき全てのデータが btrfs に完全に与えられ圧縮されるまで、ディスクの書き込み開始を待たせるのを防ぐために行われます。&lt;br /&gt;
&lt;br /&gt;
代わりに {{ic|1=compress-force=&#039;&#039;alg&#039;&#039;}} マウントオプションを使うと、btrfs が最初の部分を圧縮しているかどうかのチェックをスキップし、全てのファイルに対して自動的に圧縮を試行することが可能になります。 最悪の場合、これは何の目的もなく CPU 使用量を (少し) 増加させる可能性があります。しかし、複数の用途が混在するシステムでの経験的なテストでは、 {{ic|1=compress-force=&#039;&#039;zstd&#039;&#039;}} を使うことで、ただの {{ic|1=compress=&#039;&#039;zstd&#039;&#039;}} に比べて約10%のディスク圧縮という大きな改善がありました、この場合も 10% のディスク圧縮でした。&lt;br /&gt;
&lt;br /&gt;
マウントオプションが追加された後に作成または変更されたファイルのみが圧縮されます。&lt;br /&gt;
&lt;br /&gt;
ここで {{ic|&#039;&#039;alg&#039;&#039;}} は {{ic|zlib}}, {{ic|lzo}}, {{ic|zstd}} のいずれかです。例えば、ファイルシステム全体を {{pkg|zstd}} で再圧縮する場合、以下のコマンドを実行します。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem defragment -r -v -czstd /&lt;br /&gt;
&lt;br /&gt;
空の Btrfs パーティションに Arch をインストールするときに圧縮を有効にするには、ファイルシステムを [[マウント]] するときに {{ic|compress}} オプションを使ってください。{{ic|1=mount -o compress=zstd /dev/sd&#039;&#039;xY&#039;&#039; /mnt/}} となります。設定時に、[[fstab]]でルートファイルシステムのマウントオプションに {{ic|1=compress=zstd}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|マウントオプション {{ic|compress}} を使わずにファイル単位で圧縮を有効にすることもできます; そうするためには、ファイルに {{ic|chattr +c}} を適用します。ディレクトリに適用すると、新しいファイルが来たときに自動的に圧縮されます。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* このオプションを使うと、古いカーネルや {{ic|zstd}} をサポートしていない {{pkg|btrfs-progs}} を使っているシステムは、ファイルシステムを読んだり修復したりできない可能性があります。&lt;br /&gt;
* [[GRUB]] は 2.04 で &#039;&#039;zstd&#039;&#039; のサポートを導入しました。MBR/ESP にインストールされたブートローダを実際にアップグレードしたことを確認してください。BIOS/UEFI セットアップに適したオプションで {{ic|grub-install}} を実行して、{{Bug|63235}} を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 圧縮の種類と比率を表示する ====&lt;br /&gt;
&lt;br /&gt;
{{pkg|compsize}} はファイルのリスト (または btrfs ファイルシステム全体) を受け取り、使用された圧縮タイプと有効な圧縮率を測定します。 非圧縮サイズは {{man|1|du}} のような他のプログラムによって与えられる数値と一致しないかもしれません。なぜなら、たとえ何度も再リンクされていても、たとえその一部がもうどこにも使われていないけれどゴミ収集されていないとしても、全てのエクステントは一度にカウントされるからです。 これは {{ic|compsize -x /}} のような状況で便利で、btrfs でないサブディレクトリを探そうとして、実行全体が失敗するのを避けます。&lt;br /&gt;
&lt;br /&gt;
=== サブボリューム ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;btrfs サブボリュームはブロックデバイスではありません(そしてブロックデバイスとして扱えません)代わりに btrfs サブボリュームは POSIX ファイル名空間として考えることができます。このネームスペースはファイルシステムのトップレベルのサブボリュームからアクセスすることもできますし、それ自体でマウントすることもできます&amp;quot; [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes]&lt;br /&gt;
&lt;br /&gt;
各 Btrfs ファイルシステムには ID 5 のトップレベルのサブボリュームがあります。これは {{ic|/}} としてマウントすることができます。(デフォルト) または、代わりに別のサブボリュームを [[Btrfs#サブボリュームをマウントする|マウントする]] こともできます。サブボリュームはファイルシステム内で移動することができ、パスよりもむしろその ID で識別されます。&lt;br /&gt;
&lt;br /&gt;
詳細については、次のリンクを参照してください:&lt;br /&gt;
&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes Btrfs Wiki SysadminGuide#Subvolumes]&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/Getting_started#Basic_Filesystem_Commands Btrfs Wiki Getting started#Basic Filesystem Commands]&lt;br /&gt;
* [https://btrfs.wiki.kernel.org/index.php/Trees Btrfs Wiki Trees]&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームを作成する ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームを作成するには:&lt;br /&gt;
 # btrfs subvolume create &#039;&#039;/path/to/subvolume&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームを一覧する ====&lt;br /&gt;
&lt;br /&gt;
現在のサブボリュームのリストを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume list -p .&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームの削除 ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームを削除するには&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume delete &#039;&#039;/path/to/subvolume&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Linux 4.18 以降では、通常のディレクトリのようにサブボリュームを削除することもできます ({{ic|rm -r}}, {{ic|rmdir}})&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームをマウントする ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームは {{ic|1=subvol=&#039;&#039;/path/to/subvolume&#039;&#039;}} や {{ic|1=subvolid=&#039;&#039;objectid&#039;&#039;}} マウントフラグを使うことでファイルシステムのパーティションと同じようにマウントできます。例えば、{{ic|subvol_root}} という名前のサブボリュームが存在したら {{ic|/}} にマウントすることができます。ファイルシステムのトップレベルにサブボリュームを作成して適切なマウントポイントにマウントすることで、伝統的なファイルシステムのパーティションと同じように使うことができ、[[Btrfs#スナップショット|スナップショット]] を使用してファイルシステムを前の状態に簡単に戻すことが可能です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=トップレベルのサブボリューム (ID=5) を {{ic|/}} として使用しないことでサブボリュームのレイアウトの変更を簡単にできます。サブボリュームを作成して実際のデータを保存して {{ic|/}} にマウントします。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{man|5|btrfs|MOUNT OPTIONS}} から&lt;br /&gt;
:ほとんどのマウントオプションは &#039;&#039;&#039;ファイルシステム全体&#039;&#039;&#039; に適用され、マウントされる最初のサブボリュームのオプションだけが有効になります。これは実装不足によるもので、将来的に変更されるかもしれません。&lt;br /&gt;
&lt;br /&gt;
サブボリュームごとにどのマウントオプションが使えるかは [https://btrfs.wiki.kernel.org/index.php/FAQ#Can_I_mount_subvolumes_with_different_mount_options.3F Btrfs Wiki FAQ] を見て下さい。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Snapper#推奨ファイルシステムレイアウト]], [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Managing_Snapshots Btrfs SysadminGuide#Managing Snapshots], [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Layout Btrfs SysadminGuide#Layout] などにサブボリュームを使用するファイルシステムレイアウトの例が存在します。&lt;br /&gt;
&lt;br /&gt;
btrfs 固有のマウントオプションの完全なリストは {{man|5|btrfs}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== サブボリュームをルートとしてマウントする ====&lt;br /&gt;
&lt;br /&gt;
サブボリュームをルートマウントポイントとして使用するには、{{ic|1=rootflags=subvol=&#039;&#039;/path/to/subvolume&#039;&#039;}} を使用して [[カーネルパラメータ#設定|カーネルパラメータ]] 経由でサブボリュームを指定します。{{ic|/etc/fstab}} でルート・マウントポイントを編集し、マウント・オプションに {{ic|1=subvol=}} を指定します。または、サブボリュームの ID {{ic|1=rootflags=subvolid=&#039;&#039;objectid&#039;&#039;}} をカーネルパラメータとして使い、{{ic|1=subvolid=&#039;&#039;objectid&#039;&#039;}} を {{ic|/etc/fstab}} のマウントオプションとして指定することもできます。&lt;br /&gt;
&lt;br /&gt;
==== デフォルトのサブボリュームを設定する ====&lt;br /&gt;
&lt;br /&gt;
マウントオプションに {{ic|1=subvol=}} が指定されない場合、デフォルトのサブボリュームがマウントされます。デフォルトサブボリュームを変更するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume set-default &#039;&#039;subvolume-id&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
ここで、&#039;&#039;subvolume-id&#039;&#039; は [[Btrfs#サブボリュームを一覧する|listing]] で見つけることができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=[[GRUB]] があるシステムでデフォルトのサブボリュームを変更した後、ブートローダに変更を通知するために {{ic|grub-install}} を再度実行する必要があります。[https://bbs.archlinux.org/viewtopic.php?pid=1615373 このフォーラムのスレッド] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|btrfs subvolume set-default}} でデフォルトのサブボリュームを変更すると、ファイルシステムのトップレベルは {{ic|1=subvol=/}} や {{ic|1=subvolid=5}} マウントオプションを使ってアクセスする以外ではアクセスできなくなります [https://btrfs.wiki.kernel.org/index.php/SysadminGuide]&lt;br /&gt;
&lt;br /&gt;
=== クォータ ===&lt;br /&gt;
&lt;br /&gt;
{{warning|Qgroup はまだ安定状態ではなくサブボリュームのスナップショットとクォータを組み合わせると操作によってパフォーマンスに問題をきたします (スナップショットの削除など)。さらに [https://btrfs.wiki.kernel.org/index.php/Quota_support#Known_issues 既知の問題] が存在しています。}}&lt;br /&gt;
&lt;br /&gt;
Btrfs におけるクォータのサポートはクォータグループ (qgroup) を利用してサブボリュームレベルで実装されています: 各サブボリュームにはデフォルトで &#039;&#039;0/&amp;lt;subvolume id&amp;gt;&#039;&#039; という形式でクォータグループが割り当てられています。必要であればクォータグループを作成することもできます。&lt;br /&gt;
&lt;br /&gt;
クォータグループを使うにはまずクォータを有効にする必要があります:&lt;br /&gt;
&lt;br /&gt;
 # btrfs quota enable &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上記のコマンドを実行してから新しいサブボリュームを作成すると、グループによって制御が可能になります。既存のサブボリュームでも制御を行いたい場合、クォータを有効にしてから、&#039;&#039;&amp;lt;subvolume id&amp;gt;&#039;&#039; を使ってサブボリュームごとにクォータグループを作成して再スキャンしてください:&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume list &amp;lt;path&amp;gt; | cut -d&#039; &#039; -f2 | xargs -I{} -n1 btrfs qgroup create 0/{} &amp;lt;path&amp;gt;&lt;br /&gt;
 # btrfs quota rescan &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Btrfs のクォータグループはツリー構造になっていて、サイズ制限はクォータグループごとに設定し、ツリーに属しているサブボリュームに制限が課せられます。&lt;br /&gt;
&lt;br /&gt;
クォータグループで設定できる制限は合計データ使用量・非共有のデータ使用量・圧縮データ使用量、あるいはそれらを組み合わせたものです。元のボリュームファイルを削除してコピーを残す場合、他のクォータグループの非共有制限が変わるため、ファイルのコピーや削除で制限に抵触する可能性があります。例えば、新しいスナップショットが元のサブボリュームの全てのブロックと同じデータを持っている場合、どちらかのサブボリュームだけで共通データを削除するともう片方のサブボリュームの制限に引っかかる可能性があります。&lt;br /&gt;
&lt;br /&gt;
クォータグループに制限を設定するには、{{ic|btrfs qgroup limit}} コマンドを使います。合計使用量の制限や非共有制限 ({{ic|-e}}) または圧縮制限 ({{ic|-c}}) が設定できます。ファイルシステムの特定のパスにおける使用量や制限を表示するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs qgroup show -reF &amp;lt;path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== コミット間隔の設定 ===&lt;br /&gt;
&lt;br /&gt;
データがファイルシステムに書き込まれる解像度は、Btrfs自体とシステム全体の設定によって決まります。 Btrfs のデフォルトは、新しいデータがファイルシステムにコミットされる30秒のチェックポイント間隔です。これは、btrfs パーティションの {{ic|/etc/fstab}} に {{ic|commit}} マウントオプションを追加することで変更できます。&lt;br /&gt;
&lt;br /&gt;
 LABEL=arch64 / btrfs defaults,compress=zstd,commit=120 0 0&lt;br /&gt;
&lt;br /&gt;
システム全体の設定もコミット間隔に影響します。これらには {{ic|/proc/sys/vm/*}} の下のファイルが含まれており、このwiki記事の範囲外です。それらのカーネルドキュメントは、https://www.kernel.org/doc/html/latest/admin-guide/sysctl/vm.html で入手できます。&lt;br /&gt;
&lt;br /&gt;
=== SSD TRIM ===&lt;br /&gt;
&lt;br /&gt;
Btrfs ファイルシステムは、TRIM コマンドをサポートする SSD ドライブから未使用のブロックを解放できます。カーネルバージョン 5.6 以降、非同期破棄がサポートされ、マウントオプション {{ic|1=discard=async}} で有効になります。解放されたエクステントはすぐには破棄されませんが、グループ化され、後で別のワーカースレッドによってトリミングされるため、コミットの待ち時間が短縮されます。&lt;br /&gt;
&lt;br /&gt;
TRIM の有効化と使用に関するより詳しい情報は [[ソリッドステートドライブ#TRIM]] に記載されています。&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
=== スワップファイル ===&lt;br /&gt;
&lt;br /&gt;
Btrfs の [[スワップファイル]] は Linux カーネル5.0 以降でサポートされています。[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ed46ff3d423780fa5173b38a844bf0fdb210a2a7] スワップファイルを初期化する適切な方法は、最初にファイルをホストする非圧縮、非スナップショットのサブボリュームを作成し、そのディレクトリに &#039;&#039;cd&#039;&#039; してから、長さゼロのファイルを作成し、{{ic|No_COW}} を設定することです。 属性を [https://wiki.archlinux.jp/index.php/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%91%E3%83%BC%E3%83%9F%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A8%E5%B1%9E%E6%80%A7#chattr_.E3.81.A8_lsattr chattr] で指定し、圧縮が無効になっていることを確認します。&lt;br /&gt;
&lt;br /&gt;
 # cd &#039;&#039;/path/to/swapfile&#039;&#039;&lt;br /&gt;
 # truncate -s 0 ./swapfile&lt;br /&gt;
 # chattr +C ./swapfile&lt;br /&gt;
 # btrfs property set ./swapfile compression none&lt;br /&gt;
&lt;br /&gt;
詳細な設定については、 [https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E4.BD.9C.E6.88.90 スワップファイルの作成] を参照してください。スワップファイルへの休止状態の構成については、[https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate#Hibernation_into_swap_file_on_Btrfs Hibernation into swap file on Btrfs]で説明されています。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=Linux カーネル5.0 以降、 Btrfs にはネイティブスワップファイルのサポートがありますが、いくつかの制限があります。&lt;br /&gt;
* スワップファイルをスナップショットサブボリュームに置くことはできません。適切な手順は、スワップファイルを配置する新しいサブボリュームを作成することです。&lt;br /&gt;
* 複数のデバイスにまたがるファイルシステム上のスワップファイルはサポートされていません。 [https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F Btrfs wiki: Does btrfs support swap files?] および [https://bbs.archlinux.org/viewtopic.php?pid=1849371#p1849371 Arch forums discussion]。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 使用領域 空き領域の表示 ===&lt;br /&gt;
&lt;br /&gt;
{{man|1|df}} のような一般的な linux ユーザースペースツールは Btrfs パーティションの空き容量を不正確に報告します。Btrfs パーティションを調べるには {{ic|btrfs filesystem usage}} を使うことが推奨されます。例えば、デバイスのアロケーションと使用状況の統計の完全な内訳を見るには、{{ic|btrfs filesystem usage}} を使って下さい。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem usage /&lt;br /&gt;
&lt;br /&gt;
{{Note|現在、{{ic|btrfs filesystem usage}} コマンドは {{ic|RAID5/RAID6}} では正しく動作していません。}}&lt;br /&gt;
&lt;br /&gt;
あるいは、{{ic|btrfs filesystem df}} を使えば、root で実行しなくても、割り当てられた領域の使用状況を素早くチェックすることができます。&lt;br /&gt;
&lt;br /&gt;
 $ btrfs filesystem df /&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://btrfs.wiki.kernel.org/index.php/FAQ#How_much_free_space_do_I_have.3F] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{man|1|du}} や {{man|1|ncdu}} のような、ファイルシステムのあるサブセットについて空間の使用状況を分析するツールにも同じ制限が適用され、これらは reflinks, snapshots, 圧縮を考慮しません。代わりに、btrfs を意識した代替手段は {{AUR|btdu}} と [[Btrfs#圧縮の種類と比率を表示する|圧縮の種類と比率を表示する]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== デフラグメンテーション ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|Linux カーネル バージョン 5.16.x &amp;lt; 5.16.5 のメジャーレグレッションにより、一部のシステムで Btrfs デフラグが無限ループし、手動および自動デフラグの両方に影響があります。これにより、影響を受けるドライブに極端な I/O 負荷がかかり、ドライブの寿命が極端に短くなり、パフォーマンスに影響を与える可能性があります。このため、これらのバージョンで {{ic|autodefrag}} を使うことは推奨されません。むしろ {{ic|noautodefrag}} を使ってオンラインデフラグが無効になるようにすべきです。[https://www.reddit.com/r/linux/comments/sgybyr/psa_linux_516_has_major_regression_in_btrfs/] と [https://lore.kernel.org/linux-btrfs/CAEwRaO4y3PPPUdwYjNDoB9m9CLzfd3DFFk2iK1X6OyyEWG5-mg@mail.gmail.com/] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
Btrfs はマウントオプション {{ic|autodefrag}} でオンラインデフラグをサポートしています、{{man|5|btrfs|MOUNT OPTIONS}} を見て下さい。手動でルートのデフラグをするには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem defragment -r /&lt;br /&gt;
&lt;br /&gt;
上記のコマンドを {{ic|-r}} スイッチなしで使用すると、ディレクトリを含むサブボリュームが保持するメタデータのみがデフラグされる結果となります。このため、パスを指定するだけで単一ファイルのデフラグが可能です。&lt;br /&gt;
&lt;br /&gt;
COW コピー (スナップショット コピーまたは {{ic|cp}} や bcp で作成されたもの) を持つファイルに圧縮アルゴリズムで {{ic|-c}} スイッチを使用したデフラグを行うと、無関係の 2 つのファイルが効果的にディスク使用量を増加させる結果になることがあります。&lt;br /&gt;
&lt;br /&gt;
=== RAID ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は [[Btrfs#マルチデバイス対応ファイルシステム|マルチデバイス対応ファイルシステム]] のためのネイティブな &#039;&#039;RAID&#039;&#039; を提供します。btrfs RAID を [[mdadm]] と区別する注目すべき機能は自己回復型の冗長アレイとオンラインバランシングです。より詳しい情報は [https://btrfs.wiki.kernel.org/index.php/Using_Btrfs_with_Multiple_Devices the Btrfs wiki page] を見て下さい。Btrfs sysadmin ページにも [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#RAID_and_data_replication にセクションがありますので参照して下さい。] 技術的な背景があります。&lt;br /&gt;
&lt;br /&gt;
{{Warning|Parity RAID (RAID 5/6) コードには、複数の重大なデータ損失のバグがあります。より詳細な情報は Btrfs Wiki の [https://btrfs.wiki.kernel.org/index.php/RAID56 RAID5/6 page] と [https://lore.kernel.org/linux-btrfs/8695beeb-f991-28c4-cf6b-8c92339e468f@inwind.it/ linux-btrfs mailing list] のバグレポートを見て下さい。2020年6月、誰かが [https://lore.kernel.org/linux-btrfs/20200627030614.GW10769@hungrycats.org/ 現在の問題の包括的なリスト] と [https://lore.kernel.org/linux-btrfs/20200627032414.GX10769@hungrycats.org/ 役に立つ回復ガイド] を投稿しています}}&lt;br /&gt;
&lt;br /&gt;
==== Scrub ====&lt;br /&gt;
&lt;br /&gt;
[https://btrfs.wiki.kernel.org/index.php/Glossary Btrfs Wiki Glossary] によると、Btrfs スクラブはオンラインファイルシステムチェックツールです。ファイルシステム上のすべてのデータとメタデータを読み取り、チェックサムと RAID ストレージからの複製コピーを使用して、破損したデータを特定して修復します。&lt;br /&gt;
&lt;br /&gt;
{{Note|実行中のスクラブプロセスはシステムのサスペンドを防ぎます。詳細は [https://lore.kernel.org/linux-btrfs/20140227190656.GA28338@merlins.org/ このスレッド] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
===== 手動で開始する =====&lt;br /&gt;
&lt;br /&gt;
{{ic|/}} を含むファイルシステムに対して (バックグラウンド) scrub を開始する場合。&lt;br /&gt;
&lt;br /&gt;
 # btrfs scrub start /&lt;br /&gt;
&lt;br /&gt;
実行中の scrub の状態を確認する。&lt;br /&gt;
&lt;br /&gt;
 # btrfs scrub status /&lt;br /&gt;
&lt;br /&gt;
===== サービスまたはタイマーを使って起動する =====&lt;br /&gt;
&lt;br /&gt;
{{Pkg|btrfs-progs}} パッケージは、指定したマウントポイントを毎月 scrubbing するためのユニット {{ic|btrfs-scrub@.timer}} を提供します。例えば {{ic|/}} の場合は {{ic|btrfs-scrub@-.timer}} 、{{ic|/home}} の場合は {{ic|btrfs-scrub@home.timer}} のように、エスケープしたパスでタイマーを [[有効化]] してください。パスのエスケープは {{ic|systemd-escape -p &#039;&#039;/path/to/mountpoint&#039;&#039;}} で行えます、詳しくは {{man|1|systemd-escape}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
scrub を実行するには {{ic|btrfs-scrub@.service}} を [[systemd#ユニットを使う|スタート]] します。(同じエンコードされたパスで) この方法の利点は {{ic|btrfs scrub}} と比べても同じです。(root ユーザーで) scrub の結果が [[systemd/ジャーナル]] に記録されることです。&lt;br /&gt;
&lt;br /&gt;
冷却が不十分な大きな NVMe ドライブ (ラップトップなど) では、scrub はドライブを速く、長く読み込んで、ドライブを非常に高温にします。systemd で scrub を実行している場合、[[ドロップインファイル]] を使って {{man|5|systemd.resource-control}} にある {{ic|IOReadBandwidthMax}} オプションで簡単にスクラブ速度を制限することができます。&lt;br /&gt;
&lt;br /&gt;
==== Balance ====&lt;br /&gt;
&lt;br /&gt;
balance はファイルシステム上の全てのデータをアロケータに再度流し込みます。デバイスが追加されたり削除された場合にファイルシステム上のデータを再配置するために実行します。balance はデバイスが故障した場合に、冗長な RAID レベルのコピーを再生成します。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|btrfs-progs}}-3.12 から&#039;&#039;バランシング&#039;&#039;はバックグラウンドプロセスになりました - 詳しくは {{ic|man 8 btrfs-balance}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 # btrfs balance start /&lt;br /&gt;
 # btrfs balance status /&lt;br /&gt;
&lt;br /&gt;
=== スナップショット ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;スナップショットとは、btrfs の COW 機能を使って、そのデータ(とメタデータ)を他のサブボリュームと共有する、サブボリュームのことです&amp;quot; 詳しくは [https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Snapshots Btrfs Wiki SysadminGuide#Snapshots] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
スナップショットを作成するには&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume snapshot &#039;&#039;source&#039;&#039; [&#039;&#039;dest&#039;&#039;/]&#039;&#039;name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
読み取り専用のスナップショットを作成するには、{{ic|-r}} フラグを追加します。readonly スナップショットの書き込み可能バージョンを作成するには、単純にそのスナップショットを作成します。&lt;br /&gt;
&lt;br /&gt;
{{Note|{Note&lt;br /&gt;
* スナップショットを読み込み専用から書き込み専用に変換することは可能です。しかし、これは将来のインクリメンタル送受信で問題が発生するため、推奨されません[https://lore.kernel.org/linux-btrfs/06e92a0b-e71b-eb21-edb5-9d2a5513b718@gmail.com/] 新しい書き込み可能なスナップショットを作成することで、そのような問題を防ぐことができます。&lt;br /&gt;
* スナップショットは再帰的ではありません。ネストされたサブボリュームは、スナップショット内部では空のディレクトリになります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 送信/受信 ===&lt;br /&gt;
&lt;br /&gt;
サブボリュームは {{ic|send}} コマンドを使って標準出力やファイルに送信することができます。Btrfs の {{ic|receive}} コマンドにパイプで渡すことで非常に便利に使うことが可能です。例えば、{{ic|/root_backup}} という名前のスナップショットを {{ic|/backup}} に送信するには以下のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 # btrfs send /root_backup | btrfs receive /backup&lt;br /&gt;
&lt;br /&gt;
送信するスナップショットは読み取り専用である必要があります。上記のコマンドは外部デバイスにサブボリュームをコピーするのにも使えます (例えば上の {{ic|/backup}} を USB ディスクにマウント)。&lt;br /&gt;
&lt;br /&gt;
また、スナップショットの差分だけを送信することも可能です。例えば、上記のように {{ic|root_backup}} のコピーを送信したことがある場合、{{ic|root_backup_new}} という名前の読み取り専用のスナップショットを新しく作成してから、増加差分だけを {{ic|/backup}} に送信するには:&lt;br /&gt;
&lt;br /&gt;
 # btrfs send -p /root_backup /root_backup_new | btrfs receive /backup&lt;br /&gt;
&lt;br /&gt;
これで {{ic|root_backup_new}} という名前の新しいサブボリュームが {{ic|/backup}} に作成されます。&lt;br /&gt;
&lt;br /&gt;
差分バックアップをしたり自動的にバックアップを行うツールは [https://btrfs.wiki.kernel.org/index.php/Incremental_Backup Btrfs Wiki&#039;s Incremental Backup] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== 重複排除 ===&lt;br /&gt;
&lt;br /&gt;
コピーオンライトを使用した場合、Btrfs は実際にはデータをコピーしないでファイルやサブボリュームをコピーできます。ファイルに変更が加えられたときに新しい本当のコピーが作成されます。重複排除はさらに共通部分が存在するデータブロックを認識して、コピーオンライトと同じようにエクステントにまとめてしまいます。&lt;br /&gt;
&lt;br /&gt;
Btrfs パーティションの重複排除に使用するツールについては [https://btrfs.wiki.kernel.org/index.php/Deduplication#Batch 上流の Wiki エントリ] を見てください。{{Pkg|duperemove}}, {{aur|bedup}}, &#039;&#039;btrfs-dedup&#039;&#039; などが存在します。{{pkg|rmlint}} あるいは {{aur|jdupes}} などを使うことでファイルベースでデータの重複排除を行うこともできます。&lt;br /&gt;
&lt;br /&gt;
Btrfs の開発者はインバンド (同期的・インライン) 重複排除に取り組んでおり、新しいデータがファイルシステムに書き込まれたときに重複排除が実行されます。現在のところ実験的な機能としてツリー外で開発されています。新しい機能をテストしてみたい場合は [https://btrfs.wiki.kernel.org/index.php/User_notes_on_dedupe カーネルの wiki ページ] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== リサイズ ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|データの損失を防ぐために、サイズ変更作業を始める前に必ずデータをバックアップしてください}}&lt;br /&gt;
&lt;br /&gt;
ファイルシステムは、デバイスで利用可能な最大のスペースまで拡大することができ、正確なサイズを指定することもできます。ファイルシステムのサイズを大きくする前に、デバイスまたは論理ボリュームのサイズを大きくすることを確認します。&lt;br /&gt;
ファイルシステムに正確なサイズを指定する場合、新しいサイズが次の条件を満たすことを確認します。&lt;br /&gt;
&lt;br /&gt;
* 新しいサイズは既存のデータサイズより大きくなければなりません。&lt;br /&gt;
* ファイルシステムのサイズは、使用可能な領域を超えて拡張できないため、新しいサイズは現在のデバイスサイズと同じかそれ以下でなければなりません。&lt;br /&gt;
&lt;br /&gt;
デバイス上のファイルシステムのサイズを小さくする場合は、新しいサイズが以下の条件を満たすことを確認する。&lt;br /&gt;
&lt;br /&gt;
* 新しいサイズは既存のデータサイズより大きくなければなりません。&lt;br /&gt;
* ファイルシステムのサイズは使用可能な領域を超えて拡張できないため、新しいサイズは現在のデバイスのサイズと同じかそれ以下でなければなりません。&lt;br /&gt;
&lt;br /&gt;
{{Note|ファイルシステムを保持する論理ボリュームのサイズも小さくする場合は、デバイスまたは論理ボリュームのサイズを小さくする前に、必ずファイルシステムのサイズを小さくしてください。}}&lt;br /&gt;
&lt;br /&gt;
ファイルシステムのサイズをデバイスの利用可能な最大サイズに拡張するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
ファイルシステムを特定のサイズに拡張する場合。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize &#039;&#039;size&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;size&#039;&#039;}} は、希望するサイズにバイト単位で置き換えてください。K(キロバイト)、M(メガバイト)、G(ギガバイト)など、値の単位を指定することも可能です。また、値の前にプラス (+) 記号、マイナス (-) 記号を付けることで、現在のサイズに対する増減をそれぞれ指定することも可能です。&lt;br /&gt;
&lt;br /&gt;
 # btrfs filesystem resize +&#039;&#039;size&#039;&#039; /&lt;br /&gt;
 # btrfs filesystem resize -&#039;&#039;size&#039;&#039; /&lt;br /&gt;
&lt;br /&gt;
== 既知の問題 ==&lt;br /&gt;
&lt;br /&gt;
試す前に、いくつかの制限を知っておく必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 暗号化 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs には暗号化のサポートが組み込まれていませんが、この [https://lwn.net/Articles/700487/] は将来的に提供される可能性があります。 ユーザーは、 {{ic|mkfs.btrfs}} を実行する前にパーティションを暗号化できます。 [https://wiki.archlinux.jp/index.php/Dm-crypt/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%85%A8%E4%BD%93%E3%81%AE%E6%9A%97%E5%8F%B7%E5%8C%96#Btrfs_.E3.82.B5.E3.83.96.E3.83.9C.E3.83.AA.E3.83.A5.E3.83.BC.E3.83.A0.E3.81.A8.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97 dm-crypt/スワップを使用したsystem#Btrfsサブボリューム全体の暗号化] を参照してください。&lt;br /&gt;
&lt;br /&gt;
既存の Btrfs ファイルシステムは [[EncFS]] や [[TrueCrypt]] のようなものを使用できますが、おそらく Btrfs の機能の一部はありません。&lt;br /&gt;
&lt;br /&gt;
=== btrfs チェックの問題 ===&lt;br /&gt;
ツール{{ic|btrfs check}} には既知の問題があるため、セクション [[#btrfscheck]] をよく参照してから実行してください。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== パーティションレス Btrfs ディスク ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|&lt;br /&gt;
* ほとんどのユーザーはこのタイプのセットアップを望まず、代わりに通常のパーティションにBtrfsをインストールする必要があります。 さらに、 GRUB はパーティションレスディスクへのインストールを強くお勧めしません。&lt;br /&gt;
* {{Pkg|grub}} 2.04 以降、GRUB の {{ic|core.img}} は大きすぎてBtrfsVBRに収まりません。 {{Bug|63656}} を参照してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Btrfs は、 [[#Subvolumes|subvolumes]] を使用してパーティションをシミュレートし、 [[MBR]] または [[GPT]] パーティションスキームを置き換えて、データストレージデバイス全体を占有できます。 ただし、別の方法で作成された既存の [https://wiki.archlinux.jp/index.php/%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0 パーティション] で [[#File systemcreation|create a Btrfsfilesystem]] を実行するためにパーティションレスセットアップを使用する必要はありません。 パーティションレスのシングルディスクセットアップには、いくつかの制限があります。&lt;br /&gt;
&lt;br /&gt;
* 他の [[ファイルシステム]] を同じディスク上の別のパーティションに配置することはできません。&lt;br /&gt;
* バージョン5.0より前の Linux カーネルを使用している場合、 [[スワップ|スワップ領域]] は使用できません。 Btrfs は[https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB スワップファイル] 5.0 より前をサポートしておらず、 [https://wiki.archlinux.jp/index.php/%E3%82%B9%E3%83%AF%E3%83%83%E3%83%97#.E3.82.B9.E3.83.AF.E3.83.83.E3.83.97.E3.83.91.E3.83.BC.E3.83.86.E3.82.A3.E3.82.B7.E3.83.A7.E3.83.B3 スワップパーティション] を作成する場所もありませんでした。&lt;br /&gt;
* [[UEFI]] を使用して起動することはできません。&lt;br /&gt;
&lt;br /&gt;
既存のパーティションテーブルを Btrfs で上書きするには、次のコマンドを実行します:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.btrfs /dev/sd&#039;&#039;X&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
たとえば、 {{ic|/dev/sda1}} ではなく {{ic|/dev/sda}} を使用します。後者は、パーティショニングスキーム全体を置き換えるのではなく、既存のパーティションをフォーマットします。ルートパーティションは Btrfs なので、 {{ic|btrfs}} がカーネルに組み込まれていることを確認するか、 {{ic|btrfs}} を [[mkinitcpio.conf#MODULES]] と [https://wiki.archlinux.jp/index.php/Mkinitcpio#.E3.82.A4.E3.83.A1.E3.83.BC.E3.82.B8.E4.BD.9C.E6.88.90.E3.81.A8.E3.82.A2.E3.82.AF.E3.83.86.E3.82.A3.E3.83.99.E3.83.BC.E3.82.B7.E3.83.A7.E3.83.B3 initramfsを再生成する] に入れてください。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.archlinux.jp/index.php/Arch_%E3%83%96%E3%83%BC%E3%83%88%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9#.E3.83.96.E3.83.BC.E3.83.88.E3.83.AD.E3.83.BC.E3.83.80.E3.83.BC ブートローダ] を、 [https://wiki.archlinux.jp/index.php/%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8B%E3%83%B3%E3%82%B0#Master_Boot_Record マスターブートレコード] を備えたデータ記憶装置の場合と同様にインストールします。[[Syslinux#手動インストール]] または [[GRUB/Tips and tricks#パーティションまたはパーティションレスディスクへのインストール]] を参照してください。 {{ic|/sysrootをマウントできませんでした。}} が原因でカーネルがブートしない場合は、 {{ic|/etc/default/grub}} に {{ic|1=GRUB_PRELOAD_MODULES=&amp;quot;btrfs&amp;quot;}} を追加して、 grub 設定 ([[GRUB#メイン設定ファイルの生成]]) を生成してください。&lt;br /&gt;
&lt;br /&gt;
=== Ext3/4 から Btrfs への変換 ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|btrfs メーリングリストには、不完全/破壊/破損した変換に関する多くの報告があります。 失いたくないデータや &#039;&#039;作業中&#039;&#039; のバックアップがあることを確認してください。 詳細については、 btrfswiki の [https://btrfs.wiki.kernel.org/index.php/Conversion_from_Ext3Conversion fromExt3] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
インストール CD から起動し、次の手順で変換します:&lt;br /&gt;
&lt;br /&gt;
 # btrfs-convert /dev/&#039;&#039;partition&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
パーティションをマウントし、ファイルを確認して変換をテストしてください。 必ず {{ic|/etc/fstab}} を変更してください ({{ic|/etc/fstab}} の &#039;&#039;&#039;type&#039;&#039;&#039; を {{ic|btrfs}} に、 &#039;&#039;&#039;fs_passno&#039;&#039; をに変更すること) [最後のフィールド] を {{ic|0}} に設定します(Btrfs は起動時にファイルシステムのチェックを行わないため)また、パーティションの UUID が変更されていることに注意してください、UUID を使うときは fstab もそれに合わせて更新してください。システムに {{ic|chroot}} して、ブートローダのメニューリストを再構築します([[既存の Linux からインストール]] を参照)ルートファイルシステムを変換する場合、chroot したまま {{ic|mkinitcpio -p linux}} を実行して initramfs を再生成しないと、システムが正常に起動しません。&lt;br /&gt;
&lt;br /&gt;
{{Note|新しく変換された btrfs にファイルをマウントまたは書き込みできないなどの問題がある場合は、バックアップサブボリューム {{ic|/ext2_saved}} がまだ存在する限り、常にロールバックするオプションがあります。 {{ic|btrfs-convert -r /dev/&#039;&#039;partition&#039;&#039;}} コマンドを使用してロールバックします。これにより、新しく変換された btrfs ファイルシステムへの変更が破棄されます。}}&lt;br /&gt;
&lt;br /&gt;
問題がないことを確認したら、バックアップ {{ic|ext2_saved}} サブボリュームを削除して変換を完了します。 これがないと ext3/4 に戻れないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
 # btrfs subvolume delete /ext2_saved&lt;br /&gt;
&lt;br /&gt;
最後に [[#Balance|balance]] ファイルシステムでスペースを再利用します。&lt;br /&gt;
&lt;br /&gt;
以前にインストールされた一部のアプリケーションは、 Btrfs に適合させる必要があることに注意してください。 特に [[TLP#Btrfs]] はファイルシステムの破損を避けるために特別な注意が必要です。&lt;br /&gt;
&lt;br /&gt;
=== チェックサムのハードウェアアクセラレーション ===&lt;br /&gt;
&lt;br /&gt;
Btrfs のチェックサムでハードウェアアクセラレーションが使われているかどうか確認するには:&lt;br /&gt;
{{hc|&amp;lt;nowiki&amp;gt;$ dmesg | grep crc32c&amp;lt;/nowiki&amp;gt;|&amp;lt;nowiki&amp;gt;Btrfs loaded, crc32c=crc32c-intel&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|&amp;lt;nowiki&amp;gt;crc32c=crc32c-generic&amp;lt;/nowiki&amp;gt;}} と表示された場合、ルートパーティションが Btrfs であるため、ハードウェアアクセラレーションを使うにはカーネルに {{ic|crc32c-intel}} を組み込む必要があります。[[mkinitcpio.conf]] に {{ic|crc32c-intel}} を追加するだけでは機能しません。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステム破損のリカバリ ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|btrfs check}} ツールには既知の問題があります。セクション [[Btrfs#btrfs check|btrfs check]] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;btrfs-check&#039;&#039; はマウントされているファイルシステムでは使えません。ライブ USB から起動しないで &#039;&#039;btrfs-check&#039;&#039; を使えるようにするには、初期 RAM ディスクに以下のように追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|output=&lt;br /&gt;
BINARIES=&amp;quot;/usr/bin/btrfs&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
設定したら [[mkinitcpio]] を使って initramfs を再生成してください。&lt;br /&gt;
&lt;br /&gt;
起動に問題が発生したら、ユーティリティを使って修復することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|fsck でキャッシュを無効化する必要がある場合、起動後に一定時間フリーズするのは通常の動作です (btrfs-transaction がハングアップしているというメッセージがコンソールに表示されます)。しばらく経てばシステムは復帰します。}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [https://btrfs.wiki.kernel.org/index.php/Btrfsck Btrfs Wiki] を参照。&lt;br /&gt;
&lt;br /&gt;
=== スナップショットから起動する ===&lt;br /&gt;
&lt;br /&gt;
スナップショットをブートするためには、セクション [[Btrfs#サブボリュームをルートとしてマウントする|サブボリュームをルートとしてマウントする]] で説明されているように、サブボリュームをルートパーティションとしてマウントする場合と同じ手順が適用されます。スナップショットはサブボリュームのようにマウントできます。&lt;br /&gt;
&lt;br /&gt;
* [[GRUB]] を使用している場合、{{Pkg|grub-btrfs}} または {{AUR|grub-btrfs-git}} を使用して設定ファイルを再生成すると、自動的に btrfs スナップショットをブートメニューに取り込むことができます。&lt;br /&gt;
* [[rEFInd]] を使用している場合は、{{ic|refind-btrfs.service}} を [[systemd#ユニットを使う|有効]] にして開始後に、{{AUR|refind-btrfs}} を使用してブートメニューに btrfs スナップショットを自動的に取り込むことができます。&lt;br /&gt;
&lt;br /&gt;
=== systemd-nspawn で Btrfs サブボリュームを使う ===&lt;br /&gt;
&lt;br /&gt;
[[Systemd-nspawn#Btrfs のサブボリュームをコンテナのルートとして使う]]や [[Systemd-nspawn#コンテナの一時的な Btrfs スナップショットを使う]]を見てください。&lt;br /&gt;
&lt;br /&gt;
=== アクセス時間のメタデータ更新を削減 ===&lt;br /&gt;
&lt;br /&gt;
Btrfs は書き込み時にコピーの性質を持つため、ファイルにアクセスするだけでメタデータのコピーと書き込みを開始します。アクセス時間の更新頻度を減らすと、この予期しないディスク使用がなくなり、パフォーマンスが向上する可能性があります。使用可能なオプションについては、 [[fstab#atime オプション|atime オプション]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 外付けドライブへの増分バックアップ ===&lt;br /&gt;
&lt;br /&gt;
以下のパッケージは {{ic|btrfs send}} と {{ic|btrfs receive}} を使って、外部ドライブに増分バックアップを送信します。実装や機能、要件の違いを見るにはそれぞれのドキュメントを参照してください。&lt;br /&gt;
&lt;br /&gt;
* {{App|btrbk|Btrfs サブボリュームのスナップショットとリモートバックアップを作成するためのツール。|https://github.com/digint/btrbk|{{AUR|btrbk}}}} &lt;br /&gt;
* {{App|buttersink|Buttersink は Btrfs スナップショット用の rsync のようなものです。|https://github.com/AmesCornish/buttersink.git|{{AUR|buttersink-git}}}}&lt;br /&gt;
* {{App|snap-sync|[[Snapper]] スナップショットを使用して、外付けドライブまたはリモートマシンにバックアップします。|https://github.com/wesbarnett/snap-sync.git|{{Pkg|snap-sync}}}}&lt;br /&gt;
* {{App|snapsync|[[Snapper]] の同期ツール。|https://github.com/doudou/snapsync|{{AUR|ruby-snapsync}}}}&lt;br /&gt;
&lt;br /&gt;
以下のパッケージでは、Snapper のスナップショットを Btrfs 以外のファイルシステムへバックアップすることができます。&lt;br /&gt;
&lt;br /&gt;
* {{App|snapborg|Snapper スナップショットを {{Pkg|borg}} バックアップと統合する borgmatic のようなツール。|https://github.com/enzingerm/snapborg|{{AUR|snapborg}}}}&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
一般的なトラブルシューティングについては [https://btrfs.wiki.kernel.org/index.php/Problem_FAQ Btrfs Problem FAQ] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== GRUB ===&lt;br /&gt;
&lt;br /&gt;
==== パーティションオフセット ====&lt;br /&gt;
&lt;br /&gt;
オフセットの問題は、パーティションのあるディスクに {{ic|core.img}} を埋め込もうとしたときに発生する可能性があります。つまり、GRUB の {{ic|core.img}} をパーティションレスディスク (例: {{ic|/dev/sd&#039;&#039;X&#039;&#039;}}) の Btrfs プールに直接埋め込んでも [[Special:Diff/319474|大丈夫]] です。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] は Btrfs パーティションを起動できますが、モジュールが他の [[ファイルシステム]] よりも大きくなる可能性があります。また、{{ic|grub-install}} で作成した {{ic|core.img}} ファイルは、MBR と最初のパーティションの間にあるドライブの最初の 63 セクタ (31.5KiB) に収まらないかもしれません。{{ic|fdisk}} や {{ic|gdisk}} のような最新のパーティションツールは、最初のパーティションをおよそ 1MiB または 2MiB オフセットすることでこの問題を回避しています。&lt;br /&gt;
&lt;br /&gt;
==== root が見つからない ====&lt;br /&gt;
&lt;br /&gt;
RAID セットアップから起動した時にエラー {{ic|1=error no such device: root}} が表示される場合、{{ic|/usr/share/grub/grub-mkconfig_lib}} を編集して {{ic|1=echo &amp;quot;  search --no-floppy --fs-uuid --set=root ${hints} ${fs_uuid}&amp;quot;}} からクォートを削除してください。grub の設定を再生成すればエラーを出さずに起動できるはずです。&lt;br /&gt;
&lt;br /&gt;
=== マウントがタイムアウト ===&lt;br /&gt;
&lt;br /&gt;
特に大きな RAID1 アレイでは、ブート中にマウントがタイムアウトして、次のようなジャーナルメッセージが表示されることがあります。&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
Jan 25 18:05:12 host systemd[1]: storage.mount: Mounting timed out. Terminating.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: storage.mount: Mount process exited, code=killed, status=15/TERM&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: storage.mount: Failed with result &#039;timeout&#039;.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: Failed to mount /storage.&lt;br /&gt;
Jan 25 18:05:46 host systemd[1]: Startup finished in 32.943s (firmware) + 3.097s (loader) + 7.247s (kernel)&amp;gt;&lt;br /&gt;
Jan 25 18:05:46 host kernel: BTRFS error (device sda): open_ctree failed&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
この問題は、[[fstab]] のシステム固有のマウントオプション {{ic|x-systemd.mount-timeout}} で長いタイムアウトを指定することで簡単に回避することが可能です。例:&lt;br /&gt;
&lt;br /&gt;
 /dev/sda                /storage    btrfs       rw,relatime,x-systemd.mount-timeout=5min  0 0&lt;br /&gt;
&lt;br /&gt;
=== BTRFS: open_ctree failed ===&lt;br /&gt;
&lt;br /&gt;
2014年11月現在、{{ic|mkinitcpio.conf}} で {{ic|btrfs}} フックを使用してマルチデバイスの Btrfs を使っている場合に以下のエラーが発生するというバグが [[systemd]] か [[mkinitcpio]] のどちらかに存在します:&lt;br /&gt;
&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
BTRFS: open_ctree failed&lt;br /&gt;
mount: wrong fs type, bad option, bad superblock on /dev/sdb2, missing codepage or helper program, or other error&lt;br /&gt;
&lt;br /&gt;
In some cases useful info is found in syslog - try dmesg|tail or so.&lt;br /&gt;
&lt;br /&gt;
You are now being dropped into an emergency shell.&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/mkinitcpio.conf}} の {{ic|HOOKS}} 行から {{ic|btrfs}} を削除して代わりに {{ic|MODULES}} 行に {{ic|btrfs}} を追加することで解決します。修正を施したら {{ic|mkinitcpio -p linux}} で initramfs を再生成して (必要ならプリセットを調整します) 再起動してください。&lt;br /&gt;
&lt;br /&gt;
デバイスが存在しない raid アレイをマウントしようとしたときも同じエラーが表示されます。その場合は {{ic|/etc/fstab}} に {{ic|degraded}} マウントオプションを追加してください。ルートパーティションがアレイ上にある場合、[[カーネルパラメータ]]に {{ic|1=rootflags=degraded}} を追加してください。&lt;br /&gt;
&lt;br /&gt;
2016年8月現在、このバグの回避策として考えられるのは、{{ic|/etc/fstab}} で単一ドライブのみでアレイをマウントし、他のドライブは btrfs が自動的に発見して追記するようにすることです。UUID や LABEL のようなグループベースの識別子は、この不具合の原因になっているようです。例えば、&#039;disk1&#039; と &#039;disk2&#039; からなる2デバイスの RAID1 アレイには UUID が割り当てられますが、UUID を使う代わりに {{ic|/dev/mapper/disk1}} のみを {{ic|/etc/fstab}} で使用します。より詳しい説明は、以下の [https://web.archive.org/web/20161108175034/http://blog.samcater.com/fix-for-btrfs-open_ctree-failed-when-running-root-fs-on-raid-1-or-raid10-arch-linux/ ブログ記事] を参照してください。&lt;br /&gt;
&lt;br /&gt;
また、[[mkinitcpio#設定|mkinitcpio.conf]] の {{ic|udev}} フックを削除し、{{ic|systemd}} フックに置き換えることも可能な対処法です。この場合、{{ic|btrfs}} は{{ic|HOOKS}}や{{ic|MODULES}} 配列に &#039;&#039;not&#039;&#039; とする必要があります。&lt;br /&gt;
&lt;br /&gt;
詳細は [https://bbs.archlinux.org/viewtopic.php?id=189845 フォーラムスレッド] や {{Bug|42884}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== btrfs check ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|Btrfs はまだ開発途上であり、特に {{ic|btrfs check}} コマンドについては仕様が固まっていないので、{{ic|--repair}} スイッチを付けて {{ic|btrfs check}} を実行するときはあらかじめ Btrfs のドキュメントを読んでバックアップを作成することを強く推奨します。}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-check btrfs check]&#039;&#039; コマンドを使うことでアンマウントされた Btrfs ファイルシステムをチェックしたり修復することが可能です。ただし、この修復ツールはまだ開発中であり、特定のファイルシステムエラーは修復することができません。&lt;br /&gt;
&lt;br /&gt;
=== 絶え間ないドライブアクティビティ ===&lt;br /&gt;
&lt;br /&gt;
[[カーネル]] バージョン 6.2 以降、{{ic|1=discard=async}} {{man|8|mount}} オプションがデフォルトで設定されています。これ [https://lore.kernel.org/linux-btrfs/Y%2F%2Bn1wS%2F4XAH7X1p@nz/#r 報告] により、廃棄キューがいっぱいになると、アイドル状態でも一部のドライブで一定のドライブアクティビティが発生し、処理されるよりも速くなります。これにより、特に NVMe ベースのドライブで電力使用量が増加する可能性があります。&lt;br /&gt;
&lt;br /&gt;
回避策の 1 つは、ドライブのアクティビティが停止するまで破棄 {{ic|iops_limit}} を増やすことです。&lt;br /&gt;
&lt;br /&gt;
これは、[[Wikipedia:sysfs|sysfs]] を使用して実現できます。例:&lt;br /&gt;
&lt;br /&gt;
 # echo 1000 &amp;gt; /sys/fs/btrfs/&#039;&#039;uuid&#039;&#039;/discard/iops_limit&lt;br /&gt;
&lt;br /&gt;
ここで、{{ic|&#039;&#039;uuid&#039;&#039;}} は btrfs ファイルシステムの UUID です。{{ic|1000}} の制限は実験的に調整する必要があります。&lt;br /&gt;
&lt;br /&gt;
起動時にパラメータを設定するには、[[systemd-tmpfiles]] を使用できます。たとえば、次のファイルを作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/tmpfiles.d/btrfs-discard.conf|&lt;br /&gt;
w /sys/fs/btrfs/&#039;&#039;uuid&#039;&#039;/discard/iops_limit - - - - 1000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
あるいは、[[fstab]] の {{ic|nodiscard}} マウントオプションを使用してマウントし、代わりに [[ソリッドステートドライブ#定期的な TRIM|定期的な TRIM]] を使用して、非同期破棄を完全に無効にすることもできます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* 公式サイト&lt;br /&gt;
** [https://btrfs.wiki.kernel.org/ Btrfs Wiki]&lt;br /&gt;
* パフォーマンス関連&lt;br /&gt;
** [https://superuser.com/questions/432188/should-i-put-my-multi-device-btrfs-filesystem-on-disk-partitions-or-raw-devices Btrfs on raw disks?]&lt;br /&gt;
** [http://comments.gmane.org/gmane.comp.file-systems.btrfs/19440 Varying leafsize and nodesize in Btrfs]&lt;br /&gt;
** [http://comments.gmane.org/gmane.comp.file-systems.btrfs/15646 Btrfs support for efficient SSD operation (data blocks alignment)]&lt;br /&gt;
** [https://btrfs.wiki.kernel.org/index.php/FAQ#Is_Btrfs_optimized_for_SSD.3F Is Btrfs optimized for SSDs?]&lt;br /&gt;
** Phoronix によるマウントオプションのベンチマーク&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs-mount-linux49 Linux 4.9]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=linux_314_btrfs Linux 3.14]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=linux_btrfs_311&amp;amp;num=1 Linux 3.11]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTM0OTU Linux 3.9]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=btrfs_linux37_mounts&amp;amp;num=1 Linux 3.7]&lt;br /&gt;
*** [https://www.phoronix.com/scan.php?page=article&amp;amp;item=linux_btrfs_options&amp;amp;num=1 Linux 3.2]&lt;br /&gt;
** [http://blog.erdemagaoglu.com/post/4605524309/lzo-vs-snappy-vs-lzf-vs-zlib-a-comparison-of Lzo vs. zLib]&lt;br /&gt;
* その他&lt;br /&gt;
** [http://www.funtoo.org/wiki/BTRFS_Fun Funtoo Wiki Btrfs Fun]&lt;br /&gt;
** [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTA0ODU Avi Miller presenting Btrfs] at SCALE 10x, January 2012.&lt;br /&gt;
** [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=MTA4Mzc Summary of Chris Mason&#039;s talk] from LFCS 2012&lt;br /&gt;
** [https://git.kernel.org/?p&amp;amp;#61;linux/kernel/git/torvalds/linux-2.6.git;a&amp;amp;#61;commit;h&amp;amp;#61;35054394c4b3cecd52577c2662c84da1f3e73525 Btrfs: stop providing a bmap operation to avoid swapfile corruptions] 2009-01-21&lt;br /&gt;
** [http://marc.merlins.org/perso/btrfs/post_2014-03-22_Btrfs-Tips_-Doing-Fast-Incremental-Backups-With-Btrfs-Send-and-Receive.html Doing Fast Incremental Backups With Btrfs Send and Receive]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Hikali&amp;diff=38799</id>
		<title>利用者:Hikali</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E5%88%A9%E7%94%A8%E8%80%85:Hikali&amp;diff=38799"/>
		<updated>2024-09-01T01:45:04Z</updated>

		<summary type="html">&lt;p&gt;Hikali: 「利用者:Hikali」を新規作成&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 自己紹介 ==&lt;br /&gt;
2021年ぐらいからArch Linuxをつかいはじめました。&lt;br /&gt;
細部の修正、英語の翻訳を気が向いたときに行っています。&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Dm-crypt/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%85%A8%E4%BD%93%E3%81%AE%E6%9A%97%E5%8F%B7%E5%8C%96&amp;diff=38798</id>
		<title>Dm-crypt/システム全体の暗号化</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Dm-crypt/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E5%85%A8%E4%BD%93%E3%81%AE%E6%9A%97%E5%8F%B7%E5%8C%96&amp;diff=38798"/>
		<updated>2024-09-01T01:42:12Z</updated>

		<summary type="html">&lt;p&gt;Hikali: fix syntax error  {{ic|/dev/urandom}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:保存データ暗号化]]&lt;br /&gt;
[[Category:ファイルシステム]]&lt;br /&gt;
[[Category:Arch の入手とインストール]]&lt;br /&gt;
[[de:Systemverschlüsselung mit dm-crypt]]&lt;br /&gt;
[[en:Dm-crypt/Encrypting an entire system]]&lt;br /&gt;
[[es:Dm-crypt/Encrypting an entire system]]&lt;br /&gt;
以下は &#039;&#039;dm-crypt&#039;&#039; を使って完全なシステム暗号化を行う一般的なシナリオの例です。通常の[[インストールガイド|インストール手順]]に加える必要がある変更を全て説明しています。必要なツールは全て [https://www.archlinux.jp/download/ インストールイメージ] に入っています。&lt;br /&gt;
&lt;br /&gt;
== 概要 ==&lt;br /&gt;
&lt;br /&gt;
root ファイルシステムの暗号化については機能やパフォーマンスの点で &#039;&#039;dm-crypt&#039;&#039; が優れています。システムの root ファイルシステムが dm-crypt デバイス上にあれば、システム上のほとんど全てのファイルが暗号化されます。root 以外のファイルシステムを選択的に暗号化するのと異なり、root ファイルシステムの暗号化は様々な情報を隠匿できます。インストールされているプログラム、ユーザーアカウントのユーザー名、[[mlocate]] や {{ic|/var/log/}} など媒介してデータ漏洩の恐れがあるファイルなど。さらに、root ファイルシステムを暗号化することでシステムの改竄が非常に難しくなります。[[ブートローダー]]やカーネルを除く全てが暗号化されるためです。&lt;br /&gt;
&lt;br /&gt;
以上の利点をのぞく、それぞれのシナリオのメリットやデメリットなどの違いをまとめて、全てのシナリオを以下の表で説明します:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! シナリオ &lt;br /&gt;
! メリット &lt;br /&gt;
! デメリット &lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| [[#LUKS を使用するシンプルなパーティションレイアウト]]&lt;br /&gt;
LUKS で root を完全に暗号化するベーシックなセットアップ&lt;br /&gt;
|&lt;br /&gt;
* パーティショニングと設定がシンプル&lt;br /&gt;
|&lt;br /&gt;
* 柔軟性がない、暗号化するディスク領域をあらかじめ指定する必要がある&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| [[#LVM on LUKS]]&lt;br /&gt;
LUKS 暗号化パーティションの中で LVM を使うことでパーティショニングの柔軟性を確保&lt;br /&gt;
|&lt;br /&gt;
* LVM　を使ったことがあるのであれば簡単にパーティショニングできます&lt;br /&gt;
* 一つのキーで全てのボリュームのロックを解除できます (ディスクからの復帰を設定するのが簡単)&lt;br /&gt;
* ロックされていればボリュームのレイアウトが外から分かりません&lt;br /&gt;
* [[Dm-crypt/スワップの暗号化#suspend-to-disk_を使用する|ハイバネート]]を利用したいときの一番簡単な方法&lt;br /&gt;
|&lt;br /&gt;
* LVM によってマッピングレイヤーとフックが追加されます&lt;br /&gt;
* ボリュームごとに別のキーを設定する場合は不便です&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| [[#LUKS on LVM]]&lt;br /&gt;
LVM をセットアップした後に dm-crypt を使用&lt;br /&gt;
|&lt;br /&gt;
* LVM を使うことで複数のディスクにまたがる暗号化ボリュームを作成できます&lt;br /&gt;
* 非暗号化・暗号化ボリュームグループを簡単に混ぜられます&lt;br /&gt;
|&lt;br /&gt;
* 複雑です。ボリュームを変更するときは暗号化マッパーも変更する必要があります&lt;br /&gt;
* ボリュームごとに個別のキーが必要になります&lt;br /&gt;
* ロックされていても LVM レイアウトは外から分かってしまいます&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| [[#ソフトウェア RAID と LUKS]]&lt;br /&gt;
RAID を設定した後に dm-crypt を使います。&lt;br /&gt;
|&lt;br /&gt;
* LUKS on LVM と同じ。&lt;br /&gt;
|&lt;br /&gt;
* LUKS on LVM と同じ。&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| [[#Plain dm-crypt]]&lt;br /&gt;
dm-crypt の plain モードを使用、LUKS ヘッダーや LUKS の複数のキーのオプションは使わない&amp;lt;br&amp;gt;このシナリオでは {{ic|/boot}} とキーストレージに USB デバイスを使いますが、これは他のデバイスでも利用可能です&lt;br /&gt;
|&lt;br /&gt;
* LUKS ヘッダに損害が発生した場合の耐障害性があります&lt;br /&gt;
* [[Wikipedia:Deniable encryption|否認可能暗号]]が使える&lt;br /&gt;
* SSD の[[Dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート|問題]]を解決できます&lt;br /&gt;
|&lt;br /&gt;
* 全ての暗号化パラメータに注意する必要があります&lt;br /&gt;
* 暗号鍵はひとつだけで変更する方法はありません&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| [[#boot パーティションの暗号化 (GRUB)]]&lt;br /&gt;
GRUB ブートローダーを使って boot パーティションを暗号化する方法を説明します。&amp;lt;br&amp;gt;このシナリオでは ESP パーティションを使いますが、他のシナリオでも ESP を使うことができます。&lt;br /&gt;
|&lt;br /&gt;
* ベースにするシナリオと同じメリット (このページの例では LVM on LUKS)&lt;br /&gt;
* ブートローダーや ESP パーティションまで暗号化されます&lt;br /&gt;
|&lt;br /&gt;
* ベースにするシナリオと同じデメリット (このページの例では LVM on LUKS)&lt;br /&gt;
* 設定が複雑です&lt;br /&gt;
* 他のブートローダーのサポートがありません&lt;br /&gt;
|----------------------------------------------------------&lt;br /&gt;
| [[#Btrfs サブボリュームとスワップ]]&lt;br /&gt;
UEFI 環境で [[Btrfs]] のシステムパーティションと {{ic|/boot}} ディレクトリを暗号化して、スワップパーティションを追加する方法。&lt;br /&gt;
|&lt;br /&gt;
* [[#boot パーティションの暗号化 (GRUB)]] と同じメリット&lt;br /&gt;
* Btrfs の機能を活用できます&lt;br /&gt;
|&lt;br /&gt;
* [[#boot パーティションの暗号化 (GRUB)]] と同じデメリット&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
上記全てのシナリオが外部からの脅威に対して十分な保護を約束しますが、共通の欠点も存在します。暗号化キーを持っているユーザーなら誰でもデバイスの全てを復号化して、他のユーザーのデータにもアクセスすることが可能という点です。これが問題だという場合は、ブロックデバイスの暗号化とスタックファイルシステムの暗号化と組み合わせて使用することで、両者の利点を取り入れることができます。[[保存データ暗号化]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
他にも、スワップパーティションの暗号化を設定するべきかどうか考慮する必要があります。[[Dm-crypt/スワップの暗号化]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
シナリオで使用されているパーティショニングの外観について [[Dm-crypt/ドライブの準備#パーティショニング]] も参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|どのシナリオでも、暗号化ボリュームで [[fsck]] などのファイルシステム修復ソフトウェアを直接使ってはいけません。ファイルを復号化する鍵を破壊してしまいます。復号化した後に使うようにしてください。}}&lt;br /&gt;
&lt;br /&gt;
== LUKS を使用するシンプルなパーティションレイアウト ==&lt;br /&gt;
&lt;br /&gt;
この例ではシンプルなパーティションレイアウトによる &#039;&#039;dmcrypt&#039;&#039;+ LUKS のフルシステム暗号化を説明します:&lt;br /&gt;
&lt;br /&gt;
 +--------------------+--------------------------+--------------------------+&lt;br /&gt;
 |Boot partition      |LUKS encrypted system     |Optional free space       |&lt;br /&gt;
 |                    |partition                 |for additional partitions |&lt;br /&gt;
 |/dev/sdaY           |/dev/sdaX                 |or swap to be setup later |&lt;br /&gt;
 +--------------------+--------------------------+--------------------------+&lt;br /&gt;
&lt;br /&gt;
最初のステップは Arch Linux のインストールイメージを起動した後すぐに実行します。&lt;br /&gt;
&lt;br /&gt;
=== ディスクの準備 ===&lt;br /&gt;
パーティションを作成する前に、[[Dm-crypt/ドライブの準備]] で説明されているように、ディスクを完全に消去する必要性・方法を学んでください。&lt;br /&gt;
&lt;br /&gt;
それから必要なパーティションを作成します。最低でも {{ic|/}} が必要です (例: {{ic|/dev/sdaX}}) と {{ic|/boot}} ({{ic|/dev/sdaY}})。[[パーティショニング]]を参照。&lt;br /&gt;
&lt;br /&gt;
=== boot 以外のパーティションの準備 ===&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは暗号化された root パーティションを作成・マウントします。[[Dm-crypt/root 以外のファイルシステムの暗号化#パーティション]] に詳しく説明されている手順に該当します (ページタイトルと相違して、[[#mkinitcpio の設定|mkinitcpio]] と[[#ブートローダーの設定|ブートローダー]]が正しく設定されていれば、root パーティションにも適用できます)。デフォルトになってない特定の暗号化オプションを使いたいときは (例: 暗号アルゴリズムや鍵長など)、最初のコマンドを実行する前に[[Dm-crypt/デバイスの暗号化#LUKS_モードの暗号化オプション|暗号化オプション]]を読んでください:&lt;br /&gt;
&lt;br /&gt;
 # cryptsetup -y -v luksFormat /dev/sdaX&lt;br /&gt;
 # cryptsetup open /dev/sdaX cryptroot&lt;br /&gt;
 # mkfs.ext4 /dev/mapper/cryptroot&lt;br /&gt;
 # mount /dev/mapper/cryptroot /mnt&lt;br /&gt;
&lt;br /&gt;
マッピングが問題ないかチェック:&lt;br /&gt;
 # umount /mnt&lt;br /&gt;
 # cryptsetup close cryptroot&lt;br /&gt;
 # cryptsetup open /dev/sdaX cryptroot&lt;br /&gt;
 # mount /dev/mapper/cryptroot /mnt&lt;br /&gt;
&lt;br /&gt;
パーティションを分割した場合 (例: {{ic|/home}})、以上のコマンドを全てのパーティションに繰り返し実行してください。ただし {{ic|/boot}} は別です。起動時に追加のパーティションを扱う方法は [[Dm-crypt/root 以外のファイルシステムの暗号化#ロック解除とマウントの自動化]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
それぞれのブロックデバイスには個々のパスフレーズが必要になります。起動時に、別々のパスフレーズを入力しないといけないので、不便とも言えます。{{ic|crypttab}} を使うことでシステムパーティションにキーファイルを保存して使用することで別のパーティションを解錠することができます。方法は [[Dm-crypt/デバイスの暗号化#LUKS を使ってキーファイルでパーティションをフォーマット]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== boot パーティションの準備 ===&lt;br /&gt;
セットアップする必要があるのは暗号化されない {{ic|/boot}} パーティションで、暗号化する root に必要となります。例えば、標準的な [[EFI|MBR/BIOS]] の {{ic|/boot}} パーティションの場合、以下を実行します:&lt;br /&gt;
 # mkfs.ext4 /dev/sdaY&lt;br /&gt;
 # mkdir /mnt/boot&lt;br /&gt;
 # mount /dev/sdaY /mnt/boot&lt;br /&gt;
&lt;br /&gt;
=== デバイスのマウント ===&lt;br /&gt;
[[インストールガイド#パーティションのマウント]]では実際のパーティションではなく、マップされたデバイスをマウントしてください。もちろん、{{ic|/boot}} は暗号化されていないので、直接マウントします。&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio の設定 ===&lt;br /&gt;
{{ic|keyboard}}, {{ic|keymap}}, {{ic|encrypt}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=HOOKS=(... &#039;&#039;&#039;keyboard&#039;&#039;&#039; &#039;&#039;&#039;keymap&#039;&#039;&#039; block &#039;&#039;&#039;encrypt&#039;&#039;&#039; ... filesystems ...)}}&lt;br /&gt;
&lt;br /&gt;
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
設定後はイメージを再生成してください:&lt;br /&gt;
&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
=== ブートローダーの設定 ===&lt;br /&gt;
暗号化された root パーティションを起動するには、ブートローダーに以下のカーネルパラメータを設定する必要があります ({{ic|&#039;&#039;&amp;lt;device-UUID&amp;gt;&#039;&#039;}} は {{ic|/dev/sdaX}} の UUID に置き換えてください。詳しくは[[永続的なブロックデバイスの命名]]を参照):&lt;br /&gt;
&lt;br /&gt;
 cryptdevice=UUID=&#039;&#039;&amp;lt;device-UUID&amp;gt;&#039;&#039;:cryptroot root=/dev/mapper/cryptroot&lt;br /&gt;
&lt;br /&gt;
他に必要なパラメータについては [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
== LVM on LUKS ==&lt;br /&gt;
&lt;br /&gt;
LVM の上に暗号化パーティションをセットアップするのではなく、暗号化パーティションの上に [[LVM]] をセットアップするほうが簡単です。技術的にはひとつの大きな暗号化ブロックデバイスの中に LVM をセットアップすることになります。LVM はブロックデバイスを解錠して、ボリュームをスキャンしてマウントされるまでは透過的ではなくなります。&lt;br /&gt;
&lt;br /&gt;
ディスクレイアウトの例:&lt;br /&gt;
 +-----------------------------------------------------------------------+ +----------------+&lt;br /&gt;
 | Logical volume1       | Logical volume2       | Logical volume3       | |                |&lt;br /&gt;
 |/dev/mapper/MyVol-swap |/dev/mapper/MyVol-root |/dev/mapper/MyVol-home | | Boot partition |&lt;br /&gt;
 |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _| | (may be on     |&lt;br /&gt;
 |                                                                       | | other device)  |&lt;br /&gt;
 |                        LUKS encrypted partition                       | |                |&lt;br /&gt;
 |                          /dev/sdaX                                    | | /dev/sdbY      |&lt;br /&gt;
 +-----------------------------------------------------------------------+ +----------------+&lt;br /&gt;
&lt;br /&gt;
{{Warning|この方法では論理ボリュームを複数のディスクに跨がらせることはできません。後で変更することも不可能です。[[#複数のパーティションの encrypt フックを修正]]を見てください。}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|Two variants of this setup: &lt;br /&gt;
* [[Dm-crypt/特記事項#リモート LUKS ヘッダーを使ってシステムを暗号化]]ではこのセットアップと USB デバイスのリモート LUKS ヘッダーを使って二段階認証を実現します。&lt;br /&gt;
* Instructions at [http://www.pavelkogan.com/2014/05/23/luks-full-disk-encryption/ Pavel Kogan&#039;s blog] show how to encrypt the {{ic|/boot}} partition while keeping it on the main LUKS partition when using GRUB.}} &lt;br /&gt;
&lt;br /&gt;
=== ディスクの準備 ===&lt;br /&gt;
&lt;br /&gt;
パーティションを作成する前に、[[Dm-crypt/ドライブの準備]] で説明されているように、ディスクを完全に消去する必要性・方法を学んでください。&lt;br /&gt;
&lt;br /&gt;
[[GPT]] で [[GRUB]] ブートローダーを使う時は、[[GRUB#BIOS システム]] で説明されているように BIOS Boot Partition を作成してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot}} にマウントするパーティションをタイプ {{ic|8300}} で容量 100 MB 以上にして作成します。&lt;br /&gt;
&lt;br /&gt;
タイプ {{ic|8E00}} のパーティションを作成してください。後で暗号化コンテナを入れます。&lt;br /&gt;
&lt;br /&gt;
&amp;quot;system&amp;quot; パーティションに LUKS 暗号化コンテナを作成してください。選んだパスワードを二回入力します。&lt;br /&gt;
&lt;br /&gt;
 # cryptsetup luksFormat /dev/&#039;&#039;sdaX&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
cryptsetup のオプションについては [[Dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプション|LUKS 暗号化のオプション]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
コンテナを開いてください:&lt;br /&gt;
&lt;br /&gt;
 # cryptsetup open /dev/&#039;&#039;sdaX&#039;&#039; cryptolvm&lt;br /&gt;
&lt;br /&gt;
復号化されたコンテナが {{ic|/dev/mapper/cryptolvm}} から利用できるようになります。&lt;br /&gt;
&lt;br /&gt;
=== 論理ボリュームの準備 ===&lt;br /&gt;
開いた LUKS コンテナの上に物理ボリュームを作成:&lt;br /&gt;
&lt;br /&gt;
 # pvcreate /dev/mapper/cryptolvm&lt;br /&gt;
&lt;br /&gt;
{{ic|MyVol}} という名前のボリュームグループを作成して、先に作成した物理ボリュームを追加:&lt;br /&gt;
&lt;br /&gt;
 # vgcreate MyVol /dev/mapper/cryptolvm&lt;br /&gt;
&lt;br /&gt;
ボリュームグループに論理ボリュームを作成:&lt;br /&gt;
&lt;br /&gt;
 # lvcreate -L 8G MyVol -n swap&lt;br /&gt;
 # lvcreate -L 15G MyVol -n root&lt;br /&gt;
 # lvcreate -l 100%FREE MyVol -n home&lt;br /&gt;
&lt;br /&gt;
論理ボリュームのファイルシステムをフォーマット:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext4 /dev/mapper/MyVol-root&lt;br /&gt;
 # mkfs.ext4 /dev/mapper/MyVol-home&lt;br /&gt;
 # mkswap /dev/mapper/MyVol-swap&lt;br /&gt;
&lt;br /&gt;
ファイルシステムをマウント:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mapper/MyVol-root /mnt&lt;br /&gt;
 # mkdir /mnt/home&lt;br /&gt;
 # mount /dev/mapper/MyVol-home /mnt/home&lt;br /&gt;
 # swapon /dev/mapper/MyVol-swap&lt;br /&gt;
&lt;br /&gt;
=== boot パーティションの準備 ===&lt;br /&gt;
ブートローダーは {{ic|/boot}} ディレクトリから、カーネルや [[initramfs]]、あるいはブートローダーの設定ファイルをロードします。このディレクトリは暗号化されていない別のファイルシステム上に配置する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot}} にするパーティションに Ext2 ファイルシステムを作成します。ブートローダーが読み込めるファイルシステムなら何でもかまいません。&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext2 /dev/&#039;&#039;sdbY&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|/mnt/boot}} ディレクトリを作成:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /mnt/boot&lt;br /&gt;
&lt;br /&gt;
パーティションを {{ic|/mnt/boot}} にマウント:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/&#039;&#039;sdbY&#039;&#039; /mnt/boot&lt;br /&gt;
&lt;br /&gt;
インストールの手順を mkinitcpio の設定まで進めてください。&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio の設定 ===&lt;br /&gt;
{{ic|keyboard}}, {{ic|encrypt}}, {{ic|lvm2}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=HOOKS=(... &#039;&#039;&#039;keyboard&#039;&#039;&#039; &#039;&#039;&#039;keymap&#039;&#039;&#039; block &#039;&#039;&#039;encrypt&#039;&#039;&#039; &#039;&#039;&#039;lvm2&#039;&#039;&#039; ... filesystems ...)}}&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|lvm2}} の最新実装ではフックの順番は特に意味を持ちません。}}&lt;br /&gt;
&lt;br /&gt;
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
設定後はイメージを再生成してください:&lt;br /&gt;
&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
=== ブートローダーの設定 ===&lt;br /&gt;
起動時に暗号化された root パーティションの暗号化が解除されるように、以下のカーネルパラメータをブートローダーで設定します ({{ic|&#039;&#039;&amp;lt;device-UUID&amp;gt;&#039;&#039;}} は {{ic|/dev/sdaX}} の UUID に置き換えてください。詳しくは[[永続的なブロックデバイスの命名]]を参照):&lt;br /&gt;
&lt;br /&gt;
 cryptdevice=UUID=&#039;&#039;device-UUID&#039;&#039;:cryptolvm root=/dev/mapper/MyVol-root&lt;br /&gt;
&lt;br /&gt;
詳しくは [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
== LUKS on LVM ==&lt;br /&gt;
&lt;br /&gt;
[[LVM]] 上で暗号化を利用するには、まず LVM ボリュームをセットアップして、それから暗号化パーティションのベースとして使うことになります。この方法では、暗号化パーティションと非暗号化パーティションのミックスが可能です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[#LVM on LUKS]] とは違って、複数のディスクにまたがる論理ボリュームを通常通り使うことができます。}}&lt;br /&gt;
&lt;br /&gt;
以下の短い例では LUKS on LVM 構成を作成して、/home パーティションでキーファイルを使用して {{ic|/tmp}} と {{ic|/swap}} の一時的な暗号化ボリュームを混ぜ合わせます。機密データを含む一時データが再起動しても残ってしまう可能性がないため、セキュリティ的に優れています。論理ボリュームを複数のディスクにまたがるようにしたい場合、手順は [[Dm-crypt/特記事項#LVM を複数のディスクに拡張]]で説明しています。&lt;br /&gt;
&lt;br /&gt;
=== ディスクの準備 ===&lt;br /&gt;
&lt;br /&gt;
パーティションスキーム:&lt;br /&gt;
 +----------------+-----------------------------------------------------------------------+&lt;br /&gt;
 |                | LUKS encrypted volume | LUKS encrypted volume | LUKS encrypted volume |&lt;br /&gt;
 |                | /dev/mapper/swap      | /dev/mapper/root      | /dev/mapper/home      |&lt;br /&gt;
 |                |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|&lt;br /&gt;
 |                | Logical volume1       | Logical volume2       | Logical volume3       |&lt;br /&gt;
 |                |/dev/mapper/MyVol-swap |/dev/mapper/MyVol-root |/dev/mapper/MyVol-home |&lt;br /&gt;
 |                |_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|_ _ _ _ _ _ _ _ _ _ _ _|&lt;br /&gt;
 | Boot partition |                                                                       |&lt;br /&gt;
 |   /dev/sda1    |                               /dev/sda2                               |&lt;br /&gt;
 +----------------+-----------------------------------------------------------------------+&lt;br /&gt;
&lt;br /&gt;
[[Dm-crypt/ドライブの準備#dm-crypt で空のディスクまたはパーティションを消去]]を見て {{ic|/dev/sda2}} をランダム化してください。&lt;br /&gt;
&lt;br /&gt;
=== 論理ボリュームの準備 ===&lt;br /&gt;
&lt;br /&gt;
 # pvcreate /dev/sda2&lt;br /&gt;
 # vgcreate MyVol /dev/sda2&lt;br /&gt;
 # lvcreate -L 10G -n lvroot MyVol&lt;br /&gt;
 # lvcreate -L 500M -n swap MyVol&lt;br /&gt;
 # lvcreate -L 500M -n tmp MyVol&lt;br /&gt;
 # lvcreate -l 100%FREE -n home MyVol&lt;br /&gt;
&lt;br /&gt;
 # cryptsetup luksFormat -c aes-xts-plain64 -s 512 /dev/mapper/MyVol-lvroot&lt;br /&gt;
 # cryptsetup open /dev/mapper/MyVol-lvroot root&lt;br /&gt;
 # mkfs.ext4 /dev/mapper/root&lt;br /&gt;
 # mount /dev/mapper/root /mnt&lt;br /&gt;
&lt;br /&gt;
この例では {{ic|/home}} は[[#論理ボリューム /home の暗号化|後で]]暗号化します。Arch-ISO から暗号化したルートにアクセスする必要がある場合、上記の {{ic|open}} アクションで [[LVM#論理ボリュームが表示されない|LVM を表示]]した後にアクセスできます。&lt;br /&gt;
&lt;br /&gt;
=== boot パーティションの準備 ===&lt;br /&gt;
 # dd if=/dev/zero of=/dev/sda1 bs=1M status=progress&lt;br /&gt;
 # mkfs.ext4 /dev/sda1&lt;br /&gt;
 # mkdir /mnt/boot&lt;br /&gt;
 # mount /dev/sda1 /mnt/boot&lt;br /&gt;
&lt;br /&gt;
暗号化した LVM のパーティションを設定したら、インストールを行ってください: [[インストールガイド#パーティションのマウント|Arch Install Scripts]]。&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio の設定 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|encrypt}} と {{ic|lvm2}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=HOOKS=(... &#039;&#039;&#039;keyboard&#039;&#039;&#039; &#039;&#039;&#039;keymap&#039;&#039;&#039; block &#039;&#039;&#039;lvm2&#039;&#039;&#039; &#039;&#039;&#039;encrypt&#039;&#039;&#039; ... filesystems ...)}}&lt;br /&gt;
&lt;br /&gt;
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
設定ファイルを変更した後は次のコマンドを root 権限で実行してください:&lt;br /&gt;
&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
=== ブートローダーの設定 ===&lt;br /&gt;
&lt;br /&gt;
上の例の場合、ブートローダーの設定で root デバイスのカーネルオプションを以下のように変更します:&lt;br /&gt;
 cryptdevice=/dev/mapper/MyVol-lvroot:root root=/dev/mapper/root&lt;br /&gt;
詳しくは [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== fstab と crypttab の設定 ===&lt;br /&gt;
{{hc|/etc/fstab|&lt;br /&gt;
 /dev/mapper/root        /       ext4            defaults        0       1&lt;br /&gt;
 /dev/sda1               /boot   ext4            defaults        0       2&lt;br /&gt;
 /dev/mapper/tmp         /tmp    tmpfs           defaults        0       0&lt;br /&gt;
 /dev/mapper/swap        none    swap            sw              0       0}}&lt;br /&gt;
以下の [[Dm-crypt/システム設定#crypttab|crypttab]] オプションは再起動するたびに一時ファイルシステムを暗号化します:&lt;br /&gt;
{{hc|/etc/crypttab|&lt;br /&gt;
swap	/dev/mapper/MyVol-swap	/dev/urandom	swap,cipher&amp;lt;nowiki&amp;gt;=aes-xts-plain64,size=&amp;lt;/nowiki&amp;gt;256&lt;br /&gt;
tmp	/dev/mapper/MyVol-tmp	/dev/urandom	tmp,cipher&amp;lt;nowiki&amp;gt;=aes-xts-plain64,size=&amp;lt;/nowiki&amp;gt;256&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 論理ボリューム /home の暗号化 ===&lt;br /&gt;
Since this scenario uses LVM as the primary and dm-crypt as secondary mapper, each encrypted logical volume requires its own encryption. Yet, unlike the temporary filesystems configured with volatile encryption above, the logical volume for {{ic|/home}} should be persistent, of course. The following assumes you have rebooted into the installed system, otherwise you have to adjust paths.&lt;br /&gt;
To safe on entering a second passphrase at boot for it, a [[Dm-crypt/デバイスの暗号化#キーファイル|keyfile]] is created: &lt;br /&gt;
 # mkdir -m 700 /etc/luks-keys&lt;br /&gt;
 # dd if=/dev/random of=/etc/luks-keys/home bs=1 count=256 status=progress&lt;br /&gt;
&lt;br /&gt;
論理ボリュームは以下のように暗号化します:&lt;br /&gt;
 # cryptsetup luksFormat -v -s 512 /dev/mapper/MyVol-home /etc/luks-keys/home&lt;br /&gt;
 # cryptsetup -d /etc/luks-keys/home open /dev/mapper/MyVol-home home&lt;br /&gt;
 # mkfs.ext4 /dev/mapper/home&lt;br /&gt;
 # mount /dev/mapper/home /home&lt;br /&gt;
暗号化されたマウントは [[Dm-crypt/システム設定#crypttab|crypttab]] で設定します:&lt;br /&gt;
{{hc|/etc/crypttab|&lt;br /&gt;
home /dev/mapper/MyVol-home  /etc/luks-keys/home}}&lt;br /&gt;
{{hc|/etc/fstab|&lt;br /&gt;
/dev/mapper/home        /home  ext4        defaults        0      2}}&lt;br /&gt;
これでセットアップは完了です。&lt;br /&gt;
&lt;br /&gt;
If you want to expand the logical volume for {{ic|/home}} (or any other volume) at a later point, it is important to note that the LUKS encrypted part has to be resized as well. For a procedure see [[Dm-crypt/特記事項#LVM を複数のディスクに拡張]].&lt;br /&gt;
&lt;br /&gt;
== ソフトウェア RAID と LUKS ==&lt;br /&gt;
&lt;br /&gt;
以下の例では同じ容量の SSD を2台とストレージ用の HDD を搭載したワークステーション向けノートパソコンの設定を元にしています。最終的には LUKS ベースの ({{ic|/boot}} を含む) 完全ディスク暗号化を実現し、SSD は [[RAID|RAID0]] アレイにして、起動時に [[GRUB]] にパスフレーズを指定した後にキーファイルで暗号化を解除します。SSD の [[TRIM]] のサポートは有効にしますが、[[Dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート]]も読むと良いでしょう。&lt;br /&gt;
&lt;br /&gt;
非常にシンプルなパーティションスキームを使用し、RAID ストレージは全て {{ic|/}} にマウントして ({{ic|/boot}} パーティションは分割しません)、HDD は {{ic|/mnt/data}} にマウントします。システムは BIOS モードで起動し [[パーティショニング|GPT]] でパーティショニングします。&lt;br /&gt;
&lt;br /&gt;
定期的に[[バックアップ]]を取ることが非常に重要です。SSD のどちらかが故障すると、RAID アレイに保存されていたデータは復元できなくなります。耐障害性が大事なのであれば [[RAID#通常の RAID レベル|RAID レベル]]を慎重に選択してください。&lt;br /&gt;
&lt;br /&gt;
The encryption is not deniable in this setup.&lt;br /&gt;
&lt;br /&gt;
For the sake of the instructions below, the following block devices are used:&lt;br /&gt;
 /dev/sda = first SSD&lt;br /&gt;
 /dev/sdb = second SSD&lt;br /&gt;
 /dev/sdc = HDD&lt;br /&gt;
Be sure to substitue them with the appropriate device designations for your setup, as they may be different.&lt;br /&gt;
&lt;br /&gt;
=== ディスクの準備 ===&lt;br /&gt;
&lt;br /&gt;
パーティションを作成する前に、[[Dm-crypt/ドライブの準備]]に書かれているようにディスクの完全消去について考慮してください。&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] ブートローダーを [[GPT]] で使用する場合、[[GRUB#BIOS システム]]に書かれているように BIOS Boot Partition を作成する必要があります。例として {{ic|/dev/sda1}} に &amp;quot;BIOS boot&amp;quot; の 1M パーティションを作成して、残りの空き容量は全て &amp;quot;Linux RAID&amp;quot; として {{ic|/dev/sda2}} にパーティションします。&lt;br /&gt;
&lt;br /&gt;
{{ic|/dev/sda}} にパーティションを作成したら以下のコマンドを使って {{ic|/dev/sdb}} に複製:&lt;br /&gt;
 # sfdisk -d /dev/sda &amp;gt; sda.dump&lt;br /&gt;
 # sfdisk /dev/sdb &amp;lt; sda.dump&lt;br /&gt;
&lt;br /&gt;
The HDD is prepared with a single Linux partition covering the whole drive at {{ic|/dev/sdc1}}.&lt;br /&gt;
&lt;br /&gt;
=== RAID アレイの構築 ===&lt;br /&gt;
&lt;br /&gt;
Create the RAID array for the SSDs. This example utilizes RAID0, you may wish to substitute a different level based on your preferences or requirements. &lt;br /&gt;
 # mdadm --create --verbose --level=0 --metadata=1.2 --raid-devices=2 /dev/md0 /dev/sda2 /dev/sdb2&lt;br /&gt;
&lt;br /&gt;
=== ブロックデバイスの準備 ===&lt;br /&gt;
&lt;br /&gt;
[[Dm-crypt/ドライブの準備]]に書かれているように {{ic|/dev/zero}} を使ってデバイスを消去してからランダムなキーでデバイスを暗号化してください。もしくは {{ic|dd}} で {{ic|/dev/random}} や {{ic|/dev/urandom}} を使うこともできます:&lt;br /&gt;
 # cryptsetup open --type plain /dev/md0 container --key-file /dev/random&lt;br /&gt;
 # dd if=/dev/zero of=/dev/mapper/container bs=1M status=progress&lt;br /&gt;
 # cryptsetup close container&lt;br /&gt;
&lt;br /&gt;
And repeat above for the HDD ({{ic|/dev/sdc1}} in this example).&lt;br /&gt;
&lt;br /&gt;
Set up encryption for {{ic|/dev/md0}}:&lt;br /&gt;
 # cryptsetup -y -v luksFormat -c aes-xts-plain64 -s 512 /dev/md0&lt;br /&gt;
 # cryptsetup open /dev/md0 cryptroot&lt;br /&gt;
 # mkfs.ext4 /dev/mapper/cryptroot&lt;br /&gt;
 # mount /dev/mapper/cryptroot /mnt&lt;br /&gt;
&lt;br /&gt;
And repeat for the HDD:&lt;br /&gt;
 # cryptsetup -y -v luksFormat -c aes-xts-plain64 -s 512 /dev/sdc1&lt;br /&gt;
 # cryptsetup open /dev/sdc1 cryptdata&lt;br /&gt;
 # mkfs.ext4 /dev/mapper/cryptdata&lt;br /&gt;
 # mkdir -p /mnt/mnt/data&lt;br /&gt;
 # mount /dev/mapper/cryptdata /mnt/mnt/data&lt;br /&gt;
&lt;br /&gt;
=== ブートローダーの設定 ===&lt;br /&gt;
&lt;br /&gt;
Configure [[GRUB]] for the encrypted system by editing {{ic|/etc/default/grub}} with the following. Note that the {{ic|:allow-discards}} option enables TRIM support on the SSDs, if you do not wish to use it you should omit this.&lt;br /&gt;
 GRUB_CMDLINE_LINUX=&amp;quot;cryptdevice=/dev/md0:cryptroot:allow-discards root=/dev/mapper/cryptroot&amp;quot;&lt;br /&gt;
 GRUB_ENABLE_CRYPTODISK=y&lt;br /&gt;
&lt;br /&gt;
詳しくは [[Dm-crypt/システム設定#ブートローダー]]や [[GRUB#暗号化された /boot]]を見てください。&lt;br /&gt;
&lt;br /&gt;
Complete the GRUB install to both SSDs (in reality, installing only to {{ic|/dev/sda}} will work).&lt;br /&gt;
 # grub-install --target=i386-pc /dev/sda&lt;br /&gt;
 # grub-install --target=i386-pc /dev/sdb&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
&lt;br /&gt;
=== キーファイルの作成 ===&lt;br /&gt;
&lt;br /&gt;
システムの起動時にパスフレーズを二回入力する手間を省く設定です。[[dm-crypt/デバイスの暗号化#キーファイル|キーファイル]]を作成して initramfs イメージに追加することで encrypt フックでルートデバイスを解除できるようにします。詳しくは [[dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む]] を参照。&lt;br /&gt;
&lt;br /&gt;
* [[dm-crypt/デバイスの暗号化#キーファイル|キーファイル]]を作成して {{ic|/dev/md0}} にキーを追加。&lt;br /&gt;
* HDD ({{ic|/dev/sdc1}}) のキーファイルを作成することで起動時に解錠が可能です。上記で作成したパスフレーズは残すことで後で必要になったときに復旧が簡単です。{{ic|/etc/crypttab}} を編集して起動時に HDD を復号化してください。詳しくは [[dm-crypt/デバイスの暗号化#起動時にロックを解除]]を参照。&lt;br /&gt;
&lt;br /&gt;
=== システムの設定 ===&lt;br /&gt;
&lt;br /&gt;
[[fstab|/etc/fstab]] を編集して cryptroot と cryptdata ブロックデバイスをマウントしてください。TRIM のサポートを有効にしなかった場合、{{ic|discard}} マウントオプションは削除してください:&lt;br /&gt;
&lt;br /&gt;
 /dev/mapper/cryptroot  /           ext4    rw,noatime,discard  0   1 &lt;br /&gt;
 /dev/mapper/cryptdata  /mnt/data   ext4    defaults            0   2  &lt;br /&gt;
&lt;br /&gt;
RAID の設定を保存:&lt;br /&gt;
&lt;br /&gt;
 # mdadm --detail --scan &amp;gt; /etc/mdadm.conf &lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio.conf]] を編集してキーファイルを適切なフックを追加してください:&lt;br /&gt;
&lt;br /&gt;
 FILES=(/crypto_keyfile.bin)&lt;br /&gt;
 HOOKS=( ... &#039;&#039;&#039;keyboard&#039;&#039;&#039; &#039;&#039;&#039;keymap&#039;&#039;&#039; block &#039;&#039;&#039;mdadm_udev&#039;&#039;&#039; &#039;&#039;&#039;encrypt&#039;&#039;&#039; filesystems ... )&lt;br /&gt;
&lt;br /&gt;
詳しくは [[dm-crypt/システム設定#mkinitcpio]] を参照。&lt;br /&gt;
&lt;br /&gt;
== Plain dm-crypt ==&lt;br /&gt;
&lt;br /&gt;
Contrary to LUKS, dm-crypt &#039;&#039;plain&#039;&#039; mode does not require a header on the encrypted device: this scenario exploits this feature to set up a system on an unpartitioned, encrypted disk that will be indistinguishable from a disk filled with random data, which could allow [[Wikipedia:Deniable encryption|deniable encryption]]. See also [[wikipedia:Disk encryption#Full disk encryption]].&lt;br /&gt;
&lt;br /&gt;
Note that if full-disk encryption is not required, the methods using LUKS described in the sections above are better options for both system encryption and encrypted partitions. LUKS features like key management with multiple passphrases/key-files or re-encrypting a device in-place are unavailable with &#039;&#039;plain&#039;&#039; mode.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Plain&#039;&#039; dm-crypt encryption can be more resilient to damage than LUKS encrypted disks, because it does not rely on an encryption master-key which can be a single-point of failure if damaged. However, using &#039;&#039;plain&#039;&#039; mode also requires more manual configuration of encryption options to achieve the same cryptographic strength. See also [[ディスク暗号化#暗号メタデータ]]. Using &#039;&#039;plain&#039;&#039; mode could also be considered if concerned with the problems explained in [[Dm-crypt/特記事項#ソリッドステートドライブ (SSD) の Discard/TRIM のサポート]].&lt;br /&gt;
&lt;br /&gt;
{{Tip|If headerless encryption is your goal but you are unsure about the lack of key-derivation with &#039;&#039;plain&#039;&#039; mode, then two alternatives are:&lt;br /&gt;
* dm-crypt LUKS mode by using the &#039;&#039;cryptsetup&#039;&#039; {{ic|--header}} option. It cannot be used with the standard &#039;&#039;encrypt&#039;&#039; hook, but the hook [[Dm-crypt/特記事項#リモート LUKS ヘッダーを使ってシステムを暗号化|may be modified]].&lt;br /&gt;
* [[tcplay]] which offers headerless encryption but with the PBKDF2 function.}}&lt;br /&gt;
&lt;br /&gt;
このシナリオでは2つの USB スティックを使います:&lt;br /&gt;
* one for the boot device, which also allows storing the options required to open/unlock the plain encrypted device in the boot loader configuration, since typing them on each boot would be error prone;&lt;br /&gt;
* another for the encryption key file, assuming it stored as raw bits so that to the eyes of an unaware attacker who might get the usbkey the encryption key will appear as random data instead of being visible as a normal file. See also [[Wikipedia:Security through obscurity]], follow [[Dm-crypt/デバイスの暗号化#キーファイル]] to prepare the keyfile.&lt;br /&gt;
&lt;br /&gt;
 |--------------------+------------------+--------------------+ +---------------+ +---------------+&lt;br /&gt;
 |Volume 1:           |Volume 2:         |Volume 3:           | |Boot device    | |Encryption key |&lt;br /&gt;
 |                    |                  |                    | |               | |file storage   |&lt;br /&gt;
 |root                |swap              |home                | |/boot          | |(unpartitioned |&lt;br /&gt;
 |                    |                  |                    | |               | |in example)    |&lt;br /&gt;
 |/dev/store/root     |/dev/store/swap   |/dev/store/home     | |/dev/sdY1      | |/dev/sdZ       |&lt;br /&gt;
 |--------------------+------------------+--------------------| |---------------| |---------------|&lt;br /&gt;
 |disk drive /dev/sdaX encrypted using plain mode and LVM     | |USB stick 1    | |USB stick 2    |&lt;br /&gt;
 +------------------------------------------------------------+ +---------------+ +---------------+&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* It is also possible to use a single usb key by copying the keyfile to the initram directly. An example keyfile {{ic|/etc/keyfile}} gets copied to the initram image by setting {{ic|1=FILES=(/etc/keyfile)}} in {{ic|/etc/mkinitcpio.conf}}. The way to instruct the {{ic|encrypt}} hook to read the keyfile in the initram image is using {{ic|rootfs:}} prefix before the filename, e.g. {{ic|cryptkey&amp;amp;#61;rootfs:/etc/keyfile}}.&lt;br /&gt;
* [[ディスク暗号化#強固なパスフレーズの選択|エントロピー]]が十分なパスフレーズを使用するという選択肢も存在します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== ディスクの準備 ===&lt;br /&gt;
&lt;br /&gt;
It is vital that the mapped device is filled with data. In particular this applies to the scenario usecase we apply here. &lt;br /&gt;
&lt;br /&gt;
[[Dm-crypt/ドライブの準備]] や [[Dm-crypt/ドライブの準備#dm-crypt 固有の方法]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== boot 以外のパーティションの準備 ===&lt;br /&gt;
&lt;br /&gt;
詳しくは [[Dm-crypt/デバイスの暗号化#plain モードの暗号化オプション]] を参照。&lt;br /&gt;
&lt;br /&gt;
Using the device {{ic|/dev/sd&#039;&#039;X&#039;&#039;}}, with the twofish-xts cipher with a 512 bit key size and using a keyfile we have the following options for this scenario:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;# cryptsetup --hash=sha512 --cipher=twofish-xts-plain64 --offset=0 --key-file=&amp;lt;/nowiki&amp;gt;/dev/sd&#039;&#039;Z&#039;&#039; &amp;lt;nowiki&amp;gt;--key-size=512 open --type=plain /dev/sdX enc&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
Unlike encrypting with LUKS, the above command must be executed &#039;&#039;in full&#039;&#039; whenever the mapping needs to be re-established, so it is important to remember the cipher, hash and key file details. &lt;br /&gt;
&lt;br /&gt;
We can now check a mapping entry has been made for {{ic|/dev/mapper/enc}}:&lt;br /&gt;
 # fdisk -l&lt;br /&gt;
&lt;br /&gt;
Next, we setup [[LVM]] logical volumes on the mapped device, see [[LVM#Arch Linux を LVM にインストールする]] for further details: &lt;br /&gt;
 # pvcreate /dev/mapper/enc&lt;br /&gt;
 # vgcreate store /dev/mapper/enc&lt;br /&gt;
 # lvcreate -L 20G store -n root&lt;br /&gt;
 # lvcreate -L 10G store -n swap&lt;br /&gt;
 # lvcreate -l +100%FREE store -n home&lt;br /&gt;
論理ボリュームをフォーマットしてマウントします。詳しくは[[ファイルシステム#デバイスのフォーマット]]を見て下さい &lt;br /&gt;
 # mkfs.ext4 /dev/store/root&lt;br /&gt;
 # mkfs.ext4 /dev/store/home&lt;br /&gt;
 # mount /dev/store/root /mnt&lt;br /&gt;
 # mkdir /mnt/home&lt;br /&gt;
 # mount /dev/store/home /mnt/home&lt;br /&gt;
 # mkswap /dev/store/swap&lt;br /&gt;
 # swapon /dev/store/swap&lt;br /&gt;
&lt;br /&gt;
=== boot パーティションの準備 ===&lt;br /&gt;
必要であれば、USB スティックの vfat パーティションに {{ic|/boot}} パーティションをインストールできます。ただし、手動のパーティションが必要な場合、小さな 200MB のパーティションで十分です。お好きな [[パーティショニング#パーティショニングツール|パーティションツール]]を使ってパーティションを作成してください。&lt;br /&gt;
&lt;br /&gt;
vfat でフォーマットされていない場合、{{ic|/boot}} パーティションのフラッシュメモリを保護するため非ジャーナリングファイルシステムを選択します:&lt;br /&gt;
 # mkfs.ext2 /dev/sd&#039;&#039;Y&#039;&#039;1&lt;br /&gt;
 # mkdir /mnt/boot&lt;br /&gt;
 # mount /dev/sd&#039;&#039;Y&#039;&#039;1 /mnt/boot&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio の設定 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|keyboard}}, {{ic|encrypt}}, {{ic|lvm2}} フックを [[mkinitcpio|mkinitcpio.conf]] 内の {{ic|filesystems}} の前に追加します:&lt;br /&gt;
{{hc|etc/mkinitcpio.conf|2=HOOKS=(... &#039;&#039;&#039;keyboard&#039;&#039;&#039; &#039;&#039;&#039;keymap&#039;&#039;&#039; block &#039;&#039;&#039;encrypt&#039;&#039;&#039; &#039;&#039;&#039;lvm2&#039;&#039;&#039; ... filesystems ...)}}&lt;br /&gt;
&lt;br /&gt;
他に必要なフックについては [[dm-crypt/システム設定#mkinitcpio]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
設定後はイメージを再生成してください:&lt;br /&gt;
&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
=== ブートローダーの設定 ===&lt;br /&gt;
&lt;br /&gt;
暗号化した root パーティションを起動するには、以下のカーネルパラメータをブートローダーで設定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 cryptdevice=/dev/sd&#039;&#039;X&#039;&#039;:enc cryptkey=/dev/sd&#039;&#039;Z&#039;&#039;:0:512 crypto=sha512:twofish-xts-plain64:512:0:&lt;br /&gt;
&lt;br /&gt;
{{Note|encrypt の代わりに sd-encrypt を使用する場合、cryptdevice の代わりに {{ic|&#039;&#039;luks.uuid&#039;&#039;}} を使ってください。詳しくは &#039;&#039;systemd-cryptsetup-generator(8)&#039;&#039; を参照。}}&lt;br /&gt;
&lt;br /&gt;
他に必要なパラメータについては [[Dm-crypt/システム設定#ブートローダー]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Tip|GRUB を使用する場合、次のコマンドを使うことで {{ic|/boot}} パーティションと同じ USB にインストールすることができます:&lt;br /&gt;
 # grub-install --recheck /dev/sd&#039;&#039;Y&#039;&#039;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===インストール後===&lt;br /&gt;
&lt;br /&gt;
起動後に USB スティックは取り除けます。{{ic|/boot}} パーティションは通常は必要ないため、{{ic|noauto}} オプションを {{ic|/etc/fstab}} に追加できます:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/fstab|&lt;br /&gt;
# /dev/sd&#039;&#039;Yn&#039;&#039;&lt;br /&gt;
/dev/sd&#039;&#039;Yn&#039;&#039; /boot ext2 &#039;&#039;&#039;noauto&#039;&#039;&#039;,rw,noatime 0 2}}&lt;br /&gt;
&lt;br /&gt;
ただしカーネルやブートローダーのアップグレードが必要なときは、{{ic|/boot}} パーティションがマウントされていなければなりません。{{ic|fstab}} に既にエントリが存在すれば、次のコマンドでマウントできます:&lt;br /&gt;
&lt;br /&gt;
 # mount /boot&lt;br /&gt;
&lt;br /&gt;
== boot パーティションの暗号化 (GRUB) ==&lt;br /&gt;
&lt;br /&gt;
このセットアップでは [[#LVM on LUKS]] セクションと同じパーティションレイアウト・設定でシステムのルートパーティションを設定しますが、違いが2つあります:&lt;br /&gt;
&lt;br /&gt;
# セットアップは [[UEFI]] 環境で行います。&lt;br /&gt;
# [[GRUB]] ブートローダーの特殊機能を使用してブートパーティション {{ic|/boot}} も暗号化します。[[GRUB#暗号化された /boot]]を見てください。&lt;br /&gt;
&lt;br /&gt;
ディスクレイアウトは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 +---------------+----------------+----------------+----------------+----------------+&lt;br /&gt;
 |ESP partition: |Boot partition: |Volume 1:       |Volume 2:       |Volume 3:       |&lt;br /&gt;
 |               |                |                |                |                |&lt;br /&gt;
 |/boot/efi      |/boot           |root            |swap            |home            |&lt;br /&gt;
 |               |                |                |                |                |&lt;br /&gt;
 |               |                |/dev/store/root |/dev/store/swap |/dev/store/home |&lt;br /&gt;
 |/dev/sdaX      |/dev/sdaY       +----------------+----------------+----------------+&lt;br /&gt;
 |&#039;&#039;&#039;un&#039;&#039;&#039;encrypted    |LUKS encrypted  |/dev/sdaZ encrypted using LVM on LUKS             |&lt;br /&gt;
 +---------------+----------------+--------------------------------------------------+&lt;br /&gt;
&lt;br /&gt;
{{Tip|All scenarios are intended as examples. It is, of course, possible to apply both of the two above distinct installation steps with the other scenarios as well. See also the variants linked in [[#LVM on LUKS]].}}&lt;br /&gt;
{{Note|{{AUR|cryptboot}} パッケージの {{ic|cryptboot}} スクリプトを使うことで暗号化された boot の管理 (マウント・アンマウント・パッケージのアップグレード) を簡単にできます。また、[[セキュアブート#自分で署名した鍵を使う|UEFI Secure Boot]] を使用して [https://www.schneier.com/blog/archives/2009/10/evil_maid_attac.html 悪意あるメイド] 攻撃から身を守ることができます。詳しくは [https://github.com/xmikos/cryptboot cryptboot のプロジェクトページ] を参照。}}&lt;br /&gt;
&lt;br /&gt;
=== ディスクの準備 ===&lt;br /&gt;
&lt;br /&gt;
パーティションを作成する前に、[[Dm-crypt/ドライブの準備]]に書かれているように、ディスクを完全に消去するようにしてください。&lt;br /&gt;
&lt;br /&gt;
[[Unified_Extensible_Firmware_Interface#EFI_System_Partition|EFI System Partition (ESP)]] を適当な容量で作成してください。後で {{ic|/boot/efi}} にマウントします。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot}} にマウントするパーティションをタイプ {{ic|8300}} の容量 100 MB 以上で作成します。&lt;br /&gt;
&lt;br /&gt;
{{Tip|BIOS/[[GPT]] で [[GRUB]] ブートローダーを使用する場合は、[[GRUB#BIOS システム]]に書かれているように ESP の代わりに BIOS Boot Partition を作成してください。}}&lt;br /&gt;
&lt;br /&gt;
タイプ {{ic|8E00}} のパーティションを作成してください。後で暗号化コンテナを入れます。&lt;br /&gt;
&lt;br /&gt;
&amp;quot;system&amp;quot; パーティションに LUKS 暗号化コンテナを作成してください。&lt;br /&gt;
&lt;br /&gt;
 # cryptsetup luksFormat /dev/&#039;&#039;sdaZ&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
上記のコマンドの cryptsetup で使えるオプションについては [[Dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプション|LUKS 暗号化オプション]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
パーティションレイアウトは以下のようになります:&lt;br /&gt;
{{hc|# gdisk /dev/sda |&lt;br /&gt;
Number  Start (sector)    End (sector)  Size       Code  Name&lt;br /&gt;
   1            2048         1050623   512.0 MiB   EF00  EFI System&lt;br /&gt;
   2         1050624         1460223   200.0 MiB   8300  Linux filesystem&lt;br /&gt;
   3         1460224        41943006   19.3 GiB    8E00  Linux LVM&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
コンテナを開く:&lt;br /&gt;
&lt;br /&gt;
 # cryptsetup open --type luks /dev/&#039;&#039;sdaZ&#039;&#039; lvm&lt;br /&gt;
&lt;br /&gt;
復号化されたコンテナは {{ic|/dev/mapper/lvm}} から利用できます。&lt;br /&gt;
&lt;br /&gt;
=== 論理ボリュームの準備 ===&lt;br /&gt;
&lt;br /&gt;
The LVM logical volumes of this example follow the exact layout as the previous scenario. Therefore, please follow [[#論理ボリュームの準備|Preparing the logical volumes]] above or adjust as required.&lt;br /&gt;
&lt;br /&gt;
=== boot パーティションの準備 ===&lt;br /&gt;
&lt;br /&gt;
ブートローダーは {{ic|/boot}} ディレクトリからカーネルや [[initramfs]]、あるいはブートローダーの設定ファイルをロードします。&lt;br /&gt;
&lt;br /&gt;
まず、ファイルを配置・インストールするための LUKS コンテナを作成:&lt;br /&gt;
 &lt;br /&gt;
 # cryptsetup luksFormat /dev/sda&#039;&#039;Y&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
次に、コンテナをオープン:&lt;br /&gt;
 # cryptsetup open /dev/sda&#039;&#039;Y&#039;&#039; cryptboot &lt;br /&gt;
&lt;br /&gt;
{{ic|/boot}} にするパーティションにファイルシステムを作成。ブートローダーから読み込めるならどんなファイルシステムでもかまいません:&lt;br /&gt;
&lt;br /&gt;
 # mkfs.ext2 /dev/mapper/&#039;&#039;cryptboot&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|/mnt/boot}} ディレクトリを作成:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /mnt/boot&lt;br /&gt;
&lt;br /&gt;
パーティションを {{ic|/mnt/boot}} にマウント:&lt;br /&gt;
&lt;br /&gt;
 # mount /dev/mapper/&#039;&#039;cryptboot&#039;&#039; /mnt/boot&lt;br /&gt;
&lt;br /&gt;
{{ic|grub-install}} から利用できるように [[Unified_Extensible_Firmware_Interface#EFI_System_Partition|ESP]] のマウントポイントを {{ic|/boot/efi}} に作成してマウント:&lt;br /&gt;
&lt;br /&gt;
 # mkdir /mnt/boot/efi&lt;br /&gt;
 # mount /dev/&#039;&#039;sdaX&#039;&#039; /mnt/boot/efi&lt;br /&gt;
&lt;br /&gt;
この時点で、{{ic|/mnt}} の中に以下のパーティションと論理ボリュームが作成されているはずです:&lt;br /&gt;
{{hc|$ lsblk|&lt;br /&gt;
NAME              	  MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT&lt;br /&gt;
sda                       8:0      0   200G  0 disk  &lt;br /&gt;
├─sda1                    8:1      0   512M  0 part  /boot/efi&lt;br /&gt;
├─sda2                    8:2      0   200M  0 part  &lt;br /&gt;
│ └─boot		  254:0    0   198M  0 crypt /boot&lt;br /&gt;
└─sda3                    8:3      0   100G  0 part  &lt;br /&gt;
  └─lvm                   254:1    0   100G  0 crypt &lt;br /&gt;
    ├─MyStorage-swapvol   254:2    0     8G  0 lvm   [SWAP]&lt;br /&gt;
    ├─MyStorage-rootvol   254:3    0    15G  0 lvm   /&lt;br /&gt;
    └─MyStorage-homevol   254:4    0    77G  0 lvm   /home&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
インストールの手順を mkinitcpio の設定まで進めてください。&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio の設定 ===&lt;br /&gt;
&lt;br /&gt;
[[mkinitcpio|mkinitcpio.conf]] に {{ic|keyboard}}, {{ic|encrypt}}, {{ic|lvm2}} フックを追加:&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=HOOKS=(... &#039;&#039;&#039;keyboard&#039;&#039;&#039; &#039;&#039;&#039;keymap&#039;&#039;&#039; block &#039;&#039;&#039;encrypt&#039;&#039;&#039; &#039;&#039;&#039;lvm2&#039;&#039;&#039; ... filesystems ...)}}&lt;br /&gt;
&lt;br /&gt;
詳細や必要な他のフックについては [[dm-crypt/システム設定#mkinitcpio]] を参照。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
設定後はイメージを再生成してください:&lt;br /&gt;
&lt;br /&gt;
 # mkinitcpio -p linux&lt;br /&gt;
&lt;br /&gt;
=== ブートローダーの設定 ===&lt;br /&gt;
&lt;br /&gt;
起動時に LUKS で暗号化された {{ic|/boot}} パーティションを認識して暗号化された root パーティションの暗号化が解除されるように GRUB を設定:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/default/grub|2=&lt;br /&gt;
GRUB_CMDLINE_LINUX=&amp;quot;... cryptdevice=UUID=&#039;&#039;&amp;lt;device-UUID&amp;gt;&#039;&#039;:lvm ...&amp;quot;&lt;br /&gt;
GRUB_ENABLE_CRYPTODISK=y&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
詳しくは [[Dm-crypt/システム設定#ブートローダー]]や [[GRUB#暗号化された /boot]]を参照。{{ic|&#039;&#039;&amp;lt;device-UUID&amp;gt;&#039;&#039;}} は {{ic|/dev/sdaZ}} (ルートファイルシステムが存在する LVM が含まれているパーティション) の UUID に置き換えてください。詳しくは[[永続的なブロックデバイスの命名]]を参照。&lt;br /&gt;
&lt;br /&gt;
GRUB の[[GRUB#メイン設定ファイルの生成|設定ファイル]]を作成して、マウントされている ESP に [[GRUB#インストール|GRUB をインストール]]:&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=grub --recheck&lt;br /&gt;
&lt;br /&gt;
設定に問題がなければ、次の起動時に GRUB は {{ic|/boot}} パーティションのロックを解除するためのパスフレーズを要求するはずです。&lt;br /&gt;
&lt;br /&gt;
=== fstab と crypttab の設定 ===&lt;br /&gt;
&lt;br /&gt;
This section deals with extra configuration to let the system &#039;&#039;&#039;mount&#039;&#039;&#039; the encrypted {{ic|/boot}}. &lt;br /&gt;
&lt;br /&gt;
While GRUB asks for a passphrase to unlock the encrypted {{ic|/boot}} after above instructions, the partition unlock is not passed on to the initramfs. Hence, {{ic|/boot}} will not be available after the system has re-/booted, because the {{ic|encrypt}} hook only unlocks the system&#039;s root. &lt;br /&gt;
&lt;br /&gt;
インストール時に &#039;&#039;genfstab&#039;&#039; スクリプトを使用した場合、{{ic|/boot}} と {{ic|/boot/efi}} マウントポイントのエントリが含まれた {{ic|/etc/fstab}} が作成されています。しかしながらシステムはブートパーティションに生成されたデバイスマッパーを見つけることができません。デバイスマッパーを使えるようにするために、以下を [[Dm-crypt/システム設定#crypttab|crypttab]] に追加してください。例: &lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/crypttab|&lt;br /&gt;
cryptboot  /dev/sdaY      none        luks}}&lt;br /&gt;
&lt;br /&gt;
上記を設定するとパスフレーズが二回要求されるようになります (GRUB と systemd ユニットでそれぞれ一回ずつ入力しなくてはなりません)。{{ic|/boot}} のロックを解除するエントリを重複させたくない場合、[[Dm-crypt/デバイスの暗号化#キーファイル]]の指示に従ってください: &lt;br /&gt;
&lt;br /&gt;
# [[Dm-crypt/デバイスの暗号化#ファイルシステムにキーファイルを保存|ランダムなテキストのキーファイル]]を作成&lt;br /&gt;
# キーファイルを ({{ic|/dev/sdaY}}) [[Dm-crypt/デバイスの暗号化#キーファイルを使用するように LUKS を設定|ブートパーティションの LUKS ヘッダ]]に追加&lt;br /&gt;
# {{ic|/etc/fstab}} のエントリを確認して[[Dm-crypt/デバイスの暗号化#起動時にロックを解除|起動時に自動的にロックが解除]]されるように {{ic|/etc/crypttab}} 行を追加&lt;br /&gt;
&lt;br /&gt;
何らかの理由でキーファイルを使って boot パーティションのロックを解除できなかった場合、systemd はフォールバックして解除するためのパスフレーズを要求します。パスフレーズが正しければ、起動に進みます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|Optional post-installation steps: &lt;br /&gt;
* It may be worth considering to add the GRUB bootloader to the ignore list of {{ic|/etc/pacman.conf}} in order to take particular control of when the bootloader (which includes its own encryption modules) is updated. &lt;br /&gt;
* If you want to encrypt the {{ic|/boot}} partition to protect against offline tampering threats, the [[Dm-crypt/特記事項#mkinitcpio-chkcryptoboot|mkinitcpio-chkcryptoboot]] hook has been contributed to help.}}&lt;br /&gt;
&lt;br /&gt;
== Btrfs サブボリュームとスワップ ==&lt;br /&gt;
&lt;br /&gt;
以下の例では [[Btrfs]] のサブボリュームを使って LUKS によるフルシステム暗号化を作成します。&lt;br /&gt;
&lt;br /&gt;
UEFI を使っている場合、[[EFI システムパーティション]] (ESP) が必要です。{{ic|/boot}} は {{ic|/}} の中に保存して暗号化することができますが、ESP を暗号化することは不可能です。ここでは例として、ESP は {{ic|/dev/sda&#039;&#039;Y&#039;&#039;}} で {{ic|/boot/efi}} にマウントするとします。{{ic|/boot}} はシステムパーティション ({{ic|/dev/sda&#039;&#039;X&#039;&#039;}}) に保存します。&lt;br /&gt;
&lt;br /&gt;
{{ic|/boot}} を暗号化された {{ic|/}} の中に配置するため、ブートローダーは [[GRUB]] を使用する必要があります。GRUB だけが {{ic|/boot}} を復号化するのに必要なモジュールをロードできるからです (例: {{ic|crypto.mod}}, {{ic|cryptodisk.mod}}, {{ic|luks.mod}}) [http://www.pavelkogan.com/2014/05/23/luks-full-disk-encryption/]。&lt;br /&gt;
&lt;br /&gt;
さらに任意で暗号化した[[スワップ]]パーティションも作成します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|スワップパーティションのかわりとして[[スワップファイル]]を使うことはできません。データを消失する可能性があります。[[Btrfs#スワップファイル]]を見てください。}}&lt;br /&gt;
&lt;br /&gt;
 +--------------------------+--------------------------+--------------------------+&lt;br /&gt;
 |ESP                       |System partition          |Swap partition            |&lt;br /&gt;
 |&#039;&#039;&#039;un&#039;&#039;&#039;encrypted               |LUKS-encrypted            |plain-encrypted           |&lt;br /&gt;
 |                          |                          |                          |&lt;br /&gt;
 |/boot/efi                 |/                         |                          |&lt;br /&gt;
 |/dev/sda&#039;&#039;Y&#039;&#039;                 |/dev/sda&#039;&#039;X&#039;&#039;                 |/dev/sda&#039;&#039;Z&#039;&#039;                 |&lt;br /&gt;
 |--------------------------+--------------------------+--------------------------+&lt;br /&gt;
&lt;br /&gt;
=== ディスクの準備 ===&lt;br /&gt;
&lt;br /&gt;
{{Note|LUKS を使用する場合に[[Btrfs#パーティショニング|パーティションしない Btrfs ディスク]]を使用することは不可能です。作成するパーティションがひとつだけの場合でも伝統的なパーティショニングが必須です。}}&lt;br /&gt;
&lt;br /&gt;
パーティションを作成する前に、[[dm-crypt/ドライブの準備]]に書かれているようにディスクを完全消去するようにしてください。[[UEFI]] を使っている場合、適当なサイズの [[EFI システムパーティション]]を作成してください。後で {{ic|/boot/efi}} にマウントします。スワップパーティションを暗号化する場合、パーティションを作成してもスワップとして設定してはいけません。plain &#039;&#039;dm-crypt&#039;&#039; でパーティションを使用するためです。&lt;br /&gt;
&lt;br /&gt;
必要なパーティションを作成してください。最低でも {{ic|/}} のパーティションが必要です (例: {{ic|/dev/sda&#039;&#039;X&#039;&#039;}})。[[パーティショニング]]の記事を見てください。&lt;br /&gt;
&lt;br /&gt;
=== システムパーティションの準備 ===&lt;br /&gt;
&lt;br /&gt;
==== LUKS コンテナの作成 ====&lt;br /&gt;
&lt;br /&gt;
[[dm-crypt/デバイスの暗号化#LUKS モードでデバイスを暗号化]]に従って {{ic|/dev/sda&#039;&#039;X&#039;&#039;}} を LUKS で設定してください。設定する前に [[Dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプション]]を見てください。&lt;br /&gt;
&lt;br /&gt;
==== LUKS コンテナの解錠 ====&lt;br /&gt;
&lt;br /&gt;
[[dm-crypt/デバイスの暗号化#デバイスマッパーで LUKS パーティションのロックを解除・マップ]]に従って LUKS コンテナを解錠してマッピングしてください。&lt;br /&gt;
&lt;br /&gt;
==== マッピングされたデバイスのフォーマット ====&lt;br /&gt;
&lt;br /&gt;
[[Btrfs#新しいファイルシステムを作成する]]に書かれているようにデバイスをフォーマットしてください。{{ic|&#039;&#039;/dev/partition&#039;&#039;}} はマップしたデバイスの名前 ({{ic|cryptroot}}) に置き換えてください。{{ic|/dev/sda&#039;&#039;X&#039;&#039;}} を使ってはいけません。&lt;br /&gt;
&lt;br /&gt;
==== マッピングされたデバイスのマウント ====&lt;br /&gt;
&lt;br /&gt;
最後に、フォーマットされたマップ済みデバイス ({{ic|/dev/mapper/cryptroot}}) を {{ic|/mnt}} に[[マウント]]してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|1=compress=lzo}} マウントオプションを使うと良いでしょう。詳しくは [[Btrfs#圧縮]]を見てください。}}&lt;br /&gt;
&lt;br /&gt;
=== btrfs サブボリュームの作成 ===&lt;br /&gt;
&lt;br /&gt;
==== レイアウト ====&lt;br /&gt;
&lt;br /&gt;
[[Btrfs#サブボリューム|サブボリューム]]をパーティションのように使いますが、他の (ネストした) サブボリュームも作成します。以下は作成するサブボリュームの例を示しています:&lt;br /&gt;
&lt;br /&gt;
 subvolid=5 (/dev/sda&#039;&#039;X&#039;&#039;)&lt;br /&gt;
    |&lt;br /&gt;
    ├── @ (mounted as /)&lt;br /&gt;
    |       |&lt;br /&gt;
    |       ├── /bin (directory)&lt;br /&gt;
    |       |&lt;br /&gt;
    |       ├── /home (mounted @home subvolume)&lt;br /&gt;
    |       |&lt;br /&gt;
    |       ├── /usr (directory)&lt;br /&gt;
    |       |&lt;br /&gt;
    |       ├── /.snapshots (mounted @snapshots subvolume)&lt;br /&gt;
    |       |&lt;br /&gt;
    |       ├── /var/cache/pacman/pkg (nested subvolume)&lt;br /&gt;
    |       |&lt;br /&gt;
    |       ├── ... (other directories and nested subvolumes)&lt;br /&gt;
    |&lt;br /&gt;
    ├── @snapshots (mounted as /.snapshots)&lt;br /&gt;
    |&lt;br /&gt;
    ├── @home (mounted as /home)&lt;br /&gt;
    |&lt;br /&gt;
    └── @... (additional subvolumes you wish to use as mount points)&lt;br /&gt;
&lt;br /&gt;
このセクションでは [[Snapper]] を使うときに便利な [[Snapper#推奨ファイルシステムレイアウト]]に従います。[https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Layout Btrfs Wiki SysadminGuide#Layout] も読んでください。&lt;br /&gt;
&lt;br /&gt;
==== トップレベルサブボリュームの作成 ====&lt;br /&gt;
&lt;br /&gt;
マウントポイントとして使用するサブボリュームの名前には {{ic|@}} を前に付けます。{{ic|/}} にマウントするサブボリュームは {{ic|@}} とします。&lt;br /&gt;
&lt;br /&gt;
[[Btrfs#サブボリュームを作成する]]に従って {{ic|/mnt/@}}, {{ic|/mnt/@snapshots}}, {{ic|/mnt/@home}} にサブボリュームを作成します。&lt;br /&gt;
&lt;br /&gt;
他にマウントポイントとして使用したいサブボリュームも作成してください。&lt;br /&gt;
&lt;br /&gt;
==== トップレベルサブボリュームのマウント ====&lt;br /&gt;
&lt;br /&gt;
{{ic|/mnt}} のシステムパーティションをアンマウントしてください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/}} として使用する、新しく作成した {{ic|@}} サブボリュームを {{ic|1=subvol=}} マウントオプションを使って {{ic|/mnt}} にマウントします。マップしたデバイスの名前が {{ic|cryptroot}} なら、コマンドは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
 # mount -o compress=lzo,subvol=@ /dev/mapper/cryptroot /mnt&lt;br /&gt;
&lt;br /&gt;
詳しくは [[Btrfs#サブボリュームをマウントする]]を見てください。&lt;br /&gt;
&lt;br /&gt;
他のサブボリュームを適切なマウントポイントにマウントしてください: {{ic|@home}} は {{ic|/mnt/home}} に、{{ic|@snapshots}} は {{ic|/mnt/.snapshots}} にマウントします。&lt;br /&gt;
&lt;br /&gt;
==== ネストされたサブボリュームの作成 ====&lt;br /&gt;
&lt;br /&gt;
{{ic|/}} のスナップショットが作成されるときに、スナップショットを作りたくないサブボリュームを作成してください。例えば、{{ic|/var/cache/pacman/pkg}} のスナップショットなどは不要でしょう。サブボリュームは {{ic|@}} サブボリュームの下にネストしますが、{{ic|@}} と同じレベルに作成することもできます。&lt;br /&gt;
&lt;br /&gt;
{{ic|@}} サブボリュームは {{ic|/mnt}} にマウントするため、{{ic|/mnt/var/cache/pacman/pkg}} に[[Btrfs#サブボリュームを作成する|サブボリュームを作成]]する必要があります。先に親のディレクトリを作成してください。&lt;br /&gt;
&lt;br /&gt;
他にも {{ic|/var/abs}}, {{ic|/var/tmp}}, {{ic|/srv}} などのディレクトリのサブボリュームを作成してください。&lt;br /&gt;
&lt;br /&gt;
==== ESP のマウント ====&lt;br /&gt;
&lt;br /&gt;
EFI システムパーティションを準備済みなら、マウントポイントを作成してマウントしてください。&lt;br /&gt;
&lt;br /&gt;
{{Note|Btrfs のスナップショットは {{ic|/boot/efi}} を除外します (btrfs ファイルシステムではないため)。}}&lt;br /&gt;
&lt;br /&gt;
[[インストールガイド#ベースシステムのインストール|pacstrap]] でインストールを行うときに、{{Pkg|btrfs-progs}} もインストールする必要があります。&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio の設定 ===&lt;br /&gt;
&lt;br /&gt;
==== キーファイルの作成 ====&lt;br /&gt;
&lt;br /&gt;
GRUB で LUKS パーティションを解錠するために、initramfs にキーファイルを埋め込みます。[[Dm-crypt/デバイスの暗号化#キーファイルを initramfs に埋め込む]]に従って &#039;&#039;luksAddKey&#039;&#039; を実行する段階でキーを {{ic|/dev/sda&#039;&#039;X&#039;&#039;}} に追加してください。&lt;br /&gt;
&lt;br /&gt;
==== mkinitcpio.conf の編集 ====&lt;br /&gt;
&lt;br /&gt;
上記のようにキーファイルを作成して埋め込んだら、[[mkinitcpio|mkinitcpio.conf]] に {{ic|encrypt}} フックを追加してください。詳しくは [[Dm-crypt/システム設定#mkinitcpio]] を参照。設定後は initramfs を再生成する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|1=BINARIES=(/usr/bin/btrfs)}} を {{ic|mkinitcpio.conf}} に追加すると良いでしょう。詳しくは [[Btrfs#ファイルシステム破損のリカバリ]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
=== ブートローダーの設定 ===&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] を {{ic|/dev/sda}} にインストールします。そして [[GRUB#暗号化された /boot]]に書かれているように {{ic|/etc/default/grub}} を編集します (ルートパーティションと boot パーティションの両方の手順に従ってください)。最後に、GRUB の設定ファイルを生成します。&lt;br /&gt;
&lt;br /&gt;
=== スワップの設定 ===&lt;br /&gt;
&lt;br /&gt;
スワップを暗号化するためにパーティションを作成していた場合、ここで設定してください。[[Dm-crypt/スワップの暗号化]]の手順に従ってください。&lt;br /&gt;
&lt;br /&gt;
設定を完了したら、[[インストールガイド#再起動|インストールガイド]]にしたがって通常通りにシステムの設定を続行してください。&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Dm-crypt/%E7%89%B9%E8%A8%98%E4%BA%8B%E9%A0%85&amp;diff=38723</id>
		<title>Dm-crypt/特記事項</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Dm-crypt/%E7%89%B9%E8%A8%98%E4%BA%8B%E9%A0%85&amp;diff=38723"/>
		<updated>2024-08-26T12:16:55Z</updated>

		<summary type="html">&lt;p&gt;Hikali: ‎ 誤字の修正 s/開放/解放/ in /* ソリッドステートドライブ (SSD) の Discard/TRIM のサポート */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:保存データ暗号化]]&lt;br /&gt;
[[en:dm-crypt/Specialties]]&lt;br /&gt;
[[es:Dm-crypt (Español)/Specialties]]&lt;br /&gt;
[[pl:Dm-crypt (Polski)/Specialties]]&lt;br /&gt;
&lt;br /&gt;
== 暗号化されていない boot パーティションのセキュア化 ==&lt;br /&gt;
&lt;br /&gt;
たとえ[[Dm-crypt/システム全体の暗号化|ルートパーティションを暗号化]]したとしても、{{ic|/boot}} パーティションと [[Master Boot Record]] は暗号化できません。通常、これらの2つを暗号化するのは不可能です。[[ブートローダー]]や BIOS は dm-crypt コンテナの暗号化を解除することができないため、ブートプロセスを続行できません。ただし、[[GRUB]] には LUKS で暗号化した {{ic|/boot}} を復号する機能が存在します - [[dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)]] を見てください。&lt;br /&gt;
&lt;br /&gt;
このセクションでは、ブートプロセスをよりセキュアにするためにできることを説明しています。&lt;br /&gt;
&lt;br /&gt;
{{Warning|1={{ic|/boot}} パーティションと MBR をセキュア化することによりブートプロセス中に起こりうる数々の攻撃を緩和することはできますが、この方法で構成されたシステムは依然として BIOS/UEFI/ファームウェアの改ざん、ハードウェアキーロガー、コールドブート攻撃、そしてこの記事の範囲を超える他の多くの脅威に対しては脆弱である可能性があります。システムの信頼性の問題やディスク全体の暗号化に関連する問題の概要は、[https://www.youtube.com/watch?v=pKeiKYA03eE] を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Note|[[UEFI]] を使用している場合、暗号化しないでおく必要があるのは [[ESP]] のみです ([[ユニファイドカーネルイメージ]]を使用している場合など)。この場合、[[セキュアブート]]を使用することにより、ブートプロセスが改ざんされていないことを保証することができます。これは、以下の方法と同じ効果を得ることのできる簡単な方法です。[[dm-crypt/システム全体の暗号化#Simple encrypted root with TPM2 and Secure Boot]]{{Broken section link}} を参照してください。}}&lt;br /&gt;
&lt;br /&gt;
=== リムーバブルデバイスから起動 ===&lt;br /&gt;
&lt;br /&gt;
別のデバイスを使ってシステムを起動するのはとても簡単で、特定の種類の攻撃に対してセキュリティを高めることができます。[[Dm-crypt/システム全体の暗号化|ルートファイルシステムを暗号化]]したシステムで脆弱ポイントとなりえるのは以下の2つです:&lt;br /&gt;
&lt;br /&gt;
* [[Master Boot Record]]&lt;br /&gt;
* {{ic|/boot}} パーティション&lt;br /&gt;
&lt;br /&gt;
システムを起動するには上記をどちらも暗号化されていない状態で保存しなければなりません。これらを改竄から保護する方法として、USB ドライブなどのリムーバブルメディアに保存して、ハードディスクの代わりとしてドライブから起動すると良いでしょう。ドライブを肌身離さず持ち歩いていれば、これらのコンポーネントに改竄を加えられる恐れがなくなり、システムを解錠する認証機構をさらにセキュアにすることができます。&lt;br /&gt;
&lt;br /&gt;
ここでは、既にシステム設定を終えていて専用のパーティションを {{ic|/boot}} にマウントしていると仮定します。まだ設定していない場合は、[[dm-crypt/システム設定#カーネルパラメータ]] の手順に従ってください (この時、ハードディスクはリムーバブルメディアに置き換えて手順を進めてください)。&lt;br /&gt;
&lt;br /&gt;
{{Note|選んだメディア (USB ドライブ、外部ハードドライブ、SD カードなど) からのブートが、あなたのシステムでサポートされていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
リムーバブルドライブ ({{ic|/dev/sdx}}) を準備します:&lt;br /&gt;
&lt;br /&gt;
 # gdisk /dev/sdx # 必要に応じてフォーマットしてください。または、cgdisk、fdisk、cfdisk、gparted などを使ってください。&lt;br /&gt;
 # mkfs.ext2 /dev/sdx1 # BIOS システムの場合&lt;br /&gt;
 # mkfs.fat -F 32 /dev/sdx1 # UEFI システムの場合&lt;br /&gt;
 # mount /dev/sdx1 /mnt&lt;br /&gt;
&lt;br /&gt;
既存の {{ic|/boot}} の中身をリムーバブル上の新しい boot パーティションにコピーしてください:&lt;br /&gt;
&lt;br /&gt;
 # cp -ai /boot/* /mnt/&lt;br /&gt;
&lt;br /&gt;
新しいパーティションをマウントしてください。[[fstab]] を適宜更新するのを忘れないでください:&lt;br /&gt;
&lt;br /&gt;
 # umount /boot&lt;br /&gt;
 # umount /mnt&lt;br /&gt;
 # mount /dev/sdx1 /boot&lt;br /&gt;
 # genfstab -p -U / &amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
その後 [[GRUB]] を更新してください。{{ic|grub-mkconfig}} は自動的に新しいパーティションの UUID を認識するはずですが、カスタムメニューエントリは手動で更新する必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
 # grub-mkconfig -o /boot/grub/grub.cfg&lt;br /&gt;
 # grub-install /dev/sdx # ハードディスクではなく、リムーバブルデバイスにインストール。BIOS システムの場合。&lt;br /&gt;
 # grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=grub # UEFI システムの場合。&lt;br /&gt;
&lt;br /&gt;
再起動して新しい設定をテストしてください。忘れずに [[BIOS]] や [[UEFI]] でデバイスのブート順序を設定してください。システムが起動しない場合、ハードドライブから起動することで問題を修正することができます。&lt;br /&gt;
&lt;br /&gt;
=== chkboot ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|chkboot は {{ic|/boot}} パーティションの&#039;&#039;&#039;改ざんを検出可能&#039;&#039;&#039;にしますが、&#039;&#039;&#039;改ざんを防止&#039;&#039;&#039;するわけではありません。chkboot スクリプトを実行する時までに、すでにあなたはパスワードを、危殆化している可能性のあるブートローダ、カーネル、そして初期 RAM ディスクに入力しています。システムが chkboot の整合性テストに合格しない場合、あなたのデータの安全性に対していかなる保証もできません。}}&lt;br /&gt;
&lt;br /&gt;
ct-magazine (3/12 号、146 ページ、2012年1月16日、[https://www.heise.de/ct/inhalt/2012/03/6/]) の記事によると、以下のスクリプトは {{ic|/boot}} のファイルに対して SHA-1 ハッシュや inode、ハードドライブの占有ブロックが変化していないかチェックします。また [[Master Boot Record]] もチェックします。特定の種類の攻撃を防ぐことはできませんが、防御力を高めることができます。スクリプト自体の設定は暗号化されていない {{ic|/boot}} に保存されません。暗号化されたシステムのロックがかかっている/電源が落ちている状態であれば、見かけ上は起動時にパーティションの自動チェックサム比較が行われることはわからないため、攻撃するのが難しくなります。ただし、攻撃者にあらかじめ予期されていた場合、ファームウェアを操作してカーネルの上でコードを動かして、ファイルシステム (例: {{ic|boot}}) のアクセスを横取りされてしまう可能性はあります。一般的に、ファームウェアよりも下の階層では改竄されていないという保証は得られません。&lt;br /&gt;
&lt;br /&gt;
インストールスクリプトが[https://ftp.heise.de/pub/ct/listings/1203-146.zip 存在します] (作者: Juergen Schmidt, ju at heisec.de; ライセンス: GPLv2)。また、{{AUR|chkboot}} パッケージで[[インストール]]することもできます。&lt;br /&gt;
&lt;br /&gt;
インストールしたら、{{ic|chkboot.service}} を[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/local/bin/chkboot_user.sh}} はログイン後すぐに実行する必要があるので、このスクリプトを[[自動起動]]させる必要があります (例えば、KDE では &#039;&#039;System Settings -&amp;gt; Startup and Shutdown -&amp;gt; Autostart&#039;&#039;、GNOME では &#039;&#039;gnome-session-properties&#039;&#039;)。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、新しいカーネルなどによって {{ic|/boot}} に頻繁に変更が加えられます。なので、アップグレードするたびにスクリプトを実行させると良いでしょう。これを行う方法としては以下があります:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 #&lt;br /&gt;
 # 注: &#039;&#039;&amp;lt;user&amp;gt;&#039;&#039; にユーザ名を入力してください。このスクリプトを sudo で実行すると、pacman と chboot が自動的に動作します。&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;Pacman update [1] Quickcheck before updating&amp;quot; &amp;amp;&lt;br /&gt;
 sudo -u &#039;&#039;&amp;lt;user&amp;gt;&#039;&#039; /usr/local/bin/chkboot_user.sh&lt;br /&gt;
 /usr/local/bin/chkboot.sh&lt;br /&gt;
 sudo -u &#039;&#039;&amp;lt;user&amp;gt;&#039;&#039; /usr/local/bin/chkboot_user.sh&lt;br /&gt;
 echo &amp;quot;Pacman update [2] Syncing repos for pacman&amp;quot;&lt;br /&gt;
 pacman -Syu&lt;br /&gt;
 /usr/local/bin/chkboot.sh&lt;br /&gt;
 sudo -u &#039;&#039;&amp;lt;user&amp;gt;&#039;&#039; /usr/local/bin/chkboot_user.sh&lt;br /&gt;
 echo &amp;quot;Pacman update [3] All done, let us roll on ...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== mkinitcpio-chkcryptoboot ===&lt;br /&gt;
&lt;br /&gt;
{{Warning|このフックは [[GRUB]] のコア (MBR) コードや EFI スタブは暗号化&#039;&#039;&#039;しません&#039;&#039;&#039;。攻撃者がブートローダーの設定を変更してカーネルや initramfs を実行時に改竄できる状態からは保護されません。}}&lt;br /&gt;
&lt;br /&gt;
{{aur|mkinitcpio-chkcryptoboot}} は、初期ユーザー空間で整合性チェックを行ってシステムのセキュリティが破られている場合に root パーティションのパスワードを入力しないようにユーザーに忠告する [[mkinitcpio]] フックです。[[Dm-crypt/システム全体の暗号化#boot パーティションの暗号化 (GRUB)|ブートパーティションを暗号化]]することでセキュリティを確保し、[[GRUB# 暗号化された /boot|GRUB]] の {{ic|cryptodisk.mod}} モジュールでロックを解除します。root ファイルシステムのパーティションは別のパスワードを使って暗号化します。これなら、オフラインの改竄からも [[initramfs]] や[[カーネル]]を守ることができ、たとえマシンに侵入されて {{ic|/boot}} パーティションのパスワードが入力されても root パーティションは安全です (chkcryptoboot フックが改竄を検出して、フック自体が改竄されていない場合)。&lt;br /&gt;
&lt;br /&gt;
このフックが機能するには {{Pkg|grub}} バージョン &amp;gt;= 2.00 が必要で、さらに、セキュアに保つために LUKS で暗号化された専用の {{ic|/boot}} パーティションに独自のパスワードが設定されている必要があります。&lt;br /&gt;
&lt;br /&gt;
==== インストール ====&lt;br /&gt;
&lt;br /&gt;
{{aur|mkinitcpio-chkcryptoboot}} を[[インストール]]し、{{ic|/etc/default/chkcryptoboot.conf}} を編集してください。ブートパーティションがバイパスされたかどうかを検出したい場合は、{{ic|CMDLINE_NAME}} 変数と {{ic|CMDLINE_VALUE}} 変数を編集して、それぞれにあなただけが知っている値を入れてください。パッケージのインストール後に表示されるアドバイスの通りに、2つのハッシュ値を使うことができます。また、{{ic|/etc/default/grub}} で[[カーネルコマンドライン]]を適切に変更することも忘れないでください。{{ic|/etc/mkinitcpio.conf}} 内の {{ic|1=HOOKS=}} 行を編集して {{ic|chkcryptoboot}} フックを {{ic|encrypt}} &#039;&#039;&#039;より前に&#039;&#039;&#039;加えてください。終わったら、[[initramfs を再生成する|initramfs を再生成]]してください。&lt;br /&gt;
&lt;br /&gt;
==== 技術的な概要 ====&lt;br /&gt;
&lt;br /&gt;
{{aur|mkinitcpio-chkcryptoboot}} には mkinitcpio のインストールフックとランタイムフックが含まれています。インストールフックは、initramfs が再ビルドされるたびに実行され、[[UEFI]] システムでは GRUB の [[EFI]] スタブ ({{ic|$esp/EFI/grub_uefi/grubx64.efi}}) のハッシュ値を計算し、BIOS システムでは GRUB が格納されているディスクの先頭 446 バイトのハッシュ値を計算します。そして、暗号化されている {{ic|/boot}} パーティション内にある initramfs 内部にそのハッシュ値を保存します。システムがブートされると、GRUB は {{ic|/boot}} パスワードを要求します。この時、ランタイムフックは、ルートパーティションのパスワードプロンプトが表示される前に同じハッシュ計算を行い、その結果を比較します。これらのハッシュ値が一致しない場合、ランタイムフックは以下のようなエラーを表示します:&lt;br /&gt;
&lt;br /&gt;
 CHKCRYPTOBOOT ALERT!&lt;br /&gt;
 CHANGES HAVE BEEN DETECTED IN YOUR BOOT LOADER EFISTUB!&lt;br /&gt;
 YOU ARE STRONGLY ADVISED NOT TO ENTER YOUR ROOT CONTAINER PASSWORD!&lt;br /&gt;
 Please type uppercase yes to continue:&lt;br /&gt;
&lt;br /&gt;
ブートローダのハッシュ計算に加えて、ランタイムフックは実行中のカーネルのパラメータを {{ic|/etc/default/chkcryptoboot.conf}} 内で設定されているものと比較します。これは、実行中とブートプロセスの終了後の両方でチェックされます。これにより、フックは、GRUB の設定が実行中にバイパスされていないかどうか確認し、その後、{{ic|/boot}} パーティション全体がバイパスされていないことを確認できます。&lt;br /&gt;
&lt;br /&gt;
BIOS システムにおいては、フックは GRUB の第1ステージのブートローダ (ブートデバイスの先頭 446 バイトにインストールされています) のハッシュ値を計算し、後のブートプロセスで値を比較します。メインの第2ステージの GRUB ブートローダである {{ic|core.img}} はチェックされません。&lt;br /&gt;
&lt;br /&gt;
=== AIDE ===&lt;br /&gt;
&lt;br /&gt;
上記のスクリプトの代替として、[[AIDE]] によりハッシュチェックをセットアップできます。AIDE は非常に柔軟な設定ファイルによってカスタマイズできます。&lt;br /&gt;
&lt;br /&gt;
=== STARK ===&lt;br /&gt;
&lt;br /&gt;
これらの方法はほとんどのユーザの目的を達成できるはずですが、暗号化されていない {{ic|/boot}} に関連する全てのセキュリティ問題に対処できるわけではありません。完全に認証されたブート連鎖を提供しようと試みるアプローチが、[https://www1.informatik.uni-erlangen.de/stark STARK] 認証フレームワークを実装する学術論文として POTTS で公開されました。&lt;br /&gt;
&lt;br /&gt;
概念実証の POTTS は Arch Linux をベースのディストリビューションとして使用しており、以下によってシステムのブート連鎖を実装しています:&lt;br /&gt;
&lt;br /&gt;
* POTTS - ワンタイム認証のメッセージプロンプトのためのブートメニュー。&lt;br /&gt;
* TrustedGrub - [[Trusted Platform Module|TPM チップ]]の PCR レジスタを使ってカーネルと initramfs を認証する [[GRUB Legacy]] 実装。&lt;br /&gt;
* TRESOR - AES を実装しているが、実行中にマスターキーを RAM 内ではなく CPU レジスタ内に保存するカーネルパッチ。&lt;br /&gt;
&lt;br /&gt;
論文の一部として、Arch Linux (2013年01月の時点の ISO) をベースにした[https://13.tc/p/potts/manual.html インストール]手順が公開されました。これを試したい場合、使われているツールが標準リポジトリ内に存在せず、この方法は維持に時間がかかることに注意してください。&lt;br /&gt;
&lt;br /&gt;
== GPG や LUKS、OpenSSL の暗号化キーファイルを使う ==&lt;br /&gt;
&lt;br /&gt;
以下のフォーラム投稿では、この wiki ページの前の部分で説明したように平文のキーファイルを使うのではなく、2要素認証 や gpg、openssl の暗号化キーファイルを使うための手順が示されています ([https://bbs.archlinux.org/viewtopic.php?id=120243 System Encryption using LUKS with GPG encrypted keys]):&lt;br /&gt;
&lt;br /&gt;
* GnuPG: [https://bbs.archlinux.org/viewtopic.php?pid=943338#p943338 GPG 暗号化キーに関する投稿]。この投稿では一般的な手順が書かれてあります。&lt;br /&gt;
* OpenSSL: [https://bbs.archlinux.org/viewtopic.php?pid=947805#p947805 OpenSSL 暗号化キーに関する投稿]。この投稿では {{ic|ssldec}} フックが書かれてあるのみです。&lt;br /&gt;
* OpenSSL: [https://bbs.archlinux.org/viewtopic.php?id=155393 OpenSSL のソルトが付与された bf-cbc 暗号化キーに関する投稿]。この投稿では {{ic|bfkf}} initcpio フック、インストールスクリプト、暗号化されたキーファイルの生成スクリプトが書かれてあります。&lt;br /&gt;
* LUKS: {{ic|lukskey}} initcpio フックと [https://bbs.archlinux.org/viewtopic.php?pid=1502651#p1502651 LUKS 暗号化キーに関する投稿]。あるいは、initcpio のカスタムの encrypt フックが書かれた以下の [[#/boot を暗号化し、デタッチされた LUKS ヘッダを USB 上に保存する]] を見てください。&lt;br /&gt;
&lt;br /&gt;
注意点:&lt;br /&gt;
&lt;br /&gt;
* 上記の手順に従う際に必要なのは 2 つの主要なパーティションだけです。1つはブートパーティション (暗号化のために必要) で、もう一つはプライマリ LVM パーティションです。この LVM パーティション内には好きなだけパーティションを作成できますが、最も重要なのは、少なくともルート、スワップ、ホームの論理ボリュームパーティションはこのパーティション内に作成する必要があるということです。これには、すべてのパーティションを1つのキーファイルだけで復号でき、さらに、暗号化されたスワップパーティションへハイバネートできるという利点があります。これを行う場合、{{ic|/etc/mkinitcpio.conf}} でのフック配列は次のようになります: {{bc|1=HOOKS=( ... usb usbinput (etwo または ssldec) encrypt (&amp;lt;- openssl を使用する場合) lvm2 resume ... )}} そして、次を[[カーネルパラメータ]]に追加する必要があります: {{bc|1=resume=/dev/&amp;lt;VolumeGroupName&amp;gt;/&amp;lt;LVNameOfSwap&amp;gt;}}&lt;br /&gt;
* 暗号化されていないキーファイルを一時的にどこかに保存する必要がある場合、暗号化されていないディスク上には保存しないでください。{{ic|/dev/shm}} などの RAM 上に保存するとなお良いです。&lt;br /&gt;
* GPG で暗号化されたキーファイルを使用したい場合、静的にコンパイルされた GnuPG バージョン 1.4 を使用する必要があります。これを使用しない場合、フックの配列を編集して {{AUR|gnupg1}} を使用する必要があります。&lt;br /&gt;
* OpenSSL のアップデートにより、上記の2番目のフォーラムの投稿で言及されているカスタムの {{ic|ssldec}} が壊れる可能性があります。&lt;br /&gt;
&lt;br /&gt;
==root などのパーティションのリモート解除==&lt;br /&gt;
LUKS によって完全に暗号化されたシステムをリモートで再起動したい場合、もしくは [[Wake-on-LAN]] サービスを使ってシステムを起動したい場合、起動時にルートパーティション/ボリュームのパスフレーズを入力する手段が必要になります。ネットワークインターフェイスを設定する [[mkinitcpio]] のフックを実行することでこれを実現可能です。以下のパッケージには様々な [[Mkinitcpio#ビルドフック|mkinitcpio ビルドフック]]が含まれており設定を楽にしてくれます。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* ネットワークインターフェイスはカーネルによるデバイス名を使用してください (例: {{ic|eth0}})。[[udev]] によるデバイス名 (例: {{ic|enp1s0}}) を使用してはいけません。&lt;br /&gt;
* [[ネットワーク設定#デバイスドライバ|使用しているネットワークカードのモジュール]]を [[Mkinitcpio#MODULES|MODULES]] 行に追加する必要が場合があります。}}&lt;br /&gt;
&lt;br /&gt;
===リモートのロック解除 (フック: systemd, systemd-tool)===&lt;br /&gt;
&lt;br /&gt;
AUR パッケージの {{Pkg|mkinitcpio-systemd-tool}} には &#039;&#039;systemd-tool&#039;&#039; という名前の {{Pkg|systemd}} 中心の mkinitcpio フックが含まれており、initramfs の systemd で以下の機能を使うことができるようになります:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
| width=50% style=&amp;quot;padding:10px;&amp;quot; |&lt;br /&gt;
フックによって実現されるコア機能:&lt;br /&gt;
* systemd + mkinitcpio の統合設定&lt;br /&gt;
* バイナリと設定リソースの自動プロビジョニング&lt;br /&gt;
* オンデマンドの mkinitcpio スクリプトとインライン関数の実行&lt;br /&gt;
| width=50% style=&amp;quot;padding:10px;&amp;quot; |&lt;br /&gt;
同梱されているサービスユニットによって実現される機能:&lt;br /&gt;
* initrd のデバッグ&lt;br /&gt;
* 初期ユーザー空間でのネットワークの設定&lt;br /&gt;
* インタラクティブなユーザーシェル&lt;br /&gt;
* initrd におけるリモート ssh アクセス&lt;br /&gt;
* cryptsetup + カスタムパスワードエージェント&lt;br /&gt;
|}&lt;br /&gt;
{{Pkg|mkinitcpio-systemd-tool}} パッケージは [[Mkinitcpio#通常のフック|systemd フック]]を必要とします。詳しい情報はプロジェクトの [https://github.com/random-archer/mkinitcpio-systemd-tool/blob/master/README.md README] やデフォルトの [https://github.com/random-archer/mkinitcpio-systemd-tool systemd サービスユニットファイル] を見てください。&lt;br /&gt;
&lt;br /&gt;
推奨されるフックは次の通りです: {{ic|base autodetect modconf block filesystems keyboard fsck systemd systemd-tool}}。&lt;br /&gt;
&lt;br /&gt;
===リモートのロック解除 (フック: netconf, dropbear, tinyssh, ppp)===&lt;br /&gt;
&lt;br /&gt;
initcpio のリモートログインを実現するパッケージの別の組み合わせとして {{Pkg|mkinitcpio-netconf}} あるいは {{AUR|mkinitcpio-ppp}} (インターネット経由で [[Wikipedia:Point-to-Point Protocol|PPP]] 接続を使ってリモートでロックを解除) と [[SSH]] サーバーを使用する方法があります。SSH サーバーは {{Pkg|mkinitcpio-dropbear}} または {{Pkg|mkinitcpio-tinyssh}} のどちらを使用するか選択できます。これらのフックはシェルをインストールしないため、{{Pkg|mkinitcpio-utils}} パッケージも[[インストール]]する必要があります。以下の手順は上記のパッケージと組み合わせて使うことができます。パスが異なる場合、注意してください。&lt;br /&gt;
&lt;br /&gt;
# SSH のキーペアが存在しない場合、クライアント環境で[[SSH 鍵#SSH 鍵のペアを生成|ペアを生成]]してください (リモート環境のロックを解除するのに使用します)。{{Pkg|mkinitcpio-tinyssh}} を使用する場合、[[SSH_鍵#暗号化のタイプを選択|Ed25519 鍵]]を使用することができます。&lt;br /&gt;
# SSH 公開鍵 (パスワードを使わなくても ssh で接続できるように使用している公開鍵、または、今さっき作成した拡張子が &#039;&#039;.pub&#039;&#039; のファイル) をリモートマシンの {{ic|/etc/dropbear/root_key}} または {{ic|/etc/tinyssh/root_key}} ファイルにコピーしてください。 {{Tip|必要であれば他の SSH 公開鍵を後で追加することもできます。リモートの {{ic|~/.ssh/authorized_keys}} の中身をコピーする場合、リモートマシンのロックを解除するのに使用する鍵だけが含まれていることを確認してください。鍵を追加したら、{{ic|mkinitcpio}} で initrd も再生成する必要があります。[[Secure Shell#SSH の保護]]も参照してください。}}&lt;br /&gt;
# {{ic|/etc/mkinitcpio.conf}} の &amp;quot;HOOKS&amp;quot; 行の {{ic|filesystems}} の前に {{ic|&amp;lt;netconf and/or ppp&amp;gt; &amp;lt;dropbear or tinyssh&amp;gt; encryptssh}} [[Mkinitcpio#HOOKS|フック]]を追加してください ({{ic|encryptssh}} で {{ic|encrypt}} フックを置き換えます)。それから [[Mkinitcpio#イメージ作成とアクティベーション|initramfs イメージを再生成]]してください。 {{Note|{{Pkg|mkinitcpio-nfs-utils}} に含まれている {{ic|net}} フックは必要ありません。}}&lt;br /&gt;
# ブートローダーの設定に {{ic|1=cryptdevice=}} [[dm-crypt/システム設定#ブートローダー|パラメータ]]を設定して適切な引数を付けた {{ic|1=ip=}} [[カーネルパラメータ|カーネルコマンドパラメータ]]を追加してください。例えば、DHCP サーバーからリモート環境に固定 IP が割り当てられない場合、再起動してから SSH でアクセスするのが難しいため、以下のように使用したい IP を明示的に指定できます:{{bc|&amp;lt;nowiki&amp;gt;ip=192.168.1.1:::::eth0:none&amp;lt;/nowiki&amp;gt;}}{{Note|{{Pkg|mkinitcpio-netconf}} のバージョン 0.0.4 現在、複数の {{ic|ip&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;}} パラメータをネストすることで複数のインターフェイスを設定できます。{{ic|ip&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;dhcp}} ({{ic|ip&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;:::::eth0:dhcp}}) と混ぜることはできません。インターフェイスを指定する必要があります。}}{{bc|&amp;lt;nowiki&amp;gt;ip=ip=192.168.1.1:::::eth0:none:ip=172.16.1.1:::::eth1:none&amp;lt;/nowiki&amp;gt;}}詳しい説明は [[Mkinitcpio#net を使う|mkinitcpio のセクション]]を読んでください。設定が完了したら、[[ブートローダー]]の設定を更新してください。&lt;br /&gt;
# Finally, restart the remote system and try to [[Secure_Shell#サーバーに接続する|ssh to it]], &#039;&#039;&#039;explicitly stating the &amp;quot;root&amp;quot; username&#039;&#039;&#039; (even if the root account is disabled on the machine, this root user is used only in the initrd for the purpose of unlocking the remote system). If you are using the {{Pkg|mkinitcpio-dropbear}} package and you also have the {{Pkg|openssh}} package installed, then you most probably will not get any warnings before logging in, because it convert and use the same host keys openssh uses. (Except Ed25519 keys, dropbear does not support them). In case you are using {{Pkg|mkinitcpio-tinyssh}}, you have the option of installing {{Pkg|tinyssh-convert}} or {{AUR|tinyssh-convert-git}} so you can use the same keys as your {{Pkg|openssh}} installation (currently only Ed25519 keys). In either case, you should have run [[Secure_Shell#sshd デーモンの管理|the ssh daemon]] at least once, using the provided systemd units, so the keys can be generated first. After rebooting the machine, you should be prompted for the passphrase to unlock the root device. Afterwards, the system will complete its boot process and you can ssh to it [[Secure_Shell#サーバーに接続する|as you normally would]] (with the remote user of your choice).&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=If you would simply like a nice solution to mount other encrypted partitions (such as {{ic|/home}}) remotely, you may want to look at [https://bbs.archlinux.org/viewtopic.php?pid=880484 this forum thread].}}&lt;br /&gt;
&lt;br /&gt;
=== wifi でリモートのロック解除 (フック: 自分で作成) ===&lt;br /&gt;
The net hook is normally used with an ethernet connection. In case you want to setup a computer with wireless only, and unlock it via wifi, you can create a custom hook to connect to a wifi network before the net hook is run.&lt;br /&gt;
&lt;br /&gt;
Below example shows a setup using a usb wifi adapter, connecting to a wifi network protected with WPA2-PSK. In case you use for example WEP or another boot loader, you might need to change some things.&lt;br /&gt;
&lt;br /&gt;
# Modify {{ic|/etc/mkinitcpio.conf}}:&lt;br /&gt;
#* Add the needed kernel module for your specific wifi adatper.&lt;br /&gt;
#* Include the {{ic|wpa_passphrase}} and {{ic|wpa_supplicant}} binaries.&lt;br /&gt;
#* Add a hook {{ic|wifi}} (or a name of your choice, this is the custom hook that will be created) before the {{ic|net}} hook.{{bc|1=MODULES=&amp;quot;&#039;&#039;module&#039;&#039;&amp;quot;&amp;lt;br&amp;gt;BINARIES=&amp;quot;wpa_passphrase wpa_supplicant&amp;quot;&amp;lt;br&amp;gt;HOOKS=&amp;quot;base udev autodetect ... &#039;&#039;&#039;wifi&#039;&#039;&#039; net ... dropbear encryptssh ...&amp;quot;}}&lt;br /&gt;
# Create the {{ic|wifi}} hook in {{ic|/etc/initcpio/hooks/wifi}}:{{bc|run_hook ()&amp;lt;br&amp;gt;{&amp;lt;br&amp;gt;&amp;amp;#09;# sleep a couple of seconds so wlan0 is setup by kernel&amp;lt;br&amp;gt;&amp;amp;#09;sleep 5&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;amp;#09;# set wlan0 to up&amp;lt;br&amp;gt;&amp;amp;#09;ip link set wlan0 up&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;amp;#09;# assocciate with wifi network&amp;lt;br&amp;gt;&amp;amp;#09;# 1. save temp config file&amp;lt;br&amp;gt;&amp;amp;#09;wpa_passphrase &amp;quot;&#039;&#039;network ESSID&#039;&#039;&amp;quot; &amp;quot;&#039;&#039;pass phrase&#039;&#039;&amp;quot; &amp;gt; /tmp/wifi&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;amp;#09;# 2. assocciate&amp;lt;br&amp;gt;&amp;amp;#09;wpa_supplicant -B -D nl80211,wext -i wlan0 -c /tmp/wifi&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;amp;#09;# sleep a couple of seconds so that wpa_supplicant finishes connecting&amp;lt;br&amp;gt;&amp;amp;#09;sleep 5&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;amp;#09;# wlan0 should now be connected and ready to be assigned an ip by the net hook&amp;lt;br&amp;gt;}&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;run_cleanuphook ()&amp;lt;br&amp;gt;{&amp;lt;br&amp;gt;&amp;amp;#09;# kill wpa_supplicant running in the background&amp;lt;br&amp;gt;&amp;amp;#09;killall wpa_supplicant&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;amp;#09;# set wlan0 link down&amp;lt;br&amp;gt;&amp;amp;#09;ip link set wlan0 down&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;amp;#09;# wlan0 should now be fully disconnected from the wifi network&amp;lt;br&amp;gt;}|}}&lt;br /&gt;
# Create the hook installation file in {{ic|/etc/initcpio/install/wifi}}:{{bc|build ()&amp;lt;br&amp;gt;{&amp;lt;br&amp;gt;&amp;amp;#09;add_runscript&amp;lt;br&amp;gt;}&amp;lt;br&amp;gt;help ()&amp;lt;br&amp;gt;{&amp;lt;br&amp;gt;cat&amp;lt;&amp;lt;HELPEOF&amp;lt;br&amp;gt;&amp;amp;#09;Enables wifi on boot, for dropbear ssh unlocking of disk.&amp;lt;br&amp;gt;HELPEOF&amp;lt;br&amp;gt;}|}}&lt;br /&gt;
# {{ic|1=ip=:::::wlan0:dhcp}} を[[カーネルパラメータ]]に追加。衝突しないように {{ic|1=ip=:::::eth0:dhcp}} は削除してください。&lt;br /&gt;
# Optionally create an additional boot entry with kernel parameter {{ic|1=ip=:::::eth0:dhcp}}.&lt;br /&gt;
# [[Mkinitcpio#イメージ作成とアクティベーション|initramfs イメージを再生成]]。&lt;br /&gt;
# [[ブートローダー]]の設定を更新。例えば [[GRUB#メイン設定ファイルの生成|GRUB]] の場合:{{bc|# grub-mkconfig -o /boot/grub/grub.cfg}}&lt;br /&gt;
Remember to setup [[WiFi]], so you are able to login once the system is fully booted. In case you are unable to connect to the wifi network, try increasing the sleep times a bit.&lt;br /&gt;
&lt;br /&gt;
== 一度きりのパスワード無しの再起動 ==&lt;br /&gt;
&lt;br /&gt;
ターミナルに暗号化済みルートドライブのパスワードを入力する必要なしにリモートのヘッドレスあるいはアクセス不能なシステムを再起動するためのもう一つの方法は、一時的な[[dm-crypt/システム設定#キーファイルでロックを解除する|キーファイル]]を使用することです。キーファイルはブート時にカーネルからアクセス可能な場所に配置する必要があり、[[dm-crypt/システム設定#cryptkey|cryptkey]] のブートパラメータを追加する必要があり、そして、そのキーファイルを &amp;quot;cryptsetup luksAddKey&amp;quot; コマンドを使って有効なキーとして登録する必要があります。&lt;br /&gt;
&lt;br /&gt;
この作業は {{AUR|passless-boot}} を使えば簡単に行うことができます。[https://gitlab.com/Marcool04/passless-boot このツールの readme ファイル]で説明されているこのツールのセットアップ手順は、自身でセットアップする際のテンプレートとしても使えるかもしれません。[https://gitlab.com/Marcool04/passless-boot#security-considerations-and-threat-model Security considerations] の章での議論を参照してください。&lt;br /&gt;
&lt;br /&gt;
==ソリッドステートドライブ (SSD) の Discard/TRIM のサポート==&lt;br /&gt;
[[ソリッドステートドライブ]]を使用している場合、device-mapper はデフォルトでは TRIM コマンドを有効にしないので注意してください。デフォルト設定を上書きしないかぎりブロックデバイスは {{ic|discard}} オプションが無効な状態でマウントされます。&lt;br /&gt;
&lt;br /&gt;
セキュリティ上の問題があるため dm-crypt デバイスで TRIM のサポートがデフォルトで有効になることは永遠にないと device-mapper のメンテナは説明しています [http://www.saout.de/pipermail/dm-crypt/2011-September/002019.html][http://www.saout.de/pipermail/dm-crypt/2012-April/002420.html]。TRIM を有効にすると解放されたブロック情報という形でデータが漏洩する可能性が僅かにあり、そこから使用しているファイルシステムが判別される恐れがあります。TRIM を有効にすることによる問題の議論と説明は &#039;&#039;cryptsetup&#039;&#039; の開発者による [http://asalor.blogspot.de/2011/08/trim-dm-crypt-problems.html ブログ記事] で読むことができます。デバイスが昔 (cryptsetup &amp;lt;1.6.0) のデフォルト暗号である {{ic|--cipher aes-cbc-essiv}} で暗号化されている場合、最新の[[Dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプション|デフォルト設定]]を使用している場合よりも TRIM されたセクタから多くの情報が漏洩する危険があります。&lt;br /&gt;
&lt;br /&gt;
以下のケースに分かれます:&lt;br /&gt;
&lt;br /&gt;
* デバイスをデフォルトの dm-crypt LUKS モードで暗号化している場合:&lt;br /&gt;
** By default the LUKS header is stored at the beginning of the device and using TRIM is useful to protect header modifications. If for example a compromised LUKS password is revoked, without TRIM the old header will in general still be available for reading until overwritten by another operation; if the drive is stolen in the meanwhile, the attackers could in theory find a way to locate the old header and use it to decrypt the content with the compromised password. See [https://gitlab.com/cryptsetup/cryptsetup/wikis/FrequentlyAskedQuestions#5-security-aspects cryptsetup FAQ, section 5.19 What about SSDs, Flash and Hybrid Drives?] and [https://www.reddit.com/r/archlinux/comments/2f370s/full_disk_encryption_on_an_ssd/ck5p5c5 Full disk encryption on an ssd]. &lt;br /&gt;
** TRIM can be left disabled if the security issues stated at the top of this section are considered a worse threat than the above bullet.&lt;br /&gt;
: [[ディスクの完全消去#フラッシュメモリ]]も参照してください。&lt;br /&gt;
* デバイスを dm-crypt の plain モードで暗号化している、または LUKS ヘッダーを[[#リモート LUKS ヘッダーを使ってシステムを暗号化|別個に]]保存している場合:&lt;br /&gt;
** 妥当な否認権が必要な場合、TRIM を使用してはいけません。上記のとおり暗号化していることが分かってしまうからです。&lt;br /&gt;
** 妥当な否認権が必要ない場合、上記で説明しているセキュリティ上の懸案を気にしないのであれば TRIM を使用してパフォーマンスを向上できます。&lt;br /&gt;
&lt;br /&gt;
{{Warning|ドライブの TRIM を有効にする前に、デバイスが TRIM コマンドを完全にサポートしていることを確認してください。TRIM がサポートされていない場合、データが消失する危険があります。[[ソリッドステートドライブ#TRIM]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
In {{Pkg|linux}} 3.1 and up, support for dm-crypt TRIM pass-through can be toggled upon device creation or mount with dmsetup. Support for this option also exists in {{Pkg|cryptsetup}} version 1.4.0 and up. To add support during boot, you will need to add {{ic|:allow-discards}} to the {{ic|cryptdevice}} option. The TRIM option may look like this:&lt;br /&gt;
 cryptdevice=/dev/sdaX:root:allow-discards&lt;br /&gt;
&lt;br /&gt;
メインの {{ic|cryptdevice}} 設定オプションは {{ic|:allow-discards}} よりも先に来ます。[[Dm-crypt/システム設定]]を見てください。&lt;br /&gt;
&lt;br /&gt;
If you are using a systemd based initrd, you must pass:&lt;br /&gt;
 rd.luks.options=discard&lt;br /&gt;
&lt;br /&gt;
Besides the kernel option, it is also required to periodically run {{ic|fstrim}} or mount the filesystem (e.g. {{ic|/dev/mapper/root}} in this example) with the {{ic|discard}} option in {{ic|/etc/fstab}}. For details, please refer to the [[TRIM]] page.&lt;br /&gt;
&lt;br /&gt;
For LUKS devices unlocked manually on the console or via {{ic|/etc/crypttab}} either {{ic|discard}} or {{ic|allow-discards}} may be used.&lt;br /&gt;
&lt;br /&gt;
== encrypt フックと複数のディスク == &lt;br /&gt;
&lt;br /&gt;
The {{ic|encrypt}} hook only allows for a &#039;&#039;&#039;single&#039;&#039;&#039; {{ic|cryptdevice&amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt;}} entry ({{Bug|23182}}). In system setups with multiple drives this may be limiting, because &#039;&#039;dm-crypt&#039;&#039; has no feature to exceed the physical device. For example, take &amp;quot;LVM on LUKS&amp;quot;:  The entire LVM exists inside a LUKS mapper.  This is perfectly fine for a single-drive system, since there is only one device to decrypt. But what happens when you want to increase the size of the LVM? You cannot, at least not without modifying the {{ic|encrypt}} hook. &lt;br /&gt;
&lt;br /&gt;
The following sections briefly show alternatives to overcome the limitation. The first deals with how to expand a [[Dm-crypt/システム全体の暗号化#LUKS_on_LVM|LUKS on LVM]] setup to a new disk. The second with modifying the {{ic|encrypt}} hook to unlock multiple disks in LUKS setups without LVM. The third section then again uses LVM, but modifies the {{ic|encrypt}} hook to unlock the encrypted LVM with a remote LUKS header. &lt;br /&gt;
&lt;br /&gt;
=== LVM を複数のディスクに拡張 ===&lt;br /&gt;
The management of multiple disks is a basic [[LVM]] feature and a major reason for its partitioning flexibility. It can also be used with &#039;&#039;dm-crypt&#039;&#039;, but only if LVM is employed as the first mapper. In such a [[Dm-crypt/システム全体の暗号化#LUKS_on_LVM|LUKS on LVM]] setup the encrypted devices are created inside the logical volumes (with a separate passphrase/key per volume). The following covers the steps to expand that setup to another disk. &lt;br /&gt;
&lt;br /&gt;
{{Warning|Backup! While resizing filesystems may be standard, keep in mind that operations &#039;&#039;&#039;may&#039;&#039;&#039; go wrong and the following might not apply to a particular setup. Generally, extending a filesystem to free disk space is less problematic than shrinking one. This in particular applies when stacked mappers are used, as it is the case in the following example.}}&lt;br /&gt;
 &lt;br /&gt;
==== 新しいドライブの追加 ====&lt;br /&gt;
まず、[[Dm-crypt/ドライブの準備]]に従って新しいディスクを準備すると良いでしょう。そして LVM としてパーティショニングします (例: 全ての領域を {{ic|/dev/sdY1}} に割り当ててパーティションタイプを &amp;quot;8E00&amp;quot; (Linux LVM) に設定)。その後、新しいディスク・パーティションを既存の LVM ボリュームグループに追加します:&lt;br /&gt;
 # pvcreate /dev/sdY1&lt;br /&gt;
 # vgextend MyStorage /dev/sdY1&lt;br /&gt;
&lt;br /&gt;
==== 論理ボリュームの拡張 ====&lt;br /&gt;
&lt;br /&gt;
For the next step, the final allocation of the new diskspace, the logical volume to be extended has to be unmounted. It can be performed for the {{ic|cryptdevice}} root partition, but in this case the procedure has to be performed from an Arch Install ISO. &lt;br /&gt;
&lt;br /&gt;
In this example, it is assumed that the logical volume for {{ic|/home}} (lv-name {{ic|homevol}}) is going to be expanded with the fresh disk space: &lt;br /&gt;
 # umount /home&lt;br /&gt;
 # fsck /dev/mapper/home&lt;br /&gt;
 # cryptsetup luksClose /dev/mapper/home&lt;br /&gt;
 # lvextend -l +100%FREE MyStorage/homevol&lt;br /&gt;
&lt;br /&gt;
Now the logical volume is extended and the LUKS container comes next: &lt;br /&gt;
 # cryptsetup open --type luks /dev/mapper/MyStorage-homevol home&lt;br /&gt;
 # umount /home      # as a safety, in case it was automatically remounted&lt;br /&gt;
 # cryptsetup --verbose resize home&lt;br /&gt;
&lt;br /&gt;
最後に、ファイルシステムのサイズを変更:&lt;br /&gt;
 # e2fsck -f /dev/mapper/home&lt;br /&gt;
 # resize2fs /dev/mapper/home&lt;br /&gt;
&lt;br /&gt;
Done! If it went to plan, {{ic|/home}} can be remounted &lt;br /&gt;
 # mount /dev/mapper/home /home&lt;br /&gt;
&lt;br /&gt;
and now includes the span to the new disk. Note that the {{ic|cryptsetup resize}} action does not affect encryption keys, they have not changed.&lt;br /&gt;
&lt;br /&gt;
=== 複数のパーティションの encrypt フックを修正 ===&lt;br /&gt;
==== 複数のパーティションにまたがる root ファイルシステム ====&lt;br /&gt;
起動時に複数のハードドライブからルートファイルシステム ({{ic|/}}) を復号化するように encrypt フックを修正することが可能です:&lt;br /&gt;
&lt;br /&gt;
 # cp /usr/lib/initcpio/install/encrypt /etc/initcpio/install/encrypt2&lt;br /&gt;
 # cp /usr/lib/initcpio/hooks/encrypt  /etc/initcpio/hooks/encrypt2&lt;br /&gt;
 # sed -i &amp;quot;s/cryptdevice/cryptdevice2/&amp;quot; /etc/initcpio/hooks/encrypt2&lt;br /&gt;
 # sed -i &amp;quot;s/cryptkey/cryptkey2/&amp;quot; /etc/initcpio/hooks/encrypt2&lt;br /&gt;
&lt;br /&gt;
ブートオプションに {{ic|1=cryptdevice2=}} を (必要であれば {{ic|1=cryptkey2=}} も) 追加して、[[mkinitcpio.conf]] に {{ic|encrypt2}} フックを追加してからリビルドしてください。[[Dm-crypt/システム設定]]も参照。&lt;br /&gt;
&lt;br /&gt;
==== 複数の root 以外のパーティション ====&lt;br /&gt;
Maybe you have a requirement for using the {{ic|encrypt}} hook on a non-root partition. Arch does not support this out of the box, however, you can easily change the cryptdev and cryptname values in {{ic|/lib/initcpio/hooks/encrypt}} (the first one to your {{ic|/dev/sd*}} partition, the second to the name you want to attribute). That should be enough.&lt;br /&gt;
&lt;br /&gt;
The big advantage is you can have everything automated, while setting up {{ic|/etc/crypttab}} with an external key file (i.e. the keyfile is not on any internal hard drive partition) can be a pain - you need to make sure the USB/FireWire/... device gets mounted before the encrypted partition, which means you have to change the order of {{ic|/etc/fstab}} (at least).&lt;br /&gt;
&lt;br /&gt;
Of course, if the {{pkg|cryptsetup}} package gets upgraded, you will have to change this script again. Unlike {{ic|/etc/crypttab}}, only one partition is supported, but with some further hacking one should be able to have multiple partitions unlocked.&lt;br /&gt;
&lt;br /&gt;
If you want to do this on a software RAID partition, there is one more thing you need to do. Just setting the {{ic|/dev/mdX}} device in {{ic|/lib/initcpio/hooks/encrypt}} is not enough; the {{ic|encrypt}} hook will fail to find the key for some reason, and not prompt for a passphrase either. It looks like the RAID devices are not brought up until after the {{ic|encrypt}} hook is run. You can solve this by putting the RAID array in {{ic|/boot/grub/menu.lst}}, like &lt;br /&gt;
 kernel /boot/vmlinuz-linux md=1,/dev/hda5,/dev/hdb5&lt;br /&gt;
&lt;br /&gt;
If you set up your root partition as a RAID, you will notice the similarities with that setup ;-). [[GRUB]] can handle multiple array definitions just fine:&lt;br /&gt;
 kernel /boot/vmlinuz-linux root=/dev/md0 ro md=0,/dev/sda1,/dev/sdb1 md=1,/dev/sda5,/dev/sdb5,/dev/sdc5&lt;br /&gt;
&lt;br /&gt;
=== リモート LUKS ヘッダーを使ってシステムを暗号化 ===&lt;br /&gt;
以下の例では [[Dm-crypt/システム全体の暗号化#Plain dm-crypt]] と同じセットアップを使います。先に進む前に読んでおいてください。&lt;br /&gt;
&lt;br /&gt;
リモートのヘッダーを使うことにより、暗号化されたブロックデバイスには暗号化データだけが保持され、攻撃者にヘッダーの存在が露見しないかぎり[[Wikipedia:Deniable encryption|否認可能性]]を得ることができます。[[Dm-crypt/システム全体の暗号化#Plain_dm-crypt|plain dm-crypt]] を使用する場合と似ていますが、LUKS の利点としてマスター鍵と鍵導出関数によって複数のパスフレーズが使えるなどのメリットがあります。さらに、リモートヘッダーは [[#GPG や OpenSSL で暗号化されたキーファイルを使う|GPG や OpenSSL で暗号化したキーファイル]]を使う方法よりも簡単に二要素認証を実現できます。内蔵のパスワードプロンプトで複数回の入力が可能です。詳しくは[[ディスク暗号化#暗号メタデータ]]を見てください。&lt;br /&gt;
&lt;br /&gt;
[[dm-crypt/デバイスの暗号化#LUKS モードの暗号化オプション]]を見て暗号化オプションを確認してから、暗号化したシステムパーティションを設定し {{ic|cryptsetup}} で使用するヘッダーファイルを作成してください:&lt;br /&gt;
 # truncate -s 2M header.img&lt;br /&gt;
 # cryptsetup luksFormat /dev/sdX --header header.img&lt;br /&gt;
&lt;br /&gt;
コンテナを開くには:&lt;br /&gt;
 # cryptsetup open --header header.img --type luks /dev/sdX enc&lt;br /&gt;
&lt;br /&gt;
後は [[Dm-crypt/システム全体の暗号化#boot 以外のパーティションの準備|LVM on LUKS セットアップ]]に従ってください。同じようにリムーバブルデバイスに [[Dm-crypt/システム全体の暗号化#boot パーティションの準備 4|boot パーティションを準備]]します (同じでなければ、暗号化ディスクを解錠するためのヘッダーファイルを別にする意味がありません)。そして {{ic|header.img}} を移動します:&lt;br /&gt;
 # mv header.img /mnt/boot&lt;br /&gt;
&lt;br /&gt;
Follow the installation procedure up to the mkinitcpio step (you should now be {{ic|arch-chroot}}ed inside the encrypted system).&lt;br /&gt;
&lt;br /&gt;
There are two options for initramfs to support a detached LUKS header.&lt;br /&gt;
&lt;br /&gt;
==== systemd フックを使う ====&lt;br /&gt;
&lt;br /&gt;
まず {{ic|/etc/crypttab.initramfs}} を作成して暗号化デバイスを追加してください。構文は {{man|5|crypttab|url=https://www.freedesktop.org/software/systemd/man/crypttab.html}} に定義されています:&lt;br /&gt;
{{hc|/etc/crypttab.initramfs|2=MyStorage    PARTUUID=00000000-0000-0000-0000-000000000000    none    header=/boot/header.img}}&lt;br /&gt;
&lt;br /&gt;
[[Mkinitcpio#通常のフック|systemd]] を使用するように {{ic|/etc/mkinitcpio.conf}} を編集して {{ic|FILES}} にヘッダーを追加してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|&lt;br /&gt;
/etc/mkinitcpio.conf|2=FILES=&amp;quot;&#039;&#039;&#039;/boot/header.img&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
HOOKS=&amp;quot;... &#039;&#039;&#039;systemd&#039;&#039;&#039; ... block &#039;&#039;&#039;sd-encrypt&#039;&#039;&#039; sd-lvm2 filesystems ...&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Mkinitcpio#イメージ作成とアクティベーション|initramfs を再作成]]したら設定は完了です。&lt;br /&gt;
&lt;br /&gt;
{{Note|No cryptsetup parameters need to be passed to the kernel command line, since{{ic|/etc/crypttab.initramfs}} will be added as {{ic|/etc/crypttab}} in the initramfs. If you wish to specify them in the kernel command line see {{man|8|systemd-cryptsetup-generator|url=https://www.freedesktop.org/software/systemd/man/systemd-cryptsetup-generator.html}} for the supported options.}}&lt;br /&gt;
&lt;br /&gt;
==== encrypt フックを修正する ====&lt;br /&gt;
&lt;br /&gt;
This method shows how to modify the {{ic|encrypt}} hook in order to use a remote LUKS header. Now the {{ic|encrypt}} hook has to be modified to let {{ic|cryptsetup}} use the separate header ({{Bug|42851}}; base source and idea for these changes [https://bbs.archlinux.org/viewtopic.php?pid=1076346#p1076346 published on the BBS]). Make a copy so it is not overwritten on  a [[mkinitcpio]] update:&lt;br /&gt;
 # cp /usr/lib/initcpio/hooks/encrypt /etc/initcpio/hooks/encrypt2&lt;br /&gt;
 # cp /usr/lib/initcpio/install/encrypt /etc/initcpio/install/encrypt2&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/initcpio/hooks/encrypt2 (around line 52)|output=warn_deprecated() {&lt;br /&gt;
    echo &amp;quot;The syntax &#039;root=${root}&#039; where &#039;${root}&#039; is an encrypted volume is deprecated&amp;quot;&lt;br /&gt;
    echo &amp;quot;Use &#039;cryptdevice=${root}:root root=/dev/mapper/root&#039; instead.&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;local headerFlag=false&#039;&#039;&#039;&lt;br /&gt;
for cryptopt in ${cryptoptions//,/ }; do&lt;br /&gt;
    case ${cryptopt} in&lt;br /&gt;
        allow-discards)&lt;br /&gt;
            cryptargs=&amp;quot;${cryptargs} --allow-discards&amp;quot;&lt;br /&gt;
            ;;  &lt;br /&gt;
        &amp;lt;b&amp;gt;header)&lt;br /&gt;
            cryptargs=&amp;quot;${cryptargs} --header /boot/header.img&amp;quot;&lt;br /&gt;
            headerFlag=true&lt;br /&gt;
            ;;&amp;lt;/b&amp;gt;&lt;br /&gt;
        *)  &lt;br /&gt;
            echo &amp;quot;Encryption option &#039;${cryptopt}&#039; not known, ignoring.&amp;quot; &amp;gt;&amp;amp;2 &lt;br /&gt;
            ;;  &lt;br /&gt;
    esac&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
if resolved=$(resolve_device &amp;quot;${cryptdev}&amp;quot; ${rootdelay}); then&lt;br /&gt;
    if &#039;&#039;&#039;$headerFlag &amp;amp;#124;&amp;amp;#124; &#039;&#039;&#039;cryptsetup isLuks ${resolved} &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then&lt;br /&gt;
        [ ${DEPRECATED_CRYPT} -eq 1 ] &amp;amp;&amp;amp; warn_deprecated&lt;br /&gt;
        dopassphrase=1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Now edit the [[mkinitcpio|mkinitcpio.conf]] to add the {{ic|encrypt2}} and {{ic|lvm2}} hooks, the {{ic|header.img}} to {{ic|FILES}} and the {{ic|loop}} to {{ic|MODULES}}, apart from other configuration the system requires:&lt;br /&gt;
{{hc|/etc/mkinitcpio.conf|2=MODULES=&amp;quot;&#039;&#039;&#039;loop&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
FILES=&amp;quot;&#039;&#039;&#039;/boot/header.img&#039;&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
HOOKS=&amp;quot;... &#039;&#039;&#039;encrypt2&#039;&#039;&#039; &#039;&#039;&#039;lvm2&#039;&#039;&#039; ... filesystems ...&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
This is required so the LUKS header is available on boot allowing the decryption of the system, exempting us from a more complicated setup to mount another separate USB device in order to access the header. After this set up  [[Mkinitcpio#イメージ作成とアクティベーション|the initramfs]] is created.&lt;br /&gt;
&lt;br /&gt;
次に[[Dm-crypt/システム全体の暗号化#ブートローダーの設定 4|ブートローダーを設定]]して {{ic|1=cryptdevice=}} で新しい {{ic|header}} オプションも設定します:&lt;br /&gt;
 cryptdevice=/dev/sdX:enc:header&lt;br /&gt;
&lt;br /&gt;
To finish, following [[Dm-crypt/システム全体の暗号化#インストール後]] is particularly useful with a {{ic|/boot}} partition on an USB storage medium.&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=You will notice that since the system partition only has &amp;quot;random&amp;quot; data, it does not have a partition table and by that an {{ic|UUID}} or a {{ic|name}}. But you can still have a consistent mapping using the disk id under {{ic|/dev/disk/by-id/}}}}&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88&amp;diff=37253</id>
		<title>フォント</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88&amp;diff=37253"/>
		<updated>2024-04-30T13:57:36Z</updated>

		<summary type="html">&lt;p&gt;Hikali: 誤字の修正  s/テーミナル/ターミナル/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:フォント]]&lt;br /&gt;
[[de:Schriftarten]]&lt;br /&gt;
[[en:Fonts]]&lt;br /&gt;
[[es:Fonts]]&lt;br /&gt;
[[uk:Fonts]]&lt;br /&gt;
[[zh-hans:Fonts]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|フォント設定}}&lt;br /&gt;
{{Related|アプリケーション一覧/ユーティリティ#Font viewers}}&lt;br /&gt;
{{Related|Linux コンソール#フォント}}&lt;br /&gt;
{{Related|Java Runtime Environment のフォント}}&lt;br /&gt;
{{Related|メトリック互換フォント}}&lt;br /&gt;
{{Related|Microsoft フォント}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Computer font]] ([[Wikipedia:ja:フォント|日本語版]]) より: 「コンピュータのフォントは、グラフィカルなグリフのセットを含むデジタルデータファイルとして実装されている。コンピュータフォントは、フォントエディタを用いて設計・作成される。コンピュータの画面用に特別に設計されたフォントで、印刷用ではないものをスクリーンフォントという。」&lt;br /&gt;
&lt;br /&gt;
なお、フォントのライセンスによっては、法的な制約を受ける場合があります。&lt;br /&gt;
&lt;br /&gt;
== フォントフォーマット ==&lt;br /&gt;
&lt;br /&gt;
今日使われるほとんどのコンピュータフォントのデータフォーマットは、&#039;&#039;ビットマップ&#039;&#039;か&#039;&#039;アウトライン&#039;&#039;のどちらかです。&lt;br /&gt;
;ビットマップフォント: 各面とサイズで各グリフのイメージを表現するドットやピクセルの配列で構成されます。&lt;br /&gt;
;アウトラインまたは&#039;&#039;ベクター&#039;&#039;フォント: ベジェ曲線、描画命令、そして計算式を使用して各グリフを表現します。文字のアウトラインは任意のサイズで表示できます。&lt;br /&gt;
&lt;br /&gt;
=== ビットマップフォーマット ===&lt;br /&gt;
&lt;br /&gt;
* Adobe による [[Wikipedia:Glyph Bitmap Distribution Format|Bitmap Distribution Format]] (BDF)&lt;br /&gt;
* Xorg による [[Wikipedia:Portable Compiled Format|Portable Compiled Format]] (PCF)&lt;br /&gt;
* カーネルがコンソールフォントで使用する [[Wikipedia:PC Screen Font|PC Screen Font]] (PSF) (Xorg はサポートしていません。Unicode PSF ファイルの拡張子は {{ic|psfu}} です)。&lt;br /&gt;
* OpenType ビットマップフォント (OTB) [https://fedoraproject.org/wiki/Changes/ProvideOpenTypeBitmapFonts]&lt;br /&gt;
&lt;br /&gt;
上記のフォーマットは gzip で圧縮することもできます。利用可能なビットマップフォントは[[#ビットマップ]]を見てください。&lt;br /&gt;
&lt;br /&gt;
=== アウトラインフォーマット ===&lt;br /&gt;
&lt;br /&gt;
* Adobe による [[Wikipedia:ja:PostScriptフォント|PostScript フォント]] – 様々なフォーマットがあります。例: Printer Font ASCII (PFA) と Printer Font Binary (PPB)。&lt;br /&gt;
* Apple と Microsoft による [[Wikipedia:ja:TrueType|TrueType]] (ファイル拡張子: {{ic|ttf}})&lt;br /&gt;
* TrueType を基に Microsoft によって開発された [[Wikipedia:ja:OpenType|OpenType]] (ファイル拡張子: {{ic|otf}}、{{ic|ttf}})&lt;br /&gt;
&lt;br /&gt;
多くの場合、TrueType と OpenType の技術的な差異は無視することができます。&lt;br /&gt;
&lt;br /&gt;
=== 他のフォーマット ===&lt;br /&gt;
&lt;br /&gt;
組版アプリケーションの [[TeX]] と、それに組み合わせるフォントソフトウェアの &#039;&#039;Metafont&#039;&#039; は、従来から独自の方法で文字をレンダリングします。この2つのプログラムでフォントとして使われるファイル拡張子に {{ic|*pk}}、{{ic|*gf}}、{{ic|mf}}、{{ic|vf}} があります。最近のバージョンでは、TrueType フォントと OpenType フォントを使うこともできます。&lt;br /&gt;
&lt;br /&gt;
[https://fontforge.github.io/en-US/ FontForge] ({{Pkg|fontforge}}) はフォント編集アプリケーションであり、独自のネイティブなテキストベースのフォーマット {{ic|sfd}} (&#039;&#039;s&#039;&#039;pline &#039;&#039;f&#039;&#039;ont &#039;&#039;d&#039;&#039;atabase) でフォントを保存できます。&lt;br /&gt;
&lt;br /&gt;
[https://www.w3.org/TR/SVG/fonts.html SVG] にも独自のフォント表現方式があります。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
フォントをインストールする方法は複数あります。&lt;br /&gt;
&lt;br /&gt;
=== Pacman ===&lt;br /&gt;
&lt;br /&gt;
有効化されているリポジトリ内のフォント及びフォントコレクションは [[pacman]] でインストールできます。&lt;br /&gt;
&lt;br /&gt;
利用可能なフォントは[[pacman#パッケージ・データベースに問い合わせる|パッケージをクエリする]]ことで確認できます (例えば、{{ic|font}} や {{ic|ttf}} といった単語で検索するなど)。&lt;br /&gt;
&lt;br /&gt;
=== パッケージを作成する ===&lt;br /&gt;
&lt;br /&gt;
フォントの管理は pacman からできるようにしたほうが良いでしょう。[[パッケージの作成|Arch のパッケージを作成する]]ことで、pacman に管理させることができます。また、パッケージは Arch コミュニティと [[AUR]] で共有することもできます。フォントをインストールするパッケージは特に似ています ([[フォントパッケージガイドライン]] を参照してください)。&lt;br /&gt;
&lt;br /&gt;
フォントファイルのファミリー名は {{ic|fc-query}} を使うことで確認できます (例: {{ic|fc-query -f &#039;%{family[0]}\n&#039; /path/to/file}})。フォーマットについては {{man|3|FcPatternFormat}} で説明されています。&lt;br /&gt;
&lt;br /&gt;
=== 手動インストール ===&lt;br /&gt;
&lt;br /&gt;
システムで設定されているリポジトリに存在しないフォントを追加する際に推奨される方法は [[#パッケージを作成する]] で説明されています。この方法では、後にフォントパッケージの削除と更新を pacman で行うことができます。&lt;br /&gt;
&lt;br /&gt;
または、フォントを手動でインストールすることもできます:&lt;br /&gt;
&lt;br /&gt;
* シングルユーザーの場合、フォントは {{ic|~/.local/share/fonts/}} にインストールします。&lt;br /&gt;
** 多くの場合、他のユーザーとしてグラフィカルなアプリケーションを実行しない限り、これで十分です。&lt;br /&gt;
** 過去には {{ic|~/.fonts/}} が使われていましたが、現在は非推奨です。&lt;br /&gt;
* システム全体 (全ユーザー) にインストールする場合は、{{ic|/usr/local/share/fonts/}} の下にフォントを配置します。&lt;br /&gt;
** 先にディレクトリを作成する必要があるかもしれません: {{ic|mkdir -p /usr/local/share/fonts}}&lt;br /&gt;
** {{ic|/usr/share/fonts/}} はパッケージマネージャの権限下にあり、手動で変更するべきではありません。&lt;br /&gt;
&lt;br /&gt;
サブディレクトリ構造の作成はユーザー次第であり、Linux ディストリビューションによって異なります。わかりやすくするために、各フォントをそれ自身のディレクトリに置くとよいでしょう。Fontconfig はデフォルトのパスを再帰的に検索し、ネストしたファイルを確実に拾います。&lt;br /&gt;
&lt;br /&gt;
構造の例は次のとおりです:&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
/usr/local/share/fonts/&lt;br /&gt;
├── otf&lt;br /&gt;
│   └── SourceCodeVariable&lt;br /&gt;
│       ├── SourceCodeVariable-Italic.otf&lt;br /&gt;
│       └── SourceCodeVariable-Roman.otf&lt;br /&gt;
└── ttf&lt;br /&gt;
    ├── AnonymousPro&lt;br /&gt;
    │   ├── Anonymous-Pro-B.ttf&lt;br /&gt;
    │   ├── Anonymous-Pro-I.ttf&lt;br /&gt;
    │   └── Anonymous-Pro.ttf&lt;br /&gt;
    └── CascadiaCode&lt;br /&gt;
        ├── CascadiaCode-Bold.ttf&lt;br /&gt;
        ├── CascadiaCode-Light.ttf&lt;br /&gt;
        └── CascadiaCode-Regular.ttf&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
フォントファイルには、すべてのユーザーに対して十分な読み取り権限を与える必要があります。少なくとも、ファイルの場合は {{ic|444}}、ディレクトリの場合は {{ic|555}} に [[chmod]] しておく必要があります。&lt;br /&gt;
&lt;br /&gt;
Xserver がフォントを直接読み込むためには (&#039;&#039;フォントサーバ&#039;&#039; の使用とは対照的に)、新しく追加したフォントのディレクトリを FontPath エントリで追加する必要があります。このエントリは [[Xorg#設定|Xorg 設定ファイル]]の &#039;&#039;Files&#039;&#039; セクションにあります (例: {{ic|/etc/X11/xorg.conf}} や {{ic|/etc/xorg.conf}})。詳しくは [[#古いアプリケーション]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
最後に、fontconfig キャッシュをアップデートします (通常は fontconfig ライブラリを使用するアプリケーションが実行するため必要ありません):&lt;br /&gt;
&lt;br /&gt;
 $ fc-cache&lt;br /&gt;
&lt;br /&gt;
=== 古いアプリケーション ===&lt;br /&gt;
&lt;br /&gt;
fontconfig をサポートしていない古いアプリケーション (例: GTK 1.x アプリケーションや {{ic|xfontsel}}) では、インデックスをフォントディレクトリ内に作成しておく必要があります:&lt;br /&gt;
&lt;br /&gt;
 $ mkfontscale&lt;br /&gt;
 $ mkfontdir&lt;br /&gt;
&lt;br /&gt;
または、ワンライナーで複数のフォルダを追加するには:&lt;br /&gt;
&lt;br /&gt;
 $ for dir in /font/dir1/ /font/dir2/; do xset +fp $dir; done &amp;amp;&amp;amp; xset fp rehash&lt;br /&gt;
&lt;br /&gt;
または、フォントが、{{ic|/usr/share/fonts}} などのディレクトリ内の異なるサブフォルダ内にそれぞれインストールされている場合は:&lt;br /&gt;
&lt;br /&gt;
 $ for dir in * ; do if [  -d  &amp;quot;$dir&amp;quot;  ]; then cd &amp;quot;$dir&amp;quot;;xset +fp &amp;quot;$PWD&amp;quot; ;mkfontscale; mkfontdir;cd .. ;fi; done &amp;amp;&amp;amp; xset fp rehash&lt;br /&gt;
&lt;br /&gt;
X サーバーがフォントディレクトリの読み込みに失敗したときは全ての {{ic|fonts.dir}} ファイルを再スキャンしてください:&lt;br /&gt;
&lt;br /&gt;
 # xset +fp /usr/share/fonts/misc # Inform the X server of new directories&lt;br /&gt;
 # xset fp rehash                # Forces a new rescan&lt;br /&gt;
&lt;br /&gt;
フォントが読み込まれたのかチェックするには:&lt;br /&gt;
&lt;br /&gt;
 $ xlsfonts | grep fontname&lt;br /&gt;
&lt;br /&gt;
{{note|多くのパッケージはインストール時に Xorg がフォントを使えるように自動的に設定を行います。その場合、この手順は不要です。}}&lt;br /&gt;
&lt;br /&gt;
これは、{{ic|/etc/X11/xorg.conf}} や {{ic|/etc/X11/xorg.conf.d}} でグローバルに設定することもできます。&lt;br /&gt;
&lt;br /&gt;
以下は、{{ic|/etc/X11/xorg.conf}} に追加すべきセクションの例です。必要なフォントに合わせてパスを削除または追加してください。&lt;br /&gt;
&lt;br /&gt;
{{bc|&lt;br /&gt;
# Let X.Org know about the custom font directories&lt;br /&gt;
Section &amp;quot;Files&amp;quot;&lt;br /&gt;
    FontPath    &amp;quot;/usr/share/fonts/100dpi&amp;quot;&lt;br /&gt;
    FontPath    &amp;quot;/usr/share/fonts/75dpi&amp;quot;&lt;br /&gt;
    FontPath    &amp;quot;/usr/share/fonts/cantarell&amp;quot;&lt;br /&gt;
    FontPath    &amp;quot;/usr/share/fonts/cyrillic&amp;quot;&lt;br /&gt;
    FontPath    &amp;quot;/usr/share/fonts/encodings&amp;quot;&lt;br /&gt;
    FontPath    &amp;quot;/usr/share/fonts/misc&amp;quot;&lt;br /&gt;
    FontPath    &amp;quot;/usr/share/fonts/truetype&amp;quot;&lt;br /&gt;
    FontPath    &amp;quot;/usr/share/fonts/TTF&amp;quot;&lt;br /&gt;
    FontPath    &amp;quot;/usr/share/fonts/util&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Pango の警告 ===&lt;br /&gt;
&lt;br /&gt;
システムで [https://www.pango.org/ Pango] が使用されている場合に、pango は [https://www.freedesktop.org/wiki/Software/fontconfig fontconfig] から読み込んでフォントを読み込む場所を分類します。&lt;br /&gt;
&lt;br /&gt;
 (process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type=&#039;PangoRenderFc&#039;, script=&#039;common&#039;&lt;br /&gt;
 (process:5741): Pango-WARNING **: failed to choose a font, expect ugly output. engine-type=&#039;PangoRenderFc&#039;, script=&#039;latin&#039;&lt;br /&gt;
&lt;br /&gt;
上記のようなエラーや、アプリケーションで文字の代わりに豆腐が表示された場合、フォントを追加してフォントキャッシュをアップデートする必要があります。この例では {{Pkg|ttf-liberation}} フォントがあげられていて root 権限でシステム全体で有効にします。&lt;br /&gt;
&lt;br /&gt;
{{hc|# fc-cache|&lt;br /&gt;
/usr/share/fonts: caching, new cache contents: 0 fonts, 3 dirs&lt;br /&gt;
/usr/share/fonts/TTF: caching, new cache contents: 16 fonts, 0 dirs&lt;br /&gt;
/usr/share/fonts/encodings: caching, new cache contents: 0 fonts, 1 dirs&lt;br /&gt;
/usr/share/fonts/encodings/large: caching, new cache contents: 0 fonts, 0 dirs&lt;br /&gt;
/usr/share/fonts/util: caching, new cache contents: 0 fonts, 0 dirs&lt;br /&gt;
/var/cache/fontconfig: cleaning cache directory&lt;br /&gt;
fc-cache: succeeded&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
デフォルトのフォントが設定されたか確認するには:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ fc-match|&lt;br /&gt;
LiberationMono-Regular.ttf: &amp;quot;Liberation Mono&amp;quot; &amp;quot;Regular&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== フォントパッケージ ==&lt;br /&gt;
&lt;br /&gt;
以下は、公式リポジトリや [[AUR]] から入手できる多くのフォントパッケージを精選したリストです。幅広い [[wikipedia:ja:Unicode|Unicode]] サポートのあるフォントには &amp;quot;Unicode&amp;quot; とマークしています。&lt;br /&gt;
&lt;br /&gt;
{{Tip|[https://github.com/ternstor/distrofonts Archfonts] は公式リポジトリや AUR にあるすべての TTF フォントの概要を生成するために使用できる Python スクリプトです。}}&lt;br /&gt;
&lt;br /&gt;
=== ビットマップ ===&lt;br /&gt;
&lt;br /&gt;
{{Note|{{Pkg|pango}} 1.44 は、[https://blogs.gnome.org/mclasen/2019/05/25/pango-future-directions/ FreeType のサポートをやめ HarfBuzz を採用した]ため、[https://blogs.gnome.org/mclasen/2019/08/07/pango-1-44-wrap-up/ 従来の BDF/PCF ビットマップフォントへのサポートがなくなり]、一部のアプリケーション ({{Pkg|gnome-terminal}} など) では、フォントが機能しなくなりました (グリフではなく豆腐が表示されます)。{{Bug|63297}}、[https://gitlab.gnome.org/GNOME/pango/issues/386 Pango issue #386]、[https://github.com/harfbuzz/harfbuzz/issues/1897 HarfBuzz issue #1897] を参照して下さい。}}&lt;br /&gt;
&lt;br /&gt;
* デフォルト 8×16&lt;br /&gt;
* [https://github.com/seraxis/pcf-spectrum-berry Berry] ({{AUR|pcf-spectrum-berry}}) – 8px&lt;br /&gt;
* [https://www.dcmembers.com/jibsen/download/61/ Dina] ({{AUR|dina-font}}) – Proggy プログラミングフォントベース、6pt、8pt、9pt、10pt、等幅&lt;br /&gt;
* [http://openlab.jp/efont/unicode/ Efont] ({{AUR|efont-unicode-bdf}}) – 10px、12px、14px、16px、24px、ノーマル、太字、イタリック&lt;br /&gt;
* [https://font.gohu.org/ Gohu] ({{AUR|gohufont}}) – 11px、14px、ノーマル、太字&lt;br /&gt;
* [https://typedesign.replit.app/kissinger2.html Kissinger 2] – 8×16、16×16 (Unifont の競合)&lt;br /&gt;
* [http://artwizaleczapka.sourceforge.net/ Lime] ({{AUR|artwiz-fonts}})&lt;br /&gt;
* [https://tobiasjung.name/profont/ ProFont] ({{AUR|ttf-profont-iix}}) – 10px、11px、12px、15px、17px、22px、29px、ノーマル&lt;br /&gt;
* [[Wikipedia:Proggy programming fonts|Proggy]] ({{AUR|proggyfonts}}) – 複数のバリアントあり&lt;br /&gt;
* [http://www.fial.com/~scott/tamsyn-font/ Tamsyn] ({{AUR|tamsyn-font}})&lt;br /&gt;
* [https://github.com/lucy/tewi-font Tewi] ({{AUR|bdf-tewi-git}})&lt;br /&gt;
* [https://unifoundry.com/unifont.html Unifont] – 8×16、16×16 (Unicode のカバー率が[[Wikipedia:Unicode font#Comparison of fonts|最も高い]]フォント) ({{AUR|bdf-unifont}})&lt;br /&gt;
&lt;br /&gt;
Pango 1.44 及びそれ以降で機能するフォント:&lt;br /&gt;
&lt;br /&gt;
* [https://tobiasjung.name/profont/ ProFont] ({{AUR|profont-otb}}) – ProFont の OpenType Bitmap (OTB) バリアント&lt;br /&gt;
* [https://xorg.freedesktop.org/releases/individual/font/ Misc Fixed] {{AUR|xorg-fonts-misc-otb}}&lt;br /&gt;
* [https://font.gohu.org/ Gohufont] ({{AUR|gohufont-otb}})&lt;br /&gt;
* [https://github.com/slavfox/Cozette/ Cozette] ({{AUR|cozette-otb}})&lt;br /&gt;
* [https://terminus-font.sourceforge.net/ Terminus] ({{Pkg|terminus-font}})&lt;br /&gt;
* AUR 上の他の [https://aur.archlinux.org/packages/?O=0&amp;amp;SeB=n&amp;amp;K=-otb&amp;amp;outdated=&amp;amp;SB=n&amp;amp;SO=a&amp;amp;PP=50&amp;amp;do_Search=Go OTB] フォント&lt;br /&gt;
&lt;br /&gt;
=== ラテン文字 ===&lt;br /&gt;
&lt;br /&gt;
==== ファミリー ====&lt;br /&gt;
&lt;br /&gt;
[[フォントパッケージガイドライン#提供するもの|基本のフォントセットを提供する]]パッケージ:&lt;br /&gt;
&lt;br /&gt;
* [[Wikipedia:ja:Bitstream Vera|Bitstream Vera]] ({{Pkg|ttf-bitstream-vera}}) – サンセリフ体、セリフ体、等幅フォントを含んでいます。Bitstream Vera Sans は [[Wikipedia:ja:Verdana|Verdana]] のメトリック互換版です。&lt;br /&gt;
* [[Wikipedia:Croscore fonts|Croscore fonts]] ({{Pkg|ttf-croscore}}) – Helvetica、Times、Courier の[[メトリック互換フォント]]。Chrome OS に同梱されていまうs。&lt;br /&gt;
* [[Wikipedia:ja:DejaVuフォント|DejaVu フォント]] ({{Pkg|ttf-dejavu}}) – Unicode カバー率を高めるように修正された Bitstream Vera。&lt;br /&gt;
* [[Wikipedia:ja:Droid (書体)|Droid]] ({{Pkg|ttf-droid}}) – 古い Android バージョンのデフォルトフォント。Unicode カバー率は高く、CJK 文字を含んでいますが、記号や絵文字はありません。&lt;br /&gt;
* [[Wikipedia:GNU FreeFont|GNU FreeFont]] ({{Pkg|gnu-free-fonts}}) – Helvetica、Times、Courier のクローンである3つのフォントが含まれています。ほとんどのラテン文字は [[Wikipedia:URW Type Foundry|URW]] [[Wikipedia:Ghostscript#Free_fonts|Ghostscript]] フォント (例: [[Wikipedia:ja:ニンバス・ローマンNo.9 L|Nimbus Roman]]、[[Wikipedia:Nimbus Sans|Nimbus Sans]]) 由来で、非ラテン文字は Unicode カバー率の高い多くのソース由来です。ただし、CJK 文字は含まれていません。&lt;br /&gt;
* [[Wikipedia:ja:IBM Plex|IBM Plex]] ({{Pkg|ttf-ibm-plex}}) – セリフ体、サンセリフ体、コンデンスドサンセリフ (condensed sans-serif)、等幅。True italics あり。&lt;br /&gt;
* [[Wikipedia:ja:Liberation fonts|Liberation fonts]] ({{Pkg|ttf-liberation}}) – Helvetica、Times、Courier の[[メトリック互換フォント]]。しかし、見た目が異なります。&lt;br /&gt;
* [https://github.com/alerque/libertinus Libertinus Fonts] ({{Pkg|libertinus-font}}) – [[Wikipedia:ja:Linux Libertine|Linux Libertine]] と Linux Biolinum のフォーク。拡張数学記号サポートあり。[[#数学]] を参照。&lt;br /&gt;
* [[Microsoft フォント]] ({{AUR|ttf-ms-win11}}) – Windows 11 のフォント群 (Windows 11 環境かインストールメディアが必要)。&lt;br /&gt;
* [[Wikipedia:ja:Noto|Noto フォント]] ({{Pkg|noto-fonts}}) – Google のフォントファミリ。任意の依存関係である絵文字と CJK のパッケージもインストールすれば、Unicode を完全にカバーできます。&lt;br /&gt;
&lt;br /&gt;
基本のフォントセットを提供しないパッケージ:&lt;br /&gt;
&lt;br /&gt;
* [https://b612-font.com/ B612] ({{AUR|ttf-b612}}) – Airbus が提供するオープンソースのフォントファミリ (サンセリフと等幅)。飛行機のコクピット画面で読みやすいようにデザインされています。&lt;br /&gt;
* [[Wikipedia:Ghostscript#Free_fonts|Ghostscript]] ({{Pkg|gsfonts}}) – [[Wikipedia:URW Type Foundry|URW]] によって寄付された Ghostscript フォント。Helvetica、Times、Courier などのクローンを含んでいます。GNU FreeFont ({{Pkg|gnu-free-fonts}}) と TeX Gyre フォント ({{Pkg|tex-gyre-fonts}}) は両方とも部分的にこの Ghostscript フォントをベースとしています。&lt;br /&gt;
* [[Wikipedia:Luxi fonts|Luxi fonts]] ({{AUR|font-bh-ttf}}) – Lucida に似ている X.Org フォントファミリ&lt;br /&gt;
* [[Wikipedia:ja:Roboto|Roboto]] ({{Pkg|ttf-roboto}}) – 最近の Android バージョンのデフォルトフォント。CJK などサポートされていない言語に関しては Noto フォントによって補完されます。&lt;br /&gt;
* [https://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html TeX Gyre フォント群] ({{Pkg|tex-gyre-fonts}}) – TeX ユーザーの Polish GUST association によって作成されました。ほとんどは [[Wikipedia:URW Type Foundry|URW]] [[Wikipedia:Ghostscript#Free_fonts|Ghostscript]] フォントをベースとしており、Helvetica、Times、Courier などのクローンを含んでいます。一部のフォントは独自の数学関連のフォントを含んでいます ([[#数学]] を参照)。&lt;br /&gt;
* [[Wikipedia:ja:Ubuntu (書体)|Ubuntu フォントファミリ]] ({{Pkg|ttf-ubuntu-font-family}})&lt;br /&gt;
&lt;br /&gt;
レガシーな Microsoft フォントパッケージ:&lt;br /&gt;
&lt;br /&gt;
* [https://corefonts.sourceforge.net/ Microsoft フォント] ({{AUR|ttf-ms-fonts}}) – Andalé Mono、Courier New、Arial、Arial Black、Comic Sans、Impact、Lucida Sans、Microsoft Sans Serif、Trebuchet、Verdana、Georgia、Times New Roman&lt;br /&gt;
* Vista フォント ({{AUR|ttf-vista-fonts}}) – Consolas、Calibri、Candara、Corbel、Cambria、Constantia&lt;br /&gt;
&lt;br /&gt;
==== 等幅 ====&lt;br /&gt;
&lt;br /&gt;
以下では、&amp;quot;プログラミングリガチャ&amp;quot; (例えば &amp;quot;-&amp;gt;&amp;quot; という文字列が &amp;quot;⟶&amp;quot; という2文字分の幅のグリフとして表示される機能のこと) をサポートしているフォントには ⟶ という印をつけています。その他の等幅フォントは [[#ビットマップ]] と [[#ファミリー]] も見てください。&lt;br /&gt;
&lt;br /&gt;
* [https://www.marksimonson.com/fonts/view/anonymous-pro Anonymous Pro] ({{Pkg|ttf-anonymous-pro}}、{{AUR|ttf-google-fonts-git}} に含まれています)&lt;br /&gt;
* [https://github.com/microsoft/cascadia-code Cascadia Code] ({{Pkg|ttf-cascadia-code}}) ⟶ – Open Font License の下で Microsoft によってリリースされ、プログラミング合字を使用して Windows Terminal の外観を向上させるようにデザインされています。&lt;br /&gt;
* [https://quoteunquoteapps.com/courierprime/ Courier Prime] ({{AUR|ttf-courier-prime}}) – サンセリフフォントとプログラミング用に最適化されたバージョンで補完された Courier の代替品で、Open Font License の下でリリースされています。&lt;br /&gt;
* [https://damieng.com/envy-code-r Envy Code R] ({{AUR|ttf-envy-code-r}}) – プログラマのためのフォント&lt;br /&gt;
* Fantasque Sans Mono ({{Pkg|ttf-fantasque-sans-mono}}、{{Pkg|otf-fantasque-sans-mono}})&lt;br /&gt;
* [[Wikipedia:Fira_(typeface)|Fira Mono]] ({{Pkg|ttf-fira-mono}}、{{Pkg|otf-fira-mono}}) – 小さい画面に最適化され、Mozilla によって Firefox OS に採用されたフォント。&lt;br /&gt;
* [[Wikipedia:Fira_(typeface)#Fira_Code|Fira Code]] ({{Pkg|ttf-fira-code}}) ⟶ – 一般的な複数文字のリガチャが追加された、Fira Mono の拡張。&lt;br /&gt;
* [https://sourcefoundry.org/hack/ Hack] ({{Pkg|ttf-hack}}) - KDE Plasma でデフォルトとして使用されるオープンソースの等幅フォント&lt;br /&gt;
* [https://github.com/i-tu/Hasklig Hasklig] ({{AUR|otf-hasklig}}) - 等幅リガチャのあるコードフォント&lt;br /&gt;
* [https://pcaro.es/p/hermit/ Hermit] ({{Pkg|otf-hermit}}) - プログラマによる、プログラマのためのフォント。&lt;br /&gt;
* [[Wikipedia:Inconsolata|Inconsolata]] ({{Pkg|ttf-inconsolata}}、{{AUR|ttf-google-fonts-git}} に含まれています) – ソースコードの閲覧用にデザインされたフォント。Consolas と Letter Gothic からインスパイアされました。&lt;br /&gt;
* [https://leonardo-m.livejournal.com/77079.html Inconsolata-g] ({{AUR|ttf-inconsolata-g}}) – プログラマ向けの改修が加えられています。&lt;br /&gt;
* [https://be5invis.github.io/Iosevka/ Iosevka] ({{Pkg|ttc-iosevka}}) ⟶ – Pragmata Pro、M+、および PF DIN Mono に触発された、プログラミングに理想的なフォントとして設計された細いサンセリフおよびスラブセリフ書体。プログラミング合字と2000以上のラテン文字、ギリシャ文字、キリル文字、発音記号、PowerLine グリフをサポートします&lt;br /&gt;
* [https://www.jetbrains.com/lp/mono/ JetBrains Mono] ({{Pkg|ttf-jetbrains-mono}}) ⟶ – JetBrains によってはい削されている、フリーでオープンソースなフォント。&lt;br /&gt;
* [https://mishamyrt.github.io/Lilex/ Lilex] ({{AUR|ttf-lilex}}) ⟶ – プログラミングで一般的に使われる複数文字のリガチャが含まれている、フリーでオープンソースなモダンなプログラミングフォント。&lt;br /&gt;
* [[Wikipedia::ja:Lucida#Lucida Typewriter Serif|Lucida Typewriter]] ({{AUR|jre}} パッケージに含まれています)&lt;br /&gt;
* [[Wikipedia:Menlo (typeface)|Menlo]] ({{AUR|ttf-meslo}}) – OS X のための Apple の Menlo Regular フォントのカスタマイズされたバージョン。垂直方向のギャップが大きくなっています。&lt;br /&gt;
* [[Wikipedia:Monaco (typeface)|Monaco]] ({{AUR|ttf-monaco}}) – Apple デザインされた、OS X のためのプロプライエタリなフォント。&lt;br /&gt;
* Monofur ({{Pkg|ttf-monofur}})&lt;br /&gt;
* [https://madmalik.github.io/mononoki Mononoki] ({{AUR|ttf-mononoki}}) – プログラミングやコードレビューのためのフォント。&lt;br /&gt;
* [[Wikipedia:Roboto#Roboto_Mono|Roboto Mono]] ({{Pkg|ttf-roboto-mono}}) – Roboto ({{Pkg|ttf-roboto}}) をベースとしています。&lt;br /&gt;
* [[Wikipedia:Source Code Pro|Source Code Pro]] ({{Pkg|adobe-source-code-pro-fonts}}、{{AUR|ttf-google-fonts-git}} に含まれています)&lt;br /&gt;
* [https://dtinth.github.io/comic-mono-font/ Comic Mono] ({{AUR|ttf-comic-mono-git}}) 読みやすい等幅フォント。子供の頃から親しんできたあの字面、Comic Sans。&lt;br /&gt;
&lt;br /&gt;
関連するウェブサイト:&lt;br /&gt;
&lt;br /&gt;
* [http://www.lowing.org/fonts/ Trevor Lowing のフォントリスト]&lt;br /&gt;
* [https://www.slant.co/topics/67/~what-are-the-best-programming-fonts Slant: What are the best programming fonts?]&lt;br /&gt;
* [https://stackoverflow.com/questions/4689/recommended-fonts-for-programming Stack Overflow: Recommended fonts for programming]&lt;br /&gt;
* [https://www.programmingfonts.org Programming Fonts - Test Drive]&lt;br /&gt;
* [http://s9w.io/font_compare Programming Fonts Compare]&lt;br /&gt;
* [https://www.codingfont.com/ Typogram による Coding Font]&lt;br /&gt;
&lt;br /&gt;
==== サンセリフ ====&lt;br /&gt;
&lt;br /&gt;
* [http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&amp;amp;id=andika Andika]{{Dead link|2024|03|03|status=404}} ({{AUR|ttf-andika}})&lt;br /&gt;
* [[Wikipedia:Cantarell (typeface)|Cantarell]] ({{Pkg|cantarell-fonts}}) – GNOME と共に提供されるデフォルトフォント。GNOME 及び GTK 3 関連のパッケージで必要です。&lt;br /&gt;
* [https://typedesign.replit.app/dmcasansserif.html DMCA Sans Serif] ({{AUR|ttf-dmcasansserif}}) – 汎用のサンセリフフォント。Microsoft Consolas とメトリック互換性あり。&lt;br /&gt;
* [[Wikipedia:Fira (typeface)|Fira Sans]] ({{Pkg|ttf-fira-sans}}、{{Pkg|otf-fira-sans}}) – Erik Spiekermann によって Mozilla と Firefox OS のためにデザインされたサンセリフフォント。Fira Mono と Fira Code は Fira Sans の等幅バージョンです ([[#等幅]] を参照)。&lt;br /&gt;
* [[Wikipedia:FreeSans|FreeSans]] ({{Pkg|gnu-free-fonts}}) – Helvetica と[[Commons:File:FreeSansDemonstration.png|見た目が似ています]]が、メトリクスが異なります。[[#ファミリー]] を参照。&lt;br /&gt;
* [https://github.com/rsms/inter Inter] ({{Pkg|inter-font}}) – ユーザーインターフェイス用にデザインされた、幾何学的なネオグロテスクフォント。&lt;br /&gt;
* [https://indestructibletype.com/Jost.html Jost*] ({{AUR|otf-jost}}) – [[Wikipedia:ja:Futura|Futura]] をベースとしたオープンソース書体。&lt;br /&gt;
* [[Wikipedia:ja:Liberation fonts|Liberation Sans]] ({{Pkg|ttf-liberation}}) – Helvetica とメトリック互換性がありますが、[[Commons:File:Font_Sample_-_Liberation_Sans.svg|見た目が異なります]]。[[#ファミリー]] を参照。&lt;br /&gt;
* [https://fonts.google.com/specimen/Montserrat Montserrat] ({{Pkg|otf-montserrat}}) – [[Wikipedia:Gotham (typeface)|Gotham]] と [[Wikipedia:Proxima Nova|Proxima Nova]] と似ている部分のあるオープンソースフォント。&lt;br /&gt;
* [https://fonts.google.com/specimen/Nunito Nunito] ({{AUR|ttf-nunito}}) – 文字の端が丸いオープンソースフォント。なので、[[Wikipedia:Gotham_(typeface)#Variations|Gotham Rounded]] や [https://fonts.adobe.com/fonts/proxima-soft Proxima Soft] と似ています。&lt;br /&gt;
* [[Wikipedia:Open Sans|Open Sans]] ({{Pkg|ttf-opensans}}) – Google から委託されたサンセリフフォント。Droid sans をベースとしていますが、少し幅広くなっています。&lt;br /&gt;
* [[Wikipedia:PT Sans|PT Sans]] ({{AUR|ttf-google-fonts-git}}) – 3つの主要なバリアント (normal、narrow、caption) があります。Unicode: ラテン文字、キリル文字&lt;br /&gt;
* [[Wikipedia:ja:Source Sans Pro|Source Sans]] ({{Pkg|adobe-source-sans-fonts}}) – Adobe のオープンソースのサンセリフフォント。News Gothic と Franklin Gothic をベースとしています。&lt;br /&gt;
* [https://www.winehq.org/announce/0.9.47 Tahoma (Wine 用の代替版)] ({{AUR|ttf-tahoma}}) – [[Wikipedia:Tahoma (typeface)|Tahoma]] に対するオープンソースな代替のフォントです。[[Wine]] プロジェクトによって開発されました。多くの Windows アプリケーションは Tahoma が利用可能であることを期待するので作成されました。&lt;br /&gt;
&lt;br /&gt;
==== セリフ ====&lt;br /&gt;
&lt;br /&gt;
* [[Wikipedia:ja:Bitstream Charter|Bitstream Charter]] ({{AUR|ttf-bitstream-charter}}、{{AUR|otf-bitstream-charter}}) – 元は [[Wikipedia:ja:マシュー・カーター|Matthew Carter]] によってデザインされた商用フォントでした。フリーなライセンスのバージョンがリリースされ、後にモダンな形式に[https://practicaltypography.com/charter.html 変換されました] (前述のパッケージで提供されています)。&lt;br /&gt;
* [https://indestructibletype.com/Bodoni.html Bodoni*] ({{AUR|otf-bodoni}}) – オープンソースな [[Wikipedia:ja:Bodoni|Bodoni]] の復刻版。&lt;br /&gt;
* [https://github.com/skosch/Crimson Crimson] ({{Pkg|otf-crimson}}) – [[Wikipedia:Minion_(typeface)|Minion]] と似ている部分のあるオープンソースなフォント。&lt;br /&gt;
* [[Wikipedia:EB_Garamond|EB Garamond]] ({{AUR|ebgaramond-otf}}) – オープンソースな [[Wikipedia:ja:Garamond|Garamond]] の復刻版。前述のパッケージは [https://github.com/octaviopardo/EBGaramond12 Octavio Pardo] によって開発されたバージョンです。&lt;br /&gt;
* [[Wikipedia:FreeSerif|FreeSerif]] ({{Pkg|gnu-free-fonts}}) – Times New Roman と[[Commons:File:FreeSerifDemonstration.png|見た目が似ています]]が、[https://askubuntu.com/questions/346552/closest-alternative-to-times-new-roman/1148247#1148247 メトリクスが異なります]。[[#ファミリー]] を参照。&lt;br /&gt;
* [[Wikipedia:Gentium|Gentium]] ({{Pkg|ttf-gentium-plus}}) – Unicode。ラテン文字、ギリシャ文字、キリル文字、国際音声記号 (IPA) 文字への包括的なサポートあり。&lt;br /&gt;
* [[Wikipedia:Utopia_(typeface)#Derived_typefaces|Heuristica]] ({{AUR|ttf-heuristica}}) – フリーなライセンスでリリースされた [[Wikipedia:Utopia_(typeface)|Utopia]] のバージョンの1つをベースとしています。&lt;br /&gt;
* [[Wikipedia:ja:Liberation fonts|Liberation Serif]] ({{Pkg|ttf-liberation}}) – Times New Roman とメトリック互換性がありますが、[[Wikipedia:File:Times New Roman Liberation Serif comparison.png|見た目が異なります]]。[[#ファミリー]] を参照。&lt;br /&gt;
* [https://fonts.google.com/specimen/Libre+Baskerville Libre Baskerville] ({{AUR|ttf-librebaskerville}}) – オープンソースな [[Wikipedia:Baskerville|Baskerville]] の復刻版。Impallari Type によってデザインされました。&lt;br /&gt;
* [https://fonts.google.com/specimen/Libre+Caslon+Text Libre Caslon] ({{AUR|otf-libre-caslon}}) – オープンソースな [[Wikipedia:Caslon|Caslon]] の復刻版。Impallari Type によってデザインされました。&lt;br /&gt;
* [[Wikipedia:ja:Linux Libertine|Linux Libertine]] ({{Pkg|ttf-linux-libertine}}) – Times New Roman の代替として開発されましたが、見た目が異なり、さらにメトリクスも異なります (メトリクスの違いはイタリックと太字のフォントでより顕著です)。フォークの [[Wikipedia:Linux_Libertine#Derivative_works|Libertinus Fonts]] ({{Pkg|libertinus-font}}) は活発に開発されているバージョンです。&lt;br /&gt;
* [https://www.gust.org.pl/projects/e-foundry/tex-gyre/index_html TeX Gyre Termes] ({{Pkg|tex-gyre-fonts}}) – Times New Roman と見た目が似ています (しかし、メトリクスのマイナーな違いがあります)。[[#ファミリー]] を参照。&lt;br /&gt;
* [[Wikipedia:Croscore_fonts|Tinos]] ({{Pkg|ttf-croscore}}) – Times New Roman とメトリック互換性がありますが、見た目が異なります (Liberation Serif に似ています)。[[#ファミリー]] を参照。&lt;br /&gt;
&lt;br /&gt;
==== 手書き ====&lt;br /&gt;
&lt;br /&gt;
* {{AUR|ttf-nothingyoucoulddo}} – フォトグラファーの手書きフォント&lt;br /&gt;
* {{AUR|ttf-indieflower}} – 活力のある丸みを帯びた手書きサンセリフフォント&lt;br /&gt;
* {{AUR|ttf-pacifico}} – 1950年代のアメリカサーフカルチャーからインスピレーションを得た、毛筆手書きフォント。キリル文字に拡張されています。&lt;br /&gt;
* {{AUR|otf-londrina}} – ブラジル、サンパウロの通りからインスピレーションを得た、手書きフォント。&lt;br /&gt;
* {{AUR|otf-tesla}} – ニコラテスラの手書きの再構築結果をベースとしたスクリプトフォント。&lt;br /&gt;
* {{AUR|ttf-architects-daughter}} – 建築関連文書の見た目と四角い見た目、そして日常の手書きの自然な感じを取り入れたフォント。&lt;br /&gt;
&lt;br /&gt;
==== 未分類 ====&lt;br /&gt;
&lt;br /&gt;
* {{AUR|ttf-cheapskate}} – &#039;&#039;dustismo.com&#039;&#039; のフォントコレクション&lt;br /&gt;
* {{Pkg|ttf-junicode}} – 中世のラテン文字をほぼ完全に収録している Junius フォント&lt;br /&gt;
* {{AUR|ttf-mph-2b-damase}} – 第1面全てといくつかの文体をカバーしているフォント&lt;br /&gt;
* {{Pkg|xorg-fonts-type1}} – [[Wikipedia:ja:PostScriptフォント|PostScript フォント]]の Adobe Utopia と IBM Courier のセット。&lt;br /&gt;
* {{AUR|all-repository-fonts}} – 公式リポジトリ内の全フォントをインストールするメタパッケージ。&lt;br /&gt;
* {{AUR|ttf-google-fonts-git}} – フリーフォント (Ubuntu、Inconsolata、Roboto などを含む) の巨大なコレクション。注: 100以上のフォントが追加されるため、フォントダイアログが非常に長くなるかもしれません。&lt;br /&gt;
&lt;br /&gt;
=== 非ラテン文字 ===&lt;br /&gt;
&lt;br /&gt;
==== 古代文字 ====&lt;br /&gt;
&lt;br /&gt;
* {{AUR|ttf-ancient-fonts}} – エーゲ文明やエジプト文明の文字、楔形文字、アナトリア半島の諸文明やマヤ文明の古代文字などの Unicode 記号が含まれているフォント。&lt;br /&gt;
&lt;br /&gt;
==== アラビア文字 ====&lt;br /&gt;
&lt;br /&gt;
[[:en:Localization/Arabic#Fonts]] を参照。&lt;br /&gt;
&lt;br /&gt;
==== ベンガル文字 ====&lt;br /&gt;
&lt;br /&gt;
[[:en:Localization/Bengali#Fonts]] を参照。&lt;br /&gt;
&lt;br /&gt;
==== 点字 ====&lt;br /&gt;
&lt;br /&gt;
* {{AUR|ttf-ubraille}} – &#039;&#039;点字&#039;&#039; の Unicode 記号が入っているフォント&lt;br /&gt;
&lt;br /&gt;
==== 中国語、日本語、韓国語、ベトナム語 ====&lt;br /&gt;
&lt;br /&gt;
===== 汎 CJK =====&lt;br /&gt;
&lt;br /&gt;
Adobe Source Han フォントと Noto CJK フォントには[https://github.com/adobe-fonts/source-han-sans/issues/122 同一のグリフとメトリック]が含まれていますが、プロジェクトが Adobe と Google の両方によって委託されたため、異なるブランドがつけられています。&lt;br /&gt;
&lt;br /&gt;
これらのコレクションは両方とも簡体字、繁体字、日本語、韓国語を包括的にサポートしており、デザインと見た目は統一されています。&lt;br /&gt;
&lt;br /&gt;
* Adobe Source Han フォント&lt;br /&gt;
** [[Wikipedia:ja:源ノ角ゴシック|Source Han Sans (源ノ角ゴシック)]] ({{Pkg|adobe-source-han-sans-otc-fonts}})&lt;br /&gt;
** [[Wikipedia:ja:源ノ明朝|Source Han Serif (源ノ明朝)]] ({{Pkg|adobe-source-han-serif-otc-fonts}})&lt;br /&gt;
* [[Wikipedia:ja:Noto|Noto CJK フォント]] ({{Pkg|noto-fonts-cjk}}) – Noto Sans CJK と Noto Serif CJK の両方を含んでいます。&lt;br /&gt;
&lt;br /&gt;
===== 中国語 =====&lt;br /&gt;
&lt;br /&gt;
[[:en:Localization/Chinese#Fonts]] を参照&lt;br /&gt;
&lt;br /&gt;
===== 日本語 =====&lt;br /&gt;
&lt;br /&gt;
[[ローカリゼーション#フォント]] を参照。&lt;br /&gt;
&lt;br /&gt;
===== 韓国語 =====&lt;br /&gt;
&lt;br /&gt;
[[:en:Localization/Korean#Fonts]] を参照。&lt;br /&gt;
&lt;br /&gt;
===== ベトナム語 =====&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|ttf-hannom}} – チュノム用のベトナム語 TrueType フォント&lt;br /&gt;
&lt;br /&gt;
==== キリル文字 ====&lt;br /&gt;
&lt;br /&gt;
[[#ラテン文字]] も参照。&lt;br /&gt;
&lt;br /&gt;
* {{AUR|ttf-paratype}} – ParaType によるフォントファミリ: サンセリフ、セリフ、等幅、拡張キリル文字・ラテン文字を含む。OFL ライセンス。&lt;br /&gt;
* {{AUR|otf-russkopis}} – キリル文字のフリーな OpenType 筆記体フォント&lt;br /&gt;
&lt;br /&gt;
==== ギリシャ文字 ====&lt;br /&gt;
&lt;br /&gt;
ほとんど全ての Unicode 対応フォントにはギリシア文字セットが (アクセント注記式も) 含まれています。追加フォントパッケージには、Unicode 文字に完全には対応していないながらも高品質なギリシア文字 (もちろんラテン文字も) 活字を使えるパッケージがあります:&lt;br /&gt;
&lt;br /&gt;
* {{AUR|otf-gfs}} – Greek Font Society による OpenType フォントのセレクション&lt;br /&gt;
* {{AUR|ttf-mgopen}} – Magenta によるプロフェッショナル TrueType フォント&lt;br /&gt;
* {{AUR|ttf-sbl-greek}} – SBL Greek。Society of Biblical Literature (SBL) により作成されました。&lt;br /&gt;
* {{AUR|ttf-sbl-biblit}} – SBL BibLit。SBL Greek と SBL Hebrew の文字を含んでいます。&lt;br /&gt;
&lt;br /&gt;
==== ヘブライ文字 ====&lt;br /&gt;
&lt;br /&gt;
* {{AUR|opensiddur-hebrew-fonts}} – オープンソースなヘブライフォントの大規模なコレクション。少数のラテン文字、ギリシャ文字、アラビア文字、アムハラ文字も含んでいます。&lt;br /&gt;
* {{AUR|culmus}} – フリーなヘブライフォントの良質なコレクション。&lt;br /&gt;
* {{AUR|alefbet}} – 2つのヘブライフォント (現時点では): 一般的に使用されている &amp;quot;David Libre&amp;quot; と、手書きフォントの &amp;quot;Gveret Levin&amp;quot;。&lt;br /&gt;
* {{AUR|ttf-ms-fonts}} – Arial フォントなどが含まれています。&lt;br /&gt;
* {{AUR|ttf-sbl-hebrew}} – SBL Hebrew。Society of Biblical Literature (SBL) によって作成されました。&lt;br /&gt;
* {{AUR|ttf-sbl-biblit}} – SBL BibLit。SBL Hebrew と SBL Greek の両方の文字を含んでいます。&lt;br /&gt;
&lt;br /&gt;
==== インド語群 ====&lt;br /&gt;
&lt;br /&gt;
[[:en:Localization/Indic#Fonts]] を参照。&lt;br /&gt;
&lt;br /&gt;
==== クメール文字 ====&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|ttf-khmer}} – クメール語のグリフをカバーするフォント。&lt;br /&gt;
* [https://www.google.com/fonts/specimen/Hanuman Hanuman] ({{AUR|ttf-google-fonts-git}})&lt;br /&gt;
&lt;br /&gt;
==== モンゴル・ツングース語族 ====&lt;br /&gt;
&lt;br /&gt;
* {{AUR|ttf-abkai}} – シベ文字・満州文字・ダウール文字フォント (開発途中で不完全です)&lt;br /&gt;
&lt;br /&gt;
==== ペルシア文字 ====&lt;br /&gt;
&lt;br /&gt;
* {{AUR|persian-fonts}} – AUR に存在する全てのペルシア語フォントをインストールするためのメタパッケージ。&lt;br /&gt;
* {{AUR|borna-fonts}} – Borna Rayaneh Co. 製のペルシア文字 B フォントシリーズ。&lt;br /&gt;
* {{AUR|iran-nastaliq-fonts}} – フリーの Unicode 対応ペルシア文字筆記体フォント。&lt;br /&gt;
* {{AUR|iranian-fonts}} – Iranian-Sans と Iranian-Serif のペルシア文字フォントファミリー。&lt;br /&gt;
* {{AUR|ir-standard-fonts}} – イラン通信情報技術最高評議会 (SCICT) による標準ペルシア語フォント。&lt;br /&gt;
* {{AUR|persian-hm-ftx-fonts}} –  X Series 2、Metafont、FarsiTeX フォントから派生して作られたカシーダが使えるペルシア文字フォントシリーズ。&lt;br /&gt;
* {{AUR|persian-hm-xs2-fonts}} – X Series 2 フォントから派生して作られたカシーダが使えるペルシア文字フォントシリーズ。&lt;br /&gt;
* {{AUR|gandom-fonts}}、{{AUR|parastoo-fonts}}、{{AUR|sahel-fonts}}、{{AUR|samim-fonts}}、{{AUR|shabnam-fonts}}、{{AUR|tanha-fonts}}、{{AUR|vazirmatn-fonts}}、{{AUR|vazir-code-fonts}} – &lt;br /&gt;
Saber RastiKerdar によって作られた美麗なペルシア語フォント。&lt;br /&gt;
* {{AUR|ttf-yas}} – Yas Persian フォントシリーズ (&#039;&#039;&#039;hollow zero&#039;&#039;&#039; あり)。&lt;br /&gt;
* {{AUR|ttf-x2}} – ペルシア語、アラビア語、ウルドゥー語、パシュトゥー語、ダリー語、ウズベク語、クルド語、ウイグル語、古代トルコ語 (オスマン語)、現代トルコ語 (ローマ字) までをサポートしているフリーフォント。&lt;br /&gt;
&lt;br /&gt;
==== タイ・カダイ語族 ====&lt;br /&gt;
&lt;br /&gt;
* {{AUR|fonts-tlwg}} – スケーラブルなタイ語フォントのコレクション&lt;br /&gt;
* {{AUR|ttf-google-thai}} – Google による高品質なタイ語フォントと Thai National Fonts の[https://cadsondemak.github.io/ 改良]。&lt;br /&gt;
* {{AUR|ttf-lao}} – ラオス語 TTF フォント (Phetsarath_OT)&lt;br /&gt;
&lt;br /&gt;
==== チベット・ビルマ語派 ====&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|ttf-tibetan-machine}} – チベット語 Machine TTFont&lt;br /&gt;
* {{AUR|ttf-sil-padauk}} – ビルマ文字を使用する多くの派生言語をサポートする Unicode フォント。&lt;br /&gt;
&lt;br /&gt;
=== 絵文字と記号 ===&lt;br /&gt;
&lt;br /&gt;
Unicode 規格には「絵文字」と呼ばれる画像文字のためにあてられたセクションが存在します。&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:携帯電話の絵文字|絵文字]]フォントには様々なフォーマットが存在します: CBDT/CBLC (Google)、SBIX (Apple)、COLR/CPAL (Microsoft)、SVG (Mozilla/Adobe)。&lt;br /&gt;
&lt;br /&gt;
サポートされているフォーマットの絵文字フォントが少なくとも1つインストールされていれば、特に設定せずとも絵文字は表示されるはずです。しかし、一部の絵文字フォントはグリフを巨大な固定サイズのビットマップとしてエンコードするので、意図したサイズで表示するために[[フォント設定#ビットマップフォントのスケーリングを無効にする|ビットマップフォントのダウンスケーリング]]を使用する必要があります (これはデフォルトで有効化されています)。&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Emoji#Emoji versus text presentation|Unicode 規格]]に従った絵文字フォントのフォールバックは、[https://github.com/google/emoji-segmenter 絵文字を扱うための追加のコード]を必要とします。&lt;br /&gt;
&lt;br /&gt;
絵文字を見つけて入力する方法については [[アプリケーション一覧/ユーティリティ#Text input]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ソフトウェア !! CBDT/CBLC !! SBIX !! COLR/CPAL !! SVG !! 絵文字フォントフォールバック&lt;br /&gt;
|-&lt;br /&gt;
! [[Wikipedia:ja:Freetype|Freetype]]&lt;br /&gt;
| {{Yes}} || {{Yes}} || {{Yes}} || {{No|https://savannah.nongnu.org/bugs/?46141}} || {{-}}&lt;br /&gt;
|-&lt;br /&gt;
! [[Wikipedia:ja:Pango|Pango]]&lt;br /&gt;
| colspan=4 {{C|Freetype}} || {{Yes|https://gitlab.gnome.org/GNOME/pango/-/issues/298}}&lt;br /&gt;
|-&lt;br /&gt;
! [[アプリケーション一覧/インターネット#WebKit ベース|WebKitGTK]]&lt;br /&gt;
| colspan=4 {{C|Freetype}} || {{Yes|https://trac.webkit.org/changeset/239822/webkit}}&lt;br /&gt;
|-&lt;br /&gt;
! [[Qt]]&lt;br /&gt;
| colspan=4 {{C|Freetype}} || {{No}} [https://bugreports.qt.io/browse/QTBUG-71568] [https://bugreports.qt.io/browse/QTBUG-85014] [https://bugreports.qt.io/browse/QTBUG-85744]&lt;br /&gt;
|-&lt;br /&gt;
! [[Chromium]]&lt;br /&gt;
| colspan=4 {{C|Freetype}} || {{Yes|https://chromium.googlesource.com/chromium/src.git/+/671511b00e2d6c374a3079c1c379d2d0dfad32fe}}&lt;br /&gt;
|-&lt;br /&gt;
! [[Firefox]]&lt;br /&gt;
| colspan=3 {{C|Freetype}} || {{Yes}} || {{No|1=https://bugzilla.mozilla.org/show_bug.cgi?id=1509988}}、回避策は [[Firefox#フォントのトラブルシューティング]] を見てください。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Note|Qt は一度に最初の 255 個のフォントしか利用できません [https://bugreports.qt.io/browse/QTBUG-80434]。[[フォント設定#デフォルトまたは代替フォントを設定する|所望の代替フォント]]のリストに絵文字フォントが存在することを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
CBDT/CBLC:&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|noto-fonts-emoji}} – Google のオープンソース絵文字 15.1。&lt;br /&gt;
* {{Pkg|ttf-joypixels}} – EmojiOne creator のプロプライエタリな絵文字 15.0。&lt;br /&gt;
* {{AUR|ttf-twemoji}} – Twitter のオープンソース絵文字 15.0。&lt;br /&gt;
&lt;br /&gt;
SVG:&lt;br /&gt;
&lt;br /&gt;
* {{AUR|otf-openmoji}} – Schwäbisch Gmünd の German University of Design のオープンソース絵文字 15.0。&lt;br /&gt;
* {{AUR|ttf-twemoji-color}} – Twitter のオープンソース絵文字 14.0。&lt;br /&gt;
&lt;br /&gt;
アウトラインのみ:&lt;br /&gt;
&lt;br /&gt;
* {{AUR|ttf-symbola}} – 多くの Unicode 記号 (絵文字を含む) を提供します。&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:顔文字|顔文字]]は様々な文字セット (CJK フォントやインド語群フォントを含む) からなります。例えば、次のパッケージは既存の顔文字をほぼカバーします: {{Pkg|gnu-free-fonts}}、{{Pkg|ttf-arphic-uming}}、{{Pkg|ttf-indic-otf}}。&lt;br /&gt;
&lt;br /&gt;
=== 数学 ===&lt;br /&gt;
&lt;br /&gt;
* [[wikipedia:ja:Computer Modern|Computer Modern]] ({{AUR|ttf-cm-unicode}}、{{AUR|otf-cm-unicode}})&lt;br /&gt;
* Computer Modern ({{Pkg|otf-latin-modern}}、{{Pkg|otf-latinmodern-math}}) – Improved version used in LaTeX&lt;br /&gt;
* [[wikipedia:Linux_Libertine#Derivative_works|Libertinus Math]] ({{Pkg|libertinus-font}}) – [[Wikipedia:ja:Linux Libertine|Linux Libertine]] ({{Pkg|ttf-linux-libertine}}) のフォークである Libertinus Serif をベースとした数学フォント。&lt;br /&gt;
* [[Wikipedia:ja:STIXフォント事業|STIX フォント]] ({{AUR|otf-stix}}) – STIX は、Times New Roman に似ている、ロイヤリティフリーな代替となるべくデザインされました。現在のバージョンは STIX Two と呼ばれていて、STIX Two Math という数学版が含まれています。&lt;br /&gt;
* [https://www.gust.org.pl/projects/e-foundry/tg-math TeX Gyre math fonts] ({{AUR|tex-gyre-math-fonts}}) – TeX Gyre フォントの数学版 ([[#ファミリー]] を参照)。TeX Gyre Termes Math は Times New Roman の数学版です。&lt;br /&gt;
&lt;br /&gt;
加えて、{{Pkg|texlive-basic}} と {{Pkg|texlive-fontsextra}} には Latin Modern Math や STIX フォントといった多くの数学フォントが含まれています。設定については [[TeX Live#Fontconfig でフォントを利用可能にする]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 他のオペレーティングシステムのフォント ===&lt;br /&gt;
&lt;br /&gt;
* {{AUR|ttf-mac-fonts}} - Apple MacOS TrueType フォント&lt;br /&gt;
&lt;br /&gt;
== 代替フォントの順番 ==&lt;br /&gt;
&lt;br /&gt;
Fontconfig は自動的に要求にあったフォントを選びだします。例えば、英語と日本語が含まれるウィンドウを表示しようとすると、デフォルトのフォントが日本語をサポートしていない場合、日本語を表示できるフォントに切り替わります。&lt;br /&gt;
&lt;br /&gt;
Fontconfig では、各ユーザーは {{ic|$XDG_CONFIG_HOME/fontconfig/fonts.conf}} で代替フォントの順番を設定することができます。&lt;br /&gt;
他の Serif フォントが表示できない場合、特定の日本語フォントを選ぶようにしてほしいときは、ファイルを次のようにします:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE fontconfig SYSTEM &amp;quot;fonts.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;fontconfig&amp;gt;&lt;br /&gt;
 &amp;lt;alias&amp;gt;&lt;br /&gt;
    &amp;lt;family&amp;gt;serif&amp;lt;/family&amp;gt;&lt;br /&gt;
    &amp;lt;prefer&amp;gt;&lt;br /&gt;
      &amp;lt;family&amp;gt;好みのラテン文字 Serif フォント名&amp;lt;/family&amp;gt;&lt;br /&gt;
      &amp;lt;family&amp;gt;日本語フォント名&amp;lt;/family&amp;gt;&lt;br /&gt;
    &amp;lt;/prefer&amp;gt;&lt;br /&gt;
  &amp;lt;/alias&amp;gt;&lt;br /&gt;
 &amp;lt;/fontconfig&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* 日本語ロケールを使用する場合、この設定を機能させるには {{ic|LC_LANG}} を {{ic|und}} に設定する必要があります。さもないと、英語と日本語のテキストの両方とも日本語フォントで描画されます。&lt;br /&gt;
* Fontconfig 設定を変更した後は {{ic|fc-match -a monospace {{!}} head}} を実行して、代替フォントが正しく設定されていることを確認してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
同じように Sans-serif や monospace 用のセクションを作ることもできます。詳しくは fontconfig マニュアルを見て下さい。&lt;br /&gt;
&lt;br /&gt;
[[フォント設定#デフォルトまたは代替フォントを設定する]] も参照。&lt;br /&gt;
&lt;br /&gt;
== フォントエイリアス ==&lt;br /&gt;
&lt;br /&gt;
アプリケーションが似たフォントを使えるようにするために、他のフォントを表すフォントエイリアスが複数用意されています。最も一般的なエイリアスは、セリフ体のフォントを表す {{ic|serif}} (例: DejaVu Serif)、サンセリフ体のフォントを表す {{ic|sans-serif}} (例: DejaVu Sans)、等幅フォントを表す {{ic|monospace}} (例: DejaVu Sans Mono) があります。しかし、エイリアスが表すフォントは変わることがあり、[[KDE]] などの[[デスクトップ環境]]にあるようなフォント管理ツールでは対応関係が示されないことがしばしばです。&lt;br /&gt;
&lt;br /&gt;
エイリアスがどのフォントを示しているのか調べるには次を実行します:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ fc-match monospace|&lt;br /&gt;
DejaVuSansMono.ttf: &amp;quot;DejaVu Sans Mono&amp;quot; &amp;quot;Book&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
この場合 {{ic|DejaVuSansMono.ttf}} が monospace エイリアスによって表示されるフォントです。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== インストールした全てのフォントを一覧する ===&lt;br /&gt;
&lt;br /&gt;
以下のコマンドを使うことで、システム上で利用可能な全ての Fontconfig フォントを一覧表示できます:&lt;br /&gt;
&lt;br /&gt;
 $ fc-list&lt;br /&gt;
&lt;br /&gt;
=== 特定の言語のインストール済みフォントを一覧する ===&lt;br /&gt;
&lt;br /&gt;
アプリケーションやブラウザは、fontconfig の設定と、Unicode テキスト用の利用可能なフォントグリフに基づいて、フォントを選択し描画します。特定の言語用のインストール済みフォントを一覧表示するには、{{ic|1=fc-list :lang=&amp;quot;&#039;&#039;2文字の言語コード&#039;&#039;&amp;quot;}} を実行してください。&lt;br /&gt;
&lt;br /&gt;
例えば、インストール済みのアラビア語フォント及びアラビア語グリフをサポートしているフォントを一覧表示するには:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=$ fc-list -f &#039;%{file}\n&#039; :lang=ar|2=&lt;br /&gt;
/usr/share/fonts/TTF/FreeMono.ttf&lt;br /&gt;
/usr/share/fonts/TTF/DejaVuSansCondensed.ttf&lt;br /&gt;
/usr/share/fonts/truetype/custom/DroidKufi-Bold.ttf&lt;br /&gt;
/usr/share/fonts/TTF/DejaVuSansMono.ttf&lt;br /&gt;
/usr/share/fonts/TTF/FreeSerif.ttf&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 特定の Unicode 文字を持つインストール済みフォントを一覧表示する ===&lt;br /&gt;
&lt;br /&gt;
特定の Unicode コードポイントをサポートする等幅フォントを検索するには:&lt;br /&gt;
&lt;br /&gt;
 $ fc-match -s monospace:charset=1F4A9&lt;br /&gt;
&lt;br /&gt;
=== ターミナルフォントを実行中に設定する ===&lt;br /&gt;
&lt;br /&gt;
[[X resources]] を使用するターミナルエミュレータ ([[xterm]] や [[rxvt-unicode]] など) では、[[Bash/プロンプトのカスタマイズ#Bash のエスケープシーケンス|エスケープシーケンス]]でフォントを設定することができます。具体的には、{{ic|echo -e &amp;quot;\033]710;$font\007&amp;quot;}} でノーマルフォント ({{ic|~/.Xresources}} の {{ic|*font}} に対応) を変更します。{{ic|*boldFont}}、{{ic|*italicFont}}、{{ic|*boldItalicFont}} のフォントファミリを変更するには、{{ic|710}} の部分をそれぞれ {{ic|711}}、{{ic|712}}、{{ic|713}} に変更してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|$font}} は {{ic|~/.Xresources}} と同じ構文を使用し、ターミナルエミュレータがサポートするフォントなら何でも使えます (例: {{ic|1=xft:dejavu sans mono:size=9}})。&lt;br /&gt;
&lt;br /&gt;
=== アプリケーション固有のフォントキャッシュ ===&lt;br /&gt;
&lt;br /&gt;
Matplotlib ({{Pkg|python-matplotlib}}) は独自のフォントキャッシュを使用するので、フォントを更新したら、キャッシュを再生成して新しいフォントを検出させるために、{{ic|~/.matplotlib/fontList.cache}}、{{ic|~/.cache/matplotlib/fontList.cache}}、{{ic|~/.sage/matplotlib-1.2.1/fontList.cache}} などを削除するのを忘れないでください。[https://discourse.matplotlib.org/t/getting-matplotlib-to-recognize-a-new-font/17754]&lt;br /&gt;
&lt;br /&gt;
=== 双方向テキストのサポート ===&lt;br /&gt;
&lt;br /&gt;
右横書き言語に関連するトラブルシューティングについては [[双方向テキスト]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 点字フォントがターミナル内で正しく表示されない ===&lt;br /&gt;
&lt;br /&gt;
点字の[https://www.reddit.com/r/archlinux/comments/gf2vgb/the_braille_fonts_dont_show_properly_anywhere/ レンダリングの問題]がターミナル内で発生する場合は、点字フォントを[[インストール]]して {{Pkg|gnu-free-fonts}} をアンインストールしてみてください。&lt;br /&gt;
&lt;br /&gt;
=== フォント設定に関するアプリケーション固有のヒント ===&lt;br /&gt;
&lt;br /&gt;
==== Emacs ====&lt;br /&gt;
&lt;br /&gt;
Emacs は Linux の標準的なデスクトップアプリケーションとは異なったサイズ計算を行い、Emacs 関連のパッケージは同じ設定フォーマットを使うとは限りません。なので、ポイントサイズや生のピクセルサイズは利用できません。他の値を使ってみてください。&lt;br /&gt;
&lt;br /&gt;
==== Visual Studio Code ====&lt;br /&gt;
&lt;br /&gt;
等幅フォントで特定の文字のスケーリングが正しく行われない問題が発生する場合は、&#039;&#039;&#039;Editor: Experimental Whitespace Rendering&#039;&#039;&#039; を &amp;quot;svg&amp;quot; から &amp;quot;font&amp;quot; に変更してください。これは &amp;quot;Terminus (TTF)&amp;quot; フォントや &amp;quot;IBM 3270&amp;quot; フォントで問題を解決することが知られています。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://behdad.org/text/ State of Text Rendering]&lt;br /&gt;
* [https://fontlibrary.org/en Font Library] - フリーライセンスのフォントライブラリ&lt;br /&gt;
* [https://screenshots.debian.net/packages?search=fonts&amp;amp;show=with screenshots.debian.net のフォント一覧]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Fonts|2024-04-06|802040}}&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%83%AB%E3%83%BC%E3%82%BF%E3%83%BC&amp;diff=37006</id>
		<title>ルーター</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%83%AB%E3%83%BC%E3%82%BF%E3%83%BC&amp;diff=37006"/>
		<updated>2024-04-13T03:09:47Z</updated>

		<summary type="html">&lt;p&gt;Hikali: Archwiki: Keaページへのリンクに変更&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ネットワーク共有]]&lt;br /&gt;
[[Category:セキュリティ]]&lt;br /&gt;
[[Category:ファイアウォール]]&lt;br /&gt;
[[en:Router]]&lt;br /&gt;
[[zh-hans:Router]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|シンプルなステートフルファイアウォール}}&lt;br /&gt;
{{Related|インターネット共有}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
この記事ではコンピュータをインターネットゲートウェイ/ルーターに仕立てる方法を解説しています。ゲートウェイはインターネットに直接接続されるため、&#039;&#039;セキュリティ&#039;&#039;が重要です。外部からアクセスできるサービスを実行するのは好ましくありません。ゲートウェイとして機能するためのサービスだけを実行し、セキュリティ上の穴を作ってしまうおそれがある httpd, ftpd, samba, nfsd などは動かさないようにします。&lt;br /&gt;
&lt;br /&gt;
クロスオーバーケーブルによる PC 間の接続の共有方法については扱っていません。インターネット共有をする方法は、[[インターネット共有]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Note|この記事では、ネットワーク・インタフェースの名前として &#039;&#039;&#039;intern0&#039;&#039;&#039; と &#039;&#039;&#039;extern0&#039;&#039;&#039; を使用しています。その理由は、 [[ルーター#永続的な命名とインターフェイス名の変更|永続的な命名とインターフェイス名の変更]] で説明されています。}}&lt;br /&gt;
&lt;br /&gt;
== ハードウェアの要件 ==&lt;br /&gt;
&lt;br /&gt;
* 最低でも 1GB のディスク容量が必要です。ベースインストールは大体 500MB くらいですが、ウェブキャッシュプロキシなどを使うことを考えて、キャッシュ用に容量を確保しておく方が良いでしょう。&lt;br /&gt;
* 最低でも2つの物理的なネットワークインターフェイスが必要です: ゲートウェイは2つのネットワークを相互に接続します (実際には VLAN インターフェイスを使用して1つの物理インターフェイスを VLAN 対応のスイッチに接続して router-on-a-stick 構成にすることもできますが、この記事では説明しません)。ネットワークは物理的に同一のコンピュータに接続する必要があります。インターフェイスの片方は外部のネットワークに接続し、もう片方は内部のネットワークに接続します。&lt;br /&gt;
* ハブやスイッチ、UTP ケーブルが必要です: 他のコンピュータをゲートウェイに接続するための機器が必要です。&lt;br /&gt;
&lt;br /&gt;
== ネットワークインターフェイスの設定 ==&lt;br /&gt;
&lt;br /&gt;
=== 永続的な命名とインターフェイス名の変更 ===&lt;br /&gt;
&lt;br /&gt;
Systemd は、すべてのインターフェイスに対して、自動的にユニークなインターフェイス名を選択します。これは永続的なもので、リブートしても変わりません。&lt;br /&gt;
しかし、接続するネットワークが異なることを強調するために、インターフェースの名前を変更したい場合があります。このガイドの以下のセクションでは、以下の規約を使用します。&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;intern0&#039;&#039;&#039;:LAN に接続されているネットワークカード。実際のコンピュータでは、enp2s0、enp1s1 などの名前がついているはずです。&lt;br /&gt;
* &#039;&#039;&#039;extern0&#039;&#039;: 外部ネットワーク (または WAN) に接続されたネットワークカードです。enp2s0、enp1s1 などの名称を持つことが多いでしょう。&lt;br /&gt;
&lt;br /&gt;
デバイスの割り当て名は、[[Systemd-networkd# インターフェイスの名前を変更]] にある [[Systemd-networkd]] を使った設定ファイル、または [[ネットワーク設定#インターフェイス名の変更]] にある [[udev]] ルールで変更することができます。この記事は例が豊富なため、上記のような名前を選択するとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
=== IP の設定 ===&lt;br /&gt;
&lt;br /&gt;
==== netctl を使用 ====&lt;br /&gt;
&lt;br /&gt;
ネットワークインターフェイスを設定する必要があります。一番良い設定方法は [[netctl]] プロファイルを使うことです。2つプロファイルを作成してください。&lt;br /&gt;
{{Note|PPPoE だけを使ってインターネットに接続する場合は、extern0-profile を設定・有効化する必要はありません。PPPoE の設定は下を見てください。}}&lt;br /&gt;
* {{ic|/etc/netctl/extern0-profile}}&lt;br /&gt;
 Description=&#039;Public Interface.&#039;&lt;br /&gt;
 Interface=extern0&lt;br /&gt;
 Connection=ethernet&lt;br /&gt;
 IP=&#039;dhcp&#039;&lt;br /&gt;
&lt;br /&gt;
* {{ic|/etc/netctl/intern0-profile}}&lt;br /&gt;
 Description=&#039;Private Interface&#039;&lt;br /&gt;
 Interface=intern0&lt;br /&gt;
 Connection=ethernet&lt;br /&gt;
 IP=&#039;static&#039;&lt;br /&gt;
 Address=(&#039;10.0.0.1/24&#039;)&lt;br /&gt;
&lt;br /&gt;
{{Note|上記の設定では完全なサブセットを対象としています。一部の人間だけが使えるゲートウェイを構築する場合、CIDR のサフィックスを変更して範囲を狭めることができます。例えば /27 にすると 10.0.0.1 から 10.0.0.30 までが割り当てられます。CIDR の計算機はオンライン上に多数存在します。}}&lt;br /&gt;
&lt;br /&gt;
次に netctl でインターフェイスをセットアップします:&lt;br /&gt;
 # netctl enable extern0-profile&lt;br /&gt;
 # netctl enable intern0-profile&lt;br /&gt;
&lt;br /&gt;
==== systemd-networkd を使用 ====&lt;br /&gt;
&lt;br /&gt;
[[systemd-networkd]] を使用すると、ネットワークインターフェイスを簡単に構成できます。&lt;br /&gt;
&lt;br /&gt;
* {{ic|extern0}} インターフェイスに [[systemd-networkd#有線アダプタで DHCP を使用|DHCP クライアント構成]] を適用します。&lt;br /&gt;
* {{ic|intern0}} インターフェイスに [[systemd-networkd#有線アダプタで固定 IP を使用|静的 IP 構成]] を適用します。&lt;br /&gt;
&lt;br /&gt;
設定の詳細と利用可能なオプションの概要については、[[systemd-networkd#設定ファイル]] を参照してください。  {{ic|networkctl reload}} を実行して、設定の変更を適用します。&lt;br /&gt;
&lt;br /&gt;
=== ADSL 接続/PPPoE ===&lt;br /&gt;
&lt;br /&gt;
rp-pppoe を使って、ファイアウォールの {{ic|extern0}} インターフェイスに ADSL モデムを接続して Arch で接続を管理することができます。モデムは&#039;&#039;ブリッジ&#039;&#039;モードに設定してください (ハーフブリッジまたは RFC1483)、そうしないとモデムもルーターとして機能してしまいます。{{pkg|rp-pppoe}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
PPPoE だけを使ってインターネットに接続する場合 (モデムに接続するポート以外に WAN ポートが存在しない場合)、外部の擬似インターフェイスが ppp0 になるので {{ic|extern0-profile}} をセットアップする必要はありません。&lt;br /&gt;
&lt;br /&gt;
==== PPPoE の設定 ====&lt;br /&gt;
&lt;br /&gt;
netctl を使って pppoe 接続のセットアップができます。コピーして編集してください:&lt;br /&gt;
&lt;br /&gt;
 # cp /etc/netctl/examples/pppoe /etc/netctl/&lt;br /&gt;
&lt;br /&gt;
インターフェイスを選択し、編集を開始します。インターフェイスの設定は、モデムに接続するインターフェイスを選択します。PPPoE でしかインターネットに接続しない場合は、おそらく{{ic|extern0}} になるでしょう。残りのフィールドには、ISP の情報を入力します。フィールドの詳細については、{{man|5|netctl.profile}} man page の PPPoE のセクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
== DNS と DHCP ==&lt;br /&gt;
&lt;br /&gt;
以下の比較表では、利用可能な DHCP サーバと機能をリストアップしています:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! サーバ !! DHCPv4 !! DHCPv6 !! IPv6 Router Advertisement !! GUI !! インターフェイス !! ストレージバックエンド !! 備考&lt;br /&gt;
|-&lt;br /&gt;
| [[dhcpd]] || {{Yes}} || {{Yes}} || {{No}} || [https://github.com/Akkadius/glass-isc-dhcp Glass-ISC-DHCP] || ? || ファイル || Kea に取って代わられました。&lt;br /&gt;
|-&lt;br /&gt;
| [[dnsmasq]] || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || ? || ファイル || DNS、PXE、TFTP も。&lt;br /&gt;
|-&lt;br /&gt;
| [[kea]] || {{Yes}} || {{Yes}} || {{No}} || [https://github.com/isc-projects/stork Stork] || REST、RADIUS、NETCONF || ファイル、MySQL、PostgreSQL、Cassandra || DNS も。dhcpd の後継。&lt;br /&gt;
|-&lt;br /&gt;
| [[systemd-networkd]] || {{Yes}} || {{No|https://github.com/systemd/systemd/issues/16039}} || {{Yes}} || {{No}} || ? || ファイル || Systemd と共にインストールされます。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
利用可能な DNS サーバの比較は [[ドメイン名前解決#DNS サーバー]] で見られます。&lt;br /&gt;
&lt;br /&gt;
=== dnsmasq ===&lt;br /&gt;
&lt;br /&gt;
LAN のための DNS と DHCP デーモンとして [[dnsmasq]] を使います。dnsmasq は小規模なネットワーク用に設計されています。[[公式リポジトリ]]から {{Pkg|dnsmasq}} を[[pacman|インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
DHCP サーバーにするには以下のように Dnsmasq の設定が必要です:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/dnsmasq.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
interface=intern0 # make dnsmasq listen for requests only on intern0 (our LAN)&lt;br /&gt;
expand-hosts      # add a domain to simple hostnames in /etc/hosts&lt;br /&gt;
domain=foo.bar    # allow fully qualified domain names for DHCP hosts (needed when&lt;br /&gt;
                  # &amp;quot;expand-hosts&amp;quot; is used)&lt;br /&gt;
dhcp-range=10.0.0.2,10.0.0.255,255.255.255.0,1h # defines a DHCP-range for the LAN: &lt;br /&gt;
                  # from 10.0.0.2 to .255 with a subnet mask of 255.255.255.0 and a&lt;br /&gt;
                  # DHCP lease of 1 hour (change to your own preferences)&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
静的な DHCP リースを追加して、LAN 上のコンピュータの MAC アドレスに対して IP アドレスを割り当てることもできます。その場合、コンピュータが新しいリースを要求すると、常に同一の IP が取得されます。DNS レコードを使用するネットワークサーバーで有用です。特定の MAC アドレスから IP を取得できないように設定することもできます。&lt;br /&gt;
&lt;br /&gt;
設定したら {{ic|dnsmasq.service}} を[[起動]]・[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
=== systemd-networkd 経由の DHCP ===&lt;br /&gt;
&lt;br /&gt;
DHCP サーバとして [[dnsmasq]] の代わりに [[systemd-networkd]] を使うには、{{ic|[DHCPServer]}} セクションを {{ic|intern0}} インタフェース用の設定ファイルに追加します。利用できるオプションは [[Systemd-networkd#%5BDHCPServer%5D]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==接続の共有==&lt;br /&gt;
&lt;br /&gt;
ネットワークインターフェイスを互いに結びつけます。&lt;br /&gt;
&lt;br /&gt;
=== マニュアル ===&lt;br /&gt;
&lt;br /&gt;
まず、パケットが 1 つのネットワーク インターフェイスから別のネットワーク インターフェイスにホップできるようにする必要があります。  このためには、{{man|8|sysctl}} を介してカーネルでパケット転送を有効にする必要があります。詳細は [[インターネット共有#パケット転送の有効化]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|net.**forwarding}} が正しく設定されている (つまり {{ic|1}}) と仮定して、パケットはまだ適切に送受信される必要があります。そのため、外部に面したネットワークとローカルで使用するサブネットの間で IP アドレスを変換する必要があります。この技術は、&amp;quot;マスカレード&amp;quot; と呼ばれます。また、接続を維持し、LAN から WAN への転送を可能にするために、2つの転送ルールが必要です。このタスクでは、[[iptables]] を使用する予定です。&lt;br /&gt;
&lt;br /&gt;
{{ic|extern0}} のインターフェースやパッケージを {{ic|intern0}} から {{ic|extern0}} にマスカレードする方法については、[[インターネット共有#NAT の有効化]] の項を参照してください。その後、{{ic|iptables-save -f /etc/iptables/iptables.rules}} で新しく追加したルールを永続化します。詳細は [[iptables#iptables の設定と実行]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|iptables.service}} を [[起動]] して [[有効化]] します。これでルーターは完全に機能し、トラフィックをルーティングできるようになりました。ルーターは公共のインターネットに面しているので、[[シンプルなステートフルファイアウォール]] を使って追加で保護するのが理にかなっています。&lt;br /&gt;
&lt;br /&gt;
=== systemd-networkd を使用 ===&lt;br /&gt;
&lt;br /&gt;
以前説明した {{ic|intern0}} のネットワーク設定を、{{ic|1=IPMasquerade=ipv4}} オプションを {{ic|[Network]}} セクションに含むように修正または作成します。この設定により、すべてのインターフェイスでパケット転送が暗黙のうちに有効になります ({{man|5|systemd.network}} を参照してください) 設定例については [[Systemd-networkd#%5BDHCPServer%5D]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Shorewall との接続共有 ===&lt;br /&gt;
&lt;br /&gt;
iptables フロントエンドの Shorewall を使うことで簡単に設定できます。詳しくは [[Shorewall]] を見てください。&lt;br /&gt;
&lt;br /&gt;
== IPv6 のヒント ==&lt;br /&gt;
&lt;br /&gt;
役に立つ読み物: [[IPv6]] と [[wikipedia:ja:IPv6|wikipedia IPv6]]&lt;br /&gt;
&lt;br /&gt;
=== 一意のローカルアドレス ===&lt;br /&gt;
&lt;br /&gt;
ISP から IPv6 アドレスを取得していない場合でも、ルーターを IPv6 モードで使用できます。IPv6 を無効にしない限り、すべてのインターフェイスには一意の {{ic|fe80::/10}} アドレスが割り当てられているはずです。&lt;br /&gt;
&lt;br /&gt;
内部ネットワーク用には、{{ic|fc00::/7}} ブロックが予約されています。これらのアドレスは一意であることが保証されており、オープンなインターネットからルーティングできないようになっています。{{ic|fc00::/7}} ブロックに属するアドレスは、[[wikipedia:Unique_local_address|Unique Local Addresses]] と呼ばれています。まずは、[https://www.simpledns.com/private-ipv6.aspx ULA/64ブロックを生成する] して、ネットワークで使用します。この例では {{ic|fd00:aaaa:bbbb:cccc::/64}} を使用することにします。まず、内部インターフェイスに静的 IPv6 を割り当てる必要があります。上記で作成した{{ic|intern0-profile}} を修正し、以下の行を追加します&lt;br /&gt;
&lt;br /&gt;
  Address6=(&#039;fd00:aaaa:bbbb:cccc::1/64&#039;)&lt;br /&gt;
&lt;br /&gt;
これにより、ULA が内部インターフェイスに追加されます。ルーターに関する限り、設定する必要があるのはこれだけです。&lt;br /&gt;
&lt;br /&gt;
=== グローバルユニキャストアドレス ===&lt;br /&gt;
&lt;br /&gt;
ISP または WAN ネットワークが IPv6 インターネットにアクセスできる場合、さらにルーターにグローバルリンクアドレスを割り当て、[[#ルーター広告およびステートレス自動設定 (SLAAC)|SLAAC]] を通じて内部ネットワークに伝播させることができます。グローバルユニキャストプレフィックスは通常、&#039;&#039;静的&#039;&#039; か &#039;&#039;プレフィックス委任&#039;&#039; によって提供されます。&lt;br /&gt;
&lt;br /&gt;
==== 静的 IPv6 プレフィックス ====&lt;br /&gt;
&lt;br /&gt;
ISP から静的プレフィックスが提供されている場合は、{{ic|/etc/netctl/extern0-profile}} を編集して、提供された IPv6 と IPv6 プレフィックス (通常は /64) を追加します。&lt;br /&gt;
&lt;br /&gt;
  Address6=(&#039;2002:1:2:3:4:5:6:7/64&#039;)&lt;br /&gt;
&lt;br /&gt;
上記の ULA アドレスに加えて、これを使用できます。&lt;br /&gt;
&lt;br /&gt;
==== DHCPv6-PD による IPv6 プレフィックスの取得 ====&lt;br /&gt;
&lt;br /&gt;
ISP がプレフィックス委譲で IPv6 を扱っている場合は、[[IPv6#プレフィックス委譲 (DHCPv6-PD)]] の指示に従って、ルーターを適切に設定することができます。この記事の規約に従って、WANインターフェースは {{ic|extern0}} です。(PPPoE で接続している場合は{{ic|ppp0}})、LAN インタフェースは {{ic|intern0}} です。&lt;br /&gt;
&lt;br /&gt;
=== ルーター広告およびステートレス自動設定 (SLAAC) ===&lt;br /&gt;
&lt;br /&gt;
ネットワーククライアントに IPv6 を適切に配布するために、広告デーモンを使用する必要があります。{{ic|radvd}} の設定方法は、[[IPv6#ゲートウェイ|IPv6 のメイン記事]] の詳細に従ってください。このガイドの規約では、LAN に面したインターフェイスは {{ic|intern0}} とします。すべてのプレフィックスをアドバタイズするか、ローカルネットワークに割り当てるプレフィックスを選択することができます。&lt;br /&gt;
&lt;br /&gt;
== その他の設定 ==&lt;br /&gt;
&lt;br /&gt;
=== UPnP ===&lt;br /&gt;
&lt;br /&gt;
shorewall の上記設定に [[Wikipedia:UPnP|UPnP]] のサポートは含まれていません。UPnP を使用すると LAN の中からゲートウェイに攻撃を受けた場合に脆弱になるので UPnP の使用は非推奨です。ただし、アプリケーションによっては UPnP が必要となるケースもあります。&lt;br /&gt;
&lt;br /&gt;
ルーターで UPnP を有効にするには、UPnP インターネットゲートウェイデーモン (IGD) をインストールする必要があります。{{Pkg|miniupnpd}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
詳細は [http://www.shorewall.net/UPnP.html Shorewall guide on UPnP] を読んで下さい。&lt;br /&gt;
&lt;br /&gt;
===リモート管理===&lt;br /&gt;
&lt;br /&gt;
[[OpenSSH]] を使うことでルーターをリモートで管理することができます。&amp;quot;ヘッドレス&amp;quot; (モニタや入力デバイスを接続しない) に動かしたいときに有用です。&lt;br /&gt;
&lt;br /&gt;
=== ウェブキャッシュプロキシ ===&lt;br /&gt;
&lt;br /&gt;
ブラウジングを高速化したり、セキュリティ層を追加したりするための Web プロキシのセットアップについては、[[Squid]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 時刻サーバー ===&lt;br /&gt;
&lt;br /&gt;
ルーターをタイムサーバーとして使用するには、利用可能なネットワークタイムプロトコル (NTP) サーバーの実装のために [[システム時刻#時刻同期]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
その後、NTP トラフィックの出入りを許可するように shorewall または iptables を設定します。&lt;br /&gt;
&lt;br /&gt;
=== コンテンツフィルタリング ===&lt;br /&gt;
&lt;br /&gt;
コンテンツフィルタリングが必要なときは [[DansGuardian]] や [[Privoxy]] をインストール・設定してください。&lt;br /&gt;
&lt;br /&gt;
=== トラフィックシェーピング ===&lt;br /&gt;
&lt;br /&gt;
トラフィックシェーピングは LAN 上に複数のマシンがある場合にとても便利です。トラフィックのタイプにあわせて優先度を割り当てます。インタラクティブなトラフィック (ssh やオンラインゲーム) は高い優先度を必要としますが、P2P のトラフィックは一番優先度が低くても問題ありません。&lt;br /&gt;
&lt;br /&gt;
==== shorewall によるトラフィックシェーピング ====&lt;br /&gt;
&lt;br /&gt;
[[Shorewall#トラフィックシェーピング]] を読んで下さい。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [[シンプルなステートフルファイアウォール]]&lt;br /&gt;
* [[インターネット共有]]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Dhcpd&amp;diff=37005</id>
		<title>Dhcpd</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Dhcpd&amp;diff=37005"/>
		<updated>2024-04-13T02:35:16Z</updated>

		<summary type="html">&lt;p&gt;Hikali: Archwiki: Keaページへのリンクに変更&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:DHCP]]&lt;br /&gt;
[[de:Dhcpd]]&lt;br /&gt;
[[en:Dhcpd]]&lt;br /&gt;
[[pt:Dhcpd]]&lt;br /&gt;
[[ru:Dhcpd]]&lt;br /&gt;
[[zh-hans:Dhcpd]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|dhcpcd}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://www.isc.org/dhcp/ dhcpd] は、古い Internet Systems Consortium (ISC) DHCP サーバーです。&#039;&#039;dhcpd&#039;&#039; は 2023 年 1 月時点で保守されなくなっていることに注意してください。ISC は、[[Kea]] を正式な後継者として推進します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&#039;&#039;dhcpd&#039;&#039; (DHCP &#039;&#039;&#039;(サーバー)&#039;&#039;&#039; デーモン) は [[dhcpcd]] (DHCP &#039;&#039;&#039;クライアント&#039;&#039;&#039;デーモン) とは違います。}}&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
[[公式リポジトリ]]の {{pkg|dhcp}} パッケージを[[インストール]]してください。&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;dhcpd&#039;&#039; にはユニットファイル {{ic|dhcpd4.service}} が含まれており、これを使ってデーモンを[[有効化|制御]]できます。全ての[[ネットワーク設定#ネットワークインターフェース|ネットワークインターフェイス]]でデーモンが起動します。[[#一つのインターフェイスだけを使う]] も見て下さい。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
使用したいインターフェイスに固定 IPv4 アドレスを割り当ててください (このページでは例として {{ic|eth0}} を使います)。アドレスの最初の3バイトを他のインターフェイスのアドレスと全く同じにすることはできません。&lt;br /&gt;
&lt;br /&gt;
 # ip link set up dev eth0&lt;br /&gt;
 # ip addr add 139.96.30.100/24 dev eth0 # arbitrary address&lt;br /&gt;
&lt;br /&gt;
{{Tip|通常、プライベートネットワークでは、特別に予約されている以下の3つのサブネットのどれかを使用します。インターネット上のホストと衝突することはありません:&lt;br /&gt;
* {{ic|192.168/16}} (サブネット {{ic|192.168.0.0}}, ネットマスク {{ic|255.255.0.0}})&lt;br /&gt;
* {{ic|172.16/12}} (サブネット {{ic|172.16.0.0}}, ネットマスク {{ic|255.240.0.0}})&lt;br /&gt;
* {{ic|10/8}} (大規模ネットワーク用; サブネット {{ic|10.0.0.0}}, ネットマスク {{ic|255.0.0.0}})&lt;br /&gt;
[https://www.ietf.org/rfc/rfc1918.txt RFC 1918] も参照。}}&lt;br /&gt;
&lt;br /&gt;
起動時に固定 ip を割り当てるには、[[ネットワーク設定#固定 IP アドレス]]を参照。&lt;br /&gt;
&lt;br /&gt;
デフォルトの {{ic|dhcpd.conf}} にはアンコメントされている例がたくさん含まれているので、ファイルを移動してください:&lt;br /&gt;
&lt;br /&gt;
 # mv /etc/dhcpd.conf /etc/dhcpd.conf.example&lt;br /&gt;
&lt;br /&gt;
最小限の設定ファイルは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/dhcpd.conf|&lt;br /&gt;
option domain-name-servers 8.8.8.8, 8.8.4.4;&lt;br /&gt;
option subnet-mask 255.255.255.0;&lt;br /&gt;
option routers 139.96.30.100;&lt;br /&gt;
subnet 139.96.30.0 netmask 255.255.255.0 {&lt;br /&gt;
  range 139.96.30.150 139.96.30.250;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
特定のデバイスで固定 IP アドレスを使う必要がある場合、以下の構文を使います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/dhcpd.conf|&lt;br /&gt;
option domain-name-servers 8.8.8.8, 8.8.4.4;&lt;br /&gt;
option subnet-mask 255.255.255.0;&lt;br /&gt;
option routers 139.96.30.100;&lt;br /&gt;
subnet 139.96.30.0 netmask 255.255.255.0 {&lt;br /&gt;
  range 139.96.30.150 139.96.30.250;&lt;br /&gt;
&lt;br /&gt;
  host macbookpro{&lt;br /&gt;
   hardware ethernet 70:56:81:22:33:44;&lt;br /&gt;
   fixed-address 139.96.30.199;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|domain-name-servers}} オプションにはクライアントに供給する DNS サーバーのアドレスを記入します。上の例では Google のパブリック DNS サーバーを使っています。(ISP などによる) ローカルの DNS サーバーがある場合、それを使ってください。ローカルマシンで DNS を自分で設定している場合、そのアドレスを使ってください (例: {{ic|139.96.30.100}})。&lt;br /&gt;
&lt;br /&gt;
{{ic|subnet-mask}} と {{ic|routers}} はサブネットマスクとサブネット上の利用可能なルーターのリストを定義します。小規模なネットワークであれば大抵は {{ic|255.255.255.0}} をマスクとして、ルーターとして DHCP サーバーを設定しているマシンの IP アドレスを指定します。&lt;br /&gt;
&lt;br /&gt;
{{ic|subnet}} ブロックには各サブネットのオプションを定義します。&#039;&#039;dhcpd&#039;&#039; が動作するネットワークインターフェイスにマッピングされます。上記の場合、サブネット {{ic|139.96.30.0/24}} でインターフェイス {{ic|eth0}} を使用して、利用可能な IP アドレスの範囲を定義しています。この範囲のアドレスが接続してきたクライアントに割り当てられます。&lt;br /&gt;
&lt;br /&gt;
設定後、[[Systemd#ユニット使う|systemctl]] を使って {{ic|dhcpd4.service}} を起動することで &#039;&#039;dhcpd&#039;&#039; デーモンを起動できます。任意で、ブート時に自動的に起動するように有効化してください。&lt;br /&gt;
&lt;br /&gt;
=== 一つのインターフェイスだけを使う ===&lt;br /&gt;
既にコンピュータがネットワークの一部となっている場合、他のネットワークからマシンに ip アドレスを付与すると問題になる可能性があります。dhcpd を設定したり [[Systemd#ユニットを使う|systemctl]] を使ってデーモンとして dhcpd を起動することで使用するインターフェイスを一つに絞ることができます。&lt;br /&gt;
&lt;br /&gt;
==== dhcpd の設定 ====&lt;br /&gt;
インターフェイスを除外するには、除外したいインターフェイスでサブネットの空の宣言を作成する必要があります。&lt;br /&gt;
&lt;br /&gt;
設定ファイルを編集することで作成できます (例):&lt;br /&gt;
{{hc|/etc/dhcpd.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# No DHCP service in DMZ network (192.168.2.0/24)&lt;br /&gt;
subnet 192.168.2.0 netmask 255.255.255.0 {&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== サービスファイル ====&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;dhcpd&#039;&#039; によって提供されるデフォルトのサービスファイルはインターフェイスを指定しません。次のように、{{ic|dhcpd4.service}} に [[ドロップインファイル]] を使用します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/dhcpd4.service.d/override.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/bin/dhcpd -4 -q -cf /etc/dhcpd.conf -pf /run/dhcpd4/dhcpd.pid %I&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
これにより、{{ic|dhcpd4.service}} をテンプレートユニットとして使用し、&#039;&#039;dhcpd&#039;&#039; を特定のインターフェイスにバインドできるようになります。たとえば、{{ic|dhcpd4@&#039;&#039;eth0&#039;&#039;.service}}、&#039;&#039;eth0&#039;&#039; は [https://freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames で最初に列挙されたイーサネットデバイス] です。&lt;br /&gt;
&lt;br /&gt;
=== PXE ===&lt;br /&gt;
&lt;br /&gt;
PXE の設定は以下の2つのオプションで行います:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/dhcpd.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
next-server 192.168.0.2;&lt;br /&gt;
filename &amp;quot;/pxelinux.0&amp;quot;;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
上記のセクションは {{ic|subnet}} 全体の中か {{ic|host}} の定義の中のどちらかに記述できます。{{ic|next-server}} は TFTP サーバーの IP に、{{ic|filename}} は起動するイメージのファイル名に置き換えてください。詳しくは [[PXE]] を参照。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://kb.isc.org/docs/aa-00333 ISC DHCP ドキュメント]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Kea&amp;diff=37004</id>
		<title>Kea</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Kea&amp;diff=37004"/>
		<updated>2024-04-13T02:26:38Z</updated>

		<summary type="html">&lt;p&gt;Hikali: 英語版から転載&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:DHCP]]&lt;br /&gt;
[[en:Kea]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|dhcpcd}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[https://www.isc.org/kea/ Kea] は、[https://www.isc.org/ Internet Systems Consortium (ISC) ] によって開発されている最先端のDHCPサーバーです。&lt;br /&gt;
古い [https://www.isc.org/dhcp/ dhcpd] は [https://www.isc.org/blogs/isc-dhcp-eol/ サポートが終了しました ]。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{pkg|kea}} パッケージを[[インストール]]してください。&lt;br /&gt;
追加のドキュメントについては、{{pkg|kea-docs}}を[[インストール]]してください。&lt;br /&gt;
任意の依存パッケージは:&lt;br /&gt;
* {{pkg|mariadb}} データベースのバックエンド&lt;br /&gt;
* {{pkg|postgresql}} データベースのバックエンド&lt;br /&gt;
* {{pkg|krb5}} ケルベロスのサポート&lt;br /&gt;
* {{pkg|python}} kea-shell &lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&#039;&#039;kea&#039;&#039; には4つの [[systemd]] ユニットファイルが含まれています:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! ユニットファイル !! 目的&lt;br /&gt;
|-&lt;br /&gt;
| kea-dhcp4.service || IPv4 DHCPデーモン&lt;br /&gt;
|-&lt;br /&gt;
| kea-dhcp6.service || IPv6 DHCPデーモン&lt;br /&gt;
|-&lt;br /&gt;
| kea-dhcp-ddns.service || DNSアップデートデーモン&lt;br /&gt;
|-&lt;br /&gt;
| kea-ctrl-agent.service || Keaサーバー管理のためのRESTインターフェイス&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
設定ファイルは {{ic|/etc/kea}} にあります。 設定ファイルの記述には JSON を用います。&lt;br /&gt;
次の例にまだ含まれていない特別な設定に関しては、[https://kea.readthedocs.io/ Kea documentation] を参照してください。 &lt;br /&gt;
&lt;br /&gt;
=== IPv4 DHCP ===&lt;br /&gt;
IPv4 DHCP を使用するには、設定ファイル {{ic|/etc/kea/kea-dhcp4.conf}} を記述し、 {{ic|kea-dhcp4.service}} を[[有効化]]して[[起動]]してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|通常、プライベートネットワークでは、特別に予約されている以下の3つのサブネットのどれかを使用します。インターネット上のホストと衝突することはありません: &lt;br /&gt;
&lt;br /&gt;
* {{ic|192.168/16}} (サブネット {{ic|192.168.0.0}}, ネットマスク {{ic|255.255.0.0}})&lt;br /&gt;
* {{ic|172.16/12}} (サブネット {{ic|172.16.0.0}}, ネットマスク {{ic|255.240.0.0}})&lt;br /&gt;
* {{ic|10/8}} (大規模ネットワーク用; サブネット {{ic|10.0.0.0}}, ネットマスク {{ic|255.0.0.0}})&lt;br /&gt;
&lt;br /&gt;
[[RFC:1918|RFC 1918]] も参照してください。&lt;br /&gt;
}}&lt;br /&gt;
Kea がリッスンしているインターフェイスには必ず静的 IP アドレスを割り当ててください。&lt;br /&gt;
&lt;br /&gt;
==== 設定例 ====&lt;br /&gt;
この例の仮定:&lt;br /&gt;
&lt;br /&gt;
* The net is {{ic|192.168.0.0/24}}&lt;br /&gt;
* DNS server has the IP {{ic|192.168.0.1/24}}&lt;br /&gt;
* Gateway has the IP {{ic|192.168.0.254/24}}&lt;br /&gt;
* Static IP of the DHCP server network interface {{ic|eth0}} is {{ic|192.168.0.253/24}}&lt;br /&gt;
* Kea should provide IPs from {{ic|192.168.0.100/24}} to {{ic|192.168.0.199/24}}&lt;br /&gt;
&lt;br /&gt;
最小限の設定ファイル {{ic|/etc/kea/kea-dhcp4.conf}} は以下のようになります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/kea/kea-dhcp4.conf|&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Dhcp4&amp;quot;: {&lt;br /&gt;
        &amp;quot;interfaces-config&amp;quot;: {&lt;br /&gt;
            &amp;quot;interfaces&amp;quot;: [ &amp;quot;enp1s0/192.168.0.253&amp;quot; ],&lt;br /&gt;
            &amp;quot;dhcp-socket-type&amp;quot;: &amp;quot;raw&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
&lt;br /&gt;
        &amp;quot;subnet4&amp;quot;: [&lt;br /&gt;
            {&lt;br /&gt;
                &amp;quot;id&amp;quot;: 1,&lt;br /&gt;
                &amp;quot;subnet&amp;quot;: &amp;quot;192.168.0.0/24&amp;quot;,&lt;br /&gt;
                &amp;quot;pools&amp;quot;: [ { &amp;quot;pool&amp;quot;: &amp;quot;192.168.0.100 - 192.168.0.199&amp;quot; } ],&lt;br /&gt;
                &amp;quot;option-data&amp;quot;: [&lt;br /&gt;
                    {&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;routers&amp;quot;,&lt;br /&gt;
                        &amp;quot;data&amp;quot;: &amp;quot;192.168.0.254&amp;quot;&lt;br /&gt;
                    },&lt;br /&gt;
                    {&lt;br /&gt;
                        &amp;quot;name&amp;quot;: &amp;quot;domain-name-servers&amp;quot;,&lt;br /&gt;
                        &amp;quot;data&amp;quot;: &amp;quot;192.168.0.1&amp;quot;&lt;br /&gt;
                    }&lt;br /&gt;
                ]&lt;br /&gt;
            }&lt;br /&gt;
        ]&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
以下コマンドを実行して、設定ファイルにエラーがないかを確認できます:&lt;br /&gt;
 # kea-dhcp4 -t /etc/kea/kea-dhcp4.conf&lt;br /&gt;
&lt;br /&gt;
問題がなければ Kea を[[有効化]]して[[起動]]します:&lt;br /&gt;
 # systemctl enable kea --now&lt;br /&gt;
&lt;br /&gt;
次のコマンドを実行して、Kea のログ出力を確認します:&lt;br /&gt;
 # journalctl -u kea-dhcp4.service&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E4%B8%80%E8%A6%A7/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=36646</id>
		<title>アプリケーション一覧/セキュリティ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E4%B8%80%E8%A6%A7/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=36646"/>
		<updated>2024-03-27T05:35:25Z</updated>

		<summary type="html">&lt;p&gt;Hikali: /* スクリーンロック */ 誤字の修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:アプリケーション]]&lt;br /&gt;
[[カテゴリ:セキュリティ]]&lt;br /&gt;
[[Category:ソフトウェア一覧]]&lt;br /&gt;
[[en:List of applications/Security]]&lt;br /&gt;
[[es:List of applications (Español)/Security]]&lt;br /&gt;
[[it:List of applications (Italiano)/Security]]&lt;br /&gt;
[[pt:List of applications (Português)/Security]]&lt;br /&gt;
[[ru:List of applications (Русский)/Security]]&lt;br /&gt;
[[zh-hans:List of applications (简体中文)/Security]]&lt;br /&gt;
[[zh-hant:List of applications (正體中文)/Security]]&lt;br /&gt;
{{List of Applications navigation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== セキュリティ ==&lt;br /&gt;
&lt;br /&gt;
詳しいガイドは、ArchWiki のメインページを見て下さい、[[セキュリティ]]。&lt;br /&gt;
&lt;br /&gt;
=== ネットワークセキュリティ ===&lt;br /&gt;
&lt;br /&gt;
See also [[Wikipedia:Comparison of packet analyzers]].&lt;br /&gt;
&lt;br /&gt;
* {{App|airgeddon|Multi-use bash script to audit wireless networks|https://github.com/v1s1t0r1sh3r3/airgeddon|{{AUR|airgeddon-git}}}}&lt;br /&gt;
* {{App|[[Wikipedia:Arpwatch|Arpwatch]]|Ethernet の活動を監視し Ethernet/IP アドレスペアリングのデータベースを保持するツール。|https://ee.lbl.gov/|{{Pkg|arpwatch}}}}&lt;br /&gt;
* {{App|bettercap|Swiss army knife for network attacks and monitoring.|https://www.bettercap.org/|{{Pkg|bettercap}}}}&lt;br /&gt;
* {{App|darkstat|Captures network traffic, calculates statistics about usage, and serves reports over HTTP.|https://unix4lyfe.org/darkstat/|{{Pkg|darkstat}}}}&lt;br /&gt;
* {{App|[[Wikipedia:dSniff|dsniff]]|Collection of tools for network auditing and penetration testing.|https://www.monkey.org/~dugsong/dsniff/|{{Pkg|dsniff}}}}&lt;br /&gt;
* {{App|[[Wikipedia:EtherApe|EtherApe]]|etherman を手本に作成されたグラフィカルネットワークモニター。Featuring link layer, IP and TCP modes, ネットワークの活動状態をグラフィカルに表示します。Hosts and links change in size with traffic. Color coded protocols display.|https://etherape.sourceforge.io/|{{Pkg|etherape}}}}&lt;br /&gt;
* {{App|[[Wikipedia:Ettercap (software)|Ettercap]]|Multipurpose Network sniffer/analyser/interceptor/logger.|https://ettercap.github.io/ettercap/|CLI: {{Pkg|ettercap}}, GUI: {{Pkg|ettercap-gtk}}}}&lt;br /&gt;
* {{App|GNOME Network Tools|GNOME interface for various networking tools.|https://gitlab.gnome.org/GNOME/gnome-nettool|{{Pkg|gnome-nettool}}}}&lt;br /&gt;
* {{App|[[Honeyd]]|コンピュータネットワーク上に複数の仮想ホストを設定・起動するためのツール。||http://www.honeyd.org/|{{AUR|honeyd}}}}&lt;br /&gt;
* {{App|hping|Command-line oriented TCP/IP packet assembler/analyzer.|http://hping.org/|{{Pkg|hping}}}}&lt;br /&gt;
* {{App|IPTraf|コンソールベースのネットワークモニタリングユーティリティ。|https://sourceforge.net/projects/iptraf-ng/|{{Pkg|iptraf-ng}}}}&lt;br /&gt;
* {{App|jnettop|top-like console network traffic visualizer.|https://sourceforge.net/projects/jnettop/|{{Pkg|jnettop}}}}&lt;br /&gt;
* {{App|[[Wikipedia:justniffer|justniffer]]|Network protocol analyzer that captures network traffic and produces logs in a customized way, can emulate Apache web server log files, track response times and extract all &amp;quot;intercepted&amp;quot; files from the HTTP traffic.|http://justniffer.sourceforge.net/|{{AUR|justniffer}}}}&lt;br /&gt;
* {{App|Kismet|802.11 layer2 ワイヤレスネットワークの検出・キャプチャ・侵入検知システム。|https://www.kismetwireless.net/|{{Pkg|kismet}}}}&lt;br /&gt;
* {{App|LinSSID|Graphical wireless scanner.|https://sourceforge.net/projects/linssid/|{{Pkg|linssid}}}}&lt;br /&gt;
* {{App|Nemesis|コマンドラインのネットワークパケットクラフト・インジェクションツール。|http://nemesis.sourceforge.net/|{{AUR|nemesis}}}}&lt;br /&gt;
* {{App|Net Activity Viewer|Graphical network connections viewer, similar in functionality with Netstat.|http://netactview.sourceforge.net/|{{AUR|netactview}}}}&lt;br /&gt;
* {{App|[[Wikipedia:netsniff-ng|netsniff-ng]]|High performance Linux network sniffer for packet inspection.|http://netsniff-ng.org/|{{Pkg|netsniff-ng}}}}&lt;br /&gt;
* {{App|[[Wikipedia:ngrep|ngrep]]|grep-like utility that allows you to search for network packets on an interface.|https://github.com/jpr5/ngrep|{{Pkg|ngrep}}}}&lt;br /&gt;
* {{App|[[Nmap]]|コンピュータネットワーク上のホストとサービスを探しネットワークの&amp;quot;マップ&amp;quot;を作るために使われるセキュリティスキャナ。|https://nmap.org/|CLI: {{Pkg|nmap}}, GUI: {{AUR|zenmap}}}}&lt;br /&gt;
* {{App|[[Ntop]]|top がプロセスの動きを表示するように、ネットワークの使用を表示するためのネットワーク監視ツール。|https://www.ntop.org/|{{AUR|ntop}}}}&lt;br /&gt;
* {{App|pyNeighborhood|GTK-based SMB/CIFS browsing utility.|https://launchpad.net/pyneighborhood|{{AUR|pyneighborhood}}}}&lt;br /&gt;
* {{App|Smb4K|Advanced network neighborhood browser and Samba share mounting utility for KDE.|https://smb4k.sourceforge.io/|{{Pkg|smb4k}}}}&lt;br /&gt;
* {{App|[[Snort]]|ネットワーク侵入防止・検知システム。|https://www.snort.org/|{{AUR|snort}}}}&lt;br /&gt;
* {{App|Spectools|Wi-Spy デバイスなどのハードウェアのスペクトラムアナライザとして使えるユーティリティ集。|https://www.kismetwireless.net/static/spectools/|{{AUR|spectools}}}}&lt;br /&gt;
* {{App|[[Sshguard]]|ブルートフォース攻撃から SSH などのサービスを防護する Fail2ban に似たデーモン。|https://www.sshguard.net/|{{Pkg|sshguard}}}}&lt;br /&gt;
* {{App|[[Suricata]]|高性能なネットワーク IDS, IPS, Network Security Monitoring エンジン。|https://suricata-ids.org/|{{AUR|suricata}}}}&lt;br /&gt;
* {{App|[[:en:Network Debugging#Tcpdump|Tcpdump]]|コンソールベースのパケットアナライザで、ネットワーク越しに転送された TCP/IP などのパケットを傍受して表示することができます。|https://www.tcpdump.org/|{{Pkg|tcpdump}}}}&lt;br /&gt;
* {{App|[[vnStat]]|選択したインターフェースのトラフィックをログする、コンソールベースのネットワークトラフィックモニタ。|https://humdi.net/vnstat/|{{Pkg|vnstat}}}}&lt;br /&gt;
* {{App|What IP|Small GTK application to get info on your IP.|https://gabmus.gitlab.io/whatip/|{{AUR|whatip}}}}&lt;br /&gt;
* {{App|wifiphisher|Fast automated phishing attacks against WPA networks.|https://github.com/wifiphisher/wifiphisher|{{AUR|wifiphisher-git}}{{Broken package link|package not found}}}}&lt;br /&gt;
* {{App|[[Wireshark]]|コンピュータネットワークで動いているトラフィックを見るためのネットワークプロトコルアナライザー。|https://www.wireshark.org/|CLI: {{Pkg|wireshark-cli}}, GUI: {{Pkg|wireshark-qt}}}}&lt;br /&gt;
* {{App|[[Wikipedia:Xplico|Xplico]]|Network forensics analysis tool (NFAT), which is a software that reconstructs the contents of acquisitions performed with a packet sniffer.|https://www.xplico.org/|{{AUR|xplico}}}}&lt;br /&gt;
* {{App|Zeek|Powerful network analysis framework that is much different from the typical IDS you may know.|https://zeek.org/|{{AUR|zeek}}}}&lt;br /&gt;
&lt;br /&gt;
=== ファイアウォール ===&lt;br /&gt;
&lt;br /&gt;
See [[iptables#Front-ends]].&lt;br /&gt;
&lt;br /&gt;
=== 脅威と脆弱性保護 ===&lt;br /&gt;
&lt;br /&gt;
* {{App|AFICK|ファイルシステムの変更を監視して侵入を検知するセキュリティツール。|http://afick.sourceforge.net/|{{AUR|afick}}}}&lt;br /&gt;
* {{App|[[Wikipedia:Lynis|Lynis]]|Unix/Linux システムを防護するセキュリティ・システム監査ツール。|https://cisofy.com/lynis/|{{Pkg|lynis}}}}&lt;br /&gt;
* {{App|[[Metasploit Framework]]|exploit コードを開発・テスト・使用するための高度なオープンソースプラットフォーム。|https://www.metasploit.com/|{{Pkg|metasploit}}}}&lt;br /&gt;
* {{App|[[Nessus]]|総合的な脆弱性スキャンプログラム。|https://www.tenable.com/products/nessus|{{AUR|nessus}}}}&lt;br /&gt;
* {{App|[[OpenVAS]]|脆弱性をスキャンして管理する包括的かつ強力なソリューションを提供する複数のサービスとツールからなるフレームワーク。FOSS Nessus のフォーク。|https://www.openvas.org/|{{AUR|openvas-scanner}}}}&lt;br /&gt;
* {{App|OSSEC|オープンソースのホストベースの侵入検知システム。ログを解析、ファイルの整合性を確認、ポリシーを確認、rootkit を検出、リアルタイムの改変に対応します。|https://ossec.github.io/|{{AUR|ossec-local}} {{AUR|ossec-server}}}}&lt;br /&gt;
* {{App|Samhain|ホストベースの侵入検知システム (HIDS)。ファイルの整合性の確認、ログファイルの監視・解析、rootkit の検出、ポートの監視、危険な SUID 実行ファイルや隠しプロセスを検出します。|https://www.la-samhna.de/samhain/index.html|{{AUR|samhain-client}}, {{AUR|samhain-server}}, {{AUR|samhain-standalone}}}}&lt;br /&gt;
* {{App|[[Wikipedia:Tiger (security software)|Tiger]]|セキュリティ監査と侵入検知システムの両方の役割を果たすことができるセキュリティツール。|https://www.nongnu.org/tiger/|{{AUR|tiger}}}}&lt;br /&gt;
* {{App|[[Wikipedia:Open Source Tripwire|Tripwire]]|侵入検知システム。|https://github.com/Tripwire/tripwire-open-source|{{AUR|tripwire-git}}}}&lt;br /&gt;
&lt;br /&gt;
=== ファイルセキュリティ ===&lt;br /&gt;
&lt;br /&gt;
* {{App|[[AIDE]]|ファイルとディレクトリの整合性チェッカー。|https://aide.github.io|{{AUR|aide}}}}&lt;br /&gt;
* {{App|[[Logwatch]]|カスタマイズできるログ分析システム。|https://sourceforge.net/projects/logwatch/|{{Pkg|logwatch}}}}&lt;br /&gt;
&lt;br /&gt;
=== アンチマルウェア ===&lt;br /&gt;
&lt;br /&gt;
* {{App|[[ClamAV]]|オープンソースのアンチウイルスエンジン。トロイの木馬、ウイルス、マルウェアなどの危険なプログラムを検出します。|https://www.clamav.net/|{{Pkg|clamav}}}}&lt;br /&gt;
* {{App|ClamTk|Graphical front-end for ClamAV using Perl and Gtk libraries. It is designed to be an easy-to-use, lightweight, on-demand antivirus scanner for Linux systems.|https://gitlab.com/dave_m/clamtk/|{{Pkg|clamtk}}, Nautilus plugin: {{AUR|clamtk-gnome}}, MATE plugin: {{AUR|clamtk-mate}}{{Broken package link|package not found}}, Thunar plugin: {{AUR|thunar-sendto-clamtk}}}}&lt;br /&gt;
* {{App|Linux Malware Detect||共有ホスト環境の脅威に対応するために作られたマルウェアスキャナ。|https://www.rfxn.com/projects/linux-malware-detect/|{{AUR|maldet}}}}&lt;br /&gt;
* {{App|Rootkit Hunter|rootkit などの招かれざるツールの存在をチェックします。|http://rkhunter.sourceforge.net/|{{Pkg|rkhunter}}}}&lt;br /&gt;
* {{App|Hostsblock|A script that downloads, sorts, and compiles multiple ad- and malware-blocking {{ic|hosts}} files.|https://gaenserich.github.io/hostsblock/|{{AUR|hostsblock}}}}&lt;br /&gt;
&lt;br /&gt;
=== スクリーンロック ===&lt;br /&gt;
&lt;br /&gt;
See also [[:en:Session lock]].&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;sflock&#039;&#039;, &#039;&#039;physlock&#039;&#039;, &#039;&#039;Cinnamon Screensaver&#039;&#039;, &#039;&#039;MATE Screensaver&#039;&#039;, &#039;&#039;GNOME Screensaver&#039;&#039; だけが tty アクセスをブロックすることができます。手動でブロックする方法は [[Xorg#TTY へのアクセスをブロック]]を見てください。}}&lt;br /&gt;
&lt;br /&gt;
* {{App|betterlockscreen|&#039;&#039;i3lock-color&#039;&#039; wrapper. Betterlockscreen allows you to cache images with different filters and lockscreen with blazing speed.|https://github.com/pavanjadhaw/betterlockscreen|{{Aur|betterlockscreen}}}}&lt;br /&gt;
* {{App|Cinnamon Screensaver|Cinnamon デスクトップの画面ロッカー。|https://github.com/linuxmint/cinnamon-screensaver|{{Pkg|cinnamon-screensaver}}}}&lt;br /&gt;
* {{App|Deepin Screensaver|A lightweight Qt5 based screensaver.|https://github.com/linuxdeepin/deepin-screensaver|{{Pkg|deepin-screensaver}}}}&lt;br /&gt;
* {{App|GNOME Screensaver|Legacy GNOME デスクトップの画面ロッカー。Unmaintained since 2012.|https://wiki.gnome.org/Attic/GnomeScreensaver|{{AUR|gnome-screensaver}}}}&lt;br /&gt;
* {{App|i3lock|シンプルな画面ロッカー。ユーザーフィードバックを提供し、PAM 認証を使用します。画像や単色の背景を設定可能。|https://i3wm.org/i3lock/|{{Pkg|i3lock}}}}&lt;br /&gt;
* {{App|i3lock-blur|&#039;&#039;i3lock&#039;&#039; のフォークで背景としてブラー効果をかけたデスクトップを使うことができます。|https://github.com/karulont/i3lock-blur|{{Aur|i3lock-blur}}}}&lt;br /&gt;
* {{App|i3lock-color|Fork of &#039;&#039;i3lock&#039;&#039; with color and positioning configuration support and 背景画像としてブラーのかかったデスクトップのスクリーンショットをセットします。|https://github.com/Raymo111/i3lock-color|{{AUR|i3lock-color}}, {{AUR|i3lock-color-git}}}}&lt;br /&gt;
* {{App|Light-locker|デスクトップの依存を増やすことなくデスクトップと統合することができる、単純な安全で安心なシンプルロッカー (&#039;&#039;gnome-screensaver&#039;&#039; のフォーク)。ConsoleKit/UPower や &#039;&#039;logind/systemd&#039;&#039; でセッションをロックするために [[LightDM]] を使っています。|https://github.com/the-cavalry/light-locker|{{Pkg|light-locker}}}}&lt;br /&gt;
* {{App|MATE Screensaver|MATE デスクトップ環境のスクリーンセーバー・ロッカー。|https://github.com/mate-desktop/mate-screensaver|{{Pkg|mate-screensaver}}}}&lt;br /&gt;
* {{App|physlock|画面とコンソールのロッカー。|https://github.com/muennich/physlock|{{Pkg|physlock}}}}&lt;br /&gt;
* {{App|sflock|X 用の slock ベースのシンプルなスクリーンロッカー。基本的なユーザーフィードバックを提供します。|https://github.com/benruijl/sflock|{{AUR|sflock-git}}}}&lt;br /&gt;
* {{App|[[slock]]|とてもシンプルで軽量な X スクリーンロッカー。ロック時には黒い背景しか表示しません、アニメーションやテキストはありません。|https://tools.suckless.org/slock/|{{Pkg|slock}}}}&lt;br /&gt;
* {{App|sxlock|sflock のフォーク。基本的なユーザーフィードバック・PAM 認証・DPMS と RandR をサポート。サスペンドやハイバネート時に画面をロックする {{ic|sxlock.service}} があります。詳しくは [https://github.com/lahwaacz/sxlock/blob/master/README.md README] を参照。|https://github.com/lahwaacz/sxlock|{{AUR|sxlock-git}}}}&lt;br /&gt;
* {{App|tsscreenlock|theShell で使われているスクリーンロッカー。音楽のコントロールを表示し、theShell を使用している場合、デスクトップ通知も表示。|https://github.com/vicr123/tsscreenlock|{{AUR|tsscreenlock}}}}&lt;br /&gt;
* {{App|vlock|TTY ロッカー。[https://lists.archlinux.org/pipermail/aur-general/2013-July/024662.html オリジナルの vlock] のミラーは [https://github.com/WorMzy/vlock GitHub] から取得できます。|https://kbd-project.org/|{{Pkg|kbd}}}}&lt;br /&gt;
* {{App|xfce4-screensaver|A screen saver and locker that aims to have simple, sane, secure defaults and be well integrated with the xfce desktop.|https://git.xfce.org/apps/xfce4-screensaver/about/|{{Pkg|xfce4-screensaver}}}}&lt;br /&gt;
* {{App|xlockmore|シンプルな X11 画面ロック。PAM 対応。|https://sillycycle.com/xlockmore.html|{{Pkg|xlockmore}}}}&lt;br /&gt;
* {{App|[[XScreenSaver]]|X Window System 向けのスクリーンセーバー・ロッカー。|https://www.jwz.org/xscreensaver/|{{Pkg|xscreensaver}}}}&lt;br /&gt;
* {{App|XSecureLock|セキュリティに焦点を置いた X11 のスクリーンロックユーティリティ。|https://github.com/google/xsecurelock|{{Pkg|xsecurelock}}}}&lt;br /&gt;
* {{App|xtrlock|非常に軽量な X ディスプレイロッカー。ウィンドウは表示したままで、マウスカーソルの代わりにロックアイコンを表示します。パスワードを入力すれば画面のロックは解除されます。|https://packages.debian.org/sid/xtrlock|{{Pkg|xtrlock}}}}&lt;br /&gt;
* {{App|swaylock|Wayland 用のスクリーンロッカー。|https://github.com/swaywm/swaylock|{{Pkg|swaylock}}}}&lt;br /&gt;
* {{App|swaylock-effects|派手なエフェクト付きの Swaylock。|https://github.com/jirutka/swaylock-effects|{{AUR|swaylock-effects-git}}}}&lt;br /&gt;
&lt;br /&gt;
=== Password auditing ===&lt;br /&gt;
&lt;br /&gt;
* {{App|[[Wikipedia:John the Ripper|John the Ripper]]|Password cracker.|https://www.openwall.com/john|{{Pkg|john}}}}&lt;br /&gt;
* {{App|[[Hashcat]]|Multithreaded advanced password recovery utility.|https://hashcat.net/hashcat|{{Pkg|hashcat}}}}&lt;br /&gt;
&lt;br /&gt;
=== パスワードマネージャ ===&lt;br /&gt;
&lt;br /&gt;
See also [[KeePass]].&lt;br /&gt;
&lt;br /&gt;
==== Console ====&lt;br /&gt;
&lt;br /&gt;
* {{App|1password CLI|Proprietary command line tool for 1Password password manager.|https://1password.com/downloads/command-line/|{{AUR|1password-cli}}}}&lt;br /&gt;
* {{App|Bitwarden|Open source password manager with desktop, mobile, browser, and CLI versions. Cloud or self-hosted.|https://bitwarden.com/|{{Pkg|bitwarden-cli}}}}&lt;br /&gt;
* {{App|gopass|Advanced console based password manager, supporting GnuPG and other backends.|https://github.com/justwatchcom/gopass|{{Pkg|gopass}}}}&lt;br /&gt;
* {{App|KeePassC|Curses-based password manager compatible to KeePass v.1.x.|https://outerhaven.de/keepassc/|{{AUR|keepassc}}}}&lt;br /&gt;
* {{App|LastPass|Hosted password manager. |https://www.lastpass.com/|{{Pkg|lastpass-cli}}}}&lt;br /&gt;
* {{App|[[pass]]|シンプルなコンソールベースのパスワードマネージャ featuring flat text file organization and GnuPG encryption.|https://www.passwordstore.org/|{{Pkg|pass}}}}&lt;br /&gt;
* {{App|pwsafe|暗号化されたパスワードデータベースを管理する Unix コマンドラインプログラム。|http://nsd.dyndns.org/pwsafe/|{{AUR|pwsafe}}}}&lt;br /&gt;
* {{App|spm|PGP を使用して POSIX シェルだけで書かれたシンプルなパスワードマネージャ。軽量・高速でスクリプトに簡単に組み込めます。|https://notabug.org/kl3/spm/|{{AUR|spm}}}}&lt;br /&gt;
* {{App|tpm|tiny password manager, inspired by pass, written entirely in POSIX shell.|https://github.com/nmeum/tpm|{{AUR|tpm}}}}&lt;br /&gt;
* {{App|Ylva|Command-line password manager, written in C, uses OpenSSL.|https://www.ylvapasswordmanager.com/|{{AUR|ylva}}}}&lt;br /&gt;
&lt;br /&gt;
==== Graphical ====&lt;br /&gt;
&lt;br /&gt;
* {{App|1password|Proprietary password manager and secure wallet.|https://1password.com/downloads/linux/|{{AUR|1password}}}}&lt;br /&gt;
* {{App|Authenticator|Two-factor authentication application built for GNOME.|https://gitlab.gnome.org/World/Authenticator|{{AUR|authenticator}}}}&lt;br /&gt;
* {{App|Bitwarden|Open source password manager with desktop, mobile, browser, and CLI versions. Cloud or self-hosted.|https://bitwarden.com/|{{Pkg|bitwarden}}}}&lt;br /&gt;
* {{App|Encryptr|ゼロ知識・クラウドベースのパスワードマネージャ。|https://spideroak.com/encryptr/|{{AUR|encryptr}}}}&lt;br /&gt;
* {{App|Enpass|マルチプラットフォームのパスワードマネージャ。|https://www.enpass.io/|{{AUR|enpass-bin}}}}&lt;br /&gt;
* {{App|Figaro&#039;s Password Manager 2|[http://fpm.sourceforge.net/ Figaro&#039;s Password Manager] の GTK2 ポートで新機能がいくつか追加されています。|https://als.regnet.cz/fpm2/|{{AUR|fpm2}}}}&lt;br /&gt;
* {{App|GNOME Password Safe|Password manager for GNOME which makes use of the KeePass v.4 format.|https://gitlab.gnome.org/World/PasswordSafe|{{Pkg|gnome-passwordsafe}}}}&lt;br /&gt;
* {{App|Ked Password Manager|大量のパスワードを扱うのに役立つパスワードマネージャ。|http://kedpm.sourceforge.net|{{AUR|kedpm}}}}&lt;br /&gt;
* {{App|[[KeePass|KeePass Password Safe]]|安全な方法でパスワードを管理するための、パスワードマネージャ。Mono ベース。|https://keepass.info/|{{Pkg|keepass}}}}&lt;br /&gt;
* {{App|KeePassX|Qt-based password manager. KeePass v.1.x や KeePass v.2.x と互換性あり。|https://www.keepassx.org/|version 1: {{AUR|keepassx}}, version 2: {{AUR|keepassx2}}}}&lt;br /&gt;
* {{App|KeePassXC|Community fork of KeePassX with more active development. Compatible with KeePass v.1.x (import only) and KeePass v.2.x.|https://keepassxc.org/|{{Pkg|keepassxc}}}}&lt;br /&gt;
* {{App|[[KDE Wallet|KDE Wallet Manager]]|Tool to manage the passwords on your system. By using the KDE wallet subsystem it not only allows you to keep your own secrets but also to access and manage the passwords of every application that integrates with the wallet.|https://apps.kde.org/kwalletmanager5/|{{Pkg|kwalletmanager}}}}&lt;br /&gt;
* {{App|OTPClient|Highly secure and easy to use GTK software for two-factor authentication that supports both Time-based One-time Passwords (TOTP) and HMAC-Based One-Time Passwords (HOTP).|https://github.com/paolostivanin/OTPClient|{{AUR|otpclient}}}}&lt;br /&gt;
* {{App|Passbook|Modern password manager for GNOME.|https://wiki.gnome.org/Apps/Passbook|{{AUR|passbook}}}}&lt;br /&gt;
* {{App|Password Gorilla|クロスプラットフォームのパスワードマネージャ。|https://github.com/zdia/gorilla/wiki|{{AUR|password-gorilla}}}}&lt;br /&gt;
* {{App|Password Safe|シンプルで安全なパスワードマネージャ。|https://pwsafe.org/|{{AUR|passwordsafe}}}}&lt;br /&gt;
* {{App|QPass|パスワード生成器が付いている使いやすいパスワードマネージャ。|http://qpass.sourceforge.net/|{{AUR|qpass}}}}&lt;br /&gt;
* {{App|QtPass|GUI for pass, the standard unix password manager.|https://qtpass.org/|{{Pkg|qtpass}}}}&lt;br /&gt;
* {{App|Revelation|GNOME デスクトップのパスワードマネージャ。|https://revelation.olasagasti.info/|{{AUR|revelation}}}}&lt;br /&gt;
* {{App|[[Wikipedia:Seahorse (software)|Seahorse]]|GNOME Keyring で暗号化キーとパスワードを管理する GNOME アプリケーション。|https://wiki.gnome.org/Apps/Seahorse|{{Pkg|seahorse}}}}&lt;br /&gt;
* {{App|Universal Password Manager|GNOME Keyring で暗号化キーとパスワードを管理する GNOME アプリケーション。|http://upm.sourceforge.net/|{{AUR|universal-password-manager}}}}&lt;br /&gt;
&lt;br /&gt;
=== Cryptography ===&lt;br /&gt;
&lt;br /&gt;
==== ハッシュチェッカー ====&lt;br /&gt;
&lt;br /&gt;
* {{app|cfv|チェックサムファイルのテストと作成ができる小さなユーティリティ。{{ic|.sfv}}, {{ic|.csv}}, {{ic|.crc}}, {{ic|.md5}}, {{ic|md5sum}}, {{ic|sha1sum}}, {{ic|.torrent}}, {{ic|par}}, {{ic|.par2}} ファイルに対応。| http://cfv.sourceforge.net/|{{AUR|cfv}}}}&lt;br /&gt;
* {{App|GtkHash|メッセージダイジェストまたはチェックサムを計算する GTK ユーティリティ。|https://github.com/tristanheaven/gtkhash|{{AUR|gtkhash}}}}&lt;br /&gt;
* {{App|hashdeep|様々なファイルのハッシュやメッセージダイジェストを計算するクロスプラットフォームのツール。|http://md5deep.sourceforge.net/|{{Pkg|hashdeep}}}}&lt;br /&gt;
* {{App|Quick Hash GUI|ファイルのすばやい選択とハッシュ作成ができる GUI (フォルダ構造で別々に行ったり再帰的に使用可能)。|https://www.quickhash-gui.org/|{{AUR|quickhash-gui-bin}}}}&lt;br /&gt;
* {{App|RHash|ハッシュサムを確認するためのユーティリティ (SFV, CRC など)。多数のアルゴリズムをサポート。|https://github.com/rhash/RHash/|{{Pkg|rhash}}}}&lt;br /&gt;
* {{App|MassHash|Python で書かれたファイルハッシュ作成ツールのセット (CLI と GTK の GUI)。MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 などのアルゴリズムをサポート。|https://jdleicher.github.io/MassHash/|{{AUR|masshash}}}}&lt;br /&gt;
* {{App|Parchive||https://github.com/Parchive/par2cmdline|{{Pkg|par2cmdline}}}}&lt;br /&gt;
&lt;br /&gt;
==== 暗号化, 署名, ステガノグラフィー ====&lt;br /&gt;
&lt;br /&gt;
* {{app|age|A simple, modern and secure encryption tool (and library) with small explicit keys, no config options, and UNIX-style composability.|https://age-encryption.org/v1|Go: {{Pkg|age}} {{AUR|age-git}} Rust: {{AUR|rust-rage}} {{AUR|rust-rage-git}}}}&lt;br /&gt;
* {{app|ccrypt|ファイルやストリームを暗号化・復号化するためのコマンドラインユーティリティ based on [[Wikipedia:Advanced_Encryption_Standard|Rijndael]].|http://ccrypt.sourceforge.net/|{{AUR|ccrypt}}}}&lt;br /&gt;
* {{App|[[Wikipedia:Enigmail|Enigmail]]|Mozilla Thunderbird や Seamonkey のセキュリティ拡張。OpenPGP 規格で暗号化・署名されたメールを送受信できるようになります。|https://enigmail.net|{{Pkg|thunderbird-extension-enigmail}}{{Broken package link|package not found}}}}&lt;br /&gt;
* {{App|GNOME Keysign|GTK/GNOME application to use GnuPG for signing other people&#039;s keys. Quickly, easily, and securely.|https://wiki.gnome.org/Apps/Keysign|{{AUR|gnome-keysign}}}}&lt;br /&gt;
* {{App|[[GnuPG]]|RFC4880 で定義されている OpenPGP 標準の GNU プロジェクトによる完全でフリーな実装。パッケージの電子署名で広く使われている、PGP を置き換える。|https://gnupg.org/|{{Pkg|gnupg}}}}&lt;br /&gt;
* {{App|GPG-Crypter|Graphical front-end to GnuPG(GPG) using the GTK3 toolkit and GPGME library.|https://sourceforge.net/projects/gpg-crypter/|{{Pkg|gpg-crypter}}}}&lt;br /&gt;
* {{App|[[Keybase]]|Key directory mapping social media identities, with cross platform encrypted chat, cloud storage, and git repositories.|https://keybase.io/|{{Pkg|keybase}}}}&lt;br /&gt;
* {{App|[[Wikipedia:KGPG|KGpg]]|KDE のシンプルな GnuPG インターフェイス。|https://apps.kde.org/kgpg/|{{Pkg|kgpg}}}}&lt;br /&gt;
* {{App|Kleopatra|Certificate Manager and Unified Crypto GUI for KDE. It supports managing X.509 and OpenPGP certificates in the GpgSM keybox and retrieving certificates from LDAP servers.|https://apps.kde.org/kleopatra/|{{Pkg|kleopatra}}}}&lt;br /&gt;
* {{app|minisign|Simple program that only implements key signing|https://github.com/jedisct1/minisign|{{pkg|minisign}} }}&lt;br /&gt;
* {{App|[[Wikipedia:Seahorse (software)|Seahorse]]|GNOME Keyring で暗号鍵やパスワードを管理するための GNOME アプリケーション。|https://wiki.gnome.org/Apps/Seahorse|{{Pkg|seahorse}}}}&lt;br /&gt;
* {{App|scrypt|Command-line encryption utility featuring the memory-hardened {{ic|scrypt}} key derivation function.|https://www.tarsnap.com/scrypt.html|{{pkg|scrypt}}}}&lt;br /&gt;
* {{App|steghide|画像や音声ファイルなど様々な種類のファイルにデータを隠すことが出来るステガノグラフィーユーティリティ。|http://steghide.sourceforge.net|{{AUR|steghide}}}}&lt;br /&gt;
&lt;br /&gt;
==== Data-at-rest encryption ====&lt;br /&gt;
&lt;br /&gt;
See [[保存データ暗号化]].&lt;br /&gt;
&lt;br /&gt;
=== 管理者権限 ===&lt;br /&gt;
&lt;br /&gt;
* {{App|[[doas]]|A portable version of OpenBSD&#039;s &#039;&#039;doas&#039;&#039; command, known for being substantially smaller in size compared to sudo.|https://github.com/Duncaen/OpenDoas|{{Pkg|opendoas}}}}&lt;br /&gt;
* {{App|{{man|1|pkexec}}|A [[Polkit]] application that allows an authorized user to run commands or an interactive shell as another user. Configured using Polkit rules.|https://gitlab.freedesktop.org/polkit/polkit/|{{Pkg|polkit}}}}&lt;br /&gt;
* {{App|[[su]]|Command used to assume the identity of another user on the system.|https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/about/|{{Pkg|util-linux}}}}&lt;br /&gt;
* {{App|[[sudo]]|Command to delegate the ability to run commands as root or another user while providing an audit trail.|https://www.sudo.ws/sudo/|{{pkg|sudo}}}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{TranslationStatus|List of applications/Security|2021-12-23|706390}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Anki&amp;diff=36439</id>
		<title>Anki</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Anki&amp;diff=36439"/>
		<updated>2024-03-05T04:38:59Z</updated>

		<summary type="html">&lt;p&gt;Hikali: 誤字の訂正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:アプリケーション]]&lt;br /&gt;
[[en:anki]]&lt;br /&gt;
[https://ankisrs.net/ Anki] は [[Wikipedia:Spaced repetition|spaced repetition]](間隔反復) system (SRS)、[[Wikipedia:Flashcard|単語帳]]の作成、管理、復習を可能にするプログラムです。Anki は非常に柔軟性が高く、またテンプレートの作成も可能です。Android と iOS 用のアプリ、および Web インターフェイスを使用して、ユーザーのフラッシュカードデータベースとやり取りすることができます。Anki は、[[python]] で書かれた[https://ankiweb.net/shared/addons/ アドオン]をサポートしています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{AUR|anki}} パッケージ、またはインストール可能なバイナリがお好みなら {{AUR|anki-official-binary-bundle}} を[[インストール]]してください。開発版は {{aur|anki-git}} パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、カードは anki の Web サーバを使用して同期されますが、独自の {{aur|anki-sync-server-git}} を使用することができます。&lt;br /&gt;
&lt;br /&gt;
== 単語帳 ==&lt;br /&gt;
&lt;br /&gt;
単語帳は、以下の方法で入手することができます。&lt;br /&gt;
* Anki 内で作成し、デッキに整理し、場合によってはタグを付けることも可能です。カードには音声、画像、[[TeX]] の数式を含めることができます。&lt;br /&gt;
* 既存の[https://ankiweb.net/shared/decks/ 共有デッキ]（例：ある言語の上位1000単語）にグループ化されているカードをダウンロードする。&lt;br /&gt;
* [[wikipedia:Comma-separated_values|csvファイル]]として生成し、Anki にインポートする。&lt;br /&gt;
&lt;br /&gt;
== アドオン ==&lt;br /&gt;
&lt;br /&gt;
Anki は多くの[https://ankiweb.net/shared/addons/ アドオン]を提供しています。これらのアドオンはさまざまな機能を実行し、Anki の使用を拡大したり、パーソナライズしたりすることができます。これらのアドオンはサードパーティ製で、Anki のチェックや審査を受けていないため、信頼できるアドオンのみを使用してください。アドオンをインストールするには、アドオンページからコードをコピーし、&#039;&#039;Tools &amp;gt; Add-ons &amp;gt; Get Add-ons...&#039;&#039; に移動してコードを貼り付けます。github などのソースからアドオンファイル（拡張子が {{ic|.ankiaddon}} ）を手動でインストールするには、&#039;&#039;Tools &amp;gt; Add-ons &amp;gt; Install from file...&#039;&#039; に移動します。人気のあるアドオンには、[https://ankiweb.net/shared/info/1374772155 Image Occlusion Enhanced]や[https://ankiweb.net/shared/info/1771074083 Review Heatmap] などがあります。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== 漢字の筆順のサポート ===&lt;br /&gt;
&lt;br /&gt;
anki で漢字の筆順を表示したい場合は [[AUR]] から {{AUR|ttf-kanjistrokeorders}} をインストールしてください。インストール後、anki のデッキプロパティでフォントを選択する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== アジア言語のサポート ===&lt;br /&gt;
&lt;br /&gt;
[[AUR]] から {{AUR|mecab-ipadic}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
[[公式リポジトリ]]から {{pkg|kakasi}} をインストールしてください。&lt;br /&gt;
&lt;br /&gt;
anki を起動して、&amp;quot;File-&amp;gt;Download-&amp;gt;Shared Plugin&amp;quot; から &amp;quot;Japanese Support&amp;quot; プラグインをダウンロード・インストールしてから、再起動してください。&lt;br /&gt;
&lt;br /&gt;
新しいデッキ (単語帳) を作成後、&amp;quot;deck properties&amp;quot; でデッキモデルとして &amp;quot;Japanese&amp;quot; を選択することで日本語がサポートされます。Japanese Support プラグインをインストールしないと、モデルとして &amp;quot;Japanese&amp;quot; を選択することはできません。&lt;br /&gt;
&lt;br /&gt;
=== セルフホスト同期サーバ ===&lt;br /&gt;
AnkiWeb はプロプライエタリなサービスです。もし、セルフホスティングのフリーな（自由な）代替手段をお望みなら、[https://github.com/tsudoko/anki-sync-server anki-sync-server] をお使いください。設定方法のチュートリアルは[https://genedan.com/no-127-ankisyncd-a-custom-sync-server-for-anki-2-1/ こちら]でご覧になれます。&lt;br /&gt;
&lt;br /&gt;
=== ダークテーマ ===&lt;br /&gt;
&lt;br /&gt;
ダーク GTK テーマでは、Anki UI が読めないことがあります。その場合は、ナイトモードを有効にするとよいでしょう(&#039;&#039;Tools &amp;gt; Preferences... &amp;gt; Night mode&#039;&#039;)。&lt;br /&gt;
&lt;br /&gt;
古いバージョンの場合は、アドオンをインストールする必要があるかもしれません（例：[https://ankiweb.net/shared/info/1496166067 1496166067] と &#039;&#039;View &amp;gt; Night mode &amp;gt; Enable night mode&#039;&#039;）。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== 起動できない ===&lt;br /&gt;
&lt;br /&gt;
Anki コアが起動時にエラー &amp;quot;qt:No suitable graphics backend found &amp;quot;というエラーでAnki coreがダンプした場合、以下のようにすると[https://anki.tenderapp.com/discussions/ankidesktop/34554-instalation-not-run-after-install 解決すること]があります。&lt;br /&gt;
&lt;br /&gt;
 echo auto &amp;gt; ~/.local/share/Anki2/gldriver&lt;br /&gt;
&lt;br /&gt;
When using the [[Nouveau]] driver, only {{ic|software}} is supported and it is known to be buggy (see [https://docs.ankiweb.net/platform/linux/display-issues.html#qt5]).&lt;br /&gt;
&lt;br /&gt;
=== Wayland ===&lt;br /&gt;
&lt;br /&gt;
Wayland support is available in Anki since [https://github.com/ankitects/anki/releases/tag/2.1.48 v2.1.48]. However it is not stable yet and disabled by default. If you want to use it in Wayland anyway, then set some [[environment variable]]s.&lt;br /&gt;
&lt;br /&gt;
 QT_QPA_PLATFORM=wayland&lt;br /&gt;
 ANKI_WAYLAND=1&lt;br /&gt;
&lt;br /&gt;
Related bug report: [https://github.com/ankitects/anki/issues/1767 Github issue #1767]&lt;br /&gt;
&lt;br /&gt;
=== Images falsely showing up in unused media ===&lt;br /&gt;
&lt;br /&gt;
Anki has a feature to check for unused media and delete them to free up space. When copying images from webpages and pasting them into the card editor, the image is often pasted along with an {{ic|alt}} attribute inside the {{ic|&amp;lt;img&amp;gt;}} tag. If this or any other attribute which is placed before the {{ic|src}} attribute contains a {{ic|&amp;gt;}} character, this image will show up in unused media and might get accidentally deleted even if it is still being used.&lt;br /&gt;
&lt;br /&gt;
For example, this image will show up in unused media:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;img alt=&amp;quot;bad&amp;gt;text&amp;quot; src=&amp;quot;image.jpg&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To prevent this, remove any {{ic|&amp;gt;}} characters or place the {{ic|alt}} attribute after the {{ic|src}} attribute:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;img src=&amp;quot;image.jpg alt=&amp;quot;bad&amp;gt;text&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See the [https://github.com/ankitects/anki/issues/2304 bug report] and [https://forums.ankiweb.net/t/check-media-bug-symbol-in-alt-attribute/25997 forum post].&lt;br /&gt;
&lt;br /&gt;
{{Tip|Press {{ic|Ctrl+Shift+x}} to open the HTML editor inside the card editor.}}&lt;br /&gt;
&lt;br /&gt;
==参照==&lt;br /&gt;
&lt;br /&gt;
=== 公式 ===&lt;br /&gt;
&lt;br /&gt;
* [https://docs.ankiweb.net Anki manual]&lt;br /&gt;
* [https://faqs.ankiweb.net/ FAQs]&lt;br /&gt;
* [https://forums.ankiweb.net Forums]&lt;br /&gt;
* [https://anki.tenderapp.com/discussions Old forums archive]&lt;br /&gt;
* [https://anki.tenderapp.com/kb Knowledge base]&lt;br /&gt;
&lt;br /&gt;
=== その他 ===&lt;br /&gt;
&lt;br /&gt;
* [https://www.supermemo.com/en/archives1990-2015/articles/20rules Guide for creating good cards]&lt;br /&gt;
* [[Mnemosyne]] - 間隔反復によるフラッシュカード学習を行うプログラム&lt;br /&gt;
* [https://orgmode.org/worg/org-contrib/org-drill.html org-drill] - A spaced repetition extension for [[Emacs]] org-mode.&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Anki|2022-01-23|702236}}&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Cloudflared&amp;diff=34048</id>
		<title>Cloudflared</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Cloudflared&amp;diff=34048"/>
		<updated>2023-09-20T11:30:25Z</updated>

		<summary type="html">&lt;p&gt;Hikali: {{AUR|cloudflared}}がリンク切れだったため、 {{pkg|cloudflared}} に変更&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Domain Name System]]&lt;br /&gt;
[[en:Cloudflared]]&lt;br /&gt;
[https://developers.cloudflare.com/1.1.1.1/dns-over-https/cloudflared-proxy/ Cloudflared] は、ローカルの [[DNS over HTTPS]] サーバー (DoH) 、すなわちスタブリゾルバを実行出来ます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
{{pkg|cloudflared}} または {{AUR|cloudflared-bin}} パッケージを [[インストール]] してください。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
以下のファイルを作成し、{{ic|&amp;lt;endpoint&amp;gt;}} を優先するエンドポイントに置き換えます。&lt;br /&gt;
{{hc|/etc/cloudflared/config.yml|&lt;br /&gt;
proxy-dns: true&lt;br /&gt;
proxy-dns-upstream:&lt;br /&gt;
&#039;&#039;&#039; - &amp;lt;endpoint&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039; - &amp;lt;endpoint&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039; - &amp;lt;endpoint&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
proxy-dns-port: 53&lt;br /&gt;
proxy-dns-address: 0.0.0.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[https://developers.cloudflare.com/1.1.1.1/1.1.1.1-for-families/setup-instructions/dns-over-https/ upstream documentation], にあるように、利用可能なエンドポイントは以下の通りです:&lt;br /&gt;
&lt;br /&gt;
{{Tip|[[cURL]] のドキュメントで、代替の公開された [https://github.com/curl/curl/wiki/DNS-over-HTTPS endpoints] のリストが維持されています}}&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;text-align: center;&amp;quot;&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | エンドポイント&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; | 説明&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | {{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 - https://1.0.0.1/dns-query&lt;br /&gt;
 - https://1.1.1.1/dns-query&lt;br /&gt;
 - https://2606:4700:4700::1111/dns-query&lt;br /&gt;
 - https://2606:4700:4700::1001/dns-query&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}} || 標準&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | {{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 - https://security.cloudflare-dns.com/dns-query&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}} || 標準、マルウェアをブロック&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | {{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 - https://family.cloudflare-dns.com/dns-query&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}} || 標準、マルウェアやポルノをブロック&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align:left;&amp;quot; | {{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
 - https://9.9.9.9/dns-query&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}} || Quad9&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 使い方 ==&lt;br /&gt;
&lt;br /&gt;
{{ic|cloudflared@cloudflared.service}} を [[systemd#ユニットを使う|スタート]] して[[有効化]] します。これで、端末の IP アドレスを DNS サーバーとして使用できるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ブラウザが &#039;&#039;Cloudflare DoH&#039;&#039; を使用しているかどうかを確認するには [https://1.1.1.1/help 1.1.1.1/help] を使用します。}}&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://developers.cloudflare.com/1.1.1.1/dns-over-https/cloudflared-proxy/ Running a DNS over HTTPS Client - Cloudflare Resolver]&lt;br /&gt;
* [https://blog.cloudflare.com/introducing-1-1-1-1-for-families/ Introducing 1.1.1.1 for families]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Nftables&amp;diff=34047</id>
		<title>Nftables</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Nftables&amp;diff=34047"/>
		<updated>2023-09-20T06:51:56Z</updated>

		<summary type="html">&lt;p&gt;Hikali: マークアップの訂正 (&amp;quot;&amp;quot;使用しない&amp;quot;&amp;quot;  -&amp;gt; &amp;#039;&amp;#039;&amp;#039;使用しない&amp;#039;&amp;#039;)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:nftables}}&lt;br /&gt;
[[Category:ファイアウォール]]&lt;br /&gt;
[[en:nftables]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|iptables}}&lt;br /&gt;
{{Related|Firewalld}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[https://netfilter.org/projects/nftables/ nftables] は既存の ip-, ip6-, arp-, ebtables フレームワークを置き換える netfilter のプロジェクトです。新しいパケットフィルタリングフレームワーク、新しいユーザースペースユーティリティ (nft)、そして ip- と ip6tables の互換レイヤーを提供します。現行のフック、接続追跡システム、ユーザースペースのキューイングコンポーネント、そして netfilter のログサブシステムを使っています。&lt;br /&gt;
&lt;br /&gt;
nftables は3つのメインコンポーネントから構成されています: カーネルの実装、libnl netlink communication そして nftables ユーザースペースフロントエンド。カーネルは netlink の設定インターフェイスだけでなく、小さなクラス言語インタプリタを使用するランタイムのルールセットの評価も提供します。libnl にはカーネルと通信するためのローレベルな関数が含まれています。nftables フロントエンドはユーザーが対話するものです。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.nftables.org/wiki-nftables/index.php/Main_Page nftables の公式 wiki] には詳しい情報が載っています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
nftables のユーザーランドユーティリティは {{Pkg|nftables}} パッケージで利用できます。開発版の {{AUR|nftables-git}} パッケージも存在します。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ほとんどの [[iptables#Front-ends|iptables フロントエンド]] はnftables の直接的または間接的なサポートを備えていませんが、導入することは可能です。[https://www.spinics.net/lists/netfilter/msg58215.html] nftables と iptables の両方をサポートするグラフィカルなフロントエンドとしては、[[firewalld]] があります。[https://firewalld.org/2018/07/nftables-backend]}}&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
nftables ではコマンドラインで作成される一時的なルールと、ファイルに保存して読み込まれる永続的なルールを区別していません。デフォルトファイルの {{ic|/etc/nftables.conf}} には &amp;quot;inet filter&amp;quot; という名前のシンプルな ipv4/ipv6 ファイアウォールテーブルが既に記述されています。&lt;br /&gt;
&lt;br /&gt;
{{ic|nftables.service}} を[[起動]]・[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでルールセットを確認できます:&lt;br /&gt;
&lt;br /&gt;
 # nft list ruleset&lt;br /&gt;
&lt;br /&gt;
=== シンプルなファイアウォール ===&lt;br /&gt;
​&lt;br /&gt;
{{Pkg|nftables}} には、{{ic|/etc/nftables.conf}} ファイルに保存されたシンプルで安全なファイアウォール設定が付属しています。&lt;br /&gt;
​&lt;br /&gt;
{{ic|nftables.service}} は、[[起動]]または[[有効化]]時に、このファイルからルールを読み込みます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
nftables のユーザースペースユーティリティ {{ic|nft}} は現在カーネルのためにルールセットを処理する前にほとんどのルールセットの評価を行います。ルールはチェインに保存され、チェインはテーブルに保存されます。下のセクションではルールを作成・編集する方法を説明します。&lt;br /&gt;
&lt;br /&gt;
下のセクションで行った変更は全て一時的なものになります。変更を永続化するにはルールセットを {{ic|/etc/nftables.conf}} に保存してください (ルールセットは {{ic|nftables.service}} によって読み込まれます):&lt;br /&gt;
&lt;br /&gt;
 # nft list ruleset &amp;gt; /etc/nftables.conf&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|nft list}} は変数の定義を出力しません。{{ic|/etc/nftables.conf}} に何か記述していた場合、定義は失われます。ルールによって使われていた変数は変数の値に置き換えられます。}}&lt;br /&gt;
&lt;br /&gt;
ファイルから入力するには {{ic|-f}} フラグを使用します:&lt;br /&gt;
&lt;br /&gt;
 # nft -f &#039;&#039;filename&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ロード済みのルールは自動的に消去されることはないので注意してください。&lt;br /&gt;
&lt;br /&gt;
利用可能なコマンドの一覧は {{man|8|nft}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===テーブル===&lt;br /&gt;
&lt;br /&gt;
テーブルは[[#チェイン|チェイン]]を保持します。iptables のテーブルと違って、nftables には初めから組み込まれているテーブルはありません。テーブルの数や名前はユーザーが自由に決めることができますが、各テーブルにはアドレスファミリーをひとつしか保持することができません。5つのファミリーのうち指定したファミリーのパケットにだけ適用されます:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! nftables ファミリー || iptables ユーティリティ&lt;br /&gt;
|-&lt;br /&gt;
| ip || iptables&lt;br /&gt;
|-&lt;br /&gt;
| ip6 || ip6tables&lt;br /&gt;
|-&lt;br /&gt;
| inet || iptables と ip6tables&lt;br /&gt;
|-&lt;br /&gt;
| arp || arptables&lt;br /&gt;
|-&lt;br /&gt;
| bridge || ebtables&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ic|ip}} (IPv4) がデフォルトのファミリーです。特に指定がなければ {{ic|ip}} が使われます。&lt;br /&gt;
&lt;br /&gt;
IPv4 と IPv6 の両方に適用されるルールを作成するには {{ic|inet}} を使います。{{ic|inet}} を使うには Linux 3.15 以上が必要で、{{ic|ip}} と {{ic|ip6}} ファミリーを統一してルールを簡単に定義できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|inet}} は {{ic|nat}} タイプのチェインでは使えず、{{ic|filter}} タイプのチェインを使う必要があります ([https://www.spinics.net/lists/netfilter/msg56411.html ソース])。}}&lt;br /&gt;
&lt;br /&gt;
アドレスフファミリーの完全な定義は {{man|8|nft}} の {{ic|ADDRESS FAMILIES}} セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
以下で例示しているコマンドの {{ic|&#039;&#039;family&#039;&#039;}} は全て任意であり、指定しなかった場合は {{ic|ip}} が使われます。&lt;br /&gt;
&lt;br /&gt;
==== テーブルの作成 ====&lt;br /&gt;
&lt;br /&gt;
以下のコマンドで新しいテーブルが追加されます:&lt;br /&gt;
&lt;br /&gt;
 # nft add table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== テーブルの表示 ====&lt;br /&gt;
&lt;br /&gt;
全てのテーブルを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list tables&lt;br /&gt;
&lt;br /&gt;
==== テーブル内のチェインとルールの表示 ====&lt;br /&gt;
&lt;br /&gt;
指定したテーブルの全てのチェインとルールを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
例えば {{ic|inet}} ファミリーの {{ic|filter}} テーブルのルールを全て表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list table inet filter&lt;br /&gt;
&lt;br /&gt;
==== テーブルの削除 ====&lt;br /&gt;
&lt;br /&gt;
テーブルを削除するには:&lt;br /&gt;
&lt;br /&gt;
 # nft delete table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
テーブルはチェインが全く存在しない場合にのみ削除できます。&lt;br /&gt;
&lt;br /&gt;
==== テーブルのクリア ====&lt;br /&gt;
&lt;br /&gt;
テーブルから全てのルールを消去するには:&lt;br /&gt;
&lt;br /&gt;
 # nft flush table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===チェイン===&lt;br /&gt;
&lt;br /&gt;
チェインの用途は[[#ルール|ルール]]を保持することです。iptables のチェインと違って、nftables には初めから組み込まれているチェインはありません。そのためチェインが netfilter フレームワークにあるタイプやフックをどれも使わない場合、iptables とは異なりチェインを通り抜けるパケットは nftables の影響を受けません。&lt;br /&gt;
&lt;br /&gt;
チェインには2つのタイプがあります。&#039;&#039;base&#039;&#039; チェインはネットワークスタックからのパケットのエントリポイントとなります。フックの値を指定することができます。&#039;&#039;regular&#039;&#039; チェインはジャンプターゲットとして使用することができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドで使っている {{ic|&#039;&#039;family&#039;&#039;}} は全て任意であり、指定しなかった場合は {{ic|ip}} が使われます。&lt;br /&gt;
&lt;br /&gt;
==== チェインの作成 ====&lt;br /&gt;
&lt;br /&gt;
===== Regular チェイン =====&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは {{ic|&#039;&#039;table&#039;&#039;}} という名前のテーブルに {{ic|&#039;&#039;chain&#039;&#039;}} という名前のレギュラーチェインを追加します:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
例えば、{{ic|inet}} アドレスファミリーの {{ic|filter}} テーブルに {{ic|tcpchain}} という名前のレギュラーチェインを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter tcpchain&lt;br /&gt;
&lt;br /&gt;
===== Base チェイン =====&lt;br /&gt;
&lt;br /&gt;
ベースチェインを追加するにはフックとプライオリティの値を指定します:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039; { type &#039;&#039;type&#039;&#039; hook &#039;&#039;hook&#039;&#039; priority &#039;&#039;priority&#039;&#039; \; }&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;type&#039;&#039;}} は {{ic|filter}}, {{ic|route}}, {{ic|nat}} のどれかから選ぶことができます。&lt;br /&gt;
&lt;br /&gt;
IPv4/IPv6/Inet アドレスファミリーでは {{ic|&#039;&#039;hook&#039;&#039;}} は {{ic|prerouting}}, {{ic|input}}, {{ic|forward}}, {{ic|output}}, {{ic|postrouting}} のどれかになります。他のファミリーのフックについては {{man|8|nft}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;priority&#039;&#039;}} には整数値を指定します。低い値のチェインが先に処理され、負の値を指定することもできます [https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains#Base_chain_types]。&lt;br /&gt;
&lt;br /&gt;
例えば、input パケットをフィルタリングするベースチェインを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter input { type filter hook input priority 0\; }&lt;br /&gt;
&lt;br /&gt;
{{ic|add}} を {{ic|create}} に置き換えると、チェインが既に存在するときにエラーが返ってくるようになります。&lt;br /&gt;
&lt;br /&gt;
==== ルールの表示 ====&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでチェインの全てのルールを表示できます:&lt;br /&gt;
&lt;br /&gt;
 # nft list chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
例えば、{{ic|filter}} という名前の {{ic|inet}} テーブルに存在する {{ic|output}} という名前のチェインのルールを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list chain inet filter output&lt;br /&gt;
&lt;br /&gt;
==== チェインの編集 ====&lt;br /&gt;
&lt;br /&gt;
チェインを編集したいときは、チェインの名前を指定して変更したいルールを定義します:&lt;br /&gt;
&lt;br /&gt;
 # &amp;lt;nowiki&amp;gt;nft chain &amp;lt;table&amp;gt; &amp;lt;family&amp;gt; &amp;lt;chain&amp;gt; { [ type &amp;lt;type&amp;gt; hook &amp;lt;hook&amp;gt; device &amp;lt;device&amp;gt; priority &amp;lt;priority&amp;gt; \; policy &amp;lt;policy&amp;gt; \; ] }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例えば、デフォルトテーブルの input チェインポリシーを &amp;quot;accept&amp;quot; から &amp;quot;drop&amp;quot; に変更したい場合:&lt;br /&gt;
&lt;br /&gt;
 # nft chain inet filter input { policy drop \; }&lt;br /&gt;
&lt;br /&gt;
==== チェインの削除 ====&lt;br /&gt;
&lt;br /&gt;
チェインを削除するには:&lt;br /&gt;
&lt;br /&gt;
 # nft delete chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
削除するチェインにはルールやジャンプターゲットが含まれていてはいけません。&lt;br /&gt;
&lt;br /&gt;
==== チェインのルールを消去 ====&lt;br /&gt;
&lt;br /&gt;
チェインからルールを消去するには:&lt;br /&gt;
&lt;br /&gt;
 # nft flush chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ルール ===&lt;br /&gt;
&lt;br /&gt;
ルールは表現または宣言から構成され、チェインの中に格納されます。&lt;br /&gt;
&lt;br /&gt;
==== ルールの追加 ====&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;iptables-translate&#039;&#039; ユーティリティを使うことで [[iptables]] のルールを nftables フォーマットに変換できます。}}&lt;br /&gt;
&lt;br /&gt;
チェインにルールを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039; &#039;&#039;position&#039;&#039; &#039;&#039;statement&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ルールは {{ic|&#039;&#039;position&#039;&#039;}} に追加されます。位置は指定しなくてもかまいません。指定しなかった場合、ルールはチェインの末尾に追加されます。&lt;br /&gt;
&lt;br /&gt;
特定の位置の前にルールを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft insert rule &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039; &#039;&#039;position&#039;&#039; &#039;&#039;statement&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;position&#039;&#039;}} を指定しなかった場合、ルールはチェインの一番前に追加されます。&lt;br /&gt;
&lt;br /&gt;
===== 表現 =====&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;statement&#039;&#039;}} にはマッチする表現と判断宣言が入ります。判断宣言には {{ic|accept}}, {{ic|drop}}, {{ic|queue}}, {{ic|continue}}, {{ic|return}}, {{ic|jump &#039;&#039;chain&#039;&#039;}}, {{ic|goto &#039;&#039;chain&#039;&#039;}} などが存在します。判断宣言以外の宣言も指定できます。詳しくは {{man|8|nft}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
nftables では様々な表現を使うことができ、ほとんどは、iptables と対応するようになっています。一番大きな違いは汎用的なマッチと暗黙的なマッチが存在しないことです。汎用的なマッチとは、{{ic|--protocol}} や {{ic|--source}} のように、いつでも使うことができるマッチで、暗黙的なマッチとは、{{ic|--sport}} のように、特定のプロトコルでしか使えないマッチのことです。&lt;br /&gt;
&lt;br /&gt;
以下は利用できるマッチの一部です:&lt;br /&gt;
&lt;br /&gt;
* meta    (メタプロパティ。例: インターフェイス)&lt;br /&gt;
* icmp    (ICMP プロトコル)&lt;br /&gt;
* icmpv6  (ICMPv6 プロトコル)&lt;br /&gt;
* ip      (IP プロトコル)&lt;br /&gt;
* ip6     (IPv6 プロトコル)&lt;br /&gt;
* tcp     (TCP プロトコル)&lt;br /&gt;
* udp     (UDP プロトコル)&lt;br /&gt;
* sctp    (SCTP プロトコル)&lt;br /&gt;
* ct      (接続のトラッキング)&lt;br /&gt;
&lt;br /&gt;
以下はマッチ引数の一部です (完全なリストは {{man|8|nft}} を見て下さい):&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
meta:&lt;br /&gt;
  oif &amp;lt;output interface INDEX&amp;gt;&lt;br /&gt;
  iif &amp;lt;input interface INDEX&amp;gt;&lt;br /&gt;
  oifname &amp;lt;output interface NAME&amp;gt;&lt;br /&gt;
  iifname &amp;lt;input interface NAME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  (oif and iif accept string arguments and are converted to interface indexes)&lt;br /&gt;
  (oifname and iifname are more dynamic, but slower because of string matching)&lt;br /&gt;
&lt;br /&gt;
icmp:&lt;br /&gt;
  type &amp;lt;icmp type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
icmpv6:&lt;br /&gt;
  type &amp;lt;icmpv6 type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip:&lt;br /&gt;
  protocol &amp;lt;protocol&amp;gt;&lt;br /&gt;
  daddr &amp;lt;destination address&amp;gt;&lt;br /&gt;
  saddr &amp;lt;source address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip6:&lt;br /&gt;
  daddr &amp;lt;destination address&amp;gt;&lt;br /&gt;
  saddr &amp;lt;source address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tcp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
udp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sctp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ct:&lt;br /&gt;
  state &amp;lt;new | established | related | invalid&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====削除====&lt;br /&gt;
個々のルールはハンドルを使わないと削除することができません。{{ic|nft --handle list}} コマンドを使うことでルールのハンドルを確認できます。{{ic|--handle}} スイッチを付けると、{{ic|nft}} はハンドルを出力するようになります。&lt;br /&gt;
&lt;br /&gt;
以下ではルールのハンドルを確認してルールを削除しています。未解決の IP アドレスのような、数字の出力を表示するときは {{ic|--number}} 引数を使うと良いでしょう。&lt;br /&gt;
{{hc|# nft --handle --numeric list chain filter input|2=&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table ip fltrTable {&lt;br /&gt;
     chain input {&lt;br /&gt;
          type filter hook input priority 0;&lt;br /&gt;
          ip saddr 127.0.0.1 accept # handle 10&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
 # nft delete rule fltrTable input handle 10&lt;br /&gt;
&lt;br /&gt;
{{ic|nft flush table}} コマンドを使うことでテーブルの全てのチェインをフラッシュできます。個別のチェインをフラッシュするときは {{ic|nft flush chain}} または {{ic|nft delete rule}} コマンドを使います。&lt;br /&gt;
 # nft flush table foo&lt;br /&gt;
 # nft flush chain foo bar&lt;br /&gt;
 # nft delete rule ip6 foo bar&lt;br /&gt;
最初のコマンドでは ip {{ic|foo}} テーブルのチェイン全てをフラッシュします。2番目のコマンドは ip {{ic|foo}} テーブルの {{ic|bar}} チェインをフラッシュします。3番目のコマンドは ip6 {{ic|foo}} テーブルの {{ic|bar}} チェインの全てのルールを削除します。&lt;br /&gt;
&lt;br /&gt;
===アトミックリロード===&lt;br /&gt;
現在のルールセットをフラッシュする:&lt;br /&gt;
 # echo &amp;quot;flush ruleset&amp;quot; &amp;gt; /tmp/nftables&lt;br /&gt;
現在のルールセットをダンプする:&lt;br /&gt;
 # nft list ruleset &amp;gt;&amp;gt; /tmp/nftables&lt;br /&gt;
{{ic|/tmp/nftables}} を編集して次のコマンドで変更を適用:&lt;br /&gt;
 # nft -f /tmp/nftables&lt;br /&gt;
&lt;br /&gt;
== サンプル ==&lt;br /&gt;
&lt;br /&gt;
=== ワークステーション ===&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/nftables.conf|2=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0;&lt;br /&gt;
&lt;br /&gt;
                # accept any localhost traffic&lt;br /&gt;
                iif lo accept&lt;br /&gt;
&lt;br /&gt;
                # accept traffic originated from us&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
                # activate the following line to accept common local services&lt;br /&gt;
                #tcp dport { 22, 80, 443 } ct state new accept&lt;br /&gt;
&lt;br /&gt;
                # accept neighbour discovery otherwise IPv6 connectivity breaks.&lt;br /&gt;
                ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit,  nd-router-advert, nd-neighbor-advert } accept&lt;br /&gt;
&lt;br /&gt;
                # count and drop any other traffic&lt;br /&gt;
                counter drop&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== シンプルな IPv4/IPv6 ファイアウォール ===&lt;br /&gt;
&lt;br /&gt;
{{hc|firewall.rules|2=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# A simple firewall&lt;br /&gt;
&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
	chain input {&lt;br /&gt;
		type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
		# established/related connections&lt;br /&gt;
		ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
		# invalid connections&lt;br /&gt;
		ct state invalid drop&lt;br /&gt;
		&lt;br /&gt;
		# loopback interface&lt;br /&gt;
		iif lo accept&lt;br /&gt;
&lt;br /&gt;
		# ICMP&lt;br /&gt;
		# routers may also want: mld-listener-query, nd-router-solicit&lt;br /&gt;
		ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept&lt;br /&gt;
		ip protocol icmp icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem } accept&lt;br /&gt;
&lt;br /&gt;
		# SSH (port 22)&lt;br /&gt;
		tcp dport ssh accept&lt;br /&gt;
&lt;br /&gt;
		# HTTP (ports 80 &amp;amp; 443)&lt;br /&gt;
		tcp dport { http, https } accept&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain forward {&lt;br /&gt;
		type filter hook forward priority 0; policy drop;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain output {&lt;br /&gt;
		type filter hook output priority 0; policy accept;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===レート制限 IPv4/IPv6 ファイアウォール===&lt;br /&gt;
&lt;br /&gt;
{{hc|firewall.2.rules|2=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
	chain input {&lt;br /&gt;
		type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
		# no ping floods:&lt;br /&gt;
		ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 10/second accept&lt;br /&gt;
		ip protocol icmp icmp type echo-request limit rate 10/second accept&lt;br /&gt;
&lt;br /&gt;
		ct state established,related accept&lt;br /&gt;
		ct state invalid drop&lt;br /&gt;
&lt;br /&gt;
		iif lo accept&lt;br /&gt;
&lt;br /&gt;
		# avoid brute force on ssh:&lt;br /&gt;
		tcp dport ssh limit rate 15/minute accept&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain forward {&lt;br /&gt;
		type filter hook forward priority 0; policy drop;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain output {&lt;br /&gt;
		type filter hook output priority 0; policy accept;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===ジャンプ===&lt;br /&gt;
&lt;br /&gt;
設定ファイルでジャンプを使うときは、先にターゲットチェインを定義する必要があります。そうしないと {{ic|Error: Could not process rule: No such file or directory}} というエラーが発生します。&lt;br /&gt;
{{hc|jump.rules|2=&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain web {&lt;br /&gt;
        tcp dport http accept&lt;br /&gt;
        tcp dport 8080 accept&lt;br /&gt;
    }&lt;br /&gt;
    chain input {&lt;br /&gt;
        type filter hook input priority 0;&lt;br /&gt;
        ip saddr 10.0.2.0/24 jump web&lt;br /&gt;
        drop&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== インターフェイスによってルールを変える ===&lt;br /&gt;
&lt;br /&gt;
複数のネットワークインターフェイスが存在する場合、それぞれのインターフェイスごとに別々のフィルターチェインを設定したい場合があるかもしれません。例えば、ホームルーターを構築するとき、LAN 上でアクセスできるウェブサーバーを実行しつつ ({{ic|nsp3s0}} インターフェイス)、インターネットからはアクセスできないようにしたい場合 ({{ic|enp2s0}} インターフェイス) などは以下のように設定します:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;table inet filter {&lt;br /&gt;
  chain input { # this chain serves as a dispatcher&lt;br /&gt;
    type filter hook input priority 0;&lt;br /&gt;
&lt;br /&gt;
    iif lo accept # always accept loopback&lt;br /&gt;
    iifname enp2s0 jump input_enp2s0&lt;br /&gt;
    iifname enp3s0 jump input_enp3s0&lt;br /&gt;
&lt;br /&gt;
    reject with icmp type port-unreachable # refuse traffic from all other interfaces&lt;br /&gt;
  }&lt;br /&gt;
  chain input_enp2s0 { # rules applicable to public interface interface&lt;br /&gt;
    ct state {established,related} accept&lt;br /&gt;
    ct state invalid drop&lt;br /&gt;
    udp dport bootpc accept&lt;br /&gt;
    tcp dport bootpc accept&lt;br /&gt;
    reject with icmp type port-unreachable # all other traffic&lt;br /&gt;
  }&lt;br /&gt;
  chain input_enp3s0 {&lt;br /&gt;
    ct state {established,related} accept&lt;br /&gt;
    ct state invalid drop&lt;br /&gt;
    udp dport bootpc accept&lt;br /&gt;
    tcp dport bootpc accept&lt;br /&gt;
    tcp port http accept&lt;br /&gt;
    tcp port https accept&lt;br /&gt;
    reject with icmp type port-unreachable # all other traffic&lt;br /&gt;
  }&lt;br /&gt;
  chain ouput { # we let everything out&lt;br /&gt;
    type filter hook output priority 0;&lt;br /&gt;
    accept&lt;br /&gt;
  }&lt;br /&gt;
 }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
もしくは {{ic|iifname}} ステートメントを特定のインターフェイスで使用して、他のインターフェイスについてはデフォルトルールを設定するという方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== マスカレード ===&lt;br /&gt;
&lt;br /&gt;
nftables には特殊なキーワード {{ic|masquerade}} が存在し、送信元アドレスが自動的に出力インターフェイスのアドレスに設定されます ([http://wiki.nftables.org/wiki-nftables/index.php/Performing_Network_Address_Translation_%28NAT%29#Masquerading ソース])。ルーターのインターフェイスが多数の ISP に接続されているときなど、インターフェイスの IP アドレスが一定でない場合に有用です。通常は、インターフェイスの IP アドレスが変わるたびにネットワークアドレス変換 (NAT) のルールを更新する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|masquerade}} を使用するには:&lt;br /&gt;
&lt;br /&gt;
* カーネルコンフィグで以下のマスカレード設定が有効になっている必要があります。&lt;br /&gt;
&lt;br /&gt;
 CONFIG_NFT_MASQ=m&lt;br /&gt;
&lt;br /&gt;
* {{ic|masquerade}} キーワードは {{ic|nat}} タイプのチェインでのみ使うことができ、{{ic|inet}} ファミリーのテーブルでは利用できません。{{ic|ip}} ファミリーや {{ic|ip6}} ファミリーのテーブルを使ってください。&lt;br /&gt;
* マスカレードは一種のソース NAT であり、出力パスでのみ機能します。&lt;br /&gt;
&lt;br /&gt;
2つのインターフェイスが存在し {{ic|nsp3s0}} が LAN に接続され、{{ic|enp2s0}} がインターネットに接続されているマシンでの設定例:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;table ip nat {&lt;br /&gt;
  chain prerouting {&lt;br /&gt;
    type nat hook prerouting priority 0;&lt;br /&gt;
  }&lt;br /&gt;
  chain postrouting {&lt;br /&gt;
    type nat hook postrouting priority 0;&lt;br /&gt;
    oifname &amp;quot;enp0s2&amp;quot; masquerade&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== シンプルなステートフルファイアウォール ===&lt;br /&gt;
&lt;br /&gt;
[[シンプルなステートフルファイアウォール]]の記事も参照してください。&lt;br /&gt;
&lt;br /&gt;
==== シングルマシン ====&lt;br /&gt;
&lt;br /&gt;
現在のルールセットを消去:&lt;br /&gt;
&lt;br /&gt;
 # nft flush ruleset&lt;br /&gt;
&lt;br /&gt;
テーブルを追加:&lt;br /&gt;
&lt;br /&gt;
 # nft add table inet filter&lt;br /&gt;
&lt;br /&gt;
input, forward, output ベースチェインを追加。input と forward のポリシーは破棄にして、output のポリシーは許可にする:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }&lt;br /&gt;
 # nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }&lt;br /&gt;
 # nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }&lt;br /&gt;
&lt;br /&gt;
レギュラーチェインを追加して tcp と udp に関連付ける:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter TCP&lt;br /&gt;
 # nft add chain inet filter UDP&lt;br /&gt;
&lt;br /&gt;
関連・確立済みトラフィックは許可する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ct state related,established accept&lt;br /&gt;
&lt;br /&gt;
ループバックインターフェイスのトラフィックは全て許可する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input iif lo accept&lt;br /&gt;
&lt;br /&gt;
不正なトラフィックは全て破棄する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ct state invalid drop&lt;br /&gt;
&lt;br /&gt;
新しいエコー要求 (ping) は許可する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol icmp icmp type echo-request ct state new accept&lt;br /&gt;
&lt;br /&gt;
新しい udp トラフィックは UDP チェインにジャンプする:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol udp ct state new jump UDP&lt;br /&gt;
&lt;br /&gt;
新しい tcp トラフィックは TCP チェインにジャンプする:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol tcp tcp flags \&amp;amp; \(fin\|syn\|rst\|ack\) == syn ct state new jump TCP&lt;br /&gt;
&lt;br /&gt;
他のルールによって処理されなかったトラフィックは全て拒否する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol udp reject&lt;br /&gt;
 # nft add rule inet filter input ip protocol tcp reject with tcp reset&lt;br /&gt;
 # nft add rule inet filter input counter reject with icmp type prot-unreachable&lt;br /&gt;
&lt;br /&gt;
ここから TCP と UDP チェインで処理する接続で開きたいポートを決めます。例えばウェブサーバーの接続を開くには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 80 accept&lt;br /&gt;
&lt;br /&gt;
ポート 443 からのウェブサーバーの HTTPS 接続を許可するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 443 accept&lt;br /&gt;
&lt;br /&gt;
ポート 22 の SSH 接続を許可するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 22 accept&lt;br /&gt;
&lt;br /&gt;
DNS リクエストを許可するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 53 accept&lt;br /&gt;
 # nft add rule inet filter UDP tcp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
設定に満足したら変更を保存して永続化させてください。&lt;br /&gt;
&lt;br /&gt;
=== ブルートフォース攻撃の対策 ===&lt;br /&gt;
&lt;br /&gt;
[[Sshguard]] はブルートフォース攻撃を検出して一時的に IP アドレスに基づきブロックするようにファイアウォールを編集します。Sshguard で nftables を使うように設定する方法は [[Sshguard#nftables]] を見てください。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Docker と共に使う ===&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 次のセットアップでは、{{ic|--net host --privileged}} を使用してもコンテナ内で {{ic|AF_BLUETOOTH}} などのプロトコルを利用できなくなります。&lt;br /&gt;
* Rootless Dockerコンテナはすでに別のネットワーク名前空間で実行されています。何もする必要がないかもしれません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
nftables を使用すると、[[Docker]] のネットワーク (おそらく他のコンテナランタイムも同様) に干渉する可能性があります。&lt;br /&gt;
iptables ルールにパッチを適用して定義されたサービス開始順序を確保するか、docker の使用が非常に制限される dockerのiptablesの管理を完全に無効にするなど、さまざまな回避策がインターネット上で見つかります。&lt;br /&gt;
(ポートフォワーディングや docker-compose を考えてください)&lt;br /&gt;
&lt;br /&gt;
信頼できる方法は、docker を別のネットワーク名前空間で実行させ、そこで任意の処理を実行できるようにすることです。 &lt;br /&gt;
Docker が nftables と iptables ルールを混在させないように、{{Pkg|iptables-nft}} を&#039;&#039;&#039;使用しない&#039;&#039;&#039;方が良いでしょう。&lt;br /&gt;
&lt;br /&gt;
以下の docker サービス [[ドロップインファイル]] を使用してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/docker.service.d/netns.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
PrivateNetwork=yes&lt;br /&gt;
&lt;br /&gt;
# cleanup&lt;br /&gt;
ExecStartPre=-nsenter -t 1 -n -- ip link delete docker0&lt;br /&gt;
&lt;br /&gt;
# add veth&lt;br /&gt;
ExecStartPre=nsenter -t 1 -n -- ip link add docker0 type veth peer name docker0_ns&lt;br /&gt;
ExecStartPre=sh -c &#039;nsenter -t 1 -n -- ip link set docker0_ns netns &amp;quot;$$BASHPID&amp;quot; &amp;amp;&amp;amp; true&#039;&lt;br /&gt;
ExecStartPre=ip link set docker0_ns name eth0&lt;br /&gt;
&lt;br /&gt;
# bring host online&lt;br /&gt;
ExecStartPre=nsenter -t 1 -n -- ip addr add 10.0.0.1/24 dev docker0&lt;br /&gt;
ExecStartPre=nsenter -t 1 -n -- ip link set docker0 up&lt;br /&gt;
&lt;br /&gt;
# bring ns online&lt;br /&gt;
ExecStartPre=ip addr add 10.0.0.100/24 dev eth0&lt;br /&gt;
ExecStartPre=ip link set eth0 up&lt;br /&gt;
ExecStartPre=ip route add default via 10.0.0.1 dev eth0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セットアップにおいてIPアドレス {{ic|10.0.0.*}} が適切でない場合は、調整してください。&lt;br /&gt;
&lt;br /&gt;
以下のポストルーティングルールで、{{ic|docker0}} のIPフォワーディングを有効にし、NATを設定します:&lt;br /&gt;
&lt;br /&gt;
 iifname docker0 oifname eth0 masquerade&lt;br /&gt;
&lt;br /&gt;
次に、[[インターネット共有#パケット転送の有効化|kernel IP forwarding]] が有効になっていることを確認します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
これで、nftables を使用して {{ic|docker0}} インターフェイスのファイアウォールとポートフォワーディングを干渉することなくセットアップできるようになります。&lt;br /&gt;
&lt;br /&gt;
==参照==&lt;br /&gt;
* [https://wiki.nftables.org/ netfilter nftables wiki]&lt;br /&gt;
* [https://lwn.net/Articles/324251/ nftables の最初のリリース]&lt;br /&gt;
* [https://home.regit.org/netfilter-en/nftables-quick-howto/ nftables クイックハウツー]&lt;br /&gt;
* [https://lwn.net/Articles/564095/ nftables の帰還]&lt;br /&gt;
* [https://developers.redhat.com/blog/2016/10/28/what-comes-after-iptables-its-successor-of-course-nftables/ What comes after ‘iptables’? It’s successor, of course: `nftables`]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Nftables&amp;diff=34046</id>
		<title>Nftables</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Nftables&amp;diff=34046"/>
		<updated>2023-09-20T04:27:04Z</updated>

		<summary type="html">&lt;p&gt;Hikali: nftables#トラブルシューティング の翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:nftables}}&lt;br /&gt;
[[Category:ファイアウォール]]&lt;br /&gt;
[[en:nftables]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|iptables}}&lt;br /&gt;
{{Related|Firewalld}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[https://netfilter.org/projects/nftables/ nftables] は既存の ip-, ip6-, arp-, ebtables フレームワークを置き換える netfilter のプロジェクトです。新しいパケットフィルタリングフレームワーク、新しいユーザースペースユーティリティ (nft)、そして ip- と ip6tables の互換レイヤーを提供します。現行のフック、接続追跡システム、ユーザースペースのキューイングコンポーネント、そして netfilter のログサブシステムを使っています。&lt;br /&gt;
&lt;br /&gt;
nftables は3つのメインコンポーネントから構成されています: カーネルの実装、libnl netlink communication そして nftables ユーザースペースフロントエンド。カーネルは netlink の設定インターフェイスだけでなく、小さなクラス言語インタプリタを使用するランタイムのルールセットの評価も提供します。libnl にはカーネルと通信するためのローレベルな関数が含まれています。nftables フロントエンドはユーザーが対話するものです。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.nftables.org/wiki-nftables/index.php/Main_Page nftables の公式 wiki] には詳しい情報が載っています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
nftables のユーザーランドユーティリティは {{Pkg|nftables}} パッケージで利用できます。開発版の {{AUR|nftables-git}} パッケージも存在します。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ほとんどの [[iptables#Front-ends|iptables フロントエンド]] はnftables の直接的または間接的なサポートを備えていませんが、導入することは可能です。[https://www.spinics.net/lists/netfilter/msg58215.html] nftables と iptables の両方をサポートするグラフィカルなフロントエンドとしては、[[firewalld]] があります。[https://firewalld.org/2018/07/nftables-backend]}}&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
nftables ではコマンドラインで作成される一時的なルールと、ファイルに保存して読み込まれる永続的なルールを区別していません。デフォルトファイルの {{ic|/etc/nftables.conf}} には &amp;quot;inet filter&amp;quot; という名前のシンプルな ipv4/ipv6 ファイアウォールテーブルが既に記述されています。&lt;br /&gt;
&lt;br /&gt;
{{ic|nftables.service}} を[[起動]]・[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでルールセットを確認できます:&lt;br /&gt;
&lt;br /&gt;
 # nft list ruleset&lt;br /&gt;
&lt;br /&gt;
=== シンプルなファイアウォール ===&lt;br /&gt;
​&lt;br /&gt;
{{Pkg|nftables}} には、{{ic|/etc/nftables.conf}} ファイルに保存されたシンプルで安全なファイアウォール設定が付属しています。&lt;br /&gt;
​&lt;br /&gt;
{{ic|nftables.service}} は、[[起動]]または[[有効化]]時に、このファイルからルールを読み込みます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
nftables のユーザースペースユーティリティ {{ic|nft}} は現在カーネルのためにルールセットを処理する前にほとんどのルールセットの評価を行います。ルールはチェインに保存され、チェインはテーブルに保存されます。下のセクションではルールを作成・編集する方法を説明します。&lt;br /&gt;
&lt;br /&gt;
下のセクションで行った変更は全て一時的なものになります。変更を永続化するにはルールセットを {{ic|/etc/nftables.conf}} に保存してください (ルールセットは {{ic|nftables.service}} によって読み込まれます):&lt;br /&gt;
&lt;br /&gt;
 # nft list ruleset &amp;gt; /etc/nftables.conf&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|nft list}} は変数の定義を出力しません。{{ic|/etc/nftables.conf}} に何か記述していた場合、定義は失われます。ルールによって使われていた変数は変数の値に置き換えられます。}}&lt;br /&gt;
&lt;br /&gt;
ファイルから入力するには {{ic|-f}} フラグを使用します:&lt;br /&gt;
&lt;br /&gt;
 # nft -f &#039;&#039;filename&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ロード済みのルールは自動的に消去されることはないので注意してください。&lt;br /&gt;
&lt;br /&gt;
利用可能なコマンドの一覧は {{man|8|nft}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===テーブル===&lt;br /&gt;
&lt;br /&gt;
テーブルは[[#チェイン|チェイン]]を保持します。iptables のテーブルと違って、nftables には初めから組み込まれているテーブルはありません。テーブルの数や名前はユーザーが自由に決めることができますが、各テーブルにはアドレスファミリーをひとつしか保持することができません。5つのファミリーのうち指定したファミリーのパケットにだけ適用されます:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! nftables ファミリー || iptables ユーティリティ&lt;br /&gt;
|-&lt;br /&gt;
| ip || iptables&lt;br /&gt;
|-&lt;br /&gt;
| ip6 || ip6tables&lt;br /&gt;
|-&lt;br /&gt;
| inet || iptables と ip6tables&lt;br /&gt;
|-&lt;br /&gt;
| arp || arptables&lt;br /&gt;
|-&lt;br /&gt;
| bridge || ebtables&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ic|ip}} (IPv4) がデフォルトのファミリーです。特に指定がなければ {{ic|ip}} が使われます。&lt;br /&gt;
&lt;br /&gt;
IPv4 と IPv6 の両方に適用されるルールを作成するには {{ic|inet}} を使います。{{ic|inet}} を使うには Linux 3.15 以上が必要で、{{ic|ip}} と {{ic|ip6}} ファミリーを統一してルールを簡単に定義できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|inet}} は {{ic|nat}} タイプのチェインでは使えず、{{ic|filter}} タイプのチェインを使う必要があります ([https://www.spinics.net/lists/netfilter/msg56411.html ソース])。}}&lt;br /&gt;
&lt;br /&gt;
アドレスフファミリーの完全な定義は {{man|8|nft}} の {{ic|ADDRESS FAMILIES}} セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
以下で例示しているコマンドの {{ic|&#039;&#039;family&#039;&#039;}} は全て任意であり、指定しなかった場合は {{ic|ip}} が使われます。&lt;br /&gt;
&lt;br /&gt;
==== テーブルの作成 ====&lt;br /&gt;
&lt;br /&gt;
以下のコマンドで新しいテーブルが追加されます:&lt;br /&gt;
&lt;br /&gt;
 # nft add table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== テーブルの表示 ====&lt;br /&gt;
&lt;br /&gt;
全てのテーブルを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list tables&lt;br /&gt;
&lt;br /&gt;
==== テーブル内のチェインとルールの表示 ====&lt;br /&gt;
&lt;br /&gt;
指定したテーブルの全てのチェインとルールを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
例えば {{ic|inet}} ファミリーの {{ic|filter}} テーブルのルールを全て表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list table inet filter&lt;br /&gt;
&lt;br /&gt;
==== テーブルの削除 ====&lt;br /&gt;
&lt;br /&gt;
テーブルを削除するには:&lt;br /&gt;
&lt;br /&gt;
 # nft delete table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
テーブルはチェインが全く存在しない場合にのみ削除できます。&lt;br /&gt;
&lt;br /&gt;
==== テーブルのクリア ====&lt;br /&gt;
&lt;br /&gt;
テーブルから全てのルールを消去するには:&lt;br /&gt;
&lt;br /&gt;
 # nft flush table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===チェイン===&lt;br /&gt;
&lt;br /&gt;
チェインの用途は[[#ルール|ルール]]を保持することです。iptables のチェインと違って、nftables には初めから組み込まれているチェインはありません。そのためチェインが netfilter フレームワークにあるタイプやフックをどれも使わない場合、iptables とは異なりチェインを通り抜けるパケットは nftables の影響を受けません。&lt;br /&gt;
&lt;br /&gt;
チェインには2つのタイプがあります。&#039;&#039;base&#039;&#039; チェインはネットワークスタックからのパケットのエントリポイントとなります。フックの値を指定することができます。&#039;&#039;regular&#039;&#039; チェインはジャンプターゲットとして使用することができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドで使っている {{ic|&#039;&#039;family&#039;&#039;}} は全て任意であり、指定しなかった場合は {{ic|ip}} が使われます。&lt;br /&gt;
&lt;br /&gt;
==== チェインの作成 ====&lt;br /&gt;
&lt;br /&gt;
===== Regular チェイン =====&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは {{ic|&#039;&#039;table&#039;&#039;}} という名前のテーブルに {{ic|&#039;&#039;chain&#039;&#039;}} という名前のレギュラーチェインを追加します:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
例えば、{{ic|inet}} アドレスファミリーの {{ic|filter}} テーブルに {{ic|tcpchain}} という名前のレギュラーチェインを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter tcpchain&lt;br /&gt;
&lt;br /&gt;
===== Base チェイン =====&lt;br /&gt;
&lt;br /&gt;
ベースチェインを追加するにはフックとプライオリティの値を指定します:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039; { type &#039;&#039;type&#039;&#039; hook &#039;&#039;hook&#039;&#039; priority &#039;&#039;priority&#039;&#039; \; }&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;type&#039;&#039;}} は {{ic|filter}}, {{ic|route}}, {{ic|nat}} のどれかから選ぶことができます。&lt;br /&gt;
&lt;br /&gt;
IPv4/IPv6/Inet アドレスファミリーでは {{ic|&#039;&#039;hook&#039;&#039;}} は {{ic|prerouting}}, {{ic|input}}, {{ic|forward}}, {{ic|output}}, {{ic|postrouting}} のどれかになります。他のファミリーのフックについては {{man|8|nft}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;priority&#039;&#039;}} には整数値を指定します。低い値のチェインが先に処理され、負の値を指定することもできます [https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains#Base_chain_types]。&lt;br /&gt;
&lt;br /&gt;
例えば、input パケットをフィルタリングするベースチェインを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter input { type filter hook input priority 0\; }&lt;br /&gt;
&lt;br /&gt;
{{ic|add}} を {{ic|create}} に置き換えると、チェインが既に存在するときにエラーが返ってくるようになります。&lt;br /&gt;
&lt;br /&gt;
==== ルールの表示 ====&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでチェインの全てのルールを表示できます:&lt;br /&gt;
&lt;br /&gt;
 # nft list chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
例えば、{{ic|filter}} という名前の {{ic|inet}} テーブルに存在する {{ic|output}} という名前のチェインのルールを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list chain inet filter output&lt;br /&gt;
&lt;br /&gt;
==== チェインの編集 ====&lt;br /&gt;
&lt;br /&gt;
チェインを編集したいときは、チェインの名前を指定して変更したいルールを定義します:&lt;br /&gt;
&lt;br /&gt;
 # &amp;lt;nowiki&amp;gt;nft chain &amp;lt;table&amp;gt; &amp;lt;family&amp;gt; &amp;lt;chain&amp;gt; { [ type &amp;lt;type&amp;gt; hook &amp;lt;hook&amp;gt; device &amp;lt;device&amp;gt; priority &amp;lt;priority&amp;gt; \; policy &amp;lt;policy&amp;gt; \; ] }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例えば、デフォルトテーブルの input チェインポリシーを &amp;quot;accept&amp;quot; から &amp;quot;drop&amp;quot; に変更したい場合:&lt;br /&gt;
&lt;br /&gt;
 # nft chain inet filter input { policy drop \; }&lt;br /&gt;
&lt;br /&gt;
==== チェインの削除 ====&lt;br /&gt;
&lt;br /&gt;
チェインを削除するには:&lt;br /&gt;
&lt;br /&gt;
 # nft delete chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
削除するチェインにはルールやジャンプターゲットが含まれていてはいけません。&lt;br /&gt;
&lt;br /&gt;
==== チェインのルールを消去 ====&lt;br /&gt;
&lt;br /&gt;
チェインからルールを消去するには:&lt;br /&gt;
&lt;br /&gt;
 # nft flush chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ルール ===&lt;br /&gt;
&lt;br /&gt;
ルールは表現または宣言から構成され、チェインの中に格納されます。&lt;br /&gt;
&lt;br /&gt;
==== ルールの追加 ====&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;iptables-translate&#039;&#039; ユーティリティを使うことで [[iptables]] のルールを nftables フォーマットに変換できます。}}&lt;br /&gt;
&lt;br /&gt;
チェインにルールを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039; &#039;&#039;position&#039;&#039; &#039;&#039;statement&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ルールは {{ic|&#039;&#039;position&#039;&#039;}} に追加されます。位置は指定しなくてもかまいません。指定しなかった場合、ルールはチェインの末尾に追加されます。&lt;br /&gt;
&lt;br /&gt;
特定の位置の前にルールを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft insert rule &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039; &#039;&#039;position&#039;&#039; &#039;&#039;statement&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;position&#039;&#039;}} を指定しなかった場合、ルールはチェインの一番前に追加されます。&lt;br /&gt;
&lt;br /&gt;
===== 表現 =====&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;statement&#039;&#039;}} にはマッチする表現と判断宣言が入ります。判断宣言には {{ic|accept}}, {{ic|drop}}, {{ic|queue}}, {{ic|continue}}, {{ic|return}}, {{ic|jump &#039;&#039;chain&#039;&#039;}}, {{ic|goto &#039;&#039;chain&#039;&#039;}} などが存在します。判断宣言以外の宣言も指定できます。詳しくは {{man|8|nft}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
nftables では様々な表現を使うことができ、ほとんどは、iptables と対応するようになっています。一番大きな違いは汎用的なマッチと暗黙的なマッチが存在しないことです。汎用的なマッチとは、{{ic|--protocol}} や {{ic|--source}} のように、いつでも使うことができるマッチで、暗黙的なマッチとは、{{ic|--sport}} のように、特定のプロトコルでしか使えないマッチのことです。&lt;br /&gt;
&lt;br /&gt;
以下は利用できるマッチの一部です:&lt;br /&gt;
&lt;br /&gt;
* meta    (メタプロパティ。例: インターフェイス)&lt;br /&gt;
* icmp    (ICMP プロトコル)&lt;br /&gt;
* icmpv6  (ICMPv6 プロトコル)&lt;br /&gt;
* ip      (IP プロトコル)&lt;br /&gt;
* ip6     (IPv6 プロトコル)&lt;br /&gt;
* tcp     (TCP プロトコル)&lt;br /&gt;
* udp     (UDP プロトコル)&lt;br /&gt;
* sctp    (SCTP プロトコル)&lt;br /&gt;
* ct      (接続のトラッキング)&lt;br /&gt;
&lt;br /&gt;
以下はマッチ引数の一部です (完全なリストは {{man|8|nft}} を見て下さい):&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
meta:&lt;br /&gt;
  oif &amp;lt;output interface INDEX&amp;gt;&lt;br /&gt;
  iif &amp;lt;input interface INDEX&amp;gt;&lt;br /&gt;
  oifname &amp;lt;output interface NAME&amp;gt;&lt;br /&gt;
  iifname &amp;lt;input interface NAME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  (oif and iif accept string arguments and are converted to interface indexes)&lt;br /&gt;
  (oifname and iifname are more dynamic, but slower because of string matching)&lt;br /&gt;
&lt;br /&gt;
icmp:&lt;br /&gt;
  type &amp;lt;icmp type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
icmpv6:&lt;br /&gt;
  type &amp;lt;icmpv6 type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip:&lt;br /&gt;
  protocol &amp;lt;protocol&amp;gt;&lt;br /&gt;
  daddr &amp;lt;destination address&amp;gt;&lt;br /&gt;
  saddr &amp;lt;source address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip6:&lt;br /&gt;
  daddr &amp;lt;destination address&amp;gt;&lt;br /&gt;
  saddr &amp;lt;source address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tcp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
udp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sctp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ct:&lt;br /&gt;
  state &amp;lt;new | established | related | invalid&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====削除====&lt;br /&gt;
個々のルールはハンドルを使わないと削除することができません。{{ic|nft --handle list}} コマンドを使うことでルールのハンドルを確認できます。{{ic|--handle}} スイッチを付けると、{{ic|nft}} はハンドルを出力するようになります。&lt;br /&gt;
&lt;br /&gt;
以下ではルールのハンドルを確認してルールを削除しています。未解決の IP アドレスのような、数字の出力を表示するときは {{ic|--number}} 引数を使うと良いでしょう。&lt;br /&gt;
{{hc|# nft --handle --numeric list chain filter input|2=&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table ip fltrTable {&lt;br /&gt;
     chain input {&lt;br /&gt;
          type filter hook input priority 0;&lt;br /&gt;
          ip saddr 127.0.0.1 accept # handle 10&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
 # nft delete rule fltrTable input handle 10&lt;br /&gt;
&lt;br /&gt;
{{ic|nft flush table}} コマンドを使うことでテーブルの全てのチェインをフラッシュできます。個別のチェインをフラッシュするときは {{ic|nft flush chain}} または {{ic|nft delete rule}} コマンドを使います。&lt;br /&gt;
 # nft flush table foo&lt;br /&gt;
 # nft flush chain foo bar&lt;br /&gt;
 # nft delete rule ip6 foo bar&lt;br /&gt;
最初のコマンドでは ip {{ic|foo}} テーブルのチェイン全てをフラッシュします。2番目のコマンドは ip {{ic|foo}} テーブルの {{ic|bar}} チェインをフラッシュします。3番目のコマンドは ip6 {{ic|foo}} テーブルの {{ic|bar}} チェインの全てのルールを削除します。&lt;br /&gt;
&lt;br /&gt;
===アトミックリロード===&lt;br /&gt;
現在のルールセットをフラッシュする:&lt;br /&gt;
 # echo &amp;quot;flush ruleset&amp;quot; &amp;gt; /tmp/nftables&lt;br /&gt;
現在のルールセットをダンプする:&lt;br /&gt;
 # nft list ruleset &amp;gt;&amp;gt; /tmp/nftables&lt;br /&gt;
{{ic|/tmp/nftables}} を編集して次のコマンドで変更を適用:&lt;br /&gt;
 # nft -f /tmp/nftables&lt;br /&gt;
&lt;br /&gt;
== サンプル ==&lt;br /&gt;
&lt;br /&gt;
=== ワークステーション ===&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/nftables.conf|2=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0;&lt;br /&gt;
&lt;br /&gt;
                # accept any localhost traffic&lt;br /&gt;
                iif lo accept&lt;br /&gt;
&lt;br /&gt;
                # accept traffic originated from us&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
                # activate the following line to accept common local services&lt;br /&gt;
                #tcp dport { 22, 80, 443 } ct state new accept&lt;br /&gt;
&lt;br /&gt;
                # accept neighbour discovery otherwise IPv6 connectivity breaks.&lt;br /&gt;
                ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit,  nd-router-advert, nd-neighbor-advert } accept&lt;br /&gt;
&lt;br /&gt;
                # count and drop any other traffic&lt;br /&gt;
                counter drop&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== シンプルな IPv4/IPv6 ファイアウォール ===&lt;br /&gt;
&lt;br /&gt;
{{hc|firewall.rules|2=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# A simple firewall&lt;br /&gt;
&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
	chain input {&lt;br /&gt;
		type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
		# established/related connections&lt;br /&gt;
		ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
		# invalid connections&lt;br /&gt;
		ct state invalid drop&lt;br /&gt;
		&lt;br /&gt;
		# loopback interface&lt;br /&gt;
		iif lo accept&lt;br /&gt;
&lt;br /&gt;
		# ICMP&lt;br /&gt;
		# routers may also want: mld-listener-query, nd-router-solicit&lt;br /&gt;
		ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept&lt;br /&gt;
		ip protocol icmp icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem } accept&lt;br /&gt;
&lt;br /&gt;
		# SSH (port 22)&lt;br /&gt;
		tcp dport ssh accept&lt;br /&gt;
&lt;br /&gt;
		# HTTP (ports 80 &amp;amp; 443)&lt;br /&gt;
		tcp dport { http, https } accept&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain forward {&lt;br /&gt;
		type filter hook forward priority 0; policy drop;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain output {&lt;br /&gt;
		type filter hook output priority 0; policy accept;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===レート制限 IPv4/IPv6 ファイアウォール===&lt;br /&gt;
&lt;br /&gt;
{{hc|firewall.2.rules|2=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
	chain input {&lt;br /&gt;
		type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
		# no ping floods:&lt;br /&gt;
		ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 10/second accept&lt;br /&gt;
		ip protocol icmp icmp type echo-request limit rate 10/second accept&lt;br /&gt;
&lt;br /&gt;
		ct state established,related accept&lt;br /&gt;
		ct state invalid drop&lt;br /&gt;
&lt;br /&gt;
		iif lo accept&lt;br /&gt;
&lt;br /&gt;
		# avoid brute force on ssh:&lt;br /&gt;
		tcp dport ssh limit rate 15/minute accept&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain forward {&lt;br /&gt;
		type filter hook forward priority 0; policy drop;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain output {&lt;br /&gt;
		type filter hook output priority 0; policy accept;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===ジャンプ===&lt;br /&gt;
&lt;br /&gt;
設定ファイルでジャンプを使うときは、先にターゲットチェインを定義する必要があります。そうしないと {{ic|Error: Could not process rule: No such file or directory}} というエラーが発生します。&lt;br /&gt;
{{hc|jump.rules|2=&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain web {&lt;br /&gt;
        tcp dport http accept&lt;br /&gt;
        tcp dport 8080 accept&lt;br /&gt;
    }&lt;br /&gt;
    chain input {&lt;br /&gt;
        type filter hook input priority 0;&lt;br /&gt;
        ip saddr 10.0.2.0/24 jump web&lt;br /&gt;
        drop&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== インターフェイスによってルールを変える ===&lt;br /&gt;
&lt;br /&gt;
複数のネットワークインターフェイスが存在する場合、それぞれのインターフェイスごとに別々のフィルターチェインを設定したい場合があるかもしれません。例えば、ホームルーターを構築するとき、LAN 上でアクセスできるウェブサーバーを実行しつつ ({{ic|nsp3s0}} インターフェイス)、インターネットからはアクセスできないようにしたい場合 ({{ic|enp2s0}} インターフェイス) などは以下のように設定します:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;table inet filter {&lt;br /&gt;
  chain input { # this chain serves as a dispatcher&lt;br /&gt;
    type filter hook input priority 0;&lt;br /&gt;
&lt;br /&gt;
    iif lo accept # always accept loopback&lt;br /&gt;
    iifname enp2s0 jump input_enp2s0&lt;br /&gt;
    iifname enp3s0 jump input_enp3s0&lt;br /&gt;
&lt;br /&gt;
    reject with icmp type port-unreachable # refuse traffic from all other interfaces&lt;br /&gt;
  }&lt;br /&gt;
  chain input_enp2s0 { # rules applicable to public interface interface&lt;br /&gt;
    ct state {established,related} accept&lt;br /&gt;
    ct state invalid drop&lt;br /&gt;
    udp dport bootpc accept&lt;br /&gt;
    tcp dport bootpc accept&lt;br /&gt;
    reject with icmp type port-unreachable # all other traffic&lt;br /&gt;
  }&lt;br /&gt;
  chain input_enp3s0 {&lt;br /&gt;
    ct state {established,related} accept&lt;br /&gt;
    ct state invalid drop&lt;br /&gt;
    udp dport bootpc accept&lt;br /&gt;
    tcp dport bootpc accept&lt;br /&gt;
    tcp port http accept&lt;br /&gt;
    tcp port https accept&lt;br /&gt;
    reject with icmp type port-unreachable # all other traffic&lt;br /&gt;
  }&lt;br /&gt;
  chain ouput { # we let everything out&lt;br /&gt;
    type filter hook output priority 0;&lt;br /&gt;
    accept&lt;br /&gt;
  }&lt;br /&gt;
 }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
もしくは {{ic|iifname}} ステートメントを特定のインターフェイスで使用して、他のインターフェイスについてはデフォルトルールを設定するという方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== マスカレード ===&lt;br /&gt;
&lt;br /&gt;
nftables には特殊なキーワード {{ic|masquerade}} が存在し、送信元アドレスが自動的に出力インターフェイスのアドレスに設定されます ([http://wiki.nftables.org/wiki-nftables/index.php/Performing_Network_Address_Translation_%28NAT%29#Masquerading ソース])。ルーターのインターフェイスが多数の ISP に接続されているときなど、インターフェイスの IP アドレスが一定でない場合に有用です。通常は、インターフェイスの IP アドレスが変わるたびにネットワークアドレス変換 (NAT) のルールを更新する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|masquerade}} を使用するには:&lt;br /&gt;
&lt;br /&gt;
* カーネルコンフィグで以下のマスカレード設定が有効になっている必要があります。&lt;br /&gt;
&lt;br /&gt;
 CONFIG_NFT_MASQ=m&lt;br /&gt;
&lt;br /&gt;
* {{ic|masquerade}} キーワードは {{ic|nat}} タイプのチェインでのみ使うことができ、{{ic|inet}} ファミリーのテーブルでは利用できません。{{ic|ip}} ファミリーや {{ic|ip6}} ファミリーのテーブルを使ってください。&lt;br /&gt;
* マスカレードは一種のソース NAT であり、出力パスでのみ機能します。&lt;br /&gt;
&lt;br /&gt;
2つのインターフェイスが存在し {{ic|nsp3s0}} が LAN に接続され、{{ic|enp2s0}} がインターネットに接続されているマシンでの設定例:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;table ip nat {&lt;br /&gt;
  chain prerouting {&lt;br /&gt;
    type nat hook prerouting priority 0;&lt;br /&gt;
  }&lt;br /&gt;
  chain postrouting {&lt;br /&gt;
    type nat hook postrouting priority 0;&lt;br /&gt;
    oifname &amp;quot;enp0s2&amp;quot; masquerade&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== シンプルなステートフルファイアウォール ===&lt;br /&gt;
&lt;br /&gt;
[[シンプルなステートフルファイアウォール]]の記事も参照してください。&lt;br /&gt;
&lt;br /&gt;
==== シングルマシン ====&lt;br /&gt;
&lt;br /&gt;
現在のルールセットを消去:&lt;br /&gt;
&lt;br /&gt;
 # nft flush ruleset&lt;br /&gt;
&lt;br /&gt;
テーブルを追加:&lt;br /&gt;
&lt;br /&gt;
 # nft add table inet filter&lt;br /&gt;
&lt;br /&gt;
input, forward, output ベースチェインを追加。input と forward のポリシーは破棄にして、output のポリシーは許可にする:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }&lt;br /&gt;
 # nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }&lt;br /&gt;
 # nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }&lt;br /&gt;
&lt;br /&gt;
レギュラーチェインを追加して tcp と udp に関連付ける:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter TCP&lt;br /&gt;
 # nft add chain inet filter UDP&lt;br /&gt;
&lt;br /&gt;
関連・確立済みトラフィックは許可する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ct state related,established accept&lt;br /&gt;
&lt;br /&gt;
ループバックインターフェイスのトラフィックは全て許可する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input iif lo accept&lt;br /&gt;
&lt;br /&gt;
不正なトラフィックは全て破棄する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ct state invalid drop&lt;br /&gt;
&lt;br /&gt;
新しいエコー要求 (ping) は許可する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol icmp icmp type echo-request ct state new accept&lt;br /&gt;
&lt;br /&gt;
新しい udp トラフィックは UDP チェインにジャンプする:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol udp ct state new jump UDP&lt;br /&gt;
&lt;br /&gt;
新しい tcp トラフィックは TCP チェインにジャンプする:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol tcp tcp flags \&amp;amp; \(fin\|syn\|rst\|ack\) == syn ct state new jump TCP&lt;br /&gt;
&lt;br /&gt;
他のルールによって処理されなかったトラフィックは全て拒否する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol udp reject&lt;br /&gt;
 # nft add rule inet filter input ip protocol tcp reject with tcp reset&lt;br /&gt;
 # nft add rule inet filter input counter reject with icmp type prot-unreachable&lt;br /&gt;
&lt;br /&gt;
ここから TCP と UDP チェインで処理する接続で開きたいポートを決めます。例えばウェブサーバーの接続を開くには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 80 accept&lt;br /&gt;
&lt;br /&gt;
ポート 443 からのウェブサーバーの HTTPS 接続を許可するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 443 accept&lt;br /&gt;
&lt;br /&gt;
ポート 22 の SSH 接続を許可するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 22 accept&lt;br /&gt;
&lt;br /&gt;
DNS リクエストを許可するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 53 accept&lt;br /&gt;
 # nft add rule inet filter UDP tcp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
設定に満足したら変更を保存して永続化させてください。&lt;br /&gt;
&lt;br /&gt;
=== ブルートフォース攻撃の対策 ===&lt;br /&gt;
&lt;br /&gt;
[[Sshguard]] はブルートフォース攻撃を検出して一時的に IP アドレスに基づきブロックするようにファイアウォールを編集します。Sshguard で nftables を使うように設定する方法は [[Sshguard#nftables]] を見てください。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Docker と共に使う ===&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* 次のセットアップでは、{{ic|--net host --privileged}} を使用してもコンテナ内で {{ic|AF_BLUETOOTH}} などのプロトコルを利用できなくなります。&lt;br /&gt;
* Rootless Dockerコンテナはすでに別のネットワーク名前空間で実行されています。何もする必要がないかもしれません。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
nftables を使用すると、[[Docker]] のネットワーク (おそらく他のコンテナランタイムも同様) に干渉する可能性があります。&lt;br /&gt;
iptables ルールにパッチを適用して定義されたサービス開始順序を確保するか、docker の使用が非常に制限される dockerのiptablesの管理を完全に無効にするなど、さまざまな回避策がインターネット上で見つかります。&lt;br /&gt;
(ポートフォワーディングや docker-compose を考えてください)&lt;br /&gt;
&lt;br /&gt;
信頼できる方法は、docker を別のネットワーク名前空間で実行させ、そこで任意の処理を実行できるようにすることです。 &lt;br /&gt;
Docker が nftables と iptables ルールを混在させないように、{{Pkg|iptables-nft}} を&amp;quot;&amp;quot;使用しない&amp;quot;&amp;quot; 方が良いでしょう。&lt;br /&gt;
&lt;br /&gt;
以下の docker サービス [[ドロップインファイル]] を使用してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/docker.service.d/netns.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
PrivateNetwork=yes&lt;br /&gt;
&lt;br /&gt;
# cleanup&lt;br /&gt;
ExecStartPre=-nsenter -t 1 -n -- ip link delete docker0&lt;br /&gt;
&lt;br /&gt;
# add veth&lt;br /&gt;
ExecStartPre=nsenter -t 1 -n -- ip link add docker0 type veth peer name docker0_ns&lt;br /&gt;
ExecStartPre=sh -c &#039;nsenter -t 1 -n -- ip link set docker0_ns netns &amp;quot;$$BASHPID&amp;quot; &amp;amp;&amp;amp; true&#039;&lt;br /&gt;
ExecStartPre=ip link set docker0_ns name eth0&lt;br /&gt;
&lt;br /&gt;
# bring host online&lt;br /&gt;
ExecStartPre=nsenter -t 1 -n -- ip addr add 10.0.0.1/24 dev docker0&lt;br /&gt;
ExecStartPre=nsenter -t 1 -n -- ip link set docker0 up&lt;br /&gt;
&lt;br /&gt;
# bring ns online&lt;br /&gt;
ExecStartPre=ip addr add 10.0.0.100/24 dev eth0&lt;br /&gt;
ExecStartPre=ip link set eth0 up&lt;br /&gt;
ExecStartPre=ip route add default via 10.0.0.1 dev eth0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
セットアップにおいてIPアドレス {{ic|10.0.0.*}} が適切でない場合は、調整してください。&lt;br /&gt;
&lt;br /&gt;
以下のポストルーティングルールで、{{ic|docker0}} のIPフォワーディングを有効にし、NATを設定します:&lt;br /&gt;
&lt;br /&gt;
 iifname docker0 oifname eth0 masquerade&lt;br /&gt;
&lt;br /&gt;
次に、[[インターネット共有#パケット転送の有効化|kernel IP forwarding]] が有効になっていることを確認します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
これで、nftables を使用して {{ic|docker0}} インターフェイスのファイアウォールとポートフォワーディングを干渉することなくセットアップできるようになります。&lt;br /&gt;
&lt;br /&gt;
==参照==&lt;br /&gt;
* [https://wiki.nftables.org/ netfilter nftables wiki]&lt;br /&gt;
* [https://lwn.net/Articles/324251/ nftables の最初のリリース]&lt;br /&gt;
* [https://home.regit.org/netfilter-en/nftables-quick-howto/ nftables クイックハウツー]&lt;br /&gt;
* [https://lwn.net/Articles/564095/ nftables の帰還]&lt;br /&gt;
* [https://developers.redhat.com/blog/2016/10/28/what-comes-after-iptables-its-successor-of-course-nftables/ What comes after ‘iptables’? It’s successor, of course: `nftables`]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Nftables&amp;diff=34016</id>
		<title>Nftables</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Nftables&amp;diff=34016"/>
		<updated>2023-09-16T22:44:32Z</updated>

		<summary type="html">&lt;p&gt;Hikali: 誤字の修正 (設定をが付属 -&amp;gt; 設定が付属)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:nftables}}&lt;br /&gt;
[[Category:ファイアウォール]]&lt;br /&gt;
[[en:nftables]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|iptables}}&lt;br /&gt;
{{Related|Firewalld}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[https://netfilter.org/projects/nftables/ nftables] は既存の ip-, ip6-, arp-, ebtables フレームワークを置き換える netfilter のプロジェクトです。新しいパケットフィルタリングフレームワーク、新しいユーザースペースユーティリティ (nft)、そして ip- と ip6tables の互換レイヤーを提供します。現行のフック、接続追跡システム、ユーザースペースのキューイングコンポーネント、そして netfilter のログサブシステムを使っています。&lt;br /&gt;
&lt;br /&gt;
nftables は3つのメインコンポーネントから構成されています: カーネルの実装、libnl netlink communication そして nftables ユーザースペースフロントエンド。カーネルは netlink の設定インターフェイスだけでなく、小さなクラス言語インタプリタを使用するランタイムのルールセットの評価も提供します。libnl にはカーネルと通信するためのローレベルな関数が含まれています。nftables フロントエンドはユーザーが対話するものです。&lt;br /&gt;
&lt;br /&gt;
[https://wiki.nftables.org/wiki-nftables/index.php/Main_Page nftables の公式 wiki] には詳しい情報が載っています。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
nftables のユーザーランドユーティリティは {{Pkg|nftables}} パッケージで利用できます。開発版の {{AUR|nftables-git}} パッケージも存在します。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ほとんどの [[iptables#Front-ends|iptables フロントエンド]] はnftables の直接的または間接的なサポートを備えていませんが、導入することは可能です。[https://www.spinics.net/lists/netfilter/msg58215.html] nftables と iptables の両方をサポートするグラフィカルなフロントエンドとしては、[[firewalld]] があります。[https://firewalld.org/2018/07/nftables-backend]}}&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
nftables ではコマンドラインで作成される一時的なルールと、ファイルに保存して読み込まれる永続的なルールを区別していません。デフォルトファイルの {{ic|/etc/nftables.conf}} には &amp;quot;inet filter&amp;quot; という名前のシンプルな ipv4/ipv6 ファイアウォールテーブルが既に記述されています。&lt;br /&gt;
&lt;br /&gt;
{{ic|nftables.service}} を[[起動]]・[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでルールセットを確認できます:&lt;br /&gt;
&lt;br /&gt;
 # nft list ruleset&lt;br /&gt;
&lt;br /&gt;
=== シンプルなファイアウォール ===&lt;br /&gt;
​&lt;br /&gt;
{{Pkg|nftables}} には、{{ic|/etc/nftables.conf}} ファイルに保存されたシンプルで安全なファイアウォール設定が付属しています。&lt;br /&gt;
​&lt;br /&gt;
{{ic|nftables.service}} は、[[起動]]または[[有効化]]時に、このファイルからルールを読み込みます。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
nftables のユーザースペースユーティリティ {{ic|nft}} は現在カーネルのためにルールセットを処理する前にほとんどのルールセットの評価を行います。ルールはチェインに保存され、チェインはテーブルに保存されます。下のセクションではルールを作成・編集する方法を説明します。&lt;br /&gt;
&lt;br /&gt;
下のセクションで行った変更は全て一時的なものになります。変更を永続化するにはルールセットを {{ic|/etc/nftables.conf}} に保存してください (ルールセットは {{ic|nftables.service}} によって読み込まれます):&lt;br /&gt;
&lt;br /&gt;
 # nft list ruleset &amp;gt; /etc/nftables.conf&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|nft list}} は変数の定義を出力しません。{{ic|/etc/nftables.conf}} に何か記述していた場合、定義は失われます。ルールによって使われていた変数は変数の値に置き換えられます。}}&lt;br /&gt;
&lt;br /&gt;
ファイルから入力するには {{ic|-f}} フラグを使用します:&lt;br /&gt;
&lt;br /&gt;
 # nft -f &#039;&#039;filename&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ロード済みのルールは自動的に消去されることはないので注意してください。&lt;br /&gt;
&lt;br /&gt;
利用可能なコマンドの一覧は {{man|8|nft}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
===テーブル===&lt;br /&gt;
&lt;br /&gt;
テーブルは[[#チェイン|チェイン]]を保持します。iptables のテーブルと違って、nftables には初めから組み込まれているテーブルはありません。テーブルの数や名前はユーザーが自由に決めることができますが、各テーブルにはアドレスファミリーをひとつしか保持することができません。5つのファミリーのうち指定したファミリーのパケットにだけ適用されます:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! nftables ファミリー || iptables ユーティリティ&lt;br /&gt;
|-&lt;br /&gt;
| ip || iptables&lt;br /&gt;
|-&lt;br /&gt;
| ip6 || ip6tables&lt;br /&gt;
|-&lt;br /&gt;
| inet || iptables と ip6tables&lt;br /&gt;
|-&lt;br /&gt;
| arp || arptables&lt;br /&gt;
|-&lt;br /&gt;
| bridge || ebtables&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{ic|ip}} (IPv4) がデフォルトのファミリーです。特に指定がなければ {{ic|ip}} が使われます。&lt;br /&gt;
&lt;br /&gt;
IPv4 と IPv6 の両方に適用されるルールを作成するには {{ic|inet}} を使います。{{ic|inet}} を使うには Linux 3.15 以上が必要で、{{ic|ip}} と {{ic|ip6}} ファミリーを統一してルールを簡単に定義できます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|inet}} は {{ic|nat}} タイプのチェインでは使えず、{{ic|filter}} タイプのチェインを使う必要があります ([https://www.spinics.net/lists/netfilter/msg56411.html ソース])。}}&lt;br /&gt;
&lt;br /&gt;
アドレスフファミリーの完全な定義は {{man|8|nft}} の {{ic|ADDRESS FAMILIES}} セクションを参照してください。&lt;br /&gt;
&lt;br /&gt;
以下で例示しているコマンドの {{ic|&#039;&#039;family&#039;&#039;}} は全て任意であり、指定しなかった場合は {{ic|ip}} が使われます。&lt;br /&gt;
&lt;br /&gt;
==== テーブルの作成 ====&lt;br /&gt;
&lt;br /&gt;
以下のコマンドで新しいテーブルが追加されます:&lt;br /&gt;
&lt;br /&gt;
 # nft add table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== テーブルの表示 ====&lt;br /&gt;
&lt;br /&gt;
全てのテーブルを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list tables&lt;br /&gt;
&lt;br /&gt;
==== テーブル内のチェインとルールの表示 ====&lt;br /&gt;
&lt;br /&gt;
指定したテーブルの全てのチェインとルールを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
例えば {{ic|inet}} ファミリーの {{ic|filter}} テーブルのルールを全て表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list table inet filter&lt;br /&gt;
&lt;br /&gt;
==== テーブルの削除 ====&lt;br /&gt;
&lt;br /&gt;
テーブルを削除するには:&lt;br /&gt;
&lt;br /&gt;
 # nft delete table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
テーブルはチェインが全く存在しない場合にのみ削除できます。&lt;br /&gt;
&lt;br /&gt;
==== テーブルのクリア ====&lt;br /&gt;
&lt;br /&gt;
テーブルから全てのルールを消去するには:&lt;br /&gt;
&lt;br /&gt;
 # nft flush table &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===チェイン===&lt;br /&gt;
&lt;br /&gt;
チェインの用途は[[#ルール|ルール]]を保持することです。iptables のチェインと違って、nftables には初めから組み込まれているチェインはありません。そのためチェインが netfilter フレームワークにあるタイプやフックをどれも使わない場合、iptables とは異なりチェインを通り抜けるパケットは nftables の影響を受けません。&lt;br /&gt;
&lt;br /&gt;
チェインには2つのタイプがあります。&#039;&#039;base&#039;&#039; チェインはネットワークスタックからのパケットのエントリポイントとなります。フックの値を指定することができます。&#039;&#039;regular&#039;&#039; チェインはジャンプターゲットとして使用することができます。&lt;br /&gt;
&lt;br /&gt;
以下のコマンドで使っている {{ic|&#039;&#039;family&#039;&#039;}} は全て任意であり、指定しなかった場合は {{ic|ip}} が使われます。&lt;br /&gt;
&lt;br /&gt;
==== チェインの作成 ====&lt;br /&gt;
&lt;br /&gt;
===== Regular チェイン =====&lt;br /&gt;
&lt;br /&gt;
以下のコマンドは {{ic|&#039;&#039;table&#039;&#039;}} という名前のテーブルに {{ic|&#039;&#039;chain&#039;&#039;}} という名前のレギュラーチェインを追加します:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
例えば、{{ic|inet}} アドレスファミリーの {{ic|filter}} テーブルに {{ic|tcpchain}} という名前のレギュラーチェインを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter tcpchain&lt;br /&gt;
&lt;br /&gt;
===== Base チェイン =====&lt;br /&gt;
&lt;br /&gt;
ベースチェインを追加するにはフックとプライオリティの値を指定します:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039; { type &#039;&#039;type&#039;&#039; hook &#039;&#039;hook&#039;&#039; priority &#039;&#039;priority&#039;&#039; \; }&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;type&#039;&#039;}} は {{ic|filter}}, {{ic|route}}, {{ic|nat}} のどれかから選ぶことができます。&lt;br /&gt;
&lt;br /&gt;
IPv4/IPv6/Inet アドレスファミリーでは {{ic|&#039;&#039;hook&#039;&#039;}} は {{ic|prerouting}}, {{ic|input}}, {{ic|forward}}, {{ic|output}}, {{ic|postrouting}} のどれかになります。他のファミリーのフックについては {{man|8|nft}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;priority&#039;&#039;}} には整数値を指定します。低い値のチェインが先に処理され、負の値を指定することもできます [https://wiki.nftables.org/wiki-nftables/index.php/Configuring_chains#Base_chain_types]。&lt;br /&gt;
&lt;br /&gt;
例えば、input パケットをフィルタリングするベースチェインを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter input { type filter hook input priority 0\; }&lt;br /&gt;
&lt;br /&gt;
{{ic|add}} を {{ic|create}} に置き換えると、チェインが既に存在するときにエラーが返ってくるようになります。&lt;br /&gt;
&lt;br /&gt;
==== ルールの表示 ====&lt;br /&gt;
&lt;br /&gt;
以下のコマンドでチェインの全てのルールを表示できます:&lt;br /&gt;
&lt;br /&gt;
 # nft list chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
例えば、{{ic|filter}} という名前の {{ic|inet}} テーブルに存在する {{ic|output}} という名前のチェインのルールを表示するには:&lt;br /&gt;
&lt;br /&gt;
 # nft list chain inet filter output&lt;br /&gt;
&lt;br /&gt;
==== チェインの編集 ====&lt;br /&gt;
&lt;br /&gt;
チェインを編集したいときは、チェインの名前を指定して変更したいルールを定義します:&lt;br /&gt;
&lt;br /&gt;
 # &amp;lt;nowiki&amp;gt;nft chain &amp;lt;table&amp;gt; &amp;lt;family&amp;gt; &amp;lt;chain&amp;gt; { [ type &amp;lt;type&amp;gt; hook &amp;lt;hook&amp;gt; device &amp;lt;device&amp;gt; priority &amp;lt;priority&amp;gt; \; policy &amp;lt;policy&amp;gt; \; ] }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
例えば、デフォルトテーブルの input チェインポリシーを &amp;quot;accept&amp;quot; から &amp;quot;drop&amp;quot; に変更したい場合:&lt;br /&gt;
&lt;br /&gt;
 # nft chain inet filter input { policy drop \; }&lt;br /&gt;
&lt;br /&gt;
==== チェインの削除 ====&lt;br /&gt;
&lt;br /&gt;
チェインを削除するには:&lt;br /&gt;
&lt;br /&gt;
 # nft delete chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
削除するチェインにはルールやジャンプターゲットが含まれていてはいけません。&lt;br /&gt;
&lt;br /&gt;
==== チェインのルールを消去 ====&lt;br /&gt;
&lt;br /&gt;
チェインからルールを消去するには:&lt;br /&gt;
&lt;br /&gt;
 # nft flush chain &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== ルール ===&lt;br /&gt;
&lt;br /&gt;
ルールは表現または宣言から構成され、チェインの中に格納されます。&lt;br /&gt;
&lt;br /&gt;
==== ルールの追加 ====&lt;br /&gt;
&lt;br /&gt;
{{Tip|&#039;&#039;iptables-translate&#039;&#039; ユーティリティを使うことで [[iptables]] のルールを nftables フォーマットに変換できます。}}&lt;br /&gt;
&lt;br /&gt;
チェインにルールを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039; &#039;&#039;position&#039;&#039; &#039;&#039;statement&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ルールは {{ic|&#039;&#039;position&#039;&#039;}} に追加されます。位置は指定しなくてもかまいません。指定しなかった場合、ルールはチェインの末尾に追加されます。&lt;br /&gt;
&lt;br /&gt;
特定の位置の前にルールを追加するには:&lt;br /&gt;
&lt;br /&gt;
 # nft insert rule &#039;&#039;family&#039;&#039; &#039;&#039;table&#039;&#039; &#039;&#039;chain&#039;&#039; &#039;&#039;position&#039;&#039; &#039;&#039;statement&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;position&#039;&#039;}} を指定しなかった場合、ルールはチェインの一番前に追加されます。&lt;br /&gt;
&lt;br /&gt;
===== 表現 =====&lt;br /&gt;
&lt;br /&gt;
{{ic|&#039;&#039;statement&#039;&#039;}} にはマッチする表現と判断宣言が入ります。判断宣言には {{ic|accept}}, {{ic|drop}}, {{ic|queue}}, {{ic|continue}}, {{ic|return}}, {{ic|jump &#039;&#039;chain&#039;&#039;}}, {{ic|goto &#039;&#039;chain&#039;&#039;}} などが存在します。判断宣言以外の宣言も指定できます。詳しくは {{man|8|nft}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
nftables では様々な表現を使うことができ、ほとんどは、iptables と対応するようになっています。一番大きな違いは汎用的なマッチと暗黙的なマッチが存在しないことです。汎用的なマッチとは、{{ic|--protocol}} や {{ic|--source}} のように、いつでも使うことができるマッチで、暗黙的なマッチとは、{{ic|--sport}} のように、特定のプロトコルでしか使えないマッチのことです。&lt;br /&gt;
&lt;br /&gt;
以下は利用できるマッチの一部です:&lt;br /&gt;
&lt;br /&gt;
* meta    (メタプロパティ。例: インターフェイス)&lt;br /&gt;
* icmp    (ICMP プロトコル)&lt;br /&gt;
* icmpv6  (ICMPv6 プロトコル)&lt;br /&gt;
* ip      (IP プロトコル)&lt;br /&gt;
* ip6     (IPv6 プロトコル)&lt;br /&gt;
* tcp     (TCP プロトコル)&lt;br /&gt;
* udp     (UDP プロトコル)&lt;br /&gt;
* sctp    (SCTP プロトコル)&lt;br /&gt;
* ct      (接続のトラッキング)&lt;br /&gt;
&lt;br /&gt;
以下はマッチ引数の一部です (完全なリストは {{man|8|nft}} を見て下さい):&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
meta:&lt;br /&gt;
  oif &amp;lt;output interface INDEX&amp;gt;&lt;br /&gt;
  iif &amp;lt;input interface INDEX&amp;gt;&lt;br /&gt;
  oifname &amp;lt;output interface NAME&amp;gt;&lt;br /&gt;
  iifname &amp;lt;input interface NAME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  (oif and iif accept string arguments and are converted to interface indexes)&lt;br /&gt;
  (oifname and iifname are more dynamic, but slower because of string matching)&lt;br /&gt;
&lt;br /&gt;
icmp:&lt;br /&gt;
  type &amp;lt;icmp type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
icmpv6:&lt;br /&gt;
  type &amp;lt;icmpv6 type&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip:&lt;br /&gt;
  protocol &amp;lt;protocol&amp;gt;&lt;br /&gt;
  daddr &amp;lt;destination address&amp;gt;&lt;br /&gt;
  saddr &amp;lt;source address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ip6:&lt;br /&gt;
  daddr &amp;lt;destination address&amp;gt;&lt;br /&gt;
  saddr &amp;lt;source address&amp;gt;&lt;br /&gt;
&lt;br /&gt;
tcp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
udp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sctp:&lt;br /&gt;
  dport &amp;lt;destination port&amp;gt;&lt;br /&gt;
  sport &amp;lt;source port&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ct:&lt;br /&gt;
  state &amp;lt;new | established | related | invalid&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====削除====&lt;br /&gt;
個々のルールはハンドルを使わないと削除することができません。{{ic|nft --handle list}} コマンドを使うことでルールのハンドルを確認できます。{{ic|--handle}} スイッチを付けると、{{ic|nft}} はハンドルを出力するようになります。&lt;br /&gt;
&lt;br /&gt;
以下ではルールのハンドルを確認してルールを削除しています。未解決の IP アドレスのような、数字の出力を表示するときは {{ic|--number}} 引数を使うと良いでしょう。&lt;br /&gt;
{{hc|# nft --handle --numeric list chain filter input|2=&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table ip fltrTable {&lt;br /&gt;
     chain input {&lt;br /&gt;
          type filter hook input priority 0;&lt;br /&gt;
          ip saddr 127.0.0.1 accept # handle 10&lt;br /&gt;
     }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
 # nft delete rule fltrTable input handle 10&lt;br /&gt;
&lt;br /&gt;
{{ic|nft flush table}} コマンドを使うことでテーブルの全てのチェインをフラッシュできます。個別のチェインをフラッシュするときは {{ic|nft flush chain}} または {{ic|nft delete rule}} コマンドを使います。&lt;br /&gt;
 # nft flush table foo&lt;br /&gt;
 # nft flush chain foo bar&lt;br /&gt;
 # nft delete rule ip6 foo bar&lt;br /&gt;
最初のコマンドでは ip {{ic|foo}} テーブルのチェイン全てをフラッシュします。2番目のコマンドは ip {{ic|foo}} テーブルの {{ic|bar}} チェインをフラッシュします。3番目のコマンドは ip6 {{ic|foo}} テーブルの {{ic|bar}} チェインの全てのルールを削除します。&lt;br /&gt;
&lt;br /&gt;
===アトミックリロード===&lt;br /&gt;
現在のルールセットをフラッシュする:&lt;br /&gt;
 # echo &amp;quot;flush ruleset&amp;quot; &amp;gt; /tmp/nftables&lt;br /&gt;
現在のルールセットをダンプする:&lt;br /&gt;
 # nft list ruleset &amp;gt;&amp;gt; /tmp/nftables&lt;br /&gt;
{{ic|/tmp/nftables}} を編集して次のコマンドで変更を適用:&lt;br /&gt;
 # nft -f /tmp/nftables&lt;br /&gt;
&lt;br /&gt;
== サンプル ==&lt;br /&gt;
&lt;br /&gt;
=== ワークステーション ===&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/nftables.conf|2=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
        chain input {&lt;br /&gt;
                type filter hook input priority 0;&lt;br /&gt;
&lt;br /&gt;
                # accept any localhost traffic&lt;br /&gt;
                iif lo accept&lt;br /&gt;
&lt;br /&gt;
                # accept traffic originated from us&lt;br /&gt;
                ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
                # activate the following line to accept common local services&lt;br /&gt;
                #tcp dport { 22, 80, 443 } ct state new accept&lt;br /&gt;
&lt;br /&gt;
                # accept neighbour discovery otherwise IPv6 connectivity breaks.&lt;br /&gt;
                ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit,  nd-router-advert, nd-neighbor-advert } accept&lt;br /&gt;
&lt;br /&gt;
                # count and drop any other traffic&lt;br /&gt;
                counter drop&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== シンプルな IPv4/IPv6 ファイアウォール ===&lt;br /&gt;
&lt;br /&gt;
{{hc|firewall.rules|2=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# A simple firewall&lt;br /&gt;
&lt;br /&gt;
flush ruleset&lt;br /&gt;
&lt;br /&gt;
table inet filter {&lt;br /&gt;
	chain input {&lt;br /&gt;
		type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
		# established/related connections&lt;br /&gt;
		ct state established,related accept&lt;br /&gt;
&lt;br /&gt;
		# invalid connections&lt;br /&gt;
		ct state invalid drop&lt;br /&gt;
		&lt;br /&gt;
		# loopback interface&lt;br /&gt;
		iif lo accept&lt;br /&gt;
&lt;br /&gt;
		# ICMP&lt;br /&gt;
		# routers may also want: mld-listener-query, nd-router-solicit&lt;br /&gt;
		ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept&lt;br /&gt;
		ip protocol icmp icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem } accept&lt;br /&gt;
&lt;br /&gt;
		# SSH (port 22)&lt;br /&gt;
		tcp dport ssh accept&lt;br /&gt;
&lt;br /&gt;
		# HTTP (ports 80 &amp;amp; 443)&lt;br /&gt;
		tcp dport { http, https } accept&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain forward {&lt;br /&gt;
		type filter hook forward priority 0; policy drop;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain output {&lt;br /&gt;
		type filter hook output priority 0; policy accept;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===レート制限 IPv4/IPv6 ファイアウォール===&lt;br /&gt;
&lt;br /&gt;
{{hc|firewall.2.rules|2=&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
	chain input {&lt;br /&gt;
		type filter hook input priority 0; policy drop;&lt;br /&gt;
&lt;br /&gt;
		# no ping floods:&lt;br /&gt;
		ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 10/second accept&lt;br /&gt;
		ip protocol icmp icmp type echo-request limit rate 10/second accept&lt;br /&gt;
&lt;br /&gt;
		ct state established,related accept&lt;br /&gt;
		ct state invalid drop&lt;br /&gt;
&lt;br /&gt;
		iif lo accept&lt;br /&gt;
&lt;br /&gt;
		# avoid brute force on ssh:&lt;br /&gt;
		tcp dport ssh limit rate 15/minute accept&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain forward {&lt;br /&gt;
		type filter hook forward priority 0; policy drop;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	chain output {&lt;br /&gt;
		type filter hook output priority 0; policy accept;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===ジャンプ===&lt;br /&gt;
&lt;br /&gt;
設定ファイルでジャンプを使うときは、先にターゲットチェインを定義する必要があります。そうしないと {{ic|Error: Could not process rule: No such file or directory}} というエラーが発生します。&lt;br /&gt;
{{hc|jump.rules|2=&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&lt;br /&gt;
table inet filter {&lt;br /&gt;
    chain web {&lt;br /&gt;
        tcp dport http accept&lt;br /&gt;
        tcp dport 8080 accept&lt;br /&gt;
    }&lt;br /&gt;
    chain input {&lt;br /&gt;
        type filter hook input priority 0;&lt;br /&gt;
        ip saddr 10.0.2.0/24 jump web&lt;br /&gt;
        drop&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== インターフェイスによってルールを変える ===&lt;br /&gt;
&lt;br /&gt;
複数のネットワークインターフェイスが存在する場合、それぞれのインターフェイスごとに別々のフィルターチェインを設定したい場合があるかもしれません。例えば、ホームルーターを構築するとき、LAN 上でアクセスできるウェブサーバーを実行しつつ ({{ic|nsp3s0}} インターフェイス)、インターネットからはアクセスできないようにしたい場合 ({{ic|enp2s0}} インターフェイス) などは以下のように設定します:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;table inet filter {&lt;br /&gt;
  chain input { # this chain serves as a dispatcher&lt;br /&gt;
    type filter hook input priority 0;&lt;br /&gt;
&lt;br /&gt;
    iif lo accept # always accept loopback&lt;br /&gt;
    iifname enp2s0 jump input_enp2s0&lt;br /&gt;
    iifname enp3s0 jump input_enp3s0&lt;br /&gt;
&lt;br /&gt;
    reject with icmp type port-unreachable # refuse traffic from all other interfaces&lt;br /&gt;
  }&lt;br /&gt;
  chain input_enp2s0 { # rules applicable to public interface interface&lt;br /&gt;
    ct state {established,related} accept&lt;br /&gt;
    ct state invalid drop&lt;br /&gt;
    udp dport bootpc accept&lt;br /&gt;
    tcp dport bootpc accept&lt;br /&gt;
    reject with icmp type port-unreachable # all other traffic&lt;br /&gt;
  }&lt;br /&gt;
  chain input_enp3s0 {&lt;br /&gt;
    ct state {established,related} accept&lt;br /&gt;
    ct state invalid drop&lt;br /&gt;
    udp dport bootpc accept&lt;br /&gt;
    tcp dport bootpc accept&lt;br /&gt;
    tcp port http accept&lt;br /&gt;
    tcp port https accept&lt;br /&gt;
    reject with icmp type port-unreachable # all other traffic&lt;br /&gt;
  }&lt;br /&gt;
  chain ouput { # we let everything out&lt;br /&gt;
    type filter hook output priority 0;&lt;br /&gt;
    accept&lt;br /&gt;
  }&lt;br /&gt;
 }&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
もしくは {{ic|iifname}} ステートメントを特定のインターフェイスで使用して、他のインターフェイスについてはデフォルトルールを設定するという方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== マスカレード ===&lt;br /&gt;
&lt;br /&gt;
nftables には特殊なキーワード {{ic|masquerade}} が存在し、送信元アドレスが自動的に出力インターフェイスのアドレスに設定されます ([http://wiki.nftables.org/wiki-nftables/index.php/Performing_Network_Address_Translation_%28NAT%29#Masquerading ソース])。ルーターのインターフェイスが多数の ISP に接続されているときなど、インターフェイスの IP アドレスが一定でない場合に有用です。通常は、インターフェイスの IP アドレスが変わるたびにネットワークアドレス変換 (NAT) のルールを更新する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|masquerade}} を使用するには:&lt;br /&gt;
&lt;br /&gt;
* カーネルコンフィグで以下のマスカレード設定が有効になっている必要があります。&lt;br /&gt;
&lt;br /&gt;
 CONFIG_NFT_MASQ=m&lt;br /&gt;
&lt;br /&gt;
* {{ic|masquerade}} キーワードは {{ic|nat}} タイプのチェインでのみ使うことができ、{{ic|inet}} ファミリーのテーブルでは利用できません。{{ic|ip}} ファミリーや {{ic|ip6}} ファミリーのテーブルを使ってください。&lt;br /&gt;
* マスカレードは一種のソース NAT であり、出力パスでのみ機能します。&lt;br /&gt;
&lt;br /&gt;
2つのインターフェイスが存在し {{ic|nsp3s0}} が LAN に接続され、{{ic|enp2s0}} がインターネットに接続されているマシンでの設定例:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;table ip nat {&lt;br /&gt;
  chain prerouting {&lt;br /&gt;
    type nat hook prerouting priority 0;&lt;br /&gt;
  }&lt;br /&gt;
  chain postrouting {&lt;br /&gt;
    type nat hook postrouting priority 0;&lt;br /&gt;
    oifname &amp;quot;enp0s2&amp;quot; masquerade&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== シンプルなステートフルファイアウォール ===&lt;br /&gt;
&lt;br /&gt;
[[シンプルなステートフルファイアウォール]]の記事も参照してください。&lt;br /&gt;
&lt;br /&gt;
==== シングルマシン ====&lt;br /&gt;
&lt;br /&gt;
現在のルールセットを消去:&lt;br /&gt;
&lt;br /&gt;
 # nft flush ruleset&lt;br /&gt;
&lt;br /&gt;
テーブルを追加:&lt;br /&gt;
&lt;br /&gt;
 # nft add table inet filter&lt;br /&gt;
&lt;br /&gt;
input, forward, output ベースチェインを追加。input と forward のポリシーは破棄にして、output のポリシーは許可にする:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }&lt;br /&gt;
 # nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }&lt;br /&gt;
 # nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }&lt;br /&gt;
&lt;br /&gt;
レギュラーチェインを追加して tcp と udp に関連付ける:&lt;br /&gt;
&lt;br /&gt;
 # nft add chain inet filter TCP&lt;br /&gt;
 # nft add chain inet filter UDP&lt;br /&gt;
&lt;br /&gt;
関連・確立済みトラフィックは許可する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ct state related,established accept&lt;br /&gt;
&lt;br /&gt;
ループバックインターフェイスのトラフィックは全て許可する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input iif lo accept&lt;br /&gt;
&lt;br /&gt;
不正なトラフィックは全て破棄する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ct state invalid drop&lt;br /&gt;
&lt;br /&gt;
新しいエコー要求 (ping) は許可する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol icmp icmp type echo-request ct state new accept&lt;br /&gt;
&lt;br /&gt;
新しい udp トラフィックは UDP チェインにジャンプする:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol udp ct state new jump UDP&lt;br /&gt;
&lt;br /&gt;
新しい tcp トラフィックは TCP チェインにジャンプする:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol tcp tcp flags \&amp;amp; \(fin\|syn\|rst\|ack\) == syn ct state new jump TCP&lt;br /&gt;
&lt;br /&gt;
他のルールによって処理されなかったトラフィックは全て拒否する:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter input ip protocol udp reject&lt;br /&gt;
 # nft add rule inet filter input ip protocol tcp reject with tcp reset&lt;br /&gt;
 # nft add rule inet filter input counter reject with icmp type prot-unreachable&lt;br /&gt;
&lt;br /&gt;
ここから TCP と UDP チェインで処理する接続で開きたいポートを決めます。例えばウェブサーバーの接続を開くには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 80 accept&lt;br /&gt;
&lt;br /&gt;
ポート 443 からのウェブサーバーの HTTPS 接続を許可するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 443 accept&lt;br /&gt;
&lt;br /&gt;
ポート 22 の SSH 接続を許可するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 22 accept&lt;br /&gt;
&lt;br /&gt;
DNS リクエストを許可するには:&lt;br /&gt;
&lt;br /&gt;
 # nft add rule inet filter TCP tcp dport 53 accept&lt;br /&gt;
 # nft add rule inet filter UDP tcp dport 53 accept&lt;br /&gt;
&lt;br /&gt;
設定に満足したら変更を保存して永続化させてください。&lt;br /&gt;
&lt;br /&gt;
=== ブルートフォース攻撃の対策 ===&lt;br /&gt;
&lt;br /&gt;
[[Sshguard]] はブルートフォース攻撃を検出して一時的に IP アドレスに基づきブロックするようにファイアウォールを編集します。Sshguard で nftables を使うように設定する方法は [[Sshguard#nftables]] を見てください。&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Docker と共に使う ===&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* With the following setup, you will not be able to use protocols like {{ic|AF_BLUETOOTH}} inside containers even with {{ic|--net host --privileged}}.&lt;br /&gt;
* Rootless Docker containers already run in a separate network namespace. You may not need to do anything.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Using nftables can interfere with [[Docker]] networking (and probably other container runtimes as well). You can find various workarounds on the internet which either involve patching iptables rules and ensuring a defined service start order or disabling dockers iptables management completely which makes using docker very restrictive (think port forwarding or docker-compose).&lt;br /&gt;
&lt;br /&gt;
A reliable method is letting docker run in a separate network namespace where it can do whatever it wants. It is probably best to &#039;&#039;&#039;not&#039;&#039;&#039; use {{Pkg|iptables-nft}} to prevent docker from mixing nftables and iptables rules.&lt;br /&gt;
&lt;br /&gt;
Use the following docker service [[drop-in file]]:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/system/docker.service.d/netns.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
PrivateNetwork=yes&lt;br /&gt;
&lt;br /&gt;
# cleanup&lt;br /&gt;
ExecStartPre=-nsenter -t 1 -n -- ip link delete docker0&lt;br /&gt;
&lt;br /&gt;
# add veth&lt;br /&gt;
ExecStartPre=nsenter -t 1 -n -- ip link add docker0 type veth peer name docker0_ns&lt;br /&gt;
ExecStartPre=sh -c &#039;nsenter -t 1 -n -- ip link set docker0_ns netns &amp;quot;$$BASHPID&amp;quot; &amp;amp;&amp;amp; true&#039;&lt;br /&gt;
ExecStartPre=ip link set docker0_ns name eth0&lt;br /&gt;
&lt;br /&gt;
# bring host online&lt;br /&gt;
ExecStartPre=nsenter -t 1 -n -- ip addr add 10.0.0.1/24 dev docker0&lt;br /&gt;
ExecStartPre=nsenter -t 1 -n -- ip link set docker0 up&lt;br /&gt;
&lt;br /&gt;
# bring ns online&lt;br /&gt;
ExecStartPre=ip addr add 10.0.0.100/24 dev eth0&lt;br /&gt;
ExecStartPre=ip link set eth0 up&lt;br /&gt;
ExecStartPre=ip route add default via 10.0.0.1 dev eth0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Adjust the {{ic|10.0.0.*}} IP addresses if they are not appropriate for your setup.&lt;br /&gt;
&lt;br /&gt;
Enable IP forwarding and set-up NAT for docker0 with the following postrouting rule:&lt;br /&gt;
&lt;br /&gt;
 iifname docker0 oifname eth0 masquerade&lt;br /&gt;
&lt;br /&gt;
Then, ensure that [[Internet sharing#Enable packet forwarding|kernel IP forwarding]] is enabled.&lt;br /&gt;
&lt;br /&gt;
Now you can setup a firewall and port forwarding for the {{ic|docker0}} interface using nftables without any interference.&lt;br /&gt;
&lt;br /&gt;
==参照==&lt;br /&gt;
* [https://wiki.nftables.org/ netfilter nftables wiki]&lt;br /&gt;
* [https://lwn.net/Articles/324251/ nftables の最初のリリース]&lt;br /&gt;
* [https://home.regit.org/netfilter-en/nftables-quick-howto/ nftables クイックハウツー]&lt;br /&gt;
* [https://lwn.net/Articles/564095/ nftables の帰還]&lt;br /&gt;
* [https://developers.redhat.com/blog/2016/10/28/what-comes-after-iptables-its-successor-of-course-nftables/ What comes after ‘iptables’? It’s successor, of course: `nftables`]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Qt_%E3%81%A8_GTK_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%A4%96%E8%A6%B3%E3%81%AE%E7%B5%B1%E5%90%88&amp;diff=33929</id>
		<title>Qt と GTK アプリケーションの外観の統合</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Qt_%E3%81%A8_GTK_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E5%A4%96%E8%A6%B3%E3%81%AE%E7%B5%B1%E5%90%88&amp;diff=33929"/>
		<updated>2023-09-07T02:31:08Z</updated>

		<summary type="html">&lt;p&gt;Hikali: 誤字の修正 (療法 -&amp;gt; 両方)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ウィジェットツールキット]]&lt;br /&gt;
[[Category:視覚効果]]&lt;br /&gt;
[[en:Uniform look for Qt and GTK applications]]&lt;br /&gt;
[[ru:Uniform look for Qt and GTK applications]]&lt;br /&gt;
[[zh-hans:Uniform look for Qt and GTK applications]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|GTK}}&lt;br /&gt;
{{Related|Qt}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[[Qt]] と [[GTK]] ベースのプログラムは異なるウィジェットツールキットを使ってグラフィカルユーザーインターフェースを表示しています。それぞれにデフォルトで異なるテーマ・スタイル・アイコンセットが存在するため、&amp;quot;ルックアンドフィール&amp;quot;は著しく乖離してしまいます。この記事ではデスクトップエクスペリエンスを統合するために Qt と GTK のアプリケーションの外観を似たようにする方法を説明しています。&lt;br /&gt;
&lt;br /&gt;
== 概要 ==&lt;br /&gt;
&lt;br /&gt;
2つのツールキットで同じような見た目を表示するには以下を修正する必要が出てきます:&lt;br /&gt;
* &#039;&#039;&#039;テーマ&#039;&#039;&#039;: アプリケーションやウィジェットセットなどの外観のカスタマイズ。テーマは通常、スタイル・アイコンテーマ・カラーテーマから成ります。&lt;br /&gt;
* &#039;&#039;&#039;スタイル&#039;&#039;&#039;: ウィジェットセットのグラフィカルレイアウトと外観。&lt;br /&gt;
* &#039;&#039;&#039;アイコンテーマ&#039;&#039;&#039;: グローバルアイコンのセット。&lt;br /&gt;
* &#039;&#039;&#039;カーソルテーマ&#039;&#039;&#039;: スタイルと合わせて使われるグローバルカラーのセット。&lt;br /&gt;
&lt;br /&gt;
外観の統一のために取れる方法は様々です:&lt;br /&gt;
* 下で説明しているツールを使って [[#Qt と GTK 両方のためのスタイル|GTK と Qt のスタイル]]を別個に修正し、同じような見た目のテーマ (スタイル・カラー・アイコン・カーソル・フォント) を選択する。&lt;br /&gt;
* 特殊な[[#テーマエンジン|テーマエンジン]]を使って、他のグラフィカルツールキットの見た目をメインのツールキットに合うように仲介させる。&lt;br /&gt;
&lt;br /&gt;
== Qt と GTK 両方のためのスタイル ==&lt;br /&gt;
&lt;br /&gt;
統合のために、Qt と GTK 両方で記述・提供されているウィジェットスタイルのセットが存在し、全ての主要なバージョンが含まれています。このようなスタイルを使うことで、アプリケーションが使っているツールキットに関係なく全てのアプリケーションの見た目を一つにすることが可能です。&lt;br /&gt;
&lt;br /&gt;
{{Tip|root アプリケーションに対してユーザ定義のスタイルを適用したい場合もあるでしょう。[[GTK#root アプリケーションにテーマが適用されない]] と [[Qt#root アプリケーションにテーマが適用されない]] を参照してください。}}&lt;br /&gt;
{{Note|1=バージョン 3.16 から、GTK 3 は CSS を使用しないテーマを [https://bbs.archlinux.org/viewtopic.php?pid=1518404#p1518404 サポートしなくなりました]。そのため Oxygen-Gtk などのスタイルはもはや [https://bugs.kde.org/show_bug.cgi?id=340288 使うことができなくなっています]。}}&lt;br /&gt;
&lt;br /&gt;
=== Breeze ===&lt;br /&gt;
&lt;br /&gt;
Breeze は KDE Plasma のデフォルトの Qt スタイルです。Qt5 のスタイルは {{Pkg|breeze}} パッケージで、Qt4 のスタイルは {{AUR|breeze-kde4}} パッケージでインストールできます。Breeze と似ている GTK 2 と GTK 3 のテーマは {{Pkg|breeze-gtk}} パッケージでインストールできます。&lt;br /&gt;
&lt;br /&gt;
パッケージをインストールしたら、[[GTK#設定ツール|GTK の設定ツール]]を使って GTK のテーマを変更してください。&lt;br /&gt;
&lt;br /&gt;
KDE Plasma を使用している場合、{{pkg|kde-gtk-config}} をインストールし、それをコマンドラインから実行するか、ログインし直して &#039;&#039;KDE システム設定 &amp;gt; 外観 &amp;gt; アプリケーションスタイル  &amp;gt; GNOME/GTK のアプリケーションスタイルを設定…&#039;&#039; を開いてください。KDE システム設定におけるフォント、アイコン、カーソル、そしてウィジェットのスタイルセットは、自動的に GTK の設定に適用されます。GTK テーマだけは、前述のモジュールを使って手動で設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== Adwaita ===&lt;br /&gt;
&lt;br /&gt;
{{Out of date|Adwaita-qt プロジェクトはメンテナンスされておらず、もはや活発に開発されていません。[https://github.com/FedoraQt/adwaita-qt#readme]}}&lt;br /&gt;
&lt;br /&gt;
Adwaita はデフォルトの GNOME テーマです。GTK 3 バージョンは {{Pkg|gtk3}} パッケージに含まれています。一方、GTK 2 バージョンは {{Pkg|gnome-themes-extra}} にあります。[https://github.com/MartinBriza/adwaita-qt adwaita-qt] は Adwaita テーマの Qt 移植です。GTK 2 テーマを模倣する [[#QGtkStyle]] とは異なり、adwaita-qt は GTK 3 Adwaita に見えるように作られたネイティブな Qt スタイルを提供します。Qt 4、5、そして 6 のバージョンはそれぞれパッケージ {{AUR|adwaita-qt4}}、{{Pkg|adwaita-qt5}}{{Broken package link|package not found}}、そして {{Pkg|adwaita-qt6}}{{Broken package link|package not found}} で[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
Qt スタイルをデフォルトとして設定するには:&lt;br /&gt;
&lt;br /&gt;
* Qt 5 の場合、[[環境変数#グラフィック環境|環境変数]] {{ic|1=QT_STYLE_OVERRIDE=adwaita}} を設定することで有効化できます。あるいは、{{Pkg|qt5ct}} パッケージを使用してください。より詳細な手順は、[[Qt#KDE Plasma 以外の環境での Qt 5 アプリケーションの設定]] を参照してください。&lt;br /&gt;
* Qt 4 の場合、&#039;&#039;Qt Configuration&#039;&#039; ({{ic|qtconfig-qt4}}) で有効化できます。&#039;&#039;Appearance &amp;gt; GUI Style&#039;&#039; で &#039;&#039;adwaita&#039;&#039; を選択してください。あるいは、{{ic|/etc/xdg/Trolltech.conf}} (システム全体) か {{ic|~/.config/Trolltech.conf}} (ユーザ固有) を編集してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/Trolltech.conf|2=&lt;br /&gt;
...&lt;br /&gt;
[Qt]&lt;br /&gt;
style=adwaita&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== テーマエンジン ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;テーマエンジン&#039;&#039;は、1つあるいは複数のツールキット間でテーマ (アイコンは除く) を翻訳する薄いレイヤー API と考えることができます。これらのエンジンはプロセスに余分なコードを追加するため、この種の解決方法がネイティブのスタイルを使うのと比べ最適なのかどうかは議論の余地があります。&lt;br /&gt;
&lt;br /&gt;
=== Kvantum ===&lt;br /&gt;
&lt;br /&gt;
Kvantum ({{Pkg|kvantum}}) は、Adapta、Arc、Ambiance、Libadwaita、そして Materia などいくつかの人気な GTK テーマのバージョンを含む、様々な組み込みスタイルが同梱されている Qt5 用のカスタマイズ可能な SVG ベースのテーマエンジンです。その他のテーマは [https://store.kde.org/browse?cat=123 KDE Store で]入手可能です。&lt;br /&gt;
&lt;br /&gt;
Kvantum はプラットフォームテーマではなくスタイルとして扱われます。環境変数を使って Kvantum を全 qt アプリケーションに対して設定するには、{{ic|1=QT_STYLE_OVERRIDE=kvantum}} を設定してください。&lt;br /&gt;
&lt;br /&gt;
==== テーマ設定 ====&lt;br /&gt;
&lt;br /&gt;
([https://github.com/GabePoel/KvLibadwaita KvLibadwaita] などの) Kvantum の[https://github.com/tsujan/Kvantum/blob/master/Kvantum/doc/Theme-Config.pdf テーマバリアントを設定する]には、設定ファイルを編集してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/xdg/Kvantum/kvantum.kvconfig (あるいは ~/.config/Kvantum/kvantum.kvconfig)|2=&lt;br /&gt;
...&lt;br /&gt;
theme=KvLibadwaita&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== QGtkStyle ===&lt;br /&gt;
&lt;br /&gt;
{{Note|QGtkStyle は {{Pkg|qt5-base}} 5.7.0 [https://github.com/qtproject/qtbase/commit/899a815414e95da8d9429a4a4f4d7094e49cfc55] から除去され、{{AUR|qt5-styleplugins}} [https://github.com/qtproject/qtstyleplugins/commit/102da7d50231fc5723dba6e72340bef3d29471aa] に追加されました。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|GTK 2 のテーマによっては、フォントが透過してしまったりウィジェットがうまく調和しないなどのレンダリング問題が発生することがあります。}}&lt;br /&gt;
&lt;br /&gt;
この Qt スタイルは GTK 2 を使って全てのコンポーネントをレンダリングすることで、[[GNOME]] やそれと似たような GTK ベースの環境とブレンドします。Qt 4.5 から、このスタイルは Qt に含まれています。{{Pkg|gtk2}} をインストール・設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
QGtkStyle は Cinnamon、GNOME、そして Xfce におけるデフォルトの Qt4 スタイルです。また Cinnamon、GNOME、MATE、LXDE、そして Xfce におけるデフォルトの Qt5 スタイルでもあります。他の環境では:&lt;br /&gt;
&lt;br /&gt;
* Qt4 の場合、&#039;&#039;Qt Configuration&#039;&#039; ({{ic|qtconfig-qt4}}) で有効にすることができます。&#039;&#039;Appearance &amp;gt; GUI Style&#039;&#039; から &#039;&#039;GTK&#039;&#039; を選択してください。もしくは、{{ic|/etc/xdg/Trolltech.conf}} (システム全体) あるいは {{ic|~/.config/Trolltech.conf}} (ユーザー個別) ファイルを編集してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/Trolltech.conf|2=&lt;br /&gt;
...&lt;br /&gt;
[Qt]&lt;br /&gt;
style=GTK+&lt;br /&gt;
...&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Qt 5 の場合、{{AUR|qt5-styleplugins}} をインストールし、次の[[環境変数#グラフィック環境|環境変数]]を設定することで有効にできます: {{ic|1=QT_QPA_PLATFORMTHEME=gtk2}}&lt;br /&gt;
&lt;br /&gt;
* Qt 6 の場合、{{AUR|qt6gtk2}} をインストールして {{Pkg|qt6ct}} で &#039;&#039;qt6gtk2&#039;&#039; を選択するか、あるいは 次の環境変数を設定することで有効化できます: {{ic|1=QT_QPA_PLATFORMTHEME=gtk2}}&lt;br /&gt;
&lt;br /&gt;
完全な統合のために、設定された[[GTK#テーマ|GTK テーマ]]が GTK 2 と GTK 3 の両方をサポートしていることを確認してください。GTK2 を使用するように Qt を設定したあとにテーマのレンダリングの一貫性が失われてしまった場合、{{AUR|gtk-theme-switch2}} をインストールしテーマを選択してください。&lt;br /&gt;
&lt;br /&gt;
=== QGnomePlatform ===&lt;br /&gt;
&lt;br /&gt;
この Qt 5 プラットフォームテーマでは、GNOME での外観の設定が Qt アプリケーションに適用されます。{{Pkg|qgnomeplatform-qt5}}{{Broken package link|package not found}} や {{Pkg|qgnomeplatform-qt6}}{{Broken package link|package not found}} でインストールできます。開発版は {{AUR|qgnomeplatform-qt5-git}} と {{AUR|qgnomeplatform-qt6-git}} でインストールできます。これは Qt スタイル自体は提供せず、代わりに [[#Qt と GTK 両方のためのスタイル|Qt と GTK の両方をサポートするスタイル]]を必要とします。&lt;br /&gt;
&lt;br /&gt;
バージョン 3.20 以降の GNOME では、このプラットフォームテーマは自動的に有効化されます。他のシステムでは、次の[[環境変数#グラフィック環境|環境変数]]を設定することで有効化できます: {{ic|1=QT_QPA_PLATFORMTHEME=gnome}}。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== Qt アプリで GTK のアイコンテーマを使う ===&lt;br /&gt;
&lt;br /&gt;
[[Plasma]] を使っている場合は、{{Pkg|kde-gtk-config}} を実行して、&#039;&#039;KDE システム設定 &amp;gt; アプリケーションスタイル &amp;gt; GTK&#039;&#039; でアイコンテーマを選択してください。&lt;br /&gt;
&lt;br /&gt;
[[GNOME]] を使っている場合は、{{Pkg|dconf-editor}} を実行して、&#039;&#039;org &amp;gt; gnome &amp;gt; desktop &amp;gt; interface&#039;&#039; にある {{ic|icon-theme}} キーをあなたの好みのアイコンテーマに変更してください。&lt;br /&gt;
&lt;br /&gt;
[[デスクトップ環境]] を使っていない場合、例えば {{Pkg|i3-wm}} で最小限のシステムを動かしているのなら、{{Pkg|dconf-editor}} を[[インストール]]して、上記の説明に従ってアイコンテーマを設定してください。&lt;br /&gt;
また、プロファイルの {{ic|DESKTOP_SESSION}} の値も設定する必要があるかもしれません。望ましい結果を得るために可能な方法については [[環境変数#変数の定義]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|アイコンテーマが適用されない場合、入力したテーマ名が正しい形式であったかどうかを確認したい場合があります。例えば、現在アクティブなアイコンテーマを QT アプリケーションに適用したい場合、コマンドでその名前の正しい形式を調べることができます:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=$ awk -F= &#039;/icon-theme/ {print $2}&#039; ~/.gtkrc-2.0}}&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== KDE Plasma で GTK3 アプリケーションにタイトルバーとフレームを追加する ===&lt;br /&gt;
&lt;br /&gt;
Gnome/GTK アプリケーションを KDE/Plasma のタイトルバーとフレームで表示するには、{{AUR|gtk3-nocsd-git}} をインストールしてからウィンドウマネージャを再起動し、新しいライブラリパスをロードしてください。&lt;br /&gt;
&lt;br /&gt;
また、GTK アプリケーションをラッパーで実行することもできます:&lt;br /&gt;
 $ gtk3-nocsd gedit&lt;br /&gt;
&lt;br /&gt;
=== KDE Plasma での GTK アプリのサブピクセルレンダリングを改善 ===&lt;br /&gt;
&lt;br /&gt;
こちらを参照 [[フォント設定#LCD フィルター]]&lt;br /&gt;
&lt;br /&gt;
=== KDE Plasma での一貫性のあるファイルダイアログ ===&lt;br /&gt;
&lt;br /&gt;
{{Accuracy|GTK は {{ic|1=GTK_USE_PORTAL=1}} を {{ic|1=GDK_DEBUG=portals}} に置き換えたようです。 https://gitlab.gnome.org/GNOME/gtk/-/blob/636827800525770715bba96671edb2fc0234ccc2/NEWS#L34}}&lt;br /&gt;
&lt;br /&gt;
同じファイルダイアログを表示させるために、[[XDG デスクトップ ポータル]] を使うことができます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|xdg-desktop-portal}} と {{Pkg|xdg-desktop-portal-kde}} を[[インストール]]し、[[環境変数]] {{ic|1=GTK_USE_PORTAL=1}} を設定してください。&lt;br /&gt;
&lt;br /&gt;
現在、全ての GTK アプリケーションが KDE ファイルダイアログを正しくサポートしているわけではないことに注意してください。&lt;br /&gt;
&lt;br /&gt;
Electron を使用するアプリケーションは、最低でも Electron 14 を使用していて ([https://github.com/electron/electron/pull/19159 #19159] を参照)、この機能を適切に実装している必要があります。&lt;br /&gt;
&lt;br /&gt;
[[VSCode]] には問題を修正するためのプルリクエストがあります。[https://github.com/microsoft/vscode/pull/126113 #126113] を参照してください。&lt;br /&gt;
&lt;br /&gt;
[[GIMP]] は portal の使用をまだ実装していません。[https://gitlab.gnome.org/GNOME/gimp/-/issues/1830 バグレポート]を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|依然として多くの GTK アプリケーションが portal を正しく実装していません (放棄されたアプリケーション、あるいは作者が他のタスクに集中している)。少なくとも Dolphin から nautilus へブックマークを同期させることで、そのようなアプリケーションからのファイル選択を単純化させることができます。以下のコマンドを使用してください:&lt;br /&gt;
&lt;br /&gt;
{{bc|1=$ awk -F\&amp;quot; &#039;/&amp;lt;bookmark href=\&amp;quot;file/ {print $2}&#039; &amp;lt; $HOME/.local/share/user-places.xbel &amp;gt; $HOME/.config/gtk-3.0/bookmarks}}&lt;br /&gt;
&lt;br /&gt;
あるいは、{{AUR|bookmarksync-git}} をそのような目的で使用することができます。これを使用すると、ブックマークを編集したり、両方向へ同期させたりできます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== アプリケーション固有の設定 ====&lt;br /&gt;
&lt;br /&gt;
環境変数による方法に加えて、一部の GTK アプリケーションには XDG ポータルを強制的に使用させるための独自の設定が存在します:&lt;br /&gt;
&lt;br /&gt;
* [[Firefox]] — [[Firefox#XDG Desktop Portal との統合]] を参照&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== GTK アプリでテーマが使えない ===&lt;br /&gt;
&lt;br /&gt;
設定したスタイルやテーマエンジンが GTK アプリケーションで表示されない場合は、おそらく GTK の設定ファイルが何らかの理由でロードされていません。次を実行することでシステムが設定ファイルをどこにあると期待しているか確認できます:&lt;br /&gt;
 $ export | grep gtk&lt;br /&gt;
&lt;br /&gt;
通常、期待されるファイルは GTK1 は {{ic|~/.gtkrc}}、GTK 2.x は {{ic|~/.gtkrc2.0}} または {{ic|~/.gtkrc2.0-kde}} です。&lt;br /&gt;
&lt;br /&gt;
=== システムをアップグレードすると SVG (Breeze) アイコンが GTK アプリで使用されない ===&lt;br /&gt;
&lt;br /&gt;
次のコマンドを実行してみてください:&lt;br /&gt;
 # gdk-pixbuf-query-loaders --update-cache&lt;br /&gt;
&lt;br /&gt;
=== Flatpak の Qt アプリに Gnome Adwaita ダークテーマが適用されない ===&lt;br /&gt;
&lt;br /&gt;
テーマを Adwaita-dark に切り替えたが、Flatpak Qt アプリケーションが依然としてライトバージョンのテーマを使用してしまう場合は、必要な KStyle をインストールしてください:&lt;br /&gt;
&lt;br /&gt;
 # flatpak install flathub org.kde.KStyle.Adwaita&lt;br /&gt;
&lt;br /&gt;
=== GNOME Wayland で実行される Qt アプリケーションが、Qt テーマを設定した後でも、ウィンドウ装飾の外観が一致しない ===&lt;br /&gt;
&lt;br /&gt;
ウィンドウ装飾の一致した外観を得るには、{{Pkg|qgnomeplatform-qt5}}{{Broken package link|package not found}} をインストールし、次の[[環境変数#グラフィック環境|環境変数]]を設定する必要があります: {{ic|1=QT_QPA_PLATFORMTHEME=&#039;gnome&#039;}}&lt;br /&gt;
この修正は、Adwaita または Adwaita-dark で動作することが保証されています。&lt;br /&gt;
&lt;br /&gt;
=== GTK アプリが KDE システム設定を完全には使用しない ===&lt;br /&gt;
&lt;br /&gt;
GTK アプリで [[Plasma]] 設定をさらに統合するには、{{Pkg|gnome-settings-daemon}}、{{Pkg|gsettings-desktop-schemas}}、および {{Pkg|gsettings-qt}} を[[インストール]]する必要があるかもしれません。これにより、GTK に適切な Qt バインディングが提供されます。&lt;br /&gt;
&lt;br /&gt;
=== kde-gtk-config の &amp;quot;システム設定 &amp;gt; アプリケーションスタイル &amp;gt; GTK&amp;quot; メニューが無い ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|kde-gtk-config}} が壊れてシステム設定から &amp;quot;アプリケーションスタイル &amp;gt; GTK&amp;quot; メニューが無くなった場合、{{pkg|lxappearance}} や {{AUR|nwg-look}} のような [[GTK#設定ツール|GTK 設定ツール]]を選ぶと GTK 2 と GTK 3 のスタイルを構成できるようになります。&lt;br /&gt;
{{pkg|lxappearance}} は LXDE プロジェクト由来ですが、デスクトップに依存していません (つまり、LXDE デスクトップの他のパーツを必要としません)。{{AUR|nwg-look}} は GTK3 設定エディタであり、wlroots ベースの Wayland 環境で適切に動作するように設計されています。nwg-look のルックアンドフィールは LXAppearance による影響を強く受けていますが、いくつかの不便さからユーザを開放することを意図しています。&lt;br /&gt;
&lt;br /&gt;
=== Dolphin のテーマが Nautilus と良くマッチしない ===&lt;br /&gt;
&lt;br /&gt;
[[Dolphin#フォルダビューの背景色がシステムのテーマと合わない|フォルダビューの背景色がシステムのテーマと合わない]] のセクションで、変な色使いの対処法を確認してください。&lt;br /&gt;
&lt;br /&gt;
=== KDE Plasma の XDG Desktop Portal が使用されない ===&lt;br /&gt;
&lt;br /&gt;
KDE 以外の[[デスクトップ環境]]やスタンドアローンな[[ウィンドウマネージャ]]を使用している場合、複数の XDG デスクトップポータルバックエンドがシステムにインストールされていると、{{ic|xdg-desktop-portal}} が間違った[[XDG デスクトップ ポータル#バックエンド|バックエンド]]を選択してしまうかもしれません。これを修正するには、[[systemd/ユーザー#環境変数|systemd のユーザセッション]]で {{ic|1=XDG_CURRENT_DESKTOP=KDE}} [[環境変数]]を設定してください。どのようにして Portal が選択されるのかに関しては、[[XDG デスクトップ ポータル]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
変更を反映させるには、{{ic|xdg-desktop-portal.service}} ユーザユニットを[[再起動]]する必要があります。&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Uniform look for Qt and GTK applications|2023-09-06|786747}}&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Systemd/%E3%82%B8%E3%83%A3%E3%83%BC%E3%83%8A%E3%83%AB&amp;diff=33928</id>
		<title>Systemd/ジャーナル</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Systemd/%E3%82%B8%E3%83%A3%E3%83%BC%E3%83%8A%E3%83%AB&amp;diff=33928"/>
		<updated>2023-09-06T23:44:45Z</updated>

		<summary type="html">&lt;p&gt;Hikali: 脱字の修正 (何も対応が必要な通常のメッセージ -&amp;gt; 何も対応が必要ない通常のメッセージ)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Lowercase title}}&lt;br /&gt;
[[Category:ロギング]]&lt;br /&gt;
[[en:Systemd/Journal]]&lt;br /&gt;
[[pt:Systemd/Journal]]&lt;br /&gt;
[[ru:Systemd/Journal]]&lt;br /&gt;
[[zh-hans:Systemd/Journal]]&lt;br /&gt;
メインの記事は [[systemd]] を参照。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;systemd&#039;&#039; は、journal という独自のログシステムを持っており、別途ログデーモンを動作させる必要はありません。ログを読むには、{{man|1|journalctl}} を使用します。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、{{ic|/var/log/journal/}} ディレクトリは {{Pkg|systemd}} パッケージの一部で、journal は（{{ic|/etc/systemd/journald.conf}} で {{ic|1=Storage=}} が {{ic|auto}} に設定されている場合）{{ic|/var/log/journal/}} に書き込みます。もし該当ディレクトリが削除された場合、&#039;&#039;systemd&#039;&#039; はそれを自動的に再生成せず、代わりに {{ic|/run/systemd/journal}} に非永続的な方式でログを書き込みます。ただし、{{ic|journald.conf}} に {{ic|1=Storage=persistent}} が追加され、{{ic|systemd-journald.service}} が[[再起動]]された（またはシステムが再起動した）場合、ディレクトリは再生成されます。&lt;br /&gt;
&lt;br /&gt;
Systemd ジャーナルはメッセージを[[#プライオリティレベル|プライオリティレベル]]と[[#ファシリティ|ファシリティ]]で分類します。古典的な [[wikipedia:Syslog|Syslog]] プロトコルに対応しています ([https://tools.ietf.org/html/rfc5424 RFC 5424])。&lt;br /&gt;
&lt;br /&gt;
==プライオリティレベル==&lt;br /&gt;
&lt;br /&gt;
メッセージの重要度は syslog の重大度コード (systemd ではプライオリティと呼ばれます) を使って示されます [https://tools.ietf.org/html/rfc5424#section-6.2.1 RFC 5424 Section 6.2.1]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 値 !! 重大度 !! キーワード !! 説明 || 例&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Emergency || emerg || システムは利用不可能 || 重大なカーネルのバグ/systemd によってコアダンプが作成された。アプリケーションが使用するレベルではありません。&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Alert || alert || 即時対応が必要 || 重要なサブシステムが機能していない/データが消失している。&amp;lt;br&amp;gt;{{ic|kernel: BUG: unable to handle kernel paging request at ffffc90403238ffc}}。&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Critical || crit || 緊急状態 || クラッシュ/コアダンプ。{{ic|systemd-coredump[25319]: Process 25310 (plugin-containe) of user 1000 dumped core}}。X11 などのシステムにとって重要なアプリケーションが機能を失っている。&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Error || err || エラー状態 || 重大度は低いエラー: {{ic|kernel: usb 1-3: 3:1: cannot get freq at ep 0x84}},&amp;lt;br&amp;gt;{{ic|systemd[1]: Failed unmounting /var.}}, {{ic|libvirtd[1720]: internal error: Failed to initialize a valid firewall backend}})。&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Warning || warning || エラーが発生する前に対応が必要 || ルートファイルシステム以外のファイルシステムの空き領域が 1GB しかない。{{ic|org.freedesktop. Notifications[1860]: (process:5999): Gtk-WARNING **: Locale not supported by C library. Using the fallback &#039;C&#039; locale}}。&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Notice || notice || 通常ではないイベントが発生しているがエラー状態ではない || {{ic|systemd[1]: var.mount: Directory /var to mount over is not empty, mounting anyway}}, {{ic|gcr-prompter[4997]: Gtk: GtkDialog mapped without a transient parent. This is discouraged}}。&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Informational || info || 何も対応が必要ない通常のメッセージ || {{ic|lvm[585]:   7 logical volume(s) in volume group &amp;quot;archvg&amp;quot; now active}}。&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Debug || debug || アプリケーションをデバッグするのに役立つ情報 || {{ic|kdeinit5[1900]: powerdevil: Scheduling inhibition from &amp;quot;:1.14&amp;quot; &amp;quot;firefox&amp;quot; with cookie 13 and reason &amp;quot;screen&amp;quot;}}。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
上記のレベルで問題が確認できない場合、上下のプライオリティレベルも調べてみてください。厳しくルールが決められているわけではありません。発生する確率が高いエラーは開発者によってプライオリティが低く設定されている可能性があります。逆に、緊急度が高いメッセージが大量に出力されることもありますが、必ずしも切羽詰まった状況を表しているとは限りません。&lt;br /&gt;
&lt;br /&gt;
==ファシリティ==&lt;br /&gt;
&lt;br /&gt;
メッセージを出力したプログラムのタイプは syslog のファシリティコードで指定されます [https://tools.ietf.org/html/rfc5424#section-6.2.1 RFC 5424 Section 6.2.1]:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! ファシリティコード !! キーワード !! 説明 !! 情報&lt;br /&gt;
|-&lt;br /&gt;
| 0 || kern || カーネルメッセージ&lt;br /&gt;
|-&lt;br /&gt;
| 1 || user || ユーザーレベルメッセージ&lt;br /&gt;
|-&lt;br /&gt;
| 2 || mail || メールシステム || 詳しくは {{man|1|mail}} を見てください。&lt;br /&gt;
|-&lt;br /&gt;
| 3 || daemon || システムデーモン || systemd やサブシステムを含む全てのデーモン&lt;br /&gt;
|-&lt;br /&gt;
| 4 || auth || セキュリティ/認証メッセージ || ファシリティ10もあります。&lt;br /&gt;
|-&lt;br /&gt;
| 5 || syslog || syslogd の内部メッセージ || syslogd 用のファシリティなので systemd は使用していません (ファシリティ3を使います)。&lt;br /&gt;
|-&lt;br /&gt;
| 6 || lpr || ラインプリンターサブシステム (旧式のサブシステム)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || news || ネットワークニュースサブシステム (旧式のサブシステム)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || uucp || UUCP サブシステム (旧式のサブシステム)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || || クロックデーモン || systemd-timesyncd&lt;br /&gt;
|-&lt;br /&gt;
| 10 || authpriv || セキュリティ/認証メッセージ || ファシリティ4もあります。&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ftp || FTP デーモン&lt;br /&gt;
|-&lt;br /&gt;
| 12 || - || NTP サブシステム&lt;br /&gt;
|-&lt;br /&gt;
| 13 || - || log audit&lt;br /&gt;
|-&lt;br /&gt;
| 14 || - || log alert&lt;br /&gt;
|-&lt;br /&gt;
| 15 || cron || スケジューリングデーモン&lt;br /&gt;
|-&lt;br /&gt;
| 16 || local0 || ローカル使用 0 (local0)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || local1 || ローカル使用 1 (local1)&lt;br /&gt;
|-&lt;br /&gt;
| 18 || local2 || ローカル使用 2 (local2)&lt;br /&gt;
|-&lt;br /&gt;
| 19 || local3 || ローカル使用 3 (local3)&lt;br /&gt;
|-&lt;br /&gt;
| 20 || local4 || ローカル使用 4 (local4)&lt;br /&gt;
|-&lt;br /&gt;
| 21 || local5 || ローカル使用 5 (local5)&lt;br /&gt;
|-&lt;br /&gt;
| 22 || local6 || ローカル使用 6 (local6)&lt;br /&gt;
|-&lt;br /&gt;
| 23 || local7 || ローカル使用 7 (local7)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
意味のあるファシリティは次の7つになります: 0, 1, 3, 4, 9, 10, 15。&lt;br /&gt;
&lt;br /&gt;
== フィルタリング ==&lt;br /&gt;
&lt;br /&gt;
{{ic|journalctl}} を使って出力にフィルタをかけることができます。表示したりフィルタリングをするメッセージが大量にある場合、かなり時間がかかります。コマンドの出力は相当の時間がたってから表示されるかもしれません。&lt;br /&gt;
&lt;br /&gt;
例:&lt;br /&gt;
&lt;br /&gt;
* 一致するすべてのメッセージを表示 {{ic|&#039;&#039;PATTERN&#039;&#039;}}: {{bc|1=# journalctl --grep=&#039;&#039;PATTERN&#039;&#039;}}&lt;br /&gt;
* 起動時からの全てのメッセージを表示: {{bc|# journalctl -b}} 場合によっては最新のブートメッセージではなく、以前のブートのメッセージを読みたいことがあります (例えば復旧できないシステムクラッシュが起こった場合)。{{ic|-b}} フラグに任意のパラメータを付けることでメッセージをオフセットして読むことが可能です: {{ic|journalctl -b -0}} は最新のブートのメッセージを、{{ic|journalctl -b -1}} は一つ前のブートのメッセージを表示し {{ic|journalctl -b -2}} は二つ前、と続きます。{{ic|journalctl --list-boots}} を使うことで数字を確認できます。詳しくは {{man|1|journalctl}} を見て下さい、セマンティックスはより強力です。&lt;br /&gt;
* 利用可能な場合は、メッセージカタログからのログメッセージの説明を含めます: {{bc|#journalctl -x}} ログをバグレポートやサポートスレッドに添付する場合は、無関係な出力を制限するため、この機能を使用しないでください。{{ic|journalctl --list-catalog}} を実行すると、既知のカタログエントリをすべてリストできます。&lt;br /&gt;
* 特定の日付 (任意で時間も指定可能) からのメッセージを全て表示: {{bc|1=# journalctl --since=&amp;quot;2012-10-30 18:17:16&amp;quot;}}&lt;br /&gt;
* 20分前からのメッセージを全て表示: {{bc|1=# journalctl --since &amp;quot;20 min ago&amp;quot;}}&lt;br /&gt;
* 新しいメッセージを表示: {{bc|# journalctl -f}}&lt;br /&gt;
* 特定の実行ファイルによる全てのメッセージを表示: {{bc|# journalctl /usr/lib/systemd/systemd}}&lt;br /&gt;
* 特定のプロセスによる全てのメッセージを表示: {{bc|1=# journalctl _PID=1}}&lt;br /&gt;
* 特定のユニットによる全てのメッセージを表示: {{bc|# journalctl -u netcfg}}&lt;br /&gt;
* カーネルのリングバッファを表示: {{bc|1=# journalctl -k}}&lt;br /&gt;
* プライオリティレベルがエラー・クリティカル・アラートのメッセージだけを表示: {{bc|# journalctl -p err..alert}} {{ic|journalctl -p 3..1}} と数字を使うこともできます。{{ic|journalctl -p 3}} のようにひとつだけ指定した場合、指定されたプライオリティよりも高いレベルのメッセージも表示されます。&lt;br /&gt;
* syslog の facility をフィルタリングすることで {{ic|auth.log}} と同等の内容を表示: {{bc|1=# journalctl SYSLOG_FACILITY=10}}&lt;br /&gt;
* ジャーナルディレクトリ (デフォルトでは {{ic|/var/log/journal}} にあります) に大量のログデータが含まれている場合、{{ic|journalctl}} が出力をフィルタリングするのに数分かかることがあります。{{ic|--file}} オプションを使用して、{{ic|journalctl}} が最新のジャーナルのみを参照するように強制すると、大幅に高速化できます: {{bc|# journalctl --file /var/log/journal /*/system.journal -f}}&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|1|journalctl}}, {{man|7|systemd.journal-fields}} や Lennart の[http://0pointer.de/blog/projects/journalctl.html ブログ記事] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{Tip|1=&lt;br /&gt;
デフォルトで、&#039;&#039;journalctl&#039;&#039; は画面からはみ出る行を切り詰めますが、場合によっては、折り返しが有効になっていたほうが読みやすいことがあります。{{ic|SYSTEMD_LESS}} [[環境変数]]によってこれを制御することができ、[[Core Utilities#less|less]] (デフォルトのページャ) に渡すオプションを指定します。デフォルトは {{ic|FRSXMK}} です (詳しくは {{man|1|less}} や {{man|1|journalctl}} を参照)&lt;br /&gt;
&lt;br /&gt;
{{ic|S}} オプションを省くことで、出力は折り返されるようになります。例えば、以下のように &#039;&#039;journalctl&#039;&#039; を起動してください:&lt;br /&gt;
&lt;br /&gt;
 $ SYSTEMD_LESS=FRXMK journalctl&lt;br /&gt;
&lt;br /&gt;
この挙動をデフォルトに設定したいならば、{{ic|~/.bashrc}} や {{ic|~/.zshrc}} でこの変数を [[環境変数#ユーザーごと|export]] してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|journal はバイナリ形式で保存されますが、保存されるメッセージの中身に修正は加わりません。このため、&#039;&#039;systemd&#039;&#039; をインストールしていない環境でリカバリなどをするために、&#039;&#039;strings&#039;&#039; を使って回覧することが可能です。コマンドの例: {{ic|$ strings /mnt/arch/var/log/journal/af4967d77fba44c6b093d0e9862f6ddd/system.journal &amp;lt;nowiki&amp;gt;| grep -i&amp;lt;/nowiki&amp;gt; &#039;&#039;message&#039;&#039;}}}}&lt;br /&gt;
&lt;br /&gt;
== journal のサイズ制限 ==&lt;br /&gt;
&lt;br /&gt;
journal が永続的（不揮発性）の場合、デフォルトではファイルシステムの容量の 10% に制限されます (4 GiB が上限)。例えば、{{ic|/var/log/journal}} が 20GiB の root パーティションにのっている場合、2GiB がログデータの上限になります。{{ic|/etc/systemd/journald.conf}} の {{ic|SystemMaxUse}} を変更すれば、最大サイズを変更できます。システムでの現在の制限を確認するには、systemd-journald のユニットログを確認して下さい。&lt;br /&gt;
&lt;br /&gt;
 # journalctl -b -u systemd-journald&lt;br /&gt;
&lt;br /&gt;
例えば制限を 50Mib にする場合、適切な行を次のようにアンコメント・編集します:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/journald.conf|2=&lt;br /&gt;
SystemMaxUse=50M}}&lt;br /&gt;
&lt;br /&gt;
上記のように設定ファイルを編集する代わりにドロップインファイルを使用する方法もあります。その場合 {{ic|[Journal]}} ヘッダーを使って以下のように記述してください:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/systemd/journald.conf.d/00-journal-size.conf|2=&lt;br /&gt;
[Journal]&lt;br /&gt;
SystemMaxUse=50M&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
この設定を変更した後、新しい設定を適用するために {{ic|systemd-journald.service}} を [[再起動]] してください。&lt;br /&gt;
&lt;br /&gt;
詳細は {{man|5|journald.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ユニット単位でのサイズ制限 ===&lt;br /&gt;
&lt;br /&gt;
設定したいサービス（例えば sshd）のユニットファイルを [[systemd#ユニットファイルの編集|編集]] して、{{ic|1=LogNamespace=ssh}} セクションを追加してください。&lt;br /&gt;
&lt;br /&gt;
次に {{ic|/etc/systemd/journald.conf}} をコピーして {{ic|/etc/systemd/journald@ssh.conf}} を作成します。その後、{{ic|journald@ssh.conf}} を編集し、{{ic|SystemMaxUse}} を好みに合わせて調整します。&lt;br /&gt;
&lt;br /&gt;
サービスを [[再起動]] すると、自動的に新しいジャーナルサービス {{ic|systemd-journald@ssh.service}} が開始されるはずです。名前空間サービスからのログは {{ic|journalctl --namespace ssh}} で見ることができます。&lt;br /&gt;
&lt;br /&gt;
ジャーナルネームスペースの詳細については {{man|8|systemd-journald.service|JOURNAL NAMESPACES}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
== ジャーナルファイルを手動で消去 ==&lt;br /&gt;
&lt;br /&gt;
journal のファイルは {{ic|/var/log/journal}} に存在します。{{ic|rm}} で消去することもできますが、{{ic|journalctl}} を使って消去することも可能です。例:&lt;br /&gt;
&lt;br /&gt;
* 使用ディスク容量が 100M 以下になるまで journal ファイルを削除する: {{bc|1=# journalctl --vacuum-size=100M}}&lt;br /&gt;
* 2週間以上前のデータを含んでいる journal ファイルを削除する: {{bc|1=# journalctl --vacuum-time=2weeks}}&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|1|journalctl}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
== journald と syslog の結合 ==&lt;br /&gt;
&lt;br /&gt;
従来のジャーナル非対応の [[Syslog-ng|syslog]] 実装との互換性は、&#039;&#039;systemd&#039;&#039; がソケット {{ic|/run/systemd/journal/syslog}} 経由ですべてのメッセージを転送できるようにすることで実現できます。syslog デーモンをジャーナルと連携させるには、{{ic|/dev/log}} ではなくこのソケットにバインドする必要があります。([https://lwn.net/Articles/474968/ 公式アナウンス]) &lt;br /&gt;
&lt;br /&gt;
[[rsyslog]] または [[syslog-ng]] がプルされるため、システムのオーバーヘッドを避けるために、ソケットに転送するためのデフォルトの {{ic|journald.conf}} は {{ic|1=ForwardToSyslog=no}} です。 [https://lists.freedesktop.org/archives/systemd-devel/2014-August/022295.html#journald 自力で] journal からメッセージを取得するためです。&lt;br /&gt;
&lt;br /&gt;
設定の詳細は [[Syslog-ng#概要]], [[Syslog-ng#syslog-ng と systemd journal]], [[rsyslog]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
== journald を /dev/tty12 に転送する ==&lt;br /&gt;
&lt;br /&gt;
[[systemd#ユニットファイルの編集|ドロップインディレクトリ]] {{ic|/etc/systemd/journald.conf.d}} を作成して、ディレクトリの中に {{ic|fw-tty12.conf}} ファイルを作成してください:&lt;br /&gt;
{{hc|1=/etc/systemd/journald.conf.d/fw-tty12.conf|2=&lt;br /&gt;
[Journal]&lt;br /&gt;
ForwardToConsole=yes&lt;br /&gt;
TTYPath=/dev/tty12&lt;br /&gt;
MaxLevelConsole=info&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
次を実行して journald を再起動してください:&lt;br /&gt;
 # systemctl restart systemd-journald&lt;br /&gt;
&lt;br /&gt;
== 別のジャーナルを指定して表示 ==&lt;br /&gt;
ライブ環境から起動して本番環境を修復する場合など、トラブルが発生した他のシステムのログを確認する必要があるような場合、{{ic|/mnt}} などにディスクをマウントしてから、ジャーナルのパスを {{ic|-D}}/{{ic|--directory}} で指定することができます:&lt;br /&gt;
&lt;br /&gt;
 $ journalctl -D &#039;&#039;/mnt&#039;&#039;/var/log/journal -e&lt;br /&gt;
&lt;br /&gt;
== ユーザーとしてジャーナルアクセス ==&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、一般ユーザは自分のユーザ単位のジャーナルにしかアクセスできません。一般ユーザーとしてシステムジャーナルの読み込みアクセスを許可するには、そのユーザーを {{ic|systemd-journal}} に追加してください。[[ユーザーとグループ#グループ管理|ユーザーグループ]] {{ic|adm}} および {{ic|wheel}} グループのメンバにも読み込み権限が与えられます。&lt;br /&gt;
&lt;br /&gt;
詳しくは、{{man|1|journalctl|DESCRIPTION}} と [[ユーザーとグループ#ユーザーグループ]]を参照してください。&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Firefox/%E8%A8%AD%E5%AE%9A&amp;diff=33189</id>
		<title>Firefox/設定</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Firefox/%E8%A8%AD%E5%AE%9A&amp;diff=33189"/>
		<updated>2023-08-05T08:07:22Z</updated>

		<summary type="html">&lt;p&gt;Hikali: fix syntax error  {{ic|~/.mozilla/firefox/your-profile/user.js}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ウェブブラウザ]]&lt;br /&gt;
[[en:Firefox/Tweaks]]&lt;br /&gt;
[[tr:Firefox İpuçları]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Firefox}}&lt;br /&gt;
{{Related|ブラウザプラグイン}}&lt;br /&gt;
{{Related|Firefox Ramdisk}}&lt;br /&gt;
{{Related|Firefox プライバシー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
このページでは Firefox の高度な設定オプションとパフォーマンスを上げる設定を説明します。&lt;br /&gt;
&lt;br /&gt;
== パフォーマンス ==&lt;br /&gt;
&lt;br /&gt;
Firefox のパフォーマンスを向上させる方法には、Firefox の実行中に入力できるパラメータ、開発者によって決められている設定の変更、もしくは外部プログラムやスクリプトによる高度な方法が存在します。&lt;br /&gt;
&lt;br /&gt;
{{Note|かならず最新版の Firefox を使って下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== Firefox の高度なオプション ===&lt;br /&gt;
このセクションではパフォーマンスに関する Firefox の高度なオプションについて説明しています。詳しい情報は [http://kb.mozillazine.org/Category:Tweaking_preferences Mozillazine フォーラムの投稿] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== OpenGL Off-Main-Thread Compositing (OMTC) の有効化 ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|特定のハードウェアで OpenGL OMTC が無効になる場合、おそらく安定に問題があったり、システムリソースの消費が激しかったり、ドライバーにバグが存在するなどの可能性があります。強制的に有効化するときは自己責任で行って下さい。}}&lt;br /&gt;
{{Note|Firefox バージョン 40 から基本的なソフトウェア OMTC はデフォルトで有効になります。}}&lt;br /&gt;
&lt;br /&gt;
OpenGL OMTC を有効にするには {{ic|about:config}} を開いて以下を設定します:&lt;br /&gt;
* {{ic|layers.acceleration.force-enabled true}}&lt;br /&gt;
&lt;br /&gt;
Firefox を再起動することで変更が適用されます。&lt;br /&gt;
&lt;br /&gt;
OpenGL OMTC が有効になっているかどうか確認するには、{{ic|about:support}} を開いて &amp;quot;Graphics&amp;quot; セクションの &amp;quot;GPU Accelerated Windows&amp;quot; を見ます。&amp;quot;0/1 Basic (OMTC)&amp;quot; (または 0/2) と表示されている場合、OpenGL OMTC は無効になっています。&amp;quot;1/1 OpenGL (OMTC)&amp;quot; (または 1/2 や 2/2) となっている場合、有効です。&lt;br /&gt;
&lt;br /&gt;
上記の設定で GPU アクセラレーションが有効にならない場合、環境変数を設定してみてください: {{ic|1=export MOZ_USE_OMTC=1}}。設定してから Firefox を起動します [http://featherweightmusings.blogspot.se/2013/11/no-more-main-thread-opengl-in-firefox.html]。&lt;br /&gt;
&lt;br /&gt;
Firefox の OMTC に関する詳細は次のページにあります: https://wiki.mozilla.org/Platform/GFX/OffMainThreadCompositing&lt;br /&gt;
&lt;br /&gt;
==== WebRender コンポジタの有効化 ====&lt;br /&gt;
&lt;br /&gt;
WebRender は、Rust で書かれた GPU ベースの 2D レンダリングエンジンです。Wikipedia:Gecko (software)|Gecko]] コンポジタの代わりに、[[Wikipedia:Servo (software)|Servo]] ブラウザエンジンプロジェクトを動かしているコンポジタです。これはサポートされたハードウェア上でのパフォーマンスを向上させ、[[#OpenGL Off-Main-Thread Compositing (OMTC) の有効化|OpenGL compositor]] が使用されているときのいくつかの黒い視覚的な不具合を修正します。現在、いくつかの既知のバグがあります。詳しくは [[MozillaWiki:Platform/GFX/Quantum Render]] をご覧ください。&lt;br /&gt;
&lt;br /&gt;
WebRender はすべての wayland セッションでデフォルトで有効になっています (Firefox 89 の時点) [https://bugzilla.mozilla.org/show_bug.cgi?id=1704489#c6]。WebRender はデフォルトで [[MozillaWiki:Platform/GFX/WebRender Where|non 4k+ displays]] に対しても有効です。いくつかのエッジケースでは、[[MozillaWiki:Platform/GFX/WebRender Where#Linux]] で詳述されているように、資格を変更することができます。デフォルトの  WebRender の有効化はグラフィックカードやドライバのバージョンに依存する可能性もあります。&lt;br /&gt;
&lt;br /&gt;
以下の2つの方法のいずれかを使って強制的に有効にすることができます。&lt;br /&gt;
# {{ic|about:config}} に行き {{ic|gfx.webrender.all}} を {{ic|true}} に設定、 変更を有効にするために、Firefox を再起動します。&lt;br /&gt;
# by setting the {{ic|MOZ_WEBRENDER}}. [環境変数]] を {{ic|1}} に設定してから、Firefox を起動します。&lt;br /&gt;
&lt;br /&gt;
WebRender が有効かどうかを確認するには、{{ic|about:support}} に行き、 &#039;&#039;グラフィックス&#039;&#039; セクションの &#039;&#039;サブセクション&#039;&#039; で、&#039;&#039;WEBRENDER&#039;&#039; を探します。もし、&amp;quot;available by user: Force enabled by pref&amp;quot; と報告されていれば、有効になっています。もし、&#039;&#039;only&#039;&#039;であれば、&amp;quot;opt-in by default. &amp;quot;と表示されます。WebRender is an opt-in feature&amp;quot; とだけ報告された場合、無効であることを意味します。&lt;br /&gt;
&lt;br /&gt;
{{Note|特定のハードウェアで  WebRender が無効になっている場合、安定性の問題、システムリソースの大量消費、ドライバのバグ、または多くの異なる変数が原因である可能性があり、高速化する代わりに遅くなることがあります。よくわからない場合は、自己責任で強制的に有効化することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
==== レガシー OpenGL コンポジタを使用可能にする ====&lt;br /&gt;
&lt;br /&gt;
ハードウェアの &#039;&#039;WebRender&#039;&#039; またはソフトウェアの &#039;&#039;Basic&#039;&#039; コンポジタがデフォルトで使用されます。レガシー OpenGL コンポジタが動作しているかどうかを確認するには {{ic|about:support}} に行き、&amp;quot;Graphics&amp;quot; セクションで &amp;quot;Compositing&amp;quot; を探してください：もし &amp;quot;OpenGL&amp;quot; と報告されれば有効、さもなければ &amp;quot;WebRender&amp;quot; または &amp;quot;Basic&amp;quot; と報告されます。&lt;br /&gt;
&lt;br /&gt;
OpenGL の合成は {{ic|about:config}} で {{ic|layers.acceleration.force-enabled}} を {{ic|true}} に切り替えることで強制的に有効にすることが可能です。変更を有効にするには、Firefox を再起動します。注意 WebRender は Firefox の OpenGL コンポジタを置き換えるものであり、OpenGL コンポジタよりも推奨されます。&lt;br /&gt;
&lt;br /&gt;
{{note|特定のハードウェアで OpenGL 構成が無効になっている場合は、安定性の問題、高いシステムリソースの消費、ドライバーのバグ、またはさまざまな変数が原因である可能性があります。そのため、速度を上げる代わりに速度を落とす可能性があります。自分の責任で強制的に有効化してください。よくわからない場合はベンチマークを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
==== Accelerated Azure Canvas を有効にする ====&lt;br /&gt;
{{ic|about:config}} を開いて、右クリックして新しい真偽値を作ってください。名前を {{ic|gfx.canvas.azure.accelerated}} にして true に設定してください。&lt;br /&gt;
&lt;br /&gt;
Firefox を再起動して {{ic|about:support}} の AzureCanvasAccelerated が 1 になっていれば有効です。&lt;br /&gt;
&lt;br /&gt;
==== ネットワーク設定 ====&lt;br /&gt;
&lt;br /&gt;
高度なネットワーク設定は {{ic|about:config}} ページから変更できます (&#039;&#039;network&#039;&#039; を検索してみてください)。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 推奨値&lt;br /&gt;
! 設定名 || 値 || 説明&lt;br /&gt;
|-&lt;br /&gt;
| network.http.pipelining || true || 通常接続で [http://www-archive.mozilla.org/projects/netlib/http/pipelining-faq.html pipelining] を有効にします。&lt;br /&gt;
|-&lt;br /&gt;
| network.http.pipelining.ssl || true || SSL 接続で HTTP pipelining を有効にします。&lt;br /&gt;
|-&lt;br /&gt;
| network.http.proxy.pipelining || true || プロキシ接続で pipelining を有効にします。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== アンチフィッシングの無効化 ====&lt;br /&gt;
{{Note|プロファイルフォルダのファイル削除には危険が伴うため、先にバックアップをすることを推奨します。}}&lt;br /&gt;
&lt;br /&gt;
Firefox のアンチフィッシング機能は Firefox の起動や終了を遅くすることがあります。問題は Firefox が [[Sqlite]] データベースを使っており、何度も使用しているうちにデータベースが巨大に成長することで読み書きが遅くなるのが原因です。どのサイトが怪しいのか Firefox に知らせてもらう必要がないと感じたのならば、機能を無効にすることが可能です:&lt;br /&gt;
&lt;br /&gt;
* 設定のセキュリティタブで次のオプションをオフにしてください: &#039;&#039;&amp;quot;攻撃サイトとして報告されているサイトをブロックする&amp;quot;&#039;&#039; と &#039;&#039;&amp;quot;偽装サイトとして報告されているサイトをブロックする&amp;quot;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
* プロファイルフォルダ ({{ic|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/}}) に存在する {{ic|urlclassifier}} から始まるファイルを全て削除してください:&lt;br /&gt;
 $ rm -i ~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/urlclassifier*&lt;br /&gt;
&lt;br /&gt;
:上記のファイルは Firefox によって再作成されることがありますが、初期サイズから大きく成長することはなくなります。&lt;br /&gt;
&lt;br /&gt;
==== urlclassifier3.sqlite が作成されないようにする ====&lt;br /&gt;
上述のように {{ic|urlclassifier*}} ファイルを全て削除しても、一定期間後に {{ic|urlclassifier3.sqlite}} のサイズがまた増加することがあります。将来的にサイズが増加しないようにするシンプルな解決法:&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;&lt;br /&gt;
 $ echo &amp;quot;&amp;quot; &amp;gt; urlclassifier3.sqlite&lt;br /&gt;
 $ chmod 400 urlclassifier3.sqlite&lt;br /&gt;
&lt;br /&gt;
ファイルを空にして読み取り専用にすることで Firefox から書き込めないようになります。&lt;br /&gt;
&lt;br /&gt;
==== OCSP 検証の無効化 ====&lt;br /&gt;
OCSP バリデーションは、Firefox が新しいサーバーに接続 (HTTPS) するたびに [http://news.netcraft.com/archives/2013/04/16/certificate-revocation-and-the-performance-of-ocsp.html 遅延を発生させる] ことがあります。特に、HTTPS を使用するページにウェブガジェットが含まれていた場合、一つの URL で複数の接続が発生することになり、事態を悪化させます。&lt;br /&gt;
&lt;br /&gt;
* 設定 -&amp;gt; 詳細 -&amp;gt; 証明書にある次のオプションをオフにしてください: &#039;&#039;&amp;quot;OSCP レスポンダに問い合わせてデジタル証明書の有効性をリアルタイムに確認する&amp;quot;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
{{Warning|OCSP を無効化した場合、中間者攻撃から無防備になります。Wi-Fi や VPN などの攻撃されるおそれがある接続を使用する場合は、OSCP はオンのままにしておくことが強く推奨されます。}}&lt;br /&gt;
&lt;br /&gt;
==== ディスクキャッシュの無効化 ====&lt;br /&gt;
ロードされたオブジェクト (html ページ、jpeg 画像、css スタイルシート、gif バナー) はすべて Firefox キャッシュに保存され、同じオブジェクトを今度使用するときにロードすることで、もう一度サーバーからダウンロードする必要を省きます。しかしながら、実際に再利用されるオブジェクトはごくわずかに限られています (通常は 30% ほど)。これはオブジェクトの有効期間が短すぎたり、アップデートがあったり、もしくは、単純にユーザーが行う行動 (訪問済みのページではなく新しいページをロードするなど) が原因であったりします。Firefox のキャッシュはメモリキャッシュとディスクキャッシュに分けられており、ディスクキャッシュを使用している場合、オブジェクトがロードされる度にディスクに書き込みが行われ、また、同時に古いオブジェクトの削除もされるために、頻繁にディスクの書き込みが発生します。&lt;br /&gt;
&lt;br /&gt;
* 設定 -&amp;gt; 詳細 -&amp;gt; ネットワーク -&amp;gt; キャッシュされた Web ページから &#039;&#039;&amp;quot;キャッシュサイズを制限する&amp;quot;&#039;&#039; でゼロを指定してください。&lt;br /&gt;
&lt;br /&gt;
==== ディスクキャッシュを RAM に移動 ====&lt;br /&gt;
&lt;br /&gt;
別の方法として、&amp;quot;ディスク&amp;quot; キャッシュを RAM ディスクに移動して、上記の二つの間の解決策を得ることができます。キャッシュは、Firefox が実行されてから実行されるまでの間は保持されますが (Firefox のクラッシュリカバリを含む)、再起動時には破棄されます (OS クラッシュを含む)。&lt;br /&gt;
&lt;br /&gt;
これを行うには、 {{Ic|about:config}} に移動し、 {{Ic|browser.cache.disk.parent_directory}} を {{ic|/run/user/&#039;&#039;UID&#039;&#039;/firefox}} に設定します。 {{ic|&#039;&#039;UID&#039;&#039;}} は、 {{ic|id -u}} を実行して取得できるユーザのIDです。&lt;br /&gt;
&lt;br /&gt;
{{Ic|about:cache}} を開いて、新しいディスクキャッシュの場所を確認します。&lt;br /&gt;
&lt;br /&gt;
==== セッションを保存する間隔を長くする ====&lt;br /&gt;
Firefox のセッションは15秒ごとに現在の状態 (開かれている url、cookie、履歴とブックマーク) を自動的に保存しています。これはユーザーが必要とするところよりも少し頻繁すぎる嫌いがあり、頻繁にディスクアクセスを発生させています。&lt;br /&gt;
&lt;br /&gt;
セッションの保存間隔の設定は {{ic|about:config}} ページから変更できます (&#039;&#039;sessionstore&#039;&#039; を検索してください)。&lt;br /&gt;
&lt;br /&gt;
* browser.sessionstore.interval 300000&lt;br /&gt;
&lt;br /&gt;
セッションの保存を無効化したい場合、以下の設定を true から false に変更してください:&lt;br /&gt;
	&lt;br /&gt;
* browser.sessionstore.resume_from_crash false&lt;br /&gt;
&lt;br /&gt;
==== 即座にページをレンダリング ====&lt;br /&gt;
Mozilla アプリケーションはウェブページを漸増的にレンダリングします。ページ全体がダウンロードされる前に、ページの一部だけを表示するのです。基本的にウェブページの最初の部分には表示に関係する情報はあまり存在しないため、Mozilla アプリケーションはページをレンダリングする前に少しの間だけ待機します。以下の設定はインターバルを制御します。接続速度が遅い場合 (ダイアルアップ接続など)、設定を変更するとウェブページのロード時間が長くなることがあるので注意してください。&lt;br /&gt;
&lt;br /&gt;
* nglayout.initialpaint.delay の値を 0 に変更。&lt;br /&gt;
&lt;br /&gt;
上記の設定は {{ic|about:config}} ページで行うことができます。&lt;br /&gt;
&lt;br /&gt;
=== その他の設定 ===&lt;br /&gt;
このセクションでは Firefox のパフォーマンスを向上させるその他の設定を説明しています。&lt;br /&gt;
&lt;br /&gt;
==== UPX で Firefox バイナリを圧縮して起動時間を短縮 ====&lt;br /&gt;
[http://upx.sourceforge.net/ UPX] は高速な伸長をサポートしている実行可能ファイル圧縮ツールであり、メモリのオーバーヘッドを減らします。[[公式リポジトリ]]の {{Pkg|upx}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
{{ic|upx}} を使用して Firefox の実行可能ファイルを圧縮する前に、バイナリのバックアップを作成してください:&lt;br /&gt;
 # cp /usr/lib/firefox/firefox /usr/lib/firefox/firefox.backup&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|upx}} を実行して、最大圧縮レベルを適用してください:&lt;br /&gt;
 # upx --best /usr/lib/firefox/firefox&lt;br /&gt;
&lt;br /&gt;
==== リファラーヘッダの制御 ====&lt;br /&gt;
Firefox バージョン 28 では HTTP リファラーヘッダの送信を制御することができます。GUI の設定からはオプションを書けられませんが、{{ic|about:config}} で変更することが可能です。関連するキーは4つ存在します [https://security.stackexchange.com/a/80194]。推奨される設定を以下の行で説明します。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 推奨値&lt;br /&gt;
! キー || 推奨 || [https://ip-check.info ip-check.info] || デフォルト || 説明&lt;br /&gt;
|-&lt;br /&gt;
| network.http.sendRefererHeader || 1 || 1 || 2 || リンクをクリックした場合にのみ送信 (0 は完全に送信しない、1 はリンクのクリック時のみ、2 は常に送信)。&lt;br /&gt;
|-&lt;br /&gt;
| network.http.referer.XOriginPolicy || 1 || 1 || 0 || ベースドメインが一致する場合にのみ送信 (0 は常に送信、2 はホストが一致する場合のみ)。&lt;br /&gt;
|-&lt;br /&gt;
| network.http.referer.spoofSource || true || false || false || リンク先の URI を送信。&lt;br /&gt;
|-&lt;br /&gt;
| network.http.referer.trimmingPolicy || 2 || 0 || 0 || スキーム・ホスト・ポートを送信しない (0 は全て送信しない、1 はスキームやホストのポート・パスを送信しない)。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== プロファイルの SQLite データベースのデフラグ ====&lt;br /&gt;
{{Warning|以下の設定はデータベースを破損させてセッションが正しく保存されなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
Firefox 3.0 ではブックマーク・履歴・パスワードは SQLite データベースに保存されます。SQLite データベースは使っていくうちに断片化して空き領域があちこちにできます。Firefox はデータベースを確認して最適化することはしないので、しばらくすると断片化は性能に影響してきます。データベースのデフラグを行なって使われていない領域を削除することで起動時間を短縮したりブックマークや履歴などの操作を高速化することが可能です。&lt;br /&gt;
&lt;br /&gt;
Firefox を実行していないときに {{Pkg|profile-cleaner}} を使うことでデフラグを行えます。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ デフラグ前後のサイズの比較&lt;br /&gt;
! SQLite データベース || デフラグ前のサイズ || デフラグ後のサイズ || % 変化&lt;br /&gt;
|- &lt;br /&gt;
|urlclassifier3.sqlite|| 37 M || 30 M || 19 %&lt;br /&gt;
|-&lt;br /&gt;
|places.sqlite || 16 M || 2.4 M || 85 %&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Firefox の最近のバージョンでは、ページのロードが遅くなったりプロファイルの破損の原因となる places データベースをデフラグ・最適化するツールが用意されています。ツールを使うには {{ic|about:support}} ページを開いてください。{{ic|Places データベース}} の下にある {{ic|完全性を検証}} ボタンを押してください。&lt;br /&gt;
&lt;br /&gt;
==== tmpfs でプロファイルを RAM にキャッシュ ====&lt;br /&gt;
システムにメモリが余っている場合、{{ic|tmpfs}} を使って[[Firefox Ramdisk|プロファイルディレクトリ全体をキャッシュ]]することができます。そうすると Firefox のレスポンスが高まります。&lt;br /&gt;
&lt;br /&gt;
==== スポンサーコンテンツやタイルをオフにする ====&lt;br /&gt;
{{ic|about:config}} で {{ic|browser.newtabpage.directory.source}} と {{ic|browser.newtabpage.directory.ping}} の値を空にしてください。また、新しいタブページのツールからタイル機能を無効にすると良いでしょう。[[Wireshark]] セッションで通信を確認できます。&lt;br /&gt;
&lt;br /&gt;
==== Electrolysis の有効化 ====&lt;br /&gt;
Firefox 48 (45 ESR) 以上では Electrolysis (マルチプロセス) を有効化することでパフォーマンスとセキュリティを高めることができます。{{ic|about:config}} で {{ic|browser.tabs.remote.autostart}} を &#039;&#039;true&#039;&#039; に設定してください。Electrolysis を強制的に有効化することもできますが [https://wiki.mozilla.org/Electrolysis#Force_Enable]、問題が起こる可能性があるため基本的には推奨されません。&lt;br /&gt;
&lt;br /&gt;
Electrolysis が有効になっているか確認するには {{ic|about:support}} の「アプリケーション基本情報」セクションにある「マルチプロセスウィンドウ」を確認してください。&amp;quot;0/1 (無効)&amp;quot; となっている場合 Electrolysis は無効です。&amp;quot;1/1 (ユーザー設定により有効)&amp;quot; となっていれば有効です。&#039;&#039;*/*&#039;&#039; の数字は Firefox の開かれているウィンドウの数を示します。例えば 0/2 は2つ開かれている Firefox のウィンドウのどちらも Electrolysis を使用しておらず、2/2 は両方のウィンドウで有効になっていることを意味します。&lt;br /&gt;
&lt;br /&gt;
==== HTTP キャッシュの有効化 ====&lt;br /&gt;
{{ic|about:config}} で {{ic|browser.cache.use_new_backend}} を 0 から 1 に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== Pocket の無効化 ====&lt;br /&gt;
Pocket サービスを使用しない場合、{{ic|about:config}} で {{ic|extensions.pocket.enabled}} を &#039;&#039;false&#039;&#039; に設定することで無効にできます。&lt;br /&gt;
{{Note|45ESR の場合、キーは {{ic|browser.pocket...}} です。}}&lt;br /&gt;
&lt;br /&gt;
== 外観 ==&lt;br /&gt;
=== フォント ===&lt;br /&gt;
次の記事を参照してください: [[フォント設定]]&lt;br /&gt;
&lt;br /&gt;
==== DPI の値の設定 ====&lt;br /&gt;
システムの DPI が 96 を下回っている場合、設定を変更することで Firefox のフォントの見た目を良くすることができます。デフォルトでは Firefox は DPI の値は 96 を使用し、96 を上回っている場合だけシステム値を使います。値に関係なくシステム値を使うようにするには、アドレスバーに {{ic|about:config}} と入力して {{ic|layout.css.dpi}} を &#039;&#039;&#039;0&#039;&#039;&#039; に設定してください。&lt;br /&gt;
&lt;br /&gt;
上記の設定は Firefox のユーザーインターフェースの DPI 設定にだけ影響を与えるので注意してください。ウェブページのコンテンツの DPI 値は 96 のままです。変更するには {{ic|layout.css.devPixelsPerPx}} をシステムの DPI を 96 で割った値に設定してください。例えばシステムの DPI が 144 の場合、設定する値は 144/96 = 1.5 です。{{ic|layout.css.devPixelsPerPx}} を &#039;&#039;&#039;1.5&#039;&#039;&#039; にするとウェブページのコンテンツの DPI が 144 になります。&lt;br /&gt;
&lt;br /&gt;
高解像度ディスプレイについての情報は [[HiDPI#Firefox]] を参照してください。DPI の計算は [https://www.sven.de/dpi/] を見てください。&lt;br /&gt;
&lt;br /&gt;
==== Microsoft Windows のデフォルトフォント設定 ====&lt;br /&gt;
以下は Firefox を Microsoft Windows にインストールした時のデフォルトフォント設定です。多くのウェブサイトは Microsoft フォントを使っています。&lt;br /&gt;
{{bc|&lt;br /&gt;
Proportional: Serif Size (pixels): 16&lt;br /&gt;
Serif: Times New Roman&lt;br /&gt;
Sans-serif: Arial&lt;br /&gt;
Monospace: Courier New Size (pixels): 13&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 一般的なユーザーインターフェイスの CSS 設定 ===&lt;br /&gt;
Firefox のユーザーインターフェイスは {{ic|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/}} 内の {{ic|userChrome.css}} や {{ic|userContent.css}} ファイルを編集することで変更することができます (&#039;&#039;profile_dir&#039;&#039; は &#039;&#039;hash.name&#039;&#039; という形式を取っており、&#039;&#039;hash&#039;&#039; は8文字のランダムな文字列です。プロファイルの &#039;&#039;name&#039;&#039; は通常 &#039;&#039;default&#039;&#039; となっています)。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|chrome/}} フォルダと {{ic|userChrome.css}}/{{ic|userContent.css}} ファイルは存在している必要がないので、作る必要があるかもしれません。}}&lt;br /&gt;
&lt;br /&gt;
このセクションでは (ウェブページではなく) Firefox のユーザーインターフェイスを変更する {{ic|userChrome.css}} ファイルについてだけ扱います。&lt;br /&gt;
&lt;br /&gt;
==== フォントの変更 ====&lt;br /&gt;
この設定はグローバルな GTK+ のフォント設定を上書きします。ウェブページには影響を与えません、ユーザーインターフェイスのフォントだけが変更されます:&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&lt;br /&gt;
* {&lt;br /&gt;
    font-family: &amp;quot;FONT_NAME&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== ボタンアイコンの隠匿 ====&lt;br /&gt;
テキストボタンを有効化:&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&lt;br /&gt;
.button-box .button-icon {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 様々なタブボタンの隠匿 ====&lt;br /&gt;
以下の設定はタブバーの縁で表示される矢印、全てのタブのドロップダウンリストを切り替えるボタン、新しいタブを作成するプラス記号を非表示にします:&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* Tab bar */&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-strip *[class^=&amp;quot;scrollbutton&amp;quot;] {&lt;br /&gt;
    /* Hide tab scroll buttons */&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-strip *[class^=&amp;quot;tabs-alltabs&amp;quot;] {&lt;br /&gt;
    /* Hide tab drop-down list */&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-strip *[class^=&amp;quot;tabs-newtab-button&amp;quot;] {&lt;br /&gt;
    /* Hide new-tab button */&lt;br /&gt;
    display: none;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 水平タブ ====&lt;br /&gt;
タブバーをブラウザウィンドウの側面に横に並べて表示するには:&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&lt;br /&gt;
/* Display the tabbar on the left */&lt;br /&gt;
#content &amp;gt; tabbox {&lt;br /&gt;
    -moz-box-orient: horizontal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-strip {&lt;br /&gt;
    -moz-box-orient: vertical;&lt;br /&gt;
    /*&lt;br /&gt;
     * You can set this to -moz-scrollbars-vertical instead,&lt;br /&gt;
     * but then the scrollbar will *always* be visible.  this way&lt;br /&gt;
     * there is never a scrollbar, so it behaves like the tab bar&lt;br /&gt;
     * normally does&lt;br /&gt;
     */&lt;br /&gt;
     overflow: -moz-scrollbars-none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-tabs {&lt;br /&gt;
    -moz-box-orient: horizontal;&lt;br /&gt;
    min-width: 20ex;   /* You may want to increase this value */&lt;br /&gt;
    -mox-box-pack: start;&lt;br /&gt;
    -moz-box-align: start;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-tabs &amp;gt; hbox {&lt;br /&gt;
    -moz-box-orient: vertical;&lt;br /&gt;
    -moz-box-align: stretch;&lt;br /&gt;
    -moz-box-pack: start;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-tabs &amp;gt; hbox &amp;gt; tab {&lt;br /&gt;
    -moz-box-align: start;&lt;br /&gt;
    -moz-box-orient: horizontal;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== ウィンドウの縁とタイトルバーを非表示にする ====&lt;br /&gt;
&lt;br /&gt;
タイトルバーをタブバーに置き換えるには、{{ic|about:config}} で {{ic|browser.tabs.drawInTitlebar}} を有効にします。&lt;br /&gt;
&lt;br /&gt;
または、&amp;quot;メニュー&amp;quot;、&amp;quot;カスタマイズ&amp;quot; の順に進み、左下隅に &amp;quot;タイトルバー&amp;quot; という名前のチェックボックスを見つけます。  チェックを外します。  チェックボックスがない場合は、{{ic|XDG_CURRENT_DESKTOP}} 環境変数が正しく設定されているか、{{ic|MOZ_GTK_TITLEBAR_DECORATION}} 環境変数が &amp;quot;client&amp;quot; に設定されていることを確認してください。&lt;br /&gt;
&lt;br /&gt;
===== KDE でタイトルバーのみを非表示にする =====&lt;br /&gt;
&lt;br /&gt;
上記の設定では、Firefox は KDE で最小化/最大化/閉じるボタンをタブバーに追加しますが、タイトルバーはそのまま残ります。&lt;br /&gt;
&lt;br /&gt;
それを右クリックし、&amp;quot;More Actions &amp;gt; Configure Special Application Settings&amp;quot; を選択して削除できます。そこに &amp;quot;タイトルバーとフレームなし&amp;quot; の新しいプロパティを追加し、それを有効にすることを忘れないでください。&amp;quot;はい&amp;quot; を選択する必要があります。  (タイトルバーがなくなった後でルールを変更するには、&#039;&#039;System settings&#039;&#039; &amp;gt; &#039;&#039;Window Management&#039;&#039; &amp;gt; &#039;&#039;Window Rules&#039;&#039; に移動します。)&lt;br /&gt;
&lt;br /&gt;
ただし、それではフレームも消えてしまいますので、基本的にウィンドウサイズの変更はできません。  別の方法として、&#039;&#039;System settings&#039;&#039; &amp;gt; &#039;&#039;Application Style&#039;&#039; &amp;gt; &#039;&#039;Window Decorations&#039;&#039; に移動し、&#039;&#039;Breeze&#039;&#039; を選択して設定を変更します。  最後のタブ &#039;&#039;Window-Specific Overrides&#039;&#039; で、新しいものを追加します。  名前を取得するには、&#039;&#039;Detect Window Properties&#039;&#039; ボタンを使用します。または、Firefox だけでなく、すべてのウィンドウに対してこのオーバーライドを設定する場合は、正規表現フィールドにドット (.) を入力できます。  その後、&#039;&#039;Decoration Options&#039;&#039; を設定して、タイトル バーのみを非表示にします。&lt;br /&gt;
&lt;br /&gt;
==== ブックマークツールバーを自動で隠匿 ====&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&lt;br /&gt;
#PersonalToolbar {&lt;br /&gt;
    visibility: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navigator-toolbox:hover &amp;gt; #PersonalToolbar {&lt;br /&gt;
    visibility: visible !important;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== サイドバーの幅の制限をなくす ====&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&lt;br /&gt;
/* remove maximum/minimum  width restriction of sidebar */&lt;br /&gt;
#sidebar {&lt;br /&gt;
    max-width: none !important;&lt;br /&gt;
    min-width: 0px !important;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== ダーク GTK テーマの時に入力フィールドが読めない ====&lt;br /&gt;
&lt;br /&gt;
ダーク [[GTK]] テーマを使用すると、入力フィールドとテキストフィールドが読めないインターネットページに遭遇することがあります (たとえば、白い背景に白いテキスト、暗い背景に黒いテキストのテキスト入力フィールド) これは、サイトが背景色またはテキスト色のいずれかのみを設定し、Firefox がテーマからもう一方を取得するために発生する可能性があります。 Firefox が Web ページでテーマの色と暗いテーマをそれぞれ使用しないようにするには、{{ic|browser.display.use_system_colors}} と {{ic|widget.content.allow-gtk-dark-theme}} が {{ic|false}} に設定されていることを確認します。 {{ic|about:config}}&lt;br /&gt;
&lt;br /&gt;
または、以前の変更で問題が解決しなかった場合は、{{ic|widget.content.gtk-theme}} という名前の新しい文字列を {{ic|about:config に追加することで、Firefox をライト GTK テーマで起動することができます。 -override}} に設定し、{{ic|Breeze:light}} や {{ic|Adwaita:light}} などのライト テーマに設定します。&lt;br /&gt;
&lt;br /&gt;
===== 入力フィールドの色を CSS でオーバーライドする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|1=関連するバグは 68 から解決されています。[https://bugzilla.mozilla.org/show_bug.cgi?id=1527048#c44]}}&lt;br /&gt;
&lt;br /&gt;
拡張機能 [https://addons.mozilla.org/firefox/addon/text-contrast-for-dark-themes/ Text Contrast for Dark Themes] は、コントラストを維持するために必要に応じて他の色を設定します。&lt;br /&gt;
&lt;br /&gt;
{{ic|userContent.css}} または [https://addons.mozilla.org/firefox/addon/styl-us/ stylus アドオン] を使用して、すべての Web ページに標準の色を明示的に設定します。&lt;br /&gt;
スタイル シートは通常、{{ic|chrome/userContent.css}} のプロファイル フォルダー (パスについては {{ic|about:profiles}} にアクセスしてください) にありますが、そうでない場合はそこに作成できます。&lt;br /&gt;
&lt;br /&gt;
以下は、入力フィールドを標準の黒のテキスト/白の背景に設定します。色が意図したとおりに表示されるように、表示されているサイトで両方をオーバーライドできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|urlbar}} と {{ic|searchbar}} を {{ic|white}} にしたい場合は、最初の 2 つの {{ic|:not}} css セレクターを削除してください。}}&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
input:not(.urlbar-input):not(.textbox-input):not(.form-control):not([type=&#039;checkbox&#039;]):not([type=&#039;radio&#039;]), textarea, select {&lt;br /&gt;
    -moz-appearance: none !important;&lt;br /&gt;
    background-color: white;&lt;br /&gt;
    color: black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#downloads-indicator-counter {&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== GTK テーマを変更する =====&lt;br /&gt;
&lt;br /&gt;
Web コンテンツと UI の両方にライト テーマ (Adwaita など) を使用するよう Firefox に強制するには、[[GTK#テーマの基本設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== コンテンツ処理のみの GTK テーマを変更する =====&lt;br /&gt;
&lt;br /&gt;
Web コンテンツのみにライト テーマ (Adwaita など) を使用するように Firefox を強制するには:&lt;br /&gt;
&lt;br /&gt;
# アドレスバーで {{ic|about:config}} を開きます。&lt;br /&gt;
# ({{ic|マウスの右ボタン}} &#039;&#039;&amp;gt; New &amp;gt; String&#039;&#039;) から新しい {{ic|widget.content.gtk-theme-override}} 文字列タイプのエントリを作成します。&lt;br /&gt;
# レンダリング目的で使用するライトテーマの値を設定します (例:{{ic|Adwaita:light}})&lt;br /&gt;
# Firefox を再起動します。&lt;br /&gt;
&lt;br /&gt;
=== ウェブコンテンツの CSS 設定 ===&lt;br /&gt;
&lt;br /&gt;
このセクションではウェブコンテンツに CSS のカスタムルールを追加できる {{ic|userContent.css}} ファイルについて扱います。このファイルへの変更はブラウザの再起動時に適用されます。&lt;br /&gt;
&lt;br /&gt;
頻繁に使うウェブサイトに小さな修正を加えたり個人的なスタイルを適用することが可能です。人気のウェブサイトのカスタムスタイルシートは [http://userstyles.org/ userstyles.org] などから手に入れることができます。[https://addons.mozilla.org/firefox/addon/superusercontent/ superUserContent] などのアドオンをインストールしてテーマを管理することが可能です。アドオンは {{ic|chrome/userContent.css.d}} ディレクトリを作成してページが更新されたときに中に入っている CSS ファイルに変更を適用します。&lt;br /&gt;
&lt;br /&gt;
==== 他の CSS ファイルのインポート ==== &lt;br /&gt;
&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userContent.css|&lt;br /&gt;
@import url(&amp;quot;./imports/some_file.css&amp;quot;);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== ドメインの特定部位をブロック ====&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userContent.css|&lt;br /&gt;
@-moz-document domain(example.com) {&lt;br /&gt;
    div#header {&lt;br /&gt;
        background-image: none !important;&lt;br /&gt;
    } &lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PDF ファイルのリンクの後ろに [pdf] を追加 ====&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userContent.css|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* add &#039;[pdf]&#039; next to links to PDF files */&lt;br /&gt;
a[href$=&amp;quot;.pdf&amp;quot;]:after {&lt;br /&gt;
    font-size: smaller;&lt;br /&gt;
    content: &amp;quot; [pdf]&amp;quot;;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 広告のブロック ====&lt;br /&gt;
&lt;br /&gt;
{{ic|userContent.css}} を使って広告をブロックする方法については [http://www.floppymoose.com floppymoose.com] にサンプルがあります。&lt;br /&gt;
&lt;br /&gt;
== マウスとキーボード ==&lt;br /&gt;
&lt;br /&gt;
=== マウスホイールでスクロールする速度 ===&lt;br /&gt;
&lt;br /&gt;
マウスホイールによるスクロール速度のデフォルト値を修正するには (例: スピードアップ)、{{ic|about:config}} を開いて {{ic|mousewheel.acceleration}} を検索してください。利用可能なオプションが表示されるので、以下を修正します:&lt;br /&gt;
&lt;br /&gt;
* {{ic|mousewheel.acceleration.start}} を &#039;&#039;&#039;-1&#039;&#039;&#039; に設定。&lt;br /&gt;
* {{ic|mousewheel.acceleration.factor}} を適当な値に設定 (10 から 20 が普通使われる値です)。&lt;br /&gt;
&lt;br /&gt;
もしくは [http://smoothwheel.mozdev.org/ SmoothWheel add-on] をインストールすることでも変更できます。&lt;br /&gt;
&lt;br /&gt;
=== ピクセル単位で正確なトラックパッドのスクロール ===&lt;br /&gt;
&lt;br /&gt;
(Nautilus などの GTK3 アプリケーションで使われている) 正確なトラックパッドスクロールを有効にするには、Firefox を起動する前に {{ic|1=MOZ_USE_XINPUT2=1}} [[環境変数]]を設定してください。&lt;br /&gt;
&lt;br /&gt;
スクロールがぎくしゃくする場合、設定 &amp;gt; 詳細からスムーススクロールオプションを有効にしてみてください。&lt;br /&gt;
&lt;br /&gt;
=== ​タッチスクリーンジェスチャを有効にする ===&lt;br /&gt;
&lt;br /&gt;
 ​{{ic|dom.w3c_touch_events.enabled}} が 1 (&#039;&#039;enabled&#039;&#039;) または 2 (&#039;&#039;default, auto-detect&#039;&#039;) に設定されていることを確認します。&lt;br /&gt;
&lt;br /&gt;
​{{ic|1=MOZ_USE_XINPUT2 DEFAULT=1}} を {{ic|/etc/security/pam_env.conf}} に追加し、システムをログアウトするか再起動して変更を有効にします。&lt;br /&gt;
&lt;br /&gt;
​デバイスによっては、以下を実行してxinputのタッチスクリーンジェスチャを無効にする必要があるかもしれません:&lt;br /&gt;
 $ xsetwacom --set &#039;&#039;device&#039;&#039; Gesture off&lt;br /&gt;
&lt;br /&gt;
=== Firefox の URL バーのマウスクリックを Windows と同じにする ===&lt;br /&gt;
&lt;br /&gt;
{{ic|about:config}} で以下を設定してください:&lt;br /&gt;
{{bc|&lt;br /&gt;
browser.urlbar.clickSelectsAll true&lt;br /&gt;
browser.urlbar.doubleClickSelectsAll false&lt;br /&gt;
layout.word_select.stop_at_punctuation true&lt;br /&gt;
}}&lt;br /&gt;
URL バーのシングルクリックで全てを選択し、ダブルクリックで単語を選択、トリプルクリックで全てを選択するようになります。&lt;br /&gt;
&lt;br /&gt;
=== ​スムーズスクロール ===&lt;br /&gt;
&lt;br /&gt;
​Firefox でスムーズな物理ベースのスクロールを実現するには、 {{ic|general.smoothScroll.msdPhysics}} 設定を変更して、他の Web ブラウザと同様のより高速な動作をエミュレートします。​構成をより迅速に行うには、次の行を {{ic|~/.mozilla/firefox/&#039;&#039;&#039;your-profile&#039;&#039;&#039;/user.js}} に追加します。(再起動が必要):&lt;br /&gt;
&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.lines.durationMaxMS&amp;quot;, 125);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.lines.durationMinMS&amp;quot;, 125);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.mouseWheel.durationMaxMS&amp;quot;, 200);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.mouseWheel.durationMinMS&amp;quot;, 100);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.msdPhysics.enabled&amp;quot;, true);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.other.durationMaxMS&amp;quot;, 125);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.other.durationMinMS&amp;quot;, 125);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.pages.durationMaxMS&amp;quot;, 125);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.pages.durationMinMS&amp;quot;, 125);&lt;br /&gt;
&lt;br /&gt;
​また、マウスホイールのスクロール設定も、スムーズに反応するように変更する必要があります。:&lt;br /&gt;
&lt;br /&gt;
 user_pref(&amp;quot;mousewheel.min_line_scroll_amount&amp;quot;, 30);&lt;br /&gt;
 user_pref(&amp;quot;mousewheel.system_scroll_override_on_root_content.enabled&amp;quot;, true);&lt;br /&gt;
 user_pref(&amp;quot;mousewheel.system_scroll_override_on_root_content.horizontal.factor&amp;quot;, 175);&lt;br /&gt;
 user_pref(&amp;quot;mousewheel.system_scroll_override_on_root_content.vertical.factor&amp;quot;, 175);&lt;br /&gt;
 user_pref(&amp;quot;toolkit.scrollbox.horizontalScrollDistance&amp;quot;, 6);&lt;br /&gt;
 user_pref(&amp;quot;toolkit.scrollbox.verticalScrollDistance&amp;quot;, 2);&lt;br /&gt;
&lt;br /&gt;
​パフォーマンスで問題が発生した場合は、{{ic|mousewheel.min_line_scroll_amount}} を修正してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ​バックスペースの動作を設定する ===&lt;br /&gt;
&lt;br /&gt;
こちらを参照. [https://wiki.archlinux.jp/index.php/Firefox#.E3.83.90.E3.83.83.E3.82.AF.E3.82.B9.E3.83.9A.E3.83.BC.E3.82.B9.E3.81.8C_.27.E6.88.BB.E3.82.8B.27_.E3.83.9C.E3.82.BF.E3.83.B3.E3.81.A8.E3.81.97.E3.81.A6.E6.A9.9F.E8.83.BD.E3.81.97.E3.81.AA.E3.81.84 バックスペースが &#039;戻る&#039; ボタンとして機能しない]&lt;br /&gt;
&lt;br /&gt;
=== マウスの中ボタンのクリップボードペーストを無効にする ===&lt;br /&gt;
&lt;br /&gt;
こちらを参照. [https://wiki.archlinux.org/index.php/Firefox#Middle-click_behavior Middle-click_behavior]&lt;br /&gt;
&lt;br /&gt;
=== Emacs キーバインディング ===&lt;br /&gt;
​テキストフィールドで Emacs/Readline に似たキー割り当てを有効にするには、[https://wiki.archlinux.jp/index.php/GTK#Emacs_.E3.82.AD.E3.83.BC.E3.83.90.E3.82.A4.E3.83.B3.E3.83.89 Emacs キーバインド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== その他 ==&lt;br /&gt;
&lt;br /&gt;
その他のヒントと設定。&lt;br /&gt;
&lt;br /&gt;
=== 追加のメディアコーデックの有効化 ===&lt;br /&gt;
&lt;br /&gt;
設定する前に、デフォルトで有効になっていないことには理由があることを覚えておいて下さい。安定に問題があったり、メモリリークが発生することがあります。{{ic|about:config}} を開いて以下のオプションを確認してください:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 推奨値&lt;br /&gt;
! キー || 値 || 説明&lt;br /&gt;
|-&lt;br /&gt;
| media.mediasource.enabled || true (デフォルト) || [[wikipedia:Media_Source_Extensions|Media Source Extensions]] (MSE) の有効化&lt;br /&gt;
|-&lt;br /&gt;
| media.mediasource.mp4.enabled || true (デフォルト) || [[wikipedia:ja:MP4|MP4]] MSE の有効化&lt;br /&gt;
|-&lt;br /&gt;
| media.mediasource.webm.enabled || true (デフォルト) || [[wikipedia:ja:WebM|WebM]] MSE の有効化。&lt;br /&gt;
|-&lt;br /&gt;
| media.mediasource.ignore_codecs || true || H.264 MSE などを有効化 (キーは作成してください)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Widevine と Netflix/Amazon Video ====&lt;br /&gt;
&lt;br /&gt;
Widevine は Netflix や Amazon プライムビデオなどがビデオコンテンツの保護のために使用しているデジタル著作権管理ツールです。&lt;br /&gt;
&lt;br /&gt;
Widevine が使われているページを初めて表示すると Firefox はアドレスバーの下に DRM をインストールしてもよいか表示します。承認したらダウンロードバーが消えるまで待ってください。完了したら Netflix や Amazon プライムビデオなどから動画を視聴できるはずです。&lt;br /&gt;
{{Note|コンテンツ設定の &amp;quot;DRM コンテンツの再生&amp;quot; にチェックが入っていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
=== フルスクリーンの警告を無効化 ===&lt;br /&gt;
&lt;br /&gt;
フルスクリーンモードにしたときに表示される警告は {{ic|about:config}} で &amp;quot;full-screen-api.warning.timeout&amp;quot; を 0 に設定することで無効にできます。&lt;br /&gt;
&lt;br /&gt;
=== Firefox 検索バーの検索エンジンの順番を変更 ===&lt;br /&gt;
&lt;br /&gt;
検索エンジンが表示される順番を変えるには:&lt;br /&gt;
* 検索エンジンのドロップダウンリストを開いて &#039;&#039;Manage Search Engines...&#039;&#039; エントリをクリック。&lt;br /&gt;
* 移動したい検索エンジンを選択して &#039;&#039;Move Up&#039;&#039; や &#039;&#039;Move Down&#039;&#039; で移動します。ドラッグアンドドロップで移動することも可能です。&lt;br /&gt;
&lt;br /&gt;
=== Abiword や LibreOffice Writer で *.doc を自動的に開く方法 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Preferences &amp;gt; Applications&#039;&#039; を開いて &#039;&#039;Word Document&#039;&#039; (または &#039;&#039;Word 2007 Document&#039;&#039; の {{ic|*.docx}}) を検索してください。見つけたら、ドロップダウンリストをクリックして &#039;&#039;Use other...&#039;&#039; を選択してください。そして Abiword や Writer の実行可能ファイルのパスを指定してください ({{ic|/usr/bin/abiword}} や {{ic|/usr/bin/lowriter}})。&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;I&#039;m Feeling Lucky&amp;quot; モード ===&lt;br /&gt;
&lt;br /&gt;
検索エンジンによっては &amp;quot;feeling lucky&amp;quot; 機能が存在することがあります。例えば、Google には &amp;quot;I&#039;m Feeling Lucky&amp;quot; があり、DuckDuckGo には &amp;quot;I&#039;m Feeling Ducky&amp;quot; があります。&lt;br /&gt;
&lt;br /&gt;
機能を有効化するには:&lt;br /&gt;
# アドレスバーに {{ic|about:config}} と入力。&lt;br /&gt;
# {{ic|keyword.url}} という文字列を検索。&lt;br /&gt;
# 値を検索エンジンの URL に設定。&lt;br /&gt;
&lt;br /&gt;
Google の場合、次のように設定:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;https://www.google.com/search?btnI=I%27m+Feeling+Lucky&amp;amp;q=&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
DuckDuckGo の場合、次のように設定:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;https://duckduckgo.com/?q=\&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== DNSSEC で DNS をセキュア化 ===&lt;br /&gt;
&lt;br /&gt;
[[en2:DNSSEC|DNSSEC]] のサポートを有効にすることでブラウジングを安全にすることができます。&lt;br /&gt;
&lt;br /&gt;
=== マグネットプロトコルの関連付けの追加 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|about:config}} で {{ic|network.protocol-handler.expose.magnet}} を &#039;&#039;&#039;false&#039;&#039;&#039; に設定してください。&lt;br /&gt;
&lt;br /&gt;
次にマグネットリンクを開いたとき、{{ic|Launch Application}} ダイアログが表示されます。ダイアログから、使いたい torrent クライアントを選択してください。他のプロトコルも同じように設定できます。&lt;br /&gt;
&lt;br /&gt;
=== マグネットプロトコルの関連付けを kTorrent (KDE4) に追加 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/applications/kde4/ktorrent.desktop}} のユーザーコピーを {{ic|~/.local/share/applications/kde4/}} に作成して、{{ic|1=Mimetype=}} に以下を追加してください:&lt;br /&gt;
&lt;br /&gt;
 x-scheme-handler/magnet&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.config/mimeapps.list}} を修正して以下を追加:&lt;br /&gt;
&lt;br /&gt;
 x-scheme-handler/magnet=kde4-ktorrent.desktop&lt;br /&gt;
&lt;br /&gt;
[https://superuser.com/questions/44072/how-do-i-associate-magnet-links-with-ktorrent-in-firefox] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 突然終了してしまうのを防ぐ ===&lt;br /&gt;
&lt;br /&gt;
[https://addons.mozilla.org/firefox/addon/disable-ctrl-q-shortcut/ Disable Ctrl-Q Shortcut] 拡張をインストールすることでブラウザを不注意に閉じてしまうことを防止できます。&lt;br /&gt;
&lt;br /&gt;
もしくはウィンドウマネージャの設定ファイルにルールを追加する方法もあります。例えば [[openbox]] なら {{ic|~/.config/openbox/rc.xml}} ファイルの &#039;&#039;&amp;lt;keyboard&amp;gt;&#039;&#039; セクションに以下を追加してください:&lt;br /&gt;
  &amp;lt;keybind key=&amp;quot;C-q&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;action name=&amp;quot;Execute&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;execute&amp;gt;false&amp;lt;/execute&amp;gt;&lt;br /&gt;
    &amp;lt;/action&amp;gt;&lt;br /&gt;
  &amp;lt;/keybind&amp;gt;&lt;br /&gt;
{{Note|上記の設定はグラフィックサーバーで動作する全てのアプリケーションに適用されます。}}&lt;br /&gt;
&lt;br /&gt;
=== 最新版でプラグインが動作しない ===&lt;br /&gt;
&lt;br /&gt;
Arch はブリーディングエッジなので、最新の Firefox では動作しないプラグインと互換性の問題が起こることがあります (例: [http://5digits.org/pentadactyl/index Pentadactyl])。可能であれば、ナイトリー/ベータ版をインストールするか、[[パッケージのダウングレード]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
[https://addons.mozilla.org/firefox/addon/checkcompatibility/ Disable Add-on Compatibility Checks] プラグインは新しいバージョンでもちゃんと動くのにプラグインが無効化される問題を解決します。&lt;br /&gt;
&lt;br /&gt;
=== スクロールがギクシャクしている ===&lt;br /&gt;
&lt;br /&gt;
Firefox でのスクロールが&amp;quot;ガタガタ&amp;quot;あるいは&amp;quot;ムラがある&amp;quot;と感じられることがあります。[http://forums.mozillazine.org/viewtopic.php?f=8&amp;amp;t=2749475/ MozillaZine] が Gentoo でスクロールを修正する設定を投稿していますが、Arch Linux でも同じように直ることが報告されています:&lt;br /&gt;
&lt;br /&gt;
# {{ic|mousewheel.min_line_scroll_amount}} を 40 に設定&lt;br /&gt;
# {{ic|general.smoothScroll}} と {{ic|general.smoothScroll.pages}} を &#039;&#039;false&#039;&#039; に設定&lt;br /&gt;
# {{ic|image.mem.min_discard_timeout_ms}} を 2100000000 のように大きな値に設定、ただし 2140000000 を超えてはならない。この値よりも上の値に設定してしまうと Firefox は次のエラーを吐きます: &amp;quot;The text you entered is not a number&amp;quot;。&lt;br /&gt;
# {{ic|image.mem.max_decoded_image_kb}} を最低でも 512K に設定&lt;br /&gt;
&lt;br /&gt;
これでスクロールがスムーズになるはずです。&lt;br /&gt;
&lt;br /&gt;
=== nspawn コンテナの中で Firefox を実行 ===&lt;br /&gt;
&lt;br /&gt;
PID 1 で実行するには:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn --setenv=DISPLAY=:0 \&lt;br /&gt;
               --setenv=XAUTHORITY=~/.Xauthority \&lt;br /&gt;
               --bind-ro=$HOME/.Xauthority:/root/.Xauthority \&lt;br /&gt;
               --bind=/tmp/.X11-unix \&lt;br /&gt;
               -D ~/containers/firefox \&lt;br /&gt;
               firefox&lt;br /&gt;
&lt;br /&gt;
もしくは [[systemd-networkd]] を使って systemd でネットワークを設定したコンテナを起動する場合:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn --bind-ro=$HOME/.Xauthority:/root/.Xauthority \&lt;br /&gt;
               --bind=/tmp/.X11-unix \&lt;br /&gt;
               -D ~/containers/firefox \&lt;br /&gt;
               --network-veth -b&lt;br /&gt;
&lt;br /&gt;
コンテナを起動したら、以下のように Xorg ライブラリを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # systemd-run -M firefox --setenv=DISPLAY=:0 firefox&lt;br /&gt;
&lt;br /&gt;
=== 検索がマッチした箇所をスクロールバーに表示 ===&lt;br /&gt;
 &lt;br /&gt;
[https://addons.mozilla.org/firefox/addon/findbar-tweak/ FindBar Tweak] 拡張をインストールすることで表示できます。&lt;br /&gt;
&lt;br /&gt;
=== WebRTC オーディオのポストプロセス処理を無効化 ===&lt;br /&gt;
&lt;br /&gt;
PulseAudio の [[PulseAudio/トラブルシューティング#エコー除去・ノイズキャンセルを有効にする|module-echo-cancel]] を使用している場合、Firefox がポストプロセス処理を音声にかけないように設定すると良いでしょう。&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ オーディオのポストプロセス処理を無効化するには、以下のパラメータを設定&lt;br /&gt;
! キー || 値 || 説明&lt;br /&gt;
|-&lt;br /&gt;
| media.getusermedia.aec_enabled || false || AEC = 音響エコー除去 (Acoustic Echo Cancellation)&lt;br /&gt;
|-&lt;br /&gt;
| media.getusermedia.agc_enabled || false || AGC = 自動ゲインコントロール (Automatic Gain Control)&lt;br /&gt;
|-&lt;br /&gt;
| media.getusermedia.noise_enabled || false || ノイズ除去。Firefox のノイズ除去を無効にすると音がミッキーマウスのようになることがあります。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ​Fido U2F 認証 ===&lt;br /&gt;
&lt;br /&gt;
​Firefox は Fido [[U2F]] 認証プロトコルをサポートしています。​必要な udev ルール用に {{pkg|libfido2}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== ALSA に戻す ===&lt;br /&gt;
&lt;br /&gt;
​Arch が Firefox を &#039;&#039;ac_add_options --enable-alsa&#039;&#039; でビルドし続ける限り、Firefox はシステム上で特別な設定なしに、そして (ただし、システムでパルスを使用していて、 Firefox がパルスを使用しないようにしたい場合はこの限りではない。) パルスなしに、正常に動作します。​以前は ioctl の syscall を許可しなければならず、デフォルトでは Firefox のサンドボックスでブロックされ、 {{ic|about:config}} のALSA の設定 {{ic|security.sandbox.content.syscall_whitelist}} で、正しい ioctl の syscall 番号にする必要がありました。これは x 86-64 では &#039;&#039;16&#039;&#039; x86-32 では &#039;&#039;54&#039;&#039; ですが、今ではそうではありません。​詳細については、こちらを参照してください:&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxquestions.org/questions/slackware-14/firefox-in-current-alsa-sound-4175622116]&lt;br /&gt;
[https://codelab.wordpress.com/2017/12/11/firefox-drops-alsa-apulse-to-the-rescue]&lt;br /&gt;
&lt;br /&gt;
=== WebGL を強制的に使用可能にする ===&lt;br /&gt;
&lt;br /&gt;
一部のプラットフォームでは、ユーザが WebGL を使用したい場合でも、 WebGL が無効になります [https://wiki.mozilla.org/Blocklisting/Blocked_Graphics_Drivers] ​WebGL を強制的に有効にするには、{{ic|webgl.force-enabled}} を {{ic|true}} に設定し、WebGL アンチエイリアシングも強制的に有効にするには、 {{ic|webgl.msaa-force}} を {{ic|true}} に設定します。&lt;br /&gt;
&lt;br /&gt;
次のようなエラーが表示された場合:&lt;br /&gt;
{{bc|libGL error: MESA-LOADER: failed to retrieve device information&lt;br /&gt;
libGL error: image driver extension not found&lt;br /&gt;
libGL error: failed to load driver: i915&lt;br /&gt;
libGL error: MESA-LOADER: failed to retrieve device information&lt;br /&gt;
...}}&lt;br /&gt;
​Firefox のバグ [https://bugzilla.mozilla.org/show_bug.cgi?id=1480755 1480755] で説明されている解決策を試してみてください:&lt;br /&gt;
&lt;br /&gt;
参照. {{ic|security.sandbox.content.read_path_whitelist}} to {{ic|/sys/}}&lt;br /&gt;
&lt;br /&gt;
=== Recommended by Pocket を有効にする ===&lt;br /&gt;
&lt;br /&gt;
​&amp;quot;Recommended by Pocket&amp;quot; (&#039;&#039;設定 &amp;gt; ホーム &amp;gt; Firefox Home コンテンツ&#039;&#039; - &amp;quot;トップサイト&amp;quot; と &amp;quot;ハイライト&amp;quot; の間に) が表示されない場合は、{{ic|browser.newtabpage.activity-stream.feeds.&#039;&#039;&#039;section&#039;&#039;&#039;.topstories}} および {{ic|browser.newtabpage.activity-stream.feeds.&#039;&#039;&#039;system&#039;&#039;&#039;.topstories}} から {{ic|true}}。​このオプションは 設定 には表示されませんが、新しく開いたタブ/ウィンドウ ({{ic|Firefox Home}} に設定した場合) に Pocket recommendations が表示されるようになりました。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://kb.mozillazine.org/Knowledge_Base MozillaZine Wiki]&lt;br /&gt;
* [http://kb.mozillazine.org/About:config_entries about:config Entries Explained]&lt;br /&gt;
* [http://linuxtidbits.wordpress.com/2009/08/01/better-fox-cat-and-weasel/ Firefox touch-ups that might be desired]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Firefox/%E8%A8%AD%E5%AE%9A&amp;diff=33188</id>
		<title>Firefox/設定</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Firefox/%E8%A8%AD%E5%AE%9A&amp;diff=33188"/>
		<updated>2023-08-05T07:57:11Z</updated>

		<summary type="html">&lt;p&gt;Hikali: Add space: {{ic|id-u}} -&amp;gt; {{ic|id -u}}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ウェブブラウザ]]&lt;br /&gt;
[[en:Firefox/Tweaks]]&lt;br /&gt;
[[tr:Firefox İpuçları]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|Firefox}}&lt;br /&gt;
{{Related|ブラウザプラグイン}}&lt;br /&gt;
{{Related|Firefox Ramdisk}}&lt;br /&gt;
{{Related|Firefox プライバシー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
このページでは Firefox の高度な設定オプションとパフォーマンスを上げる設定を説明します。&lt;br /&gt;
&lt;br /&gt;
== パフォーマンス ==&lt;br /&gt;
&lt;br /&gt;
Firefox のパフォーマンスを向上させる方法には、Firefox の実行中に入力できるパラメータ、開発者によって決められている設定の変更、もしくは外部プログラムやスクリプトによる高度な方法が存在します。&lt;br /&gt;
&lt;br /&gt;
{{Note|かならず最新版の Firefox を使って下さい。}}&lt;br /&gt;
&lt;br /&gt;
=== Firefox の高度なオプション ===&lt;br /&gt;
このセクションではパフォーマンスに関する Firefox の高度なオプションについて説明しています。詳しい情報は [http://kb.mozillazine.org/Category:Tweaking_preferences Mozillazine フォーラムの投稿] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
==== OpenGL Off-Main-Thread Compositing (OMTC) の有効化 ====&lt;br /&gt;
&lt;br /&gt;
{{Warning|特定のハードウェアで OpenGL OMTC が無効になる場合、おそらく安定に問題があったり、システムリソースの消費が激しかったり、ドライバーにバグが存在するなどの可能性があります。強制的に有効化するときは自己責任で行って下さい。}}&lt;br /&gt;
{{Note|Firefox バージョン 40 から基本的なソフトウェア OMTC はデフォルトで有効になります。}}&lt;br /&gt;
&lt;br /&gt;
OpenGL OMTC を有効にするには {{ic|about:config}} を開いて以下を設定します:&lt;br /&gt;
* {{ic|layers.acceleration.force-enabled true}}&lt;br /&gt;
&lt;br /&gt;
Firefox を再起動することで変更が適用されます。&lt;br /&gt;
&lt;br /&gt;
OpenGL OMTC が有効になっているかどうか確認するには、{{ic|about:support}} を開いて &amp;quot;Graphics&amp;quot; セクションの &amp;quot;GPU Accelerated Windows&amp;quot; を見ます。&amp;quot;0/1 Basic (OMTC)&amp;quot; (または 0/2) と表示されている場合、OpenGL OMTC は無効になっています。&amp;quot;1/1 OpenGL (OMTC)&amp;quot; (または 1/2 や 2/2) となっている場合、有効です。&lt;br /&gt;
&lt;br /&gt;
上記の設定で GPU アクセラレーションが有効にならない場合、環境変数を設定してみてください: {{ic|1=export MOZ_USE_OMTC=1}}。設定してから Firefox を起動します [http://featherweightmusings.blogspot.se/2013/11/no-more-main-thread-opengl-in-firefox.html]。&lt;br /&gt;
&lt;br /&gt;
Firefox の OMTC に関する詳細は次のページにあります: https://wiki.mozilla.org/Platform/GFX/OffMainThreadCompositing&lt;br /&gt;
&lt;br /&gt;
==== WebRender コンポジタの有効化 ====&lt;br /&gt;
&lt;br /&gt;
WebRender は、Rust で書かれた GPU ベースの 2D レンダリングエンジンです。Wikipedia:Gecko (software)|Gecko]] コンポジタの代わりに、[[Wikipedia:Servo (software)|Servo]] ブラウザエンジンプロジェクトを動かしているコンポジタです。これはサポートされたハードウェア上でのパフォーマンスを向上させ、[[#OpenGL Off-Main-Thread Compositing (OMTC) の有効化|OpenGL compositor]] が使用されているときのいくつかの黒い視覚的な不具合を修正します。現在、いくつかの既知のバグがあります。詳しくは [[MozillaWiki:Platform/GFX/Quantum Render]] をご覧ください。&lt;br /&gt;
&lt;br /&gt;
WebRender はすべての wayland セッションでデフォルトで有効になっています (Firefox 89 の時点) [https://bugzilla.mozilla.org/show_bug.cgi?id=1704489#c6]。WebRender はデフォルトで [[MozillaWiki:Platform/GFX/WebRender Where|non 4k+ displays]] に対しても有効です。いくつかのエッジケースでは、[[MozillaWiki:Platform/GFX/WebRender Where#Linux]] で詳述されているように、資格を変更することができます。デフォルトの  WebRender の有効化はグラフィックカードやドライバのバージョンに依存する可能性もあります。&lt;br /&gt;
&lt;br /&gt;
以下の2つの方法のいずれかを使って強制的に有効にすることができます。&lt;br /&gt;
# {{ic|about:config}} に行き {{ic|gfx.webrender.all}} を {{ic|true}} に設定、 変更を有効にするために、Firefox を再起動します。&lt;br /&gt;
# by setting the {{ic|MOZ_WEBRENDER}}. [環境変数]] を {{ic|1}} に設定してから、Firefox を起動します。&lt;br /&gt;
&lt;br /&gt;
WebRender が有効かどうかを確認するには、{{ic|about:support}} に行き、 &#039;&#039;グラフィックス&#039;&#039; セクションの &#039;&#039;サブセクション&#039;&#039; で、&#039;&#039;WEBRENDER&#039;&#039; を探します。もし、&amp;quot;available by user: Force enabled by pref&amp;quot; と報告されていれば、有効になっています。もし、&#039;&#039;only&#039;&#039;であれば、&amp;quot;opt-in by default. &amp;quot;と表示されます。WebRender is an opt-in feature&amp;quot; とだけ報告された場合、無効であることを意味します。&lt;br /&gt;
&lt;br /&gt;
{{Note|特定のハードウェアで  WebRender が無効になっている場合、安定性の問題、システムリソースの大量消費、ドライバのバグ、または多くの異なる変数が原因である可能性があり、高速化する代わりに遅くなることがあります。よくわからない場合は、自己責任で強制的に有効化することをお勧めします。}}&lt;br /&gt;
&lt;br /&gt;
==== レガシー OpenGL コンポジタを使用可能にする ====&lt;br /&gt;
&lt;br /&gt;
ハードウェアの &#039;&#039;WebRender&#039;&#039; またはソフトウェアの &#039;&#039;Basic&#039;&#039; コンポジタがデフォルトで使用されます。レガシー OpenGL コンポジタが動作しているかどうかを確認するには {{ic|about:support}} に行き、&amp;quot;Graphics&amp;quot; セクションで &amp;quot;Compositing&amp;quot; を探してください：もし &amp;quot;OpenGL&amp;quot; と報告されれば有効、さもなければ &amp;quot;WebRender&amp;quot; または &amp;quot;Basic&amp;quot; と報告されます。&lt;br /&gt;
&lt;br /&gt;
OpenGL の合成は {{ic|about:config}} で {{ic|layers.acceleration.force-enabled}} を {{ic|true}} に切り替えることで強制的に有効にすることが可能です。変更を有効にするには、Firefox を再起動します。注意 WebRender は Firefox の OpenGL コンポジタを置き換えるものであり、OpenGL コンポジタよりも推奨されます。&lt;br /&gt;
&lt;br /&gt;
{{note|特定のハードウェアで OpenGL 構成が無効になっている場合は、安定性の問題、高いシステムリソースの消費、ドライバーのバグ、またはさまざまな変数が原因である可能性があります。そのため、速度を上げる代わりに速度を落とす可能性があります。自分の責任で強制的に有効化してください。よくわからない場合はベンチマークを行ってください。}}&lt;br /&gt;
&lt;br /&gt;
==== Accelerated Azure Canvas を有効にする ====&lt;br /&gt;
{{ic|about:config}} を開いて、右クリックして新しい真偽値を作ってください。名前を {{ic|gfx.canvas.azure.accelerated}} にして true に設定してください。&lt;br /&gt;
&lt;br /&gt;
Firefox を再起動して {{ic|about:support}} の AzureCanvasAccelerated が 1 になっていれば有効です。&lt;br /&gt;
&lt;br /&gt;
==== ネットワーク設定 ====&lt;br /&gt;
&lt;br /&gt;
高度なネットワーク設定は {{ic|about:config}} ページから変更できます (&#039;&#039;network&#039;&#039; を検索してみてください)。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 推奨値&lt;br /&gt;
! 設定名 || 値 || 説明&lt;br /&gt;
|-&lt;br /&gt;
| network.http.pipelining || true || 通常接続で [http://www-archive.mozilla.org/projects/netlib/http/pipelining-faq.html pipelining] を有効にします。&lt;br /&gt;
|-&lt;br /&gt;
| network.http.pipelining.ssl || true || SSL 接続で HTTP pipelining を有効にします。&lt;br /&gt;
|-&lt;br /&gt;
| network.http.proxy.pipelining || true || プロキシ接続で pipelining を有効にします。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== アンチフィッシングの無効化 ====&lt;br /&gt;
{{Note|プロファイルフォルダのファイル削除には危険が伴うため、先にバックアップをすることを推奨します。}}&lt;br /&gt;
&lt;br /&gt;
Firefox のアンチフィッシング機能は Firefox の起動や終了を遅くすることがあります。問題は Firefox が [[Sqlite]] データベースを使っており、何度も使用しているうちにデータベースが巨大に成長することで読み書きが遅くなるのが原因です。どのサイトが怪しいのか Firefox に知らせてもらう必要がないと感じたのならば、機能を無効にすることが可能です:&lt;br /&gt;
&lt;br /&gt;
* 設定のセキュリティタブで次のオプションをオフにしてください: &#039;&#039;&amp;quot;攻撃サイトとして報告されているサイトをブロックする&amp;quot;&#039;&#039; と &#039;&#039;&amp;quot;偽装サイトとして報告されているサイトをブロックする&amp;quot;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
* プロファイルフォルダ ({{ic|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/}}) に存在する {{ic|urlclassifier}} から始まるファイルを全て削除してください:&lt;br /&gt;
 $ rm -i ~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/urlclassifier*&lt;br /&gt;
&lt;br /&gt;
:上記のファイルは Firefox によって再作成されることがありますが、初期サイズから大きく成長することはなくなります。&lt;br /&gt;
&lt;br /&gt;
==== urlclassifier3.sqlite が作成されないようにする ====&lt;br /&gt;
上述のように {{ic|urlclassifier*}} ファイルを全て削除しても、一定期間後に {{ic|urlclassifier3.sqlite}} のサイズがまた増加することがあります。将来的にサイズが増加しないようにするシンプルな解決法:&lt;br /&gt;
&lt;br /&gt;
 $ cd ~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;&lt;br /&gt;
 $ echo &amp;quot;&amp;quot; &amp;gt; urlclassifier3.sqlite&lt;br /&gt;
 $ chmod 400 urlclassifier3.sqlite&lt;br /&gt;
&lt;br /&gt;
ファイルを空にして読み取り専用にすることで Firefox から書き込めないようになります。&lt;br /&gt;
&lt;br /&gt;
==== OCSP 検証の無効化 ====&lt;br /&gt;
OCSP バリデーションは、Firefox が新しいサーバーに接続 (HTTPS) するたびに [http://news.netcraft.com/archives/2013/04/16/certificate-revocation-and-the-performance-of-ocsp.html 遅延を発生させる] ことがあります。特に、HTTPS を使用するページにウェブガジェットが含まれていた場合、一つの URL で複数の接続が発生することになり、事態を悪化させます。&lt;br /&gt;
&lt;br /&gt;
* 設定 -&amp;gt; 詳細 -&amp;gt; 証明書にある次のオプションをオフにしてください: &#039;&#039;&amp;quot;OSCP レスポンダに問い合わせてデジタル証明書の有効性をリアルタイムに確認する&amp;quot;&#039;&#039;。&lt;br /&gt;
&lt;br /&gt;
{{Warning|OCSP を無効化した場合、中間者攻撃から無防備になります。Wi-Fi や VPN などの攻撃されるおそれがある接続を使用する場合は、OSCP はオンのままにしておくことが強く推奨されます。}}&lt;br /&gt;
&lt;br /&gt;
==== ディスクキャッシュの無効化 ====&lt;br /&gt;
ロードされたオブジェクト (html ページ、jpeg 画像、css スタイルシート、gif バナー) はすべて Firefox キャッシュに保存され、同じオブジェクトを今度使用するときにロードすることで、もう一度サーバーからダウンロードする必要を省きます。しかしながら、実際に再利用されるオブジェクトはごくわずかに限られています (通常は 30% ほど)。これはオブジェクトの有効期間が短すぎたり、アップデートがあったり、もしくは、単純にユーザーが行う行動 (訪問済みのページではなく新しいページをロードするなど) が原因であったりします。Firefox のキャッシュはメモリキャッシュとディスクキャッシュに分けられており、ディスクキャッシュを使用している場合、オブジェクトがロードされる度にディスクに書き込みが行われ、また、同時に古いオブジェクトの削除もされるために、頻繁にディスクの書き込みが発生します。&lt;br /&gt;
&lt;br /&gt;
* 設定 -&amp;gt; 詳細 -&amp;gt; ネットワーク -&amp;gt; キャッシュされた Web ページから &#039;&#039;&amp;quot;キャッシュサイズを制限する&amp;quot;&#039;&#039; でゼロを指定してください。&lt;br /&gt;
&lt;br /&gt;
==== ディスクキャッシュを RAM に移動 ====&lt;br /&gt;
&lt;br /&gt;
別の方法として、&amp;quot;ディスク&amp;quot; キャッシュを RAM ディスクに移動して、上記の二つの間の解決策を得ることができます。キャッシュは、Firefox が実行されてから実行されるまでの間は保持されますが (Firefox のクラッシュリカバリを含む)、再起動時には破棄されます (OS クラッシュを含む)。&lt;br /&gt;
&lt;br /&gt;
これを行うには、 {{Ic|about:config}} に移動し、 {{Ic|browser.cache.disk.parent_directory}} を {{ic|/run/user/&#039;&#039;UID&#039;&#039;/firefox}} に設定します。 {{ic|&#039;&#039;UID&#039;&#039;}} は、 {{ic|id -u}} を実行して取得できるユーザのIDです。&lt;br /&gt;
&lt;br /&gt;
{{Ic|about:cache}} を開いて、新しいディスクキャッシュの場所を確認します。&lt;br /&gt;
&lt;br /&gt;
==== セッションを保存する間隔を長くする ====&lt;br /&gt;
Firefox のセッションは15秒ごとに現在の状態 (開かれている url、cookie、履歴とブックマーク) を自動的に保存しています。これはユーザーが必要とするところよりも少し頻繁すぎる嫌いがあり、頻繁にディスクアクセスを発生させています。&lt;br /&gt;
&lt;br /&gt;
セッションの保存間隔の設定は {{ic|about:config}} ページから変更できます (&#039;&#039;sessionstore&#039;&#039; を検索してください)。&lt;br /&gt;
&lt;br /&gt;
* browser.sessionstore.interval 300000&lt;br /&gt;
&lt;br /&gt;
セッションの保存を無効化したい場合、以下の設定を true から false に変更してください:&lt;br /&gt;
	&lt;br /&gt;
* browser.sessionstore.resume_from_crash false&lt;br /&gt;
&lt;br /&gt;
==== 即座にページをレンダリング ====&lt;br /&gt;
Mozilla アプリケーションはウェブページを漸増的にレンダリングします。ページ全体がダウンロードされる前に、ページの一部だけを表示するのです。基本的にウェブページの最初の部分には表示に関係する情報はあまり存在しないため、Mozilla アプリケーションはページをレンダリングする前に少しの間だけ待機します。以下の設定はインターバルを制御します。接続速度が遅い場合 (ダイアルアップ接続など)、設定を変更するとウェブページのロード時間が長くなることがあるので注意してください。&lt;br /&gt;
&lt;br /&gt;
* nglayout.initialpaint.delay の値を 0 に変更。&lt;br /&gt;
&lt;br /&gt;
上記の設定は {{ic|about:config}} ページで行うことができます。&lt;br /&gt;
&lt;br /&gt;
=== その他の設定 ===&lt;br /&gt;
このセクションでは Firefox のパフォーマンスを向上させるその他の設定を説明しています。&lt;br /&gt;
&lt;br /&gt;
==== UPX で Firefox バイナリを圧縮して起動時間を短縮 ====&lt;br /&gt;
[http://upx.sourceforge.net/ UPX] は高速な伸長をサポートしている実行可能ファイル圧縮ツールであり、メモリのオーバーヘッドを減らします。[[公式リポジトリ]]の {{Pkg|upx}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
{{ic|upx}} を使用して Firefox の実行可能ファイルを圧縮する前に、バイナリのバックアップを作成してください:&lt;br /&gt;
 # cp /usr/lib/firefox/firefox /usr/lib/firefox/firefox.backup&lt;br /&gt;
&lt;br /&gt;
最後に、{{ic|upx}} を実行して、最大圧縮レベルを適用してください:&lt;br /&gt;
 # upx --best /usr/lib/firefox/firefox&lt;br /&gt;
&lt;br /&gt;
==== リファラーヘッダの制御 ====&lt;br /&gt;
Firefox バージョン 28 では HTTP リファラーヘッダの送信を制御することができます。GUI の設定からはオプションを書けられませんが、{{ic|about:config}} で変更することが可能です。関連するキーは4つ存在します [https://security.stackexchange.com/a/80194]。推奨される設定を以下の行で説明します。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 推奨値&lt;br /&gt;
! キー || 推奨 || [https://ip-check.info ip-check.info] || デフォルト || 説明&lt;br /&gt;
|-&lt;br /&gt;
| network.http.sendRefererHeader || 1 || 1 || 2 || リンクをクリックした場合にのみ送信 (0 は完全に送信しない、1 はリンクのクリック時のみ、2 は常に送信)。&lt;br /&gt;
|-&lt;br /&gt;
| network.http.referer.XOriginPolicy || 1 || 1 || 0 || ベースドメインが一致する場合にのみ送信 (0 は常に送信、2 はホストが一致する場合のみ)。&lt;br /&gt;
|-&lt;br /&gt;
| network.http.referer.spoofSource || true || false || false || リンク先の URI を送信。&lt;br /&gt;
|-&lt;br /&gt;
| network.http.referer.trimmingPolicy || 2 || 0 || 0 || スキーム・ホスト・ポートを送信しない (0 は全て送信しない、1 はスキームやホストのポート・パスを送信しない)。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== プロファイルの SQLite データベースのデフラグ ====&lt;br /&gt;
{{Warning|以下の設定はデータベースを破損させてセッションが正しく保存されなくなる可能性があります。}}&lt;br /&gt;
&lt;br /&gt;
Firefox 3.0 ではブックマーク・履歴・パスワードは SQLite データベースに保存されます。SQLite データベースは使っていくうちに断片化して空き領域があちこちにできます。Firefox はデータベースを確認して最適化することはしないので、しばらくすると断片化は性能に影響してきます。データベースのデフラグを行なって使われていない領域を削除することで起動時間を短縮したりブックマークや履歴などの操作を高速化することが可能です。&lt;br /&gt;
&lt;br /&gt;
Firefox を実行していないときに {{Pkg|profile-cleaner}} を使うことでデフラグを行えます。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ デフラグ前後のサイズの比較&lt;br /&gt;
! SQLite データベース || デフラグ前のサイズ || デフラグ後のサイズ || % 変化&lt;br /&gt;
|- &lt;br /&gt;
|urlclassifier3.sqlite|| 37 M || 30 M || 19 %&lt;br /&gt;
|-&lt;br /&gt;
|places.sqlite || 16 M || 2.4 M || 85 %&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Firefox の最近のバージョンでは、ページのロードが遅くなったりプロファイルの破損の原因となる places データベースをデフラグ・最適化するツールが用意されています。ツールを使うには {{ic|about:support}} ページを開いてください。{{ic|Places データベース}} の下にある {{ic|完全性を検証}} ボタンを押してください。&lt;br /&gt;
&lt;br /&gt;
==== tmpfs でプロファイルを RAM にキャッシュ ====&lt;br /&gt;
システムにメモリが余っている場合、{{ic|tmpfs}} を使って[[Firefox Ramdisk|プロファイルディレクトリ全体をキャッシュ]]することができます。そうすると Firefox のレスポンスが高まります。&lt;br /&gt;
&lt;br /&gt;
==== スポンサーコンテンツやタイルをオフにする ====&lt;br /&gt;
{{ic|about:config}} で {{ic|browser.newtabpage.directory.source}} と {{ic|browser.newtabpage.directory.ping}} の値を空にしてください。また、新しいタブページのツールからタイル機能を無効にすると良いでしょう。[[Wireshark]] セッションで通信を確認できます。&lt;br /&gt;
&lt;br /&gt;
==== Electrolysis の有効化 ====&lt;br /&gt;
Firefox 48 (45 ESR) 以上では Electrolysis (マルチプロセス) を有効化することでパフォーマンスとセキュリティを高めることができます。{{ic|about:config}} で {{ic|browser.tabs.remote.autostart}} を &#039;&#039;true&#039;&#039; に設定してください。Electrolysis を強制的に有効化することもできますが [https://wiki.mozilla.org/Electrolysis#Force_Enable]、問題が起こる可能性があるため基本的には推奨されません。&lt;br /&gt;
&lt;br /&gt;
Electrolysis が有効になっているか確認するには {{ic|about:support}} の「アプリケーション基本情報」セクションにある「マルチプロセスウィンドウ」を確認してください。&amp;quot;0/1 (無効)&amp;quot; となっている場合 Electrolysis は無効です。&amp;quot;1/1 (ユーザー設定により有効)&amp;quot; となっていれば有効です。&#039;&#039;*/*&#039;&#039; の数字は Firefox の開かれているウィンドウの数を示します。例えば 0/2 は2つ開かれている Firefox のウィンドウのどちらも Electrolysis を使用しておらず、2/2 は両方のウィンドウで有効になっていることを意味します。&lt;br /&gt;
&lt;br /&gt;
==== HTTP キャッシュの有効化 ====&lt;br /&gt;
{{ic|about:config}} で {{ic|browser.cache.use_new_backend}} を 0 から 1 に設定してください。&lt;br /&gt;
&lt;br /&gt;
==== Pocket の無効化 ====&lt;br /&gt;
Pocket サービスを使用しない場合、{{ic|about:config}} で {{ic|extensions.pocket.enabled}} を &#039;&#039;false&#039;&#039; に設定することで無効にできます。&lt;br /&gt;
{{Note|45ESR の場合、キーは {{ic|browser.pocket...}} です。}}&lt;br /&gt;
&lt;br /&gt;
== 外観 ==&lt;br /&gt;
=== フォント ===&lt;br /&gt;
次の記事を参照してください: [[フォント設定]]&lt;br /&gt;
&lt;br /&gt;
==== DPI の値の設定 ====&lt;br /&gt;
システムの DPI が 96 を下回っている場合、設定を変更することで Firefox のフォントの見た目を良くすることができます。デフォルトでは Firefox は DPI の値は 96 を使用し、96 を上回っている場合だけシステム値を使います。値に関係なくシステム値を使うようにするには、アドレスバーに {{ic|about:config}} と入力して {{ic|layout.css.dpi}} を &#039;&#039;&#039;0&#039;&#039;&#039; に設定してください。&lt;br /&gt;
&lt;br /&gt;
上記の設定は Firefox のユーザーインターフェースの DPI 設定にだけ影響を与えるので注意してください。ウェブページのコンテンツの DPI 値は 96 のままです。変更するには {{ic|layout.css.devPixelsPerPx}} をシステムの DPI を 96 で割った値に設定してください。例えばシステムの DPI が 144 の場合、設定する値は 144/96 = 1.5 です。{{ic|layout.css.devPixelsPerPx}} を &#039;&#039;&#039;1.5&#039;&#039;&#039; にするとウェブページのコンテンツの DPI が 144 になります。&lt;br /&gt;
&lt;br /&gt;
高解像度ディスプレイについての情報は [[HiDPI#Firefox]] を参照してください。DPI の計算は [https://www.sven.de/dpi/] を見てください。&lt;br /&gt;
&lt;br /&gt;
==== Microsoft Windows のデフォルトフォント設定 ====&lt;br /&gt;
以下は Firefox を Microsoft Windows にインストールした時のデフォルトフォント設定です。多くのウェブサイトは Microsoft フォントを使っています。&lt;br /&gt;
{{bc|&lt;br /&gt;
Proportional: Serif Size (pixels): 16&lt;br /&gt;
Serif: Times New Roman&lt;br /&gt;
Sans-serif: Arial&lt;br /&gt;
Monospace: Courier New Size (pixels): 13&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== 一般的なユーザーインターフェイスの CSS 設定 ===&lt;br /&gt;
Firefox のユーザーインターフェイスは {{ic|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/}} 内の {{ic|userChrome.css}} や {{ic|userContent.css}} ファイルを編集することで変更することができます (&#039;&#039;profile_dir&#039;&#039; は &#039;&#039;hash.name&#039;&#039; という形式を取っており、&#039;&#039;hash&#039;&#039; は8文字のランダムな文字列です。プロファイルの &#039;&#039;name&#039;&#039; は通常 &#039;&#039;default&#039;&#039; となっています)。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|chrome/}} フォルダと {{ic|userChrome.css}}/{{ic|userContent.css}} ファイルは存在している必要がないので、作る必要があるかもしれません。}}&lt;br /&gt;
&lt;br /&gt;
このセクションでは (ウェブページではなく) Firefox のユーザーインターフェイスを変更する {{ic|userChrome.css}} ファイルについてだけ扱います。&lt;br /&gt;
&lt;br /&gt;
==== フォントの変更 ====&lt;br /&gt;
この設定はグローバルな GTK+ のフォント設定を上書きします。ウェブページには影響を与えません、ユーザーインターフェイスのフォントだけが変更されます:&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&lt;br /&gt;
* {&lt;br /&gt;
    font-family: &amp;quot;FONT_NAME&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== ボタンアイコンの隠匿 ====&lt;br /&gt;
テキストボタンを有効化:&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&lt;br /&gt;
.button-box .button-icon {&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 様々なタブボタンの隠匿 ====&lt;br /&gt;
以下の設定はタブバーの縁で表示される矢印、全てのタブのドロップダウンリストを切り替えるボタン、新しいタブを作成するプラス記号を非表示にします:&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* Tab bar */&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-strip *[class^=&amp;quot;scrollbutton&amp;quot;] {&lt;br /&gt;
    /* Hide tab scroll buttons */&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-strip *[class^=&amp;quot;tabs-alltabs&amp;quot;] {&lt;br /&gt;
    /* Hide tab drop-down list */&lt;br /&gt;
    display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-strip *[class^=&amp;quot;tabs-newtab-button&amp;quot;] {&lt;br /&gt;
    /* Hide new-tab button */&lt;br /&gt;
    display: none;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 水平タブ ====&lt;br /&gt;
タブバーをブラウザウィンドウの側面に横に並べて表示するには:&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&lt;br /&gt;
/* Display the tabbar on the left */&lt;br /&gt;
#content &amp;gt; tabbox {&lt;br /&gt;
    -moz-box-orient: horizontal;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-strip {&lt;br /&gt;
    -moz-box-orient: vertical;&lt;br /&gt;
    /*&lt;br /&gt;
     * You can set this to -moz-scrollbars-vertical instead,&lt;br /&gt;
     * but then the scrollbar will *always* be visible.  this way&lt;br /&gt;
     * there is never a scrollbar, so it behaves like the tab bar&lt;br /&gt;
     * normally does&lt;br /&gt;
     */&lt;br /&gt;
     overflow: -moz-scrollbars-none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-tabs {&lt;br /&gt;
    -moz-box-orient: horizontal;&lt;br /&gt;
    min-width: 20ex;   /* You may want to increase this value */&lt;br /&gt;
    -mox-box-pack: start;&lt;br /&gt;
    -moz-box-align: start;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-tabs &amp;gt; hbox {&lt;br /&gt;
    -moz-box-orient: vertical;&lt;br /&gt;
    -moz-box-align: stretch;&lt;br /&gt;
    -moz-box-pack: start;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.tabbrowser-tabs &amp;gt; hbox &amp;gt; tab {&lt;br /&gt;
    -moz-box-align: start;&lt;br /&gt;
    -moz-box-orient: horizontal;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== ウィンドウの縁とタイトルバーを非表示にする ====&lt;br /&gt;
&lt;br /&gt;
タイトルバーをタブバーに置き換えるには、{{ic|about:config}} で {{ic|browser.tabs.drawInTitlebar}} を有効にします。&lt;br /&gt;
&lt;br /&gt;
または、&amp;quot;メニュー&amp;quot;、&amp;quot;カスタマイズ&amp;quot; の順に進み、左下隅に &amp;quot;タイトルバー&amp;quot; という名前のチェックボックスを見つけます。  チェックを外します。  チェックボックスがない場合は、{{ic|XDG_CURRENT_DESKTOP}} 環境変数が正しく設定されているか、{{ic|MOZ_GTK_TITLEBAR_DECORATION}} 環境変数が &amp;quot;client&amp;quot; に設定されていることを確認してください。&lt;br /&gt;
&lt;br /&gt;
===== KDE でタイトルバーのみを非表示にする =====&lt;br /&gt;
&lt;br /&gt;
上記の設定では、Firefox は KDE で最小化/最大化/閉じるボタンをタブバーに追加しますが、タイトルバーはそのまま残ります。&lt;br /&gt;
&lt;br /&gt;
それを右クリックし、&amp;quot;More Actions &amp;gt; Configure Special Application Settings&amp;quot; を選択して削除できます。そこに &amp;quot;タイトルバーとフレームなし&amp;quot; の新しいプロパティを追加し、それを有効にすることを忘れないでください。&amp;quot;はい&amp;quot; を選択する必要があります。  (タイトルバーがなくなった後でルールを変更するには、&#039;&#039;System settings&#039;&#039; &amp;gt; &#039;&#039;Window Management&#039;&#039; &amp;gt; &#039;&#039;Window Rules&#039;&#039; に移動します。)&lt;br /&gt;
&lt;br /&gt;
ただし、それではフレームも消えてしまいますので、基本的にウィンドウサイズの変更はできません。  別の方法として、&#039;&#039;System settings&#039;&#039; &amp;gt; &#039;&#039;Application Style&#039;&#039; &amp;gt; &#039;&#039;Window Decorations&#039;&#039; に移動し、&#039;&#039;Breeze&#039;&#039; を選択して設定を変更します。  最後のタブ &#039;&#039;Window-Specific Overrides&#039;&#039; で、新しいものを追加します。  名前を取得するには、&#039;&#039;Detect Window Properties&#039;&#039; ボタンを使用します。または、Firefox だけでなく、すべてのウィンドウに対してこのオーバーライドを設定する場合は、正規表現フィールドにドット (.) を入力できます。  その後、&#039;&#039;Decoration Options&#039;&#039; を設定して、タイトル バーのみを非表示にします。&lt;br /&gt;
&lt;br /&gt;
==== ブックマークツールバーを自動で隠匿 ====&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&lt;br /&gt;
#PersonalToolbar {&lt;br /&gt;
    visibility: collapse !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#navigator-toolbox:hover &amp;gt; #PersonalToolbar {&lt;br /&gt;
    visibility: visible !important;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== サイドバーの幅の制限をなくす ====&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userChrome.css|&lt;br /&gt;
/* remove maximum/minimum  width restriction of sidebar */&lt;br /&gt;
#sidebar {&lt;br /&gt;
    max-width: none !important;&lt;br /&gt;
    min-width: 0px !important;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== ダーク GTK テーマの時に入力フィールドが読めない ====&lt;br /&gt;
&lt;br /&gt;
ダーク [[GTK]] テーマを使用すると、入力フィールドとテキストフィールドが読めないインターネットページに遭遇することがあります (たとえば、白い背景に白いテキスト、暗い背景に黒いテキストのテキスト入力フィールド) これは、サイトが背景色またはテキスト色のいずれかのみを設定し、Firefox がテーマからもう一方を取得するために発生する可能性があります。 Firefox が Web ページでテーマの色と暗いテーマをそれぞれ使用しないようにするには、{{ic|browser.display.use_system_colors}} と {{ic|widget.content.allow-gtk-dark-theme}} が {{ic|false}} に設定されていることを確認します。 {{ic|about:config}}&lt;br /&gt;
&lt;br /&gt;
または、以前の変更で問題が解決しなかった場合は、{{ic|widget.content.gtk-theme}} という名前の新しい文字列を {{ic|about:config に追加することで、Firefox をライト GTK テーマで起動することができます。 -override}} に設定し、{{ic|Breeze:light}} や {{ic|Adwaita:light}} などのライト テーマに設定します。&lt;br /&gt;
&lt;br /&gt;
===== 入力フィールドの色を CSS でオーバーライドする =====&lt;br /&gt;
&lt;br /&gt;
{{Note|1=関連するバグは 68 から解決されています。[https://bugzilla.mozilla.org/show_bug.cgi?id=1527048#c44]}}&lt;br /&gt;
&lt;br /&gt;
拡張機能 [https://addons.mozilla.org/firefox/addon/text-contrast-for-dark-themes/ Text Contrast for Dark Themes] は、コントラストを維持するために必要に応じて他の色を設定します。&lt;br /&gt;
&lt;br /&gt;
{{ic|userContent.css}} または [https://addons.mozilla.org/firefox/addon/styl-us/ stylus アドオン] を使用して、すべての Web ページに標準の色を明示的に設定します。&lt;br /&gt;
スタイル シートは通常、{{ic|chrome/userContent.css}} のプロファイル フォルダー (パスについては {{ic|about:profiles}} にアクセスしてください) にありますが、そうでない場合はそこに作成できます。&lt;br /&gt;
&lt;br /&gt;
以下は、入力フィールドを標準の黒のテキスト/白の背景に設定します。色が意図したとおりに表示されるように、表示されているサイトで両方をオーバーライドできます。&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|urlbar}} と {{ic|searchbar}} を {{ic|white}} にしたい場合は、最初の 2 つの {{ic|:not}} css セレクターを削除してください。}}&lt;br /&gt;
&lt;br /&gt;
{{bc|1=&lt;br /&gt;
input:not(.urlbar-input):not(.textbox-input):not(.form-control):not([type=&#039;checkbox&#039;]):not([type=&#039;radio&#039;]), textarea, select {&lt;br /&gt;
    -moz-appearance: none !important;&lt;br /&gt;
    background-color: white;&lt;br /&gt;
    color: black;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#downloads-indicator-counter {&lt;br /&gt;
    color: white;&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== GTK テーマを変更する =====&lt;br /&gt;
&lt;br /&gt;
Web コンテンツと UI の両方にライト テーマ (Adwaita など) を使用するよう Firefox に強制するには、[[GTK#テーマの基本設定]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
===== コンテンツ処理のみの GTK テーマを変更する =====&lt;br /&gt;
&lt;br /&gt;
Web コンテンツのみにライト テーマ (Adwaita など) を使用するように Firefox を強制するには:&lt;br /&gt;
&lt;br /&gt;
# アドレスバーで {{ic|about:config}} を開きます。&lt;br /&gt;
# ({{ic|マウスの右ボタン}} &#039;&#039;&amp;gt; New &amp;gt; String&#039;&#039;) から新しい {{ic|widget.content.gtk-theme-override}} 文字列タイプのエントリを作成します。&lt;br /&gt;
# レンダリング目的で使用するライトテーマの値を設定します (例:{{ic|Adwaita:light}})&lt;br /&gt;
# Firefox を再起動します。&lt;br /&gt;
&lt;br /&gt;
=== ウェブコンテンツの CSS 設定 ===&lt;br /&gt;
&lt;br /&gt;
このセクションではウェブコンテンツに CSS のカスタムルールを追加できる {{ic|userContent.css}} ファイルについて扱います。このファイルへの変更はブラウザの再起動時に適用されます。&lt;br /&gt;
&lt;br /&gt;
頻繁に使うウェブサイトに小さな修正を加えたり個人的なスタイルを適用することが可能です。人気のウェブサイトのカスタムスタイルシートは [http://userstyles.org/ userstyles.org] などから手に入れることができます。[https://addons.mozilla.org/firefox/addon/superusercontent/ superUserContent] などのアドオンをインストールしてテーマを管理することが可能です。アドオンは {{ic|chrome/userContent.css.d}} ディレクトリを作成してページが更新されたときに中に入っている CSS ファイルに変更を適用します。&lt;br /&gt;
&lt;br /&gt;
==== 他の CSS ファイルのインポート ==== &lt;br /&gt;
&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userContent.css|&lt;br /&gt;
@import url(&amp;quot;./imports/some_file.css&amp;quot;);&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== ドメインの特定部位をブロック ====&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userContent.css|&lt;br /&gt;
@-moz-document domain(example.com) {&lt;br /&gt;
    div#header {&lt;br /&gt;
        background-image: none !important;&lt;br /&gt;
    } &lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== PDF ファイルのリンクの後ろに [pdf] を追加 ====&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.mozilla/firefox/&amp;lt;profile_dir&amp;gt;/chrome/userContent.css|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
/* add &#039;[pdf]&#039; next to links to PDF files */&lt;br /&gt;
a[href$=&amp;quot;.pdf&amp;quot;]:after {&lt;br /&gt;
    font-size: smaller;&lt;br /&gt;
    content: &amp;quot; [pdf]&amp;quot;;&lt;br /&gt;
}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== 広告のブロック ====&lt;br /&gt;
&lt;br /&gt;
{{ic|userContent.css}} を使って広告をブロックする方法については [http://www.floppymoose.com floppymoose.com] にサンプルがあります。&lt;br /&gt;
&lt;br /&gt;
== マウスとキーボード ==&lt;br /&gt;
&lt;br /&gt;
=== マウスホイールでスクロールする速度 ===&lt;br /&gt;
&lt;br /&gt;
マウスホイールによるスクロール速度のデフォルト値を修正するには (例: スピードアップ)、{{ic|about:config}} を開いて {{ic|mousewheel.acceleration}} を検索してください。利用可能なオプションが表示されるので、以下を修正します:&lt;br /&gt;
&lt;br /&gt;
* {{ic|mousewheel.acceleration.start}} を &#039;&#039;&#039;-1&#039;&#039;&#039; に設定。&lt;br /&gt;
* {{ic|mousewheel.acceleration.factor}} を適当な値に設定 (10 から 20 が普通使われる値です)。&lt;br /&gt;
&lt;br /&gt;
もしくは [http://smoothwheel.mozdev.org/ SmoothWheel add-on] をインストールすることでも変更できます。&lt;br /&gt;
&lt;br /&gt;
=== ピクセル単位で正確なトラックパッドのスクロール ===&lt;br /&gt;
&lt;br /&gt;
(Nautilus などの GTK3 アプリケーションで使われている) 正確なトラックパッドスクロールを有効にするには、Firefox を起動する前に {{ic|1=MOZ_USE_XINPUT2=1}} [[環境変数]]を設定してください。&lt;br /&gt;
&lt;br /&gt;
スクロールがぎくしゃくする場合、設定 &amp;gt; 詳細からスムーススクロールオプションを有効にしてみてください。&lt;br /&gt;
&lt;br /&gt;
=== ​タッチスクリーンジェスチャを有効にする ===&lt;br /&gt;
&lt;br /&gt;
 ​{{ic|dom.w3c_touch_events.enabled}} が 1 (&#039;&#039;enabled&#039;&#039;) または 2 (&#039;&#039;default, auto-detect&#039;&#039;) に設定されていることを確認します。&lt;br /&gt;
&lt;br /&gt;
​{{ic|1=MOZ_USE_XINPUT2 DEFAULT=1}} を {{ic|/etc/security/pam_env.conf}} に追加し、システムをログアウトするか再起動して変更を有効にします。&lt;br /&gt;
&lt;br /&gt;
​デバイスによっては、以下を実行してxinputのタッチスクリーンジェスチャを無効にする必要があるかもしれません:&lt;br /&gt;
 $ xsetwacom --set &#039;&#039;device&#039;&#039; Gesture off&lt;br /&gt;
&lt;br /&gt;
=== Firefox の URL バーのマウスクリックを Windows と同じにする ===&lt;br /&gt;
&lt;br /&gt;
{{ic|about:config}} で以下を設定してください:&lt;br /&gt;
{{bc|&lt;br /&gt;
browser.urlbar.clickSelectsAll true&lt;br /&gt;
browser.urlbar.doubleClickSelectsAll false&lt;br /&gt;
layout.word_select.stop_at_punctuation true&lt;br /&gt;
}}&lt;br /&gt;
URL バーのシングルクリックで全てを選択し、ダブルクリックで単語を選択、トリプルクリックで全てを選択するようになります。&lt;br /&gt;
&lt;br /&gt;
=== ​スムーズスクロール ===&lt;br /&gt;
&lt;br /&gt;
​Firefox でスムーズな物理ベースのスクロールを実現するには、 {{ic|general.smoothScroll.msdPhysics}} 設定を変更して、他の Web ブラウザと同様のより高速な動作をエミュレートします。​構成をより迅速に行うには、次の行を {{ic|~/.mozilla/firefox/&#039;&#039;&#039;your-profile&#039;&#039;&#039;/user.js} に追加します。(再起動が必要):&lt;br /&gt;
&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.lines.durationMaxMS&amp;quot;, 125);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.lines.durationMinMS&amp;quot;, 125);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.mouseWheel.durationMaxMS&amp;quot;, 200);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.mouseWheel.durationMinMS&amp;quot;, 100);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.msdPhysics.enabled&amp;quot;, true);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.other.durationMaxMS&amp;quot;, 125);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.other.durationMinMS&amp;quot;, 125);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.pages.durationMaxMS&amp;quot;, 125);&lt;br /&gt;
 user_pref(&amp;quot;general.smoothScroll.pages.durationMinMS&amp;quot;, 125);&lt;br /&gt;
&lt;br /&gt;
​また、マウスホイールのスクロール設定も、スムーズに反応するように変更する必要があります。:&lt;br /&gt;
&lt;br /&gt;
 user_pref(&amp;quot;mousewheel.min_line_scroll_amount&amp;quot;, 30);&lt;br /&gt;
 user_pref(&amp;quot;mousewheel.system_scroll_override_on_root_content.enabled&amp;quot;, true);&lt;br /&gt;
 user_pref(&amp;quot;mousewheel.system_scroll_override_on_root_content.horizontal.factor&amp;quot;, 175);&lt;br /&gt;
 user_pref(&amp;quot;mousewheel.system_scroll_override_on_root_content.vertical.factor&amp;quot;, 175);&lt;br /&gt;
 user_pref(&amp;quot;toolkit.scrollbox.horizontalScrollDistance&amp;quot;, 6);&lt;br /&gt;
 user_pref(&amp;quot;toolkit.scrollbox.verticalScrollDistance&amp;quot;, 2);&lt;br /&gt;
&lt;br /&gt;
​パフォーマンスで問題が発生した場合は、{{ic|mousewheel.min_line_scroll_amount}} を修正してみてください。&lt;br /&gt;
&lt;br /&gt;
=== ​バックスペースの動作を設定する ===&lt;br /&gt;
&lt;br /&gt;
こちらを参照. [https://wiki.archlinux.jp/index.php/Firefox#.E3.83.90.E3.83.83.E3.82.AF.E3.82.B9.E3.83.9A.E3.83.BC.E3.82.B9.E3.81.8C_.27.E6.88.BB.E3.82.8B.27_.E3.83.9C.E3.82.BF.E3.83.B3.E3.81.A8.E3.81.97.E3.81.A6.E6.A9.9F.E8.83.BD.E3.81.97.E3.81.AA.E3.81.84 バックスペースが &#039;戻る&#039; ボタンとして機能しない]&lt;br /&gt;
&lt;br /&gt;
=== マウスの中ボタンのクリップボードペーストを無効にする ===&lt;br /&gt;
&lt;br /&gt;
こちらを参照. [https://wiki.archlinux.org/index.php/Firefox#Middle-click_behavior Middle-click_behavior]&lt;br /&gt;
&lt;br /&gt;
=== Emacs キーバインディング ===&lt;br /&gt;
​テキストフィールドで Emacs/Readline に似たキー割り当てを有効にするには、[https://wiki.archlinux.jp/index.php/GTK#Emacs_.E3.82.AD.E3.83.BC.E3.83.90.E3.82.A4.E3.83.B3.E3.83.89 Emacs キーバインド] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== その他 ==&lt;br /&gt;
&lt;br /&gt;
その他のヒントと設定。&lt;br /&gt;
&lt;br /&gt;
=== 追加のメディアコーデックの有効化 ===&lt;br /&gt;
&lt;br /&gt;
設定する前に、デフォルトで有効になっていないことには理由があることを覚えておいて下さい。安定に問題があったり、メモリリークが発生することがあります。{{ic|about:config}} を開いて以下のオプションを確認してください:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 推奨値&lt;br /&gt;
! キー || 値 || 説明&lt;br /&gt;
|-&lt;br /&gt;
| media.mediasource.enabled || true (デフォルト) || [[wikipedia:Media_Source_Extensions|Media Source Extensions]] (MSE) の有効化&lt;br /&gt;
|-&lt;br /&gt;
| media.mediasource.mp4.enabled || true (デフォルト) || [[wikipedia:ja:MP4|MP4]] MSE の有効化&lt;br /&gt;
|-&lt;br /&gt;
| media.mediasource.webm.enabled || true (デフォルト) || [[wikipedia:ja:WebM|WebM]] MSE の有効化。&lt;br /&gt;
|-&lt;br /&gt;
| media.mediasource.ignore_codecs || true || H.264 MSE などを有効化 (キーは作成してください)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Widevine と Netflix/Amazon Video ====&lt;br /&gt;
&lt;br /&gt;
Widevine は Netflix や Amazon プライムビデオなどがビデオコンテンツの保護のために使用しているデジタル著作権管理ツールです。&lt;br /&gt;
&lt;br /&gt;
Widevine が使われているページを初めて表示すると Firefox はアドレスバーの下に DRM をインストールしてもよいか表示します。承認したらダウンロードバーが消えるまで待ってください。完了したら Netflix や Amazon プライムビデオなどから動画を視聴できるはずです。&lt;br /&gt;
{{Note|コンテンツ設定の &amp;quot;DRM コンテンツの再生&amp;quot; にチェックが入っていることを確認してください。}}&lt;br /&gt;
&lt;br /&gt;
=== フルスクリーンの警告を無効化 ===&lt;br /&gt;
&lt;br /&gt;
フルスクリーンモードにしたときに表示される警告は {{ic|about:config}} で &amp;quot;full-screen-api.warning.timeout&amp;quot; を 0 に設定することで無効にできます。&lt;br /&gt;
&lt;br /&gt;
=== Firefox 検索バーの検索エンジンの順番を変更 ===&lt;br /&gt;
&lt;br /&gt;
検索エンジンが表示される順番を変えるには:&lt;br /&gt;
* 検索エンジンのドロップダウンリストを開いて &#039;&#039;Manage Search Engines...&#039;&#039; エントリをクリック。&lt;br /&gt;
* 移動したい検索エンジンを選択して &#039;&#039;Move Up&#039;&#039; や &#039;&#039;Move Down&#039;&#039; で移動します。ドラッグアンドドロップで移動することも可能です。&lt;br /&gt;
&lt;br /&gt;
=== Abiword や LibreOffice Writer で *.doc を自動的に開く方法 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Preferences &amp;gt; Applications&#039;&#039; を開いて &#039;&#039;Word Document&#039;&#039; (または &#039;&#039;Word 2007 Document&#039;&#039; の {{ic|*.docx}}) を検索してください。見つけたら、ドロップダウンリストをクリックして &#039;&#039;Use other...&#039;&#039; を選択してください。そして Abiword や Writer の実行可能ファイルのパスを指定してください ({{ic|/usr/bin/abiword}} や {{ic|/usr/bin/lowriter}})。&lt;br /&gt;
&lt;br /&gt;
=== &amp;quot;I&#039;m Feeling Lucky&amp;quot; モード ===&lt;br /&gt;
&lt;br /&gt;
検索エンジンによっては &amp;quot;feeling lucky&amp;quot; 機能が存在することがあります。例えば、Google には &amp;quot;I&#039;m Feeling Lucky&amp;quot; があり、DuckDuckGo には &amp;quot;I&#039;m Feeling Ducky&amp;quot; があります。&lt;br /&gt;
&lt;br /&gt;
機能を有効化するには:&lt;br /&gt;
# アドレスバーに {{ic|about:config}} と入力。&lt;br /&gt;
# {{ic|keyword.url}} という文字列を検索。&lt;br /&gt;
# 値を検索エンジンの URL に設定。&lt;br /&gt;
&lt;br /&gt;
Google の場合、次のように設定:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;https://www.google.com/search?btnI=I%27m+Feeling+Lucky&amp;amp;q=&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
DuckDuckGo の場合、次のように設定:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;https://duckduckgo.com/?q=\&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== DNSSEC で DNS をセキュア化 ===&lt;br /&gt;
&lt;br /&gt;
[[en2:DNSSEC|DNSSEC]] のサポートを有効にすることでブラウジングを安全にすることができます。&lt;br /&gt;
&lt;br /&gt;
=== マグネットプロトコルの関連付けの追加 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|about:config}} で {{ic|network.protocol-handler.expose.magnet}} を &#039;&#039;&#039;false&#039;&#039;&#039; に設定してください。&lt;br /&gt;
&lt;br /&gt;
次にマグネットリンクを開いたとき、{{ic|Launch Application}} ダイアログが表示されます。ダイアログから、使いたい torrent クライアントを選択してください。他のプロトコルも同じように設定できます。&lt;br /&gt;
&lt;br /&gt;
=== マグネットプロトコルの関連付けを kTorrent (KDE4) に追加 ===&lt;br /&gt;
&lt;br /&gt;
{{ic|/usr/share/applications/kde4/ktorrent.desktop}} のユーザーコピーを {{ic|~/.local/share/applications/kde4/}} に作成して、{{ic|1=Mimetype=}} に以下を追加してください:&lt;br /&gt;
&lt;br /&gt;
 x-scheme-handler/magnet&lt;br /&gt;
&lt;br /&gt;
{{ic|~/.config/mimeapps.list}} を修正して以下を追加:&lt;br /&gt;
&lt;br /&gt;
 x-scheme-handler/magnet=kde4-ktorrent.desktop&lt;br /&gt;
&lt;br /&gt;
[https://superuser.com/questions/44072/how-do-i-associate-magnet-links-with-ktorrent-in-firefox] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 突然終了してしまうのを防ぐ ===&lt;br /&gt;
&lt;br /&gt;
[https://addons.mozilla.org/firefox/addon/disable-ctrl-q-shortcut/ Disable Ctrl-Q Shortcut] 拡張をインストールすることでブラウザを不注意に閉じてしまうことを防止できます。&lt;br /&gt;
&lt;br /&gt;
もしくはウィンドウマネージャの設定ファイルにルールを追加する方法もあります。例えば [[openbox]] なら {{ic|~/.config/openbox/rc.xml}} ファイルの &#039;&#039;&amp;lt;keyboard&amp;gt;&#039;&#039; セクションに以下を追加してください:&lt;br /&gt;
  &amp;lt;keybind key=&amp;quot;C-q&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;action name=&amp;quot;Execute&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;execute&amp;gt;false&amp;lt;/execute&amp;gt;&lt;br /&gt;
    &amp;lt;/action&amp;gt;&lt;br /&gt;
  &amp;lt;/keybind&amp;gt;&lt;br /&gt;
{{Note|上記の設定はグラフィックサーバーで動作する全てのアプリケーションに適用されます。}}&lt;br /&gt;
&lt;br /&gt;
=== 最新版でプラグインが動作しない ===&lt;br /&gt;
&lt;br /&gt;
Arch はブリーディングエッジなので、最新の Firefox では動作しないプラグインと互換性の問題が起こることがあります (例: [http://5digits.org/pentadactyl/index Pentadactyl])。可能であれば、ナイトリー/ベータ版をインストールするか、[[パッケージのダウングレード]]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
[https://addons.mozilla.org/firefox/addon/checkcompatibility/ Disable Add-on Compatibility Checks] プラグインは新しいバージョンでもちゃんと動くのにプラグインが無効化される問題を解決します。&lt;br /&gt;
&lt;br /&gt;
=== スクロールがギクシャクしている ===&lt;br /&gt;
&lt;br /&gt;
Firefox でのスクロールが&amp;quot;ガタガタ&amp;quot;あるいは&amp;quot;ムラがある&amp;quot;と感じられることがあります。[http://forums.mozillazine.org/viewtopic.php?f=8&amp;amp;t=2749475/ MozillaZine] が Gentoo でスクロールを修正する設定を投稿していますが、Arch Linux でも同じように直ることが報告されています:&lt;br /&gt;
&lt;br /&gt;
# {{ic|mousewheel.min_line_scroll_amount}} を 40 に設定&lt;br /&gt;
# {{ic|general.smoothScroll}} と {{ic|general.smoothScroll.pages}} を &#039;&#039;false&#039;&#039; に設定&lt;br /&gt;
# {{ic|image.mem.min_discard_timeout_ms}} を 2100000000 のように大きな値に設定、ただし 2140000000 を超えてはならない。この値よりも上の値に設定してしまうと Firefox は次のエラーを吐きます: &amp;quot;The text you entered is not a number&amp;quot;。&lt;br /&gt;
# {{ic|image.mem.max_decoded_image_kb}} を最低でも 512K に設定&lt;br /&gt;
&lt;br /&gt;
これでスクロールがスムーズになるはずです。&lt;br /&gt;
&lt;br /&gt;
=== nspawn コンテナの中で Firefox を実行 ===&lt;br /&gt;
&lt;br /&gt;
PID 1 で実行するには:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn --setenv=DISPLAY=:0 \&lt;br /&gt;
               --setenv=XAUTHORITY=~/.Xauthority \&lt;br /&gt;
               --bind-ro=$HOME/.Xauthority:/root/.Xauthority \&lt;br /&gt;
               --bind=/tmp/.X11-unix \&lt;br /&gt;
               -D ~/containers/firefox \&lt;br /&gt;
               firefox&lt;br /&gt;
&lt;br /&gt;
もしくは [[systemd-networkd]] を使って systemd でネットワークを設定したコンテナを起動する場合:&lt;br /&gt;
&lt;br /&gt;
 # systemd-nspawn --bind-ro=$HOME/.Xauthority:/root/.Xauthority \&lt;br /&gt;
               --bind=/tmp/.X11-unix \&lt;br /&gt;
               -D ~/containers/firefox \&lt;br /&gt;
               --network-veth -b&lt;br /&gt;
&lt;br /&gt;
コンテナを起動したら、以下のように Xorg ライブラリを実行してください:&lt;br /&gt;
&lt;br /&gt;
 # systemd-run -M firefox --setenv=DISPLAY=:0 firefox&lt;br /&gt;
&lt;br /&gt;
=== 検索がマッチした箇所をスクロールバーに表示 ===&lt;br /&gt;
 &lt;br /&gt;
[https://addons.mozilla.org/firefox/addon/findbar-tweak/ FindBar Tweak] 拡張をインストールすることで表示できます。&lt;br /&gt;
&lt;br /&gt;
=== WebRTC オーディオのポストプロセス処理を無効化 ===&lt;br /&gt;
&lt;br /&gt;
PulseAudio の [[PulseAudio/トラブルシューティング#エコー除去・ノイズキャンセルを有効にする|module-echo-cancel]] を使用している場合、Firefox がポストプロセス処理を音声にかけないように設定すると良いでしょう。&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ オーディオのポストプロセス処理を無効化するには、以下のパラメータを設定&lt;br /&gt;
! キー || 値 || 説明&lt;br /&gt;
|-&lt;br /&gt;
| media.getusermedia.aec_enabled || false || AEC = 音響エコー除去 (Acoustic Echo Cancellation)&lt;br /&gt;
|-&lt;br /&gt;
| media.getusermedia.agc_enabled || false || AGC = 自動ゲインコントロール (Automatic Gain Control)&lt;br /&gt;
|-&lt;br /&gt;
| media.getusermedia.noise_enabled || false || ノイズ除去。Firefox のノイズ除去を無効にすると音がミッキーマウスのようになることがあります。&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ​Fido U2F 認証 ===&lt;br /&gt;
&lt;br /&gt;
​Firefox は Fido [[U2F]] 認証プロトコルをサポートしています。​必要な udev ルール用に {{pkg|libfido2}} をインストールします。&lt;br /&gt;
&lt;br /&gt;
=== ALSA に戻す ===&lt;br /&gt;
&lt;br /&gt;
​Arch が Firefox を &#039;&#039;ac_add_options --enable-alsa&#039;&#039; でビルドし続ける限り、Firefox はシステム上で特別な設定なしに、そして (ただし、システムでパルスを使用していて、 Firefox がパルスを使用しないようにしたい場合はこの限りではない。) パルスなしに、正常に動作します。​以前は ioctl の syscall を許可しなければならず、デフォルトでは Firefox のサンドボックスでブロックされ、 {{ic|about:config}} のALSA の設定 {{ic|security.sandbox.content.syscall_whitelist}} で、正しい ioctl の syscall 番号にする必要がありました。これは x 86-64 では &#039;&#039;16&#039;&#039; x86-32 では &#039;&#039;54&#039;&#039; ですが、今ではそうではありません。​詳細については、こちらを参照してください:&lt;br /&gt;
&lt;br /&gt;
[https://www.linuxquestions.org/questions/slackware-14/firefox-in-current-alsa-sound-4175622116]&lt;br /&gt;
[https://codelab.wordpress.com/2017/12/11/firefox-drops-alsa-apulse-to-the-rescue]&lt;br /&gt;
&lt;br /&gt;
=== WebGL を強制的に使用可能にする ===&lt;br /&gt;
&lt;br /&gt;
一部のプラットフォームでは、ユーザが WebGL を使用したい場合でも、 WebGL が無効になります [https://wiki.mozilla.org/Blocklisting/Blocked_Graphics_Drivers] ​WebGL を強制的に有効にするには、{{ic|webgl.force-enabled}} を {{ic|true}} に設定し、WebGL アンチエイリアシングも強制的に有効にするには、 {{ic|webgl.msaa-force}} を {{ic|true}} に設定します。&lt;br /&gt;
&lt;br /&gt;
次のようなエラーが表示された場合:&lt;br /&gt;
{{bc|libGL error: MESA-LOADER: failed to retrieve device information&lt;br /&gt;
libGL error: image driver extension not found&lt;br /&gt;
libGL error: failed to load driver: i915&lt;br /&gt;
libGL error: MESA-LOADER: failed to retrieve device information&lt;br /&gt;
...}}&lt;br /&gt;
​Firefox のバグ [https://bugzilla.mozilla.org/show_bug.cgi?id=1480755 1480755] で説明されている解決策を試してみてください:&lt;br /&gt;
&lt;br /&gt;
参照. {{ic|security.sandbox.content.read_path_whitelist}} to {{ic|/sys/}}&lt;br /&gt;
&lt;br /&gt;
=== Recommended by Pocket を有効にする ===&lt;br /&gt;
&lt;br /&gt;
​&amp;quot;Recommended by Pocket&amp;quot; (&#039;&#039;設定 &amp;gt; ホーム &amp;gt; Firefox Home コンテンツ&#039;&#039; - &amp;quot;トップサイト&amp;quot; と &amp;quot;ハイライト&amp;quot; の間に) が表示されない場合は、{{ic|browser.newtabpage.activity-stream.feeds.&#039;&#039;&#039;section&#039;&#039;&#039;.topstories}} および {{ic|browser.newtabpage.activity-stream.feeds.&#039;&#039;&#039;system&#039;&#039;&#039;.topstories}} から {{ic|true}}。​このオプションは 設定 には表示されませんが、新しく開いたタブ/ウィンドウ ({{ic|Firefox Home}} に設定した場合) に Pocket recommendations が表示されるようになりました。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [http://kb.mozillazine.org/Knowledge_Base MozillaZine Wiki]&lt;br /&gt;
* [http://kb.mozillazine.org/About:config_entries about:config Entries Explained]&lt;br /&gt;
* [http://linuxtidbits.wordpress.com/2009/08/01/better-fox-cat-and-weasel/ Firefox touch-ups that might be desired]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Arch_User_Repository&amp;diff=32282</id>
		<title>Arch User Repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Arch_User_Repository&amp;diff=32282"/>
		<updated>2023-06-20T05:46:43Z</updated>

		<summary type="html">&lt;p&gt;Hikali: 誤字の訂正 お気に入りのパッケージにへの -&amp;gt; お気に入りのパッケージへの&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Arch について]]&lt;br /&gt;
[[Category:パッケージ開発]]&lt;br /&gt;
[[Category:パッケージ管理]]&lt;br /&gt;
[[de:Arch User Repository]]&lt;br /&gt;
[[en:Arch User Repository]]&lt;br /&gt;
[[es:Arch User Repository]]&lt;br /&gt;
[[fr:Arch User Repository]]&lt;br /&gt;
[[pt:Arch User Repository]]&lt;br /&gt;
[[ru:Arch User Repository]]&lt;br /&gt;
[[uk:Arch User Repository]]&lt;br /&gt;
[[zh-hans:Arch User Repository]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|makepkg}}&lt;br /&gt;
{{Related|pacman}}&lt;br /&gt;
{{Related|PKGBUILD}}&lt;br /&gt;
{{Related|.SRCINFO}}&lt;br /&gt;
{{Related|Aurweb RPC インターフェース}}&lt;br /&gt;
{{Related|AUR 投稿ガイドライン}}&lt;br /&gt;
{{Related|AUR Trusted User ガイドライン}}&lt;br /&gt;
{{Related|公式リポジトリ}}&lt;br /&gt;
{{Related|Arch Build System}}&lt;br /&gt;
{{Related|パッケージの作成}}&lt;br /&gt;
{{Related|AUR ヘルパー}}&lt;br /&gt;
{{Related|AUR クリーンアップデー}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
Arch User Repository (AUR) はコミュニティによって運営されている、Arch ユーザーのためのリポジトリです。パッケージのビルド方法が書かれたファイル ([[PKGBUILD]]) がまとめて置かれており、[[makepkg]] を使ってソースからパッケージを作り、生成したパッケージを [[pacman#追加コマンド|pacman]] でインストールすることができます。人気のあるパッケージが [[extra|extra リポジトリ]]に取り込まれるように、コミュニティの手で新しいパッケージを共有することを目的に AUR は作られました。このページでは AUR の使用方法を説明します。&lt;br /&gt;
&lt;br /&gt;
AUR に投稿された新しいパッケージの一部は公式リポジトリに取り込まれています。AUR では、ユーザーはパッケージビルド (PKGBUILD と関連ファイル) を投稿することができます。AUR コミュニティには AUR に存在するパッケージに対して投票する機能があります。投票が十分に集まると (ライセンスに問題がなくきちんとパッケージ化されているならば) &#039;&#039;extra&#039;&#039; リポジトリに取り込まれます ([[pacman]] や [[Arch Build System|abs]] で直接入手できるようになります)。&lt;br /&gt;
&lt;br /&gt;
{{Warning|AUR のパッケージはユーザによって提供されているものです。それらの {{ic|PKGBUILD}} は完全に非公式であり、綿密に検査されていません。AUR から提供されているファイルの使用は自己責任となります。}}&lt;br /&gt;
&lt;br /&gt;
== はじめに ==&lt;br /&gt;
&lt;br /&gt;
[https://aur.archlinux.org AUR ウェブインターフェイス] で [[PKGBUILD]] を検索したり、ダウンロードしたりすることができます。&#039;&#039;makepkg&#039;&#039; を使って {{ic|PKGBUILD}} からパッケージを生成することができ、&#039;&#039;pacman&#039;&#039; でインストールできます。&lt;br /&gt;
&lt;br /&gt;
* {{Pkg|base-devel}} が[[インストール]]されていることを確認してください。&lt;br /&gt;
* 一般的な質問に対する答えはほとんど [[#FAQ]] に載っています。&lt;br /&gt;
* {{ic|/etc/makepkg.conf}} を調整することで、AUR からパッケージをビルドするときに、あなたの使用しているプロセッサに最適化することができます。マルチコアプロセッサを搭載しているシステム上では、{{ic|MAKEFLAGS}} 変数を調整したり、圧縮に複数のコアを使ったり、別の圧縮アルゴリズムを使ったりすることで、パッケージのビルドタイムを劇的に短縮できる可能性があります。また、{{ic|CFLAGS}} 変数を使うことでハードウェア固有のコンパイラ最適化を有効化することもできます。詳しくは [[makepkg#ヒントとテクニック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
また、SSH から AUR にアクセスすることもできます: 利用可能なコマンドをリストアップするには {{ic|ssh aur@aur.archlinux.org help}} を入力してください。&lt;br /&gt;
&lt;br /&gt;
== 歴史 ==&lt;br /&gt;
&lt;br /&gt;
当初、{{ic|&amp;lt;nowiki&amp;gt;ftp://ftp.archlinux.org/incoming&amp;lt;/nowiki&amp;gt;}} というサーバーがあり、人々は [[PKGBUILD]] やビルドに必要なファイル、ビルド済みのパッケージをそのサーバにアップロードしていました。パッケージやそれに関連するファイルは、[[パッケージメンテナ]]がプログラムを見て取り入れるまで、そこに置かれていました。&lt;br /&gt;
&lt;br /&gt;
その後、Trusted User リポジトリが誕生しました。コミュニティの特定の個人が、誰でも使えるリポジトリをホストすることを許可されていました。これを基礎として、より柔軟に使いやすくするために拡張されたものが AUR です。今でも、AUR のメンテナは TU (Trusted User) と呼ばれます。&lt;br /&gt;
&lt;br /&gt;
2015年6月8日から2015年8月8日までの間に AUR はバージョン 3.5.1 から 4.0.0 に移行し、PKGBUILD を公開するために Git リポジトリが使われるようになりました。&lt;br /&gt;
既存のパッケージは、メンテナによって新しいインフラに手動で移行されない限り、ドロップされました。&lt;br /&gt;
&lt;br /&gt;
=== AUR3 パッケージの Git リポジトリ ===&lt;br /&gt;
&lt;br /&gt;
GitHub 上の [https://github.com/aur-archive AUR Archive] には、移行時に AUR3 内にあったすべてのパッケージが保存されているリポジトリです。&lt;br /&gt;
あるいは、同じものを提供する [https://github.com/felixonmars/aur3-mirror/ aur3-mirror] リポジトリもあります。&lt;br /&gt;
&lt;br /&gt;
== パッケージをインストール・アップグレードする ==&lt;br /&gt;
&lt;br /&gt;
AUR からパッケージをインストールする手順は比較的単純です。基本的には:&lt;br /&gt;
&lt;br /&gt;
# ビルドファイルを取得する。[[PKGBUILD]] や、[[systemd]] ユニットやパッチなどの (しばしば、実際のコードではない) 他の必要なファイルを含みます。&lt;br /&gt;
# {{ic|PKGBUILD}} とそれに付属しているファイルが、悪意のある、または信頼できないものでないことを検証する。&lt;br /&gt;
# それらのファイルが保存されているディレクトリ内で {{ic|makepkg}} を実行する。これは、コードをダウンロードし、コンパイルし、パッケージングします。&lt;br /&gt;
# {{ic|pacman -U &#039;&#039;package_file&#039;&#039;}} を実行し、パッケージをシステムにインストールする。&lt;br /&gt;
&lt;br /&gt;
=== 要件 ===&lt;br /&gt;
&lt;br /&gt;
まず、{{Pkg|base-devel}} をインストールして、必須のツールをインストールしましょう。この[[メタパッケージ]]には、ソースからコンパイルするために必要な {{pkg|make}} などのツールが依存パッケージとして含まれています。&lt;br /&gt;
&lt;br /&gt;
{{Note|AUR のパッケージは、{{Pkg|base-devel}} がビルド環境にインストールされていることを想定しています。}}&lt;br /&gt;
&lt;br /&gt;
次に、適切なビルドディレクトリを選択してください。ビルドディレクトリは、パッケージがソースから作成/ビルドされるディレクトリであり、任意のディレクトリを使うことができます。以下のセクションでは例として {{ic|~/builds}} をビルドディレクトリとして使用します。&lt;br /&gt;
&lt;br /&gt;
=== ビルドファイルを取得する ===&lt;br /&gt;
&lt;br /&gt;
AUR 内の対象パッケージの場所を特定します。[https://aur.archlinux.org/ AUR ホームページ]の検索フィールドを使って行うことができます。検索リスト内のアプリケーションの名前をクリックして、そのパッケージの情報ページを開きます。説明欄を読んで、それがあなたの求めているパッケージであることを確認してください。パッケージの最終更新日時とコメントも確認してください。&lt;br /&gt;
&lt;br /&gt;
パッケージのビルドファイルを取得する方法は複数存在します:&lt;br /&gt;
&lt;br /&gt;
* そのパッケージの [[git]] リポジトリをクローンする。URL は、そのパッケージの AUR ページの「パッケージの詳細」の「Git クローン URL」にあります。これは推奨される方法です。利点としては、{{ic|git pull}} を実行すれば、パッケージを簡単にアップデートできます。&lt;br /&gt;
: {{bc|$ git clone &amp;lt;nowiki&amp;gt;https://aur.archlinux.org/&amp;lt;/nowiki&amp;gt;&#039;&#039;package_name&#039;&#039;.git}}&lt;br /&gt;
* スナップショットをダウンロードする。パッケージの AUR ページの右側にある「パッケージアクション」内の「スナップショットのダウンロード」リンクをクリックするか、ターミナルで以下を実行してください:&lt;br /&gt;
: {{bc|$ curl -L -O &amp;lt;nowiki&amp;gt;https://aur.archlinux.org/cgit/aur.git/snapshot/&amp;lt;/nowiki&amp;gt;&#039;&#039;package_name&#039;&#039;.tar.gz}}&lt;br /&gt;
: {{Note|スナップショットのファイルは圧縮されています。なので、展開する必要があります (できれば、AUR ビルド用のディレクトリ内で): {{ic|tar -xvf &#039;&#039;package_name&#039;&#039;.tar.gz}}}}&lt;br /&gt;
* [https://github.com/archlinux/aur archlinux/aur GitHub] 上の読み取り専用ミラーを使う。1つのブランチ内に1つのパッケージが存在しています。1つのブランチのみをクローンすることが推奨されます (リポジトリ全体は大きすぎるので、パフォーマンスが低下するでしょう)。これを行う方法として、以下の2つがあります:&lt;br /&gt;
** {{ic|1=git clone --single-branch}} を使う: {{bc|$ git clone --branch &#039;&#039;package_name&#039;&#039; --single-branch &amp;lt;nowiki&amp;gt;https://github.com/archlinux/aur.git&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
** このリポジトリの[[Git|部分クローン]]を行い ({{ic|1=git clone --depth=1}})、選択的に[[Git#ブランチの作成|ブランチを追加する]]:&lt;br /&gt;
:: {{bc|&amp;lt;nowiki&amp;gt;$ git clone --depth=1 https://github.com/archlinux/aur.git;&amp;lt;/nowiki&amp;gt; cd aur&amp;lt;br&amp;gt;$ git remote set-branches --add origin &#039;&#039;package_name&#039;&#039;&amp;lt;br&amp;gt;$ git fetch&amp;lt;br&amp;gt;$ git checkout &#039;&#039;package_name&#039;&#039;}}&lt;br /&gt;
&lt;br /&gt;
=== 必要であれば PGP 公開鍵を取得する ===&lt;br /&gt;
&lt;br /&gt;
[[PKGBUILD]] の source 配列に &#039;&#039;.sig&#039;&#039; や &#039;&#039;.asc&#039;&#039; という形式の署名ファイルがあるか確認してください。それがある場合、PKGBUILD の [[PKGBUILD#validpgpkeys|validpgpkeys]] 配列内にリストアップされている公開鍵のうち1つを取得してください。詳細は [[makepkg#署名チェック]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== パッケージをビルドする ===&lt;br /&gt;
&lt;br /&gt;
パッケージの [[PKGBUILD]] が含まれているディレクトリに移動してください:&lt;br /&gt;
&lt;br /&gt;
 $ cd &#039;&#039;package_name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{ic|PKGBUILD}} ファイルや &#039;&#039;.install&#039;&#039; ファイル、パッケージの git リポジトリ内のすべてのファイルを注意深く見て、悪意のある/危険なコマンドがないかチェックしてください。疑わしい場合、パッケージをビルドせずに、フォーラムやメーリングリストで[[一般的なトラブルシューティング#他者のサポート|助言を得ましょう]]。以前、悪意のあるコードがパッケージ内で見つかったことがあります。[https://lists.archlinux.org/archives/list/aur-general@lists.archlinux.org/thread/FFCMZGL4UQODYKZGUY7KTN3UBF3XN66P/]}}&lt;br /&gt;
&lt;br /&gt;
提供されているファイルすべての内容を確認してください。例えば、&#039;&#039;less&#039;&#039; を使って {{ic|PKGBUILD}} を見るには:&lt;br /&gt;
&lt;br /&gt;
 $ less PKGBUILD&lt;br /&gt;
&lt;br /&gt;
{{Tip|パッケージをアップデートしようとしているならば、最後のコミットとの変更点を見るべきかもしれません。&lt;br /&gt;
* 最後の git コミットとの変更点を見るには、{{ic|git show}} を使うことができます。&lt;br /&gt;
* &#039;&#039;vimdiff&#039;&#039; を使って最後のコミットとの変更点を見るには、{{ic|git difftool @~..@ vimdiff}} を実行してください。&#039;&#039;vimdiff&#039;&#039; の利点は、何が変更されたかを示すインジケータと共に各ファイルの内容全体を見ることができることです。}}&lt;br /&gt;
&lt;br /&gt;
パッケージを作成します。手動でファイルの内容を確認したあとで、[[makepkg]] を通常ユーザとして実行してください。いくつか便利なフラグがあります:&lt;br /&gt;
&lt;br /&gt;
* {{ic|-s}}/{{ic|--syncdeps}} は、ビルド前に自動的に依存関係を解決し、[[pacman]] を使って依存パッケージをインストールします。パッケージが他の AUR パッケージに依存している場合、まずその AUR パッケージを手動でインストールする必要があります。&lt;br /&gt;
* {{ic|-i}}/{{ic|--install}} は、ビルドが成功した場合にパッケージをインストールします。このフラグを使えば、通常手動で行う次の手順をスキップすることができます。&lt;br /&gt;
* {{ic|-r}}/{{ic|--rmdeps}} は、ビルド後に、ビルド時の依存パッケージを削除します (なぜなら、それらはもはや必要ないからです)。しかし、これらの依存パッケージは、パッケージがアップデートされたときに再インストールする必要があるでしょう。&lt;br /&gt;
* {{ic|-c}}/{{ic|--clean}} は、ビルド後に一時ビルドファイルをクリーンアップします (なぜなら、それらはもはや必要ないからです)。通常、これらのファイルはビルドプロセスをデバッグするときにだけ必要になります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic| git clean -dfx}} を使えば、git によって追跡されていないファイルをすべて削除できます。つまり、以前ビルドされたパッケージをすべて削除します。}}&lt;br /&gt;
&lt;br /&gt;
=== パッケージをインストールする ===&lt;br /&gt;
&lt;br /&gt;
これで、pacman を使ってパッケージをインストールできます:&lt;br /&gt;
&lt;br /&gt;
 # pacman -U &#039;&#039;package_name&#039;&#039;-&#039;&#039;version&#039;&#039;-&#039;&#039;architecture&#039;&#039;.pkg.tar.zst&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* {{ic|makepkg.conf}} 内の {{ic|PKGEXT}} を変更している場合、パッケージファイルの名前も若干異なる場合があります。&lt;br /&gt;
* 上記の例は、ビルドプロセスの概略です。詳細は [[makepkg]] と [[ABS]] の記事を見ることを&#039;&#039;&#039;強く&#039;&#039;&#039;推奨します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== パッケージをアップグレードする ===&lt;br /&gt;
&lt;br /&gt;
パッケージの [[PKGBUILD]] を含むディレクトリ内で、まず最初に以下のコマンドを使ってファイルと変更を更新しなければなりません:&lt;br /&gt;
&lt;br /&gt;
 $ git pull&lt;br /&gt;
&lt;br /&gt;
次に、前述のビルドとインストールの指示に従ってください。&lt;br /&gt;
&lt;br /&gt;
=== パッケージをアップデートする ===&lt;br /&gt;
&lt;br /&gt;
AUR はサポート外のものなので、あなたがインストールしたパッケージは、pacman ではなく &#039;&#039;あなたの責任で&#039;&#039; アップデートすることになっています。公式リポジトリ内のパッケージがアップデートされた場合、それらのライブラリに依存している AUR パッケージをすべてビルドし直す必要があります。&lt;br /&gt;
&lt;br /&gt;
== アカウントステータス ==&lt;br /&gt;
&lt;br /&gt;
=== 休止 (Suspension) ===&lt;br /&gt;
&lt;br /&gt;
Trusted User としてユーザを編集するとき、休止 (Suspended) フィールドをセットできます。これは、対象のユーザを休止させます。&#039;&#039;&#039;ユーザが休止しているとき、以下のことはできなくなります:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* https://aur.archlinux.org へのログイン&lt;br /&gt;
* 通知の受け取り&lt;br /&gt;
* git インターフェイスとの対話&lt;br /&gt;
&lt;br /&gt;
=== 活動休止 (Inactivity) ===&lt;br /&gt;
&lt;br /&gt;
あなた自身のアカウントを編集するときや、Trusted User としてユーザを編集するとき、活動休止 (Inactive) フィールドをセットできます。活動休止中のアカウントは2つの理由により使用されます:&lt;br /&gt;
&lt;br /&gt;
* アカウントページに活動休止になった日付を表示する。&lt;br /&gt;
* 新しい提案のために、活動休止になっているかどうかで現在アクティブな Trusted User の数を生成する。&lt;br /&gt;
&lt;br /&gt;
== フィードバック ==&lt;br /&gt;
&lt;br /&gt;
=== パッケージにコメントする ===&lt;br /&gt;
&lt;br /&gt;
[https://aur.archlinux.org AUR ウェブインターフェイス]にはコメント機能があり、[[PKGBUILD]] の貢献者にコメントで提案やフィードバックを提供することができます。&lt;br /&gt;
&lt;br /&gt;
{{Tip|コメント欄にパッチや {{ic|PKGBUILD}} をペーストするのは避けてください。それらはすぐに古くなり、不必要にスペースを圧迫するだけになります。代わりに、それらのファイルをメンテナにメールするか、[[アプリケーション一覧#Pastebin サービス|pastebin]] を使ってください。}}&lt;br /&gt;
&lt;br /&gt;
[https://python-markdown.github.io/ Python-Markdown] は、コメントをフォーマットする基本的な [[Wikipedia:ja:Markdown|Markdown]] 構文を提供します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* この実装は、公式の[https://daringfireball.net/projects/markdown/syntax 構文規則]とは一部異なる場合があります。&lt;br /&gt;
* パッケージの [[Git]] リポジトリへのコミットハッシュと、[[Flyspray]] チケットへの参照は、自動的にリンクに変換されます。&lt;br /&gt;
* 長いコメントは短く表示され、必要に応じて全文を表示できます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== パッケージに投票する ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;すべての&#039;&#039;&#039; Arch ユーザにとって最も簡単なアクティビティの1つとして、AUR のオンラインインターフェイスによる AUR のブラウズや、お気に入りのパッケージへの&#039;&#039;&#039;投票&#039;&#039;&#039;があります。すべてのパッケージは、TU によって[[公式リポジトリ#extra|extra リポジトリ]]に取り込まれる可能性があり、得票数はその過程で考慮されます。また、投票数はみんなが気にしていることでもあります。&lt;br /&gt;
&lt;br /&gt;
パッケージのブラウジングで「このパッケージに投票する」オプションを利用できるようにするには、[https://aur.archlinux.org/ AUR のウェブサイト]にサインアップしてください。サインアップ後、{{AUR|aurvote}}、{{AUR|aurvote-git}}、{{AUR|aur-auto-vote-git}} を使ってコマンドラインからも投票できるようになります。&lt;br /&gt;
&lt;br /&gt;
あるいは、[[AUR 投稿ガイドライン#認証|ssh 認証]]がセットアップ済みである場合、あなたの ssh 鍵を使ってコマンドラインから直接投票できます。これはつまり、AUR パスワードを保存・入力する手間が省けることを意味します。&lt;br /&gt;
&lt;br /&gt;
 $ ssh aur@aur.archlinux.org vote &#039;&#039;package_name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== パッケージに out-of-date フラグを立てる ===&lt;br /&gt;
&lt;br /&gt;
まず、そのパッケージに &#039;&#039;out-of-date&#039;&#039; フラグを立て、そのパッケージが out-of-date である理由の詳細や、出来ればリリースのアナウンスや新しいリリースの [[アーカイブと圧縮#アーカイブのみ|tarball]] へのリンクを含めてください。&lt;br /&gt;
&lt;br /&gt;
また、メンテナに email で直接連絡を取ってみるべきです。&#039;&#039;2周間&#039;&#039;経ってもメンテナから応答がない場合、&#039;&#039;孤児&#039;&#039;リクエストを提出することができます。詳細は [[AUR 投稿ガイドライン#リクエスト]] を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Note|[[VCS パッケージガイドライン|VCS パッケージ]]は、{{ic|pkgver}} が変更されても、out-of-date とは見なされません。VCS パッケージにはフラグを建てないでください。立てても、メンテナは単にフラグを解除し、あなたを無視するでしょう。AUR メンテナは単なる {{ic|pkgver}} のバージョンアップをコミットするべきではありません。}}&lt;br /&gt;
&lt;br /&gt;
== パッケージのビルドプロセスをデバッグする ==&lt;br /&gt;
&lt;br /&gt;
# 何かをビルドする前に[[Pacman#パッケージのアップグレード|アップグレード]]してビルド環境が最新であることを確認してください。&lt;br /&gt;
# {{Pkg|base-devel}} がインストールされていることを確認してください。&lt;br /&gt;
# ビルドプロセスを始める前に、{{ic|makepkg}} で {{ic|-s}} オプションを使って、必要とされているすべての依存関係をチェック・インストールしてください。&lt;br /&gt;
# デフォルトの [https://gitlab.archlinux.org/archlinux/packaging/packages/pacman/-/blob/main/makepkg.conf makepkg の設定]を試してください。&lt;br /&gt;
# 一般的な問題については [[Makepkg#トラブルシューティング]] を見てください。&lt;br /&gt;
&lt;br /&gt;
パッケージのビルドで問題が発生する場合、まず、そのパッケージの [[PKGBUILD]] とそのパッケージの AUR ページのコメントを読んでください。&lt;br /&gt;
&lt;br /&gt;
{{ic|PKGBUILD}} が全員の環境で壊れている場合もあり得ます。ひとりで解決できない場合、問題をメンテナに報告してください (例えば、[[#パッケージにコメントする|発生するエラーを AUR ページのコメント欄に投稿する]]など)。また、[https://bbs.archlinux.org/viewforum.php?id=38 AUR Issues, Discussion &amp;amp; PKGBUILD Requests フォーラム]で助けを得ることもできるかもしれません。&lt;br /&gt;
&lt;br /&gt;
結局、原因が些細なことではない場合もあります。カスタムの {{ic|CFLAGS}}、{{ic|LDFLAGS}}、{{ic|MAKEFLAGS}} フラグは失敗を引き起こす可能性があります。あなたのシステム構成によって引き起こされる問題を回避するには、パッケージを[[:en:DeveloperWiki:Building in a clean chroot|クリーンな chroot]] 内でビルドしてください。ビルドプロセスがクリーンな chroot 内でも失敗する場合、原因はおそらく {{ic|PKGBUILD}} にあるのでしょう。&lt;br /&gt;
&lt;br /&gt;
{{ic|namcap}} の使用に関しては [[パッケージの作成#パッケージの正常性のテスト]] を見てください。{{ic|PKGBUILD}} をレビューしてもらいたいならば、[https://lists.archlinux.org/mailman3/lists/aur-general.lists.archlinux.org/ aur-general メーリングリスト]に投稿して TU やフェロー AUR メンバーからフィードバックをもらうか、[https://bbs.archlinux.org/viewforum.php?id=4 Creating &amp;amp; Modifying Packages フォーラム]に投稿してください。また、[https://libera.chat Libera Chat] ネットワーク上の [[IRC チャンネル]] [ircs://irc.libera.chat/archlinux-aur #archlinux-aur] で助けを乞うこともできます。&lt;br /&gt;
&lt;br /&gt;
== パッケージを投稿する ==&lt;br /&gt;
&lt;br /&gt;
ユーザは、Arch User Repository を使って [[PKGBUILD]] を共有できます。詳細は [[AUR 投稿ガイドライン]] を見てください。&lt;br /&gt;
&lt;br /&gt;
== ウェブインターフェイスの翻訳 ==&lt;br /&gt;
&lt;br /&gt;
[https://aur.archlinux.org AUR ウェブインターフェイス]の翻訳の作成とメンテナンスについては AUR ソースツリーの [https://gitlab.archlinux.org/archlinux/aurweb/-/blob/master/doc/i18n.txt i18n.txt] を見てください。&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
&lt;br /&gt;
=== どのような種類のパッケージが AUR に置かれていますか？ ===&lt;br /&gt;
&lt;br /&gt;
AUR にあるパッケージはたんに&amp;quot;ビルドスクリプト&amp;quot;、つまり pacman 用にバイナリをビルドするレシピにすぎません。ほとんどの場合、[[AUR 投稿ガイドライン#投稿の規則|有用性と範囲のガイドライン]]を条件として、コンテンツのライセンスの問題がない限り、すべてのものが置くことを許されています。他の場合、ダウンロードにリンクできない、つまり再配布が禁止されている時は、ソースとしてファイル名だけを使うことができます。よってパッケージをビルドするには、ユーザーによってビルドディレクトリにその制限されたソースを入れておく必要があります。どちらかわからない場合は、尋ねて下さい。&lt;br /&gt;
&lt;br /&gt;
=== どうすれば AUR 内のパッケージに投票できますか？ ===&lt;br /&gt;
&lt;br /&gt;
[[#パッケージに投票する]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== Trusted User / TU とは何ですか？ ===&lt;br /&gt;
&lt;br /&gt;
[[AUR Trusted User ガイドライン|Trusted User]] (略して TU) とは、AUR と [[extra リポジトリ]]を監督するように選ばれた人のことです。彼らは &#039;&#039;extra&#039;&#039; に入っている人気の [[PKGBUILD]] を管理していて、みんなで AUR を運営し続けています。&lt;br /&gt;
&lt;br /&gt;
=== Arch User Repository と extra リポジトリの違いは何ですか？ ===&lt;br /&gt;
&lt;br /&gt;
Arch User Repository にはユーザーが投稿した全ての [[PKGBUILD]] が保存されており、利用するには手動で [[makepkg]] を使ってビルドしなくてはなりません。{{ic|PKGBUILD}} にコミュニティの十分な関心が集まると、パッケージは [[extra リポジトリ]]に移され TU が管理するバイナリパッケージとなり、[[pacman]] によってインストールできるようになります。&lt;br /&gt;
&lt;br /&gt;
=== AUR の Hoge が古くなっています、どうするべきでしょうか？ ===&lt;br /&gt;
&lt;br /&gt;
[[#パッケージに out-of-date フラグを立てる]] を見てください。&lt;br /&gt;
&lt;br /&gt;
その間、ローカルで [[PKGBUILD]] を自分で編集してパッケージをアップデートしてみることもできます。アップデートにビルドプロセスの変更が必要ない場合もあり、この場合、{{ic|pkgver}} か {{ic|source}} 配列を更新するだけで十分です。&lt;br /&gt;
&lt;br /&gt;
=== AUR の Hoge を makepkg でコンパイルすることができません。どうしたらいいですか？ ===&lt;br /&gt;
&lt;br /&gt;
何か些細なことを見逃しているのかもしれません。[[#パッケージのビルドプロセスをデバッグする]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== ERROR: One or more PGP signatures could not be verified! この場合、どうすればよいですか？ ===&lt;br /&gt;
&lt;br /&gt;
最もあり得るのは、ダウンロードしたファイルを検証するために必要な公開鍵があなたの個人キーリング内に存在しないことです。詳細は [[Makepkg#署名チェック]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== どうやって PKGBUILD を作るのですか？ ===&lt;br /&gt;
&lt;br /&gt;
[[AUR 投稿ガイドライン#投稿の規則]] を見て、次に [[パッケージの作成]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== PKGBUILD を作って投稿したいと思っています。エラーがないか誰かチェックしてくれるでしょうか？ ===&lt;br /&gt;
&lt;br /&gt;
パッケージをレビューのために提出できるチャネルが複数存在します。[[#パッケージのビルドプロセスをデバッグする]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== どうすれば PKGBUILD が extra リポジトリに移されるのですか？ ===&lt;br /&gt;
&lt;br /&gt;
通常、パッケージを [[extra リポジトリ]] に移すには最低 10 票必要です。しかし、[[TU]] がパッケージをサポートしたいと望んだときは、&#039;&#039;extra&#039;&#039; リポジトリに入ることがしばしばあります。&lt;br /&gt;
&lt;br /&gt;
必要な最低投票数に到達することは唯一の要件ではありません。そのパッケージをメンテナンスしてもよいという TU がいなければなりません。たとえパッケージに数千もの投票があったとしても、TU は &#039;&#039;extra&#039;&#039; リポジトリにそのパケージを移す必要はないのです。&lt;br /&gt;
&lt;br /&gt;
通常、非常に人気なパッケージが AUR に残っている理由としては:&lt;br /&gt;
&lt;br /&gt;
* Arch Linux のリポジトリ内にパッケージの他のバージョンがすでに存在するから&lt;br /&gt;
* ライセンスで再配布が禁止されているから&lt;br /&gt;
* そのパッケージが、ユーザによって投稿された [[PKGBUILD]] の取得を補助するものだから。[[AUR ヘルパー]] は、当然、[https://bbs.archlinux.org/viewtopic.php?pid=828310#p828310 サポートされていません]。&lt;br /&gt;
&lt;br /&gt;
[[AUR Trusted User ガイドライン#extra リポジトリにパッケージを入れるときのルール|extra リポジトリにパッケージを入れるときのルール]] も見てください。&lt;br /&gt;
&lt;br /&gt;
=== 繰り返されるビルドプロセスを速めるにはどうすればよいですか？ ===&lt;br /&gt;
&lt;br /&gt;
[[Makepkg#コンパイル時間を短縮する]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== foo と foo-git パッケージは何が違うのですか？ ===&lt;br /&gt;
&lt;br /&gt;
多くの AUR パッケージには安定バージョン (&amp;quot;stable&amp;quot;) と開発バージョン (&amp;quot;unstable&amp;quot;) が存在します。開発版のパッケージには大抵、バージョン管理システムを示す[[VCS パッケージガイドライン|接尾辞]]が付いており、通常の使用を意図していません。しかし、それらは新しい機能やバグフィックスを提供している場合があります。&lt;br /&gt;
&lt;br /&gt;
{{ic|makepkg}} を実行した時、これらのパッケージは最新のソースをダウンロードするので、{{ic|pkgver()}} は必ずしも上流と合っていません。同じく、これらのパッケージは、如何なる [[VCS パッケージガイドライン#VCS ソース|VCS ソース]]のチェックサムの確認もできません。&lt;br /&gt;
&lt;br /&gt;
[[システムメンテナンス#実績のあるソフトウェアパッケージを使用する]] も見てください。&lt;br /&gt;
&lt;br /&gt;
=== Foo が AUR から消えたのはなぜですか？ ===&lt;br /&gt;
&lt;br /&gt;
パッケージが [[TU]] によって引き取られ、現在は [[extra リポジトリ]] に存在している可能性があります。&lt;br /&gt;
&lt;br /&gt;
また、[[AUR 投稿ガイドライン#投稿の規則|投稿の規則]]に違反していたため、削除されてしまった可能性もあります。削除の理由は、[https://lists.archlinux.org/archives/list/aur-requests@lists.archlinux.org/ aur-requests アーカイブ] を見てください。&lt;br /&gt;
&lt;br /&gt;
{{Note|削除されたパッケージの git リポジトリは、通常、利用可能なままになります。詳細は [[AUR 投稿ガイドライン#リクエスト]] を見てください。}}&lt;br /&gt;
&lt;br /&gt;
そのパッケージが AUR3 に存在していた場合、[https://lists.archlinux.org/archives/list/aur-general@lists.archlinux.org/message/NJN6TPVF6MWGF7BCHBMBYFZ5JDAPOHP5/ AUR4 に移行]されなかったのかもしれません。そのようなパッケージが保存されている場所である [[#AUR3 パッケージの Git リポジトリ]] を見てください。&lt;br /&gt;
&lt;br /&gt;
=== インストール済みのパッケージが AUR から消えてしまっているかどうかを確かめるには？ ===&lt;br /&gt;
&lt;br /&gt;
最もシンプルな方法は、そのパッケージの AUR ページの HTTP ステータスをチェックすることです:&lt;br /&gt;
&lt;br /&gt;
 $ comm -23 &amp;lt;(pacman -Qqm | sort) &amp;lt;(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)&lt;br /&gt;
&lt;br /&gt;
=== 全ての AUR パッケージのリストを入手するには？ ===&lt;br /&gt;
&lt;br /&gt;
* https://aur.archlinux.org/packages.gz&lt;br /&gt;
* {{aur|python3-aur}} の {{ic|aurpkglist}} を使ってください&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://aur.archlinux.org AUR ウェブインターフェイス]&lt;br /&gt;
* [https://lists.archlinux.org/mailman3/lists/aur-general.lists.archlinux.org/ AUR メーリングリスト]&lt;br /&gt;
&lt;br /&gt;
{{TranslationStatus|Arch User Repository|2023-06-14|779733}}&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=AppArmor&amp;diff=31733</id>
		<title>AppArmor</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=AppArmor&amp;diff=31733"/>
		<updated>2023-05-22T00:50:03Z</updated>

		<summary type="html">&lt;p&gt;Hikali: cat コマンドの後ろにスペースを追加&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:アクセス制御]]&lt;br /&gt;
[[Category:カーネル]]&lt;br /&gt;
[[bs:AppArmor]]&lt;br /&gt;
[[en:AppArmor]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|セキュリティ}}&lt;br /&gt;
{{Related|TOMOYO Linux}}&lt;br /&gt;
{{Related|SELinux}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[[Wikipedia:AppArmor|AppArmor]] は[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (MAC) のシステムです。[[Wikipedia:ja:Linux_Security_Modules|Linux Security Modules]] (LSM) 上に実装されています。&lt;br /&gt;
&lt;br /&gt;
他の LSM と同じように、AppArmor はデフォルトの任意アクセス制御 (DAC) を置き換えるというよりも補完するものです。そのため、プロセスに最初から持っている権限よりも高い権限を与えることはできません。&lt;br /&gt;
&lt;br /&gt;
Ubuntu や SUSE などのディストリビューションはデフォルトで AppArmor を使用しています。RHEL (とその派生) は正しく機能させるのにユーザー空間における設定が必要になる SELinux を使っています。SELinux は全てのファイル・プロセス・オブジェクトにラベルを貼るため非常に柔軟性があります。しかしながら SELinux の設定は非常に複雑で、ファイルシステムが SELinux に対応していなければなりません。それに比べて AppArmor はファイルパスを使用するため簡単に設定することができます。&lt;br /&gt;
&lt;br /&gt;
AppArmor は外部・内部からの脅威に対してオペレーティングシステムやアプリケーションを防護します。アプリケーションごとにルールセットを決めることでゼロデイ攻撃からも身を守ることができます。セキュリティポリシーによって個々のアプリケーションがアクセスできるシステムリソースは厳格に定められます。何もプロファイルが設定されていない場合、デフォルトでアクセスは拒否されます。AppArmor に付属しているデフォルトポリシーは少ない数しかありません。高度な静的解析・学習ツールを使用することで、非常に複雑なアプリケーションでも問題なく動作するような AppArmor ポリシーを数時間で作成できます。&lt;br /&gt;
&lt;br /&gt;
ポリシー違反が発生するとシステムログにメッセージが残ります。また、AppArmor ではデスクトップにポップアップを表示することで、リアルタイムにユーザーに通知するように設定することもできます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
AppArmor は[[カーネル#公式パッケージ|公式でサポートしているカーネル]]に含まれています。&lt;br /&gt;
&lt;br /&gt;
起動時にデフォルトのセキュリティモデルとして AppArmor を有効にするには、以下の[[カーネルパラメータ]]を設定:&lt;br /&gt;
&lt;br /&gt;
 lsm=landlock,lockdown,yama,apparmor,bpf&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=lsm=}} カーネル・パラメータは、Linux セキュリティ・モジュールの初期化順序を設定します。カーネルに設定された {{ic|1=lsm=}} 値は {{ic|1=zgrep CONFIG_LSM= /proc/config.gz}} で、現在の値は {{ic|cat /sys/kernel/security/lsm}} です。&lt;br /&gt;
* {{ic|apparmor}} がリストの最初の &amp;quot;major&amp;quot; モジュールであることを確認してください。[https://www.kernel.org/doc/html/latest/admin-guide/LSM/index.html] 有効な値とその順序の例については、 [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/security/Kconfig security/Kconfig] を参照してください。&lt;br /&gt;
* {{ic|capability}} は常に自動的に含まれるため、{{ic|1=lsm=}} では省略する必要があります。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
AppArmor を制御するためのユーザースペースツールやライブラリは {{Pkg|apparmor}} パッケージで[[インストール]]できます。起動時に全ての AppArmor プロファイルをロードするには、{{ic|apparmor.service}} を[[有効化]]してください。&lt;br /&gt;
&lt;br /&gt;
=== カスタムカーネル ===&lt;br /&gt;
&lt;br /&gt;
[[カーネル#コンパイル|カーネルをコンパイル]]するとき、以下のオプションを設定する必要があります:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_SECURITY_APPARMOR=y&lt;br /&gt;
 CONFIG_AUDIT=y&lt;br /&gt;
&lt;br /&gt;
AppArmor Linux セキュリティモデルをデフォルトで有効にし、カーネルパラメータで設定する必要を無くすには、さらに {{ic|CONFIG_LSM}} オプションを設定し、リストの最初の &amp;quot;major&amp;quot; モジュールとして {{ic|apparmor}} を指定します。&lt;br /&gt;
&lt;br /&gt;
 CONFIG_LSM=&amp;quot;landlock,lockdown,yama,apparmor,bpf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== 使用方法 ==&lt;br /&gt;
&lt;br /&gt;
=== 現在の状態を表示 ===&lt;br /&gt;
&lt;br /&gt;
AppArmor が有効になっているか確認するには:&lt;br /&gt;
&lt;br /&gt;
{{hc|$ aa-enabled|&lt;br /&gt;
Yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
ロードされている状態を表示するには {{ic|apparmor_status}} を使用:&lt;br /&gt;
&lt;br /&gt;
{{hc|# apparmor_status|&lt;br /&gt;
apparmor module is loaded.&lt;br /&gt;
44 profiles are loaded.&lt;br /&gt;
44 profiles are in enforce mode.&lt;br /&gt;
 ...&lt;br /&gt;
0 profiles are in complain mode.&lt;br /&gt;
0 processes have profiles defined.&lt;br /&gt;
0 processes are in enforce mode.&lt;br /&gt;
0 processes are in complain mode.&lt;br /&gt;
0 processes are unconfined but have a profile defined.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== プロファイルの解析 ===&lt;br /&gt;
&lt;br /&gt;
プロファイルをロード・アンロード・リロード・確認するには {{ic|apparmor_parser}} を使います。デフォルトでは enforce モードで新しいプロファイルをロードするようになっており ({{ic|-a}})、{{ic|-C}} スイッチを使うことで complain モードでロードできます。既存のプロファイルを上書きするには {{ic|-r}} オプションを、プロファイルを削除するには {{ic|-R}} を使います。各操作では複数のプロファイルを指定できます。詳しくは {{man|8|apparmor_parser}} の man ページを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ロードの無効化 ===&lt;br /&gt;
&lt;br /&gt;
全てのプロファイルをアンロードすることで現在のセッションで AppArmor が無効化されます:&lt;br /&gt;
&lt;br /&gt;
 # aa-teardown &lt;br /&gt;
&lt;br /&gt;
次の起動時に AppArmor プロファイルがロードされないようにしたい場合は {{ic|apparmor.service}} を[[無効化]]してください。カーネルが AppArmor をロードしないようにするには、[[カーネルパラメータ]]から {{ic|1=apparmor=1 security=apparmor}} を削除します。&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
=== 監査とプロファイルの作成 ===&lt;br /&gt;
新しいプロファイルを作成するには、 [[Audit フレームワーク]] を実行する必要があります。これは、Arch Linux がデフォルトで [[systemd]] を採用し、ファイルへの kernel logging を行わないためです。AppArmor は、ユーザー空間の auditd デーモンからカーネル監査ログを取得し、プロファイルを構築できます。&lt;br /&gt;
&lt;br /&gt;
新しい AppArmor プロファイルは、{{man|8|aa-genprof}} または {{man|8|aa-autodep}} を使用して作成できます。プロファイルは最初に &#039;&#039;complain mode&#039;&#039; で作成されます。このモードでは、ポリシー違反は報告されるだけで、強制されません。ルールは、{{pkg|apparmor}} パッケージの {{man|8|aa-logprof}} ツールによってインタラクティブに作成されます。最後に、{{man|8|aa-enforce}} を使用して、プロファイルを &#039;&#039;enforce mode&#039;&#039; に設定する必要があります。このモードでは、対応するプロファイルのルールによって定義されたポリシーが適用されます。必要に応じて、{{man|8|aa-logprof}} を繰り返し実行してルールを追加したり、{{man|8|aa-apprait}} を使用してプロファイルを警告モードに戻すことができます。これらのツールの使用方法の詳細については、 [https://gitlab.com/apparmor/apparmor/wikis/Profiling_with_tools AppArmor wiki-Profiling with tools] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{man|8|aa-logprof}} には &#039;&#039;deny&#039;&#039; ルールも用意されていますが、これは基本的な AppArmor ロジックによれば、ルールによって明示的に許可されていないものはすべて禁止されているため、厳密には必要ではありません。ただし、&#039;&#039;deny&#039;&#039; 規則には2つの目的があります。&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;deny&#039;&#039; ルールは &#039;&#039;allow&#039;&#039; ルールよりも優先されます。重要なフォルダやファイルへのアクセスをブロックするために、{{ic|/etc/apparmor.d/abstractions}} にある多くの [https://man.archlinux.org/man/extra/apparmor/apparmor.d.5.en##include_mechanism abstractions] でよく使用されます。これにより、誤って作成された許可ルールによってプロファイルが過度に許可されることがなくなります。&lt;br /&gt;
#&#039;&#039;allow&#039;&#039; ルールは、logging を無効にし、以降の &#039;&#039;aa-logprof&#039;&#039; の実行ノイズを減らします。&#039;&#039;deny&#039;&#039; ルールは &#039;&#039;complain mode&#039;&#039; でも適用されることを覚えておくことが重要です。 アプリケーションが苦情モードでも適切に動作しない場合、プロファイルまたは拒否ルールをチェックしてください。&lt;br /&gt;
&lt;br /&gt;
また、手動でプロファイルを作成することもできます。詳細については、 [https://gitlab.com/apparmor/apparmor/wikis/Profiling_by_hand AppArmor wiki-Profiling by hand] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== プロファイルの構文 ===&lt;br /&gt;
&lt;br /&gt;
プロファイルは人間が読める形式のテキストファイルとなっており {{ic|/etc/apparmor.d/}} に保存されます。バイナリを実行時にどう扱うかを記述します。基本的なプロファイルは以下のようになります:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/apparmor.d/usr.bin.test|&lt;br /&gt;
#include &amp;lt;tunables/global&amp;gt;&lt;br /&gt;
&lt;br /&gt;
profile test /usr/lib/test/test_binary {&lt;br /&gt;
    #include &amp;lt;abstractions/base&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # Main libraries and plugins&lt;br /&gt;
    /usr/share/TEST/** r,&lt;br /&gt;
    /usr/lib/TEST/** rm,&lt;br /&gt;
&lt;br /&gt;
    # Configuration files and logs&lt;br /&gt;
    @{HOME}/.config/ r,&lt;br /&gt;
    @{HOME}/.config/TEST/** rw,&lt;br /&gt;
}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|@}} 記号が前に付くテキストは abstraction ({{ic|/etc/apparmor.d/abstractions/}}) や tunable ({{ic|/etc/apparmor.d/tunables/}}) あるいはプロファイルによって定義される変数を表します。{{ic|#include}} は他のプロファイルふを直接読み込みます。後ろに文字がいくつか付いているパスは [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#file-access-rules アクセス権限] です。[https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#apparmor-globbing-syntax AppArmor の globbing 構文] を使用したパターンマッチングが行われます。&lt;br /&gt;
&lt;br /&gt;
ほとんどのユースケースは以下のステートメントで表すことができます:&lt;br /&gt;
&lt;br /&gt;
* {{ic|r}} — read: データの読み込み。&lt;br /&gt;
* {{ic|w}} — write: ファイルの作成・削除・編集と拡張。&lt;br /&gt;
* {{ic|m}} — memory map executable: ファイルを実行可能とメモリマップ。&lt;br /&gt;
* {{ic|x}} — execute: ファイルを実行。[https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference#execute-rules 修飾子] を付ける必要があります。&lt;br /&gt;
&lt;br /&gt;
上記の権限は任意アクセス制御 (DAC) によって与えられる権限を上回ることはできません。&lt;br /&gt;
&lt;br /&gt;
詳しいガイドは {{man|5|apparmor.d}} の man ページや [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference ドキュメント] を見てください。&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
=== DENIED アクション時にデスクトップ通知を表示 ===&lt;br /&gt;
&lt;br /&gt;
通知デーモンは AppArmor によってプログラムのアクセスが拒否されたときにデスクトップ通知を表示します。{{ic|aa-notify}} デーモンをログイン時に自動的に起動するには以下の手順に従ってください。&lt;br /&gt;
&lt;br /&gt;
[[Audit フレームワーク]]をインストール・有効化してください。{{ic|audit}} [[グループ|ユーザーグループ]]にユーザーを追加することで {{ic|/var/log/audit}} の監査ログを読み込めるようにします:&lt;br /&gt;
&lt;br /&gt;
 # groupadd -r audit&lt;br /&gt;
 # gpasswd -a &amp;lt;username&amp;gt; audit&lt;br /&gt;
&lt;br /&gt;
{{ic|audit}} グループを {{ic|auditd.conf}} に追加:&lt;br /&gt;
{{hc|/etc/audit/auditd.conf|2=&lt;br /&gt;
log_group = audit&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|wheel}} や {{ic|adm}} など既存のシステムグループを使用することもできます。}}&lt;br /&gt;
&lt;br /&gt;
{{Pkg|python-notify2}} と {{Pkg|python-psutil}} を [[インストール]] します。&lt;br /&gt;
&lt;br /&gt;
以下のコンテンツで [[デスクトップランチャー]] を作成します。&lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/autostart/apparmor-notify.desktop|2=&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Type=Application&lt;br /&gt;
Name=AppArmor Notify&lt;br /&gt;
Comment=Receive on screen notifications of AppArmor denials&lt;br /&gt;
TryExec=/usr/bin/aa-notify&lt;br /&gt;
Exec=/usr/bin/aa-notify -p -s 1 -w 60 -f /var/log/audit/audit.log&lt;br /&gt;
StartupNotify=false&lt;br /&gt;
NoDisplay=true&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
再起動して {{ic|aa-notify}} デーモンが稼働しているか確認:&lt;br /&gt;
&lt;br /&gt;
 $ pgrep -ax aa-notify&lt;br /&gt;
&lt;br /&gt;
{{Note|システムの設定によっては多数の通知が表示されます。}}&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|8|aa-notify}} を参照。&lt;br /&gt;
&lt;br /&gt;
=== プロファイルをキャッシュして AppArmor の起動を高速化 ===&lt;br /&gt;
&lt;br /&gt;
AppArmor は設定されたプロファイルをバイナリ形式に翻訳する必要があるため、プロファイルのロードにはしばらく時間がかかります。煩わしいことに起動時間がかなり伸びてしまいます。AppArmor の起動時間は以下のコマンドで確認できます:&lt;br /&gt;
&lt;br /&gt;
 $ systemd-analyze blame | grep apparmor&lt;br /&gt;
&lt;br /&gt;
AppArmor プロファイルのキャッシュを有効化するには、以下をアンコメント:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/apparmor/parser.conf|2=&lt;br /&gt;
## Turn creating/updating of the cache on by default&lt;br /&gt;
write-cache&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
デフォルトのキャッシュ場所を変更するには以下を追加:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/apparmor/parser.conf|2=&lt;br /&gt;
cache-loc=/path/to/location&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|2.13.1 からデフォルトのキャッシュ保存場所は {{ic|/var/cache/apparmor/}} となっています。以前は {{ic|/etc/apparmor.d/cache.d/}} でした。}}&lt;br /&gt;
&lt;br /&gt;
再起動して AppArmor の起動時間が変化したか確認してください:&lt;br /&gt;
&lt;br /&gt;
 $ systemd-analyze blame | grep apparmor&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== Samba SMB/CIFS サーバーを起動できない ===&lt;br /&gt;
&lt;br /&gt;
[[Samba#AppArmor におけるパーミッションの問題]] を参照&lt;br /&gt;
&lt;br /&gt;
=== aa-logprof でイベントが捕捉されない ===&lt;br /&gt;
&lt;br /&gt;
[[Audit フレームワーク]] のログに特殊文字 {{ic|0x1d}} [https://github.com/linux-audit/audit-userspace/issues/3] が含まれる場合があります。[https://gitlab.com/apparmor/apparmor/-/issues/271 AppArmor バグレポート] がありますが、回避策として次を実行します。&lt;br /&gt;
&lt;br /&gt;
 # aa-logprof -f &amp;lt;(sed &#039;s/\x1d.*//&#039; &amp;lt; /var/log/audit/audit.log)&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://gitlab.com/apparmor/apparmor/wikis/home AppArmor wiki]&lt;br /&gt;
* [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_Core_Policy_Reference AppArmor Core Policy Reference] — プロファイルで利用できるオプションの詳しい解説&lt;br /&gt;
* [https://ubuntuforums.org/showthread.php?t=1008906 Ubuntu Tutorial] — 利用可能なユーティリティとプロファイルの作成に関する概要&lt;br /&gt;
* [https://help.ubuntu.com/community/AppArmor Ubuntu Wiki] — 基本的なコマンドの一覧&lt;br /&gt;
* [https://gitlab.com/apparmor/apparmor/wikis/AppArmor_versions AppArmor Versions] — バージョンの概要とリリースノートのリンク&lt;br /&gt;
* [https://gitlab.com/apparmor/apparmor/wikis/Kernel_interfaces Kernel Interfaces] — AppArmor カーネルモジュールの低レベルインターフェイス&lt;br /&gt;
* [[wikipedia:Linux Security Modules]] — AppArmor が使用している Linux カーネルモジュール&lt;br /&gt;
* [https://doc.opensuse.org/documentation/leap/security/single-html/book.security/index.html#part.apparmor AppArmor in openSUSE Security Guide]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=29597</id>
		<title>セキュリティ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=29597"/>
		<updated>2023-02-01T00:47:06Z</updated>

		<summary type="html">&lt;p&gt;Hikali: /* セキュアブート */ 語尾の修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:セキュリティ]]&lt;br /&gt;
[[Category:ファイルシステム]]&lt;br /&gt;
[[Category:ネットワーク]]&lt;br /&gt;
[[en:Security]]&lt;br /&gt;
[[fa:امنیت]]&lt;br /&gt;
[[ru:Security]]&lt;br /&gt;
[[zh-hans:Security]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|PAM}}&lt;br /&gt;
{{Related|ケイパビリティ}}&lt;br /&gt;
{{Related|アプリケーション一覧/セキュリティ}}&lt;br /&gt;
{{Related|:カテゴリ:セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
この記事では Arch Linux システムを防御するための推奨事項とベストプラクティスを並べています。&lt;br /&gt;
&lt;br /&gt;
==概念==&lt;br /&gt;
*セキュリティを厳しくするあまりシステムが使い物にならなくなってしまう可能性があります。うまいやり方は度を越さない程度にセキュリティを強化します。&lt;br /&gt;
*セキュリティを高めるために出来ることは数多く存在しますが、一番の脅威はいつだってユーザー自身です。セキュリティを考える時は、多層防御を考える必要があります。ある層が突破されたとしても、他の層が攻撃を防御しなくてはなりません。ただし全てのネットワークからマシンを切断して、金庫にしまって決して使わないかぎり、システムを100%セキュアにすることは不可能です。&lt;br /&gt;
*少しだけ病的なまでの心配性 (パラノイド) になりましょう。それは役に立ちます。そして疑り深くなってください。話がうますぎるように聞こえたら、おそらくその通りです。&lt;br /&gt;
*[[Wikipedia:ja:最小権限の原則|最小権限の原則]]: システムの各部位は使用に必要なことにだけしかアクセスできないようにするべきで、それ以上は必要ありません。&lt;br /&gt;
&lt;br /&gt;
==パスワード==&lt;br /&gt;
パスワードは安全な linux システムのかぎです。パスワードは[[ユーザーとグループ|ユーザーアカウント]], [[ディスク暗号化|暗号化されたファイルシステム]], [[SSH 鍵|SSH]]/[[GPG]] 鍵などを守ります。コンピュータを使用する人を信頼するのに使う主要な手段なので、安全なパスワードを選んでそれを保護するというのがセキュリティの大部分と言っても過言ではありません。&lt;br /&gt;
&lt;br /&gt;
===強力なパスワードの選び方===&lt;br /&gt;
&lt;br /&gt;
パスワードは簡単に[[Wikipedia:ja:パスワードクラック|割り出されたり]]または個人情報から類推されないようにすることが重要です。そういうわけで、辞書に載っている単語やあなたの飼っている犬の名前などは使わないようにしましょう。パスワードは出来るだけ8文字以上で、小文字と大文字を混ぜてください。さらに数字や特殊文字も1文字以上含めると良いでしょう。当たり前ですが、長くて複雑なパスワードが基本的に良いパスワードとされます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pwgen}} や {{AUR|apg}} などのツールは安全なパスワードを生成するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
また、ある文章の各単語の一番最初を取ってパスワードを作ることもできます。&lt;br /&gt;
例えば “the girl is walking down the rainy street” なら “t6!WdtR5” とパスワードにすることができます。この方法はパスワードを覚えるのをずっと簡単にしてくれます。さらに、入力するのが面倒くさくなりますがパスワードを “The girl is walking down the rainy street&amp;quot; にすることも可能です。&lt;br /&gt;
&lt;br /&gt;
===パスワードの管理===&lt;br /&gt;
強固なパスワードを選び出したら、それを安全に保管してください。[[Wikipedia:ja:ソーシャル・エンジニアリング|心理操作]]や[[Wikipedia:Shoulder surfing (computer security)|ショルダーサーフィン]]に注意したり、セキュアでないサーバーから必要以上に情報が流出するのをふせぐためにパスワードを再利用しないようにしてください。{{Pkg|pass}}, {{AUR|keepassx}}, {{Pkg|gnome-keyring}} などのツールは大量の複雑なパスワードを管理するのに役立ちます。[[Wikipedia:ja:LastPass|Lastpass]] はデバイス間で同期するためにオンラインで暗号化されたパスワードを保存するサービスですが、クローズドソースのコードと外部の企業の両方を信頼する必要があります。&lt;br /&gt;
&lt;br /&gt;
概して、安全なパスワードは覚えにくいからといって安全でないパスワードを使ってはいけません。パスワードはバランスを取る必要があります。弱いパスワードをたくさん作るよりは、安全なパスワードの暗号化されたデータベースを作り、一つの強いマスターパスワードで守るほうが良いでしょう。パスワードを紙に書くのも、物理的なセキュリティを必要としますがソフトウェアの脆弱性を防ぐ点では同じくらい有効です [https://www.schneier.com/blog/archives/2005/06/write_down_your.html]。&lt;br /&gt;
&lt;br /&gt;
===パスワードのハッシュ===&lt;br /&gt;
{{Warning|SHA512 は高速なハッシュ関数として設計されており、パスワードのハッシュ用には作られていません。bcrypt や scrypt などに比べて SHA512 によってハッシュ化されたパスワードには攻撃者は&#039;&#039;はるかに&#039;&#039;高速にブルートフォース攻撃をすることができます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch のハッシュ [[SHA パスワードハッシュ|sha512]] はとても強固で変更する必要はありません。デフォルトでは、{{ic|/etc/shadow}} にパスワードがハッシュ化されて保存され、root にだけ読み取り許可を与え、{{ic|/etc/passwd}} にはユーザー識別子だけが保存されます。従って、[[#root の制限|root ユーザーが安全]]である限り、ファイルが外部システムにコピーされたり解読されることはありえません。&lt;br /&gt;
&lt;br /&gt;
[http://www.slashroot.in/how-are-passwords-stored-linux-understanding-hashing-shadow-utils How are passwords stored in Linux (Understanding hashing with shadow utils)] も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== pam_cracklib を用いた強力なパスワードの強制 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pam_cracklib&#039;&#039; は[[Wikipedia:ja:辞書攻撃|辞書攻撃]]からの防御を提供し、システム全体で強制するパスワードポリシーの設定を補助します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;root&#039;&#039; アカウントはこのポリシーの影響を受けません。}}&lt;br /&gt;
{{Note|&#039;&#039;root&#039;&#039; アカウントを利用することで望ましい/設定されたポリシーを迂回したユーザーのパスワードを設定することができます。これは一時的なパスワードを設定するときに便利です。}}&lt;br /&gt;
&lt;br /&gt;
例えば以下のようなポリシーを強制させたい場合:&lt;br /&gt;
* エラー時に2回パスワードプロンプト&lt;br /&gt;
* 最小で10文字の長さ (minlen オプション)&lt;br /&gt;
* 新しくパスワードを設定する場合、少なくとも6文字は古いパスワードと異なる (difok オプション)&lt;br /&gt;
* 少なくとも1文字数字を含む (dcredit オプション)&lt;br /&gt;
* 少なくとも1文字は大文字を含む (ucredit オプション)&lt;br /&gt;
* 少なくとも1文字は異なる文字を含む (ocredit オプション)&lt;br /&gt;
* 少なくとも1文字は小文字を含む (lcredit オプション)&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/pam.d/passwd}} ファイルを以下のように書き換えます:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
password required pam_cracklib.so retry=2 minlen=10 difok=6 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1&lt;br /&gt;
password required pam_unix.so use_authtok sha512 shadow&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|password required pam_unix.so use_authtok}} でパスワードのプロンプトを表示するときに &#039;&#039;pam_unix&#039;&#039; モジュールではなく &#039;&#039;pam_cracklib&#039;&#039; によるプロンプトを使うようになります。&lt;br /&gt;
&lt;br /&gt;
詳細な情報については pam_cracklib(8) と pam_unix(8) の man ページを参照してください。&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
=== マイクロコード ===&lt;br /&gt;
&lt;br /&gt;
CPU のマイクロコードに対する重要なセキュリティ更新プログラムをインストールする方法については、[[マイクロコード]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアの脆弱性 ===&lt;br /&gt;
&lt;br /&gt;
CPU の中には、ハードウェアの脆弱性を含んでいるものがあります。これらの脆弱性の一覧と、特定の使用シナリオに合わせてこれらの脆弱性を緩和するためにカーネルをカスタマイズするのに役立つ緩和策の選択ガイドについては、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/ kernel documentation on hardware vulnerabilities] を参照してください。&lt;br /&gt;
&lt;br /&gt;
既知の脆弱性の影響を受けているかどうかを確認するには、以下を実行してください。&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/devices/system/cpu/vulnerabilities/&lt;br /&gt;
&lt;br /&gt;
ほとんどの場合、カーネルとマイクロコードを更新することで、脆弱性を軽減することができます。&lt;br /&gt;
&lt;br /&gt;
==== 同時マルチスレッディング (ハイパースレッディング) ====&lt;br /&gt;
&lt;br /&gt;
[https://ja.wikipedia.org/wiki/%E5%90%8C%E6%99%82%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0 同時マルチスレッディング]] (SMT) は、インテル CPU のハイパースレッディングとも呼ばれ、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html L1 Terminal Fault] および [https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html Microarchitectural Data Sampling] 脆弱性の原因となる可能性のあるハードウェア機能です。Linux カーネルとマイクロコードのアップデートには、既知の脆弱性に対する緩和策が含まれていますが、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html#virtualization-with-untrusted-guests 信頼できない仮想化ゲストが存在する場合、特定の CPU で SMT を無効にしたほうが良い場合があります。]&lt;br /&gt;
&lt;br /&gt;
SMT は、システムのファームウェアで無効にできることがよくあります。詳細については、マザーボードまたはシステムのドキュメントを参照してください。また、以下の [[カーネルパラメータ]] を追加することで、カーネルで SMT を無効にすることができます。&lt;br /&gt;
&lt;br /&gt;
 l1tf=full,force mds=full,nosmt mitigations=auto,nosmt nosmt=force&lt;br /&gt;
&lt;br /&gt;
== メモリ ==&lt;br /&gt;
&lt;br /&gt;
===ハード化された malloc ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/GrapheneOS/hardened_malloc hardened_malloc] ({{AUR|hardened_malloc}}, {{AUR|hardened-malloc-git}}) は [https://ja.wikipedia.org/wiki/GNU_C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA glibc] の malloc() をハード化した代替品です。元々は Android の [[Wikipedia:Bionic (software)|Bionic]] と [https://ja.wikipedia.org/wiki/Musl musl] に組み込むために開発されましたが、 x86_64 アーキテクチャの標準 Linux ディストリビューションのサポートにも組み込みました。&lt;br /&gt;
&lt;br /&gt;
hardened_malloc はまだ glibc に統合されていませんが（支援とプルリクエストは歓迎します）、LD_PRELOAD と一緒に簡単に使用することができます。これまでのテストでは、 {{ic|/etc/ld.so.preload}} でグローバルに有効にすると、 一握りのアプリケーションにしか問題を起こしません。例えば、{{ic|getrandom}} が標準のホワイトリストにないため、{{ic|seccomp}} 環境フラグが無効でないと {{ic|man}} は正常に動作しませんが、これはシステムコールを追加して再構築すれば簡単に修正可能です。hardened_malloc は性能上のコストがあるので、どの実装を使うかは攻撃対象領域と性能上の必要性に基づいてケースバイケースで決めるとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
スタンドアロンで試すには、hardened-malloc-preload ラッパー スクリプトを使用するか、適切なプリロード値でアプリケーションを手動で開始します。&lt;br /&gt;
&lt;br /&gt;
 LD_PRELOAD=&amp;quot;/usr/lib/libhardened_malloc.so&amp;quot; /usr/bin/firefox&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] の正しい使い方は、その wiki ページにあります。また、hardened_malloc の設定可能なビルドオプションは、githubレポで見つけることができます。&lt;br /&gt;
&lt;br /&gt;
== ストレージ ==&lt;br /&gt;
&lt;br /&gt;
===ディスク暗号化===&lt;br /&gt;
&lt;br /&gt;
[[ディスク暗号化]]、特に[[#パスワード|強固なパスフレーズ]]による完全ディスク暗号化は、物理的なリカバリからデータを守る唯一の方法です。コンピュータの電源がオフになっていて問題のディスクがアンマウントされている時は完璧なセキュリティを提供します。&lt;br /&gt;
&lt;br /&gt;
しかしながら、コンピュータの電源が入れられてドライブがマウントされると、そのデータは暗号化されていないドライブと同じように無防備になります。そのためデータが必要なくなったときはすぐにデータのパーティションをアンマウントするのが最善です。&lt;br /&gt;
&lt;br /&gt;
[[Dm-crypt]] など特定のプログラムでは、ループファイルを物理ボリュームとして暗号化することができます。これはシステムの特定部分だけを守りたいときに完全なディスク暗号化の代わりの選択肢となりえます。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
現在カーネルは {{ic|fs.protected_hardlinks}} や {{ic|fs.protected_symlinks}} sysctl スイッチが有効になっていればハードリンクやシンボリックリンクに関するセキュリティの問題を解決するので、world-writable なディレクトリを分離させるセキュリティ的な利点はもはや存在しません。&lt;br /&gt;
&lt;br /&gt;
それでもディスク容量が消耗したときのダメージを低減させる荒っぽい方法として world-writable なディレクトリを含むパーティションが分割されることがあります。しかしながら、サービスを落とすには {{ic|/var}} や {{ic|/tmp}} などのパーティションを一杯にするだけで十分です。この問題の対処についてはもっと柔軟性のある方法が存在します (クォータなど)、またファイルシステムによっては関連する機能を持っていることがあります (btrfs はサブボリュームにクォータを設定できます)。&lt;br /&gt;
&lt;br /&gt;
====マウントオプション====&lt;br /&gt;
&lt;br /&gt;
最小権限の原則に従って、パーティションは (機能性を失わない限りで) 最も制限的なマウントオプションを使ってマウントすると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
*{{ic|nodev}}: ファイルシステム上のキャラクタ・ブロック特殊デバイスを解釈しない。&lt;br /&gt;
*{{ic|nosuid}}: set-user-identifier や set-group-identifier ビットの効果を許可しない。&lt;br /&gt;
*{{ic|noexec}}: マウントされたファイルシステム上の全てのバイナリの直接実行を許可しない。&lt;br /&gt;
&lt;br /&gt;
{{Note|データパーティションはいつでも {{ic|nodev}}, {{ic|nosuid}}, {{ic|noexec}} でマウントするべきです。}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&#039;&#039;&#039;パーティション&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nodev}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nosuid}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|noexec}}&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/var}}||yes||yes||yes &amp;lt;sup&amp;gt;[1] [2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/home}}||yes||yes||yes (wine や steam を使用しない場合 &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/dev/shm}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/tmp}}||yes||yes||no (パッケージをコンパイルできなくなる可能性があります)&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/boot}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; パッケージによっては (例えば {{Pkg|nvidia-dkms}}) {{ic|/var}} で {{ic|exec}} を必要とすることがあるので注意してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; {{ic|noexec}} がパーティションに設定されている場合、Qt 5.8 以上では QML を使用するアプリケーションがクラッシュしたり機能しなくなることがあります。解決方法は [[Qt#Qt 5.8 で QML を使用するアプリケーションがクラッシュあるいは動作しない]]を参照。&lt;br /&gt;
&lt;br /&gt;
===ファイルシステムのパーミッション===&lt;br /&gt;
デフォルトのファイルシステムのパーミッションはほぼ全ての読み取りアクセスが許可されているため、[[パーミッション]]を変更することで {{ic|http}} や {{ic|nobody}} ユーザーなど root 以外のアカウントへのアクセスを手に入れた攻撃者から重要な情報を隠すことができます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
 # chmod 700 /boot /etc/{iptables,arptables}&lt;br /&gt;
&lt;br /&gt;
デフォルトの [[Umask]] を変更することで新しく作成したファイルのセキュリティを向上させることができます。[http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf NSA RHEL5 Security Guide] はセキュリティを最大化させるために {{ic|077}} の umask を提案しています、これは新しいファイルの所有者以外のユーザーによる読み取りを出来なくします。umask を変更するには、[[Umask#マスクの値を設定]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
== ユーザー設定 ==&lt;br /&gt;
&lt;br /&gt;
=== root アカウントを日常的に使用しない ===&lt;br /&gt;
&lt;br /&gt;
最小特権の原則に従い、root ユーザーを日常的に使用しないようにしてください。システムを使用する各人に非特権ユーザーアカウントを作成するか。一時的な特権アクセスには、必要に応じて [[sudo]] を使用する。&lt;br /&gt;
&lt;br /&gt;
=== ログイン失敗後の遅延時間の設定 ===&lt;br /&gt;
&lt;br /&gt;
以下の行を {{ic|/etc/pam.d/system-login}} に追加し、ログインに失敗した際に最低4秒の遅延を追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pam.d/system-login|2=&lt;br /&gt;
auth optional pam_faildelay.so delay=4000000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|4000000}} は遅延させる時間をマイクロ秒単位で指定します。&lt;br /&gt;
&lt;br /&gt;
===3回ログインを失敗したユーザーをロックアウトする===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pambase}} 20200721.1-2 の時点では 、デフォルトで {{ic|pam_faillock.so}} が有効になっており、15分間に3回ログインに失敗すると10分間ユーザをロックアウトします ({{Bug|67644}} を参照してください) このロックアウトはパスワード認証 (例:ログインと &#039;&#039;sudo&#039;&#039;) にのみ適用され、SSH 経由の公開鍵認証はそのまま利用可能です。 完全なサービス拒否を防ぐために、このロックアウトは root では無効になっています。&lt;br /&gt;
&lt;br /&gt;
ユーザーをロック解除するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 $ faillock --reset --user &#039;&#039;username&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、ロック機構は {{ic|/run/faillock/}} にあるユーザーごとのファイルです。ディレクトリの所有者は root ですが、ファイルの所有者はユーザーなので、 {{ic|faillock}} コマンドはファイルを空にするだけで、root は必要ありません。&lt;br /&gt;
&lt;br /&gt;
モジュール {{ic|pam_faillock.so}} は、ファイル {{ic|1=/etc/security/faillock.conf}} で設定することが可能です。ロックアウトのパラメータです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|unlock_time}} - ロックアウト時間 (秒単位、デフォルトは10分)&lt;br /&gt;
* {{ic|fail_interval}} - ロックアウトに失敗するとロックアウトされる時間 (秒単位、デフォルトは15分)&lt;br /&gt;
* {{ic|deny}} - ロックアウトするまでに何回ログインに失敗するか (デフォルトは 3)&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=deny = 0}} はロックアウトを無効化します}}&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、すべてのユーザーロックは再起動後に失われます。攻撃者がマシンをリブートできるのであれば、ロックは持続させた方が安全です。ロックを持続させるには、{{ic|1=/etc/security/faillock.conf}} の {{ic|dir}} パラメータを {{ic|/var/lib/faillock}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
変更を反映させるために再起動する必要はありません。root アカウントのロックアウトを有効にする、集中ログイン (LDAP など) を無効にするなど、さらなる設定オプションについては {{man|5|faillock.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== プロセスの数を制限する ===&lt;br /&gt;
&lt;br /&gt;
信頼できないユーザーが大量に存在するシステムでは、一度に実行できるプロセスの数を制限して、[[Wikipedia:ja:Fork爆弾|フォーク爆弾]]などのサービス拒否攻撃を予防することが重要です。ユーザーやグループごとに実行できるプロセスの数は {{ic|/etc/security/limits.conf}} で定義することができ、デフォルトでは空になっています。以下の値をファイルに追加すると、実行できるプロセスが100個までに制限されます。{{ic|prlimit}} コマンドを使って一時的に上げられる最大数も200個までに制限します。ユーザーが普段実行するプロセスの数や、管理するハードウェアにあわせて適切な値に変更してください。&lt;br /&gt;
&lt;br /&gt;
 * soft nproc 100&lt;br /&gt;
 * hard nproc 200&lt;br /&gt;
&lt;br /&gt;
=== Wayland を使用する ===&lt;br /&gt;
&lt;br /&gt;
[[Xorg]] よりも [[Wayland]] を使用することをお勧めします。Xorg の設計は現代のセキュリティ慣行より古く、多くの人が [https://security.stackexchange.com/questions/4641/why-are-people-saying-that-the-x-window-system-is-not-secure/4646#4646 は安全でないと考えています] 例えば、Xorg のアプリケーションは非アクティブな状態でもキーストロークを記録することがあります。&lt;br /&gt;
&lt;br /&gt;
もし Xorg を実行しなければならないなら、[[Xorg#Rootless_Xorg|root での実行を避ける]]ことが推奨されます。Wayland 内では、XWayland 互換レイヤーは自動的に root レス Xorg を使用します。&lt;br /&gt;
&lt;br /&gt;
== root の制限 ==&lt;br /&gt;
root ユーザーは、定義上、システムで最も強力なユーザーです。このため、root ユーザーの権限を維持しながら害を及ぼす力を制限する、もしくは root ユーザーの行動をもっと追跡できるようにする方法が多数存在します。&lt;br /&gt;
&lt;br /&gt;
=== su の代わりに sudo を使う ===&lt;br /&gt;
[[Su#セキュリティ|色々な理由]]から特権アクセスには [[su]] よりも [[sudo]] を使うほうが好ましいとされます。&lt;br /&gt;
&lt;br /&gt;
* 通常の権限しか持たないユーザーが実行した特権コマンドのログを保持します。&lt;br /&gt;
* root アクセスを必要とする各ユーザーに root ユーザーのパスワードを与える必要がありません。&lt;br /&gt;
* 完全な root ターミナルは作成されないため、{{ic|sudo}} は root アクセスが必要ないコマンドを偶発的に &#039;&#039;root&#039;&#039; で実行してしまうことを防止します。これは[[Wikipedia:ja:最小権限の原則|最小権限の原則]]と合っています。&lt;br /&gt;
* 一つのコマンドを実行するためだけに完全な root アクセスを与える代わりに、ユーザーごとに個々のプログラムを有効にすることができます。例えば、ユーザー &#039;&#039;alice&#039;&#039; に特定のプログラムへのアクセス権限を与えるには:&lt;br /&gt;
&lt;br /&gt;
 # visudo&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
alice ALL &amp;amp;#61; NOPASSWD: /path/to/program}}&lt;br /&gt;
&lt;br /&gt;
また、全てのユーザーに個別のコマンドを許可することも可能です。通常ユーザーでサーバーから Samba 共有をマウントするには:&lt;br /&gt;
&lt;br /&gt;
 %users ALL=/sbin/mount.cifs,/sbin/umount.cifs&lt;br /&gt;
&lt;br /&gt;
これによって users グループのメンバーである全てのユーザーが全てのマシン (ALL) から {{ic|/sbin/mount.cifs}} や {{ic|/sbin/umount.cifs}} コマンドを実行できるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|visudo}} で {{ic|vi}} の代わりに {{ic|nano}} を使うには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
2=Defaults editor=/usr/bin/rnano&lt;br /&gt;
}}&lt;br /&gt;
{{ic|1=# EDITOR=nano visudo}} のエクスポートは何にでも {{ic|EDITOR}} として使うことができるためにセキュリティリスクとされています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== sudo を使ってファイルを編集する ====&lt;br /&gt;
root で {{ic|vim}} などのテキストエディタを使用するのはセキュリティ上の脆弱性になりえます。ユーザーは任意のシェルコマンドを実行でき、コマンドを実行したユーザーのログが残らないからです。これを解決するには、以下をシェルの設定ファイルに追加してください:&lt;br /&gt;
&lt;br /&gt;
 export SUDO_EDITOR=rvim&lt;br /&gt;
&lt;br /&gt;
ファイルの編集には {{ic|sudoedit filename}} または {{ic|sudo -e filename}} を使って下さい。自動的に {{ic|rvim}} によって {{ic|filename}} が編集されるようになり、テキストエディタからのシェルコマンドが無効になります。&lt;br /&gt;
&lt;br /&gt;
=== root ログインの制限 ===&lt;br /&gt;
[[sudo]] を適切に設定することで、ユーザビリティをあまり下げることなく完全な root アクセスを大分制限することが可能です。[[sudo]] を使える状態のまま root を無効化したい場合、{{ic|passwd -l root}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== 特定のユーザーだけに許可を与える ====&lt;br /&gt;
[[Wikipedia:Pluggable authentication module|PAM]] の {{ic|pam_wheel.so}} は {{ic|wheel}} グループに入っているユーザーだけに {{ic|su}} を使用したログインを許可します。{{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} の両方を編集して次の行をアンコメントしてください:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Uncomment the following line to require a user to be in the &amp;quot;wheel&amp;quot; group.&lt;br /&gt;
auth		required	pam_wheel.so use_uid&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
特権コマンドを実行できる既存のユーザーだけが root でログインできるようになります。&lt;br /&gt;
&lt;br /&gt;
==== ssh ログインを拒否する ====&lt;br /&gt;
ローカルユーザーの root ログインを拒否したくない場合でも、[[SSH#root ログインを拒否する|SSH による root ログインを拒否]]するのがグッドプラクティスです。この目的は、ユーザーがリモートでシステムを完全に手にかける前にセキュリティ層を追加することにあります。&lt;br /&gt;
&lt;br /&gt;
==== access.conf で許容されるログインの組み合わせを指定する ====&lt;br /&gt;
&lt;br /&gt;
誰かが [[PAM]] でログインしようとすると、 {{ic|/etc/security/access.conf}} がそのログインプロパティに一致する最初の組み合わせをチェックします。そして、その組み合わせのルールに基づいて、試行が失敗するか成功するかが決まります。&lt;br /&gt;
&lt;br /&gt;
 +:root:LOCAL&lt;br /&gt;
 -:root:ALL&lt;br /&gt;
&lt;br /&gt;
特定のグループやユーザーに対してルールを設定することができます。この例では、ユーザー archie は、wheel および adm グループに属するすべてのユーザーと同様に、ローカルでのログインを許可されています。それ以外のログインは拒否されます。&lt;br /&gt;
&lt;br /&gt;
 +:archie:LOCAL&lt;br /&gt;
 +:(wheel):LOCAL&lt;br /&gt;
 +:(adm):LOCAL&lt;br /&gt;
 -:ALL:ALL&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|5|access.conf}} で確認してください。&lt;br /&gt;
&lt;br /&gt;
==強制アクセス制御==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (Mandatory Access Control, MAC) は Arch やほとんどの Linux ディストリビューションで使われている[[Wikipedia:ja:任意アクセス制御|任意アクセス制御]] (Discretionary Access Control, DAC) とは大きく異なるタイプのセキュリティポリシーです。原則的に MAC ではシステムに影響を与えるプログラムの行動は全てセキュリティルールセットによってチェックを受けます。このルールセットは、DAC とは対照的に、ユーザーが変更することは不可能です。実装方法は色々と異なるタイプが存在しますが、強制アクセス制御を使うことで実質的にコンピュータのセキュリティを著しく向上させることになります。&lt;br /&gt;
&lt;br /&gt;
===パス名 MAC===&lt;br /&gt;
パス名ベースのアクセス制御は指定されたファイルのパスに基づいてパーミッションを与えるというシンプルな形式のアクセス制御です。この形式のアクセス制御の欠点としてはファイルが移動されてもパーミッションはファイルと一緒に付いていかないということが挙げられます。プラス面となるのは、パス名ベースの MAC はラベルベースの MAC と異なり、幅広いファイルシステムに実装できることです。&lt;br /&gt;
&lt;br /&gt;
*[[AppArmor]] は [[Wikipedia:ja:カノニカル|Canonical]] によって開発されている MAC 実装で SELinux に比べて&amp;quot;簡単&amp;quot;になっています。&lt;br /&gt;
*[[TOMOYO Linux|Tomoyo]] はもうひとつのシンプルで、使いやすい強制アクセス制御を提供するシステムです。利用と実装の両面でシンプルになるように設計されており、依存するライブラリがとても少なくなっています。&lt;br /&gt;
&lt;br /&gt;
===ラベル MAC===&lt;br /&gt;
ラベルベースのアクセス制御ではファイルの拡張属性を使ってセキュリティパーミッションを管理します。このシステムはセキュリティの機能においてパス名ベースの MAC よりも間違いなく柔軟性が高い一方、拡張属性をサポートしているファイルシステムでしか動作しません。&lt;br /&gt;
&lt;br /&gt;
*[[SELinux]] は、Linux セキュリティを向上させる [[Wikipedia:ja:アメリカ国家安全保障局|NSA]] プロジェクトに基づいており、システムユーザーやロールとは完全に独立して MAC を実装しています。成長してオリジナルの設定が変わっていくシステムのコントロールを簡単に維持できる、極めて強固なマルチレベル MAC ポリシー実装を提供します。&lt;br /&gt;
&lt;br /&gt;
=== アクセス制御リスト ===&lt;br /&gt;
[[アクセス制御リスト]] (Access Control List, ACL) は何らかの方法で直接ファイルシステムにルールを付加する代わりとなる手段です。ACL はプログラムの行動を許可された挙動のリストでチェックすることによりアクセス制御を実装しています。&lt;br /&gt;
&lt;br /&gt;
==カーネルの防御==&lt;br /&gt;
&lt;br /&gt;
=== カーネルの自己防衛機能/脆弱性攻撃対策 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-hardened}} パッケージは [https://github.com/anthraxx/linux-hardened basic kernel hardening patch set] と {{pkg|linux}} パッケージよりもセキュリティに重点を置いたコンパイル時設定オプションを使用します。カスタムビルドでは、セキュリティ寄りのデフォルトとは異なる、セキュリティと性能の妥協点を選択することができます。&lt;br /&gt;
&lt;br /&gt;
しかし、このカーネルを使うといくつかのパッケージが動かなくなることに注意する必要があります。例えば&lt;br /&gt;
&lt;br /&gt;
* {{AUR|skypeforlinux-preview-bin}} のようなパッケージは動作しません。&lt;br /&gt;
* {{AUR|skypeforlinux-stable-bin}} {{AUR|skypeforlinux-stable-bin}}&lt;br /&gt;
* {{pkg|throttled}}&lt;br /&gt;
&lt;br /&gt;
[[NVIDIA]] などのアウトオブツリードライバを使用している場合、その [[DKMS]] パッケージに切り替える必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
=== ユーザー空間 ASLR の比較 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-hardened}} パッケージは、ユーザ空間プロセス用のアドレス空間レイアウトランダム化の改良された実装を提供します。{{pkg|paxtest}} コマンドは提供されるエントロピーの推定値を得るために使用されます。&lt;br /&gt;
&lt;br /&gt;
===== 64 ビット プロセス =====&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-hardened 5.4.21.a-1-hardened|&lt;br /&gt;
Anonymous mapping randomization test     : 32 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 40 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 40 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 32 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 32 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 32 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 32 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 40 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 40 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 44 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 44 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 34 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 34 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 32 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 32 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux 5.5.5-arch1-1|&lt;br /&gt;
Anonymous mapping randomization test     : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 28 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 28 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 20 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 28 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 29 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 29 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-lts 4.19.101-1-lts|&lt;br /&gt;
Anonymous mapping randomization test     : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 28 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 28 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 19 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 28 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 28 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 28 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 32ビットプロセス（x86_64カーネル上）  =====&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-hardened|&lt;br /&gt;
Anonymous mapping randomization test     : 16 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 22 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 27 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : No randomization&lt;br /&gt;
Main executable randomization (PIE)      : 18 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 16 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 16 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 24 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 24 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 28 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 18 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 16 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 18 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 18 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux|&lt;br /&gt;
Anonymous mapping randomization test     : 8 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 13 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 13 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : No randomization&lt;br /&gt;
Main executable randomization (PIE)      : 8 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 8 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 8 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 19 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 19 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 11 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 11 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 8 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 13 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: No randomization&lt;br /&gt;
Randomization under memory exhaustion @0 : No randomization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===カーネルログへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
{{Note|{{pkg|linux-hardened}} ではデフォルトで有効になっています。}}&lt;br /&gt;
&lt;br /&gt;
カーネルログにはカーネルの脆弱性を突こうとしている攻撃者にとって有益な情報、保護が必要なメモリーアドレスなどが含まれています。{{ic|kernel.dmesg_restrict}} フラグは  (デフォルトで root として実行しているプロセスしか持たない) {{ic|CAP_SYS_ADMIN}} ケイパビリティのないログへのアクセスを禁止します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-dmesg-restrict.conf|2=kernel.dmesg_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
===proc ファイルシステムのカーネルポインタへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
{{Note|{{pkg|linux-hardened}} ではデフォルトで {{ic|1=kptr_restrict=2}} と設定されています。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.kptr_restrict}} を有効にすると {{ic|CAP_SYSLOG}} のない通常ユーザーから {{ic|/proc/kallsyms}} のカーネルシンボルのアドレスが秘匿され、動的にアドレス・シンボルを解決するカーネル exploit が難しくなります。これは事前にコンパイルされた Arch Linux カーネルではあまり意味がありません、周到な攻撃者はカーネルパッケージをダウンロードしてそこから手動でシンボルを取得することができるからです。しかしながら自分でカーネルをコンパイルする場合は、ローカルの root 攻撃を減らす効果があります。ただし root 以外のユーザーで使用する場合いくつかの {{Pkg|perf}} コマンドが破壊されます (メインの {{Pkg|perf}} 機能には結局 root アクセスが必要になりますが)。詳しくは {{Bug|34323}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-kptr-restrict.conf|2=kernel.kptr_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
=== BPF のハードニング ===&lt;br /&gt;
&lt;br /&gt;
BPF は、実行時にカーネル内のバイトコードを動的にロードして実行するために使用されるシステムです。ネットワーク (XDP, tc など)、トレース (kprobes, uprobes, tracepoints など)、セキュリティ (seccomp など) など、多くの Linux カーネルサブシステムで使用されています。また、高度なネットワークセキュリティ、パフォーマンスプロファイリング、ダイナミックトレースにも有効です。&lt;br /&gt;
&lt;br /&gt;
BPF はもともと [https://ja.wikipedia.org/wiki/Berkeley_Packet_Filter Berkeley Packet Filter] の頭文字をとったもので、オリジナルの古典的な BPF は BSD 用のパケットキャプチャツールに使われていたためである。これは最終的に拡張 BPF (eBPF) に発展し、その後まもなくただの BPF (頭字語ではありません) に改名されました。BPFはパケットフィルタリングツールの実装に使われることがありますが、 iptables や netfilter のようなパケットフィルタリングツールと混同しないでください。&lt;br /&gt;
&lt;br /&gt;
BPF のコードは解釈されるか、[https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9 Just-In-Time (JIT) compiler] を使ってコンパイルされるかのどちらかである。Arch のカーネルは {{ic|CONFIG_BPF_JIT_ALWAYS_ON}} でビルドされており、BPF インタープリタを無効にして全ての BPF を JIT コンパイラでコンパイルするよう強制しています。これにより、攻撃者が BPF を使って SPECTRE 型の脆弱性を悪用したエスカレーション攻撃をすることが難しくなります。詳しくは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=290af86629b25ffd1ed6232c4e9107da031705cb the kernel patch which introduced CONFIG_BPF_JIT_ALWAYS_ON] を参照してください。&lt;br /&gt;
&lt;br /&gt;
カーネルは JIT コンパイルされた BPF に対して、パフォーマンスと多くの BPF プログラムをトレース・デバッグする能力を犠牲にして、ある種の JIT スプレー攻撃を軽減するためのハードニング機能を備えています。この機能は {{ic|net.core.bpf_jit_harden}} を {{ic|1}} に設定することによって有効になります。(非特権コードのハードニングを有効にする) または {{ic|2}} です。(すべてのコードのハードニングを有効にする)。&lt;br /&gt;
&lt;br /&gt;
詳しくは、[https://www.kernel.org/doc/html/latest/admin-guide/sysctl/net.html カーネルドキュメント] の {{ic|net.core.bpf_*}} 設定を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{Pkg|linux-hardened}} では、デフォルトで {{ic|1=net.core.bpf_jit_harden=2}} が設定されており、 {{ic|0}} ではありません。&lt;br /&gt;
* デフォルトでは、BPFプログラムは非特権ユーザでも実行可能です。この挙動を変更するには {{ic|1=kernel.unprivileged_bpf_disabled=1}} [https://access.redhat.com/security/cve/cve-2021-33624] を設定してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===ptrace スコープ===&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.yama.ptrace_scope}} フラグによって、Arch は Yama LSM をデフォルトで有効にしています。このフラグはプロセスが {{ic|CAP_SYS_PTRACE}} のないスコープの外で他のプロセスに {{ic|ptrace}} コールを実行するのを止めます。多くのデバッグツールがいくつかの機能を使うためにこれを必要としますが、セキュリティの面では飛躍的な改善になります。この機能がないと、名前空間のような外部レイヤーを適用しないかぎり同一ユーザーで動作するプロセスの分割は基本的に行われません。デバッガを既存プロセスにアタッチできることはこの欠点のデモンストレーションです。&lt;br /&gt;
&lt;br /&gt;
====破壊される機能の例====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|sudo}} を使って特定のユーザーに、パスワード有り無しで許可を与えたりすることで、root で以下のコマンドを実行することは可能です。}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|gdb -p $PID}}&lt;br /&gt;
* {{ic|strace -p $PID}}&lt;br /&gt;
* {{ic|perf trace -p $PID}}&lt;br /&gt;
* {{ic|reptyr $PID}}&lt;br /&gt;
&lt;br /&gt;
=== リンクの [[Wikipedia:TOCTOU|TOCTOU]] 攻撃を防止する ===&lt;br /&gt;
&lt;br /&gt;
この機能が追加された日時や根拠についてはこの [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=800179c9b8a1e796e441674776d11cd4c05d61d7 commit メッセージ]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 fs.protected_hardlinks = 1&lt;br /&gt;
 fs.protected_symlinks = 1&lt;br /&gt;
&lt;br /&gt;
{{Note|現在は {{ic|/usr/lib/sysctl.d/50-default.conf}} によってデフォルトで有効にされています。}}&lt;br /&gt;
&lt;br /&gt;
===hidepid===&lt;br /&gt;
&lt;br /&gt;
通常は {{ic|/proc}} から他のユーザーのプロセスを確認することができますが、カーネルにはプロセスを秘匿する機能が存在し {{ic|proc}} ファイルシステムを {{ic|1=hidepid=}} と {{ic|1=gid=}} オプションを使ってマウントすることで有効になります。詳しいドキュメントは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/proc.txt#n1919 こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
プロセスを隠すことで侵入者は動作中のプロセスに関する情報を得るのが難しくなります (どのデーモンが特権権限で動作しているか、プログラムの実行に使われているユーザーはどれか、など)。さらに、引数で機密情報を渡すような問題のあるプログラムから情報が漏れてしまうことを防ぎます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|filesystem}} パッケージに含まれている {{ic|proc}} [[ユーザーとグループ#システムグループ|グループ]]はホワイトリストとして機能し、グループに含まれているユーザーは他のユーザーのプロセス情報を閲覧することが可能です。{{ic|/proc/&amp;lt;pid&amp;gt;}} ディレクトリから他のユーザーの情報を得る必要があるユーザーやサービスがある場合、[[ユーザーとグループ#グループ管理|グループにユーザーを追加]]してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|proc}} グループに含まれていないユーザーに他のユーザーのプロセス情報を表示しない設定は以下の通りです:&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
proc	/proc	proc	nosuid,nodev,noexec,hidepid=2,gid=proc	0	0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Xorg]] を動作させるために systemd-logind の例外を追加する必要があります:&lt;br /&gt;
{{hc|/etc/systemd/system/systemd-logind.service.d/hidepid.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
SupplementaryGroups=proc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== モジュールのロードを制限する ===&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch カーネルは {{ic|CONFIG_MODULE_SIG_ALL}} が有効で、{{Pkg|linux}} パッケージの一部としてビルドされた全てのカーネルモジュールに署名します。これにより、カーネルは有効なキーで署名されたモジュールだけをロードするように制限できます。実際、これはローカルでコンパイルされた、もしくは {{Pkg|virtualbox-host-modules-arch}} などのパッケージによって提供された、ツリー外のモジュールは全てロードできないことを意味します。カーネルモジュールの読み込みは [[カーネルパラメータ]] を設定することで制限することができます。{{ic|1=module.sig_enforce=1}}. 詳細は、[https://www.kernel.org/doc/html/latest/admin-guide/module-signing.html kernel documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== kexec を無効にする ===&lt;br /&gt;
&lt;br /&gt;
Kexec は、現在実行中のカーネルを置き換えることを可能にします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/51-kexec-restrict.conf|2=&lt;br /&gt;
kernel.kexec_load_disabled = 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|kexec は {{pkg|linux-hardened}}  ではデフォルトで無効になっています。}}&lt;br /&gt;
&lt;br /&gt;
=== カーネルロックダウンモード ===&lt;br /&gt;
&lt;br /&gt;
Linux 5.4 以降、カーネルは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aefcf2f4b58155d27340ba5f9ddbe9513da8286d] オプションで [https://mjg59.dreamwidth.org/55105.html ロックダウン機能を獲得しました] これは  UID 0 (root) とカーネルの間の境界を強化することを目的としています。この機能を有効にすると、ハードウェアやカーネルへの低レベルのアクセスに依存している一部のアプリケーションは動作しなくなる可能性があります。&lt;br /&gt;
&lt;br /&gt;
ロックダウンを使用するには、その LSM が初期化され、ロックダウンモードが設定されている必要があります。&lt;br /&gt;
&lt;br /&gt;
すべての [[カーネル#公式サポートカーネル|オフィシャルサポートカーネル]] は LSM を初期化しますが、ロックダウンモードを強制するものはありません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|有効な LSM は {{ic|cat /sys/kernel/security/lsm}}}} を実行することで確認することができます。&lt;br /&gt;
&lt;br /&gt;
ロックダウンは2つの動作モードがあります。&lt;br /&gt;
&lt;br /&gt;
* ユーザーランドが実行中のカーネルを変更できるカーネル機能 (kexec, bpf) は無効化されます。&lt;br /&gt;
* {{ic|confidentiality}}: ユーザーランドがカーネルから機密情報を抽出するためのカーネル機能も無効化されます。&lt;br /&gt;
&lt;br /&gt;
実行時にカーネルのロックダウンを有効にするには、以下を実行します。&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;&#039;mode&#039;&#039; &amp;gt; /sys/kernel/security/lockdown&lt;br /&gt;
&lt;br /&gt;
起動時にカーネルのロックダウンを有効にするには、[[カーネルパラメータ]] {{ic|1=lockdown=&#039;&#039;mode&#039;&#039;}} を使用します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* カーネルロックダウンを実行時に無効化することはできません。&lt;br /&gt;
* カーネルロックダウンは、[[サスペンドとハイバネート#ハイバネーション|ハイバネーション]] を無効にします。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{man|7|kernel_lockdown}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Linux Kernel Runtime Guard (LKRG) ===&lt;br /&gt;
&lt;br /&gt;
[https://www.openwall.com/lkrg/ LKRG] ({{AUR|lkrg-dkms}}) は、カーネルの整合性チェックと悪用行為の検出を行うカーネルモジュールです。&lt;br /&gt;
&lt;br /&gt;
== アプリケーションのサンドボックス化 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|標準の Arch カーネルではユーザー名前空間の {{ic|CONFIG_USER_NS}} が設定されていないため、特定のサンドボックス機能がアプリケーションから使えない場合があります。{{pkg|linux-hardened}} パッケージでは有効になっていますが、非特権での使用はデフォルトで無効になっています。{{ic|kernel.unprivileged_userns_clone}} の [[sysctl]] を {{ic|1}} に設定することで使用できるようになりますが、ローカルの権限昇格を引き起こす可能性が高くなるので注意してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{Pkg|linux}} (5.1.8 およびそれ以降)、{{Pkg|linux-lts}} (4.19.55-2 およびそれ以降)、{{Pkg|linux-zen}} (5.1.14.zen1-2 およびそれ以降) においては、{{ic|kernel.unprivileged_userns_clone}} [[sysctl]] が {{ic|0}} に設定されていない限り、非特権ユーザの名前空間の利用 ({{ic|CONFIG_USER_NS_UNPRIVILEGED}}) がデフォルトで有効化されています。これはローカルの特権昇格の攻撃対象領域を大幅に増加させるので、これを手動で無効化するか {{Pkg|linux-hardened}} カーネルを使用することが推奨されます。詳細は {{Bug|36969}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
=== Firejail ===&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] はアプリケーションやサーバーをサンドボックス化するためのシンプルで使いやすいツールです。Firejail はサーバーだけでなくブラウザなどのインターネットに接続するアプリケーションでも使うことができます。&lt;br /&gt;
&lt;br /&gt;
=== bubblewrap ===&lt;br /&gt;
&lt;br /&gt;
[[bubblewrap]] は [[Flatpak]] から開発された setuid サンドボックスアプリケーションです。Firejail よりもリソースの消費力が少なく抑えられています。ファイルパスのホワイトリストなどの機能を欠いていますが、バインドマウントやユーザー/IPC/PID/ネットワーク/cgroup 名前空間の作成ができ、簡単なサンドボックスから [https://github.com/projectatomic/bubblewrap/blob/master/demos/bubblewrap-shell.sh 複雑なサンドボックス] まで自在に使うことが可能です。&lt;br /&gt;
&lt;br /&gt;
=== chroot ===&lt;br /&gt;
&lt;br /&gt;
手動で [[chroot]] 監獄を構築する方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== Linux Containers ===&lt;br /&gt;
&lt;br /&gt;
他の手段 (KVM や Virtualbox) よりも強力な分離が必要なときは [[Linux Containers]] を選択するのもよいでしょう。LXC は仮想ハードウェアを使って擬似的な chroot で既存のカーネル上で動作します。&lt;br /&gt;
&lt;br /&gt;
=== 他の仮想化手段 ===&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]], [[KVM]], [[Xen]] などの完全な仮想化マシンを使うことでもセキュリティを向上させることができます。危険なアプリケーションを実行したり危険なウェブサイトを開いたりするときに役に立つでしょう。&lt;br /&gt;
&lt;br /&gt;
==ネットワークとファイアウォール==&lt;br /&gt;
&lt;br /&gt;
===ファイアウォール===&lt;br /&gt;
標準の Arch カーネルは [[Wikipedia:ja:iptables|Netfilter]] の [[iptables]] を使用する能力がありますが、デフォルトでは有効になっていません。[[公式リポジトリ]]から {{Pkg|iptables}} をインストールして、有効にし、ファイアウォールを設定することが強く推奨されます。&lt;br /&gt;
&lt;br /&gt;
*全般的な情報は [[iptables]] を見て下さい。&lt;br /&gt;
*iptables ファイアウォールを設定するガイドは[[シンプルなステートフルファイアウォール]]を見て下さい。&lt;br /&gt;
*netfilter を設定する他の方法は[[ファイアウォール]]を見て下さい。&lt;br /&gt;
*Bluetack などの IP アドレスのリストをブロックする方法は [[Ipset]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===カーネルパラメータ===&lt;br /&gt;
ネットワークに影響を与えるカーネルパラメータは [[sysctl]] を使って設定できます。設定方法は [[sysctl#TCP/IP スタックの防御]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===SSH===&lt;br /&gt;
[[SSH 鍵#パスワードログインの無効化|SSH 鍵を必要]]としない [[Secure Shell]] を使うのは避けましょう。これは[[Wikipedia:ja:総当たり攻撃|総当たり攻撃]]を防ぎます。また、[[Fail2ban]] や [[Sshguard]] はログを監視して [[iptables|iptables ルール]]を書き込む方式の保護を提供しますが、攻撃者がアドレスを識別して管理者からのパケットのように偽装することができるため、サービスの妨害が行われる危険性があります。&lt;br /&gt;
&lt;br /&gt;
2段階認証によって認証を強化することができます。[[Google Authenticator]] はワンタイムパスコード (OTP) を使用する2段階認証方式を提供します。&lt;br /&gt;
&lt;br /&gt;
[[Secure Shell#root ログインを拒否する|root ログインを拒否する]]のは、侵入追跡と root アクセス前のセキュリティレイヤを追加するという両方の面でグッドプラクティスです。&lt;br /&gt;
&lt;br /&gt;
===DNS===&lt;br /&gt;
&lt;br /&gt;
[[DNSSEC]] や [[DNSCrypt]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== プロキシ ===&lt;br /&gt;
&lt;br /&gt;
プロキシはアプリケーションとネットワークの間に挟まる追加レイヤーとして使われ、信頼できないソースからのデータをサニタイズします。少ない権限でプロキシを動作させることで、エンドユーザー権限で複雑なアプリケーションを実行するよりも攻撃対象を小さくすることができます。&lt;br /&gt;
&lt;br /&gt;
例えば {{Pkg|glibc}} の中に実装されている DNS リゾルバを考えてみてください。(root で実行することもある) アプリケーションにリンクされている DNS リゾルバにバグが存在した場合、リモートコード実行につながる危険があります。[[dnsmasq]] などの DNS キャッシュサーバーをインストールしてプロキシとして使うことで問題を防ぐことが可能です [https://googleonlinesecurity.blogspot.it/2016/02/cve-2015-7547-glibc-getaddrinfo-stack.html]。&lt;br /&gt;
&lt;br /&gt;
=== SSL 証明書の管理 ===&lt;br /&gt;
&lt;br /&gt;
サーバーサイドの SSL 証明書の管理については [[OpenSSL]] や [[Network Security Services]] (NSS) を参照してください。また、関連する [[Let’s Encrypt]] プロジェクトも見てください。&lt;br /&gt;
&lt;br /&gt;
デフォルトのインターネット SSL 証明書のトラストチェーンは {{Pkg|ca-certificates}} パッケージによって提供されています。Arch はデフォルトで信頼しても問題ないとされる証明書を提供しているソース (例: {{AUR|ca-certificates-cacert}}, {{Pkg|ca-certificates-mozilla}}) に依存しています。&lt;br /&gt;
&lt;br /&gt;
デフォルトの証明書を変えたいと思うことがあるかもしれません。例えば、[http://www.theregister.co.uk/2016/05/27/blue_coat_ca_certs/ ニュース] を読んで証明書を信頼しないようにしたい場合 (ソースのプロバイダーによって無効になるのを待てない場合)、Arch のインフラを使うことで簡単に設定できます:&lt;br /&gt;
# {{ic|.crt}} 形式の証明書を入手してください (例: [https://crt.sh/?id=19538258 view], [https://crt.sh/?d=19538258 download]; 既存のルート認証局の場合、システム内にあるはずです)。&lt;br /&gt;
# {{ic|/etc/ca-certificates/trust-source/blacklist/}} にコピーしてください。&lt;br /&gt;
# root で &#039;&#039;update-ca-trust&#039;&#039; を実行してください。&lt;br /&gt;
&lt;br /&gt;
お好きなブラウザを開いて&#039;&#039;&#039;信頼できない&#039;&#039;&#039;サイトとして表示されれば、ブラックリストが上手く機能しています。&lt;br /&gt;
&lt;br /&gt;
== 物理セキュリティ ==&lt;br /&gt;
&lt;br /&gt;
{{Note|リモート攻撃からコンピュータを守りたいだけの場合はこのセクションは無視してかまいません。}}&lt;br /&gt;
&lt;br /&gt;
十分な時間とリソースさえあればコンピュータへの物理的なアクセスは root アクセスになります。しかしながら、十分な防御策を張ることで&#039;&#039;実用的で&#039;&#039;高いレベルのセキュリティを得ることができます。&lt;br /&gt;
&lt;br /&gt;
攻撃者は悪意のある IEEE 1394 (FireWire), Thunderbolt, PCI Express デバイスを取り付けることでメモリーへの完全なアクセスを手に入れることができ、次に起動した時には簡単にコンピュータの完全なコントロールを手中に収めることができます [http://www.breaknenter.org/projects/inception/]。これを防ぐために出来ることは限られており、悪意のあるファームウェアをドライブに書き込むなどハードウェア自体の改変に対処することは不可能です。ただし、攻撃者の大部分にはこうした知識がなく実行されることはほとんどありません。&lt;br /&gt;
&lt;br /&gt;
[[#ディスク暗号化|ディスク暗号化]]はコンピュータが盗まれた場合にデータへのアクセスを防止しますが、あなたが次にログインしたときにデータを取得するために悪意のあるファームウェアが能力のある攻撃者によってインストールされる可能性があります。&lt;br /&gt;
&lt;br /&gt;
===BIOS をロックダウンする===&lt;br /&gt;
&lt;br /&gt;
BIOS にパスワードを追加することによってリムーバブルメディアから誰かが起動する (これはコンピュータへの root アクセスと基本的に同義です) のを予防します。使用しているドライブがブートの順番で一番最初に来ることを確認して、可能であれば他のドライブのブートを無効にしてください。&lt;br /&gt;
&lt;br /&gt;
=== ブートローダー ===&lt;br /&gt;
&lt;br /&gt;
[[Arch ブートプロセス#ブートローダー|ブートローダー]] を保護することは非常に重要です。保護されていないブートローダは、例えば {{ic|1=init=/bin/sh}} を設定することでログインの制限を回避することができます。[[カーネルパラメータ]] でシェルに直接ブートするようにします。&lt;br /&gt;
&lt;br /&gt;
==== Syslinux ====&lt;br /&gt;
&lt;br /&gt;
Syslinux は[[Syslinux#セキュリティ|ブートローダーのパスワード保護]]をサポートしています。メニューのアイテムごとにパスワードを設定したり、ブートローダー全体にパスワードの保護を設定することが可能です。&lt;br /&gt;
&lt;br /&gt;
==== GRUB ====&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] はブートローダのパスワードもサポートしています。詳しくは [[GRUB/ヒントとテクニック#GRUB メニューのパスワード保護|GRUB メニューのパスワード保護]] を参照してください。[[GRUB/ヒントとテクニック# GRUB メニューのパスワード保護|暗号化 /boot]] もサポートしていますが、これはブートローダコードの一部だけを暗号化しないままにしています。GRUB の設定、[[カーネル]]、[[initramfs]] は暗号化されています。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート ===&lt;br /&gt;
&lt;br /&gt;
[[セキュアブート]] は [[UEFI]] の機能で、コンピュータが起動するファイルの認証を可能にするものです。これは、起動パーティション内のファイルを置き換えるような、いくつかの [https://ja.wikipedia.org/wiki/%E6%82%AA%E6%84%8F%E3%81%82%E3%82%8B%E3%83%A1%E3%82%A4%E3%83%89%E6%94%BB%E6%92%83 悪意あるメイド攻撃] を防止するのに役立つ。通常、コンピュータにはベンダー (OEM) によって登録されたキーが付属しています。しかし、これを取り外して、コンピュータを「セットアップモード」にし、ユーザーが自分のキーを登録・管理できるようにすることができます。&lt;br /&gt;
&lt;br /&gt;
セキュアブートのページでは、[https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Implementing_Secure_Boot using your own keys] によってセキュアブートを設定する方法を案内しています。&lt;br /&gt;
&lt;br /&gt;
=== トラステッドプラットフォームモジュール（TPM） ===&lt;br /&gt;
&lt;br /&gt;
[[Trusted Platform Module|TPM]] は、暗号鍵が埋め込まれたハードウェア・マイクロプロセッサです。これは、最近のほとんどのコンピュータの基本的な信頼性の根源を形成し、ブートチェーンのエンドツーエンドの検証を可能にします。内部スマートカードとして使用したり、コンピュータ上で動作するファームウェアを証明したり、改ざん防止とブルートフォース耐性のあるストアにユーザーがシークレットに挿入することができます。&lt;br /&gt;
&lt;br /&gt;
=== リムーバブル フラッシュ ドライブ上のブートパーティション ===&lt;br /&gt;
&lt;br /&gt;
ブートパーティションをフラッシュドライブに置き、それがないとシステムが起動しないようにする、というのはよくあるアイデアです。このアイデアの支持者はしばしば [[セキュリティ#ディスク暗号化|ディスク暗号化]] を併用し、ブートパーティションに置かれた [https://wiki.archlinux.org/title/Dm-crypt/Specialties#Encrypted_/boot_and_a_detached_LUKS_header_on_USBdetached encryption headers] を使っている人もいます。&lt;br /&gt;
&lt;br /&gt;
この方法は [https://wiki.archlinux.org/title/Dm-crypt/Specialties#Encrypted_/boot_and_a_detached_LUKS_header_on_USB encrypting /boot] と統合することも可能です。&lt;br /&gt;
&lt;br /&gt;
=== 自動ログアウト ===&lt;br /&gt;
[[Bash]] または [[Zsh]] を使っている場合、{{ic|TMOUT}} によってタイムアウトによるシェルからの自動ログアウトを設定できます。&lt;br /&gt;
&lt;br /&gt;
例えば、以下は仮想コンソールから自動でログアウトします (X11 のターミナルエミュレータからはログアウトしません):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/profile.d/shell-timeout.sh|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
[ -z &amp;quot;$DISPLAY&amp;quot; ] &amp;amp;&amp;amp; export TMOUT;&lt;br /&gt;
case $( /usr/bin/tty ) in&lt;br /&gt;
	/dev/tty[0-9]*) export TMOUT;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
(X のコンソールも含めて) 全ての Bash/Zsh プロンプトでタイムアウトさせたい場合は、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ export TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
シェルで何かコマンドが動作している間はこのタイムアウトは動作しないので注意してください (例: SSH セッションや {{ic|TMOUT}} をサポートしていない他のシェル)。しかしながら固まった GDM/Xorg を root で再起動するのに VC を使っているような場合は、とても有用です。&lt;br /&gt;
&lt;br /&gt;
=== 不正なUSBデバイスから保護する ===&lt;br /&gt;
&lt;br /&gt;
[[Usbguard]] は、デバイスの属性に基づく基本的なホワイトリストおよびブラックリスト機能を実装することで、不正な USB デバイス (別名 [https://ja.wikipedia.org/wiki/BadUSB BadUSB], [https://github.com/samyk/poisontap PoisonTap] または [https://lanturtle.com/ LanTurtle]) からコンピューターを保護できるソフトウェアフレームワークです。&lt;br /&gt;
&lt;br /&gt;
=== 揮発性データの収集 ===&lt;br /&gt;
&lt;br /&gt;
電源が入っているコンピュータは、[https://fedvte.usalearning.gov/courses/CSI/course/videos/pdf/CSI_D01_S05_T01_STEP.pdf volatile data collection] に対して脆弱である可能性があります。コンピュータの電源を入れる必要がない時や、コンピュータの物理的な安全性が一時的に損なわれる場合（例:セキュリティチェックポイントを通過する時）には、コンピュータの電源を完全に切ることがベストプラクティスです。&lt;br /&gt;
&lt;br /&gt;
== パッケージ ==&lt;br /&gt;
&lt;br /&gt;
=== パッケージの認証 ===&lt;br /&gt;
パッケージの署名が適正に使われていないと [http://www.cs.arizona.edu/stork/packagemanagersecurity/attacks-on-package-managers.html#overview パッケージマネージャへの攻撃] が考えられ、さらに [http://www.cs.arizona.edu/stork/packagemanagersecurity/faq.html 適切な署名システム] を使っているパッケージマネージャにも影響を与える可能性があります。Arch はデフォルトでパッケージの署名を使用しており5つの信頼されたマスターキーによる web of trust を使っています。詳しくは [[Pacman-key]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== アップグレード ===&lt;br /&gt;
&lt;br /&gt;
定期的に [[システムメンテナンス#システムのアップグレード|システムのアップグレード]] を行うことが重要です。&lt;br /&gt;
&lt;br /&gt;
=== 脆弱性アラートの確認 ===&lt;br /&gt;
&lt;br /&gt;
National Vulnerability Database が提供する Common Vulnerabilities and Exposure (CVE) Security Alert の更新を購読し、[https://nvd.nist.gov/download.cfm NVD Download webpage] で見つけてください。[https://security.archlinux.org/ Arch Linux Security Tracker] は Arch Linux Security Advisory (ASA), Arch Linux Vulnerability Group (AVG), CVE データセットを表形式でまとめた、特に有用なリソースです。ツール {{Pkg|arch-audit}} は実行中のシステムに影響を与える脆弱性をチェックするために使われます。グラフィカルなシステムトレイである {{Pkg|arch-audit-gtk}} も使うことができます。[https://wiki.archlinux.org/title/Arch_Security_Team Arch Security Team]も参照してください。&lt;br /&gt;
&lt;br /&gt;
特にメインレポジトリや AUR 以外の手段でソフトウェアをインストールしている場合は、あなたが使っているソフトウェアのリリース通知を購読することも検討すべきです。いくつかのソフトウェアには、セキュリティに関する通知を受け取るために購読できるメーリングリストがあります。ソースコードホスティングサイトはしばしば新しいリリースの RSS フィードを提供しています。&lt;br /&gt;
&lt;br /&gt;
=== パッケージの再ビルド ===&lt;br /&gt;
&lt;br /&gt;
攻撃対象領域を減らす手段として、パッケージをリビルドし、不要な関数や機能を削除することができます。例えば、{{Pkg|bzip2}} は [https://security.archlinux.org/CVE-2016-3189 CVE-2016-3189] を回避するために {{ic|bzip2recover}} を使わずにリビルドすることが可能です。カスタムハードニングフラグは、手動またはラッパーを介して適用することもできます。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! フラグ !! 目的&lt;br /&gt;
|-&lt;br /&gt;
| -D_FORTIFY_SOURCE=2 || ランタイムバッファオーバーフローの検出 &lt;br /&gt;
|-&lt;br /&gt;
| -D_GLIBCXX_ASSERTIONS || C++ の文字列とコンテナのランタイム境界チェック &lt;br /&gt;
|-&lt;br /&gt;
| -fasynchronous-unwind-tables || バックトレースの信頼性向上 &lt;br /&gt;
|-&lt;br /&gt;
| -fexceptions || テーブルベースのスレッドキャンセルを有効にする &lt;br /&gt;
|-&lt;br /&gt;
| -fpie -Wl,-pie || 実行可能ファイルに対する完全な ASLR &lt;br /&gt;
|-&lt;br /&gt;
| -fpic -shared || 共有ライブラリのテキスト再配置を行わない &lt;br /&gt;
|-&lt;br /&gt;
| -fplugin=annobin || ハードニング品質管理用データの作成 &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-clash-protection || スタックオーバーフロー検出の信頼性向上 &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-protector or -fstack-protector-all || スタックスマッシュプロテクター &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-protector-strong || 同様に &lt;br /&gt;
|-&lt;br /&gt;
| -g || デバッグ情報を生成する &lt;br /&gt;
|-&lt;br /&gt;
| -grecord-gcc-switches || デバッグ情報にコンパイラのフラグを格納する &lt;br /&gt;
|-&lt;br /&gt;
| -mcet -fcf-protection || 制御フローの完全性保護 &lt;br /&gt;
|-&lt;br /&gt;
| -O2 || 推奨される最適化 &lt;br /&gt;
|-&lt;br /&gt;
| -pipe || 一時ファイルを回避し、ビルドを高速化します。 &lt;br /&gt;
|-&lt;br /&gt;
| -Wall || 推奨されるコンパイラの警告 &lt;br /&gt;
|-&lt;br /&gt;
| -Werror=format-security || 安全でない可能性のあるフォーマット文字列の引数を拒否する &lt;br /&gt;
|-&lt;br /&gt;
| -Werror=implicit-function-declaration || 関数プロトタイプの欠落を却下する &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,defs || アンダーリンクの検出と拒否 &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,now || 遅延バインディングを無効にする &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,relro || 移設後の読み出し専用セグメント &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* [https://developers.redhat.com/blog/2018/03/21/compiler-and-linker-flags-gcc/ Flags and info ソース]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://security.archlinux.org/ Arch Linux セキュリティトラッカー]&lt;br /&gt;
* ArchWiki のセキュリティアプリケーションのリスト: [[アプリケーション一覧/セキュリティ]]&lt;br /&gt;
* [https://wiki.centos.org/HowTos/OS_Protection CentOS Wiki: OS Protection]&lt;br /&gt;
* [https://www.ibm.com/developerworks/linux/tutorials/l-harden-desktop/index.html Hardening the Linux desktop]&lt;br /&gt;
* [https://www.ibm.com/developerworks/linux/tutorials/l-harden-server/index.html Hardening the Linux server]&lt;br /&gt;
* [https://github.com/lfit/itpol/blob/master/linux-workstation-security.md Linux Foundation: Linux ワークステーションのセキュリティチェックリスト]&lt;br /&gt;
* [https://www.privacytools.io/ privacytools.io Privacy Resources]&lt;br /&gt;
* [https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/index.html Red Hat Enterprise Linux 7 セキュリティガイド]&lt;br /&gt;
* [https://www.debian.org/doc/manuals/securing-debian-howto/securing-debian-howto.en.pdf Debian 安全化マニュアル (PDF)]&lt;br /&gt;
* [http://crunchbang.org/forums/viewtopic.php?id=24722 The paranoid #! Security Guide]&lt;br /&gt;
* [https://www.auscert.org.au/resources/publications/guidelines/unix-linux/unix-and-linux-security-checklist-v3.0 UNIX and Linux Security Checklist v3.0]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=29596</id>
		<title>セキュリティ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=29596"/>
		<updated>2023-02-01T00:46:10Z</updated>

		<summary type="html">&lt;p&gt;Hikali: Hikali (トーク) による版 29595 を取り消し&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:セキュリティ]]&lt;br /&gt;
[[Category:ファイルシステム]]&lt;br /&gt;
[[Category:ネットワーク]]&lt;br /&gt;
[[en:Security]]&lt;br /&gt;
[[fa:امنیت]]&lt;br /&gt;
[[ru:Security]]&lt;br /&gt;
[[zh-hans:Security]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|PAM}}&lt;br /&gt;
{{Related|ケイパビリティ}}&lt;br /&gt;
{{Related|アプリケーション一覧/セキュリティ}}&lt;br /&gt;
{{Related|:カテゴリ:セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
この記事では Arch Linux システムを防御するための推奨事項とベストプラクティスを並べています。&lt;br /&gt;
&lt;br /&gt;
==概念==&lt;br /&gt;
*セキュリティを厳しくするあまりシステムが使い物にならなくなってしまう可能性があります。うまいやり方は度を越さない程度にセキュリティを強化します。&lt;br /&gt;
*セキュリティを高めるために出来ることは数多く存在しますが、一番の脅威はいつだってユーザー自身です。セキュリティを考える時は、多層防御を考える必要があります。ある層が突破されたとしても、他の層が攻撃を防御しなくてはなりません。ただし全てのネットワークからマシンを切断して、金庫にしまって決して使わないかぎり、システムを100%セキュアにすることは不可能です。&lt;br /&gt;
*少しだけ病的なまでの心配性 (パラノイド) になりましょう。それは役に立ちます。そして疑り深くなってください。話がうますぎるように聞こえたら、おそらくその通りです。&lt;br /&gt;
*[[Wikipedia:ja:最小権限の原則|最小権限の原則]]: システムの各部位は使用に必要なことにだけしかアクセスできないようにするべきで、それ以上は必要ありません。&lt;br /&gt;
&lt;br /&gt;
==パスワード==&lt;br /&gt;
パスワードは安全な linux システムのかぎです。パスワードは[[ユーザーとグループ|ユーザーアカウント]], [[ディスク暗号化|暗号化されたファイルシステム]], [[SSH 鍵|SSH]]/[[GPG]] 鍵などを守ります。コンピュータを使用する人を信頼するのに使う主要な手段なので、安全なパスワードを選んでそれを保護するというのがセキュリティの大部分と言っても過言ではありません。&lt;br /&gt;
&lt;br /&gt;
===強力なパスワードの選び方===&lt;br /&gt;
&lt;br /&gt;
パスワードは簡単に[[Wikipedia:ja:パスワードクラック|割り出されたり]]または個人情報から類推されないようにすることが重要です。そういうわけで、辞書に載っている単語やあなたの飼っている犬の名前などは使わないようにしましょう。パスワードは出来るだけ8文字以上で、小文字と大文字を混ぜてください。さらに数字や特殊文字も1文字以上含めると良いでしょう。当たり前ですが、長くて複雑なパスワードが基本的に良いパスワードとされます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pwgen}} や {{AUR|apg}} などのツールは安全なパスワードを生成するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
また、ある文章の各単語の一番最初を取ってパスワードを作ることもできます。&lt;br /&gt;
例えば “the girl is walking down the rainy street” なら “t6!WdtR5” とパスワードにすることができます。この方法はパスワードを覚えるのをずっと簡単にしてくれます。さらに、入力するのが面倒くさくなりますがパスワードを “The girl is walking down the rainy street&amp;quot; にすることも可能です。&lt;br /&gt;
&lt;br /&gt;
===パスワードの管理===&lt;br /&gt;
強固なパスワードを選び出したら、それを安全に保管してください。[[Wikipedia:ja:ソーシャル・エンジニアリング|心理操作]]や[[Wikipedia:Shoulder surfing (computer security)|ショルダーサーフィン]]に注意したり、セキュアでないサーバーから必要以上に情報が流出するのをふせぐためにパスワードを再利用しないようにしてください。{{Pkg|pass}}, {{AUR|keepassx}}, {{Pkg|gnome-keyring}} などのツールは大量の複雑なパスワードを管理するのに役立ちます。[[Wikipedia:ja:LastPass|Lastpass]] はデバイス間で同期するためにオンラインで暗号化されたパスワードを保存するサービスですが、クローズドソースのコードと外部の企業の両方を信頼する必要があります。&lt;br /&gt;
&lt;br /&gt;
概して、安全なパスワードは覚えにくいからといって安全でないパスワードを使ってはいけません。パスワードはバランスを取る必要があります。弱いパスワードをたくさん作るよりは、安全なパスワードの暗号化されたデータベースを作り、一つの強いマスターパスワードで守るほうが良いでしょう。パスワードを紙に書くのも、物理的なセキュリティを必要としますがソフトウェアの脆弱性を防ぐ点では同じくらい有効です [https://www.schneier.com/blog/archives/2005/06/write_down_your.html]。&lt;br /&gt;
&lt;br /&gt;
===パスワードのハッシュ===&lt;br /&gt;
{{Warning|SHA512 は高速なハッシュ関数として設計されており、パスワードのハッシュ用には作られていません。bcrypt や scrypt などに比べて SHA512 によってハッシュ化されたパスワードには攻撃者は&#039;&#039;はるかに&#039;&#039;高速にブルートフォース攻撃をすることができます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch のハッシュ [[SHA パスワードハッシュ|sha512]] はとても強固で変更する必要はありません。デフォルトでは、{{ic|/etc/shadow}} にパスワードがハッシュ化されて保存され、root にだけ読み取り許可を与え、{{ic|/etc/passwd}} にはユーザー識別子だけが保存されます。従って、[[#root の制限|root ユーザーが安全]]である限り、ファイルが外部システムにコピーされたり解読されることはありえません。&lt;br /&gt;
&lt;br /&gt;
[http://www.slashroot.in/how-are-passwords-stored-linux-understanding-hashing-shadow-utils How are passwords stored in Linux (Understanding hashing with shadow utils)] も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== pam_cracklib を用いた強力なパスワードの強制 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pam_cracklib&#039;&#039; は[[Wikipedia:ja:辞書攻撃|辞書攻撃]]からの防御を提供し、システム全体で強制するパスワードポリシーの設定を補助します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;root&#039;&#039; アカウントはこのポリシーの影響を受けません。}}&lt;br /&gt;
{{Note|&#039;&#039;root&#039;&#039; アカウントを利用することで望ましい/設定されたポリシーを迂回したユーザーのパスワードを設定することができます。これは一時的なパスワードを設定するときに便利です。}}&lt;br /&gt;
&lt;br /&gt;
例えば以下のようなポリシーを強制させたい場合:&lt;br /&gt;
* エラー時に2回パスワードプロンプト&lt;br /&gt;
* 最小で10文字の長さ (minlen オプション)&lt;br /&gt;
* 新しくパスワードを設定する場合、少なくとも6文字は古いパスワードと異なる (difok オプション)&lt;br /&gt;
* 少なくとも1文字数字を含む (dcredit オプション)&lt;br /&gt;
* 少なくとも1文字は大文字を含む (ucredit オプション)&lt;br /&gt;
* 少なくとも1文字は異なる文字を含む (ocredit オプション)&lt;br /&gt;
* 少なくとも1文字は小文字を含む (lcredit オプション)&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/pam.d/passwd}} ファイルを以下のように書き換えます:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
password required pam_cracklib.so retry=2 minlen=10 difok=6 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1&lt;br /&gt;
password required pam_unix.so use_authtok sha512 shadow&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|password required pam_unix.so use_authtok}} でパスワードのプロンプトを表示するときに &#039;&#039;pam_unix&#039;&#039; モジュールではなく &#039;&#039;pam_cracklib&#039;&#039; によるプロンプトを使うようになります。&lt;br /&gt;
&lt;br /&gt;
詳細な情報については pam_cracklib(8) と pam_unix(8) の man ページを参照してください。&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
=== マイクロコード ===&lt;br /&gt;
&lt;br /&gt;
CPU のマイクロコードに対する重要なセキュリティ更新プログラムをインストールする方法については、[[マイクロコード]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアの脆弱性 ===&lt;br /&gt;
&lt;br /&gt;
CPU の中には、ハードウェアの脆弱性を含んでいるものがあります。これらの脆弱性の一覧と、特定の使用シナリオに合わせてこれらの脆弱性を緩和するためにカーネルをカスタマイズするのに役立つ緩和策の選択ガイドについては、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/ kernel documentation on hardware vulnerabilities] を参照してください。&lt;br /&gt;
&lt;br /&gt;
既知の脆弱性の影響を受けているかどうかを確認するには、以下を実行してください。&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/devices/system/cpu/vulnerabilities/&lt;br /&gt;
&lt;br /&gt;
ほとんどの場合、カーネルとマイクロコードを更新することで、脆弱性を軽減することができます。&lt;br /&gt;
&lt;br /&gt;
==== 同時マルチスレッディング (ハイパースレッディング) ====&lt;br /&gt;
&lt;br /&gt;
[https://ja.wikipedia.org/wiki/%E5%90%8C%E6%99%82%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0 同時マルチスレッディング]] (SMT) は、インテル CPU のハイパースレッディングとも呼ばれ、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html L1 Terminal Fault] および [https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html Microarchitectural Data Sampling] 脆弱性の原因となる可能性のあるハードウェア機能です。Linux カーネルとマイクロコードのアップデートには、既知の脆弱性に対する緩和策が含まれていますが、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html#virtualization-with-untrusted-guests 信頼できない仮想化ゲストが存在する場合、特定の CPU で SMT を無効にしたほうが良い場合があります。]&lt;br /&gt;
&lt;br /&gt;
SMT は、システムのファームウェアで無効にできることがよくあります。詳細については、マザーボードまたはシステムのドキュメントを参照してください。また、以下の [[カーネルパラメータ]] を追加することで、カーネルで SMT を無効にすることができます。&lt;br /&gt;
&lt;br /&gt;
 l1tf=full,force mds=full,nosmt mitigations=auto,nosmt nosmt=force&lt;br /&gt;
&lt;br /&gt;
== メモリ ==&lt;br /&gt;
&lt;br /&gt;
===ハード化された malloc ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/GrapheneOS/hardened_malloc hardened_malloc] ({{AUR|hardened_malloc}}, {{AUR|hardened-malloc-git}}) は [https://ja.wikipedia.org/wiki/GNU_C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA glibc] の malloc() をハード化した代替品です。元々は Android の [[Wikipedia:Bionic (software)|Bionic]] と [https://ja.wikipedia.org/wiki/Musl musl] に組み込むために開発されましたが、 x86_64 アーキテクチャの標準 Linux ディストリビューションのサポートにも組み込みました。&lt;br /&gt;
&lt;br /&gt;
hardened_malloc はまだ glibc に統合されていませんが（支援とプルリクエストは歓迎します）、LD_PRELOAD と一緒に簡単に使用することができます。これまでのテストでは、 {{ic|/etc/ld.so.preload}} でグローバルに有効にすると、 一握りのアプリケーションにしか問題を起こしません。例えば、{{ic|getrandom}} が標準のホワイトリストにないため、{{ic|seccomp}} 環境フラグが無効でないと {{ic|man}} は正常に動作しませんが、これはシステムコールを追加して再構築すれば簡単に修正可能です。hardened_malloc は性能上のコストがあるので、どの実装を使うかは攻撃対象領域と性能上の必要性に基づいてケースバイケースで決めるとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
スタンドアロンで試すには、hardened-malloc-preload ラッパー スクリプトを使用するか、適切なプリロード値でアプリケーションを手動で開始します。&lt;br /&gt;
&lt;br /&gt;
 LD_PRELOAD=&amp;quot;/usr/lib/libhardened_malloc.so&amp;quot; /usr/bin/firefox&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] の正しい使い方は、その wiki ページにあります。また、hardened_malloc の設定可能なビルドオプションは、githubレポで見つけることができます。&lt;br /&gt;
&lt;br /&gt;
== ストレージ ==&lt;br /&gt;
&lt;br /&gt;
===ディスク暗号化===&lt;br /&gt;
&lt;br /&gt;
[[ディスク暗号化]]、特に[[#パスワード|強固なパスフレーズ]]による完全ディスク暗号化は、物理的なリカバリからデータを守る唯一の方法です。コンピュータの電源がオフになっていて問題のディスクがアンマウントされている時は完璧なセキュリティを提供します。&lt;br /&gt;
&lt;br /&gt;
しかしながら、コンピュータの電源が入れられてドライブがマウントされると、そのデータは暗号化されていないドライブと同じように無防備になります。そのためデータが必要なくなったときはすぐにデータのパーティションをアンマウントするのが最善です。&lt;br /&gt;
&lt;br /&gt;
[[Dm-crypt]] など特定のプログラムでは、ループファイルを物理ボリュームとして暗号化することができます。これはシステムの特定部分だけを守りたいときに完全なディスク暗号化の代わりの選択肢となりえます。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
現在カーネルは {{ic|fs.protected_hardlinks}} や {{ic|fs.protected_symlinks}} sysctl スイッチが有効になっていればハードリンクやシンボリックリンクに関するセキュリティの問題を解決するので、world-writable なディレクトリを分離させるセキュリティ的な利点はもはや存在しません。&lt;br /&gt;
&lt;br /&gt;
それでもディスク容量が消耗したときのダメージを低減させる荒っぽい方法として world-writable なディレクトリを含むパーティションが分割されることがあります。しかしながら、サービスを落とすには {{ic|/var}} や {{ic|/tmp}} などのパーティションを一杯にするだけで十分です。この問題の対処についてはもっと柔軟性のある方法が存在します (クォータなど)、またファイルシステムによっては関連する機能を持っていることがあります (btrfs はサブボリュームにクォータを設定できます)。&lt;br /&gt;
&lt;br /&gt;
====マウントオプション====&lt;br /&gt;
&lt;br /&gt;
最小権限の原則に従って、パーティションは (機能性を失わない限りで) 最も制限的なマウントオプションを使ってマウントすると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
*{{ic|nodev}}: ファイルシステム上のキャラクタ・ブロック特殊デバイスを解釈しない。&lt;br /&gt;
*{{ic|nosuid}}: set-user-identifier や set-group-identifier ビットの効果を許可しない。&lt;br /&gt;
*{{ic|noexec}}: マウントされたファイルシステム上の全てのバイナリの直接実行を許可しない。&lt;br /&gt;
&lt;br /&gt;
{{Note|データパーティションはいつでも {{ic|nodev}}, {{ic|nosuid}}, {{ic|noexec}} でマウントするべきです。}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&#039;&#039;&#039;パーティション&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nodev}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nosuid}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|noexec}}&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/var}}||yes||yes||yes &amp;lt;sup&amp;gt;[1] [2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/home}}||yes||yes||yes (wine や steam を使用しない場合 &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/dev/shm}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/tmp}}||yes||yes||no (パッケージをコンパイルできなくなる可能性があります)&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/boot}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; パッケージによっては (例えば {{Pkg|nvidia-dkms}}) {{ic|/var}} で {{ic|exec}} を必要とすることがあるので注意してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; {{ic|noexec}} がパーティションに設定されている場合、Qt 5.8 以上では QML を使用するアプリケーションがクラッシュしたり機能しなくなることがあります。解決方法は [[Qt#Qt 5.8 で QML を使用するアプリケーションがクラッシュあるいは動作しない]]を参照。&lt;br /&gt;
&lt;br /&gt;
===ファイルシステムのパーミッション===&lt;br /&gt;
デフォルトのファイルシステムのパーミッションはほぼ全ての読み取りアクセスが許可されているため、[[パーミッション]]を変更することで {{ic|http}} や {{ic|nobody}} ユーザーなど root 以外のアカウントへのアクセスを手に入れた攻撃者から重要な情報を隠すことができます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
 # chmod 700 /boot /etc/{iptables,arptables}&lt;br /&gt;
&lt;br /&gt;
デフォルトの [[Umask]] を変更することで新しく作成したファイルのセキュリティを向上させることができます。[http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf NSA RHEL5 Security Guide] はセキュリティを最大化させるために {{ic|077}} の umask を提案しています、これは新しいファイルの所有者以外のユーザーによる読み取りを出来なくします。umask を変更するには、[[Umask#マスクの値を設定]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
== ユーザー設定 ==&lt;br /&gt;
&lt;br /&gt;
=== root アカウントを日常的に使用しない ===&lt;br /&gt;
&lt;br /&gt;
最小特権の原則に従い、root ユーザーを日常的に使用しないようにしてください。システムを使用する各人に非特権ユーザーアカウントを作成するか。一時的な特権アクセスには、必要に応じて [[sudo]] を使用する。&lt;br /&gt;
&lt;br /&gt;
=== ログイン失敗後の遅延時間の設定 ===&lt;br /&gt;
&lt;br /&gt;
以下の行を {{ic|/etc/pam.d/system-login}} に追加し、ログインに失敗した際に最低4秒の遅延を追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pam.d/system-login|2=&lt;br /&gt;
auth optional pam_faildelay.so delay=4000000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|4000000}} は遅延させる時間をマイクロ秒単位で指定します。&lt;br /&gt;
&lt;br /&gt;
===3回ログインを失敗したユーザーをロックアウトする===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pambase}} 20200721.1-2 の時点では 、デフォルトで {{ic|pam_faillock.so}} が有効になっており、15分間に3回ログインに失敗すると10分間ユーザをロックアウトします ({{Bug|67644}} を参照してください) このロックアウトはパスワード認証 (例:ログインと &#039;&#039;sudo&#039;&#039;) にのみ適用され、SSH 経由の公開鍵認証はそのまま利用可能です。 完全なサービス拒否を防ぐために、このロックアウトは root では無効になっています。&lt;br /&gt;
&lt;br /&gt;
ユーザーをロック解除するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 $ faillock --reset --user &#039;&#039;username&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、ロック機構は {{ic|/run/faillock/}} にあるユーザーごとのファイルです。ディレクトリの所有者は root ですが、ファイルの所有者はユーザーなので、 {{ic|faillock}} コマンドはファイルを空にするだけで、root は必要ありません。&lt;br /&gt;
&lt;br /&gt;
モジュール {{ic|pam_faillock.so}} は、ファイル {{ic|1=/etc/security/faillock.conf}} で設定することが可能です。ロックアウトのパラメータです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|unlock_time}} - ロックアウト時間 (秒単位、デフォルトは10分)&lt;br /&gt;
* {{ic|fail_interval}} - ロックアウトに失敗するとロックアウトされる時間 (秒単位、デフォルトは15分)&lt;br /&gt;
* {{ic|deny}} - ロックアウトするまでに何回ログインに失敗するか (デフォルトは 3)&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=deny = 0}} はロックアウトを無効化します}}&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、すべてのユーザーロックは再起動後に失われます。攻撃者がマシンをリブートできるのであれば、ロックは持続させた方が安全です。ロックを持続させるには、{{ic|1=/etc/security/faillock.conf}} の {{ic|dir}} パラメータを {{ic|/var/lib/faillock}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
変更を反映させるために再起動する必要はありません。root アカウントのロックアウトを有効にする、集中ログイン (LDAP など) を無効にするなど、さらなる設定オプションについては {{man|5|faillock.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== プロセスの数を制限する ===&lt;br /&gt;
&lt;br /&gt;
信頼できないユーザーが大量に存在するシステムでは、一度に実行できるプロセスの数を制限して、[[Wikipedia:ja:Fork爆弾|フォーク爆弾]]などのサービス拒否攻撃を予防することが重要です。ユーザーやグループごとに実行できるプロセスの数は {{ic|/etc/security/limits.conf}} で定義することができ、デフォルトでは空になっています。以下の値をファイルに追加すると、実行できるプロセスが100個までに制限されます。{{ic|prlimit}} コマンドを使って一時的に上げられる最大数も200個までに制限します。ユーザーが普段実行するプロセスの数や、管理するハードウェアにあわせて適切な値に変更してください。&lt;br /&gt;
&lt;br /&gt;
 * soft nproc 100&lt;br /&gt;
 * hard nproc 200&lt;br /&gt;
&lt;br /&gt;
=== Wayland を使用する ===&lt;br /&gt;
&lt;br /&gt;
[[Xorg]] よりも [[Wayland]] を使用することをお勧めします。Xorg の設計は現代のセキュリティ慣行より古く、多くの人が [https://security.stackexchange.com/questions/4641/why-are-people-saying-that-the-x-window-system-is-not-secure/4646#4646 は安全でないと考えています] 例えば、Xorg のアプリケーションは非アクティブな状態でもキーストロークを記録することがあります。&lt;br /&gt;
&lt;br /&gt;
もし Xorg を実行しなければならないなら、[[Xorg#Rootless_Xorg|root での実行を避ける]]ことが推奨されます。Wayland 内では、XWayland 互換レイヤーは自動的に root レス Xorg を使用します。&lt;br /&gt;
&lt;br /&gt;
== root の制限 ==&lt;br /&gt;
root ユーザーは、定義上、システムで最も強力なユーザーです。このため、root ユーザーの権限を維持しながら害を及ぼす力を制限する、もしくは root ユーザーの行動をもっと追跡できるようにする方法が多数存在します。&lt;br /&gt;
&lt;br /&gt;
=== su の代わりに sudo を使う ===&lt;br /&gt;
[[Su#セキュリティ|色々な理由]]から特権アクセスには [[su]] よりも [[sudo]] を使うほうが好ましいとされます。&lt;br /&gt;
&lt;br /&gt;
* 通常の権限しか持たないユーザーが実行した特権コマンドのログを保持します。&lt;br /&gt;
* root アクセスを必要とする各ユーザーに root ユーザーのパスワードを与える必要がありません。&lt;br /&gt;
* 完全な root ターミナルは作成されないため、{{ic|sudo}} は root アクセスが必要ないコマンドを偶発的に &#039;&#039;root&#039;&#039; で実行してしまうことを防止します。これは[[Wikipedia:ja:最小権限の原則|最小権限の原則]]と合っています。&lt;br /&gt;
* 一つのコマンドを実行するためだけに完全な root アクセスを与える代わりに、ユーザーごとに個々のプログラムを有効にすることができます。例えば、ユーザー &#039;&#039;alice&#039;&#039; に特定のプログラムへのアクセス権限を与えるには:&lt;br /&gt;
&lt;br /&gt;
 # visudo&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
alice ALL &amp;amp;#61; NOPASSWD: /path/to/program}}&lt;br /&gt;
&lt;br /&gt;
また、全てのユーザーに個別のコマンドを許可することも可能です。通常ユーザーでサーバーから Samba 共有をマウントするには:&lt;br /&gt;
&lt;br /&gt;
 %users ALL=/sbin/mount.cifs,/sbin/umount.cifs&lt;br /&gt;
&lt;br /&gt;
これによって users グループのメンバーである全てのユーザーが全てのマシン (ALL) から {{ic|/sbin/mount.cifs}} や {{ic|/sbin/umount.cifs}} コマンドを実行できるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|visudo}} で {{ic|vi}} の代わりに {{ic|nano}} を使うには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
2=Defaults editor=/usr/bin/rnano&lt;br /&gt;
}}&lt;br /&gt;
{{ic|1=# EDITOR=nano visudo}} のエクスポートは何にでも {{ic|EDITOR}} として使うことができるためにセキュリティリスクとされています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== sudo を使ってファイルを編集する ====&lt;br /&gt;
root で {{ic|vim}} などのテキストエディタを使用するのはセキュリティ上の脆弱性になりえます。ユーザーは任意のシェルコマンドを実行でき、コマンドを実行したユーザーのログが残らないからです。これを解決するには、以下をシェルの設定ファイルに追加してください:&lt;br /&gt;
&lt;br /&gt;
 export SUDO_EDITOR=rvim&lt;br /&gt;
&lt;br /&gt;
ファイルの編集には {{ic|sudoedit filename}} または {{ic|sudo -e filename}} を使って下さい。自動的に {{ic|rvim}} によって {{ic|filename}} が編集されるようになり、テキストエディタからのシェルコマンドが無効になります。&lt;br /&gt;
&lt;br /&gt;
=== root ログインの制限 ===&lt;br /&gt;
[[sudo]] を適切に設定することで、ユーザビリティをあまり下げることなく完全な root アクセスを大分制限することが可能です。[[sudo]] を使える状態のまま root を無効化したい場合、{{ic|passwd -l root}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== 特定のユーザーだけに許可を与える ====&lt;br /&gt;
[[Wikipedia:Pluggable authentication module|PAM]] の {{ic|pam_wheel.so}} は {{ic|wheel}} グループに入っているユーザーだけに {{ic|su}} を使用したログインを許可します。{{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} の両方を編集して次の行をアンコメントしてください:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Uncomment the following line to require a user to be in the &amp;quot;wheel&amp;quot; group.&lt;br /&gt;
auth		required	pam_wheel.so use_uid&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
特権コマンドを実行できる既存のユーザーだけが root でログインできるようになります。&lt;br /&gt;
&lt;br /&gt;
==== ssh ログインを拒否する ====&lt;br /&gt;
ローカルユーザーの root ログインを拒否したくない場合でも、[[SSH#root ログインを拒否する|SSH による root ログインを拒否]]するのがグッドプラクティスです。この目的は、ユーザーがリモートでシステムを完全に手にかける前にセキュリティ層を追加することにあります。&lt;br /&gt;
&lt;br /&gt;
==== access.conf で許容されるログインの組み合わせを指定する ====&lt;br /&gt;
&lt;br /&gt;
誰かが [[PAM]] でログインしようとすると、 {{ic|/etc/security/access.conf}} がそのログインプロパティに一致する最初の組み合わせをチェックします。そして、その組み合わせのルールに基づいて、試行が失敗するか成功するかが決まります。&lt;br /&gt;
&lt;br /&gt;
 +:root:LOCAL&lt;br /&gt;
 -:root:ALL&lt;br /&gt;
&lt;br /&gt;
特定のグループやユーザーに対してルールを設定することができます。この例では、ユーザー archie は、wheel および adm グループに属するすべてのユーザーと同様に、ローカルでのログインを許可されています。それ以外のログインは拒否されます。&lt;br /&gt;
&lt;br /&gt;
 +:archie:LOCAL&lt;br /&gt;
 +:(wheel):LOCAL&lt;br /&gt;
 +:(adm):LOCAL&lt;br /&gt;
 -:ALL:ALL&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|5|access.conf}} で確認してください。&lt;br /&gt;
&lt;br /&gt;
==強制アクセス制御==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (Mandatory Access Control, MAC) は Arch やほとんどの Linux ディストリビューションで使われている[[Wikipedia:ja:任意アクセス制御|任意アクセス制御]] (Discretionary Access Control, DAC) とは大きく異なるタイプのセキュリティポリシーです。原則的に MAC ではシステムに影響を与えるプログラムの行動は全てセキュリティルールセットによってチェックを受けます。このルールセットは、DAC とは対照的に、ユーザーが変更することは不可能です。実装方法は色々と異なるタイプが存在しますが、強制アクセス制御を使うことで実質的にコンピュータのセキュリティを著しく向上させることになります。&lt;br /&gt;
&lt;br /&gt;
===パス名 MAC===&lt;br /&gt;
パス名ベースのアクセス制御は指定されたファイルのパスに基づいてパーミッションを与えるというシンプルな形式のアクセス制御です。この形式のアクセス制御の欠点としてはファイルが移動されてもパーミッションはファイルと一緒に付いていかないということが挙げられます。プラス面となるのは、パス名ベースの MAC はラベルベースの MAC と異なり、幅広いファイルシステムに実装できることです。&lt;br /&gt;
&lt;br /&gt;
*[[AppArmor]] は [[Wikipedia:ja:カノニカル|Canonical]] によって開発されている MAC 実装で SELinux に比べて&amp;quot;簡単&amp;quot;になっています。&lt;br /&gt;
*[[TOMOYO Linux|Tomoyo]] はもうひとつのシンプルで、使いやすい強制アクセス制御を提供するシステムです。利用と実装の両面でシンプルになるように設計されており、依存するライブラリがとても少なくなっています。&lt;br /&gt;
&lt;br /&gt;
===ラベル MAC===&lt;br /&gt;
ラベルベースのアクセス制御ではファイルの拡張属性を使ってセキュリティパーミッションを管理します。このシステムはセキュリティの機能においてパス名ベースの MAC よりも間違いなく柔軟性が高い一方、拡張属性をサポートしているファイルシステムでしか動作しません。&lt;br /&gt;
&lt;br /&gt;
*[[SELinux]] は、Linux セキュリティを向上させる [[Wikipedia:ja:アメリカ国家安全保障局|NSA]] プロジェクトに基づいており、システムユーザーやロールとは完全に独立して MAC を実装しています。成長してオリジナルの設定が変わっていくシステムのコントロールを簡単に維持できる、極めて強固なマルチレベル MAC ポリシー実装を提供します。&lt;br /&gt;
&lt;br /&gt;
=== アクセス制御リスト ===&lt;br /&gt;
[[アクセス制御リスト]] (Access Control List, ACL) は何らかの方法で直接ファイルシステムにルールを付加する代わりとなる手段です。ACL はプログラムの行動を許可された挙動のリストでチェックすることによりアクセス制御を実装しています。&lt;br /&gt;
&lt;br /&gt;
==カーネルの防御==&lt;br /&gt;
&lt;br /&gt;
=== カーネルの自己防衛機能/脆弱性攻撃対策 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-hardened}} パッケージは [https://github.com/anthraxx/linux-hardened basic kernel hardening patch set] と {{pkg|linux}} パッケージよりもセキュリティに重点を置いたコンパイル時設定オプションを使用します。カスタムビルドでは、セキュリティ寄りのデフォルトとは異なる、セキュリティと性能の妥協点を選択することができます。&lt;br /&gt;
&lt;br /&gt;
しかし、このカーネルを使うといくつかのパッケージが動かなくなることに注意する必要があります。例えば&lt;br /&gt;
&lt;br /&gt;
* {{AUR|skypeforlinux-preview-bin}} のようなパッケージは動作しません。&lt;br /&gt;
* {{AUR|skypeforlinux-stable-bin}} {{AUR|skypeforlinux-stable-bin}}&lt;br /&gt;
* {{pkg|throttled}}&lt;br /&gt;
&lt;br /&gt;
[[NVIDIA]] などのアウトオブツリードライバを使用している場合、その [[DKMS]] パッケージに切り替える必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
=== ユーザー空間 ASLR の比較 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-hardened}} パッケージは、ユーザ空間プロセス用のアドレス空間レイアウトランダム化の改良された実装を提供します。{{pkg|paxtest}} コマンドは提供されるエントロピーの推定値を得るために使用されます。&lt;br /&gt;
&lt;br /&gt;
===== 64 ビット プロセス =====&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-hardened 5.4.21.a-1-hardened|&lt;br /&gt;
Anonymous mapping randomization test     : 32 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 40 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 40 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 32 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 32 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 32 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 32 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 40 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 40 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 44 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 44 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 34 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 34 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 32 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 32 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux 5.5.5-arch1-1|&lt;br /&gt;
Anonymous mapping randomization test     : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 28 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 28 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 20 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 28 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 29 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 29 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-lts 4.19.101-1-lts|&lt;br /&gt;
Anonymous mapping randomization test     : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 28 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 28 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 19 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 28 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 28 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 28 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 32ビットプロセス（x86_64カーネル上）  =====&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-hardened|&lt;br /&gt;
Anonymous mapping randomization test     : 16 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 22 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 27 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : No randomization&lt;br /&gt;
Main executable randomization (PIE)      : 18 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 16 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 16 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 24 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 24 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 28 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 18 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 16 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 18 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 18 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux|&lt;br /&gt;
Anonymous mapping randomization test     : 8 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 13 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 13 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : No randomization&lt;br /&gt;
Main executable randomization (PIE)      : 8 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 8 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 8 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 19 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 19 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 11 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 11 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 8 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 13 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: No randomization&lt;br /&gt;
Randomization under memory exhaustion @0 : No randomization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===カーネルログへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
{{Note|{{pkg|linux-hardened}} ではデフォルトで有効になっています。}}&lt;br /&gt;
&lt;br /&gt;
カーネルログにはカーネルの脆弱性を突こうとしている攻撃者にとって有益な情報、保護が必要なメモリーアドレスなどが含まれています。{{ic|kernel.dmesg_restrict}} フラグは  (デフォルトで root として実行しているプロセスしか持たない) {{ic|CAP_SYS_ADMIN}} ケイパビリティのないログへのアクセスを禁止します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-dmesg-restrict.conf|2=kernel.dmesg_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
===proc ファイルシステムのカーネルポインタへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
{{Note|{{pkg|linux-hardened}} ではデフォルトで {{ic|1=kptr_restrict=2}} と設定されています。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.kptr_restrict}} を有効にすると {{ic|CAP_SYSLOG}} のない通常ユーザーから {{ic|/proc/kallsyms}} のカーネルシンボルのアドレスが秘匿され、動的にアドレス・シンボルを解決するカーネル exploit が難しくなります。これは事前にコンパイルされた Arch Linux カーネルではあまり意味がありません、周到な攻撃者はカーネルパッケージをダウンロードしてそこから手動でシンボルを取得することができるからです。しかしながら自分でカーネルをコンパイルする場合は、ローカルの root 攻撃を減らす効果があります。ただし root 以外のユーザーで使用する場合いくつかの {{Pkg|perf}} コマンドが破壊されます (メインの {{Pkg|perf}} 機能には結局 root アクセスが必要になりますが)。詳しくは {{Bug|34323}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-kptr-restrict.conf|2=kernel.kptr_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
=== BPF のハードニング ===&lt;br /&gt;
&lt;br /&gt;
BPF は、実行時にカーネル内のバイトコードを動的にロードして実行するために使用されるシステムです。ネットワーク (XDP, tc など)、トレース (kprobes, uprobes, tracepoints など)、セキュリティ (seccomp など) など、多くの Linux カーネルサブシステムで使用されています。また、高度なネットワークセキュリティ、パフォーマンスプロファイリング、ダイナミックトレースにも有効です。&lt;br /&gt;
&lt;br /&gt;
BPF はもともと [https://ja.wikipedia.org/wiki/Berkeley_Packet_Filter Berkeley Packet Filter] の頭文字をとったもので、オリジナルの古典的な BPF は BSD 用のパケットキャプチャツールに使われていたためである。これは最終的に拡張 BPF (eBPF) に発展し、その後まもなくただの BPF (頭字語ではありません) に改名されました。BPFはパケットフィルタリングツールの実装に使われることがありますが、 iptables や netfilter のようなパケットフィルタリングツールと混同しないでください。&lt;br /&gt;
&lt;br /&gt;
BPF のコードは解釈されるか、[https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9 Just-In-Time (JIT) compiler] を使ってコンパイルされるかのどちらかである。Arch のカーネルは {{ic|CONFIG_BPF_JIT_ALWAYS_ON}} でビルドされており、BPF インタープリタを無効にして全ての BPF を JIT コンパイラでコンパイルするよう強制しています。これにより、攻撃者が BPF を使って SPECTRE 型の脆弱性を悪用したエスカレーション攻撃をすることが難しくなります。詳しくは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=290af86629b25ffd1ed6232c4e9107da031705cb the kernel patch which introduced CONFIG_BPF_JIT_ALWAYS_ON] を参照してください。&lt;br /&gt;
&lt;br /&gt;
カーネルは JIT コンパイルされた BPF に対して、パフォーマンスと多くの BPF プログラムをトレース・デバッグする能力を犠牲にして、ある種の JIT スプレー攻撃を軽減するためのハードニング機能を備えています。この機能は {{ic|net.core.bpf_jit_harden}} を {{ic|1}} に設定することによって有効になります。(非特権コードのハードニングを有効にする) または {{ic|2}} です。(すべてのコードのハードニングを有効にする)。&lt;br /&gt;
&lt;br /&gt;
詳しくは、[https://www.kernel.org/doc/html/latest/admin-guide/sysctl/net.html カーネルドキュメント] の {{ic|net.core.bpf_*}} 設定を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{Pkg|linux-hardened}} では、デフォルトで {{ic|1=net.core.bpf_jit_harden=2}} が設定されており、 {{ic|0}} ではありません。&lt;br /&gt;
* デフォルトでは、BPFプログラムは非特権ユーザでも実行可能です。この挙動を変更するには {{ic|1=kernel.unprivileged_bpf_disabled=1}} [https://access.redhat.com/security/cve/cve-2021-33624] を設定してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===ptrace スコープ===&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.yama.ptrace_scope}} フラグによって、Arch は Yama LSM をデフォルトで有効にしています。このフラグはプロセスが {{ic|CAP_SYS_PTRACE}} のないスコープの外で他のプロセスに {{ic|ptrace}} コールを実行するのを止めます。多くのデバッグツールがいくつかの機能を使うためにこれを必要としますが、セキュリティの面では飛躍的な改善になります。この機能がないと、名前空間のような外部レイヤーを適用しないかぎり同一ユーザーで動作するプロセスの分割は基本的に行われません。デバッガを既存プロセスにアタッチできることはこの欠点のデモンストレーションです。&lt;br /&gt;
&lt;br /&gt;
====破壊される機能の例====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|sudo}} を使って特定のユーザーに、パスワード有り無しで許可を与えたりすることで、root で以下のコマンドを実行することは可能です。}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|gdb -p $PID}}&lt;br /&gt;
* {{ic|strace -p $PID}}&lt;br /&gt;
* {{ic|perf trace -p $PID}}&lt;br /&gt;
* {{ic|reptyr $PID}}&lt;br /&gt;
&lt;br /&gt;
=== リンクの [[Wikipedia:TOCTOU|TOCTOU]] 攻撃を防止する ===&lt;br /&gt;
&lt;br /&gt;
この機能が追加された日時や根拠についてはこの [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=800179c9b8a1e796e441674776d11cd4c05d61d7 commit メッセージ]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 fs.protected_hardlinks = 1&lt;br /&gt;
 fs.protected_symlinks = 1&lt;br /&gt;
&lt;br /&gt;
{{Note|現在は {{ic|/usr/lib/sysctl.d/50-default.conf}} によってデフォルトで有効にされています。}}&lt;br /&gt;
&lt;br /&gt;
===hidepid===&lt;br /&gt;
&lt;br /&gt;
通常は {{ic|/proc}} から他のユーザーのプロセスを確認することができますが、カーネルにはプロセスを秘匿する機能が存在し {{ic|proc}} ファイルシステムを {{ic|1=hidepid=}} と {{ic|1=gid=}} オプションを使ってマウントすることで有効になります。詳しいドキュメントは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/proc.txt#n1919 こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
プロセスを隠すことで侵入者は動作中のプロセスに関する情報を得るのが難しくなります (どのデーモンが特権権限で動作しているか、プログラムの実行に使われているユーザーはどれか、など)。さらに、引数で機密情報を渡すような問題のあるプログラムから情報が漏れてしまうことを防ぎます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|filesystem}} パッケージに含まれている {{ic|proc}} [[ユーザーとグループ#システムグループ|グループ]]はホワイトリストとして機能し、グループに含まれているユーザーは他のユーザーのプロセス情報を閲覧することが可能です。{{ic|/proc/&amp;lt;pid&amp;gt;}} ディレクトリから他のユーザーの情報を得る必要があるユーザーやサービスがある場合、[[ユーザーとグループ#グループ管理|グループにユーザーを追加]]してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|proc}} グループに含まれていないユーザーに他のユーザーのプロセス情報を表示しない設定は以下の通りです:&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
proc	/proc	proc	nosuid,nodev,noexec,hidepid=2,gid=proc	0	0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Xorg]] を動作させるために systemd-logind の例外を追加する必要があります:&lt;br /&gt;
{{hc|/etc/systemd/system/systemd-logind.service.d/hidepid.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
SupplementaryGroups=proc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== モジュールのロードを制限する ===&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch カーネルは {{ic|CONFIG_MODULE_SIG_ALL}} が有効で、{{Pkg|linux}} パッケージの一部としてビルドされた全てのカーネルモジュールに署名します。これにより、カーネルは有効なキーで署名されたモジュールだけをロードするように制限できます。実際、これはローカルでコンパイルされた、もしくは {{Pkg|virtualbox-host-modules-arch}} などのパッケージによって提供された、ツリー外のモジュールは全てロードできないことを意味します。カーネルモジュールの読み込みは [[カーネルパラメータ]] を設定することで制限することができます。{{ic|1=module.sig_enforce=1}}. 詳細は、[https://www.kernel.org/doc/html/latest/admin-guide/module-signing.html kernel documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== kexec を無効にする ===&lt;br /&gt;
&lt;br /&gt;
Kexec は、現在実行中のカーネルを置き換えることを可能にします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/51-kexec-restrict.conf|2=&lt;br /&gt;
kernel.kexec_load_disabled = 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|kexec は {{pkg|linux-hardened}}  ではデフォルトで無効になっています。}}&lt;br /&gt;
&lt;br /&gt;
=== カーネルロックダウンモード ===&lt;br /&gt;
&lt;br /&gt;
Linux 5.4 以降、カーネルは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aefcf2f4b58155d27340ba5f9ddbe9513da8286d] オプションで [https://mjg59.dreamwidth.org/55105.html ロックダウン機能を獲得しました] これは  UID 0 (root) とカーネルの間の境界を強化することを目的としています。この機能を有効にすると、ハードウェアやカーネルへの低レベルのアクセスに依存している一部のアプリケーションは動作しなくなる可能性があります。&lt;br /&gt;
&lt;br /&gt;
ロックダウンを使用するには、その LSM が初期化され、ロックダウンモードが設定されている必要があります。&lt;br /&gt;
&lt;br /&gt;
すべての [[カーネル#公式サポートカーネル|オフィシャルサポートカーネル]] は LSM を初期化しますが、ロックダウンモードを強制するものはありません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|有効な LSM は {{ic|cat /sys/kernel/security/lsm}}}} を実行することで確認することができます。&lt;br /&gt;
&lt;br /&gt;
ロックダウンは2つの動作モードがあります。&lt;br /&gt;
&lt;br /&gt;
* ユーザーランドが実行中のカーネルを変更できるカーネル機能 (kexec, bpf) は無効化されます。&lt;br /&gt;
* {{ic|confidentiality}}: ユーザーランドがカーネルから機密情報を抽出するためのカーネル機能も無効化されます。&lt;br /&gt;
&lt;br /&gt;
実行時にカーネルのロックダウンを有効にするには、以下を実行します。&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;&#039;mode&#039;&#039; &amp;gt; /sys/kernel/security/lockdown&lt;br /&gt;
&lt;br /&gt;
起動時にカーネルのロックダウンを有効にするには、[[カーネルパラメータ]] {{ic|1=lockdown=&#039;&#039;mode&#039;&#039;}} を使用します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* カーネルロックダウンを実行時に無効化することはできません。&lt;br /&gt;
* カーネルロックダウンは、[[サスペンドとハイバネート#ハイバネーション|ハイバネーション]] を無効にします。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{man|7|kernel_lockdown}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Linux Kernel Runtime Guard (LKRG) ===&lt;br /&gt;
&lt;br /&gt;
[https://www.openwall.com/lkrg/ LKRG] ({{AUR|lkrg-dkms}}) は、カーネルの整合性チェックと悪用行為の検出を行うカーネルモジュールです。&lt;br /&gt;
&lt;br /&gt;
== アプリケーションのサンドボックス化 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|標準の Arch カーネルではユーザー名前空間の {{ic|CONFIG_USER_NS}} が設定されていないため、特定のサンドボックス機能がアプリケーションから使えない場合があります。{{pkg|linux-hardened}} パッケージでは有効になっていますが、非特権での使用はデフォルトで無効になっています。{{ic|kernel.unprivileged_userns_clone}} の [[sysctl]] を {{ic|1}} に設定することで使用できるようになりますが、ローカルの権限昇格を引き起こす可能性が高くなるので注意してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{Pkg|linux}} (5.1.8 およびそれ以降)、{{Pkg|linux-lts}} (4.19.55-2 およびそれ以降)、{{Pkg|linux-zen}} (5.1.14.zen1-2 およびそれ以降) においては、{{ic|kernel.unprivileged_userns_clone}} [[sysctl]] が {{ic|0}} に設定されていない限り、非特権ユーザの名前空間の利用 ({{ic|CONFIG_USER_NS_UNPRIVILEGED}}) がデフォルトで有効化されています。これはローカルの特権昇格の攻撃対象領域を大幅に増加させるので、これを手動で無効化するか {{Pkg|linux-hardened}} カーネルを使用することが推奨されます。詳細は {{Bug|36969}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
=== Firejail ===&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] はアプリケーションやサーバーをサンドボックス化するためのシンプルで使いやすいツールです。Firejail はサーバーだけでなくブラウザなどのインターネットに接続するアプリケーションでも使うことができます。&lt;br /&gt;
&lt;br /&gt;
=== bubblewrap ===&lt;br /&gt;
&lt;br /&gt;
[[bubblewrap]] は [[Flatpak]] から開発された setuid サンドボックスアプリケーションです。Firejail よりもリソースの消費力が少なく抑えられています。ファイルパスのホワイトリストなどの機能を欠いていますが、バインドマウントやユーザー/IPC/PID/ネットワーク/cgroup 名前空間の作成ができ、簡単なサンドボックスから [https://github.com/projectatomic/bubblewrap/blob/master/demos/bubblewrap-shell.sh 複雑なサンドボックス] まで自在に使うことが可能です。&lt;br /&gt;
&lt;br /&gt;
=== chroot ===&lt;br /&gt;
&lt;br /&gt;
手動で [[chroot]] 監獄を構築する方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== Linux Containers ===&lt;br /&gt;
&lt;br /&gt;
他の手段 (KVM や Virtualbox) よりも強力な分離が必要なときは [[Linux Containers]] を選択するのもよいでしょう。LXC は仮想ハードウェアを使って擬似的な chroot で既存のカーネル上で動作します。&lt;br /&gt;
&lt;br /&gt;
=== 他の仮想化手段 ===&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]], [[KVM]], [[Xen]] などの完全な仮想化マシンを使うことでもセキュリティを向上させることができます。危険なアプリケーションを実行したり危険なウェブサイトを開いたりするときに役に立つでしょう。&lt;br /&gt;
&lt;br /&gt;
==ネットワークとファイアウォール==&lt;br /&gt;
&lt;br /&gt;
===ファイアウォール===&lt;br /&gt;
標準の Arch カーネルは [[Wikipedia:ja:iptables|Netfilter]] の [[iptables]] を使用する能力がありますが、デフォルトでは有効になっていません。[[公式リポジトリ]]から {{Pkg|iptables}} をインストールして、有効にし、ファイアウォールを設定することが強く推奨されます。&lt;br /&gt;
&lt;br /&gt;
*全般的な情報は [[iptables]] を見て下さい。&lt;br /&gt;
*iptables ファイアウォールを設定するガイドは[[シンプルなステートフルファイアウォール]]を見て下さい。&lt;br /&gt;
*netfilter を設定する他の方法は[[ファイアウォール]]を見て下さい。&lt;br /&gt;
*Bluetack などの IP アドレスのリストをブロックする方法は [[Ipset]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===カーネルパラメータ===&lt;br /&gt;
ネットワークに影響を与えるカーネルパラメータは [[sysctl]] を使って設定できます。設定方法は [[sysctl#TCP/IP スタックの防御]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===SSH===&lt;br /&gt;
[[SSH 鍵#パスワードログインの無効化|SSH 鍵を必要]]としない [[Secure Shell]] を使うのは避けましょう。これは[[Wikipedia:ja:総当たり攻撃|総当たり攻撃]]を防ぎます。また、[[Fail2ban]] や [[Sshguard]] はログを監視して [[iptables|iptables ルール]]を書き込む方式の保護を提供しますが、攻撃者がアドレスを識別して管理者からのパケットのように偽装することができるため、サービスの妨害が行われる危険性があります。&lt;br /&gt;
&lt;br /&gt;
2段階認証によって認証を強化することができます。[[Google Authenticator]] はワンタイムパスコード (OTP) を使用する2段階認証方式を提供します。&lt;br /&gt;
&lt;br /&gt;
[[Secure Shell#root ログインを拒否する|root ログインを拒否する]]のは、侵入追跡と root アクセス前のセキュリティレイヤを追加するという両方の面でグッドプラクティスです。&lt;br /&gt;
&lt;br /&gt;
===DNS===&lt;br /&gt;
&lt;br /&gt;
[[DNSSEC]] や [[DNSCrypt]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== プロキシ ===&lt;br /&gt;
&lt;br /&gt;
プロキシはアプリケーションとネットワークの間に挟まる追加レイヤーとして使われ、信頼できないソースからのデータをサニタイズします。少ない権限でプロキシを動作させることで、エンドユーザー権限で複雑なアプリケーションを実行するよりも攻撃対象を小さくすることができます。&lt;br /&gt;
&lt;br /&gt;
例えば {{Pkg|glibc}} の中に実装されている DNS リゾルバを考えてみてください。(root で実行することもある) アプリケーションにリンクされている DNS リゾルバにバグが存在した場合、リモートコード実行につながる危険があります。[[dnsmasq]] などの DNS キャッシュサーバーをインストールしてプロキシとして使うことで問題を防ぐことが可能です [https://googleonlinesecurity.blogspot.it/2016/02/cve-2015-7547-glibc-getaddrinfo-stack.html]。&lt;br /&gt;
&lt;br /&gt;
=== SSL 証明書の管理 ===&lt;br /&gt;
&lt;br /&gt;
サーバーサイドの SSL 証明書の管理については [[OpenSSL]] や [[Network Security Services]] (NSS) を参照してください。また、関連する [[Let’s Encrypt]] プロジェクトも見てください。&lt;br /&gt;
&lt;br /&gt;
デフォルトのインターネット SSL 証明書のトラストチェーンは {{Pkg|ca-certificates}} パッケージによって提供されています。Arch はデフォルトで信頼しても問題ないとされる証明書を提供しているソース (例: {{AUR|ca-certificates-cacert}}, {{Pkg|ca-certificates-mozilla}}) に依存しています。&lt;br /&gt;
&lt;br /&gt;
デフォルトの証明書を変えたいと思うことがあるかもしれません。例えば、[http://www.theregister.co.uk/2016/05/27/blue_coat_ca_certs/ ニュース] を読んで証明書を信頼しないようにしたい場合 (ソースのプロバイダーによって無効になるのを待てない場合)、Arch のインフラを使うことで簡単に設定できます:&lt;br /&gt;
# {{ic|.crt}} 形式の証明書を入手してください (例: [https://crt.sh/?id=19538258 view], [https://crt.sh/?d=19538258 download]; 既存のルート認証局の場合、システム内にあるはずです)。&lt;br /&gt;
# {{ic|/etc/ca-certificates/trust-source/blacklist/}} にコピーしてください。&lt;br /&gt;
# root で &#039;&#039;update-ca-trust&#039;&#039; を実行してください。&lt;br /&gt;
&lt;br /&gt;
お好きなブラウザを開いて&#039;&#039;&#039;信頼できない&#039;&#039;&#039;サイトとして表示されれば、ブラックリストが上手く機能しています。&lt;br /&gt;
&lt;br /&gt;
== 物理セキュリティ ==&lt;br /&gt;
&lt;br /&gt;
{{Note|リモート攻撃からコンピュータを守りたいだけの場合はこのセクションは無視してかまいません。}}&lt;br /&gt;
&lt;br /&gt;
十分な時間とリソースさえあればコンピュータへの物理的なアクセスは root アクセスになります。しかしながら、十分な防御策を張ることで&#039;&#039;実用的で&#039;&#039;高いレベルのセキュリティを得ることができます。&lt;br /&gt;
&lt;br /&gt;
攻撃者は悪意のある IEEE 1394 (FireWire), Thunderbolt, PCI Express デバイスを取り付けることでメモリーへの完全なアクセスを手に入れることができ、次に起動した時には簡単にコンピュータの完全なコントロールを手中に収めることができます [http://www.breaknenter.org/projects/inception/]。これを防ぐために出来ることは限られており、悪意のあるファームウェアをドライブに書き込むなどハードウェア自体の改変に対処することは不可能です。ただし、攻撃者の大部分にはこうした知識がなく実行されることはほとんどありません。&lt;br /&gt;
&lt;br /&gt;
[[#ディスク暗号化|ディスク暗号化]]はコンピュータが盗まれた場合にデータへのアクセスを防止しますが、あなたが次にログインしたときにデータを取得するために悪意のあるファームウェアが能力のある攻撃者によってインストールされる可能性があります。&lt;br /&gt;
&lt;br /&gt;
===BIOS をロックダウンする===&lt;br /&gt;
&lt;br /&gt;
BIOS にパスワードを追加することによってリムーバブルメディアから誰かが起動する (これはコンピュータへの root アクセスと基本的に同義です) のを予防します。使用しているドライブがブートの順番で一番最初に来ることを確認して、可能であれば他のドライブのブートを無効にしてください。&lt;br /&gt;
&lt;br /&gt;
=== ブートローダー ===&lt;br /&gt;
&lt;br /&gt;
[[Arch ブートプロセス#ブートローダー|ブートローダー]] を保護することは非常に重要です。保護されていないブートローダは、例えば {{ic|1=init=/bin/sh}} を設定することでログインの制限を回避することができます。[[カーネルパラメータ]] でシェルに直接ブートするようにします。&lt;br /&gt;
&lt;br /&gt;
==== Syslinux ====&lt;br /&gt;
&lt;br /&gt;
Syslinux は[[Syslinux#セキュリティ|ブートローダーのパスワード保護]]をサポートしています。メニューのアイテムごとにパスワードを設定したり、ブートローダー全体にパスワードの保護を設定することが可能です。&lt;br /&gt;
&lt;br /&gt;
==== GRUB ====&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] はブートローダのパスワードもサポートしています。詳しくは [[GRUB/ヒントとテクニック#GRUB メニューのパスワード保護|GRUB メニューのパスワード保護]] を参照してください。[[GRUB/ヒントとテクニック# GRUB メニューのパスワード保護|暗号化 /boot]] もサポートしていますが、これはブートローダコードの一部だけを暗号化しないままにしています。GRUB の設定、[[カーネル]]、[[initramfs]] は暗号化されています。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート ===&lt;br /&gt;
&lt;br /&gt;
[[セキュアブート]] は [[UEFI]] の機能で、コンピュータが起動するファイルの認証を可能にするものです。これは、起動パーティション内のファイルを置き換えるような、いくつかの [https://ja.wikipedia.org/wiki/%E6%82%AA%E6%84%8F%E3%81%82%E3%82%8B%E3%83%A1%E3%82%A4%E3%83%89%E6%94%BB%E6%92%83 悪意あるメイド攻撃] を防止するのに役立つ。通常、コンピュータにはベンダー (OEM) によって登録されたキーが付属しています。しかし、これを取り外して、コンピュータを「セットアップモード」にし、ユーザーが自分のキーを登録・管理できるようにすることができる。&lt;br /&gt;
&lt;br /&gt;
セキュアブートのページでは、[https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Implementing_Secure_Boot using your own keys] によってセキュアブートを設定する方法を案内しています。&lt;br /&gt;
&lt;br /&gt;
=== トラステッドプラットフォームモジュール（TPM） ===&lt;br /&gt;
&lt;br /&gt;
[[Trusted Platform Module|TPM]] は、暗号鍵が埋め込まれたハードウェア・マイクロプロセッサです。これは、最近のほとんどのコンピュータの基本的な信頼性の根源を形成し、ブートチェーンのエンドツーエンドの検証を可能にします。内部スマートカードとして使用したり、コンピュータ上で動作するファームウェアを証明したり、改ざん防止とブルートフォース耐性のあるストアにユーザーがシークレットに挿入することができます。&lt;br /&gt;
&lt;br /&gt;
=== リムーバブル フラッシュ ドライブ上のブートパーティション ===&lt;br /&gt;
&lt;br /&gt;
ブートパーティションをフラッシュドライブに置き、それがないとシステムが起動しないようにする、というのはよくあるアイデアです。このアイデアの支持者はしばしば [[セキュリティ#ディスク暗号化|ディスク暗号化]] を併用し、ブートパーティションに置かれた [https://wiki.archlinux.org/title/Dm-crypt/Specialties#Encrypted_/boot_and_a_detached_LUKS_header_on_USBdetached encryption headers] を使っている人もいます。&lt;br /&gt;
&lt;br /&gt;
この方法は [https://wiki.archlinux.org/title/Dm-crypt/Specialties#Encrypted_/boot_and_a_detached_LUKS_header_on_USB encrypting /boot] と統合することも可能です。&lt;br /&gt;
&lt;br /&gt;
=== 自動ログアウト ===&lt;br /&gt;
[[Bash]] または [[Zsh]] を使っている場合、{{ic|TMOUT}} によってタイムアウトによるシェルからの自動ログアウトを設定できます。&lt;br /&gt;
&lt;br /&gt;
例えば、以下は仮想コンソールから自動でログアウトします (X11 のターミナルエミュレータからはログアウトしません):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/profile.d/shell-timeout.sh|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
[ -z &amp;quot;$DISPLAY&amp;quot; ] &amp;amp;&amp;amp; export TMOUT;&lt;br /&gt;
case $( /usr/bin/tty ) in&lt;br /&gt;
	/dev/tty[0-9]*) export TMOUT;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
(X のコンソールも含めて) 全ての Bash/Zsh プロンプトでタイムアウトさせたい場合は、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ export TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
シェルで何かコマンドが動作している間はこのタイムアウトは動作しないので注意してください (例: SSH セッションや {{ic|TMOUT}} をサポートしていない他のシェル)。しかしながら固まった GDM/Xorg を root で再起動するのに VC を使っているような場合は、とても有用です。&lt;br /&gt;
&lt;br /&gt;
=== 不正なUSBデバイスから保護する ===&lt;br /&gt;
&lt;br /&gt;
[[Usbguard]] は、デバイスの属性に基づく基本的なホワイトリストおよびブラックリスト機能を実装することで、不正な USB デバイス (別名 [https://ja.wikipedia.org/wiki/BadUSB BadUSB], [https://github.com/samyk/poisontap PoisonTap] または [https://lanturtle.com/ LanTurtle]) からコンピューターを保護できるソフトウェアフレームワークです。&lt;br /&gt;
&lt;br /&gt;
=== 揮発性データの収集 ===&lt;br /&gt;
&lt;br /&gt;
電源が入っているコンピュータは、[https://fedvte.usalearning.gov/courses/CSI/course/videos/pdf/CSI_D01_S05_T01_STEP.pdf volatile data collection] に対して脆弱である可能性があります。コンピュータの電源を入れる必要がない時や、コンピュータの物理的な安全性が一時的に損なわれる場合（例:セキュリティチェックポイントを通過する時）には、コンピュータの電源を完全に切ることがベストプラクティスです。&lt;br /&gt;
&lt;br /&gt;
== パッケージ ==&lt;br /&gt;
&lt;br /&gt;
=== パッケージの認証 ===&lt;br /&gt;
パッケージの署名が適正に使われていないと [http://www.cs.arizona.edu/stork/packagemanagersecurity/attacks-on-package-managers.html#overview パッケージマネージャへの攻撃] が考えられ、さらに [http://www.cs.arizona.edu/stork/packagemanagersecurity/faq.html 適切な署名システム] を使っているパッケージマネージャにも影響を与える可能性があります。Arch はデフォルトでパッケージの署名を使用しており5つの信頼されたマスターキーによる web of trust を使っています。詳しくは [[Pacman-key]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== アップグレード ===&lt;br /&gt;
&lt;br /&gt;
定期的に [[システムメンテナンス#システムのアップグレード|システムのアップグレード]] を行うことが重要です。&lt;br /&gt;
&lt;br /&gt;
=== 脆弱性アラートの確認 ===&lt;br /&gt;
&lt;br /&gt;
National Vulnerability Database が提供する Common Vulnerabilities and Exposure (CVE) Security Alert の更新を購読し、[https://nvd.nist.gov/download.cfm NVD Download webpage] で見つけてください。[https://security.archlinux.org/ Arch Linux Security Tracker] は Arch Linux Security Advisory (ASA), Arch Linux Vulnerability Group (AVG), CVE データセットを表形式でまとめた、特に有用なリソースです。ツール {{Pkg|arch-audit}} は実行中のシステムに影響を与える脆弱性をチェックするために使われます。グラフィカルなシステムトレイである {{Pkg|arch-audit-gtk}} も使うことができます。[https://wiki.archlinux.org/title/Arch_Security_Team Arch Security Team]も参照してください。&lt;br /&gt;
&lt;br /&gt;
特にメインレポジトリや AUR 以外の手段でソフトウェアをインストールしている場合は、あなたが使っているソフトウェアのリリース通知を購読することも検討すべきです。いくつかのソフトウェアには、セキュリティに関する通知を受け取るために購読できるメーリングリストがあります。ソースコードホスティングサイトはしばしば新しいリリースの RSS フィードを提供しています。&lt;br /&gt;
&lt;br /&gt;
=== パッケージの再ビルド ===&lt;br /&gt;
&lt;br /&gt;
攻撃対象領域を減らす手段として、パッケージをリビルドし、不要な関数や機能を削除することができます。例えば、{{Pkg|bzip2}} は [https://security.archlinux.org/CVE-2016-3189 CVE-2016-3189] を回避するために {{ic|bzip2recover}} を使わずにリビルドすることが可能です。カスタムハードニングフラグは、手動またはラッパーを介して適用することもできます。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! フラグ !! 目的&lt;br /&gt;
|-&lt;br /&gt;
| -D_FORTIFY_SOURCE=2 || ランタイムバッファオーバーフローの検出 &lt;br /&gt;
|-&lt;br /&gt;
| -D_GLIBCXX_ASSERTIONS || C++ の文字列とコンテナのランタイム境界チェック &lt;br /&gt;
|-&lt;br /&gt;
| -fasynchronous-unwind-tables || バックトレースの信頼性向上 &lt;br /&gt;
|-&lt;br /&gt;
| -fexceptions || テーブルベースのスレッドキャンセルを有効にする &lt;br /&gt;
|-&lt;br /&gt;
| -fpie -Wl,-pie || 実行可能ファイルに対する完全な ASLR &lt;br /&gt;
|-&lt;br /&gt;
| -fpic -shared || 共有ライブラリのテキスト再配置を行わない &lt;br /&gt;
|-&lt;br /&gt;
| -fplugin=annobin || ハードニング品質管理用データの作成 &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-clash-protection || スタックオーバーフロー検出の信頼性向上 &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-protector or -fstack-protector-all || スタックスマッシュプロテクター &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-protector-strong || 同様に &lt;br /&gt;
|-&lt;br /&gt;
| -g || デバッグ情報を生成する &lt;br /&gt;
|-&lt;br /&gt;
| -grecord-gcc-switches || デバッグ情報にコンパイラのフラグを格納する &lt;br /&gt;
|-&lt;br /&gt;
| -mcet -fcf-protection || 制御フローの完全性保護 &lt;br /&gt;
|-&lt;br /&gt;
| -O2 || 推奨される最適化 &lt;br /&gt;
|-&lt;br /&gt;
| -pipe || 一時ファイルを回避し、ビルドを高速化します。 &lt;br /&gt;
|-&lt;br /&gt;
| -Wall || 推奨されるコンパイラの警告 &lt;br /&gt;
|-&lt;br /&gt;
| -Werror=format-security || 安全でない可能性のあるフォーマット文字列の引数を拒否する &lt;br /&gt;
|-&lt;br /&gt;
| -Werror=implicit-function-declaration || 関数プロトタイプの欠落を却下する &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,defs || アンダーリンクの検出と拒否 &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,now || 遅延バインディングを無効にする &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,relro || 移設後の読み出し専用セグメント &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* [https://developers.redhat.com/blog/2018/03/21/compiler-and-linker-flags-gcc/ Flags and info ソース]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://security.archlinux.org/ Arch Linux セキュリティトラッカー]&lt;br /&gt;
* ArchWiki のセキュリティアプリケーションのリスト: [[アプリケーション一覧/セキュリティ]]&lt;br /&gt;
* [https://wiki.centos.org/HowTos/OS_Protection CentOS Wiki: OS Protection]&lt;br /&gt;
* [https://www.ibm.com/developerworks/linux/tutorials/l-harden-desktop/index.html Hardening the Linux desktop]&lt;br /&gt;
* [https://www.ibm.com/developerworks/linux/tutorials/l-harden-server/index.html Hardening the Linux server]&lt;br /&gt;
* [https://github.com/lfit/itpol/blob/master/linux-workstation-security.md Linux Foundation: Linux ワークステーションのセキュリティチェックリスト]&lt;br /&gt;
* [https://www.privacytools.io/ privacytools.io Privacy Resources]&lt;br /&gt;
* [https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/index.html Red Hat Enterprise Linux 7 セキュリティガイド]&lt;br /&gt;
* [https://www.debian.org/doc/manuals/securing-debian-howto/securing-debian-howto.en.pdf Debian 安全化マニュアル (PDF)]&lt;br /&gt;
* [http://crunchbang.org/forums/viewtopic.php?id=24722 The paranoid #! Security Guide]&lt;br /&gt;
* [https://www.auscert.org.au/resources/publications/guidelines/unix-linux/unix-and-linux-security-checklist-v3.0 UNIX and Linux Security Checklist v3.0]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=29595</id>
		<title>セキュリティ</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;diff=29595"/>
		<updated>2023-02-01T00:45:47Z</updated>

		<summary type="html">&lt;p&gt;Hikali: /* セキュアブート */ 語尾&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:セキュリティ]]&lt;br /&gt;
[[Category:ファイルシステム]]&lt;br /&gt;
[[Category:ネットワーク]]&lt;br /&gt;
[[en:Security]]&lt;br /&gt;
[[fa:امنیت]]&lt;br /&gt;
[[ru:Security]]&lt;br /&gt;
[[zh-hans:Security]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|PAM}}&lt;br /&gt;
{{Related|ケイパビリティ}}&lt;br /&gt;
{{Related|アプリケーション一覧/セキュリティ}}&lt;br /&gt;
{{Related|:カテゴリ:セキュリティ}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
この記事では Arch Linux システムを防御するための推奨事項とベストプラクティスを並べています。&lt;br /&gt;
&lt;br /&gt;
==概念==&lt;br /&gt;
*セキュリティを厳しくするあまりシステムが使い物にならなくなってしまう可能性があります。うまいやり方は度を越さない程度にセキュリティを強化します。&lt;br /&gt;
*セキュリティを高めるために出来ることは数多く存在しますが、一番の脅威はいつだってユーザー自身です。セキュリティを考える時は、多層防御を考える必要があります。ある層が突破されたとしても、他の層が攻撃を防御しなくてはなりません。ただし全てのネットワークからマシンを切断して、金庫にしまって決して使わないかぎり、システムを100%セキュアにすることは不可能です。&lt;br /&gt;
*少しだけ病的なまでの心配性 (パラノイド) になりましょう。それは役に立ちます。そして疑り深くなってください。話がうますぎるように聞こえたら、おそらくその通りです。&lt;br /&gt;
*[[Wikipedia:ja:最小権限の原則|最小権限の原則]]: システムの各部位は使用に必要なことにだけしかアクセスできないようにするべきで、それ以上は必要ありません。&lt;br /&gt;
&lt;br /&gt;
==パスワード==&lt;br /&gt;
パスワードは安全な linux システムのかぎです。パスワードは[[ユーザーとグループ|ユーザーアカウント]], [[ディスク暗号化|暗号化されたファイルシステム]], [[SSH 鍵|SSH]]/[[GPG]] 鍵などを守ります。コンピュータを使用する人を信頼するのに使う主要な手段なので、安全なパスワードを選んでそれを保護するというのがセキュリティの大部分と言っても過言ではありません。&lt;br /&gt;
&lt;br /&gt;
===強力なパスワードの選び方===&lt;br /&gt;
&lt;br /&gt;
パスワードは簡単に[[Wikipedia:ja:パスワードクラック|割り出されたり]]または個人情報から類推されないようにすることが重要です。そういうわけで、辞書に載っている単語やあなたの飼っている犬の名前などは使わないようにしましょう。パスワードは出来るだけ8文字以上で、小文字と大文字を混ぜてください。さらに数字や特殊文字も1文字以上含めると良いでしょう。当たり前ですが、長くて複雑なパスワードが基本的に良いパスワードとされます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pwgen}} や {{AUR|apg}} などのツールは安全なパスワードを生成するのに役立ちます。&lt;br /&gt;
&lt;br /&gt;
また、ある文章の各単語の一番最初を取ってパスワードを作ることもできます。&lt;br /&gt;
例えば “the girl is walking down the rainy street” なら “t6!WdtR5” とパスワードにすることができます。この方法はパスワードを覚えるのをずっと簡単にしてくれます。さらに、入力するのが面倒くさくなりますがパスワードを “The girl is walking down the rainy street&amp;quot; にすることも可能です。&lt;br /&gt;
&lt;br /&gt;
===パスワードの管理===&lt;br /&gt;
強固なパスワードを選び出したら、それを安全に保管してください。[[Wikipedia:ja:ソーシャル・エンジニアリング|心理操作]]や[[Wikipedia:Shoulder surfing (computer security)|ショルダーサーフィン]]に注意したり、セキュアでないサーバーから必要以上に情報が流出するのをふせぐためにパスワードを再利用しないようにしてください。{{Pkg|pass}}, {{AUR|keepassx}}, {{Pkg|gnome-keyring}} などのツールは大量の複雑なパスワードを管理するのに役立ちます。[[Wikipedia:ja:LastPass|Lastpass]] はデバイス間で同期するためにオンラインで暗号化されたパスワードを保存するサービスですが、クローズドソースのコードと外部の企業の両方を信頼する必要があります。&lt;br /&gt;
&lt;br /&gt;
概して、安全なパスワードは覚えにくいからといって安全でないパスワードを使ってはいけません。パスワードはバランスを取る必要があります。弱いパスワードをたくさん作るよりは、安全なパスワードの暗号化されたデータベースを作り、一つの強いマスターパスワードで守るほうが良いでしょう。パスワードを紙に書くのも、物理的なセキュリティを必要としますがソフトウェアの脆弱性を防ぐ点では同じくらい有効です [https://www.schneier.com/blog/archives/2005/06/write_down_your.html]。&lt;br /&gt;
&lt;br /&gt;
===パスワードのハッシュ===&lt;br /&gt;
{{Warning|SHA512 は高速なハッシュ関数として設計されており、パスワードのハッシュ用には作られていません。bcrypt や scrypt などに比べて SHA512 によってハッシュ化されたパスワードには攻撃者は&#039;&#039;はるかに&#039;&#039;高速にブルートフォース攻撃をすることができます。}}&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch のハッシュ [[SHA パスワードハッシュ|sha512]] はとても強固で変更する必要はありません。デフォルトでは、{{ic|/etc/shadow}} にパスワードがハッシュ化されて保存され、root にだけ読み取り許可を与え、{{ic|/etc/passwd}} にはユーザー識別子だけが保存されます。従って、[[#root の制限|root ユーザーが安全]]である限り、ファイルが外部システムにコピーされたり解読されることはありえません。&lt;br /&gt;
&lt;br /&gt;
[http://www.slashroot.in/how-are-passwords-stored-linux-understanding-hashing-shadow-utils How are passwords stored in Linux (Understanding hashing with shadow utils)] も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== pam_cracklib を用いた強力なパスワードの強制 ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;pam_cracklib&#039;&#039; は[[Wikipedia:ja:辞書攻撃|辞書攻撃]]からの防御を提供し、システム全体で強制するパスワードポリシーの設定を補助します。&lt;br /&gt;
&lt;br /&gt;
{{Warning|&#039;&#039;root&#039;&#039; アカウントはこのポリシーの影響を受けません。}}&lt;br /&gt;
{{Note|&#039;&#039;root&#039;&#039; アカウントを利用することで望ましい/設定されたポリシーを迂回したユーザーのパスワードを設定することができます。これは一時的なパスワードを設定するときに便利です。}}&lt;br /&gt;
&lt;br /&gt;
例えば以下のようなポリシーを強制させたい場合:&lt;br /&gt;
* エラー時に2回パスワードプロンプト&lt;br /&gt;
* 最小で10文字の長さ (minlen オプション)&lt;br /&gt;
* 新しくパスワードを設定する場合、少なくとも6文字は古いパスワードと異なる (difok オプション)&lt;br /&gt;
* 少なくとも1文字数字を含む (dcredit オプション)&lt;br /&gt;
* 少なくとも1文字は大文字を含む (ucredit オプション)&lt;br /&gt;
* 少なくとも1文字は異なる文字を含む (ocredit オプション)&lt;br /&gt;
* 少なくとも1文字は小文字を含む (lcredit オプション)&lt;br /&gt;
&lt;br /&gt;
{{ic|/etc/pam.d/passwd}} ファイルを以下のように書き換えます:&lt;br /&gt;
{{bc|1=&lt;br /&gt;
#%PAM-1.0&lt;br /&gt;
password required pam_cracklib.so retry=2 minlen=10 difok=6 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1&lt;br /&gt;
password required pam_unix.so use_authtok sha512 shadow&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|password required pam_unix.so use_authtok}} でパスワードのプロンプトを表示するときに &#039;&#039;pam_unix&#039;&#039; モジュールではなく &#039;&#039;pam_cracklib&#039;&#039; によるプロンプトを使うようになります。&lt;br /&gt;
&lt;br /&gt;
詳細な情報については pam_cracklib(8) と pam_unix(8) の man ページを参照してください。&lt;br /&gt;
&lt;br /&gt;
== CPU ==&lt;br /&gt;
&lt;br /&gt;
=== マイクロコード ===&lt;br /&gt;
&lt;br /&gt;
CPU のマイクロコードに対する重要なセキュリティ更新プログラムをインストールする方法については、[[マイクロコード]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアの脆弱性 ===&lt;br /&gt;
&lt;br /&gt;
CPU の中には、ハードウェアの脆弱性を含んでいるものがあります。これらの脆弱性の一覧と、特定の使用シナリオに合わせてこれらの脆弱性を緩和するためにカーネルをカスタマイズするのに役立つ緩和策の選択ガイドについては、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/ kernel documentation on hardware vulnerabilities] を参照してください。&lt;br /&gt;
&lt;br /&gt;
既知の脆弱性の影響を受けているかどうかを確認するには、以下を実行してください。&lt;br /&gt;
&lt;br /&gt;
 $ grep -r . /sys/devices/system/cpu/vulnerabilities/&lt;br /&gt;
&lt;br /&gt;
ほとんどの場合、カーネルとマイクロコードを更新することで、脆弱性を軽減することができます。&lt;br /&gt;
&lt;br /&gt;
==== 同時マルチスレッディング (ハイパースレッディング) ====&lt;br /&gt;
&lt;br /&gt;
[https://ja.wikipedia.org/wiki/%E5%90%8C%E6%99%82%E3%83%9E%E3%83%AB%E3%83%81%E3%82%B9%E3%83%AC%E3%83%83%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0 同時マルチスレッディング]] (SMT) は、インテル CPU のハイパースレッディングとも呼ばれ、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html L1 Terminal Fault] および [https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html Microarchitectural Data Sampling] 脆弱性の原因となる可能性のあるハードウェア機能です。Linux カーネルとマイクロコードのアップデートには、既知の脆弱性に対する緩和策が含まれていますが、[https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/l1tf.html#virtualization-with-untrusted-guests 信頼できない仮想化ゲストが存在する場合、特定の CPU で SMT を無効にしたほうが良い場合があります。]&lt;br /&gt;
&lt;br /&gt;
SMT は、システムのファームウェアで無効にできることがよくあります。詳細については、マザーボードまたはシステムのドキュメントを参照してください。また、以下の [[カーネルパラメータ]] を追加することで、カーネルで SMT を無効にすることができます。&lt;br /&gt;
&lt;br /&gt;
 l1tf=full,force mds=full,nosmt mitigations=auto,nosmt nosmt=force&lt;br /&gt;
&lt;br /&gt;
== メモリ ==&lt;br /&gt;
&lt;br /&gt;
===ハード化された malloc ===&lt;br /&gt;
&lt;br /&gt;
[https://github.com/GrapheneOS/hardened_malloc hardened_malloc] ({{AUR|hardened_malloc}}, {{AUR|hardened-malloc-git}}) は [https://ja.wikipedia.org/wiki/GNU_C%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA glibc] の malloc() をハード化した代替品です。元々は Android の [[Wikipedia:Bionic (software)|Bionic]] と [https://ja.wikipedia.org/wiki/Musl musl] に組み込むために開発されましたが、 x86_64 アーキテクチャの標準 Linux ディストリビューションのサポートにも組み込みました。&lt;br /&gt;
&lt;br /&gt;
hardened_malloc はまだ glibc に統合されていませんが（支援とプルリクエストは歓迎します）、LD_PRELOAD と一緒に簡単に使用することができます。これまでのテストでは、 {{ic|/etc/ld.so.preload}} でグローバルに有効にすると、 一握りのアプリケーションにしか問題を起こしません。例えば、{{ic|getrandom}} が標準のホワイトリストにないため、{{ic|seccomp}} 環境フラグが無効でないと {{ic|man}} は正常に動作しませんが、これはシステムコールを追加して再構築すれば簡単に修正可能です。hardened_malloc は性能上のコストがあるので、どの実装を使うかは攻撃対象領域と性能上の必要性に基づいてケースバイケースで決めるとよいでしょう。&lt;br /&gt;
&lt;br /&gt;
スタンドアロンで試すには、hardened-malloc-preload ラッパー スクリプトを使用するか、適切なプリロード値でアプリケーションを手動で開始します。&lt;br /&gt;
&lt;br /&gt;
 LD_PRELOAD=&amp;quot;/usr/lib/libhardened_malloc.so&amp;quot; /usr/bin/firefox&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] の正しい使い方は、その wiki ページにあります。また、hardened_malloc の設定可能なビルドオプションは、githubレポで見つけることができます。&lt;br /&gt;
&lt;br /&gt;
== ストレージ ==&lt;br /&gt;
&lt;br /&gt;
===ディスク暗号化===&lt;br /&gt;
&lt;br /&gt;
[[ディスク暗号化]]、特に[[#パスワード|強固なパスフレーズ]]による完全ディスク暗号化は、物理的なリカバリからデータを守る唯一の方法です。コンピュータの電源がオフになっていて問題のディスクがアンマウントされている時は完璧なセキュリティを提供します。&lt;br /&gt;
&lt;br /&gt;
しかしながら、コンピュータの電源が入れられてドライブがマウントされると、そのデータは暗号化されていないドライブと同じように無防備になります。そのためデータが必要なくなったときはすぐにデータのパーティションをアンマウントするのが最善です。&lt;br /&gt;
&lt;br /&gt;
[[Dm-crypt]] など特定のプログラムでは、ループファイルを物理ボリュームとして暗号化することができます。これはシステムの特定部分だけを守りたいときに完全なディスク暗号化の代わりの選択肢となりえます。&lt;br /&gt;
&lt;br /&gt;
=== ファイルシステム ===&lt;br /&gt;
&lt;br /&gt;
現在カーネルは {{ic|fs.protected_hardlinks}} や {{ic|fs.protected_symlinks}} sysctl スイッチが有効になっていればハードリンクやシンボリックリンクに関するセキュリティの問題を解決するので、world-writable なディレクトリを分離させるセキュリティ的な利点はもはや存在しません。&lt;br /&gt;
&lt;br /&gt;
それでもディスク容量が消耗したときのダメージを低減させる荒っぽい方法として world-writable なディレクトリを含むパーティションが分割されることがあります。しかしながら、サービスを落とすには {{ic|/var}} や {{ic|/tmp}} などのパーティションを一杯にするだけで十分です。この問題の対処についてはもっと柔軟性のある方法が存在します (クォータなど)、またファイルシステムによっては関連する機能を持っていることがあります (btrfs はサブボリュームにクォータを設定できます)。&lt;br /&gt;
&lt;br /&gt;
====マウントオプション====&lt;br /&gt;
&lt;br /&gt;
最小権限の原則に従って、パーティションは (機能性を失わない限りで) 最も制限的なマウントオプションを使ってマウントすると良いでしょう。&lt;br /&gt;
&lt;br /&gt;
*{{ic|nodev}}: ファイルシステム上のキャラクタ・ブロック特殊デバイスを解釈しない。&lt;br /&gt;
*{{ic|nosuid}}: set-user-identifier や set-group-identifier ビットの効果を許可しない。&lt;br /&gt;
*{{ic|noexec}}: マウントされたファイルシステム上の全てのバイナリの直接実行を許可しない。&lt;br /&gt;
&lt;br /&gt;
{{Note|データパーティションはいつでも {{ic|nodev}}, {{ic|nosuid}}, {{ic|noexec}} でマウントするべきです。}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |&#039;&#039;&#039;パーティション&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nodev}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|nosuid}}&lt;br /&gt;
| align=&amp;quot;center&amp;quot; |{{ic|noexec}}&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/var}}||yes||yes||yes &amp;lt;sup&amp;gt;[1] [2]&amp;lt;/sup&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/home}}||yes||yes||yes (wine や steam を使用しない場合 &amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/dev/shm}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/tmp}}||yes||yes||no (パッケージをコンパイルできなくなる可能性があります)&lt;br /&gt;
|-&lt;br /&gt;
| {{ic|/boot}}||yes||yes||yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt; パッケージによっては (例えば {{Pkg|nvidia-dkms}}) {{ic|/var}} で {{ic|exec}} を必要とすることがあるので注意してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;[2]&amp;lt;/sup&amp;gt; {{ic|noexec}} がパーティションに設定されている場合、Qt 5.8 以上では QML を使用するアプリケーションがクラッシュしたり機能しなくなることがあります。解決方法は [[Qt#Qt 5.8 で QML を使用するアプリケーションがクラッシュあるいは動作しない]]を参照。&lt;br /&gt;
&lt;br /&gt;
===ファイルシステムのパーミッション===&lt;br /&gt;
デフォルトのファイルシステムのパーミッションはほぼ全ての読み取りアクセスが許可されているため、[[パーミッション]]を変更することで {{ic|http}} や {{ic|nobody}} ユーザーなど root 以外のアカウントへのアクセスを手に入れた攻撃者から重要な情報を隠すことができます。&lt;br /&gt;
&lt;br /&gt;
例えば:&lt;br /&gt;
&lt;br /&gt;
 # chmod 700 /boot /etc/{iptables,arptables}&lt;br /&gt;
&lt;br /&gt;
デフォルトの [[Umask]] を変更することで新しく作成したファイルのセキュリティを向上させることができます。[http://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf NSA RHEL5 Security Guide] はセキュリティを最大化させるために {{ic|077}} の umask を提案しています、これは新しいファイルの所有者以外のユーザーによる読み取りを出来なくします。umask を変更するには、[[Umask#マスクの値を設定]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
== ユーザー設定 ==&lt;br /&gt;
&lt;br /&gt;
=== root アカウントを日常的に使用しない ===&lt;br /&gt;
&lt;br /&gt;
最小特権の原則に従い、root ユーザーを日常的に使用しないようにしてください。システムを使用する各人に非特権ユーザーアカウントを作成するか。一時的な特権アクセスには、必要に応じて [[sudo]] を使用する。&lt;br /&gt;
&lt;br /&gt;
=== ログイン失敗後の遅延時間の設定 ===&lt;br /&gt;
&lt;br /&gt;
以下の行を {{ic|/etc/pam.d/system-login}} に追加し、ログインに失敗した際に最低4秒の遅延を追加します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/pam.d/system-login|2=&lt;br /&gt;
auth optional pam_faildelay.so delay=4000000&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|4000000}} は遅延させる時間をマイクロ秒単位で指定します。&lt;br /&gt;
&lt;br /&gt;
===3回ログインを失敗したユーザーをロックアウトする===&lt;br /&gt;
&lt;br /&gt;
{{Pkg|pambase}} 20200721.1-2 の時点では 、デフォルトで {{ic|pam_faillock.so}} が有効になっており、15分間に3回ログインに失敗すると10分間ユーザをロックアウトします ({{Bug|67644}} を参照してください) このロックアウトはパスワード認証 (例:ログインと &#039;&#039;sudo&#039;&#039;) にのみ適用され、SSH 経由の公開鍵認証はそのまま利用可能です。 完全なサービス拒否を防ぐために、このロックアウトは root では無効になっています。&lt;br /&gt;
&lt;br /&gt;
ユーザーをロック解除するには、次のようにします。&lt;br /&gt;
&lt;br /&gt;
 $ faillock --reset --user &#039;&#039;username&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、ロック機構は {{ic|/run/faillock/}} にあるユーザーごとのファイルです。ディレクトリの所有者は root ですが、ファイルの所有者はユーザーなので、 {{ic|faillock}} コマンドはファイルを空にするだけで、root は必要ありません。&lt;br /&gt;
&lt;br /&gt;
モジュール {{ic|pam_faillock.so}} は、ファイル {{ic|1=/etc/security/faillock.conf}} で設定することが可能です。ロックアウトのパラメータです。&lt;br /&gt;
&lt;br /&gt;
* {{ic|unlock_time}} - ロックアウト時間 (秒単位、デフォルトは10分)&lt;br /&gt;
* {{ic|fail_interval}} - ロックアウトに失敗するとロックアウトされる時間 (秒単位、デフォルトは15分)&lt;br /&gt;
* {{ic|deny}} - ロックアウトするまでに何回ログインに失敗するか (デフォルトは 3)&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|1=deny = 0}} はロックアウトを無効化します}}&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、すべてのユーザーロックは再起動後に失われます。攻撃者がマシンをリブートできるのであれば、ロックは持続させた方が安全です。ロックを持続させるには、{{ic|1=/etc/security/faillock.conf}} の {{ic|dir}} パラメータを {{ic|/var/lib/faillock}} に変更する必要があります。&lt;br /&gt;
&lt;br /&gt;
変更を反映させるために再起動する必要はありません。root アカウントのロックアウトを有効にする、集中ログイン (LDAP など) を無効にするなど、さらなる設定オプションについては {{man|5|faillock.conf}} を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== プロセスの数を制限する ===&lt;br /&gt;
&lt;br /&gt;
信頼できないユーザーが大量に存在するシステムでは、一度に実行できるプロセスの数を制限して、[[Wikipedia:ja:Fork爆弾|フォーク爆弾]]などのサービス拒否攻撃を予防することが重要です。ユーザーやグループごとに実行できるプロセスの数は {{ic|/etc/security/limits.conf}} で定義することができ、デフォルトでは空になっています。以下の値をファイルに追加すると、実行できるプロセスが100個までに制限されます。{{ic|prlimit}} コマンドを使って一時的に上げられる最大数も200個までに制限します。ユーザーが普段実行するプロセスの数や、管理するハードウェアにあわせて適切な値に変更してください。&lt;br /&gt;
&lt;br /&gt;
 * soft nproc 100&lt;br /&gt;
 * hard nproc 200&lt;br /&gt;
&lt;br /&gt;
=== Wayland を使用する ===&lt;br /&gt;
&lt;br /&gt;
[[Xorg]] よりも [[Wayland]] を使用することをお勧めします。Xorg の設計は現代のセキュリティ慣行より古く、多くの人が [https://security.stackexchange.com/questions/4641/why-are-people-saying-that-the-x-window-system-is-not-secure/4646#4646 は安全でないと考えています] 例えば、Xorg のアプリケーションは非アクティブな状態でもキーストロークを記録することがあります。&lt;br /&gt;
&lt;br /&gt;
もし Xorg を実行しなければならないなら、[[Xorg#Rootless_Xorg|root での実行を避ける]]ことが推奨されます。Wayland 内では、XWayland 互換レイヤーは自動的に root レス Xorg を使用します。&lt;br /&gt;
&lt;br /&gt;
== root の制限 ==&lt;br /&gt;
root ユーザーは、定義上、システムで最も強力なユーザーです。このため、root ユーザーの権限を維持しながら害を及ぼす力を制限する、もしくは root ユーザーの行動をもっと追跡できるようにする方法が多数存在します。&lt;br /&gt;
&lt;br /&gt;
=== su の代わりに sudo を使う ===&lt;br /&gt;
[[Su#セキュリティ|色々な理由]]から特権アクセスには [[su]] よりも [[sudo]] を使うほうが好ましいとされます。&lt;br /&gt;
&lt;br /&gt;
* 通常の権限しか持たないユーザーが実行した特権コマンドのログを保持します。&lt;br /&gt;
* root アクセスを必要とする各ユーザーに root ユーザーのパスワードを与える必要がありません。&lt;br /&gt;
* 完全な root ターミナルは作成されないため、{{ic|sudo}} は root アクセスが必要ないコマンドを偶発的に &#039;&#039;root&#039;&#039; で実行してしまうことを防止します。これは[[Wikipedia:ja:最小権限の原則|最小権限の原則]]と合っています。&lt;br /&gt;
* 一つのコマンドを実行するためだけに完全な root アクセスを与える代わりに、ユーザーごとに個々のプログラムを有効にすることができます。例えば、ユーザー &#039;&#039;alice&#039;&#039; に特定のプログラムへのアクセス権限を与えるには:&lt;br /&gt;
&lt;br /&gt;
 # visudo&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
alice ALL &amp;amp;#61; NOPASSWD: /path/to/program}}&lt;br /&gt;
&lt;br /&gt;
また、全てのユーザーに個別のコマンドを許可することも可能です。通常ユーザーでサーバーから Samba 共有をマウントするには:&lt;br /&gt;
&lt;br /&gt;
 %users ALL=/sbin/mount.cifs,/sbin/umount.cifs&lt;br /&gt;
&lt;br /&gt;
これによって users グループのメンバーである全てのユーザーが全てのマシン (ALL) から {{ic|/sbin/mount.cifs}} や {{ic|/sbin/umount.cifs}} コマンドを実行できるようになります。&lt;br /&gt;
&lt;br /&gt;
{{Tip|{{ic|visudo}} で {{ic|vi}} の代わりに {{ic|nano}} を使うには:&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sudoers|&lt;br /&gt;
2=Defaults editor=/usr/bin/rnano&lt;br /&gt;
}}&lt;br /&gt;
{{ic|1=# EDITOR=nano visudo}} のエクスポートは何にでも {{ic|EDITOR}} として使うことができるためにセキュリティリスクとされています。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== sudo を使ってファイルを編集する ====&lt;br /&gt;
root で {{ic|vim}} などのテキストエディタを使用するのはセキュリティ上の脆弱性になりえます。ユーザーは任意のシェルコマンドを実行でき、コマンドを実行したユーザーのログが残らないからです。これを解決するには、以下をシェルの設定ファイルに追加してください:&lt;br /&gt;
&lt;br /&gt;
 export SUDO_EDITOR=rvim&lt;br /&gt;
&lt;br /&gt;
ファイルの編集には {{ic|sudoedit filename}} または {{ic|sudo -e filename}} を使って下さい。自動的に {{ic|rvim}} によって {{ic|filename}} が編集されるようになり、テキストエディタからのシェルコマンドが無効になります。&lt;br /&gt;
&lt;br /&gt;
=== root ログインの制限 ===&lt;br /&gt;
[[sudo]] を適切に設定することで、ユーザビリティをあまり下げることなく完全な root アクセスを大分制限することが可能です。[[sudo]] を使える状態のまま root を無効化したい場合、{{ic|passwd -l root}} を使用します。&lt;br /&gt;
&lt;br /&gt;
==== 特定のユーザーだけに許可を与える ====&lt;br /&gt;
[[Wikipedia:Pluggable authentication module|PAM]] の {{ic|pam_wheel.so}} は {{ic|wheel}} グループに入っているユーザーだけに {{ic|su}} を使用したログインを許可します。{{ic|/etc/pam.d/su}} と {{ic|/etc/pam.d/su-l}} の両方を編集して次の行をアンコメントしてください:&lt;br /&gt;
{{bc|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
# Uncomment the following line to require a user to be in the &amp;quot;wheel&amp;quot; group.&lt;br /&gt;
auth		required	pam_wheel.so use_uid&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
特権コマンドを実行できる既存のユーザーだけが root でログインできるようになります。&lt;br /&gt;
&lt;br /&gt;
==== ssh ログインを拒否する ====&lt;br /&gt;
ローカルユーザーの root ログインを拒否したくない場合でも、[[SSH#root ログインを拒否する|SSH による root ログインを拒否]]するのがグッドプラクティスです。この目的は、ユーザーがリモートでシステムを完全に手にかける前にセキュリティ層を追加することにあります。&lt;br /&gt;
&lt;br /&gt;
==== access.conf で許容されるログインの組み合わせを指定する ====&lt;br /&gt;
&lt;br /&gt;
誰かが [[PAM]] でログインしようとすると、 {{ic|/etc/security/access.conf}} がそのログインプロパティに一致する最初の組み合わせをチェックします。そして、その組み合わせのルールに基づいて、試行が失敗するか成功するかが決まります。&lt;br /&gt;
&lt;br /&gt;
 +:root:LOCAL&lt;br /&gt;
 -:root:ALL&lt;br /&gt;
&lt;br /&gt;
特定のグループやユーザーに対してルールを設定することができます。この例では、ユーザー archie は、wheel および adm グループに属するすべてのユーザーと同様に、ローカルでのログインを許可されています。それ以外のログインは拒否されます。&lt;br /&gt;
&lt;br /&gt;
 +:archie:LOCAL&lt;br /&gt;
 +:(wheel):LOCAL&lt;br /&gt;
 +:(adm):LOCAL&lt;br /&gt;
 -:ALL:ALL&lt;br /&gt;
&lt;br /&gt;
詳しくは {{man|5|access.conf}} で確認してください。&lt;br /&gt;
&lt;br /&gt;
==強制アクセス制御==&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:ja:強制アクセス制御|強制アクセス制御]] (Mandatory Access Control, MAC) は Arch やほとんどの Linux ディストリビューションで使われている[[Wikipedia:ja:任意アクセス制御|任意アクセス制御]] (Discretionary Access Control, DAC) とは大きく異なるタイプのセキュリティポリシーです。原則的に MAC ではシステムに影響を与えるプログラムの行動は全てセキュリティルールセットによってチェックを受けます。このルールセットは、DAC とは対照的に、ユーザーが変更することは不可能です。実装方法は色々と異なるタイプが存在しますが、強制アクセス制御を使うことで実質的にコンピュータのセキュリティを著しく向上させることになります。&lt;br /&gt;
&lt;br /&gt;
===パス名 MAC===&lt;br /&gt;
パス名ベースのアクセス制御は指定されたファイルのパスに基づいてパーミッションを与えるというシンプルな形式のアクセス制御です。この形式のアクセス制御の欠点としてはファイルが移動されてもパーミッションはファイルと一緒に付いていかないということが挙げられます。プラス面となるのは、パス名ベースの MAC はラベルベースの MAC と異なり、幅広いファイルシステムに実装できることです。&lt;br /&gt;
&lt;br /&gt;
*[[AppArmor]] は [[Wikipedia:ja:カノニカル|Canonical]] によって開発されている MAC 実装で SELinux に比べて&amp;quot;簡単&amp;quot;になっています。&lt;br /&gt;
*[[TOMOYO Linux|Tomoyo]] はもうひとつのシンプルで、使いやすい強制アクセス制御を提供するシステムです。利用と実装の両面でシンプルになるように設計されており、依存するライブラリがとても少なくなっています。&lt;br /&gt;
&lt;br /&gt;
===ラベル MAC===&lt;br /&gt;
ラベルベースのアクセス制御ではファイルの拡張属性を使ってセキュリティパーミッションを管理します。このシステムはセキュリティの機能においてパス名ベースの MAC よりも間違いなく柔軟性が高い一方、拡張属性をサポートしているファイルシステムでしか動作しません。&lt;br /&gt;
&lt;br /&gt;
*[[SELinux]] は、Linux セキュリティを向上させる [[Wikipedia:ja:アメリカ国家安全保障局|NSA]] プロジェクトに基づいており、システムユーザーやロールとは完全に独立して MAC を実装しています。成長してオリジナルの設定が変わっていくシステムのコントロールを簡単に維持できる、極めて強固なマルチレベル MAC ポリシー実装を提供します。&lt;br /&gt;
&lt;br /&gt;
=== アクセス制御リスト ===&lt;br /&gt;
[[アクセス制御リスト]] (Access Control List, ACL) は何らかの方法で直接ファイルシステムにルールを付加する代わりとなる手段です。ACL はプログラムの行動を許可された挙動のリストでチェックすることによりアクセス制御を実装しています。&lt;br /&gt;
&lt;br /&gt;
==カーネルの防御==&lt;br /&gt;
&lt;br /&gt;
=== カーネルの自己防衛機能/脆弱性攻撃対策 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-hardened}} パッケージは [https://github.com/anthraxx/linux-hardened basic kernel hardening patch set] と {{pkg|linux}} パッケージよりもセキュリティに重点を置いたコンパイル時設定オプションを使用します。カスタムビルドでは、セキュリティ寄りのデフォルトとは異なる、セキュリティと性能の妥協点を選択することができます。&lt;br /&gt;
&lt;br /&gt;
しかし、このカーネルを使うといくつかのパッケージが動かなくなることに注意する必要があります。例えば&lt;br /&gt;
&lt;br /&gt;
* {{AUR|skypeforlinux-preview-bin}} のようなパッケージは動作しません。&lt;br /&gt;
* {{AUR|skypeforlinux-stable-bin}} {{AUR|skypeforlinux-stable-bin}}&lt;br /&gt;
* {{pkg|throttled}}&lt;br /&gt;
&lt;br /&gt;
[[NVIDIA]] などのアウトオブツリードライバを使用している場合、その [[DKMS]] パッケージに切り替える必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
=== ユーザー空間 ASLR の比較 ===&lt;br /&gt;
&lt;br /&gt;
{{pkg|linux-hardened}} パッケージは、ユーザ空間プロセス用のアドレス空間レイアウトランダム化の改良された実装を提供します。{{pkg|paxtest}} コマンドは提供されるエントロピーの推定値を得るために使用されます。&lt;br /&gt;
&lt;br /&gt;
===== 64 ビット プロセス =====&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-hardened 5.4.21.a-1-hardened|&lt;br /&gt;
Anonymous mapping randomization test     : 32 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 40 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 40 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 32 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 32 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 32 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 32 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 40 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 40 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 44 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 44 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 34 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 34 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 32 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 32 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux 5.5.5-arch1-1|&lt;br /&gt;
Anonymous mapping randomization test     : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 28 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 28 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 20 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 28 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 29 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 29 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-lts 4.19.101-1-lts|&lt;br /&gt;
Anonymous mapping randomization test     : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 28 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : 28 quality bits (guessed)&lt;br /&gt;
Main executable randomization (PIE)      : 28 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 28 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 19 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 30 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 22 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 28 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 28 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 28 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===== 32ビットプロセス（x86_64カーネル上）  =====&lt;br /&gt;
&lt;br /&gt;
{{hc|linux-hardened|&lt;br /&gt;
Anonymous mapping randomization test     : 16 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 22 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 27 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : No randomization&lt;br /&gt;
Main executable randomization (PIE)      : 18 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 16 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 16 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 24 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 24 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 28 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 28 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 18 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 16 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: 18 bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @0 : 18 bits (guessed)&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{hc|linux|&lt;br /&gt;
Anonymous mapping randomization test     : 8 quality bits (guessed)&lt;br /&gt;
Heap randomization test (ET_EXEC)        : 13 quality bits (guessed)&lt;br /&gt;
Heap randomization test (PIE)            : 13 quality bits (guessed)&lt;br /&gt;
Main executable randomization (ET_EXEC)  : No randomization&lt;br /&gt;
Main executable randomization (PIE)      : 8 quality bits (guessed)&lt;br /&gt;
Shared library randomization test        : 8 quality bits (guessed)&lt;br /&gt;
VDSO randomization test                  : 8 quality bits (guessed)&lt;br /&gt;
Stack randomization test (SEGMEXEC)      : 19 quality bits (guessed)&lt;br /&gt;
Stack randomization test (PAGEEXEC)      : 19 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (SEGMEXEC)    : 11 quality bits (guessed)&lt;br /&gt;
Arg/env randomization test (PAGEEXEC)    : 11 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_EXEC): 8 quality bits (guessed)&lt;br /&gt;
Offset to library randomisation (ET_DYN) : 13 quality bits (guessed)&lt;br /&gt;
Randomization under memory exhaustion @~0: No randomization&lt;br /&gt;
Randomization under memory exhaustion @0 : No randomization&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===カーネルログへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
{{Note|{{pkg|linux-hardened}} ではデフォルトで有効になっています。}}&lt;br /&gt;
&lt;br /&gt;
カーネルログにはカーネルの脆弱性を突こうとしている攻撃者にとって有益な情報、保護が必要なメモリーアドレスなどが含まれています。{{ic|kernel.dmesg_restrict}} フラグは  (デフォルトで root として実行しているプロセスしか持たない) {{ic|CAP_SYS_ADMIN}} ケイパビリティのないログへのアクセスを禁止します。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-dmesg-restrict.conf|2=kernel.dmesg_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
===proc ファイルシステムのカーネルポインタへのアクセスを制限する===&lt;br /&gt;
&lt;br /&gt;
{{Note|{{pkg|linux-hardened}} ではデフォルトで {{ic|1=kptr_restrict=2}} と設定されています。}}&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.kptr_restrict}} を有効にすると {{ic|CAP_SYSLOG}} のない通常ユーザーから {{ic|/proc/kallsyms}} のカーネルシンボルのアドレスが秘匿され、動的にアドレス・シンボルを解決するカーネル exploit が難しくなります。これは事前にコンパイルされた Arch Linux カーネルではあまり意味がありません、周到な攻撃者はカーネルパッケージをダウンロードしてそこから手動でシンボルを取得することができるからです。しかしながら自分でカーネルをコンパイルする場合は、ローカルの root 攻撃を減らす効果があります。ただし root 以外のユーザーで使用する場合いくつかの {{Pkg|perf}} コマンドが破壊されます (メインの {{Pkg|perf}} 機能には結局 root アクセスが必要になりますが)。詳しくは {{Bug|34323}} を見て下さい。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/50-kptr-restrict.conf|2=kernel.kptr_restrict = 1}}&lt;br /&gt;
&lt;br /&gt;
=== BPF のハードニング ===&lt;br /&gt;
&lt;br /&gt;
BPF は、実行時にカーネル内のバイトコードを動的にロードして実行するために使用されるシステムです。ネットワーク (XDP, tc など)、トレース (kprobes, uprobes, tracepoints など)、セキュリティ (seccomp など) など、多くの Linux カーネルサブシステムで使用されています。また、高度なネットワークセキュリティ、パフォーマンスプロファイリング、ダイナミックトレースにも有効です。&lt;br /&gt;
&lt;br /&gt;
BPF はもともと [https://ja.wikipedia.org/wiki/Berkeley_Packet_Filter Berkeley Packet Filter] の頭文字をとったもので、オリジナルの古典的な BPF は BSD 用のパケットキャプチャツールに使われていたためである。これは最終的に拡張 BPF (eBPF) に発展し、その後まもなくただの BPF (頭字語ではありません) に改名されました。BPFはパケットフィルタリングツールの実装に使われることがありますが、 iptables や netfilter のようなパケットフィルタリングツールと混同しないでください。&lt;br /&gt;
&lt;br /&gt;
BPF のコードは解釈されるか、[https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9 Just-In-Time (JIT) compiler] を使ってコンパイルされるかのどちらかである。Arch のカーネルは {{ic|CONFIG_BPF_JIT_ALWAYS_ON}} でビルドされており、BPF インタープリタを無効にして全ての BPF を JIT コンパイラでコンパイルするよう強制しています。これにより、攻撃者が BPF を使って SPECTRE 型の脆弱性を悪用したエスカレーション攻撃をすることが難しくなります。詳しくは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=290af86629b25ffd1ed6232c4e9107da031705cb the kernel patch which introduced CONFIG_BPF_JIT_ALWAYS_ON] を参照してください。&lt;br /&gt;
&lt;br /&gt;
カーネルは JIT コンパイルされた BPF に対して、パフォーマンスと多くの BPF プログラムをトレース・デバッグする能力を犠牲にして、ある種の JIT スプレー攻撃を軽減するためのハードニング機能を備えています。この機能は {{ic|net.core.bpf_jit_harden}} を {{ic|1}} に設定することによって有効になります。(非特権コードのハードニングを有効にする) または {{ic|2}} です。(すべてのコードのハードニングを有効にする)。&lt;br /&gt;
&lt;br /&gt;
詳しくは、[https://www.kernel.org/doc/html/latest/admin-guide/sysctl/net.html カーネルドキュメント] の {{ic|net.core.bpf_*}} 設定を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* {{Pkg|linux-hardened}} では、デフォルトで {{ic|1=net.core.bpf_jit_harden=2}} が設定されており、 {{ic|0}} ではありません。&lt;br /&gt;
* デフォルトでは、BPFプログラムは非特権ユーザでも実行可能です。この挙動を変更するには {{ic|1=kernel.unprivileged_bpf_disabled=1}} [https://access.redhat.com/security/cve/cve-2021-33624] を設定してください。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===ptrace スコープ===&lt;br /&gt;
&lt;br /&gt;
{{ic|kernel.yama.ptrace_scope}} フラグによって、Arch は Yama LSM をデフォルトで有効にしています。このフラグはプロセスが {{ic|CAP_SYS_PTRACE}} のないスコープの外で他のプロセスに {{ic|ptrace}} コールを実行するのを止めます。多くのデバッグツールがいくつかの機能を使うためにこれを必要としますが、セキュリティの面では飛躍的な改善になります。この機能がないと、名前空間のような外部レイヤーを適用しないかぎり同一ユーザーで動作するプロセスの分割は基本的に行われません。デバッガを既存プロセスにアタッチできることはこの欠点のデモンストレーションです。&lt;br /&gt;
&lt;br /&gt;
====破壊される機能の例====&lt;br /&gt;
&lt;br /&gt;
{{Note|{{ic|sudo}} を使って特定のユーザーに、パスワード有り無しで許可を与えたりすることで、root で以下のコマンドを実行することは可能です。}}&lt;br /&gt;
&lt;br /&gt;
* {{ic|gdb -p $PID}}&lt;br /&gt;
* {{ic|strace -p $PID}}&lt;br /&gt;
* {{ic|perf trace -p $PID}}&lt;br /&gt;
* {{ic|reptyr $PID}}&lt;br /&gt;
&lt;br /&gt;
=== リンクの [[Wikipedia:TOCTOU|TOCTOU]] 攻撃を防止する ===&lt;br /&gt;
&lt;br /&gt;
この機能が追加された日時や根拠についてはこの [https://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=800179c9b8a1e796e441674776d11cd4c05d61d7 commit メッセージ]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
 fs.protected_hardlinks = 1&lt;br /&gt;
 fs.protected_symlinks = 1&lt;br /&gt;
&lt;br /&gt;
{{Note|現在は {{ic|/usr/lib/sysctl.d/50-default.conf}} によってデフォルトで有効にされています。}}&lt;br /&gt;
&lt;br /&gt;
===hidepid===&lt;br /&gt;
&lt;br /&gt;
通常は {{ic|/proc}} から他のユーザーのプロセスを確認することができますが、カーネルにはプロセスを秘匿する機能が存在し {{ic|proc}} ファイルシステムを {{ic|1=hidepid=}} と {{ic|1=gid=}} オプションを使ってマウントすることで有効になります。詳しいドキュメントは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/filesystems/proc.txt#n1919 こちら] に存在します。&lt;br /&gt;
&lt;br /&gt;
プロセスを隠すことで侵入者は動作中のプロセスに関する情報を得るのが難しくなります (どのデーモンが特権権限で動作しているか、プログラムの実行に使われているユーザーはどれか、など)。さらに、引数で機密情報を渡すような問題のあるプログラムから情報が漏れてしまうことを防ぎます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|filesystem}} パッケージに含まれている {{ic|proc}} [[ユーザーとグループ#システムグループ|グループ]]はホワイトリストとして機能し、グループに含まれているユーザーは他のユーザーのプロセス情報を閲覧することが可能です。{{ic|/proc/&amp;lt;pid&amp;gt;}} ディレクトリから他のユーザーの情報を得る必要があるユーザーやサービスがある場合、[[ユーザーとグループ#グループ管理|グループにユーザーを追加]]してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|proc}} グループに含まれていないユーザーに他のユーザーのプロセス情報を表示しない設定は以下の通りです:&lt;br /&gt;
{{hc|/etc/fstab|2=&lt;br /&gt;
proc	/proc	proc	nosuid,nodev,noexec,hidepid=2,gid=proc	0	0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Xorg]] を動作させるために systemd-logind の例外を追加する必要があります:&lt;br /&gt;
{{hc|/etc/systemd/system/systemd-logind.service.d/hidepid.conf|2=&lt;br /&gt;
[Service]&lt;br /&gt;
SupplementaryGroups=proc&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== モジュールのロードを制限する ===&lt;br /&gt;
&lt;br /&gt;
デフォルトの Arch カーネルは {{ic|CONFIG_MODULE_SIG_ALL}} が有効で、{{Pkg|linux}} パッケージの一部としてビルドされた全てのカーネルモジュールに署名します。これにより、カーネルは有効なキーで署名されたモジュールだけをロードするように制限できます。実際、これはローカルでコンパイルされた、もしくは {{Pkg|virtualbox-host-modules-arch}} などのパッケージによって提供された、ツリー外のモジュールは全てロードできないことを意味します。カーネルモジュールの読み込みは [[カーネルパラメータ]] を設定することで制限することができます。{{ic|1=module.sig_enforce=1}}. 詳細は、[https://www.kernel.org/doc/html/latest/admin-guide/module-signing.html kernel documentation] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== kexec を無効にする ===&lt;br /&gt;
&lt;br /&gt;
Kexec は、現在実行中のカーネルを置き換えることを可能にします。&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/sysctl.d/51-kexec-restrict.conf|2=&lt;br /&gt;
kernel.kexec_load_disabled = 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|kexec は {{pkg|linux-hardened}}  ではデフォルトで無効になっています。}}&lt;br /&gt;
&lt;br /&gt;
=== カーネルロックダウンモード ===&lt;br /&gt;
&lt;br /&gt;
Linux 5.4 以降、カーネルは [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aefcf2f4b58155d27340ba5f9ddbe9513da8286d] オプションで [https://mjg59.dreamwidth.org/55105.html ロックダウン機能を獲得しました] これは  UID 0 (root) とカーネルの間の境界を強化することを目的としています。この機能を有効にすると、ハードウェアやカーネルへの低レベルのアクセスに依存している一部のアプリケーションは動作しなくなる可能性があります。&lt;br /&gt;
&lt;br /&gt;
ロックダウンを使用するには、その LSM が初期化され、ロックダウンモードが設定されている必要があります。&lt;br /&gt;
&lt;br /&gt;
すべての [[カーネル#公式サポートカーネル|オフィシャルサポートカーネル]] は LSM を初期化しますが、ロックダウンモードを強制するものはありません。&lt;br /&gt;
&lt;br /&gt;
{{Tip|有効な LSM は {{ic|cat /sys/kernel/security/lsm}}}} を実行することで確認することができます。&lt;br /&gt;
&lt;br /&gt;
ロックダウンは2つの動作モードがあります。&lt;br /&gt;
&lt;br /&gt;
* ユーザーランドが実行中のカーネルを変更できるカーネル機能 (kexec, bpf) は無効化されます。&lt;br /&gt;
* {{ic|confidentiality}}: ユーザーランドがカーネルから機密情報を抽出するためのカーネル機能も無効化されます。&lt;br /&gt;
&lt;br /&gt;
実行時にカーネルのロックダウンを有効にするには、以下を実行します。&lt;br /&gt;
&lt;br /&gt;
 # echo &#039;&#039;mode&#039;&#039; &amp;gt; /sys/kernel/security/lockdown&lt;br /&gt;
&lt;br /&gt;
起動時にカーネルのロックダウンを有効にするには、[[カーネルパラメータ]] {{ic|1=lockdown=&#039;&#039;mode&#039;&#039;}} を使用します。&lt;br /&gt;
&lt;br /&gt;
{{Note|&lt;br /&gt;
* カーネルロックダウンを実行時に無効化することはできません。&lt;br /&gt;
* カーネルロックダウンは、[[サスペンドとハイバネート#ハイバネーション|ハイバネーション]] を無効にします。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{man|7|kernel_lockdown}} も参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Linux Kernel Runtime Guard (LKRG) ===&lt;br /&gt;
&lt;br /&gt;
[https://www.openwall.com/lkrg/ LKRG] ({{AUR|lkrg-dkms}}) は、カーネルの整合性チェックと悪用行為の検出を行うカーネルモジュールです。&lt;br /&gt;
&lt;br /&gt;
== アプリケーションのサンドボックス化 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|標準の Arch カーネルではユーザー名前空間の {{ic|CONFIG_USER_NS}} が設定されていないため、特定のサンドボックス機能がアプリケーションから使えない場合があります。{{pkg|linux-hardened}} パッケージでは有効になっていますが、非特権での使用はデフォルトで無効になっています。{{ic|kernel.unprivileged_userns_clone}} の [[sysctl]] を {{ic|1}} に設定することで使用できるようになりますが、ローカルの権限昇格を引き起こす可能性が高くなるので注意してください。}}&lt;br /&gt;
&lt;br /&gt;
{{Warning|{{Pkg|linux}} (5.1.8 およびそれ以降)、{{Pkg|linux-lts}} (4.19.55-2 およびそれ以降)、{{Pkg|linux-zen}} (5.1.14.zen1-2 およびそれ以降) においては、{{ic|kernel.unprivileged_userns_clone}} [[sysctl]] が {{ic|0}} に設定されていない限り、非特権ユーザの名前空間の利用 ({{ic|CONFIG_USER_NS_UNPRIVILEGED}}) がデフォルトで有効化されています。これはローカルの特権昇格の攻撃対象領域を大幅に増加させるので、これを手動で無効化するか {{Pkg|linux-hardened}} カーネルを使用することが推奨されます。詳細は {{Bug|36969}} を見てください。}}&lt;br /&gt;
&lt;br /&gt;
=== Firejail ===&lt;br /&gt;
&lt;br /&gt;
[[Firejail]] はアプリケーションやサーバーをサンドボックス化するためのシンプルで使いやすいツールです。Firejail はサーバーだけでなくブラウザなどのインターネットに接続するアプリケーションでも使うことができます。&lt;br /&gt;
&lt;br /&gt;
=== bubblewrap ===&lt;br /&gt;
&lt;br /&gt;
[[bubblewrap]] は [[Flatpak]] から開発された setuid サンドボックスアプリケーションです。Firejail よりもリソースの消費力が少なく抑えられています。ファイルパスのホワイトリストなどの機能を欠いていますが、バインドマウントやユーザー/IPC/PID/ネットワーク/cgroup 名前空間の作成ができ、簡単なサンドボックスから [https://github.com/projectatomic/bubblewrap/blob/master/demos/bubblewrap-shell.sh 複雑なサンドボックス] まで自在に使うことが可能です。&lt;br /&gt;
&lt;br /&gt;
=== chroot ===&lt;br /&gt;
&lt;br /&gt;
手動で [[chroot]] 監獄を構築する方法もあります。&lt;br /&gt;
&lt;br /&gt;
=== Linux Containers ===&lt;br /&gt;
&lt;br /&gt;
他の手段 (KVM や Virtualbox) よりも強力な分離が必要なときは [[Linux Containers]] を選択するのもよいでしょう。LXC は仮想ハードウェアを使って擬似的な chroot で既存のカーネル上で動作します。&lt;br /&gt;
&lt;br /&gt;
=== 他の仮想化手段 ===&lt;br /&gt;
&lt;br /&gt;
[[VirtualBox]], [[KVM]], [[Xen]] などの完全な仮想化マシンを使うことでもセキュリティを向上させることができます。危険なアプリケーションを実行したり危険なウェブサイトを開いたりするときに役に立つでしょう。&lt;br /&gt;
&lt;br /&gt;
==ネットワークとファイアウォール==&lt;br /&gt;
&lt;br /&gt;
===ファイアウォール===&lt;br /&gt;
標準の Arch カーネルは [[Wikipedia:ja:iptables|Netfilter]] の [[iptables]] を使用する能力がありますが、デフォルトでは有効になっていません。[[公式リポジトリ]]から {{Pkg|iptables}} をインストールして、有効にし、ファイアウォールを設定することが強く推奨されます。&lt;br /&gt;
&lt;br /&gt;
*全般的な情報は [[iptables]] を見て下さい。&lt;br /&gt;
*iptables ファイアウォールを設定するガイドは[[シンプルなステートフルファイアウォール]]を見て下さい。&lt;br /&gt;
*netfilter を設定する他の方法は[[ファイアウォール]]を見て下さい。&lt;br /&gt;
*Bluetack などの IP アドレスのリストをブロックする方法は [[Ipset]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===カーネルパラメータ===&lt;br /&gt;
ネットワークに影響を与えるカーネルパラメータは [[sysctl]] を使って設定できます。設定方法は [[sysctl#TCP/IP スタックの防御]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
===SSH===&lt;br /&gt;
[[SSH 鍵#パスワードログインの無効化|SSH 鍵を必要]]としない [[Secure Shell]] を使うのは避けましょう。これは[[Wikipedia:ja:総当たり攻撃|総当たり攻撃]]を防ぎます。また、[[Fail2ban]] や [[Sshguard]] はログを監視して [[iptables|iptables ルール]]を書き込む方式の保護を提供しますが、攻撃者がアドレスを識別して管理者からのパケットのように偽装することができるため、サービスの妨害が行われる危険性があります。&lt;br /&gt;
&lt;br /&gt;
2段階認証によって認証を強化することができます。[[Google Authenticator]] はワンタイムパスコード (OTP) を使用する2段階認証方式を提供します。&lt;br /&gt;
&lt;br /&gt;
[[Secure Shell#root ログインを拒否する|root ログインを拒否する]]のは、侵入追跡と root アクセス前のセキュリティレイヤを追加するという両方の面でグッドプラクティスです。&lt;br /&gt;
&lt;br /&gt;
===DNS===&lt;br /&gt;
&lt;br /&gt;
[[DNSSEC]] や [[DNSCrypt]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== プロキシ ===&lt;br /&gt;
&lt;br /&gt;
プロキシはアプリケーションとネットワークの間に挟まる追加レイヤーとして使われ、信頼できないソースからのデータをサニタイズします。少ない権限でプロキシを動作させることで、エンドユーザー権限で複雑なアプリケーションを実行するよりも攻撃対象を小さくすることができます。&lt;br /&gt;
&lt;br /&gt;
例えば {{Pkg|glibc}} の中に実装されている DNS リゾルバを考えてみてください。(root で実行することもある) アプリケーションにリンクされている DNS リゾルバにバグが存在した場合、リモートコード実行につながる危険があります。[[dnsmasq]] などの DNS キャッシュサーバーをインストールしてプロキシとして使うことで問題を防ぐことが可能です [https://googleonlinesecurity.blogspot.it/2016/02/cve-2015-7547-glibc-getaddrinfo-stack.html]。&lt;br /&gt;
&lt;br /&gt;
=== SSL 証明書の管理 ===&lt;br /&gt;
&lt;br /&gt;
サーバーサイドの SSL 証明書の管理については [[OpenSSL]] や [[Network Security Services]] (NSS) を参照してください。また、関連する [[Let’s Encrypt]] プロジェクトも見てください。&lt;br /&gt;
&lt;br /&gt;
デフォルトのインターネット SSL 証明書のトラストチェーンは {{Pkg|ca-certificates}} パッケージによって提供されています。Arch はデフォルトで信頼しても問題ないとされる証明書を提供しているソース (例: {{AUR|ca-certificates-cacert}}, {{Pkg|ca-certificates-mozilla}}) に依存しています。&lt;br /&gt;
&lt;br /&gt;
デフォルトの証明書を変えたいと思うことがあるかもしれません。例えば、[http://www.theregister.co.uk/2016/05/27/blue_coat_ca_certs/ ニュース] を読んで証明書を信頼しないようにしたい場合 (ソースのプロバイダーによって無効になるのを待てない場合)、Arch のインフラを使うことで簡単に設定できます:&lt;br /&gt;
# {{ic|.crt}} 形式の証明書を入手してください (例: [https://crt.sh/?id=19538258 view], [https://crt.sh/?d=19538258 download]; 既存のルート認証局の場合、システム内にあるはずです)。&lt;br /&gt;
# {{ic|/etc/ca-certificates/trust-source/blacklist/}} にコピーしてください。&lt;br /&gt;
# root で &#039;&#039;update-ca-trust&#039;&#039; を実行してください。&lt;br /&gt;
&lt;br /&gt;
お好きなブラウザを開いて&#039;&#039;&#039;信頼できない&#039;&#039;&#039;サイトとして表示されれば、ブラックリストが上手く機能しています。&lt;br /&gt;
&lt;br /&gt;
== 物理セキュリティ ==&lt;br /&gt;
&lt;br /&gt;
{{Note|リモート攻撃からコンピュータを守りたいだけの場合はこのセクションは無視してかまいません。}}&lt;br /&gt;
&lt;br /&gt;
十分な時間とリソースさえあればコンピュータへの物理的なアクセスは root アクセスになります。しかしながら、十分な防御策を張ることで&#039;&#039;実用的で&#039;&#039;高いレベルのセキュリティを得ることができます。&lt;br /&gt;
&lt;br /&gt;
攻撃者は悪意のある IEEE 1394 (FireWire), Thunderbolt, PCI Express デバイスを取り付けることでメモリーへの完全なアクセスを手に入れることができ、次に起動した時には簡単にコンピュータの完全なコントロールを手中に収めることができます [http://www.breaknenter.org/projects/inception/]。これを防ぐために出来ることは限られており、悪意のあるファームウェアをドライブに書き込むなどハードウェア自体の改変に対処することは不可能です。ただし、攻撃者の大部分にはこうした知識がなく実行されることはほとんどありません。&lt;br /&gt;
&lt;br /&gt;
[[#ディスク暗号化|ディスク暗号化]]はコンピュータが盗まれた場合にデータへのアクセスを防止しますが、あなたが次にログインしたときにデータを取得するために悪意のあるファームウェアが能力のある攻撃者によってインストールされる可能性があります。&lt;br /&gt;
&lt;br /&gt;
===BIOS をロックダウンする===&lt;br /&gt;
&lt;br /&gt;
BIOS にパスワードを追加することによってリムーバブルメディアから誰かが起動する (これはコンピュータへの root アクセスと基本的に同義です) のを予防します。使用しているドライブがブートの順番で一番最初に来ることを確認して、可能であれば他のドライブのブートを無効にしてください。&lt;br /&gt;
&lt;br /&gt;
=== ブートローダー ===&lt;br /&gt;
&lt;br /&gt;
[[Arch ブートプロセス#ブートローダー|ブートローダー]] を保護することは非常に重要です。保護されていないブートローダは、例えば {{ic|1=init=/bin/sh}} を設定することでログインの制限を回避することができます。[[カーネルパラメータ]] でシェルに直接ブートするようにします。&lt;br /&gt;
&lt;br /&gt;
==== Syslinux ====&lt;br /&gt;
&lt;br /&gt;
Syslinux は[[Syslinux#セキュリティ|ブートローダーのパスワード保護]]をサポートしています。メニューのアイテムごとにパスワードを設定したり、ブートローダー全体にパスワードの保護を設定することが可能です。&lt;br /&gt;
&lt;br /&gt;
==== GRUB ====&lt;br /&gt;
&lt;br /&gt;
[[GRUB]] はブートローダのパスワードもサポートしています。詳しくは [[GRUB/ヒントとテクニック#GRUB メニューのパスワード保護|GRUB メニューのパスワード保護]] を参照してください。[[GRUB/ヒントとテクニック# GRUB メニューのパスワード保護|暗号化 /boot]] もサポートしていますが、これはブートローダコードの一部だけを暗号化しないままにしています。GRUB の設定、[[カーネル]]、[[initramfs]] は暗号化されています。&lt;br /&gt;
&lt;br /&gt;
=== セキュアブート ===&lt;br /&gt;
&lt;br /&gt;
[[セキュアブート]] は [[UEFI]] の機能で、コンピュータが起動するファイルの認証を可能にするものです。これは、起動パーティション内のファイルを置き換えるような、いくつかの [https://ja.wikipedia.org/wiki/%E6%82%AA%E6%84%8F%E3%81%82%E3%82%8B%E3%83%A1%E3%82%A4%E3%83%89%E6%94%BB%E6%92%83 悪意あるメイド攻撃] を防止するのに役立つ。通常、コンピュータにはベンダー (OEM) によって登録されたキーが付属しています。しかし、これを取り外して、コンピュータを「セットアップモード」にし、ユーザーが自分のキーを登録・管理できるようにすることができます。&lt;br /&gt;
&lt;br /&gt;
セキュアブートのページでは、[https://wiki.archlinux.org/title/Unified_Extensible_Firmware_Interface/Secure_Boot#Implementing_Secure_Boot using your own keys] によってセキュアブートを設定する方法を案内しています。&lt;br /&gt;
&lt;br /&gt;
=== トラステッドプラットフォームモジュール（TPM） ===&lt;br /&gt;
&lt;br /&gt;
[[Trusted Platform Module|TPM]] は、暗号鍵が埋め込まれたハードウェア・マイクロプロセッサです。これは、最近のほとんどのコンピュータの基本的な信頼性の根源を形成し、ブートチェーンのエンドツーエンドの検証を可能にします。内部スマートカードとして使用したり、コンピュータ上で動作するファームウェアを証明したり、改ざん防止とブルートフォース耐性のあるストアにユーザーがシークレットに挿入することができます。&lt;br /&gt;
&lt;br /&gt;
=== リムーバブル フラッシュ ドライブ上のブートパーティション ===&lt;br /&gt;
&lt;br /&gt;
ブートパーティションをフラッシュドライブに置き、それがないとシステムが起動しないようにする、というのはよくあるアイデアです。このアイデアの支持者はしばしば [[セキュリティ#ディスク暗号化|ディスク暗号化]] を併用し、ブートパーティションに置かれた [https://wiki.archlinux.org/title/Dm-crypt/Specialties#Encrypted_/boot_and_a_detached_LUKS_header_on_USBdetached encryption headers] を使っている人もいます。&lt;br /&gt;
&lt;br /&gt;
この方法は [https://wiki.archlinux.org/title/Dm-crypt/Specialties#Encrypted_/boot_and_a_detached_LUKS_header_on_USB encrypting /boot] と統合することも可能です。&lt;br /&gt;
&lt;br /&gt;
=== 自動ログアウト ===&lt;br /&gt;
[[Bash]] または [[Zsh]] を使っている場合、{{ic|TMOUT}} によってタイムアウトによるシェルからの自動ログアウトを設定できます。&lt;br /&gt;
&lt;br /&gt;
例えば、以下は仮想コンソールから自動でログアウトします (X11 のターミナルエミュレータからはログアウトしません):&lt;br /&gt;
&lt;br /&gt;
{{hc|/etc/profile.d/shell-timeout.sh|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
[ -z &amp;quot;$DISPLAY&amp;quot; ] &amp;amp;&amp;amp; export TMOUT;&lt;br /&gt;
case $( /usr/bin/tty ) in&lt;br /&gt;
	/dev/tty[0-9]*) export TMOUT;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
(X のコンソールも含めて) 全ての Bash/Zsh プロンプトでタイムアウトさせたい場合は、次を使って下さい:&lt;br /&gt;
&lt;br /&gt;
 $ export TMOUT=&amp;quot;$(( 60*10 ))&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
シェルで何かコマンドが動作している間はこのタイムアウトは動作しないので注意してください (例: SSH セッションや {{ic|TMOUT}} をサポートしていない他のシェル)。しかしながら固まった GDM/Xorg を root で再起動するのに VC を使っているような場合は、とても有用です。&lt;br /&gt;
&lt;br /&gt;
=== 不正なUSBデバイスから保護する ===&lt;br /&gt;
&lt;br /&gt;
[[Usbguard]] は、デバイスの属性に基づく基本的なホワイトリストおよびブラックリスト機能を実装することで、不正な USB デバイス (別名 [https://ja.wikipedia.org/wiki/BadUSB BadUSB], [https://github.com/samyk/poisontap PoisonTap] または [https://lanturtle.com/ LanTurtle]) からコンピューターを保護できるソフトウェアフレームワークです。&lt;br /&gt;
&lt;br /&gt;
=== 揮発性データの収集 ===&lt;br /&gt;
&lt;br /&gt;
電源が入っているコンピュータは、[https://fedvte.usalearning.gov/courses/CSI/course/videos/pdf/CSI_D01_S05_T01_STEP.pdf volatile data collection] に対して脆弱である可能性があります。コンピュータの電源を入れる必要がない時や、コンピュータの物理的な安全性が一時的に損なわれる場合（例:セキュリティチェックポイントを通過する時）には、コンピュータの電源を完全に切ることがベストプラクティスです。&lt;br /&gt;
&lt;br /&gt;
== パッケージ ==&lt;br /&gt;
&lt;br /&gt;
=== パッケージの認証 ===&lt;br /&gt;
パッケージの署名が適正に使われていないと [http://www.cs.arizona.edu/stork/packagemanagersecurity/attacks-on-package-managers.html#overview パッケージマネージャへの攻撃] が考えられ、さらに [http://www.cs.arizona.edu/stork/packagemanagersecurity/faq.html 適切な署名システム] を使っているパッケージマネージャにも影響を与える可能性があります。Arch はデフォルトでパッケージの署名を使用しており5つの信頼されたマスターキーによる web of trust を使っています。詳しくは [[Pacman-key]] を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== アップグレード ===&lt;br /&gt;
&lt;br /&gt;
定期的に [[システムメンテナンス#システムのアップグレード|システムのアップグレード]] を行うことが重要です。&lt;br /&gt;
&lt;br /&gt;
=== 脆弱性アラートの確認 ===&lt;br /&gt;
&lt;br /&gt;
National Vulnerability Database が提供する Common Vulnerabilities and Exposure (CVE) Security Alert の更新を購読し、[https://nvd.nist.gov/download.cfm NVD Download webpage] で見つけてください。[https://security.archlinux.org/ Arch Linux Security Tracker] は Arch Linux Security Advisory (ASA), Arch Linux Vulnerability Group (AVG), CVE データセットを表形式でまとめた、特に有用なリソースです。ツール {{Pkg|arch-audit}} は実行中のシステムに影響を与える脆弱性をチェックするために使われます。グラフィカルなシステムトレイである {{Pkg|arch-audit-gtk}} も使うことができます。[https://wiki.archlinux.org/title/Arch_Security_Team Arch Security Team]も参照してください。&lt;br /&gt;
&lt;br /&gt;
特にメインレポジトリや AUR 以外の手段でソフトウェアをインストールしている場合は、あなたが使っているソフトウェアのリリース通知を購読することも検討すべきです。いくつかのソフトウェアには、セキュリティに関する通知を受け取るために購読できるメーリングリストがあります。ソースコードホスティングサイトはしばしば新しいリリースの RSS フィードを提供しています。&lt;br /&gt;
&lt;br /&gt;
=== パッケージの再ビルド ===&lt;br /&gt;
&lt;br /&gt;
攻撃対象領域を減らす手段として、パッケージをリビルドし、不要な関数や機能を削除することができます。例えば、{{Pkg|bzip2}} は [https://security.archlinux.org/CVE-2016-3189 CVE-2016-3189] を回避するために {{ic|bzip2recover}} を使わずにリビルドすることが可能です。カスタムハードニングフラグは、手動またはラッパーを介して適用することもできます。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! フラグ !! 目的&lt;br /&gt;
|-&lt;br /&gt;
| -D_FORTIFY_SOURCE=2 || ランタイムバッファオーバーフローの検出 &lt;br /&gt;
|-&lt;br /&gt;
| -D_GLIBCXX_ASSERTIONS || C++ の文字列とコンテナのランタイム境界チェック &lt;br /&gt;
|-&lt;br /&gt;
| -fasynchronous-unwind-tables || バックトレースの信頼性向上 &lt;br /&gt;
|-&lt;br /&gt;
| -fexceptions || テーブルベースのスレッドキャンセルを有効にする &lt;br /&gt;
|-&lt;br /&gt;
| -fpie -Wl,-pie || 実行可能ファイルに対する完全な ASLR &lt;br /&gt;
|-&lt;br /&gt;
| -fpic -shared || 共有ライブラリのテキスト再配置を行わない &lt;br /&gt;
|-&lt;br /&gt;
| -fplugin=annobin || ハードニング品質管理用データの作成 &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-clash-protection || スタックオーバーフロー検出の信頼性向上 &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-protector or -fstack-protector-all || スタックスマッシュプロテクター &lt;br /&gt;
|-&lt;br /&gt;
| -fstack-protector-strong || 同様に &lt;br /&gt;
|-&lt;br /&gt;
| -g || デバッグ情報を生成する &lt;br /&gt;
|-&lt;br /&gt;
| -grecord-gcc-switches || デバッグ情報にコンパイラのフラグを格納する &lt;br /&gt;
|-&lt;br /&gt;
| -mcet -fcf-protection || 制御フローの完全性保護 &lt;br /&gt;
|-&lt;br /&gt;
| -O2 || 推奨される最適化 &lt;br /&gt;
|-&lt;br /&gt;
| -pipe || 一時ファイルを回避し、ビルドを高速化します。 &lt;br /&gt;
|-&lt;br /&gt;
| -Wall || 推奨されるコンパイラの警告 &lt;br /&gt;
|-&lt;br /&gt;
| -Werror=format-security || 安全でない可能性のあるフォーマット文字列の引数を拒否する &lt;br /&gt;
|-&lt;br /&gt;
| -Werror=implicit-function-declaration || 関数プロトタイプの欠落を却下する &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,defs || アンダーリンクの検出と拒否 &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,now || 遅延バインディングを無効にする &lt;br /&gt;
|-&lt;br /&gt;
| -Wl,-z,relro || 移設後の読み出し専用セグメント &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* [https://developers.redhat.com/blog/2018/03/21/compiler-and-linker-flags-gcc/ Flags and info ソース]&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://security.archlinux.org/ Arch Linux セキュリティトラッカー]&lt;br /&gt;
* ArchWiki のセキュリティアプリケーションのリスト: [[アプリケーション一覧/セキュリティ]]&lt;br /&gt;
* [https://wiki.centos.org/HowTos/OS_Protection CentOS Wiki: OS Protection]&lt;br /&gt;
* [https://www.ibm.com/developerworks/linux/tutorials/l-harden-desktop/index.html Hardening the Linux desktop]&lt;br /&gt;
* [https://www.ibm.com/developerworks/linux/tutorials/l-harden-server/index.html Hardening the Linux server]&lt;br /&gt;
* [https://github.com/lfit/itpol/blob/master/linux-workstation-security.md Linux Foundation: Linux ワークステーションのセキュリティチェックリスト]&lt;br /&gt;
* [https://www.privacytools.io/ privacytools.io Privacy Resources]&lt;br /&gt;
* [https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/index.html Red Hat Enterprise Linux 7 セキュリティガイド]&lt;br /&gt;
* [https://www.debian.org/doc/manuals/securing-debian-howto/securing-debian-howto.en.pdf Debian 安全化マニュアル (PDF)]&lt;br /&gt;
* [http://crunchbang.org/forums/viewtopic.php?id=24722 The paranoid #! Security Guide]&lt;br /&gt;
* [https://www.auscert.org.au/resources/publications/guidelines/unix-linux/unix-and-linux-security-checklist-v3.0 UNIX and Linux Security Checklist v3.0]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Keybase&amp;diff=28740</id>
		<title>Keybase</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Keybase&amp;diff=28740"/>
		<updated>2022-12-07T13:01:38Z</updated>

		<summary type="html">&lt;p&gt;Hikali: {{AUR|keybase-bin}}と {{Pkg|kbfs}}の入れ替え&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:暗号化]]&lt;br /&gt;
[[en:Keybase]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|GnuPG}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Keybase|Wikipedia]] より:&lt;br /&gt;
:Keybase はソーシャルメディアの ID を公に監査できる形で暗号鍵 (PGP 鍵など) にマッピングするキーディレクトリです。Keybase は Keybase Chat という名前の暗号化されたチャットや Keybase ファイルシステムという名前のクラウドストレージシステムも提供しています。ファイルシステムの公開部に配置したファイルは公開エンドポイントや Keybase クライアントでマウントしたファイルシステムからローカルで供与されます。Keybase は公式で Twitter, GitHub, Facebook, Reddit, Hacker News の ID と Bitcoin の Zcash のウォレットアドレスを暗号鍵に接続できます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Keybase は {{Pkg|keybase}} パッケージでインストールすることができますが、GUI や KBFS ファイルシステムは含まれていません。GUI や KBFS ファイルシステムを使用したい場合は {{AUR|keybase-bin}} や {{Pkg|kbfs}} パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
インストール・アップデートした後は以下のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 $ run_keybase&lt;br /&gt;
&lt;br /&gt;
== サインアップ/ログイン ==&lt;br /&gt;
&lt;br /&gt;
Keybase アカウントを登録するには画面上のプロンプトに従ってください:&lt;br /&gt;
&lt;br /&gt;
 $ keybase signup&lt;br /&gt;
&lt;br /&gt;
Keybase アカウントを既に持っている場合は以下のコマンドでログインできます:&lt;br /&gt;
&lt;br /&gt;
 $ keybase login &amp;lt;keybase_username&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GnuPG 鍵 ==&lt;br /&gt;
&lt;br /&gt;
対話式のサインアップの際にキーリングに GnuPGP 鍵のペアが存在していた場合、Keybase はどれを使用するか質問します。鍵のペアがない場合、以下のコマンドで生成できます:&lt;br /&gt;
&lt;br /&gt;
 $ keybase gpg gen&lt;br /&gt;
&lt;br /&gt;
上記のコマンドで鍵のペアが生成されセキュアにアップロードされます。&lt;br /&gt;
&lt;br /&gt;
== Keybase Filesystem (KBFS) ==&lt;br /&gt;
&lt;br /&gt;
KBFS は [[FUSE]] を利用してリモートの暗号ファイルシステムを [[systemd]] ユニットの {{ic|keybase.mount}} でマウントします。&lt;br /&gt;
KBFS は {{AUR|keybase-bin}} パッケージに付属しています。また、{{Pkg|kbfs}} パッケージを個別にインストールすることができます。&lt;br /&gt;
&lt;br /&gt;
Keybase ではユーザーは Keybase ファイルシステムという名前のクラウドストレージに 250GB までファイルを保存できます。ファイルシステムは公開ファイル・秘密ファイル・チームファイルの3つに分かれています。&lt;br /&gt;
{{AUR|keybase-bin}}パッケージをインストールした場合、ファイルシステムはデフォルトで {{ic|/keybase}} にマウントされます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|kbfs}} パッケージをインストールした場合に kbfs を構成するには、まず keybase サービスが[[起動]]していることを確認してください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
keybase サービスの起動後、以下のコマンドでKBFSのマウントポイントを設定できます:&lt;br /&gt;
&lt;br /&gt;
 $ keybase config set mountdir /path/to/kbfs&lt;br /&gt;
&lt;br /&gt;
現在は[[ユーザーユニット]]で {{ic|kbfs.service}} を[[起動]]できます。&lt;br /&gt;
&lt;br /&gt;
サービスを[[有効化]]することで起動時にKBFSがマウントされます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/keybase/public}} のファイルは全てクライアントによって自動的に署名されます。{{ic|/keybase/private}} のファイルはアップロードされる前に暗号化・署名され、エンドツーエンドで暗号化が行われます。&lt;br /&gt;
&lt;br /&gt;
詳細および使用方法に関しては、 [https://keybase.io/docs/kbfs keybase.io の KBFS ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://keybase.io/ Keybase ホームページ]&lt;br /&gt;
* [[Wikipedia:Keybase]]&lt;br /&gt;
* [https://keybase.io/docs/command_line Keybase Basics]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Keybase&amp;diff=28732</id>
		<title>Keybase</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Keybase&amp;diff=28732"/>
		<updated>2022-12-06T21:41:49Z</updated>

		<summary type="html">&lt;p&gt;Hikali: Keybase Filesystem(KBFS)セクションを翻訳&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:暗号化]]&lt;br /&gt;
[[en:Keybase]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|GnuPG}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
&lt;br /&gt;
[[Wikipedia:Keybase|Wikipedia]] より:&lt;br /&gt;
:Keybase はソーシャルメディアの ID を公に監査できる形で暗号鍵 (PGP 鍵など) にマッピングするキーディレクトリです。Keybase は Keybase Chat という名前の暗号化されたチャットや Keybase ファイルシステムという名前のクラウドストレージシステムも提供しています。ファイルシステムの公開部に配置したファイルは公開エンドポイントや Keybase クライアントでマウントしたファイルシステムからローカルで供与されます。Keybase は公式で Twitter, GitHub, Facebook, Reddit, Hacker News の ID と Bitcoin の Zcash のウォレットアドレスを暗号鍵に接続できます。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Keybase は {{Pkg|keybase}} パッケージでインストールすることができますが、GUI や KBFS ファイルシステムは含まれていません。GUI や KBFS ファイルシステムを使用したい場合は {{Pkg|kbfs}} や {{AUR|keybase-bin}} パッケージをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
インストール・アップデートした後は以下のコマンドを実行:&lt;br /&gt;
&lt;br /&gt;
 $ run_keybase&lt;br /&gt;
&lt;br /&gt;
== サインアップ/ログイン ==&lt;br /&gt;
&lt;br /&gt;
Keybase アカウントを登録するには画面上のプロンプトに従ってください:&lt;br /&gt;
&lt;br /&gt;
 $ keybase signup&lt;br /&gt;
&lt;br /&gt;
Keybase アカウントを既に持っている場合は以下のコマンドでログインできます:&lt;br /&gt;
&lt;br /&gt;
 $ keybase login &amp;lt;keybase_username&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GnuPG 鍵 ==&lt;br /&gt;
&lt;br /&gt;
対話式のサインアップの際にキーリングに GnuPGP 鍵のペアが存在していた場合、Keybase はどれを使用するか質問します。鍵のペアがない場合、以下のコマンドで生成できます:&lt;br /&gt;
&lt;br /&gt;
 $ keybase gpg gen&lt;br /&gt;
&lt;br /&gt;
上記のコマンドで鍵のペアが生成されセキュアにアップロードされます。&lt;br /&gt;
&lt;br /&gt;
== Keybase Filesystem (KBFS) ==&lt;br /&gt;
&lt;br /&gt;
KBFS は [[FUSE]] を利用してリモートの暗号ファイルシステムを [[systemd]] ユニットの {{ic|keybase.mount}} でマウントします。&lt;br /&gt;
KBFS は {{AUR|keybase-bin}} パッケージに付属しています。また、{{Pkg|kbfs}} パッケージを個別にインストールすることができます。&lt;br /&gt;
&lt;br /&gt;
Keybase ではユーザーは Keybase ファイルシステムという名前のクラウドストレージに 250GB までファイルを保存できます。ファイルシステムは公開ファイル・秘密ファイル・チームファイルの3つに分かれています。&lt;br /&gt;
{{AUR|keybase-bin}}パッケージをインストールした場合、ファイルシステムはデフォルトで {{ic|/keybase}} にマウントされます。&lt;br /&gt;
&lt;br /&gt;
{{Pkg|kbfs}} パッケージをインストールした場合に kbfs を構成するには、まず keybase サービスが[[起動]]していることを確認してください。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
keybase サービスの起動後、以下のコマンドでKBFSのマウントポイントを設定できます:&lt;br /&gt;
&lt;br /&gt;
 $ keybase config set mountdir /path/to/kbfs&lt;br /&gt;
&lt;br /&gt;
現在は[[ユーザーユニット]]で {{ic|kbfs.service}} を[[起動]]できます。&lt;br /&gt;
&lt;br /&gt;
サービスを[[有効化]]することで起動時にKBFSがマウントされます。&lt;br /&gt;
&lt;br /&gt;
{{ic|/keybase/public}} のファイルは全てクライアントによって自動的に署名されます。{{ic|/keybase/private}} のファイルはアップロードされる前に暗号化・署名され、エンドツーエンドで暗号化が行われます。&lt;br /&gt;
&lt;br /&gt;
詳細および使用方法に関しては、 [https://keybase.io/docs/kbfs keybase.io の KBFS ドキュメント] を参照してください。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
&lt;br /&gt;
* [https://keybase.io/ Keybase ホームページ]&lt;br /&gt;
* [[Wikipedia:Keybase]]&lt;br /&gt;
* [https://keybase.io/docs/command_line Keybase Basics]&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
	<entry>
		<id>https://wiki.archlinux.jp/index.php?title=Firefox&amp;diff=28340</id>
		<title>Firefox</title>
		<link rel="alternate" type="text/html" href="https://wiki.archlinux.jp/index.php?title=Firefox&amp;diff=28340"/>
		<updated>2022-11-11T00:48:32Z</updated>

		<summary type="html">&lt;p&gt;Hikali: 誤字の修正&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ウェブブラウザ]]&lt;br /&gt;
[[Category:Mozilla]]&lt;br /&gt;
[[ar:Firefox]]&lt;br /&gt;
[[cs:Firefox]]&lt;br /&gt;
[[de:Firefox]]&lt;br /&gt;
[[en:Firefox]]&lt;br /&gt;
[[es:Firefox]]&lt;br /&gt;
[[fr:Firefox]]&lt;br /&gt;
[[it:Firefox]]&lt;br /&gt;
[[ko:Firefox]]&lt;br /&gt;
[[ru:Firefox]]&lt;br /&gt;
[[zh-hans:Firefox]]&lt;br /&gt;
{{Related articles start}}&lt;br /&gt;
{{Related|ブラウザプラグイン}}&lt;br /&gt;
{{Related|Firefox 設定}}&lt;br /&gt;
{{Related|Firefox プライバシー}}&lt;br /&gt;
{{Related|Chromium}}&lt;br /&gt;
{{Related|Opera}}&lt;br /&gt;
{{Related articles end}}&lt;br /&gt;
[https://www.mozilla.org/firefox Firefox] は [https://www.mozilla.org Mozilla] によって開発されているオープンソースの人気グラフィカルウェブブラウザです。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
Firefox は {{Pkg|firefox}} パッケージで[[インストール]]できます。&lt;br /&gt;
&lt;br /&gt;
その他にも、以下のような選択肢があります。&lt;br /&gt;
* {{App|Firefox Developer Edition|開発者向けのバージョン|https://www.mozilla.org/firefox/developer/|{{Pkg|firefox-developer-edition}}}}&lt;br /&gt;
*{{App|Firefox Extended Support Release|長期サポート版|https://www.mozilla.org/firefox/organizations/|{{AUR|firefox-esr}} または {{AUR|firefox-esr-bin}}}}&lt;br /&gt;
*{{App|Firefox Beta|ベータ版|https://www.mozilla.org/firefox/channel/desktop/#beta|{{AUR|firefox-beta}} または {{AUR|firefox-beta-bin}}}}&lt;br /&gt;
*{{App|Firefox Nightly|テスト用のナイトリービルド ([https://developer.mozilla.org/Firefox/Experimental_features 実験的な機能] を搭載しています。)|https://www.mozilla.org/firefox/channel/desktop/#nightly|{{AUR|firefox-nightly}}}}&lt;br /&gt;
* {{App|Firefox KDE|OpenSUSE パッチが適用された Firefox。シンプルな Firefox プラグインで KDE との統合を実現しています。|https://build.opensuse.org/package/show/mozilla:Factory/MozillaFirefox|{{AUR|firefox-kde-opensuse}}}}&lt;br /&gt;
* 異なる Mozilla ビルドチャンネルの上に、多かれ少なかれ特別な機能を持ったフォークが多数存在します。&lt;br /&gt;
&lt;br /&gt;
Firefox では、標準の英語以外に、多くの言語パックが利用可能です。言語パックは通常 {{ic|firefox-i18n-&#039;&#039;languagecode&#039;&#039;}} という名前です（ここで {{ic|&#039;&#039;languagecode&#039;&#039;}} には &#039;&#039;&#039;de&#039;&#039;&#039;, &#039;&#039;&#039;ja&#039;&#039;, &#039;&#039;&#039;fr&#039;&#039; など、任意の言語コードを指定できます）。利用可能な言語パックの一覧は {{Pkg|firefox}} の [https://archlinux.org/packages/extra/any/firefox-i18n/ firefox-i18n], {{Pkg|firefox-developer-edition}} の [https://archlinux.org/packages/community/any/firefox-developer-edition-i18n/ firefox-developer-edition-i18n] と {{AUR|firefox-nightly}} の [https://aur.archlinux.org/packages/?K=firefox-nightly- firefox-nightly-] を参照してください。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=言語パックは &#039;&#039;-nightly&#039;&#039; と &#039;&#039;-developer-edition&#039;&#039; では、頻繁に文字列が変更されクラッシュする可能性があるため無効化されています。UI 言語を強制的に変更するには、{{ic|about:config}} で {{ic|intl.locale.requested}} を設定する必要があるかもしれません。[https://www.reddit.com/r/firefox/comments/lx3dp9/how_to_change_interface_language/gpovlsp/?context=8&amp;amp;depth=9]}}&lt;br /&gt;
&lt;br /&gt;
== アドオン ==&lt;br /&gt;
Firefox は大量のアドオンのライブラリがあることで知られており、Firefox に機能を追加したり、もともとある機能の挙動を変更したりすることができます。Firefox の &amp;quot;アドオンマネージャ&amp;quot; から新しいアドオンを見つけたりインストールしたアドオンを管理できます。&lt;br /&gt;
&lt;br /&gt;
人気のあるアドオンの一覧は、[https://addons.mozilla.org/firefox/extensions/?sort=popular 人気によってソートされた Mozilla のアドオンリスト]を見て下さい。&lt;br /&gt;
&lt;br /&gt;
=== 検索エンジンの追加 ===&lt;br /&gt;
&lt;br /&gt;
検索エンジンは、クエリの代わりに %s で補完した検索 URL を {{ic|Location}} フィールドに、ユーザ定義文字で補完した {{ic|Keyword}} フィールドを持つブックマークを作成することで Firefox に追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
 Location:&lt;br /&gt;
 https://duckduckgo.com/html/?q=%s&lt;br /&gt;
 Keyword:&lt;br /&gt;
 d&lt;br /&gt;
&lt;br /&gt;
検索は検索語を指定された検索エンジンのキーワードでプリペンドすることで行われます:{{ic|d archwiki}} は検索語 {{ic|archwiki}} を使って DuckDuckGo に問い合わせます。&lt;br /&gt;
 &lt;br /&gt;
検索エンジンは、アドオン拡張機能によって Firefox に追加することもできます。利用可能な検索ツールとエンジンの一覧は [https://addons.mozilla.org/firefox/search-tools/ このページ] を参照してください。&lt;br /&gt;
&lt;br /&gt;
検索エンジンの非常に広範なリストは [https://mycroftproject.com/ Mycroft Project] で見つけることができます。&lt;br /&gt;
&lt;br /&gt;
また、[https://firefox.maltekraus.de/extensions/add-to-search-bar add-to-searchbar] 拡張機能を使えば、サイトの検索フィールドを右クリックして &#039;&#039;Add to Search Bar...&#039;&#039; を選択するだけで、どんな Web サイトからでも検索バーに検索結果を追加することが可能です。&lt;br /&gt;
&lt;br /&gt;
==== firefox-extension-arch-search ====&lt;br /&gt;
{{AUR|firefox-extension-arch-search}} パッケージをインストールすることで Firefox 検索ツールバーで Arch に関わる検索 (AUR, wiki, フォーラムなど) が追加できます。&lt;br /&gt;
&lt;br /&gt;
== プラグイン ==&lt;br /&gt;
&lt;br /&gt;
Firefox 85 で Flash Player を含むすべてのプラグインのサポートが削除されました。[https://support.mozilla.org/kb/npapi-plugins][https://support.mozilla.org/kb/end-support-adobe-flash]&lt;br /&gt;
&lt;br /&gt;
== 設定 ==&lt;br /&gt;
&lt;br /&gt;
Firefox では、多くの設定項目が公開されています。それらを調べるには、Firefox のアドレスバーに以下を入力します。&lt;br /&gt;
&lt;br /&gt;
 about:config&lt;br /&gt;
&lt;br /&gt;
一度設定すると、これらはユーザーの現在のプロファイルに影響を与え、[https://www.mozilla.org/firefox/sync/ Firefox Sync] を介してすべてのデバイス間で同期させることができます。この方法で同期されるのは {{ic|about:config}} エントリのサブセットのみで、正確なサブセットは {{ic|about:config}} で {{ic|services.sync.prefs}} を検索して見つけることができることに注意してください。追加の設定やサードパーティの設定は、設定値の前に [https://support.mozilla.org/en-US/kb/sync-custom-preferences services.sync.prefs.sync] を付けて新しいブール値のエントリを作成することで同期させることができます。拡張機能のホワイトリストを同期するには、[https://addons.mozilla.org/firefox/addon/noscript/ NoScript] を使用します。&lt;br /&gt;
&lt;br /&gt;
 services.sync.prefs.sync.capability.policy.maonoscript.sites&lt;br /&gt;
&lt;br /&gt;
NoScript の残りの設定を Firefox Sync 経由で同期するには、ブール変数 {{ic|noscript.sync.enabled}} を {{ic|true}} に設定する必要があります。&lt;br /&gt;
&lt;br /&gt;
=== 設定の保存 ===&lt;br /&gt;
&lt;br /&gt;
Firefox はプロファイルの設定を {{ic|prefs.js}} としてプロファイルフォルダ (通常は {{ic|~/.mozilla/firefox/xxxxxxxx.default/}}) に格納します。&lt;br /&gt;
&lt;br /&gt;
Firefox では、{{ic|user.js}} ファイルを使用してプロファイルを設定することもできます。[http://kb.mozillazine.org/User.js_file user.js] もプロファイルフォルダに保存されます。{{ic|user.js}} の設定は {{ic|prefs.js}} よりも優先されます。有用な出発点として、プライバシーやセキュリティに敏感なユーザーを対象とした [https://github.com/pyllyukko/user.js custom user.js] などを参照してください。&lt;br /&gt;
&lt;br /&gt;
上記のアプローチの欠点は、システム全体に適用されないことです。さらに、ブラウザの初回起動後にプロファイルディレクトリが作成されるため、「事前設定」としては役に立ちません。ただし、&#039;&#039;firefox&#039;&#039; に新しいプロファイルを作成させ、再び閉じた後に、既に作成されているプロファイルフォルダの内容を [https://support.mozilla.org/en-US/kb/back-and-restore-information-firefox-profiles#w_restoring-a-profile-backup コピー] することは可能です。&lt;br /&gt;
&lt;br /&gt;
カスタマイズされた Firefox を広く展開する際に役立つ機能として、特定の設定をロックすることが望まれる場合があります。システム全体の設定を作成するには、[http://kb.mozillazine.org/Locking_preferences 環境設定のロック] で説明されている手順を実行します。&lt;br /&gt;
&lt;br /&gt;
1. 1. {{ic|/usr/lib/firefox/defaults/pref/local-settings.js}} を作成する。&lt;br /&gt;
&lt;br /&gt;
 pref(&amp;quot;general.config.obscure_value&amp;quot;, 0);&lt;br /&gt;
 pref(&amp;quot;general.config.filename&amp;quot;, &amp;quot;mozilla.cfg&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
2. {{ic|/usr/lib/firefox/mozilla.cfg}} を作成する。(これは実際の設定を保存するものです。)&lt;br /&gt;
&lt;br /&gt;
 //&lt;br /&gt;
 //...your settings...&lt;br /&gt;
 // e.g to disable Pocket, uncomment the following lines&lt;br /&gt;
 // lockPref(&amp;quot;extensions.pocket.enabled&amp;quot;, false);&lt;br /&gt;
 // lockPref(&amp;quot;browser.newtabpage.activity-stream.feeds.section.topstories&amp;quot;, false);&lt;br /&gt;
&lt;br /&gt;
最初の行は正確に {{ic|//}} を含む必要があることに注意してください。ファイルの構文は {{ic|user.js}} と似ています。&lt;br /&gt;
&lt;br /&gt;
=== マルチメディアの再生 ===&lt;br /&gt;
&lt;br /&gt;
Firefox は HTML5 の {{ic|&amp;lt;audio&amp;gt;}} や {{ic|&amp;lt;video&amp;gt;}} 要素内のマルチメディアを再生するために [[FFmpeg]] を使用しています。[http://demo.nimius.net/video_test/ video-test page] や [https://hpr.dogphilosophy.net/test/ audio-test page] で、実際にどのフォーマットに対応しているかを確認してください。&lt;br /&gt;
&lt;br /&gt;
Firefox は、音声の再生と取り込みに [[PulseAudio]] を使用します。PulseAudio がインストールされていない場合、Firefox は代わりに [[Advanced Linux Sound Architecture|alsa]] を使用します。&lt;br /&gt;
&lt;br /&gt;
==== HTML5 DRM/Widevine ====&lt;br /&gt;
&lt;br /&gt;
Widevine は、Netflix や Amazon Prime Video などがビデオコンテンツを保護するために使用しているデジタル著作権管理ツールです。&#039;&#039;環境設定 &amp;gt; 一般 &amp;gt; デジタル著作権管理（DRM）コンテンツ&#039;&#039; で有効にすることができます。この設定が無効になっているときに Widevine が有効なページにアクセスすると、Firefox はアドレスバーの下にDRMをインストールする許可を求めるプロンプトを表示します。これを承認し、&#039;&#039;ダウンロード中&#039;&#039; バーが消えるのを待つと、Widevine で保護されたサイトのビデオを見ることができるようになります。&lt;br /&gt;
&lt;br /&gt;
Firefox では、[https://bugzilla.mozilla.org/show_bug.cgi?id=1700815 ハードウェア DRM 再生] を使用していないため、Widevine では 720p の動画 (またはそれ以下) しか再生できません。また、ウィンドウと環境設定で、プライベート モードのブラウジングを無効にする必要があります。&lt;br /&gt;
&lt;br /&gt;
==== Open With 拡張機能 ====&lt;br /&gt;
&lt;br /&gt;
# [https://addons.mozilla.org/firefox/addon/open-with/ Open With] アドオンをインストールします。&lt;br /&gt;
# &#039;&#039;アドオン &amp;gt; Open With &amp;gt; Preferences&#039;&#039; に移動します。&lt;br /&gt;
# ファイルをシステムにインストールし、インストールをテストするための指示に従います。&lt;br /&gt;
# &#039;&#039;ブラウザの追加&#039;&#039; をクリックします.&lt;br /&gt;
# ダイアログにこのメニューエントリの名前と, 動画ストリーミングプレイヤーを起動するコマンド (例: [[mpv|/usr/bin/mpv]]) を記述してください.&lt;br /&gt;
# (オプションのステップ) 必要な引数をプレイヤーに追加する (例えば &#039;&#039;mpv&#039;&#039; には {{ic|--force-window --ytdl}} が必要でしょう)。&lt;br /&gt;
# リンクを右クリックするか、動画を含むページを訪問してください。Open Withのメニューから新しく作成したエントリを選択すると、そのサイトがサポートされていれば、期待通りにプレーヤーが開くでしょう。&lt;br /&gt;
&lt;br /&gt;
同じ手順で、&#039;&#039;youtube-dl&#039;&#039; のようなビデオダウンローダーを関連付けることができます。&lt;br /&gt;
&lt;br /&gt;
==== ハードウェアビデオアクセラレーション ====&lt;br /&gt;
&lt;br /&gt;
VA-API による [[ハードウェアビデオアクセラレーション]] は [[Wayland]] で利用可能です。[https://mastransky.wordpress.com/2020/06/03/firefox-on-fedora-finally-gets-va-api-on-wayland/] と [[Xorg]] があります。[https://bugzilla.mozilla.org/show_bug.cgi?id=1619523] [https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=Firefox-80-VA-API-X11]。&lt;br /&gt;
&lt;br /&gt;
FirefoxでVA-APIを有効にするには。&lt;br /&gt;
&lt;br /&gt;
# あなたのビデオカードが VA-API 用に正しく設定されていることを確認してください。&lt;br /&gt;
#* 必要であれば VA-API ドライバを確認しインストールする手順については [[ハードウェアビデオアクセラレーション]] を参照してください。&lt;br /&gt;
# WebRender が有効であることを確認する。&lt;br /&gt;
#* WebRender が有効であることを確認するには、 {{ic|about:support}} を開き、次に {{ic|Compositing}} を開いてください。GNOME や他のデスクトップ環境では、デフォルトで有効になっています [https://mastransky.wordpress.com/2021/01/10/firefox-were-finally-getting-hw-acceleration-on-linux/]&lt;br /&gt;
#** 2021年8月現在、Software WebRender は動作しないため、Software WebRender を実行していないことを確認してください [https://bugzilla.mozilla.org/show_bug.cgi?id=1723540#c1] 必要であれば、[[Firefox 設定#WebRender コンポジタの有効化]] で説明するように、WebRender を強制的に有効にすることができます。&lt;br /&gt;
# {{ic|about:config}} で以下のフラグを設定します。&lt;br /&gt;
{{Note|1=Firefox 96 では {{ic|media.ffmpeg.vaapi.enabled}} と {{ic|media.rdd-ffmpeg.enabled}} は true に設定するだけでよいようです。[https://bugzilla.mozilla.org/show_bug.cgi?id=1698778#c32 the RDD sandbox] がほぼ修正されたので、以下の多くの環境設定はもはや必要ありません。しかし、いくつかの問題はまだ残っています [https://bugzilla.mozilla.org/show_bug.cgi?id=1743926]}} {{Note|1=Firefox 97 からは {{ic|media.ffmpeg.vaapi.enabled}} を true に設定するだけです [https://bugzilla.mozilla.org/show_bug.cgi?id=1683808#c36]}}&lt;br /&gt;
#* {{ic|media.ffmpeg.vaapi.enabled}} を {{ic|true}} に設定すると、FFmpeg で VA-API を使用できるようになります。&lt;br /&gt;
#* {{ic|media.ffvpx.enabled}} を {{ic|false}} に設定して VP8/VP9 の内部デコーダを無効にする。これは、[https://bugzilla.mozilla.org/show_bug.cgi?id=1660336 このバグ] が修正されたにもかかわらず、必要です [https://bugzilla.mozilla.org/show_bug.cgi?id=1720363#c6][https://bugzilla.mozilla.org/show_bug.cgi?id=1683808]&lt;br /&gt;
#* {{ic|media.navigator.mediadatadecoder_vpx_enabled}} を {{ic|true}} にして、WebRTC のハードウェア VA-API デコーディングを有効にします [https://bugzilla.mozilla.org/show_bug.cgi?id=1709009]&lt;br /&gt;
#* {{ic|media.rdd-vpx.enabled}} を {{ic|false}} に設定すると VP8/VP9 のリモートデータデコーダプロセスを無効化します。Firefox は VP8/VP9 の RDD プロセスを使用しようとしますが、RDD サンドボックスは VA-API アクセスをブロックします [https://bugzilla.mozilla.org/show_bug.cgi?id=1673184] VP8/VP9 用のリモートデータデコーダプロセスを無効にすると、代わりに VA-API がコンテンツプロセスで実行されることになります。Firefox 96 では、RDD プロセスで VA-API を実行するためのほぼ実用的なサポートが追加されました。&lt;br /&gt;
#** 別の回避策として、上記のように VP8/VP9 に対してのみ無効化するのではなく、 {{ic|media.rdd-process.enabled}} を {{ic|false}} に設定して RDD プロセスを完全に無効化することも可能です。&lt;br /&gt;
#* Intel では、VA-API は Intel iHD ドライバ {{Pkg|intel-media-driver}} と共に動作しない場合があります。これは、Intel i965 ドライバ {{Pkg|libva-intel-driver}} を使用することで回避できるかもしれません。この回避策は Intel Iris Xe グラフィックスではもう機能しません。幸いなことに、Firefox 96 は RDD プロセスのより良いサポートを導入しており、{{Pkg|intel-media-driver}} の助けになるはずです。[https://bugzilla.mozilla.org/show_bug.cgi?id=1619585#c42] [https://bugzilla.mozilla.org/show_bug.cgi?id=1619585#c62] [https://bugzilla.mozilla.org/show_bug.cgi?id=1619585#c63]&lt;br /&gt;
#** 最後の手段として、コンテンツプロセスのサンドボックスを無効にすることができます。しかし、これは深刻なセキュリティリスクであり、攻撃者からの防御を無効にしてしまいます。サンドボックスの設定はデフォルトのままにしておくことをお勧めします [https://bugzilla.mozilla.org/show_bug.cgi?id=1683808#c26] それでも、コンテンツサンドボックスを無効にするには {{ic|security.sandbox.content.level}} を {{ic|0}} に設定します。[https://bugzilla.mozilla.org/show_bug.cgi?id=1720363#c9]&lt;br /&gt;
# 以下の [[環境変数]] を有効にして、Firefox を起動してください。&lt;br /&gt;
#* Wayland では {{ic|1=MOZ_ENABLE_WAYLAND=1}} で、[[#Wayland]] を参照してください。&lt;br /&gt;
#* X.org では、94 からは、Firefox はデフォルトで EGL モードで動作し、これで十分です [https://mozillagfx.wordpress.com/2021/10/30/switching-the-linux-graphics-stack-from-glx-to-egl/]&lt;br /&gt;
#** より古いリリースでは、X.org では {{ic|1=MOZ_X11_EGL=1}} で EGL を有効にするか、 {{ic|gfx.x11-egl.force-enabled}} を {{ic|true}} 、 {{ic|gfx.x11-egl.force-disabled}} を {{ic|false}} でセットしてください。&lt;br /&gt;
&lt;br /&gt;
{{Warning|コンテンツプロセスのサンドボックスを無効にすることはセキュリティ上のリスクがあり、Firefox 96 からは RDD プロセスで VA-API を動作させるための初期サポートが存在します}}&lt;br /&gt;
&lt;br /&gt;
{{Tip|&lt;br /&gt;
* [[ハードウェアビデオアクセラレーション#確認]] と同様に、Firefox の VA-API ログを確認することで、VA-API の使用状況を確認することができます。環境変数 {{ic|1=MOZ_LOG=&amp;quot;PlatformDecoderModule:5&amp;quot;}} を指定して Firefox を起動し、例えば動画再生時に VA-API が有効で使用されていることをログ出力で確認します（&#039;&#039;VA-API&#039;&#039; の文字列を検索してください）これらのログは、前述した2つのコンポジタ（WebRender または OpenGL）のうち1つだけが、あなたの特定のセットアップで VA-API と共に動作することを示すかもしれませんので、注意してください。&lt;br /&gt;
* YouTube でハードウェア デコードを許可するには、使用するビデオ コーデックがハードウェアによってサポートされている必要があります。GPU がサポートするプロファイルは [[ハードウェアビデオアクセラレーション#VA-API の確認]] で確認でき、使用する YouTube コーデックは [https://addons.mozilla.org/firefox/addon/h264ify/ h264ify] または [https://addons.mozilla.org/firefox/addon/enhanced-h264ify/ enhanced-h264ify] 拡張機能で制御できます (YouTube が提供していれば!)。あるいは、{{AUR|firefox-h264ify}} をインストールすることもできます。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Note|1=&amp;lt;nowiki/&amp;gt;&lt;br /&gt;
* NVIDIA の独自ドライバは、470 ドライバで DMA-BUF を潜在的にサポートしています [https://bugs.kde.org/show_bug.cgi?id=428089#c2][https://www.phoronix.com/scan.php?page=news_item&amp;amp;px=NVIDIA-DMA-BUF-Wayland-KDE] {{AUR|libva-nvidia-driver}} で [[CUDA]] と DMA-BUF を使えば、潜在的に動作するはずです [https://github.com/elFarto/nvidia-vaapi-driver/#firefox] DMA-BUF は Firefox のハードウェアビデオアクセラレーションに必要です [https://bugzilla.mozilla.org/show_bug.cgi?id=1669189#c4] 現在 [[VDPAU]] や {{Pkg|libva-vdpau-driver}} には DMA-BUF のサポートがないので、この最後のオプションは動きません。&lt;br /&gt;
* 現在のところ、Firefox の VA-API 実装は H.264/AVC, VP8 &amp;amp; VP9 でエンコードされたビデオをデコードできます。AV1 のサポートは将来的に追加されるかもしれません[https://bugzilla.mozilla.org/show_bug.cgi?id=1652958]&lt;br /&gt;
* マルチ GPU システムは、これに従って VA-API に適した GPU を自動的に選択する必要があります [https://bugzilla.mozilla.org/show_bug.cgi?id=1588904#c36 解決済み問題]&lt;br /&gt;
* 一部の動画（例：YouTube VR）では {{ic|media.ffvpx.enabled}} を {{ic|false}} に設定すると黒い画像が表示されることがあります。[https://bugzilla.mozilla.org/show_bug.cgi?id=1667537]&lt;br /&gt;
* RDD プロセスで VA-API が正しく動作しないのを回避するために、上記の提案のように VA-API をコンテンツプロセスに移動する代わりに、RDD プロセスのサンドボックスを無効化することができます。サンドボックスを無効にすることは、セキュリティ上のリスクが大きく、攻撃者からの保護が無効となるため、推奨しません。環境変数 {{ic|1=MOZ_DISABLE_RDD_SANDBOX=1}} を設定して、RDD のサンドボックスを無効にしてください。&lt;br /&gt;
* {{Pkg|linux-hardened}} の [[AMDGPU]] ユーザは {{ic|1=CONFIG_CHECKPOINT_RESTORE=y}} で &#039;&#039;linux-hardened&#039;&#039; を再構築する必要があるかもしれません{{Pkg|mesa}} [https://gitweb.gentoo.org/repo/gentoo.git/tree/media-libs/mesa/mesa-9999.ebuild kcmp システムコールを必要とする] この [https://bugzilla.mozilla.org/show_bug.cgi?id=1624743 バグが解決された] ので、もう必要ないかもしれません。&lt;br /&gt;
* WebRender は現在デフォルトですが (ソフトウェアまたはハードウェアのいずれか)、Gecko のレガシー OpenGL バックエンドはまだ存在しています。レガシーバックエンドが有用な場合があるかもしれませんので、[[Firefox 設定#レガシー OpenGL コンポジタを使用可能にする|レガシー OpenGL コンポジタを使用可能にする]] で説明します。&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== スペルチェック ===&lt;br /&gt;
&lt;br /&gt;
Firefox は、システム全体にインストールされている [https://wiki.archlinux.org/title/Hunspell Hunspell] 辞書と、独自の拡張システムを通じてインストールされた辞書を使用することができます。&lt;br /&gt;
&lt;br /&gt;
特定の言語のスペルチェックを有効にするには、任意のテキストフィールドを右クリックし、&#039;&#039;Check Spelling&#039;&#039; ボックスをチェックします。スペルチェックの言語を選択するには、もう一度右クリックし、&#039;&#039;言語&#039;&#039; サブメニューから言語を選択します。&lt;br /&gt;
&lt;br /&gt;
デフォルトの言語選択が定着しない場合は、[[Firefox#Firefox がデフォルトのスペルチェック辞書を記憶しない]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
==== システム全体の Hunspell 辞書 ====&lt;br /&gt;
&lt;br /&gt;
必要な言語の [https://wiki.archlinux.org/title/Hunspell Hunspell] とその辞書をインストールします。&lt;br /&gt;
&lt;br /&gt;
==== 拡張機能としての辞書 ====&lt;br /&gt;
&lt;br /&gt;
より多くの言語を取得するには、任意のテキストフィールドを右クリックして、&#039;&#039;辞書を追加...&#039;&#039; をクリックし、[https://addons.mozilla.org/firefox/language-tools/ 辞書と言語パックのリスト] からインストールしたい辞書を選択するだけです。&lt;br /&gt;
&lt;br /&gt;
{{Tip|ロシア語の場合、拡張機能は {{Pkg|firefox-spell-ru}} としてパッケージ化されています。}}&lt;br /&gt;
&lt;br /&gt;
=== KDEとの統合 ===&lt;br /&gt;
&lt;br /&gt;
* GTK アプリ (Firefox を含む) に [[KDE]] ルックを導入するには、{{Pkg|breeze-gtk}} と {{Pkg|kde-gtk-config}} をインストールしてください。その後、システム設定から &#039;&#039;外観 &amp;gt; アプリケーションスタイル &amp;gt; GNOME/GTK アプリケーションスタイルの設定...&#039;&#039;で &#039;Breeze&#039; を選択してください。&lt;br /&gt;
* Firefox 64 以降で KDE のファイル選択・印刷ダイアログを使うには、 {{Pkg|xdg-desktop-portal}} と {{Pkg|xdg-desktop-portal-kde}} をインストールし、以下のいずれかを行ってください。&lt;br /&gt;
** {{ic|widget.use-xdg-desktop-portal}} を {{ic|about:config}} で {{ic|true}} に設定する。&lt;br /&gt;
** {{ic|1=GTK_USE_PORTAL=1}} [[環境変数]] で firefox を起動する。&lt;br /&gt;
::{{Note|1={{ic|1=GTK_USE_PORTAL=1}} を使用したり、{{ic|widget.use-xdg-desktop-portal}} に {{ic|true}} を設定すると [https://bugzilla.mozilla.org/show_bug.cgi?id=1516290 Firefox が起動時にデフォルトのブラウザ設定を求めてくることがあります。]}}&lt;br /&gt;
* [[KDE]] との統合のため。MIME タイプシステム、プロキシ、ファイルダイアログは、AUR の {{AUR|firefox-kde-opensuse}} 変形版に OpenSUSE のパッチを適用したものを使うことができます。代わりに、MIME タイプとの統合は、Firefox で使われている非推奨の {{ic|~/.local/share/applications/mimeapps.list}} から MIME データベースへのシンボリックリンクを作成することで実現できます。[[XDG MIME Applications#mimeapps.list]] を参照してください。&lt;br /&gt;
* 拡張機能/アドオンは、以下のような追加的な統合を提供することがあります。&lt;br /&gt;
** [[Plasma]] におけるブラウザの統合: {{Pkg|plasma-browser-integration}} と [https://addons.mozilla.org/firefox/addon/plasma-integration/ Plasma Integration アドオン] が必要です。&lt;br /&gt;
::{{Tip|Media Player ウィジェットやトレイ アイコンのエントリが重複しないようにするには、{{ic|media.hardwaremediakeys.enabled}} を {{ic|false}} にセットしてください。これは Firefox からのメディアエントリを無効化し、Plasma 統合アドオンからのものだけを使用します}}&lt;br /&gt;
&lt;br /&gt;
== ヒントとテクニック ==&lt;br /&gt;
&lt;br /&gt;
一般的な設定事項は [[Firefox 設定]]を、プライバシー関連の設定は [[Firefox プライバシー]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ダークテーマ ===&lt;br /&gt;
&lt;br /&gt;
[[GTK]] のダークテーマを使っている場合 (例: Arc Dark)、Firefox を明るいテーマ (例: Adwaita) で起動することを推奨します。詳しくは [[GTK#テーマ]] や [[#暗い GTK+ テーマで入力フィールドが読めない]] を参照。&lt;br /&gt;
&lt;br /&gt;
また、Firefox 68 から、システムの GTK テーマや Firefox テーマとは無関係に、全ての Firefox インターフェイスとウェブサイトにダークテーマを適用することができます。そうしたい場合、{{ic|about:config}} から {{ic|browser.in-content.dark-mode}} を {{ic|true}} に、{{ic|ui.systemUsesDarkTheme}} を {{ic|1}} に設定してください  [https://bugzilla.mozilla.org/show_bug.cgi?id=1488384#c23]。&lt;br /&gt;
&lt;br /&gt;
=== フレームレート ===&lt;br /&gt;
&lt;br /&gt;
​Firefox が正しい値を自動的に検出できない場合は、デフォルトで 60 fps に設定されます。​これを手動で修正するには、{{ic|layout.frame_rate}} をモニタのリフレッシュレート (例:144 (144 Hzの場合) に設定します。&lt;br /&gt;
&lt;br /&gt;
=== メモリ リミット ===&lt;br /&gt;
​&lt;br /&gt;
ページメモリの圧迫を防ぐために (可能性として考えられる [[Wikipedia:Out_of_memory|OOM]])、 [[Firejail]] を {{ic|rlimit-as}} オプション付きで使うことができます。&lt;br /&gt;
&lt;br /&gt;
=== 新しいタブの位置 ===&lt;br /&gt;
&lt;br /&gt;
​新しいタブを表示する場所 (相対または絶対) を制御するには、 {{ic|browser.tabs.insertAfterCurrent}} および {{ic|browser.tabs.insertRelatedAfterCurrent}} を使用します。​詳細については、 [https://support.mozilla.org/en/questions/1229062] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== ウェブページのスクリーンショット ===&lt;br /&gt;
&lt;br /&gt;
{{Tip|Firefox 57 から、ページアクションボタン (アドレスバー右の横に並んだ3つの点) をクリックして「スクリーンショットを撮る」を選択すればスクリーンショットを撮影することができるようになりました。}}&lt;br /&gt;
&lt;br /&gt;
Firefox でウェブページのスクリーンショットを取るには、{{ic|Shift+F2}} で開発者コンソールを開きます。そして以下を入力:&lt;br /&gt;
&lt;br /&gt;
 screenshot &#039;&#039;filename&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;filename&#039;&#039; は任意のファイル名に置き換えてください。&lt;br /&gt;
&lt;br /&gt;
画面に表示されている部分だけではなく、ページ全体のスクリーンショットを撮影するには、{{ic|--fullpage}} オプションを使います:&lt;br /&gt;
&lt;br /&gt;
 screenshot --fullpage &#039;&#039;filename&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Wayland ===&lt;br /&gt;
&lt;br /&gt;
最近のバージョンの Firefox は、環境変数を使った [[Wayland]] へのオプトインをサポートしています。&lt;br /&gt;
&lt;br /&gt;
 $ MOZ_ENABLE_WAYLAND=1 firefox&lt;br /&gt;
&lt;br /&gt;
これを永続的なものにするには、 [[環境変数#グラフィック環境変数]] を参照してください。動作を確認するには、 &#039;&#039;Window Protocol&#039;&#039; をもう一度チェックします。&lt;br /&gt;
&lt;br /&gt;
URL バーに {{ic|about:support}} と入力すると、 &#039;&#039;Window Protocol&#039;&#039; を確認できます。&#039;&#039;xwayland&#039;&#039; や&#039;&#039;x 11&#039;&#039; ではなく &#039;&#039;wayland&#039;&#039; となっているか確認して下さい。&lt;br /&gt;
&lt;br /&gt;
ネイティブの Wayland では、{{ic|about:config}} で {{ic|gfx.webrender.compositor.force-enabled}} を {{ic|true}} に設定することで、Firefox のレンダリングパフォーマンスが大幅に向上します。Firefox 89 の時点では、この機能は実験的なものであり、テストには Firefox Nightly を推奨します。&lt;br /&gt;
&lt;br /&gt;
すべてのレンダリングがネイティブコンポジタサーフェスで行われるようになり、より効率的なレンダリングを実現し、パフォーマンスとバッテリー寿命を向上させます [https://bugzilla.mozilla.org/show_bug.cgi?id=1617498]。[[Firefox 設定#WebRender コンポジタの有効化|WebRender コンポジタ]] が有効で動作していることを確認してください。GNOME 40.1/3.38.5 または KDE 5.22 以降はテスト可能なコンポジタとみなされます [https://bugzilla.mozilla.org/show_bug.cgi?id=1617498#c13]&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウマネージャのルール ===&lt;br /&gt;
&lt;br /&gt;
Firefox ウィンドウに異なる設定を適用するには、 Firefox の {{ic|--class}} オプションを使用して WM_CLASS 文字列をカスタム文字列に変更します。&lt;br /&gt;
&lt;br /&gt;
=== プロファイル ===&lt;br /&gt;
&lt;br /&gt;
新しい Firefox インスタンスを起動するには、複数のプロファイルが必要です。新しいプロファイルを作成するには、次の手順に従います。&lt;br /&gt;
&lt;br /&gt;
 $firefox [--new-instance] -P&lt;br /&gt;
&lt;br /&gt;
クラスは、使用されていないプロファイルで Firefox を起動するときに指定できます。&lt;br /&gt;
&lt;br /&gt;
 $firefox [--new-instance] -P &#039;&#039;profile_name&#039;&#039; --class=&#039;&#039;class_name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== タッチスクリーンジェスチャとトラックパッドのスクロール ===&lt;br /&gt;
&lt;br /&gt;
{{Merge|Firefox 設定#タッチスクリーンジェスチャを有効にする|Same solution.}}&lt;br /&gt;
&lt;br /&gt;
タッチジェスチャ (スクロールやピンチズームなど) や 1対1 のトラックパッドスクロール  (Nautilus などの GTK 3 アプリケーションで確認できる) を有効にするには、 Firefox を起動する前に {{ic|1=MOZ_USE_XINPUT2=1}} [[環境変数]] を設定します。&lt;br /&gt;
&lt;br /&gt;
=== 複数のホームページ ===&lt;br /&gt;
​Firefox の起動時に複数のタブを開くには、新しいウィンドウを開いてから、必要なサイトを &amp;quot;ホームタブ&amp;quot; として開きます。&lt;br /&gt;
&lt;br /&gt;
​&#039;&#039;設定 &amp;gt; ホーム&#039;&#039; に移動し、&#039;&#039;ホームページと新しいウィンドウ&#039;&#039; の下にある &#039;&#039;Firefox ホーム (既定)&#039;&#039; ボタンをクリックします。&lt;br /&gt;
&lt;br /&gt;
​または、&#039;&#039;設定 &amp;gt; ホーム&#039;&#039; に直接移動し、&#039;&#039;ホームページと新しいウィンドウ&#039;&#039; の下の最初のフィールドを &#039;&#039;カスタムURL..&#039;&#039; に設定し、新しいホームページとして使用するページを次の形式で入力します:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://url1.com|https://url2.com|https://url3.com&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://url1.com|https://url2.com|https://url3.com&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== トラブルシューティング ==&lt;br /&gt;
&lt;br /&gt;
=== セーフモード ===&lt;br /&gt;
&lt;br /&gt;
このコマンドラインスイッチ {{ic|--safe-mode}} は、Firefox を [http://kb.mozillazine.org/Safe_Mode セーフモード] で起動し、このセッションで拡張機能やテーマ、その他のいくつかの機能を無効にして起動します。&lt;br /&gt;
&lt;br /&gt;
=== ハードウェアビデオアクセラレーションを無効にする ===&lt;br /&gt;
&lt;br /&gt;
Firefox でハードウェアビデオアクセラレーションを強制的に無効にするには、[[firefox#セーフモード|セーフモード]] で  Firefox を起動するか、{{ic|about:config}} で {{ic|layers.acceleration.disabled}} を {{ic|true}} に設定してください。&lt;br /&gt;
&lt;br /&gt;
=== 拡張機能が一部の  Mozilla 所有ドメインで動作しない ===&lt;br /&gt;
&lt;br /&gt;
デフォルトでは、拡張機能は {{ic|extensions.webextensions.restrictedDomains}} で指定されたページには影響を与えません。これを望まない場合、このフィールドをクリアすることができます ({{ic|about:*}})&lt;br /&gt;
&lt;br /&gt;
=== Firefox の起動に非常に時間がかかる ===&lt;br /&gt;
&lt;br /&gt;
Firefox の起動に他のブラウザより時間がかかる場合、{{ic|/etc/hosts}} の localhost の設定が不足している可能性があります。設定方法については [[ネットワーク設定#ローカルネットワークのホストネーム解決|ローカルネットワークのホストネーム解決]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== フォントのトラブルシューティング ===&lt;br /&gt;
&lt;br /&gt;
[[フォント設定]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
Firefox には fontconfig で使用できるフォント置換の数を決める設定があります。全ての置換ルールを使用するには、{{ic|gfx.font_rendering.fontconfig.max_generic_substitutions}} を (最大値の) {{ic|127}} に変更してください。&lt;br /&gt;
&lt;br /&gt;
=== メールクライアントの設定 ===&lt;br /&gt;
通常、Firefox では {{ic|mailto}} リンクをクリックすると Gmail や Yahoo Mail などのウェブアプリケーションが開くように設定されています。Firefox の {{ic|mailto}} リンクを電子メールクライアントに設定するには、&#039;&#039;設定 &amp;gt; プログラム&#039;&#039; を開いて {{ic|mailto}} の &#039;&#039;action&#039;&#039; カラムを変更してください。ここでは電子メールクライアントの存在する場所を設定する必要があります (例: Kmail の場合 {{ic|/usr/bin/kmail}})。&lt;br /&gt;
&lt;br /&gt;
=== ファイルの関連付け ===&lt;br /&gt;
&lt;br /&gt;
[[デフォルトアプリケーション]] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Firefox が不必要に ~/Desktop を作成し続けてしまう ===&lt;br /&gt;
Firefox はファイルをダウンロード・アップロードするためのデフォルトの場所として {{ic|~/Desktop}} を使っています。他のフォルダに設定するには、{{ic|~/.config/user-dirs.dirs}} を作成して以下を加えて下さい:&lt;br /&gt;
 XDG_DESKTOP_DIR=&amp;quot;/home/&amp;lt;user&amp;gt;/&amp;quot;&lt;br /&gt;
 XDG_DOWNLOAD_DIR=&amp;quot;/home/&amp;lt;user&amp;gt;/&amp;lt;dir&amp;gt;&amp;quot;&lt;br /&gt;
 XDG_TEMPLATES_DIR=&amp;quot;/home/&amp;lt;user&amp;gt;/&amp;lt;dir&amp;gt;&amp;quot;&lt;br /&gt;
 XDG_PUBLICSHARE_DIR=&amp;quot;/home/&amp;lt;user&amp;gt;/&amp;lt;dir&amp;gt;&amp;quot;&lt;br /&gt;
 XDG_DOCUMENTS_DIR=&amp;quot;/home/&amp;lt;user&amp;gt;/&amp;lt;dir&amp;gt;&amp;quot;&lt;br /&gt;
 XDG_MUSIC_DIR=&amp;quot;/home/&amp;lt;user&amp;gt;/&amp;lt;dir&amp;gt;&amp;quot;&lt;br /&gt;
 XDG_PICTURES_DIR=&amp;quot;/home/&amp;lt;user&amp;gt;/&amp;lt;dir&amp;gt;&amp;quot;&lt;br /&gt;
 XDG_VIDEOS_DIR=&amp;quot;/home/&amp;lt;user&amp;gt;/&amp;lt;dir&amp;gt;&amp;quot;&lt;br /&gt;
{{ic|&amp;lt;user&amp;gt;}} や {{ic|&amp;lt;dir&amp;gt;}} は実際のディレクトリに変えてください。詳しくは [[XDG ユーザーディレクトリ]]を参照。&lt;br /&gt;
&lt;br /&gt;
=== プラグインでポップアップブロックを使う ===&lt;br /&gt;
Flash プラグインなどのプラグインはデフォルトの設定を無視することがあります。これを止めさせるには以下を行なって下さい:&lt;br /&gt;
&lt;br /&gt;
# アドレスバーに {{ic|about:config}} と入力。&lt;br /&gt;
# 右クリックから {{ic|New}} を選んで {{ic|Integer}} を選択する。&lt;br /&gt;
# {{ic|privacy.popups.disable_from_plugins}} という名前をつける。&lt;br /&gt;
# 値を 2 に設定する。&lt;br /&gt;
&lt;br /&gt;
値の意味は:&lt;br /&gt;
* {{ic|0}}: プラグインのポップアップをすべて許可する。&lt;br /&gt;
* {{ic|1}}: ポップアップを許可する、ただし {{ic|dom.popup_maximum}} の数まで制限する。&lt;br /&gt;
* {{ic|2}}: プラグインのポップアップをブロックする。&lt;br /&gt;
* {{ic|3}}: プラグインのポップアップをブロックする、ホワイトリストに入っているサイトもブロックする。&lt;br /&gt;
&lt;br /&gt;
=== userChrome.css と userContent.css の変更が無視される ===&lt;br /&gt;
&lt;br /&gt;
{{ic|toolkit.legacyUserProfileCustomizations.stylesheets}} を {{ic|about:config}} で {{ic|true}} に設定します。&lt;br /&gt;
&lt;br /&gt;
=== 中クリックの動作 ===&lt;br /&gt;
&lt;br /&gt;
UNIX 系 OS で一般的なように、マウスの中ボタンを使ってハイライトされた/追加されたテキストをクリップボードに貼り付けるには、{{ic|about:config}} から {{ic|middlemouse.contentLoadURL}} または {{ic|middlemouse.paste}} を {{ic|true}} にセットしてください。{{ic|middlemouse.contentLoadURL}} を有効にすることは、Firefox 57 より前のデフォルトの動作です。&lt;br /&gt;
&lt;br /&gt;
中クリックでスクロールする場合 (Windows ブラウザのデフォルト) は {{ic|general.autoScroll}} を {{ic|true}} に設定してください。&lt;br /&gt;
&lt;br /&gt;
=== バックスペースが &#039;戻る&#039; ボタンとして機能しない ===&lt;br /&gt;
&lt;br /&gt;
[http://kb.mozillazine.org/Browser.backspace_action mozillaZine] によれば、{{ic|Backspace}} キーがどの機能にマッピングされるかはブラウザを動かしているプラットフォームによって決まります。{{ic|Backspace}} キーの挙動を変更する設定が存在します。&lt;br /&gt;
&lt;br /&gt;
{{ic|Backspace}} を戻るボタンのように使いたい場合はアドレスバーに {{ic|about:config}} と入力して {{ic|browser.backspace_action}} プロパティを {{ic|0}} に設定してください。&lt;br /&gt;
&lt;br /&gt;
{{ic|browser.backspace_action}} プロパティを {{ic|1}} に設定すると {{ic|Backspace}} キーによってページを上にスクロールすることができます。{{ic|Shift+Backspace}} で下にスクロールします。他の値に設定した場合は何もマッピングされません (Arch Linux のデフォルトは {{ic|2}} です)。&lt;br /&gt;
&lt;br /&gt;
=== Firefox がログイン情報を記憶しない ===&lt;br /&gt;
[https://support.mozilla.org/t5/Firefox/Profiles-Where-Firefox-stores-your-bookmarks-passwords-and-other/ta-p/4608#w_how-do-i-find-my-profile Firefox のプロファイル] フォルダにある {{ic|cookies.sqlite}} ファイルが壊れていることが原因です。これを修正するには、Firefox を終了して {{ic|cookie.sqlite}} をリネームするか削除する必要があります。&lt;br /&gt;
&lt;br /&gt;
好きなターミナルで以下を入力してください:&lt;br /&gt;
 $ rm -f ~/.mozilla/firefox/&amp;lt;profile id&amp;gt;.default/cookies.sqlite&lt;br /&gt;
{{Note|{{ic|&amp;lt;profile id&amp;gt;}} は8文字のランダムな文字列です。}}&lt;br /&gt;
&lt;br /&gt;
Firefox を起動して問題が解決しているか確かめて下さい。&lt;br /&gt;
&lt;br /&gt;
=== フルスクリーンにできません ===&lt;br /&gt;
&lt;br /&gt;
Firefox が [https://specifications.freedesktop.org/wm-spec/wm-spec-latest.html EWMH/ICCCM] に準拠したウィンドウマネージャを検出した場合、ルートウィンドウに WM_STATE メッセージを送信して、Firefox を (ウィンドウマネージャによって定義された) フルスクリーンモードにするよう要求しようと試みます。ウィンドウマネージャはこれを無視することができますが、無視した場合、Firefox はリクエストが拒否されたとみなし、それをエンドユーザに伝搬して何も起こらないという結果になります。この結果、動画をフルスクリーン表示できないことがあります。一般的な回避策は {{ic|full-screen-api.ignore-widgets}} を {{ic|about:config}} で {{ic|true}} に設定することです。 &lt;br /&gt;
&lt;br /&gt;
関連するバグレポート [https://bugzilla.mozilla.org/show_bug.cgi?id=1189622 Bugzilla 1189622]&lt;br /&gt;
&lt;br /&gt;
=== Firefox プラグインの間違ったバージョンを検出する ===&lt;br /&gt;
&lt;br /&gt;
Firefox を終了すると、プロファイルフォルダ内、通常は {{ic|~/.mozilla/firefox/&#039;&#039;xxxxxxxx&#039;&#039;.default/}} にある {{ic|pluginreg.dat}} にプラグインの現在のタイムスタンプとバージョンが保存されます。&lt;br /&gt;
&lt;br /&gt;
Firefox がまだ動作しているときにプラグインをアップグレードした場合、そのファイル内に間違った情報が含まれてしまいます。次に Firefox を再起動すると、{{ic|Firefox has prevents the outdated plugin &amp;quot;XXXXX&amp;quot; from running on ...}} というメッセージが表示され、ウェブ上でそのプラグイン専用のコンテンツを開こうとすると、そのメッセージが表示されます。この問題は、Firefox が動作している間にバージョンアップされた公式の [[ブラウザプラグイン#Adobe Flash Player|Adobe Flash Player plugin]] でよく発生します。&lt;br /&gt;
&lt;br /&gt;
解決策としては、プロファイルから {{ic|pluginreg.dat}} ファイルを削除すれば完了です。このファイルは次回 Firefox を閉じたときに再作成されるため、Firefox はファイルがないことを主張しません。[https://bugzilla.mozilla.org/show_bug.cgi?id=1109795#c16]&lt;br /&gt;
&lt;br /&gt;
=== Firefox のインターフェースに使われるフォントが汚い ===&lt;br /&gt;
&lt;br /&gt;
メニューバーに表示されるフォントが汚く感じられる場合、Firefox が使う見た目の良いフォントがないのかもしれません。簡易的な治療法としては、{{Pkg|xorg-fonts-type1}} パッケージから Type 1 フォントをインストールしてください。&lt;br /&gt;
&lt;br /&gt;
=== 特定のウェブページで Firefox が汚いフォントを表示する ===&lt;br /&gt;
&lt;br /&gt;
Firefox がビットマップフォントを使っている場合、特定のウェブページでフォントが (Google Chrome などと比べて) とても汚くなることがあります:&lt;br /&gt;
&lt;br /&gt;
https://i.imgur.com/SMVdi.png vs https://i.imgur.com/jNmxU.png&lt;br /&gt;
&lt;br /&gt;
これを修正するには、X でビットマップフォントを無効にしてください:&lt;br /&gt;
 $ ln -s /etc/fonts/conf.avail/70-no-bitmaps.conf /etc/fonts/conf.d/&lt;br /&gt;
&lt;br /&gt;
==== Terminus &amp;amp;amp; Dina ====&lt;br /&gt;
&lt;br /&gt;
Terminus と Dina を除いて全てのビットマップフォントを無効にするには以下のように {{ic|fonts.conf}} を作成してください: &lt;br /&gt;
&lt;br /&gt;
{{hc|~/.config/fontconfig/fonts.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE fontconfig SYSTEM &amp;quot;fonts.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;fontconfig&amp;gt;&lt;br /&gt;
    &amp;lt;!-- reject all bitmap fonts, with the exception of &#039;terminus&#039; &amp;amp; &#039;dina&#039; --&amp;gt;&lt;br /&gt;
    &amp;lt;selectfont&amp;gt;&lt;br /&gt;
        &amp;lt;acceptfont&amp;gt;&lt;br /&gt;
            &amp;lt;pattern&amp;gt;&lt;br /&gt;
                &amp;lt;patelt name=&amp;quot;family&amp;quot;&amp;gt; &amp;lt;string&amp;gt;Terminus&amp;lt;/string&amp;gt; &amp;lt;/patelt&amp;gt;&lt;br /&gt;
            &amp;lt;/pattern&amp;gt;&lt;br /&gt;
            &amp;lt;pattern&amp;gt;&lt;br /&gt;
                &amp;lt;patelt name=&amp;quot;family&amp;quot;&amp;gt; &amp;lt;string&amp;gt;Dina&amp;lt;/string&amp;gt; &amp;lt;/patelt&amp;gt;&lt;br /&gt;
            &amp;lt;/pattern&amp;gt;&lt;br /&gt;
        &amp;lt;/acceptfont&amp;gt;&lt;br /&gt;
        &amp;lt;rejectfont&amp;gt;&lt;br /&gt;
            &amp;lt;pattern&amp;gt;&lt;br /&gt;
                &amp;lt;patelt name=&amp;quot;scalable&amp;quot;&amp;gt; &amp;lt;bool&amp;gt;false&amp;lt;/bool&amp;gt; &amp;lt;/patelt&amp;gt;&lt;br /&gt;
            &amp;lt;/pattern&amp;gt;&lt;br /&gt;
        &amp;lt;/rejectfont&amp;gt;&lt;br /&gt;
    &amp;lt;/selectfont&amp;gt;&lt;br /&gt;
&amp;lt;/fontconfig&amp;gt;&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== MathML 記号が表示されない ===&lt;br /&gt;
&lt;br /&gt;
MathML を正しく表示するには Latin Modern Math や STIX などの Math フォントが必要になります (MDN のページを参照: [https://developer.mozilla.org/en-US/docs/Mozilla/MathML_Project/Fonts#Linux])。&lt;br /&gt;
&lt;br /&gt;
Arch Linux では、これらのフォントは {{Pkg|texlive-core}} と {{Pkg|texlive-fontsextra}} に入っていますがデフォルトでは fontconfig から使うことはできません。詳しくは [[TeX Live#フォント]] を見て下さい。他の[[フォント#数学|数学フォント]]を使うこともできます。&lt;br /&gt;
&lt;br /&gt;
=== フルスクリーンモードで動画にちらつきが発生する ===&lt;br /&gt;
&lt;br /&gt;
Xorg で [[Intel]] や [[Nouveau]] ドライバーを使っていてフルスクリーンモードでティアリングが発生する場合、[[Firefox 設定#OpenGL Off-Main-Thread Compositing (OMTC) の有効化]]を試してみてください。&lt;br /&gt;
&lt;br /&gt;
=== Firefox によって認識されるプラグインのバージョンが間違っている ===&lt;br /&gt;
&lt;br /&gt;
Firefox を終了した時、プロファイルフォルダ ({{ic|~/.mozilla/firefox/&#039;&#039;some name&#039;&#039;.default/}}) の中に存在する {{ic|pluginreg.dat}} にプラグインのタイムスタンプとバージョンが保存されます。&lt;br /&gt;
&lt;br /&gt;
Firefox の実行中にプラグインをアップグレードしてしまうと、ファイルの中に誤った情報が作られてしまいます。Firefox を次に起動したときに、プラグインを必要とするコンテンツを開こうとすると {{ic|Firefox has prevented the outdated plugin &amp;quot;XXXX&amp;quot; from running on ...}} というメッセージが表示されます。この問題は特に Firefox の実行中に [[ブラウザプラグイン#Flash Player|Adobe Flash Player プラグイン]]をアップグレードすると発生しがちです。&lt;br /&gt;
&lt;br /&gt;
プロファイルから {{ic|pluginreg.dat}} ファイルを削除すれば問題は解決します。ファイルは Firefox を終了したときに再度作成されるためエラーが表示されることはありません [https://bugzilla.mozilla.org/show_bug.cgi?id=1109795#c16]。&lt;br /&gt;
&lt;br /&gt;
=== 特定のサイトで JavaScript のコンテキストメニューが表示されない ===&lt;br /&gt;
&lt;br /&gt;
{{ic|about:config}} で {{ic|dom.w3c_touch_events.enabled}} の設定を解除してください。&lt;br /&gt;
&lt;br /&gt;
=== Firefox がデフォルトのスペルチェック辞書を記憶しない ===&lt;br /&gt;
&lt;br /&gt;
デフォルトのスペルチェック言語は以下のようにして設定できます:&lt;br /&gt;
&lt;br /&gt;
# アドレスバーに {{ic|about:config}} と入力。&lt;br /&gt;
# {{ic|spellchecker.dictionary}} を使用したい言語に設定 (例: {{ic|en_GB}})。&lt;br /&gt;
# Firefox のプラグインとして辞書をインストールした場合、設定する文字列は {{ic|en-GB}} となりますが、{{Pkg|hunspell}} 辞書の場合は {{ic|en_GB}} となるので注意してください。&lt;br /&gt;
&lt;br /&gt;
システム全体で {{Pkg|hunspell}} の辞書をインストールしているだけでは、Firefox はデフォルトの辞書言語の設定を記憶しません。Firefox プラグインとして [https://addons.mozilla.org/firefox/language-tools/ 辞書] をインストールすることで問題は解決します。アドオンページに辞書のタブが作られます。&lt;br /&gt;
&lt;br /&gt;
=== 合成を無効にしたり有効にしたりすると、Firefox のウィンドウが再描画されない ===&lt;br /&gt;
&lt;br /&gt;
環境変数 {{ic|MOZ_X11_EGL}} の設定を解除してください。&lt;br /&gt;
&lt;br /&gt;
関連するバグレポート [https://bugzilla.mozilla.org/show_bug.cgi?id=1711039 Bugzilla 1711039]&lt;br /&gt;
&lt;br /&gt;
=== Firefox の WebRTC モジュールがマイクを認識できない ===&lt;br /&gt;
&lt;br /&gt;
WebRTC アプリケーション (例: [https://mozilla.github.io/webrtc-landing/gum_test.html Firefox WebRTC getUserMedia テストページ]) でマイクが認識できないと表示されることがあります。ALSA と PulseAudio どちらの環境でも発生しあｍす。Firefox のデバッグログには以下のようなエラーが表示されます:&lt;br /&gt;
&lt;br /&gt;
{{hc|1=$ NSPR_LOG_MODULES=MediaManager:5,GetUserMedia:5 firefox|2=&lt;br /&gt;
...&lt;br /&gt;
[Unnamed thread 0x7fd7c0654340]: D/GetUserMedia  VoEHardware:GetRecordingDeviceName: Failed 1&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ic|about:config}} で {{ic|media.navigator.audio.full_duplex}} プロパティを {{ic|false}} に設定して Firefox を再起動してみてください。&lt;br /&gt;
&lt;br /&gt;
PulseAudio の [[PulseAudio/トラブルシューティング#エコー除去・ノイズキャンセルを有効にする|module-echo-cancel]] を使用している場合も Firefox が仮想のエコー除去ソースを認識できないことがあり、上記の設定で解決することがあります。&lt;br /&gt;
&lt;br /&gt;
=== 中国のアカウントでログインできません ===&lt;br /&gt;
&lt;br /&gt;
Firefox は、中国のユーザ向けに、国際的なアカウントとは全く異なるローカルアカウントを使用したサービスを提供しています。{{Pkg|firefox}} パッケージでインストールされた Firefox は、デフォルトで国際アカウントシステムを使用しています。中国ローカルサービスに変更するには、[http://mozilla.com.cn/thread-343905-1-1.html このページ] にあるアドオンマネージャをインストールすると、中国アカウントでログインできるようになります。&lt;br /&gt;
&lt;br /&gt;
=== JACK と PulseAudio を使用した場合、特定のビデオで音声が聞こえない ===&lt;br /&gt;
&lt;br /&gt;
もしあなたが JACK と PulseAudio を組み合わせて使っていて、いくつかのビデオで音が聞こえない場合、それらのビデオはモノラル音声であることが原因かもしれません。これは、あなたの JACK セットアップがステレオ以上のものを使っていて、普通のヘッドホンを使っている場 合に起こります。これを解決するには、PulseAudio JACK Sink の {{ic|front-center}} ポートをシステム出力の {{ic|playback_1}} と {{ic|playback_2}} ポートの両方に接続してみて下さい。&lt;br /&gt;
&lt;br /&gt;
これは、スクリプトを使って自動的に行うこともできます。&lt;br /&gt;
&lt;br /&gt;
{{hc|jack-mono.sh&lt;br /&gt;
|2=#!/bin/sh&lt;br /&gt;
jack_connect &amp;quot;PulseAudio JACK Sink:front-center&amp;quot; &amp;quot;system:playback_1&amp;quot;&lt;br /&gt;
jack_connect &amp;quot;PulseAudio JACK Sink:front-center&amp;quot; &amp;quot;system:playback_2&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
シンクとポートの名前が異なる可能性があることに注意してください。あなたの JACK セットアップがどのようなものか、{{Pkg|cadence}} の Catia のような Patchbay でチェックすることができます。&lt;br /&gt;
&lt;br /&gt;
=== ジオロケーションが機能しない ===&lt;br /&gt;
&lt;br /&gt;
最近、Google は Arch Linux での位置情報サービスの使用を制限し、ウェブサイトでのジオロケーションを有効にすると以下のようなエラーが発生するようになりました。{{ic|Geolocation error: Unknown error acquiring position}}. https://www.hulu.com/ Hulu] のようなリージョンロックされたサービスでは、サイトに対して位置情報サービスを許可しているにも関わらず、あなたの位置が特定できないことを示す同様のエラーが表示されることがあります。&lt;br /&gt;
&lt;br /&gt;
これらの問題を回避するために、[https://location.services.mozilla.com/ Mozilla Location Service] を使用するように切り替えることができます。{{ic|about:config}} で {{ic|geo.provider.network.url}} の設定を変更してください。&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
詳しくは {{Bug|65241}} をご覧ください。&lt;br /&gt;
&lt;br /&gt;
=== ウィンドウマネージャで、マウスの右ボタンを押すと最初のオプションが即座にクリックされる ===&lt;br /&gt;
&lt;br /&gt;
この問題は、[[i3]]、[[bspwm]]、[[xmonad]] で確認されています。&lt;br /&gt;
&lt;br /&gt;
この問題を解決するには、{{ic|about:config}} に移動して {{ic|ui.context_menus.after_mouseup}} を {{ic|true}} に変更します。&lt;br /&gt;
&lt;br /&gt;
[https://www.reddit.com/r/i3wm/comments/88k0yt/right_mouse_btn_instantly_clicks_first_option_in/] を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== Wayland 上のアプリケーションでFirefoxが起動しない ===&lt;br /&gt;
&lt;br /&gt;
XWayland モードで動作する一部のアプリケーションは、X11 版 Firefox を起動しようとします。もしブラウザがすでに Wayland ネイティブモードで動作している場合、Firefox 自体は完全に動作していも、ユーザはエラー {{ic|Firefox is already running, but is not responding. を受け取ります。Firefox を使用するには、まず既存の Firefox プロセスを終了するか、デバイスを再起動するか、別のプロファイルを使用する必要があります。}}&lt;br /&gt;
&lt;br /&gt;
これは [[環境変数]] {{ic|1=MOZ_DBUS_REMOTE=1}} を設定することで回避することができます。&lt;br /&gt;
&lt;br /&gt;
{{Note|1=この変数はFirefoxの &#039;&#039;.desktop&#039;&#039; ファイルに設定するだけでは不十分で、セッション全体または全ての XWayland アプリケーションに設定する必要があります。さらに [[#Wayland]] をグローバルに設定することを検討してください。[https://bugzilla.mozilla.org/show_bug.cgi?id=1508803]}}&lt;br /&gt;
&lt;br /&gt;
=== Firefox が起動時にデフォルトブラウザとして設定するよう要求され続ける ===&lt;br /&gt;
&lt;br /&gt;
[[デスクトップ環境]] を使用している場合、システム設定で Firefox がデフォルトブラウザとして設定されているかどうかを確認してください。そうでなければ、[[xdg-utils]] パッケージが提供する以下の {{man|1|xdg-settings}} コマンドを実行して、システムでどのブラウザがデフォルトとして設定されているかを確認することができます。&lt;br /&gt;
&lt;br /&gt;
 xdg-settings get default-web-browser&lt;br /&gt;
&lt;br /&gt;
値が返されない場合、またはFirefoxでない場合は、次のコマンドを実行して設定します。&lt;br /&gt;
&lt;br /&gt;
 $ xdg-settings set default-web-browser firefox.desktop&lt;br /&gt;
&lt;br /&gt;
それでも Firefox がデフォルトブラウザとして設定するように要求してきた場合、URL スキームが &#039;&#039;http&#039;&#039; と &#039;&#039;https&#039;&#039; を処理するように設定すれば、静かになることがあります。これを行うには、以下の {{man|1|xdg-mime}} コマンドを実行してください。&lt;br /&gt;
&lt;br /&gt;
 $ xdg-mime default firefox.desktop x-scheme-handler/http&lt;br /&gt;
 $ xdg-mime default firefox.desktop x-scheme-handler/https&lt;br /&gt;
&lt;br /&gt;
これらもうまくいかない場合は、環境変数 {{ic|GTK_USE_PORTAL}} が設定されているかどうかを確認してください。(すべての値がバグの引き金になります) その場合は、設定を解除してください。関連するバグレポート [https://bugzilla.mozilla.org/show_bug.cgi?id=1516290 Bugzilla 1516290] それでもうまくいかない場合、あるいは設定していない場合は、アドレスバーから {{ic|about:config}} に移動し、変数 {{ic|widget.use-xdg-desktop-portal}} が {{ic|true}} に設定されているかを確認し、もしそうなら {{ic|false}} を設定してください。&lt;br /&gt;
&lt;br /&gt;
デフォルトブラウザのチェックを完全に無効にしたい場合は、アドレスバーから {{ic|about:config}} に移動し、{{ic|browser.shell.checkDefaultBrowser}} を {{ic|false}} に設定してください。&lt;br /&gt;
&lt;br /&gt;
=== 動画の乱れについて ===&lt;br /&gt;
&lt;br /&gt;
もしあなたが動画の乱れを経験し、動画 (特に高解像度の動画) を見るときに Firefox が 1 つのコアだけを 100% でヒットさせていることに気づいたなら、これはあなたを助けるかもしれません。&lt;br /&gt;
&lt;br /&gt;
{{ic|about:config}} で {{ic|dom.ipc.processCount}} を検索して {{ic|dom.ipc.processCount.file}} を 1 からより大きな数値に変更してください。良い数値を見つけるためのアドホックな方法は、良い結果が得られるまで1つずつ増やして見て下さい、4が良い値だと思われます。&lt;br /&gt;
&lt;br /&gt;
== 参照 ==&lt;br /&gt;
* [https://www.mozilla.org/firefox/ 公式ウェブサイト]&lt;br /&gt;
* [https://www.mozilla.org/ Mozilla Foundation]&lt;br /&gt;
* [https://wiki.mozilla.org/Firefox Firefox Wiki]&lt;br /&gt;
* [https://addons.mozilla.org/ Firefox アドオン]&lt;br /&gt;
* [https://addons.mozilla.org/firefox/themes/ Firefox テーマ]&lt;br /&gt;
* [http://forums.mozillazine.org/ mozillaZine] - 非公式フォーラム&lt;/div&gt;</summary>
		<author><name>Hikali</name></author>
	</entry>
</feed>