6.3. Red Hat Enterprise Linux 固有の情報

次のセクションでは、ユーザーアカウント及び関連リソースの管理に関わる Red Hat Enterprise Linuxに固有の各種機能を解説します。

6.3.1. ユーザーアカウント、グループ、パーミッション

Red Hat Enterprise Linux稼働環境下では、普通のユーザーアカウントが作成されると、ユーザーはシステムにログインしてアクセスが許可されているファイルやアプリケーションを使用することができます。Red Hat Enterprise Linuxは、ユーザーかグループがそのリソースにアクセスできるのかどうか設定されたパーミッションに基づいて確定します。

ファイル、ディレクトリ、アプリケーションには、3つのパーミッションがあります。このパーミッションが許可するアクセス権の種類を制御するのに使われます。1文字の各記号が、ディレクトリ一覧表示内でそれぞれのパーミッションを表わします。次のような記号です。

4 番目の記号(-)は、アクセスが何も許可されていないことを示します。

3種類のパーミッションのそれぞれが、3種類のユーザーカテゴリに設定されます。 次がそのカテゴリです。

先に述べたように、コマンドのls -lでロングフォーマットの一覧表示を 呼び出して、パーミッションを見ることができます。 例えば、ユーザーのjuanfoo という名前の実行可能形式のファイルを作成すると、 ls -l fooコマンドの出力は次のようになるはずです。

-rwxrwxr-x    1 juan     juan            0 Sep 26 12:25 foo

このファイルのパーミッションはこの行の先頭に並び、 rwxで始まっています。 この最初の1組の記号がowner(所有者)のアクセスを定義しています — この例では、所有者のjuanはフルアクセスを持っているので ファイルの読み取り、書き込み、実行ができます。 2組目のrwx記号はグループのアクセス (これも、フルアクセスを持っています)を定義し、 最後の組の記号がその他のユーザーに対して許可されるアクセスの種類を定義しています。 ここでは、その他のユーザーはファイルの読み取りと実行ができますが、 変更はできないようになっています。

パーミッション及びユーザーアカウントに関して注意しなければならないのが、Red Hat Enterprise Linuxで稼働するアプリケーションはすべて特定ユーザーの環境で実行するということです。一般的には、ユーザーのjuanがアプリケーションを起動すると、そのアプリケーションはユーザーjuanの環境を使用して 動作します。しかし、ある作業を行うために特権を持つアクセスレベルを必要とする場合があります。このようなアプリケーションには、システム設定を編集したり、ユーザーにログインするものがあります。このような理由から、特殊なパーミッションが作成されています。

Red Hat Enterprise Linuxには、次のような特殊なパーミッションが3種類あります。

6.3.1.1. ユーザー名とUID、グループとGID

Red Hat Enterprise Linuxでは、ユーザーアカウントとグループ名は主としてユーザーに便利なようになっています。内部では、システムが数値の識別子を使用しています。ユーザーにはUIDという識別子、グループにはGIDという識別子を使用します。ユーザーに対してユーザーやグループの情報を利用できるようにするプログラムが、UID/GIDの値を人間が読めるものに翻訳しています。

重要重要
 

ネットワーク経由でファイルやリソースを共有するつもりであれば、 UIDとGIDは組織内の全体で固有でなければなりません。 さもないと、アクセス制御はユーザー名とグループ名ではなくUIDとGIDに対応するためどのようなアクセス制御を施行しても正しく機能しなくなる恐れがあります。

特に、ファイルサーバー上にある /etc/passwd ファイル及び /etc/group ファイルが UID または GIDと ユーザーのワークステーションが持つ UID または GID が異なる場合、不適当なアプリケーションのパーミッションはセキュリティ上の問題となる可能性があります。

例えば、ユーザーのjuanが デスクトップコンピュータ上でUID 500を持っているとすると、 ファイルサーバー上でjuanが作成するファイルは 所有者がUID 500で作成されます。しかし、 ユーザーのbobがファイルサーバーにローカルにログインして (または、他のコンピュータにログイン)、 bobのアカウントもまたUID 500であった場合、 bobjuanのファイルに フルアクセス権を持ち、またjuanbobのフルアクセス権を持つことになります。

従って、UIDやGIDの衝突はいかなる犠牲を払っても回避すべきです。

UIDやGIDの数値には意味があるという実例として2つあります。 1つは、rootユーザーの UID 及び GIDの数値は 「0」が使用され、Red Hat Enterprise Linuxでは特別な扱いを受けます— すべてのアクセスが自動的に許可されます。

2つ目は、「500」以下のUID及びGIDはシステムが使用するように確保されています。 「0」のUID/GIDとは異なり、500以下のUID及びGIDはRed Hat Enterprise Linuxで特別な扱いは受けません。 ただし、システムのコンポーネントの一部でUID/GIDを使用中である、または 今後に使用する可能性があるため、このUID/GIDがユーザーに割り当てられることはありません。 標準のユーザーとグループに関する詳細は、Red Hat Enterprise Linux リファレンスガイドにある ユーザーとグループの章を参照してください。

