git: bf52e1d0c2 - main - ja/handbook: Update security-resourcelimits section.

From: Ryusuke SUZUKI <ryusuke_at_FreeBSD.org>
Date: Wed, 04 Jan 2023 10:19:12 UTC
The branch main has been updated by ryusuke:

URL: https://cgit.FreeBSD.org/doc/commit/?id=bf52e1d0c2326735cd2a73689d84d01b19c2bb02

commit bf52e1d0c2326735cd2a73689d84d01b19c2bb02
Author:     Ryusuke SUZUKI <ryusuke@FreeBSD.org>
AuthorDate: 2023-01-04 10:18:45 +0000
Commit:     Ryusuke SUZUKI <ryusuke@FreeBSD.org>
CommitDate: 2023-01-04 10:18:45 +0000

    ja/handbook: Update security-resourcelimits section.
    
    o move users-limiting subsection from basic chapter to security chapter.
    o update security-resourcelimits section.
---
 .../content/ja/books/handbook/basics/_index.adoc   |  70 -----------
 .../content/ja/books/handbook/security/_index.adoc | 139 +++++++++++++++++++--
 2 files changed, 127 insertions(+), 82 deletions(-)

diff --git a/documentation/content/ja/books/handbook/basics/_index.adoc b/documentation/content/ja/books/handbook/basics/_index.adoc
index e7a9caf598..59822b8c49 100644
--- a/documentation/content/ja/books/handbook/basics/_index.adoc
+++ b/documentation/content/ja/books/handbook/basics/_index.adoc
@@ -564,76 +564,6 @@ man:pw[8] は、ユーザやグループの作成、削除、変更および表
 これは、システムユーザファイルやシステムグループファイルのフロントエンドとして働きます。
 man:pw[8] はとても強力な一連のコマンドラインオプションを有しており、シェルスクリプトで使うのに向いていますが、新しいユーザは、この章で紹介されている他のコマンドに比べて難しいと感じるかもしれません。
 
