3.2 ユーザとアクセス権

1990年代初期の開始以来、Linuxはマルチユーザシステムとして開発が進められてきました。任意の数のユーザがLinux上で同時に作業することができます。ユーザは各自のワークステーションでセッションを開始する前に、システムにログインする必要があります。各ユーザは、各自のユーザ名およびそれに対応するパスワードを持っています。このようにユーザが区別されているので、権限のないユーザが、アクセス権のないファイルを表示できないことが保証されています。新しいプログラムをインストールするなど、より大きな変更をシステムに加える作業は、一般のユーザは通常は実行できないか、制約を加えられています。rootユーザ、またはスーパユーザだけが、システムに変更を加える制限なしの権限と、すべてのファイルに対する制限なしのアクセス権を持っています。この概念を理解した上で、必要な場合にのみrootユーザでログインし、完全なアクセス権を使用することが求められます。その結果、意図せずにデータを失うリスクを軽減することができます。一般的な状況では、システムファイルの削除やハードディスクのフォーマットを実行できるのはrootユーザだけです。そのため、一般ユーザとしてログインしていれば、トロイの木馬や、破壊的なコマンドを誤って入力することに起因する脅威を大幅に軽減できます。

3.2.1 ファイルシステムのパーミッション

基本的に、Linuxファイルシステム内にある各ファイルは、1人のユーザと1つのグループに所属しています。この所有グループと他のすべてのユーザに対して、これらのファイルへの書き込み、読み取り、または実行を許可することができます。

この状況では、グループとは、特定のいくつかの権利を共通に持つ、互いに関連付けられた一連のユーザと定義することができます。たとえば、あるプロジェクトに携わっているグループをproject3と呼ぶことにします。Linuxシステム内のあらゆるユーザは、少なくとも1つの所有グループ、通常はusersグループのメンバに所属します。1つのシステム内に、必要に応じてグループをいくつ作成してもかまいませんが、グループを追加できるのはrootユーザだけです。どのユーザも、groupsコマンドを使用して、自分が所属しているグループを確認することができます。

ファイルアクセス

ファイルシステム内でのパーミッション(アクセス権)の編成は、ファイルごと、ディレクトリごとに異なります。ファイルのパーミッション情報は、ls -lコマンドを使用して表示できます。出力例については、例 3.1. 「ファイルパーミッションを示すサンプル出力」を参照してください。

例 3.1 ファイルパーミッションを示すサンプル出力

-rw-r----- 1 tux project3 14197 Jun 21  15:03 Roadmap

3番目の列が示しているように、このファイルはユーザtuxに所属しています。また、このファイルはグループproject3に対して割り当てられています。Roadmapファイルのユーザパーミッションを調べるには、最初の列を詳細に検討する必要があります。

-

rw-

r--

---

タイプ

ユーザパーミッション

グループパーミッション

他のユーザのパーミッション

この列は、先頭に1つの文字があり、その後に3文字ずつ3つのブロック、つまり9つの文字が続く構成です。10文字のうち最初の1文字は、ファイルシステムコンポーネントのタイプを表す略称です。ダッシュ()は、これがファイルであることを意味します。ディレクトリ(d)、リンク(l)、ブロックデバイス(b)、またはキャラクタデバイスが代わりに表示されることもあります。

続く3つのブロックは、標準的なパターンに従っています。各ブロックの最初の文字は、ファイルが読み取り可能(r)またはそうでないこと()を意味します。中間の位置にあるwは、対応するオブジェクトが編集可能であることを示し、ダッシュ()であれば、ファイルへの書き込みが不可能であることを意味します。3番目の位置にあるxは、そのオブジェクトが実行可能であることを意味します。この例のファイルはテキストファイルなので、実行可能ではありません。したがって、この特定のファイルに対する実行可能アクセス権は必要ありません。

この例では、tuxRoadmapファイルの所有者として、読み取りアクセス権(r)および書き込みアクセス権(w)を持っていますが、このファイルを実行する(x)ことはできません。project3グループのメンバは、このファイルを読み取ることはできますが、変更や実行はできません。他のユーザは、このファイルに対するアクセス権が何もありません。他のパーミッションは、アクセス制御リスト(ACL)を使用して割り当てることができます。

