この節は注意してよく読んでください。日常のファイル操作では、ファイルのアクセス権を正確に理解しておく必要があります。
ファイルのアクセス権は、ファイルとディレクトリを許可なく読み書きされないように保護します。他のユーザに対してファイルの読み取りは許可しても変更は許可したくない場合があります。また、実行可能ファイル (プログラム) を共有したい場合もあります。このような場合、ファイルのアクセス権を利用して、ファイルに対するアクセスを管理できます。
ファイルとディレクトリに関する基本的なアクセス権の種類は次のとおりです。
r - 読み取り権。ファイルの内容を参照したりコピーしたりするには、そのファイルが読み取り可能でなければなりません。また、ディレクトリの内容を表示するには、そのディレクトリが読み取り可能でなければなりません。
w - 書き込み権。ファイルを変更、削除したり、ファイル名を変更するには、そのファイルが書き込み可能でなければなりません。また、ディレクトリ内のファイルを追加したり削除したりするには、そのディレクトリが書き込み可能でなければなりません。
x - 実行権。実行権付きのファイル (プログラムなど) は実行することができます。ユーザがディレクトリの任意のサブディレクトリにアクセスするには、そのディレクトリが実行可能でなければなりません。
アクセス権の設定対象となるユーザは、次の 3 つに分類できます。
所有者 - ユーザ自身
グループ - 所有者と同じグループに属するユーザ (例: アカウントを持つすべてのユーザ)。グループの作成と管理は、システム管理者が行います。
他のユーザ - 上記以外の全ユーザ
ls コマンドを使ってファイルを一覧表示してみます。ls コマンドには多数のオプションがあります。詳細形式の一覧を表示するには、-l オプションを使います。ファイルとディレクトリはアルファベット順に表示されます。このオプションを使って表示したファイル一覧の例を図 3-2 に示します。
各行の最初の文字は、ファイル形式を示します。ダッシュ (-) は通常ファイル、d はディレクトリ、その他の文字は特殊なファイル形式を表します。
次の 9 文字は、ファイルやディレクトリのアクセス権を示します。これら 9 文字は、3 文字ずつの 3 つのグループから構成され、それぞれ所有者、所有者のグループ、その他の全ユーザのアクセス権を表します。たとえば、emptyfile のアクセス権は、rw-r--r-- となっています。このファイルの場合、所有者は読み取りと書き込みが行え、すべてのユーザは読み取りだけは行えますが、どのユーザも実行はできません。また、ディレクトリ veggies2 のアクセス権は、rwxr-xr-x となっています。このディレクトリの場合、どのユーザでも読み取りと実行が行えますが、書き込みが行えるのは所有者に限られます。
ファイルのアクセス権の他に、上記のリストには次の情報が含まれています。
ファイルやディレクトリに対するリンクの数
所有者の名前 (この例では user2)
ファイルのバイト数 (文字数)
ファイルやディレクトリの最新更新日付と時間
ファイルやディレクトリの名前
cd コマンドを使って自分のホームディレクトリに移動し、ls -l コマンドを入力してみてください。表示される結果は上記の例とは当然異なります。
次に、以下のようなコマンドを入力してみます。
$ ls -l dirname |
dirname は、ユーザのファイルシステム内の実際のディレクトリ名です。ディレクトリ名を指定すると、ls -l コマンドは、そのディレクトリ内にあるディレクトリ (ただし、存在する場合だけ) とファイルに関する情報を出力します。
通常の ls コマンドでは表示されないファイルもあります。これらのファイルは、.cshrc、.login、.profile のように . (ドット) で始まる名前を持っています。このようなドットファイルを表示するには、ls -a コマンドを使います。
$ ls -a . .. .cshrc .login .profile emptyfile |
. で始まるファイルは、他のファイルよりも前に表示されることに注意してください。このリストには、2 つの特殊ファイルが表示されています。ファイル . はカレントディレクトリを示し、ファイル .. は親ディレクトリを示します。
一般に、. で始まるファイルはシステムユーティリティによって使われ、通常はユーザが変更するものではありません。ただし、少数ですが例外もあります。
ファイルやディレクトリのアクセス権を変更する場合は、chmod コマンドを使います。アクセス権を変更するには、そのファイルやディレクトリの所有者であるか、root にアクセスできる必要があります。chmod コマンドの一般的な形式は次のとおりです。
chmod permissions name |
permissions は変更用のアクセス権、name は影響を受けるファイルやディレクトリの名前を示します。
アクセス権を指定するには、いくつかの方法があります。ここでは最も簡単な方法を紹介します。
次の文字のどれかを使って関連するユーザを指定します。
u (所有者)
g (グループ)
o (他のユーザ)
a (上記 3 つのカテゴリの全ユーザ)
アクセス権を付加するか (+) 除去するか (-) を指定します。
次のいずれかの文字を使って関連するアクセス権を指定します。
r (読み取り)
w (書き込み)
x (実行)
次の例では、carrots ディレクトリに対する書き込み権を、同じグループに属するユーザに付与しています (つまり permissions は g+w、name は carrots)。
$ 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 に変更されています。
この同じディレクトリに対する読み取り権と実行権を、グループに属さない他のユーザから除去するには (permissions は o-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 内の全ファイルのアクセス権を変更して、所有者だけがファイルの書き込みをできるようにする場合は、次のように入力します。
上記の例では、この chmod 操作をこれからどのディレクトリで実行するのか確認する必要があることを示すために、pwd コマンドを最初に実行しています。
アクセス権に関する前節までの説明では、chmod コマンドを使って現在のアクセス権の設定を相対的に変更する方法だけを取り扱ってきました。chmod コマンドの別の方法を使うことによって、ファイルやディレクトリの絶対的なアクセス権を設定できます。この方法では、アクセス権を指定する数値コードを使います。
この形式の chmod コマンドの構文は次のとおりです。
chmod numcode name
numcode は数値コード、name はアクセス権が変更されるファイルやディレクトリの名前です。
数値コードは、3 つの数字からなります。1 つの数字が 3 つのユーザカテゴリ (所有者、グループ、他のユーザ) の各々に適用されます。たとえば、次のコマンドは、所有者とグループに対して読み取り権、書き込み権、実行権の絶対アクセス権を設定し、他のユーザに対して実行権だけを設定しています。
$ chmod 771 garlic |
表 3-1 は、garlic のアクセス権が 771 というコードによって、どのように表現されるかを示しています。
表 3-1 garlic のアクセス権
アクセス権 |
所有者 |
グループ |
他のユーザ |
---|---|---|---|
読み取り権 |
4 |
4 |
0 |
書き込み権 |
2 |
2 |
0 |
実行権 |
1 |
1 |
1 |
合計 |
7 |
7 |
1 |
表 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 のアクセス権
アクセス権 |
所有者 |
グループ |
他のユーザ |
---|---|---|---|
読み取り権 |
4 |
4 |
4 |
書き込み権 |
2 |
0 |
0 |
実行権 |
1 |
1 |
1 |
合計 |
7 |
5 |
5 |
また、ファイル 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 のアクセス権
アクセス権 |
所有者 |
グループ |
他のユーザ |
---|---|---|---|
読み取り権 |
4 |
4 |
4 |
書き込み権 |
2 |
2 |
2 |
実行権 |
1 |
1 |
1 |
合計 |
7 |
7 |
7 |
777 という数値コードが、指定できる最大のアクセス権の値です。
相対アクセス権の変更の場合と同様に、ワイルドカード文字の * を使ってカレントディレクトリ内の全ファイルの絶対アクセス権を設定することもできます。たとえば、カレントディレクトリ veggies 内の全ファイルに絶対アクセス権を設定することで、所有者は読み取り権と書き込み権と実行権、グループは読み取り権と実行権、他のユーザは実行権だけを持つようにするには、次のように入力します。
上記の例では、この chmod 操作をこれからどのディレクトリで実行するのか確認する必要があることを示すために、pwd コマンドを最初に実行しています。最初の ls -l コマンドは、アクセス権の変更結果を明らかにするために実行しています。相対アクセス権とは違って、絶対アクセス権を設定するときは、アクセス権の現在の設定状態を知る必要はありません。
chmod コマンドについての詳細は、『SunOS リファレンスマニュアル』のセクション 1「ユーザコマンド」を参照してください。