-[[users-limiting]]
-=== ユーザへの制限
-
-FreeBSD は、 個々のユーザが利用できるシステム資源の量を管理者が制限できる方法をいくつも用意しています。 その種の制限は、ディスククォータ (quota) とその他の資源の制限の 2 つの章で説明します。
-
-ディスククォータは、ユーザが利用できるディスク容量を制限し、 その都度計算しなくてもディスク使用量を簡単に確認できる手段も提供しています。 クォータについては、crossref:disks[quotas,「ファイルシステムクォータ」] で解説しています。
-
-その他のリソースの制限とは、ユーザが消費できる CPU、メモリなどのリソースを制限する手段のことです。 これはログインクラスを用いて定義されているもので、 この後で解説しています。
-
-ログインクラスは [.filename]#/etc/login.conf# で定義します。詳細な説明は man:login.conf[5] に詳しく記載されています。 各ユーザアカウントにはログインクラスが割り当てられていて (デフォルトでは `default` です)、 それぞれのログインクラスにはログインケーパビリティの集合が割り当てられています。 ログインケーパビリティとは、 `名称=値` の組のことで、_名称_ は周知の識別子、_値_ は、_名称_ に応じて処理される任意の文字列です。 ログインクラスとケーパビリティを設定するのはどちらかといえば簡単なことで、 man:login.conf[5] でも説明されています。
-
-[NOTE]
-====
-FreeBSD は通常、直接 [.filename]#/etc/login.conf# から設定を読み込まず、 より速く検索できる [.filename]#/etc/login.conf.db# データベースから読み込みます。[.filename]#/etc/login.conf# を編集する時には [.filename]#/etc/login.conf.db# を次のコマンドを実行してアップデートする必要があります。
-
-[source,shell]
-....
-# cap_mkdb /etc/login.conf
-....
-
-====
-
-リソースの制限は、 2 つの点で標準的なログインケーパビリティと異なっています。 第一に、どの制限についても、ソフト (現在の) リミットとハードリミットがあります。 ソフトリミットは、ユーザやアプリケーションが調整できますが、 ハードリミットを超えることはできません。 ユーザはハードリミットを下げることはできますが、 上げることはスーパユーザのみができます。 第二に、ほとんどのリソースの制限は特定のユーザに対してプロセス毎に適用されるもので、 そのユーザが利用するリソースの総量を制限するものではありません。 ただし、この違いは制限を特別扱いすることで実現されるものであり、 ログインケーパビリティフレームワークの実装によるものではありません。
-
-以下が最もよく使われるリソースの制限になります。 残りは、他のすべてのログインケーパビリティと並んで man:login.conf[5] に書かれています。
-
-`coredumpsize`::
-プログラムが生成する core ファイルのサイズにかかる制限は、 `filesize` やディスククォータなどの、 ほかのディスク使用に関する制限に従属します。 この制限は、ディスク領域の消費を制御するあまり厳しくない手段としてよく使われています。 ユーザは core ファイルを自分で生成するわけではなく、 削除しないことも多いので、 これを設定すれば大きなプログラムが異常終了してもディスクの空きがなくならずに済みます。
-
-`cputime`::
-そのユーザのプロセスが消費できる CPU 時間 の上限です。 これを超えたプロセスは、カーネルにより終了されます。
-+
-
-[NOTE]
-====
-これは、消費される CPU _時間_ についての制限であって、man:top[1] や man:ps[1] のフィールドで表示される CPU の割合に関するものではありません。
-====
-
-`filesize`::
-ユーザが所有できるファイルの大きさの上限です。crossref:disks[quotas,ディスククォータ] と違い、 この制限はユーザのファイルをすべてまとめた集合にではなく、 個々のファイルにかかります。
-
-`maxproc`::
-ユーザが実行できるプロセス数の上限です。 フォアグラウンドプロセスとバックグラウンドプロセスの両方を扱います。 この上限は、man:sysctl[8] 変数 `kern.maxproc` で指定されたシステムの制限を超えることはできません。 同時に複数ログインすることや、 パイプライン実行することは便利なことが多いので、 この値をあまり小さな値に設定すると、 そのユーザの生産性が悪化する可能性があります。
-大きなプログラムをコンパイルする場合のように、タスクによっては複数のプロセスが実行されます。
-
-`memorylocked`::
-これは、1 つのプロセスが man:mlock[2] によりメインメモリにロックされることを要求できるメモリの最大容量です。 man:amd[8] のようなシステムで重要なプログラムは、 メインメモリへロックして、システムがスワップする際に、 ディスクのスラッシングを引き起こさないようにします。
-
-`memoryuse`::
-これは、どの時点かを問わず、 あるプロセスが消費できる最大のメモリ容量です。 これは、メインメモリとスワップの使用量を合わせたものです。 メモリ消費を抑えるための包括的な制限ではありませんが、 手始めにはよいでしょう。
-
-`openfiles`::
-これは、あるプロセスが開いておける最大のファイル数です。 FreeBSD では、ファイルはまた、ソケットや IPC チャンネルを表わすのにも使われています。 ですから、あまり低い値に設定しないよう注意してください。 これに対応するシステム全体の制限は man:sysctl[8] `kern.maxfiles` で定義されています。
-
-`sbsize`::
-これは、あるユーザが消費できるネットワークメモリ (つまり mbuf) の上限の量です。
-ネットワーク通信を制限するのに使えます。
-
-`stacksize`::
-これは、プロセスのスタックサイズの上限です。 あるプログラムが使用しうるメモリの量を制限するには、 これだけでは十分ではありません。 したがって、他の制限と組み合わせて使わなければなりません。
-
-リソースの制限を設定するにあたり、 ほかにもいくつか覚えておかなければならないことがあります。 以下は、一般的なこつやお勧め、さまざまなコメントになります。
-
-* システム起動時に [.filename]#/etc/rc# から起動されたプロセスは、`daemon` ログインクラスに割り当てられます。
-* システムに付属していた [.filename]#/etc/login.conf# はほとんどの制限について妥当な値になっていますが、 すべてのシステムにおいてふさわしいというわけではありません。 制限をあまり緩くするとシステムを悪用しやすくしてしまいますし、 厳しくしすぎると生産性を悪化させてしまいます。
-* Xorg のユーザには、 他のユーザより多くのリソースを与えるべきかもしれません。 Xorg そのものが多くのリソースを使うだけでなく、 より多くのプログラムを並行して使うことをユーザに促します。
-* 多くの制限は個々のプロセスにかかるもので、 一人のユーザにまとめてかかるものではありません。 例えば、`openfiles` を 50 に設定することは、 ユーザが動かすそれぞれのプロセスが最大 50 個のファイルを開けるということです。 あるユーザが開けるファイルの総数は、 `openfiles` の値に `maxproc` をかけたものになります。 同じことがメモリ消費量にもあてはまります。
-
-リソースの制限と、ログインクラス、 ログインケーパビリティ一般についての詳しい情報は、 man:cap.mkdb[1], man:getrlimit[2] および man:login.conf[5] をご覧ください。
-
 [[users-groups]]
 === グループの管理
 
