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