OpenWindows ユーザーズガイド (上級編)

ファイルとディレクトリのセキュリティ


注 -

この節は注意してよく読んでください。日常のファイル操作では、ファイルのアクセス権を正確に理解しておく必要があります。


ファイルのアクセス権は、ファイルとディレクトリを許可なく読み書きされないように保護します。他のユーザに対してファイルの読み取りは許可しても変更は許可したくない場合があります。また、実行可能ファイル (プログラム) を共有したい場合もあります。このような場合、ファイルのアクセス権を利用して、ファイルに対するアクセスを管理できます。

ファイルとディレクトリに関する基本的なアクセス権の種類は次のとおりです。

アクセス権の設定対象となるユーザは、次の 3 つに分類できます。

アクセス権と状態の表示 (su ls -l)

ls コマンドを使ってファイルを一覧表示してみます。ls コマンドには多数のオプションがあります。詳細形式の一覧を表示するには、-l オプションを使います。ファイルとディレクトリはアルファベット順に表示されます。このオプションを使って表示したファイル一覧の例を図 3-2 に示します。

図 3-2 アクセス権とステータスの表示

Graphic

各行の最初の文字は、ファイル形式を示します。ダッシュ (-) は通常ファイル、d はディレクトリ、その他の文字は特殊なファイル形式を表します。

次の 9 文字は、ファイルやディレクトリのアクセス権を示します。これら 9 文字は、3 文字ずつの 3 つのグループから構成され、それぞれ所有者、所有者のグループ、その他の全ユーザのアクセス権を表します。たとえば、emptyfile のアクセス権は、rw-r--r-- となっています。このファイルの場合、所有者は読み取りと書き込みが行え、すべてのユーザは読み取りだけは行えますが、どのユーザも実行はできません。また、ディレクトリ veggies2 のアクセス権は、rwxr-xr-x となっています。このディレクトリの場合、どのユーザでも読み取りと実行が行えますが、書き込みが行えるのは所有者に限られます。

ファイルのアクセス権の他に、上記のリストには次の情報が含まれています。

cd コマンドを使って自分のホームディレクトリに移動し、ls -l コマンドを入力してみてください。表示される結果は上記の例とは当然異なります。

次に、以下のようなコマンドを入力してみます。

$ ls -l dirname

dirname は、ユーザのファイルシステム内の実際のディレクトリ名です。ディレクトリ名を指定すると、ls -l コマンドは、そのディレクトリ内にあるディレクトリ (ただし、存在する場合だけ) とファイルに関する情報を出力します。

隠しファイルの表示 (ls -a)

通常の ls コマンドでは表示されないファイルもあります。これらのファイルは、.cshrc.login.profile のように . (ドット) で始まる名前を持っています。このようなドットファイルを表示するには、ls -a コマンドを使います。

$ ls -a
.
..
.cshrc
.login
.profile
emptyfile

. で始まるファイルは、他のファイルよりも前に表示されることに注意してください。このリストには、2 つの特殊ファイルが表示されています。ファイル . はカレントディレクトリを示し、ファイル .. は親ディレクトリを示します。

一般に、. で始まるファイルはシステムユーティリティによって使われ、通常はユーザが変更するものではありません。ただし、少数ですが例外もあります。

アクセス権の変更 (chmod)

ファイルやディレクトリのアクセス権を変更する場合は、chmod コマンドを使います。アクセス権を変更するには、そのファイルやディレクトリの所有者であるか、root にアクセスできる必要があります。chmod コマンドの一般的な形式は次のとおりです。

chmod permissions name

permissions は変更用のアクセス権、name は影響を受けるファイルやディレクトリの名前を示します。

アクセス権を指定するには、いくつかの方法があります。ここでは最も簡単な方法を紹介します。

  1. 次の文字のどれかを使って関連するユーザを指定します。

    • u (所有者)

    • g (グループ)

    • o (他のユーザ)

    • a (上記 3 つのカテゴリの全ユーザ)

  2. アクセス権を付加するか (+) 除去するか (-) を指定します。

  3. 次のいずれかの文字を使って関連するアクセス権を指定します。

    • r (読み取り)

    • w (書き込み)

    • x (実行)

