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

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

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

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

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

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

ファイルとディレクトリの詳細一覧をアルファベット順に出力するには、-l を指定して ls コマンドを実行します。

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

次のコンテキストは、画面の出力について説明しています。

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

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

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

ディレクトリ名を指定すると、ls -l コマンドは、そのディレクトリ内にあるディレクトリとファイルに関する情報を出力します。

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

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


$ ls -a

.

..

.cshrc

.login

.profile

emptyfile

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

一般に、. で始まるファイルはシステムユーティリティによって使われ、通常はユーザが変更するものではありません。この規則には例外もいくつかあります。

アクセス権の変更 (chmod)

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


chmod permissions name

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

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

  1. 次の文字のどれかを使ってユーザのタイプを指定します。

    • u (所有者)

    • g (グループ)

    • o (ほかのユーザ)

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

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

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

    • r (読み取り)

    • w (書き込み)

    • x (実行)

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


$ cd veggies2

$ ls -l

drwxr-xr-x   2 user2    users        512 Nov  1 09:11 carrots

$ chmod g+w carrots

$ ls -l

drwxrwxr-x   2 user2    users        512 Nov  1 09:11 carrots

$

上記の例の chmod g+w carrots コマンドは、ファイル carrots に対する書き込み権をこのグループに与えます。グループのアクセス権のハイフン (-) が w に変わっています。

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


$ ls -l

drwxrwxr-x   2 user2    users        512 Nov  1 09:11 carrots

$ chmod o-rx carrots

$ ls -l

drwxrwx---   2 user2    users        512 Nov  1 09:11 carrots

$

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

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

-rw-r--r--

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

drwxr-xr-x

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


$ ls -l turnip

-rw-r--r--   1 user2    users        124 Nov  1 09:14 turnip

$ chmod u+x turnip

$ ls -l turnip

-rwxr--r--   1 user2    users        124 Nov  1 09:14 turnip

$

3 つのカテゴリのすべてのユーザについてアクセス権を変更するには、chmod コマンドに -a オプションを指定します。garlic という新規ファイルの実行権を全ユーザに与えるには、次のように入力します。


$ ls -l garlic

-rw-r--r--   1 user2    users        704 Nov  1 09:16 garlic

$ chmod a+x garlic

$ ls -l garlic

-rwxr-xr-x   1 user2    users        704 Nov  1 09:16 garlic

$

ls -l コマンドの出力に表示されている x は、全ユーザが garlic を実行できることを示します。

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


$ pwd

/home/user2/veggies

$ ls -l

-rwxrwxrwx   1 user2    users       5618 Nov  1 09:18 beets

-rwxrwxrwx   1 user2    users       1777 Nov  1 09:18 corn

-rwxrwxrwx   1 user2    users       3424 Nov  1 09:18 garlic

-rwxrwxrwx   1 user2    users      65536 Nov  1 09:18 onions

$ chmod go-w *

$ ls -l

total 152

-rwxr-xr-x   1 user2    users       5618 Nov  1 09:18 beets

-rwxr-xr-x   1 user2    users       1777 Nov  1 09:18 corn

-rwxr-xr-x   1 user2    users       3424 Nov  1 09:18 garlic

-rwxr-xr-x   1 user2    users      65536 Nov  1 09:18 onions

$

注 –

chmod は、現在のディレクトリでだけ実行してください。


絶対アクセス権の設定

前節では、chmod コマンドを使用してファイルアクセス権を現在の設定に対して相対的に変更する方法を説明しました。chmod コマンドに数字コードを指定することにより、ファイルまたはディレクトリのアクセス権を設定することもできます。

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

chmod numcode name

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

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


$ chmod 771 garlic

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

表 3–2 garlic のアクセス権

アクセス権 

ユーザー 

グループ 

その他のユーザー 

読み取り 

書き込み 

実行 

合計 

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

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


$ ls -l onions

-rwxr-xr-x   1 user2    users      65536 Nov  1 09:18 onions

$ chmod 755 onions

$ ls -l onions

-rwxr-xr-x   1 user2    users      65536 Nov  1 09:18 onions

$

chmod 755 onions と入力すると、ファイル onions のアクセス権を、そのユーザには読み取り、書き込み、実行可能、グループメンバーには読み取りと実行可能、その他のユーザには読み取りと実行可能に設定できます。表 3–3 に、onions に対するアクセス権を設定するのに使用する数値コードを示します。

表 3–3 onion のアクセス権

アクセス権 

ユーザー 

グループ 

その他のユーザー 

読み取り 

書き込み 

実行 

合計 

所有者、グループ、およびその他のユーザ全員にファイル cabbage に対する読み取り、書き込み、および実行の権限を与えるには、次のように指定します。


$ ls -l cabbage

-rw-r--r--   1 user2    users         75 Nov  1 09:28 cabbage

$ chmod 777 cabbage

$ ls -l cabbage

-rwxrwxrwx   1 user2    users         75 Nov  1 09:28 cabbage

$

表 3–4 は、上記の例でアクセス権設定に使用されている数値コードを示しています。

表 3–4 cabbage のアクセス権

アクセス権 

ユーザー 

グループ 

その他のユーザー 

読み取り 

書き込み 

実行 

合計 

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

相対アクセス権の変更の場合と同様に、ワイルドカード文字の * を使って現在のディレクトリ内の全ファイルの絶対アクセス権を設定することもできます。たとえば、次に示すように、現在のディレクトリ内のすべてのファイルについて絶対的なアクセス権を設定するとします。

これらのアクセス権を設定するには、次のように入力します。


$ pwd

/home/user2/veggies

$ ls -l

-rwxrwxrwx   1 user2    users       5618 Nov  1 09:18 beets

-rwxrwxrwx   1 user2    users       1777 Nov  1 09:18 corn

-rwxrwxrwx   1 user2    users       3424 Nov  1 09:18 garlic

-rwxrwxrwx   1 user2    users      65536 Nov  1 09:18 onions

$ chmod 751 *

$ ls -l

-rwxr-x--x   1 user2    users       5618 Nov  1 09:18 beets

-rwxr-x--x   1 user2    users       1777 Nov  1 09:18 corn

-rwxr-x--x   1 user2    users       3424 Nov  1 09:18 garlic

-rwxr-x--x   1 user2    users      65536 Nov  1 09:18 onions

$

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

chmod(1) コマンドについての詳細は、『man pages section 1: User Commands』を参照してください。