Red Hat Enterprise Linux の標準ユーザー作成ツールを使って新規のユーザーアカウントを追加する場合、この新規のユーザーアカウントには 500 以降で使用可能な最初の UID と GID が割り当てられます。UID/GID 501 が割り当てられ、次に UID/GID 502 と続きます。

Red Hat Enterprise Linuxで利用できる各種ユーザー作成ツールの概要は、この章の後半で解説しますが、 これらのツールを見ていく前に、 次のセクションでシステムアカウントとグループを定義するためにRed Hat Enterprise Linuxが使用するファイルを 説明します。

6.3.2. ユーザーアカウントとグループを制御するファイル

Red Hat Enterprise Linuxでは、ユーザーアカウントとグループに関する情報は、 /etc/ディレクトリ内の複数のテキストファイルに保存されています。 システム管理者が新規ユーザーアカウントを作成するときは、 これらのファイルを直接編集するか、 アプリケーションを使用して必要とされる変更を行う必要があります。

次のセクションでは、Red Hat Enterprise Linux稼働環境下でユーザーとグループ情報を保存している /etc/ディレクトリ内のファイルを詳細に示します。

6.3.2.1. /etc/passwd

/etc/passwdファイルはworld-readableで、 行ごとに区別されたユーザーの一覧を含んでいます。 各行はコロンで区切られ次のような情報を含んでいます。

  • ユーザー名 —システムにログインするときにユーザーが入力する名前です。

  • パスワード — 暗号化されたパスワードが入っています(シャドーパスワードを使用している場合は、 xになっています — 詳細は後述されています)。

  • ユーザーID (UID) — ユーザー名に相当する数値で、アクセス権を確定するときにシステムやアプリケーションが参照します。

  • グループID (GID) — プライマリのグループ名に相当する数値で、 アクセス権を確定するときにシステムやアプリケーションが参照します。

  • GECOS —史実に基づく理由で命名されています。GECOS [1]フィールドはオプションで、追加情報を保存するために使用します(ユーザーのフルネームなど)。ここにはコンマで区切って複数のエントリを保存することができます。finger などのユーティリティがこのフィールドにアクセスして、補足ユーザー情報を提供します。

  • ホームディレクトリ/home/juan/など、ユーザーのホームディレクトリへの絶対パスです。

  • シェル — ユーザーがログインすると必ず自動的に起動されるプログラムです。 通常、これはコマンドインタプリタ(一般的にはシェルと呼ばれる) になっています。Red Hat Enterprise Linuxでは、デフォルトの値は/bin/bashです。 このフィールドが空白になっていると、/bin/shが使用されます。 存在しないファイルが設定されると、ユーザーはシステムにログインすることができなくなります。

/etc/passwdのエントリ例をここに示します。

root:x:0:0:root:/root:/bin/bash

この行は、rootユーザーがシャドーパスワードを持っていて、 UIDとGIDが0であることを示しています。 root ユーザーはホームディレクトリとして /root/があり、シェルには/bin/bashを使用します。

/etc/passwdに就いての詳細は、 passwd(5)のmanページを参照してください。

6.3.2.2. /etc/shadow

/etc/passwd ファイルが world-readable でなければならないため(このファイルは UID からユーザー名への翻訳を行うために使用されるというのが主な理由)、/etc/passwd に全員のパスワードを保存することは危険が伴います。パスワードは暗号化されますが、暗号化されたパスワードが入手可能であればパスワードに攻撃を行うことが可能になります。

攻撃者が/etc/passwdのコピーを取得できた場合、 密かに攻撃を遂行することが可能となります。 パスワードクラッカーで生成した偽のパスワードで いちいちログインしてみるという発見の危険を犯さずとも、 次のような方法でパスワードクラッカーを使用することができます。

  • パスワードクラッカーで偽のパスワードを生成します。

  • 次に、偽のパスワードをシステムと同じアルゴリズムで暗号化します。

  • 暗号化された偽のパスワードを/etc/passwd の暗号化されたパスワードと比較します。

この攻撃の最も危険なところは、組織から遠く離れたシステムで行うことができる点です。 このため、攻撃者は最高のパフォーマンスを誇るハードウェアを使用することができ、 莫大な量のパスワードを高速でクラッキングしていくことができるようになります。

