diff --git a/ja_JP.eucJP/books/handbook/users/chapter.xml b/ja_JP.eucJP/books/handbook/users/chapter.xml index 0794c7399d..ae35ca3031 100644 --- a/ja_JP.eucJP/books/handbook/users/chapter.xml +++ b/ja_JP.eucJP/books/handbook/users/chapter.xml @@ -1,1056 +1,1025 @@ Neil Blakey-Milner 寄稿: ユーザと基本的なアカウントの管理 この章では &os; は、複数のユーザが同時にコンピュータを使えるようにします。 スクリーンとキーボードの前に一度に座れるのはその中の一人だけですが ユーザは何人でもネットワークを通してログインできます。 システムを使うためには、 どのユーザもアカウントがなければなりません。 - この章を読むと、以下のことがわかります。 + この章では、以下のことを説明します。 - &os; のさまざまなユーザアカウントの違い + &os; + システムにおけるさまざまな種類のユーザアカウントについて - ユーザアカウントを追加したり削除する方法 + ユーザアカウントを追加、削除および変更する方法 - ユーザの名前やシェルなど、アカウントの細目を変更する方法 + ユーザやグループが利用できるリソースの上限を制御する方法 - アカウント毎に制限をかけて、メモリや CPU 時間など、 - アカウントやグループに対してアクセスが許可される資源を制御する方法 - - - - アカウント管理を楽にするためのグループの使い方 - - - - この章を読む前に - - - - &unix; と &os; の基礎知識 - を理解しておいてください。 + グループの作成、 + およびグループにユーザをメンバとして追加する方法 - はじめに + アカウントの種類 &os; システムへアクセスするには、 かならずアカウントが使われ、 また、プロセスもすべてユーザによって実行されるので、 ユーザとアカウントの管理は、重要なものです。 - &os; システム上のどのアカウントにも、 - そのアカウントを識別するための情報がなにかしら結び付けられています。 + アカウントには大きく分けて三種類あります。 + システムアカウント (system accounts)、ユーザアカウント (user accounts)、 + そしてスーパーユーザ (superuser) です。 + + + システムアカウント + + + アカウント + システム + + + システムアカウントは、DNS、メール、 + ウェブサーバといった各種サービスを運用するために使われます。 + この目的は、セキュリティを確保するためです。 + もしすべてのサービスがスーパーユーザで実行されていると、 + それらのサービスはどんな動作でも可能となり、 + 適切な制限を適用することができません。 + + + アカウント + daemon + + + アカウント + operator + + + システムアカウントの具体例は、 + daemon, operator, + bind, news および + www といったものです。 + + + アカウント + nobody + + + nobody + は通常の特権を持たないシステムアカウントです。 + しかし、nobody + を利用するサービスが増えれば増えるほど、 + それに所属するファイルやプロセスも増え、 + その特権も大きくなるということを忘れないようにしてください。 + + + + ユーザアカウント + + + アカウント + user + + + ユーザアカウントは、 + 主に現実のユーザがシステムにアクセスする手段として用いられるものです。 + システムにアクセスするすべてのユーザは、 + それぞれ唯一のユーザアカウントを持つべきです。 + こうすることで管理者は誰が何を行なっているかがわかりますし、 + 他の人の設定を壊してしまうようなことを避けることができます。 + + それぞれのユーザは快適にシステムを利用するため、 + シェル、エディタ、キー設定、言語など、 + 各自の環境をセットアップすることができます。 + + &os; システム上のどのアカウントにも、 + 以下のような情報がなにかしら結び付けられています。 ユーザ名 login: プロンプトに対して入力するユーザの名前です。 ユーザ名はそのシステムで一意でなければならず、 2 名のユーザに同じユーザ名をつけることはできません。 有効なユーザ名を作成するには &man.passwd.5; に記載されているいくつもの規則があります。 アプリケーションの上位互換性を保つために、 - 8 文字以下の小文字からなるユーザ名が一般的です。 + 8 文字以下の小文字からなるユーザ名を使うことが推奨されています。 パスワード - それぞれのアカウントにはパスワードがあります。 + それぞれのユーザアカウントにはパスワードがあります。 パスワードは空白にもできますが、 - 行うべきではありません。 - すべてのアカウントにはパスワードをつけるべきです。 + 行うべきではありません。 ユーザ ID (UID) ユーザ ID (UID) は、 - システムがユーザを一意に識別するための、 - 伝統的には 0 から 65535 - UIDGID - には 4294967295 までの数を使えますが、 - そのような ID は、ID - の値に対して仮定を置いているソフトウェアで問題を起こす可能性があります。 - の間の数値です。内部的には、&os; はユーザの識別に - UID を使っています。 + &os; システムがユーザを一意に識別するための数値です。 ユーザ名を指定できるコマンドは、 ユーザ名を UID に変換してから扱っています。 - 好ましくありませんが、同じ UID - を持つ異なるユーザ名のアカウントがいくつあってもよいということになります。 - &os; に限っていうと、 - これらのアカウントはひとりのユーザとして扱われます。 + 65535 より大きな UID は、32 + ビット以上の整数に対応していないソフトウェアにおいて互換性の問題を引き起こす可能性があるので、 + 65535 以下の UID を使用することが推奨されています。 グループ ID (GID) グループ ID (GID) は、 - ユーザが属する第一グループを一意に識別するための、 - 伝統的には 0 から 65535 - の間の数値です。グループは、UID ではなく、 + ユーザが属する第一グループを一意に識別するための数値です。 + グループは、UID ではなく、 ユーザの GID に基づいて資源へのアクセスを制御する仕組みです。 これは、ある種の設定ファイルのサイズを大幅に小さくします。 - ユーザは、複数のグループに所属できます。 + ユーザは、複数のグループに所属できます。 + 65535 より大きな GID は、ソフトウェアに問題を引き起こす可能性があるので、 + 65535 以下の GID を使うことを推奨します。 ログインクラス ログインクラスはグループの仕組みを拡張したもので、 別々のユーザに対してシステムを調整する時に、 - さらなる柔軟性を提供します。 + さらなる柔軟性を提供します。ログインクラスの詳細については、 + で説明します。 パスワード変更時間 デフォルトでは、&os; は定期的にパスワードを変更することをユーザに強制しません。 - これをユーザごとに設定して、一部またはすべてのユーザに、 + これを &man.pw.8; を使用してユーザごとに設定し、 + 一部またはすべてのユーザに、 一定の時間がたったらパスワードを強制的に変更させることができます。 アカウント失効時間 デフォルトでは、&os; はアカウントを失効させません。 たとえば学校で生徒のアカウントがある場合など、 限られた期間だけのアカウントを作成するなら、 - そのアカウントがいつ失効するか指定できます。 + そのアカウントがいつ失効するか &man.pw.8; を使って指定できます。 有効期間が経過したら、 そのアカウントのディレクトリやファイルは残っていますが、 システムへのログインはできなくなります。 ユーザの氏名 &os; ではユーザ名でアカウントを一意に識別しますが、 必ずしもユーザの本名を反映したものではありません。 - この情報をアカウントに関連付けることもできます。 + この情報をアカウントに関連付けることもできます。 + この情報は、コメントのように、空白、大文字、および + 8 字以上で記載できます。 ホームディレクトリ ホームディレクトリは、システム中のディレクトリへのフルパスです。 これはユーザがログインした時に作業を開始するディレクトリです。 一般的な慣習は、すべてのユーザのホームディレクトリを /home/username/usr/home/username の下に置くことです。 各ユーザは、個人のファイルやサブディレクトリを、 ユーザのホームディレクトリに保存します。 ユーザシェル シェルは、 ユーザがシステムと対話するデフォルトの環境を提供します。 いろいろな種類のシェルがあり、 経験を積んだユーザはそれぞれ好みがあり、 それをアカウントの設定に反映できます。 + - - アカウントには大きく分けて三種類のものがあります。それは、 - スーパーユーザ (superuser)、 - システムアカウント (system accounts)、 - そしてユーザアカウント (user accounts) です。 - スーパーユーザのアカウントは通常 root と呼ばれ、 - 無制限の特権を持つためにシステムの管理に用いられます。 - また、システムアカウントはサービスの運用に用いられ、 - ユーザアカウントは、 - 実際のユーザに割り当てられ、ログインしてシステムを利用するために使われます。 - - + スーパーユーザアカウント アカウント スーパーユーザ (root) + スーパーユーザアカウントは通常 root と呼ばれ、 - システム管理を行なうために使われます。 - このアカウントはメールのやりとり、システムの調査、 + システム管理を行なうために使われ、権限に制限がありません。 + そのため、このアカウントはメールのやりとり、システムの調査、 プログラミングといった日常的な作業を行なうために使われるべきものではありません。 その理由は、スーパーユーザが通常のユーザアカウントと異なり、 操作にまったく制限を受けないことによります。 そのためスーパーユーザアカウントで操作を間違えると、 システムに重大な影響を与えてしまう恐れがあるのです。 ユーザアカウントでは、 仮に操作を間違えてもシステムを壊してしまうようなことはできないようになっています。 - したがって特権を必要としていないのであれば、 - できるだけいつもユーザアカウントを利用する方が望ましいと言えるでしょう。 + そのため、ユーザアカウントでログインし、 + 高い権限が必要なコマンドを実行するときだけスーパーユーザになることが推奨されています。 スーパーユーザで実行するコマンドはいつでも、 二回、三回と確認してください。 なぜならスペースが多かったり、文字が欠けていたりするだけで、 取り返しのつかないデータの破壊につながる可能性があるからです。 - 常にシステム管理者用にユーザアカウントを作成し、 - 一般的な使用においては、そのアカウントを使ってください。 - これはマルチユーザモード、シングルユーザモードを問わず、 - 同様にあてはまります。 - この章のうしろの方では、アカウントの追加と通常のユーザから - スーパーユーザへと移行する手順について扱います。 - + スーパーユーザの権限を得るには、さまざまな方法があります。 + root ユーザとしてログインする方法もありますが、 + これはまったくお勧めできません。 + + スーパーユーザの権限を手に入れるには、かわりに &man.su.1; + を使って下さい。 + - オプションをつけて実行すると、 + 実行したユーザに root ユーザの環境が設定されます。 + このコマンドは wheel + グループに入ってるユーザのみが実行でき、他のユーザは実行出来ません。 + また、実行時には root + ユーザのパスワードを必要とします。 + + 以下の例では、make install + を行うときにスーパーユーザの権限が必要なので、 + このコマンドを実行する時だけユーザはスーパーユーザになります。 + コマンドを実行したら、ユーザは exit + を実行してスーパーユーザからログアウトし、 + 通常のユーザアカウントの権限に戻ります。 - - システムアカウント - - - アカウント - システム - - システムアカウントとは、DNS、メール、 - ウェブサーバといった各種サービスを運用するために使われます。 - この目的は、セキュリティを確保するためです。 - もしサービスがスーパーユーザで実行されていると、 - それらのサービスは (本来意図しないような) - どんな動作でも可能となり、適切な制限を適用することができません。 - - - アカウント - daemon - - - アカウント - operator - - システムアカウントの具体例として、 - daemon, operator, - bind, news および - www - といったものがあります。 - - - アカウント - nobody - - nobody - ユーザは通常の特権を持たないシステムユーザです。 - しかし、nobody - を利用するサービスが増えれば増えるほど、 - それに所属するファイルやプロセスも増え、 - その特権も大きくなるということを忘れないようにしてください。 - - - - ユーザアカウント - - - アカウント - user - - ユーザアカウントは、 - 主に現実のユーザがシステムにアクセスする手段として用いられるものです。 - このアカウントは利用するユーザとシステム環境を分離します。 - そのため、システムや他のユーザに危害をおよぼす危険性をなくし、また、 - 他に影響を与えることなくユーザ自身の環境をカスタマイズすることを可能にしています。 - - システムにアクセスするすべてのユーザは、 - それぞれ唯一のユーザアカウントを持つべきです。 - こうすることで管理者は誰が何を行なっているかがわかりますし、 - 他の人の設定を壊してしまったり、 - 他人のメールを読んでしまうようなことを避けることができます。 + + スーパーユーザ権限でプログラムをインストールする + + &prompt.user; configure +&prompt.user; make +&prompt.user; su - +Password: +&prompt.root; make install +&prompt.root; exit +&prompt.user; + - それぞれのユーザは快適にシステムを利用するため、 - シェル、エディタ、キー設定、言語など、 - 各自の環境をセットアップすることができます。 - + 1 人の管理者が一台のマシン、 + もしくは小規模なネットワークを管理する場合には、 + &man.su.1; のフレームワークはうまく機能するでしょう。 + この代わりとなるのは、 + security/sudo package または port + です。これはログ機能や、 + スーパーユーザの権限で実行できるユーザやコマンドを設定できます。 + - アカウント情報の変更 + アカウント情報の管理 アカウント 変更 &os; には、 ユーザアカウントを操作するのにさまざまなコマンドが用意されています。 もっとも一般的なコマンドを以下に示し、 それに続いて詳しい使用例を示します。 コマンド 要約 &man.adduser.8; コマンドラインからユーザを追加するための推奨アプリケーション &man.rmuser.8; コマンドラインからユーザを削除するための推奨アプリケーション &man.chpass.1; ユーザデータベースの情報を変更するための柔軟なツール &man.passwd.1; ユーザのパスワードを変更する簡単なコマンドラインツール &man.pw.8; ユーザアカウントのあらゆる箇所を変更する強力で柔軟なツール <command>adduser</command> アカウント 追加 adduser /usr/share/skel スケルトンディレクトリ &man.adduser.8; は、 新しいユーザを登録するためのシンプルなプログラムです。 ユーザを追加すると、 このプログラムは、/etc/passwd/etc/group を自動的に更新します。 また、新規ユーザのホームディレクトリを作成し、 /usr/share/skel から、デフォルトで使用される設定ファイルをコピーします。 また、新しく作成されたユーザに対して、 ウェルカムメッセージをメールで送信することも可能です。 &os; におけるユーザの追加 &prompt.root; adduser Username: jru Full name: J. Random User Uid (Leave empty for default): Login group [jru]: Login group is jru. Invite jru into other groups? []: wheel Login class [default]: Shell (sh csh tcsh zsh nologin) [sh]: zsh Home directory [/home/jru]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : jru Password : **** Full Name : J. Random User Uid : 1001 Class : Groups : jru wheel Home : /home/jru Shell : /usr/local/bin/zsh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (jru) to the user database. Add another user? (yes/no): no Goodbye! &prompt.root; 入力したパスワードは画面に表示されませんので、 ユーザアカウントを作成する際には、 パスワードを間違えて入力してしまわないように注意してください。 <command>rmuser</command> rmuser アカウント 削除 システムから完全にユーザを削除するには、 &man.rmuser.8; を使います。 このコマンドは、次の手順を実行します。 指定されたユーザの &man.crontab.1; エントリが存在する場合には削除。 指定されたユーザの &man.at.1; ジョブをすべて削除。 指定されたユーザが所有するすべてのプロセスを強制終了。 ローカルパスワードファイルから、 指定されたユーザのエントリを削除。 指定されたユーザのホームディレクトリを削除 (ディレクトリの所有者が指定されたユーザのものだった場合)。 /var/mail から、指定されたユーザの到着メールファイルを削除。 /tmp のような一時ファイル保存領域から、 指定されたユーザの所有するファイルを削除。 そして最後に、 /etc/group にある すべてのグループから、指定されたユーザを削除します。 指定されたユーザと同じ名前のグループで、 そのユーザが削除されると空のグループとなる場合は、 そのグループ自体が削除されます。 これは &man.adduser.8; によってユーザごとに作成される、 ユニークなグループに対応するものです。 スーパユーザアカウントの削除に &man.rmuser.8; を利用することはできません。 スーパユーザアカウントの削除はほとんどすべての場合、 大規模なシステムの破壊を意味するからです。 デフォルトでは、以下の例のような対話モードが使われます。 <command>rmuser</command> による対話的なアカウントの削除 &prompt.root; rmuser jru Matching password entry: jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh Is this the entry you wish to remove? y Remove user's home directory (/home/jru)? y Updating password file, updating databases, done. Updating group file: trusted (removing group jru -- personal group is empty) done. Removing user's incoming mail file /var/mail/jru: done. Removing files belonging to jru from /tmp: done. Removing files belonging to jru from /var/tmp: done. Removing files belonging to jru from /var/tmp/vi.recover: done. &prompt.root; <command>chpass</command> chpass &man.chpass.1; を用いて、 パスワード、シェル、その他の個人情報といった、 ユーザデータベース情報を変更できます。 スーパユーザ権限に限り、 &man.chpass.1; を用い、 他のユーザの情報やパスワードを変更できます。 ユーザ名の他にオプションを指定しないと、 &man.chpass.1; はユーザ情報を編集するエディタを表示します。 ユーザがエディタを終了すると、 ユーザデータベースが新しい情報に更新されます。 スーパユーザでない場合は、 エディタを抜けた後にパスワードを聞かれます。 スーパユーザによる対話的な <command>chpass</command> #Changing user database information for jru. Login: jru Password: * Uid [#]: 1001 Gid [# or name]: 1001 Change [month day year]: Expire [month day year]: Class: Home directory: /home/jru Shell: /usr/local/bin/zsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: ユーザは、この情報の限られた部分のみ変更が可能です。 また、変更できるのはそのユーザ自身のアカウント情報のみです。 通常のユーザによる対話的な <command>chpass</command> #Changing user database information for jru. Shell: /usr/local/bin/zsh Full Name: J. Random User Office Location: Office Phone: Home Phone: Other information: &man.chfn.1; および &man.chsh.1; はいずれも、 &man.chpass.1; へのリンクです。 また、&man.ypchpass.1;, &man.ypchfn.1; および &man.ypchsh.1; も同様です。 NIS のサポートは自動的に行なわれますので、 コマンドの先頭に yp をつける必要はありません。 NIS の設定については、 で説明されています。 <command>passwd</command> passwd アカウント パスワードの変更 &man.passwd.1; は、 ユーザが自分のパスワードを変更する通常の方法です。 スーパユーザ権限では、 他のユーザのパスワードを変更するのに使われます。 誤って、または不正なパスワードの変更を避けるため、 新しいパスワードを設定する前に、 もとのパスワードを入力しなければなりません。 スーパーユーザの権限でユーザのパスワードを変更する際には、 もとのパスワードを入力する必要はありません。 自分のパスワードの変更 &prompt.user; passwd Changing local password for jru. Old password: New password: Retype new password: passwd: updating the database... passwd: done スーパーユーザ権限での他のユーザのパスワード変更 &prompt.root; passwd jru Changing local password for jru. New password: Retype new password: passwd: updating the database... passwd: done &man.chpass.1; 同様、&man.yppasswd.1; は、 &man.passwd.1; へのリンクになっていますので、 NIS はどちらのコマンドでも動作します。 <command>pw</command> pw &man.pw.8; は、ユーザやグループの作成、削除、 変更および表示を行なうコマンドラインのユーティリティです。 これは、システムユーザファイルやシステムグループファイルの フロントエンドとして働きます。&man.pw.8; はとても強力な一連のコマンドラインオプションを有しており、 シェルスクリプトで使うのに向いていますが、新しいユーザは、 この章で紹介されている他のコマンドに比べて難しいと感じるかもしれません。 ユーザへの制限 ユーザに対する制限 アカウント 制限 &os; は、 個々のユーザが利用できるシステム資源の量を管理者が制限できる方法をいくつも用意しています。 その種の制限は、ディスククォータ (quota) とその他の資源の制限の 2 つの章で説明します。 クォータ (quotas) ユーザに対する制限 クォータ ディスククォータ ディスククォータは、ユーザが利用できるディスク容量を制限し、 その都度計算しなくてもディスク使用量を簡単に確認できる手段も提供しています。 クォータについては、 で解説しています。 その他のリソースの制限とは、ユーザが消費できる CPU、メモリなどのリソースを制限する手段のことです。 これはログインクラスを用いて定義されているもので、 この後で解説しています。 /etc/login.conf ログインクラスは /etc/login.conf で定義します。詳細な説明は &man.login.conf.5; に詳しく記載されています。 各ユーザアカウントにはログインクラスが割り当てられていて (デフォルトでは default です)、 それぞれのログインクラスにはログインケーパビリティの集合が割り当てられています。 ログインケーパビリティとは、 名称= の組のことで、名称 は周知の識別子、 は、名称 に応じて処理される任意の文字列です。 ログインクラスとケーパビリティを設定するのはどちらかといえば簡単なことで、 &man.login.conf.5; でも説明されています。 &os; は通常、直接 /etc/login.conf から設定を読み込まず、 より速く検索できる /etc/login.conf.db データベースから読み込みます。/etc/login.conf を編集する時には /etc/login.conf.db を次のコマンドを実行してアップデートする必要があります。 &prompt.root; cap_mkdb /etc/login.conf リソースの制限は、 2 つの点で標準的なログインケーパビリティと異なっています。 第一に、どの制限についても、ソフト (現在の) リミットとハードリミットがあります。 ソフトリミットは、ユーザやアプリケーションが調整できますが、 ハードリミットを超えることはできません。 ユーザはハードリミットを下げることはできますが、 上げることはスーパユーザのみができます。 第二に、ほとんどのリソースの制限は特定のユーザに対してプロセス毎に適用されるもので、 そのユーザが利用するリソースの総量を制限するものではありません。 ただし、この違いは制限を特別扱いすることで実現されるものであり、 ログインケーパビリティフレームワークの実装によるものではありません。 以下が最もよく使われるリソースの制限になります。 残りは、他のすべてのログインケーパビリティと並んで &man.login.conf.5; に書かれています。 coredumpsize - coredumpsize - ユーザに対する制限 - coredumpsize - プログラムが生成する core - ファイルのサイズにかかる制限は、 + ファイルのサイズcoredumpsizeにかかる制限は、 filesize やディスククォータなどの、 - ほかのディスク使用に関する制限に従属します。 + ほかのディスク使用に関する制限ユーザに対する制限coredumpsizeに従属します。 この制限は、ディスク領域の消費を制御するあまり厳しくない手段としてよく使われています。 ユーザは core ファイルを自分で生成するわけではなく、 削除しないことも多いので、 これを設定すれば大きなプログラムが異常終了してもディスクの空きがなくならずに済みます。 cputime - cputime - - ユーザに対する制限 - cputime - - そのユーザのプロセスが消費できる CPU 時間の上限です。 + そのユーザのプロセスが消費できる CPU 時間cputimeユーザに対する制限cputime の上限です。 これを超えたプロセスは、カーネルにより終了されます。 これは、消費される CPU 時間 についての制限であって、&man.top.1; や &man.ps.1; のフィールドで表示される CPU の割合に関するものではありません。 filesize - filesize - - ユーザに対する制限 - filesize - - ユーザが所有できるファイルの大きさの上限です。ユーザが所有できるファイルの大きさfilesizeユーザに対する制限filesizeの上限です。ディスククォータ と違い、 この制限はユーザのファイルをすべてまとめた集合にではなく、 個々のファイルにかかります。 maxproc - maxproc - - ユーザに対する制限 - maxproc - - ユーザが実行できるプロセス数の上限です。 + ユーザが実行できるプロセス数の上限maxprocユーザに対する制限maxprocです。 フォアグラウンドプロセスとバックグラウンドプロセスの両方を扱います。 この上限は、&man.sysctl.8; 変数 kern.maxproc で指定されたシステムの制限を超えることはできません。 同時に複数ログインすることや、 パイプライン実行することは便利なことが多いので、 この値をあまり小さな値に設定すると、 そのユーザの生産性が悪化する可能性があります。 大きなプログラムをコンパイルする場合のように、 タスクによっては複数のプロセスやプリプロセッサが実行されます。 memorylocked - memorylocked - - ユーザに対する制限 - memorylocked - これは、1 つのプロセスが &man.mlock.2; - によりメインメモリにロックされることを要求できるメモリの最大容量です + によりメインメモリにロックされることを要求できるメモリmemorylockedユーザに対する制限memorylockedの最大容量です。 &man.amd.8; のようなシステムで重要なプログラムは、 メインメモリへロックして、システムがスワップする際に、 ディスクのスラッシングを引き起こさないようにします。 memoryuse - memoryuse - ユーザに対する制限 - memoryuse - これは、どの時点かを問わず、 - あるプロセスが消費できる最大のメモリ容量です。 + あるプロセスが消費できる最大のメモリ容量memoryuseユーザに対する制限memoryuseです。 これは、メインメモリとスワップの使用量を合わせたものです。 メモリ消費を抑えるための包括的な制限ではありませんが、 手始めにはよいでしょう。 openfiles - openfiles - ユーザに対する制限 - openfiles - - これは、あるプロセスが開いておける最大のファイル数です。 + これは、あるプロセスが開いておける最大のファイル数openfilesユーザに対する制限openfilesです。 &os; では、ファイルはまた、ソケットや IPC チャンネルを表わすのにも使われています。 ですから、あまり低い値に設定しないよう注意してください。 これに対応するシステム全体の制限は &man.sysctl.8; kern.maxfiles で定義されています。 sbsize - sbsize - ユーザに対する制限 - sbsize - これは、あるユーザが消費できるネットワークメモリ - (つまり mbuf) の上限の量です。ユーザは、 + (つまり mbufsbsizeユーザに対する制限sbsize) の上限の量です。ユーザは、 ネットワーク通信を制限するのに使えます。 stacksize - stacksize - ユーザに対する制限 - stacksize - - これは、プロセスのスタックサイズの上限です。 + + これは、プロセスのスタックサイズstacksizeユーザに対する制限stacksizeの上限です。 あるプログラムが使用しうるメモリの量を制限するには、 これだけでは十分ではありません。 したがって、他の制限と組み合わせて使わなければなりません。 リソースの制限を設定するにあたり、 ほかにもいくつか覚えておかなければならないことがあります。 以下は、一般的なこつやお勧め、さまざまなコメントになります。 システム起動時に /etc/rc から起動されたプロセスは、daemon ログインクラスに割り当てられます。 システムに付属していた /etc/login.conf はほとんどの制限について妥当な値になっていますが、 すべてのシステムにおいてふさわしいというわけではありません。 制限をあまり緩くするとシステムを悪用しやすくしてしまいますし、 厳しくしすぎると生産性を悪化させてしまいます。 &xorg; のユーザには、 他のユーザより多くのリソースを与えるべきかもしれません。 &xorg; そのものが多くのリソースを使うだけでなく、 より多くのプログラムを並行して使うことをユーザに促します。 多くの制限は個々のプロセスにかかるもので、 一人のユーザにまとめてかかるものではありません。 例えば、openfiles を 50 に設定することは、 ユーザが動かすそれぞれのプロセスが最大 50 個のファイルを開けるということです。 あるユーザが開けるファイルの総数は、 openfiles の値に maxproc をかけたものになります。 同じことがメモリ消費量にもあてはまります。 リソースの制限と、ログインクラス、 ログインケーパビリティ一般についての詳しい情報は、 &man.cap.mkdb.1;, &man.getrlimit.2; および &man.login.conf.5; をご覧ください。 - グループ + グループの管理 グループ /etc/groups アカウント グループ グループとは、ユーザを羅列したものです。 グループは、グループ名と GID で識別されます。 &os; では、 あるプロセスが何かするのを許可するかどうかをカーネルが判断する際に、 プロセスの UID とそのユーザが所属するグループの一覧を利用します。 ほとんどの場合、ユーザもしくはプロセスの GID は一覧の最初のグループを指しています。 グループ名から GID への写像は /etc/group にあります。 これは、コロンで区切られた 4 項目からなるテキストファイルです。 1 番目の項目はグループ名、 2 番目は暗号化されたパスワード、 3 番目が GID、 4 番目がカンマで区切られたメンバの一覧です。 文法についての完全な説明は、&man.group.5; をご覧ください。 スーパーユーザは、/etc/group をテキストエディタで編集できます。 もしくは、&man.pw.8; を使ってグループの追加や編集をできます。 たとえば、teamtwo というグループを追加して、その存在を確認するには、 次のように使います。 &man.pw.8; によるグループの追加 &prompt.root; pw groupadd teamtwo &prompt.root; pw groupshow teamtwo teamtwo:*:1100: この例では、1100 という番号は、 teamtwoGID です。 この時点では、teamtwo にメンバはいません。 以下のコマンドは、 jruteamtwo のメンバに追加します。 &man.pw.8; により新しいグループにメンバを追加する &prompt.root; pw groupmod teamtwo -M jru &prompt.root; pw groupshow teamtwo teamtwo:*:1100:jru の引数は、 カンマで区切られた新しい (空の) グループに追加するもしくは存在するグループのメンバを置き換えるユーザの一覧です。 ユーザにとっては、このグループのメンバーシップはパスワードファイルに記載されているプライマリのグループとは異なります。 &man.pw.8; の コマンドを使った時は、 そのユーザはグループの一員として表示されませんが、&man.id.1; などのツールを使って情報を問い合わせれば、 その情報を引き出せます。ユーザをグループに追加をする際に、&man.pw.8; は /etc/group しか扱わず、 /etc/passwd から追加のデータを読んだりはしません。 &man.pw.8; によるグループへのユーザ追加 &prompt.root; pw groupmod teamtwo -m db &prompt.root; pw groupshow teamtwo teamtwo:*:1100:jru,db この例では、 の引数は、 カンマで区切られたグループに追加するユーザの一覧です。 前の例と異なり、これらのユーザはグループ一覧に追加され、 グループのユーザ一覧を置き換えることはありません。 グループに所属しているユーザを調べるための &man.id.1; の使い方 &prompt.user; id jru uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo) この例では、jrujru グループと teamtwo グループのメンバです。 このコマンドや /etc/group のフォーマットの詳細については、 &man.pw.8; および &man.group.5; をご覧ください。