diff --git a/documentation/content/ja/books/handbook/security/_index.adoc b/documentation/content/ja/books/handbook/security/_index.adoc
index c35dd56eba..3acf37b7c0 100644
--- a/documentation/content/ja/books/handbook/security/_index.adoc
+++ b/documentation/content/ja/books/handbook/security/_index.adoc
@@ -1754,11 +1754,115 @@ VII. References <.>
 [[security-resourcelimits]]
 == リソースの制限
 
-長年にわたり FreeBSD は、 リソースを制限するためのデータベースとしてフラットファイル形式の [.filename]#/etc/login.conf# により管理していました。 この方法は、現在でも使われていますが、 リソースを管理する方法としては最適な方法でないことが、 以前から議論されています。 フラットファイル形式では、 クラスとして知られるグループラベルにユーザを分類する必要があります。 この場合、フラットファイルだけではなく、 パスワードデータベースに対しても変更が必要となります。 潜在的に、より多くの制限を加えられたユーザ対してはラベルの追加や、 `cap_mkdb` を使ったリソースデータベースの再構築、 [.filename]#/etc/master.passwd# への変更が必要となります。 さらに、パスワードデータベースは、 `pwd_mkdb` を使って再構築する必
 要があります。 この複数回に渡るプロセスは、 多くのユーザについて設定する必要がある場合には、 大変な時間の浪費につながる可能性があります。
+FreeBSD は、個々のユーザが利用できるシステムのリソース容量を制限する方法をいくつも用意しています。
+ディスククォータはユーザが使用できるディスク容量を制限します。
+クォータについては crossref:disks[quotas,「ディスククォータ」] で説明されています。
 
-FreeBSD の新しいコマンドである man:rctl[8] は、 ユーザに対して、 よりきめ細かにリソースの制限を管理する方法を提供します。 このコマンドは、ユーザだけではなく、プロセス、jails およびオリジナルのログインクラスに対してもリソースの制限を行うことができます。 これらの高度な機能は、管理者およびユーザに対し、 リソースをコマンドラインで管理したり、 設定ファイルを用いることで、システムの初期化時に、 ルールを設定する方法を提供します。
+その他のリソースの制限とは、ユーザが消費できる CPU、メモリなどのリソースを制限する手段のことです。
+フラットファイルまたはコマンドによりリソースの制限に関わるデータベースを管理できます。
+伝統的な方法では、ログインクラスを [.filename]#/etc/login.conf# を編集することにより定義します。
+この方法は、現在でも使われていますが、変更を行うには、このファイルの編集、リソースデータベースの再構築、 [.filename]#/etc/master.passwd# への必要な変更、さらに、パスワードデータベースの再構築といった、複数回に渡るプロセスが必要です。
+この複数回に渡るプロセスは、 多くのユーザについて設定する必要がある場合には、 大変な時間の浪費につながる可能性があります。
 