次の例では、carrots ディレクトリに対する書き込み権を、同じグループに属するユーザに付与しています (つまり permissionsg+wnamecarrots)。

$ ls -l carrots
drwxr-xr-x  3 user2           1024 Feb 10 11:15 carrots
$ chmod g+w carrots
$ ls -l carrots
drwxrwxr-x  3 user2           1024 Feb 10 11:15 carrots
$

例で示すように、グループのアクセス権のハイフン (-) が chmod コマンドの実行後は w に変更されています。

この同じディレクトリに対する読み取り権と実行権を、グループに属さない他のユーザから除去するには (permissionso-rx)、次のように入力します。

$ ls -l carrots
drwxrwxr-x  3 user2           1024 Feb 10 11:15 carrots
$ chmod o-rx carrots
$ ls -l carrots
drwxrwx---  3 user2           1024 Feb 10 11:15 carrots
$

他のユーザのアクセス権の r (読み取り権) と x (実行権) が、両方ともハイフン (-) に変更されたことが分かります。

新しいファイルやディレクトリを作成すると、アクセス権がシステムによって自動的に割り当てられます。

通常、新規ファイルに関するデフォルト設定は次のようになります。

-rw-r--r--

また、新規ディレクトリについては次のようになります。

drwxr-xr-x

したがって、turnip という新規ファイルをその所有者 (user2) が実行できるようにする場合は、次のように入力します。

$ ls -l turnip
-rw-r--r--  3 user2           1024 Feb 10 12:27 turnip
$ chmod u+x turnip
$ ls -l turnip
-rwxr--r--  3 user2           1024 Feb 10 12:27 turnip
$

3 つのカテゴリの全ユーザのアクセス権を変更する場合は、-a オプションを使います。たとえば、garlic という新規ファイルを全ユーザが実行できるようにするには、次のように入力します。

$ ls -l garlic
-rw-r--r--  3 user2           1024 Feb 10 11:31 garlic
$ chmod a+x garlic
$ ls -l garlic
-rwxr-xr-x  3 user2           1024 Feb 10 11:31 garlic
$

上記の chmod コマンドの結果、3 つのカテゴリの全ユーザに x (実行権) が与えられます。

ワイルドカード文字の * を使って、複数のファイルやディレクトリのアクセス権を変更することもできます。たとえば、カレントディレクトリ veggies 内の全ファイルのアクセス権を変更して、所有者だけがファイルの書き込みをできるようにする場合は、次のように入力します。

$ pwd
/home/user2/veggies
$ ls -l
-rwxrwxrwx  3 user2          21032 Feb 12 10:31 beats
-rwxrwxrwx  2 user2             68 Feb 10 11:09 corn
-rwxrwxrwx  3 user2          12675 Feb 08 09:31 garlic
-rwxrwxrwx  1 user2           1024 Feb 14 16:38 onions
$ chmod go-w *
$ ls -l
-rwxr-xr-x  3 user2          21032 Feb 12 10:31 beats
-rwxr-xr-x  2 user2             68 Feb 10 11:09 corn
-rwxr-xr-x  3 user2          12675 Feb 08 09:31 garlic
-rwxr-xr-x  1 user2           1024 Feb 14 16:38 onions
$

上記の例では、この chmod 操作をこれからどのディレクトリで実行するのか確認する必要があることを示すために、pwd コマンドを最初に実行しています。

絶対アクセス権の設定

アクセス権に関する前節までの説明では、chmod コマンドを使って現在のアクセス権の設定を相対的に変更する方法だけを取り扱ってきました。chmod コマンドの別の方法を使うことによって、ファイルやディレクトリの絶対的なアクセス権を設定できます。この方法では、アクセス権を指定する数値コードを使います。

この形式の chmod コマンドの構文は次のとおりです。

chmod numcode name

numcode は数値コード、name はアクセス権が変更されるファイルやディレクトリの名前です。