ディレクトリパーミッション

ディレクトリに対応するアクセス権は、タイプがdと表示されています。ディレクトリの場合、個別のパーミッションは、やや異なる意味を持ちます。

例 3.2 ディレクトリパーミッションを示すサンプル出力

drwxrwxr-x 1 tux project3 35 Jun 21 15:15  ProjectData

例 3.2. 「ディレクトリパーミッションを示すサンプル出力」では、ディレクトリProjectDataの所有者(tux)と所有グループ(project3)を簡単に識別できます。ファイルアクセス で説明したファイルのアクセス権(パーミッション)とは異なり、読み取りアクセス権(r)を持つことは、ディレクトリの内容を表示できることを意味します。書き込みアクセス権(w)の場合は、新しいファイルを作成できることを意味します。実行可能アクセス権(x)の場合は、ユーザがこのディレクトリに変更を加えられることを意味します。上記の例では、ユーザtuxproject3グループのメンバがProjectDataディレクトリに変更を加え(x)、内容を表示し(r)、このディレクトリにファイルを追加する(w)ことができることを表します。一方、他のユーザに対して与えられているのは、それより少ないアクセス権です。このディレクトリにアクセスし(x)、内容を閲覧する(r)ことはできますが、新しいファイルを作成する(w)ことはできません。

3.2.2 ファイルパーミッションの変更

アクセス権の変更

ファイルまたはディレクトリに対するアクセス権を変更できるのは、所有者とrootユーザです。 chmodコマンドで、パーミッションを変更するパラメータと1つ以上のファイル名を指定することにより変更します。パラメータは、次のカテゴリに分けられます。

  1. 対象ユーザ

    • u (ユーザ)—ファイルの所有者

    • g (グループ)—ファイルの所有者が所属するグループ

    • o (その他)—その他のユーザ(パラメータが何も指定されていない場合、変更はすべてのカテゴリに対して適用されます)

  2. 削除 ()、セット(=)、または挿入(+)を表す文字

  3. 略称

    • r読み取り

    • w書き込み

    • x実行

  4. 空白によって区切られた1つ以上のファイル名

たとえば、例 3.2. 「ディレクトリパーミッションを示すサンプル出力」で、tuxユーザが、その他のユーザに対してProjectDataディレクトリへの書き込み(w)アクセス権を許可する場合、chmod o+w ProjectDataコマンドを使用します。

また、自分以外のユーザに対する書き込みパーミッションを拒否する場合は、chmod go-w ProjectDataコマンドを入力します。すべてのユーザに対して、ProjectDataディレクトリに新しいファイルを追加することを禁止するには、chmod -w ProjectDataと入力します。その場合、このディレクトリの所有者であっても、最初に書き込みパーミッションを再確立するまでは、このディレクトリ内でファイルを作成することができません。

所有に関するパーミッションの変更

ファイルシステムコンポーネントの所有に関するパーミッションを制御する他の重要なコマンドは、chown (change owner)コマンドとchgrp(change group)コマンドです。chownコマンドを使用すると、ファイルの所有権を他のユーザに移すことができます。しかし、このような変更を行うことができるのは、rootユーザだけです。

例 3.2. 「ディレクトリパーミッションを示すサンプル出力」Roadmapファイル所有権を、tuxではなく、geekoユーザにするとします。その場合、rootユーザで、chown geeko Roadmapコマンドを入力します。

chgrpコマンドは、ファイル所有者の所属グループを変更します。ただし、そのファイルの所有者は、新しいグループのメンバでなければなりません。この方法により、例 3.1. 「ファイルパーミッションを示すサンプル出力」tuxユーザは、chgrp project4 ProjectDataコマンドを使用して、ProjectDataファイル所有者の所属グループをproject4に切り替えることができます。ただし、このユーザが、この新しいグループのメンバであることが条件です。