従って、/etc/shadow ファイルは root ユーザーにのみ読み取り専用であり、各ユーザーのパスワード(及び、オプションのパスワードエージング情報)を含んでいます。/etc/passwd ファイルと同様、各ユーザーの情報は行ごとに分けられています。各行はコロンで区切られ、次のような情報を含んでいます。

  • ユーザー名 — システムにログインするときにユーザーが入力する名前です。 これによりloginアプリケーションが ユーザーのパスワード(及び関連情報)を検索できるようになります。

  • 暗号化パスワード — 13 文字から 24 文字のパスワードです。crypt(3) ライブラリ機能か md5 ハッシュアルゴリズムのどちらかを使って暗号化されます。このフィールドでは、ユーザーログインの制御及びパスワードステータスの表示をするために有効にフォーマット化された暗号パスワードまたはハッシュパスワード以外の値が使用されます。例えば、値が ! または * なら、そのアカウントはロックされてユーザーはログインを許可されません。値が !! なら、パスワードはいままで設定されたことがないことになります(設定パスワードを持たないユーザーはログインできません)。

  • 最後にパスワードが変更された日付 — パスワードが最後に変更された1970年1月1日からの日数です(epoch とも呼ばれる)。この情報は、その後に続くパスワードエージングのフィールドに関連して使用されます。

  • パスワードの変更が可能になるまでに必要とされる日数 — この最低日数が経過するまでパスワードを変更することができません。

  • パスワードの変更が要求されるまでの日数 — パスワードの変更が要求されるまでにこの日数を要します。

  • パスワードの変更が要される前に警告が発せられる日数 — パスワードの有効期限前に期限切れが迫っていることをユーザーに警告する日数です。

  • アカウントが無効になるまでの日数 — パスワードの期限が切れてからアカウントが無効になるまでの日数です。

  • アカウントが無効になる日付 — ユーザーアカウントが無効になる日付(epochから数えた日数)。

  • リザーブフィールド — Red Hat Enterprise Linuxでは無視されるフィールドです。

/etc/shadowからの例を示します。

juan:$1$.QKDPc5E$SWlkjRWexrXYgc98F.:12825:0:90:5:30:13096:

この行はユーザーjuanの次のような情報を示しています。

  • パスワードが最後に変更された日付は 2005 年 2 月 11 日です。

  • パスワードの変更が可能になるまでに必要とされる最低時間はありません。

  • パスワードは90日ごとに変更する必要があります。

  • パスワードの変更が必要とされる日の5日前にユーザーは警告を受けます。

  • ログイン試行がなかった場合、パスワードの有効期限が切れてから30日でアカウントが無効になります。

  • アカウントは 2005 年 11 月 9 日に期限が切れます。

/etc/shadowファイルについての詳細は、 shadow(5)のmanページを参照してください。

6.3.2.3. /etc/group

/etc/groupファイルは world-readable で、行で区別されたグループ一覧を含んでいます。各行には次のような情報がコロンで区切られ、4フィールドあります。

  • グループ名 — グループの名前です。人間が可読なグループ識別子として各種ユーティリティプログラムで使用されます。

  • グループパスワード — 設定されていれば、newgrpコマンドを使用して ここに保存されているパスワードを入力することによりグループに含まれていないユーザーを そのグループに参加させることができるようになります。 このフィールドに小文字のxがあれば、 シャドーグループパスワードが使用されています。

  • グループID (GID)— グループ名に相当する数値です。アクセス権を確定するときに オペレーティングシステムやアプリケーションで使用されます。

  • メンバーリスト — グループに所属するユーザーの一覧がコンマで区切られています。

/etc/groupにある行の例を示します。

general:x:502:juan,shelley,bob

この行は、generalグループがシャドーパスワードを使用しており GIDが502であること、そしてjuanshelleybobが メンバーであることを示しています。

/etc/groupに関する詳細は、 group(5)のmanページを参照してください。

6.3.2.4. /etc/gshadow

/etc/gshadowファイルはrootユーザーだけが読み込み可能であり、 各グループの暗号化パスワードの他にもグループのメンバーシップや管理者情報を含んでいます。 /etc/groupファイルと同じように、 各グループ情報が行ごとに分けられています。 各行はコロンで区切られ、次のような情報を含んでいます。

  • グループ名 — グループの名前です。人間が可読なグループ識別子として各種ユーティリティプログラムで使用されます。

  • 暗号化パスワード — グループの暗号化されたパスワードです。 設定されていれば、newgrpコマンドを使ってそのグループの パスワードを入力することによりグループのメンバー以外の人が参加できるようになります。 このフィールドの値が!なら、 newgrpコマンドを使ったグループへのアクセスは許可されません。 !!値は!値と同様です — ただし、パスワードが今までに設定されたことがないことも示します。 値が空の場合、グループのメンバーだけがグループにログインできます。

  • グループ管理者 — ここに記載されているグループのメンバーは(コンマで区切られた一覧)、 gpasswdコマンドを使ってグループのメンバーを 追加したり削除したりできます。

  • グループメンバー — ここに記載されているグループメンバーは(コンマで区切られた一覧)管理メンバーではありません。