数値コードは、3 つの数字からなります。1 つの数字が 3 つのユーザカテゴリ (所有者、グループ、他のユーザ) の各々に適用されます。たとえば、次のコマンドは、所有者とグループに対して読み取り権、書き込み権、実行権の絶対アクセス権を設定し、他のユーザに対して実行権だけを設定しています。

$ chmod 771 garlic

表 3-1 は、garlic のアクセス権が 771 というコードによって、どのように表現されるかを示しています。

表 3-1 garlic のアクセス権

アクセス権 

所有者 

グループ 

他のユーザ 

読み取り権 

書き込み権 

実行権 

合計 

表 3-1 の各列は、所有者、グループ、他のユーザというユーザカテゴリにそれぞれ対応しています。読み取り権を設定するには、適切な列に 4 を挿入します。同様に、書き込み権を設定するには 2 を挿入し、実行権を設定するには 1 を挿入します。表の最終行に表示された各列のそれぞれの合計値が最終的な数値コードになります。

この方法によって絶対アクセス権を設定するもう 1 つの例を次に示します。ここでは chmod の結果を確認するために、ls -l コマンドを実行しています。

$ ls -l onion
-rw-r--r--  3 user2           1024 Feb 10 11:46 onion
$ chmod 755 onion
$ ls -l onion
-rwxr-xr-x  3 user2           1024 Feb 10 11:48 onion
$

ファイル onion のアクセス権は、所有者に対しては読み取り、書き込み、実行が可能、グループと他のユーザに対しては読み取りと実行が可能になるよう設定されています。onion のアクセス権の設定に使われた数値コードを表 3-2 にまとめます。

表 3-2 onion のアクセス権

アクセス権 

所有者 

グループ 

他のユーザ 

読み取り権 

書き込み権 

実行権 

合計 

また、ファイル cabbage に関する読み取り、書き込み、実行の全アクセス権を所有者、グループ、他のユーザに与える場合は、次のように入力できます。

$ ls -l cabbage
-rw-r--r--  3 user2           1024 Feb 10 11:51 cabbage
$ chmod 777 cabbage
$ ls -l cabbage
-rwxrwxrwx  3 user2           1024 Feb 10 11:53 cabbage
$

この例の数値コードを表 3-3 にまとめます。

表 3-3 cabbage のアクセス権

アクセス権 

所有者 

グループ 

他のユーザ 

読み取り権 

書き込み権 

実行権 

合計 

777 という数値コードが、指定できる最大のアクセス権の値です。

相対アクセス権の変更の場合と同様に、ワイルドカード文字の * を使ってカレントディレクトリ内の全ファイルの絶対アクセス権を設定することもできます。たとえば、カレントディレクトリ veggies 内の全ファイルに絶対アクセス権を設定することで、所有者は読み取り権と書き込み権と実行権、グループは読み取り権と実行権、他のユーザは実行権だけを持つようにするには、次のように入力します。

$ pwd
/home/user2/veggies
$ ls -l
-rwxrwxrwx  3 user2          21032 Feb 12 10:31 beats
-rwxrwxrwx  2 user2             68 Feb 10 11:09 corn
-rwxrwxrwx  3 user2          12675 Feb 08 09:31 garlic
-rwxrwxrwx  1 user2           1024 Feb 14 16:38 onions
$ chmod 751 *
$ ls -l
-rwxr-x--x  3 user2          21032 Feb 12 10:31 beats
-rwxr-x--x  2 user2             68 Feb 10 11:09 corn
-rwxr-x--x  3 user2          12675 Feb 08 09:31 garlic
-rwxr-x--x  1 user2           1024 Feb 14 16:38 onions
$

上記の例では、この chmod 操作をこれからどのディレクトリで実行するのか確認する必要があることを示すために、pwd コマンドを最初に実行しています。最初の ls -l コマンドは、アクセス権の変更結果を明らかにするために実行しています。相対アクセス権とは違って、絶対アクセス権を設定するときは、アクセス権の現在の設定状態を知る必要はありません。

chmod コマンドについての詳細は、『SunOS リファレンスマニュアル (1): ユーザーコマンド』を参照してください。