-この機能を有効にするには、以下の行を [.filename]#GENERIC# またはカスタムカーネルコンフィグレーションファイルに追加し、 再構築してください。
+`rctl` を用いると、よりきめ細かにリソースの制限を管理する方法を提供できます。
+このコマンドは、ユーザだけではなく、プロセスおよび jails に対してもリソースを制限できます。
+
+この節では、リソースを管理する方法について伝統的な方法と高度な方法の両方について説明します。
+
+[[users-limiting]]
+=== ログインクラスの設定
+
+伝統的な方法では、ログインクラスおよびログインクラスに適用するリソースの制限は [.filename]#/etc/login.conf# で定義します。
+各ユーザアカウントにはログインクラスが割り当てられています (デフォルトでは `default` です)。
+それぞれのログインクラスには関連するログインケーパビリティの集合が割り当てられています。
+ログインケーパビリティとは、 `名称=値` の組のことで、_名称_ は周知の識別子、_値_ は、_名称_ に応じて処理される任意の文字列です。
+
+[NOTE]
+====
+[.filename]#/etc/login.conf# を編集する時には [.filename]#/etc/login.conf.db# を次のコマンドを実行してアップデートする必要があります。
+
+[source,shell]
+....
+# cap_mkdb /etc/login.conf
+....
+
+====
+
+リソースの制限は、 2 つの点で標準的なログインケーパビリティと異なっています。
+第一に、どの制限についても、 _ソフト_ リミットと _ハード _リミットがあります。
+ソフトリミットは、ユーザやアプリケーションが調整できますが、 ハードリミットを超えることはできません。
+ユーザはハードリミットを下げることはできますが、 上げることはスーパユーザのみができます。 
+第二に、ほとんどのリソースの制限は特定のユーザに対してプロセス毎に適用されるものです。
+
+<<resource-limits>> が最もよく使われるリソースの制限です。
+利用可能なすべてのリソースの制限およびのログインケーパビリティの詳細については、 man:login.conf[5] に書かれています。
+
+[[resource-limits]]
+.ログインクラスのリソースの制限
+[cols="20%,80%", frame="none", options="header"]
+|===
+| リソースの制限
+| 説明
+
+|coredumpsize
+|プログラムが生成する core ファイルのサイズにかかる制限は、 `filesize` やディスククォータなどの、 ほかのディスク使用に関する制限に従属します。
+この制限は、ディスク領域の消費を制御するあまり厳しくない手段としてよく使われています。
+ユーザは core ファイルを自分で生成するわけではなく、削除しないことも多いので、 これを設定すれば大きなプログラムが異常終了してもディスクの空きがなくならずに済みます。
+
+|cputime
+|そのユーザのプロセスが消費できる CPU 時間の上限です。
+これを超えたプロセスは、カーネルにより終了されます。
+これは、消費される CPU _時間_ についての制限であって、`top` や `ps` のフィールドで表示される CPU の割合に関するものではありません。
+
+|filesize
+|ユーザが所有できるファイルの大きさの上限です。
+ディスククォータ (crossref:disks[quotas,「ディスククォータ」) と違い、この制限はユーザのファイルをすべてまとめた集合にではなく、個々のファイルにかかります。
+
+|maxproc
+|ユーザが実行できるフォアグラウンドとバックグラウンドプロセス数の上限です。
+この上限は、`kern.maxproc` で指定されたシステムの制限を超えることはできません。
+この値をあまり小さな値に設定すると、大きなプログラムをコンパイルする場合のように、複数のプロセスが実行されるようなタスクにおいて、ユーザの生産性が悪化する可能性があります。
+
+|memorylocked
+|1 つのプロセスが man:mlock[2] によりメインメモリにロックされることを要求できるメモリの最大容量です。
+man:amd[8] のようなシステムで重要なプログラムは、 メインメモリへロックして、システムがスワップする際に、 ディスクのスラッシングを引き起こさないようにします。
+
+|memoryuse
+|どの時点かを問わず、あるプロセスが消費できる最大のメモリ容量です。
+これは、メインメモリとスワップの使用量を合わせたものです。
+メモリ消費を抑えるための包括的な制限ではありませんが、手始めにはよいでしょう。
+
+|openfiles
+|あるプロセスが開いておける最大のファイル数です。
+FreeBSD では、ファイルは、ソケットや IPC チャンネルを表わすのにも使われているので、あまり低い値に設定しないよう注意してください。
+これに対応するシステム全体の制限は man:sysctl[8] `kern.maxfiles` で定義されます。
+
+|sbsize
+|あるユーザが消費できるネットワークメモリの上限の量です。
+これは、ネットワーク通信を制限するのに使えます。
+
+|stacksize
+|プロセスのスタックサイズの上限です。
+あるプログラムが使用しうるメモリの量を制限するには、これだけでは十分ではないので、他の制限と組み合わせて使わなければなりません。
+|===
+
+リソースの制限を設定するにあたり、ほかにもいくつか覚えておかなければならないことがあります。
+
+* システム起動時に [.filename]#/etc/rc# から起動されたプロセスは、`daemon` ログインクラスに割り当てられます。
+* システムに付属している [.filename]#/etc/login.conf# はほとんどの制限について妥当な値になっていますが、すべてのシステムにおいてふさわしいというわけではありません。
+制限をあまり緩くするとシステムを悪用しやすくしてしまいますし、厳しくしすぎると生産性を悪化させてしまいます。
+* Xorg は多くのリソースを使うだけでなく、より多くのプログラムを並行して使うことをユーザに促します。
+* 多くの制限は個々のプロセスにかかるもので、一人のユーザにまとめてかかるものではありません。
+例えば、`openfiles` を 50 に設定することは、ユーザが動かすそれぞれのプロセスが最大 50 個のファイルを開けるということです。
+あるユーザが開けるファイルの総数は、 `openfiles` の値に `maxproc` をかけたものになります。
+同じことがメモリ消費量にもあてはまります。
+
+リソースの制限と、ログインクラス、 ログインケーパビリティ一般についての詳しい情報は、 man:cap.mkdb[1], man:getrlimit[2] および man:login.conf[5] をご覧ください。
+
+=== リソースの制限を有効にして設定する
+
+`kern.racct.enable` をゼロ以外の値に設定してください。
+カスタムカーネルには以下のような特別な設定が必要となります。
 
 [.programlisting]
 ....
@@ -1766,18 +1870,24 @@ options         RACCT
 options         RCTL
 ....
 
-その後、システムの再起動が必要になります。 この過程の手順については、crossref:kernelconfig[kernelconfig,FreeBSD カーネルのコンフィグレーション] をご覧ください。 これらの準備が完了すると、`rctl` を用いてシステムにルールを設定できるようになります。
+システムを再起動して新しいカーネルで立ち上げると、`rctl` を用いてシステムにルールを設定できるようになります。
 
-ルールの構文は簡単で、 _subject_, _subject-id_, _resource_ および _action_ を使って管理されます。 以下のルールの例を参照してください。
+ルールの構文は、 subject, subject-id, resource および action を使って管理されます。
+以下のルールの例を参照してください。
 
 [.programlisting]
 ....
 user:trhodes:maxproc:deny=10/user
 ....
 
-これは基本的なルールです。 ここで、subject は `user`、 subject-id は `trhodes` です。 maxproc はもちろんプロセスの最大数であり、resource です。 ここで action は、`deny` と設定されており、 新しいプロセスの生成がブロックされます。 この例では、ユーザ `trhodes` のプロセスは `10` 個に制限され、それ以上のプロセスは作成できません。 コンソールにログを出力したり、 man:devd[8] に対し通知したり、プロセスに sigterm を送ったりといった、 他の action も利用できます。
+この例では、subject は `user`、subject-id は `trhodes`、resource の `maxproc` はプロセスの最大数、そして action は `deny` と設定されており、 新しいプロセスの生成がブロックされます。 
+これは、ユーザ `trhodes` のプロセスは `10` 個に制限され、それ以上のプロセスは作成できないことを意味しています。
+他には、コンソールにログを出力したり、 man:devd[8] に対し通知したり、プロセスに sigterm を送ったりといった action も利用できます。
 
-ルールを追加する際には、注意すべき点がいくつかあります。 上の例では、ログインして `screen` セッションを実行してしまうと、 不幸にもユーザは最も簡単なタスクの実行ですらブロックされてしまうでしょう。 リソースの制限が適応されると、エラーが出力されます。 この例では以下のような出力が行われます。
+ルールを追加する際には、注意すべき点がいくつかあります。
+上の例では、プロセスの数が `10` に制限されているため、ログインして `screen` セッションを実行してしまうと、ユーザによる他のタスクの実行はブロックされてしまうでしょう。
+リソースの制限が適応されると、エラーが出力されます。
+この例では以下のような出力が行われます。
 
 [source,shell]
 ....
@@ -1786,14 +1896,17 @@ user:trhodes:maxproc:deny=10/user
 eval: Cannot fork: Resource temporarily unavailable
 ....
 
-他の例としては、man:rctl[8] を使って jail がメモリの制限を超えることを防ぐことができます。 このルールは以下のように書くことができます。
+他の例としては、jail がメモリの制限を超えることを防ぐことができます。
+このルールは以下のように書くことができます。
 
 [source,shell]
 ....
 # rctl -a jail:httpd:memoryuse:deny=2G/jail
 ....
 
-ルールを [.filename]#/etc/rctl.conf# に追加すると、 再起動してもルールは持続します。 フォーマットは、ルールから最初のコマンドの部分を除いたものとなります。 たとえば、上のルールを追加するには、 以下のように追加してください。
+ルールを [.filename]#/etc/rctl.conf# に追加すると、再起動してもルールは持続します。
+フォーマットは、ルールから最初のコマンドの部分を除いたものとなります。
+たとえば、上のルールを追加するには、以下のように追加してください。
 
 [.programlisting]
 ....
@@ -1801,18 +1914,20 @@ eval: Cannot fork: Resource temporarily unavailable
 jail:httpd:memoryuse:deny=2G/jail
 ....
 
-ルールを削除するには、`rctl` に対し、 リストから削除するように指定してください。
+ルールを削除するには、`rctl` に対し、リストから削除するように指定してください。
 
 [source,shell]
 ....
 # rctl -r user:trhodes:maxproc:deny=10/user
 ....
 
-マニュアルページには、 ルールをすべて削除する方法が記載されています。 しかしながら、特定のユーザのルールをすべて削除するには、 以下のようなコマンドを実行してください。
+man:rctl[8] には、ルールをすべて削除する方法が記載されています。
+しかしながら、特定のユーザのルールをすべて削除するには、以下のようなコマンドを実行してください。
 
 [source,shell]
 ....
 # rctl -r user:trhodes
 ....
 
-`subjects` をコントロールするリソースは他にも多く用意されています。 これらについて知るには、man:rctl[8] をご覧ください。
+`subjects` をコントロールするリソースは他にも多く用意されています。
+これらについて知るには、man:rctl[8] をご覧ください。