/etc/gshadowにある行の例を示します。

general:!!:shelley:juan,bob

この行は、generalグループにはパスワードがなく、 newgrpコマンドを使ったメンバー以外の参加を許可していません。 また、shelleyがグループ管理者で、 juanbobは 管理メンバーではない普通のメンバーです。

このファイルを直接編集すると構文エラーの可能性が増すため、 こうした目的にはRed Hat Enterprise Linuxで提供しているアプリケーションの使用をおすすめします。 次のセクションでは、こうした作業を行うための主要なツールを検討していきます。

6.3.3. ユーザーアカウントとグループアプリケーション

Red Hat Enterprise Linuxシステムでユーザーアカウントとグループを管理するときに使用できる 基本的なアプリケーションは2種類あります。

ユーザーマネージャの使い方についての詳細は、 Red Hat Enterprise Linux システム管理ガイドユーザーとグループの設定 の章を参照してください。

ユーザーマネージャアプリケーション及びコマンドラインユーティリティ いずれも本質的には同じ作業を行いますが、 コマンドラインツールはスクリプトを書くことができるため自動化がより簡単に行えます。

次の表では、ユーザーアカウントとグループを作成、管理するために使用する 一般的なコマンドラインツールのいくつかを説明しています。

アプリケーション機能
/usr/sbin/useraddユーザーアカウントを追加します。このツールはグループメンバーシップの プライマリとセカンダリを指定するのにも使用します。
/usr/sbin/userdelユーザーアカウントを削除します。
/usr/sbin/usermodパスワードエージングに関連する機能などアカウントの属性を編集します。 細かな制御については、passwdコマンドを使用します。 usermodはグループメンバーシップのプライマリとセカンダリを 指定するのにも使用します。
passwdパスワードを設定します。主にユーザーのパスワード変更に使用しますが、 パスワードエージングも制御します。
/usr/sbin/chpasswdユーザー名とパスワードの組合わせから成るファイルを読み込み、 該当する各ユーザーのパスワードを更新します。
chageユーザーのパスワードエージングポリシーを変更します。 これは、passwdコマンドでも行えます。
chfnユーザーのGECOS情報を変更します。
chshユーザーのデフォルトシェルを変更します。

表 6-2. ユーザー管理コマンドラインツール

次の表では、グループの作成、管理に使用する一般的なコマンドラインツールの いくつかを説明しています。

アプリケーション機能
/usr/sbin/groupaddグループを追加しますが、ユーザーをそのグループに割り当てる作業は行いません。 特定グループへのユーザーの割り当てには、 useraddプログラムとusermodプログラムを使用します。
/usr/sbin/groupdelグループを削除します。
/usr/sbin/groupmodグループ名またはGIDを変更しますが、グループのメンバーシップは変更しません。 特定グループへのユーザーの割り当てには、 useraddプログラムusermodプログラムを使用します。
gpasswdグループのメンバーシップを変更して、グループパスワードを知っているグループメンバー以外の人に グループへの参加を許可するパスワードを設定します。 また、グループ管理者を指定するのにも使用します。
/usr/sbin/grpck/etc/groupファイルと/etc/gshadowファイルの 整合性を確認します。

表 6-3. グループ管理コマンドラインツール

ここまで述べてきたツールでは、システム管理者にとってユーザーアカウントやグループメンバーシップの あらゆる制御においてすばらしい柔軟性を提供しています。 ツールの機能についての詳細は、各manページを参照してください。

ただし、これらのアプリケーションはこのユーザーとグループがどのリソースを制御するかは確定しません。 このため、システム管理者は、ファイルパーミッションのアプリケーションを使う必要があります。

6.3.3.1. ファイルパーミッションアプリケーション

ファイルのパーミッションは、組織内でリソースを管理するために欠くことができない部分です。 次の表では、これらの作業に使用する一般的なコマンドラインツールのいくつかを説明しています。

アプリケーション機能
chgrp特定ファイルを所有するグループを変更します。
chmod特定ファイルのアクセスパーミッションを変更します。 特殊パーミッションの割り当ても可能です。
chownファイルの所有権を変更します(グループの変更も可能)。

表 6-4. パーミッション管理コマンドラインツール

また、こうした属性をGNOMEやKDEのグラフィック環境で変更することも可能です。 ファイルのアイコンの上で右クリックして(例、グラフィカルファイルマネージャまたは デスクトップ上に表示されているアイコン)、Properties を選択します。

注記

[1]

GECOSは、General Electric Comprehensive Operating Supervisor の略です。オリジナルの UNIX 実装では、このフィールドは Bell Lab で使用されていました。この lab には、GECOS を実行するものなど多種多様なコンピュータがありました。UNIX システムが GECOS システムにバッチや印刷ジョブを送信するときに、このフィールドは情報を保存するのに使用されていました。