長年にわたり FreeBSD は、
リソースを制限するためのデータベースとしてフラットファイル形式の
/etc/login.conf
により管理していました。
この方法は、現在でも使われていますが、
リソースを管理する方法としては最適な方法でないことが、
以前から議論されています。
フラットファイル形式では、
クラスとして知られるグループラベルにユーザを分類する必要があります。
この場合、フラットファイルだけではなく、
パスワードデータベースに対しても変更が必要となります。
潜在的に、より多くの制限を加えられたユーザ対してはラベルの追加や、
cap_mkdb
を使ったリソースデータベースの再構築、
/etc/master.passwd
への変更が必要となります。
さらに、パスワードデータベースは、
pwd_mkdb
を使って再構築する必要があります。
この複数回に渡るプロセスは、
多くのユーザについて設定する必要がある場合には、
大変な時間の浪費につながる可能性があります。
FreeBSD の新しいコマンドである rctl(8) は、 ユーザに対して、 よりきめ細かにリソースの制限を管理する方法を提供します。 このコマンドは、ユーザだけではなく、プロセス、jails およびオリジナルのログインクラスに対してもリソースの制限を行うことができます。 これらの高度な機能は、管理者およびユーザに対し、 リソースをコマンドラインで管理したり、 設定ファイルを用いることで、システムの初期化時に、 ルールを設定する方法を提供します。
この機能を有効にするには、以下の行を
GENERIC
またはカスタムカーネルコンフィグレーションファイルに追加し、
再構築してください。
options RACCT options RCTL
その後、システムの再起動が必要になります。
この過程の手順については、8章FreeBSD カーネルのコンフィグレーション をご覧ください。
これらの準備が完了すると、rctl
を用いてシステムにルールを設定できるようになります。
ルールの構文は簡単で、 subject, subject-id, resource および action を使って管理されます。 以下のルールの例を参照してください。
user:trhodes:maxproc
:deny
=10/user
これは基本的なルールです。
ここで、subject は user
、
subject-id は trhodes
です。
maxproc はもちろんプロセスの最大数であり、resource です。
ここで action は、deny
と設定されており、
新しいプロセスの生成がブロックされます。
この例では、ユーザ trhodes
のプロセスは
10
個に制限され、それ以上のプロセスは作成できません。
コンソールにログを出力したり、
devd(8) に対し通知したり、プロセスに sigterm を送ったりといった、
他の action も利用できます。
ルールを追加する際には、注意すべき点がいくつかあります。
上の例では、ログインして screen
セッションを実行してしまうと、
不幸にもユーザは最も簡単なタスクの実行ですらブロックされてしまうでしょう。
リソースの制限が適応されると、エラーが出力されます。
この例では以下のような出力が行われます。
%
man test
/usr/bin/man: Cannot fork: Resource temporarily unavailable eval: Cannot fork: Resource temporarily unavailable
他の例としては、rctl(8) を使って jail がメモリの制限を超えることを防ぐことができます。 このルールは以下のように書くことができます。
#
rctl -a jail:httpd:memoryuse:deny=2G/jail
ルールを /etc/rctl.conf
に追加すると、
再起動してもルールは持続します。
フォーマットは、ルールから最初のコマンドの部分を除いたものとなります。
たとえば、上のルールを追加するには、
以下のように追加してください。
# Block jail from using more than 2G memory: jail:httpd:memoryuse:deny=2G/jail
ルールを削除するには、rctl
に対し、
リストから削除するように指定してください。
#
rctl -r user:trhodes:maxproc:deny=10/user
マニュアルページには、 ルールをすべて削除する方法が記載されています。 しかしながら、特定のユーザのルールをすべて削除するには、 以下のようなコマンドを実行してください。
#
rctl -r user:trhodes
subjects
をコントロールするリソースは他にも多く用意されています。
これらについて知るには、rctl(8) をご覧ください。
本文書、および他の文書は https://download.freebsd.org/ftp/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。