ファイルやディレクトリにはアクセス権(パーミッション)があり、そのファイルやディレクトリを操作するユーザが、そのファイルやディレクトリの所有者の場合、ファイルやディレクトリが所属するグループに属しているユーザの場合、それ以外の場合によって、操作できる内容
を制限できます。
chmodコマンドは、FILE...
に指定したファイルあるいはディレクトリのアクセス権を変更します。変更内容はMODE
で指定します。
一般ユーザは、所有するファイルやディレクトリのアクセス権しか変更できませんが、スーパーユーザは、すべてのファイルやディレクトリのアクセス権を変更できます。
アクセス権とは、ファイルやディレクトリに対して行う操作の権限で、読み込み権、書き込み権、実行権の3つがあります。
読み込み権は、ファイルの場合は、そのファイルやディレクトリの内容を参照する権限です。例えば、catコマンドを実行して、読み込み権がないファイルの内容を表示したり、lsコマンドを実行して、読み込み権のないディレクトリの内容を表示することはできません。
書き込み権は、ファイルを更新したり、ディレクトリ内にファイルを追加したりといったことを行う権限です。
実行権は、シェルスクリプトや実行可能形式のファイルを実行したりする権限です
一般に、ファイルやディレクトリの所有者のことを「所有者」といい、ファイルやディレクトリが所属するグループに属するユーザのことを「グループ」といい、その他のユーザのことを「その他」といいます。
- ① -f
FILE...
に、アクセス権を変更できないファイルを指定した場合でも、エラーが発生しないようにします(変更は行われない)。- ② -R
FILE...
にディレクトリを指定した場合に、その中に含まれるファイルやサブディレクトリの所属するグループも変更します。
- ① MODE
- アクセス権の変更内容を表す3文字の文字列を指定します。この文字列は、変更するユーザを表す文字と、変更方法を表す文字と、アクセス権を表す文字の3文字からなります。それぞれの文字は次のとおりです。
- ② FILE...
- アクセス権を変更するファイルやディレクトリのパスをスペースで区切って指定します。ワイルドカードによる指定も可能です。
文字 | 内容 |
---|---|
変更するユーザを表す文字 | |
u | 所有者のアクセス権を変更 |
g | グループのアクセス権を変更 |
o | その他のアクセス権を変更 |
a | すべてのユーザのアクセス権を変更 |
変更方法を表す文字 | |
+ | 現在のアクセス権に指定したアクセス権を追加 |
- | 現在のアクセス権から指定したアクセス権を制限(剥奪) |
= | 指定したアクセス権に変更 |
アクセス権を表す文字 | |
r | 読み込み権 |
w | 書き込み権 |
x | 実行権 |
例えば、「g+w」とすると、グループの現在のアクセス権に書き込み権を追加する(元々書き込み権がある場合にはそのまま)ことを表します。
また、変更後のアクセス権を表す3桁の8進数の値を指定することもできます。1桁目が所有者のアクセス権を、2桁目がグループのアクセス権を、3桁目がその他のアクセス権を表します。各桁の値は、読み込み権を表す4と、書き込み権を表す2と、実行権を表す1の和を指定します。例えば、読み込み権と実行権のみを与える場合には、4と1の和である「5」を指定します。それぞれの権限の組み合わせと、その値を下にまとめます。
アクセス権 | 値 |
---|---|
7 | すべての権限 |
6 | 読み込み権と書き込み権 |
5 | 読み込み権と実行権 |
4 | 読み込み権 |
3 | 書き込み権と実行権 |
2 | 書き込み権 |
1 | 実行権 |
0 | 権限なし |
3文字の文字列による指定では、変更内容がわかりやすいといった利点がありますが、各ユーザについて、一度にバラバラの設定を行うといったことができません。それに対して3桁の8進数での指定では、バラバラの設定でも一度にできる利点がありますが、慣れるまでは変更内容がわかりにくい欠点があります。
ケースバイケースで使い分けるとよいでしょう
$ ls -l
合計0
-rw-rw-r-- 1 cmd cmd 0 4月15 00:57 file01
-rw-rw-r-- 1 cmd cmd 0 4月15 00:57 file02
$ chmod g-w *
カレントディレクトリ内のすべてのファイルのグループの書き込み権を剥奪$ ls -l
合計0
-rw-r--r-- 1 cmd cmd 0 4月15 00:57 file01
-rw-r--r-- 1 cmd cmd 0 4月15 00:57 file02
$
$ ls -l
合計0
-rw-rw-r-- 1 cmd cmd 0 4月15 00:57 file01
-rw-rw-r-- 1 cmd cmd 0 4月15 00:57 file02
$ chmod 755 *
ユーザのアクセス権をすべての権限に、グループとその他のアクセス権を読み込み権と実行権に変更$ ls -l
合計0
-rwxr-xr-x 1 cmd cmd 0 4月15 00:57 file01
-rwxr-xr-x 1 cmd cmd 0 4月15 00:57 file02
$
lsコマンド
UNIXシステムというのは、マルチアカウントという優れた機能を持っています。一度に大勢の人が同時にUNIXシステムを使えるということですが、だからこそ権限については厳しくなっています。権限は所有者、グループ所有者、第三者という切り分けで管理され、細かく設定することが可能です。Linuxシステムでユーザを追加すると指定がなければグループは新たに作成され、1ユーザ1グループの環境になってしまいます。これではグループを持つ意味がなくなってしまいます。スーパーユーザはアカウント追加の時に、同じ作業をする人、同じサークルの人など、ある括りでグループを設定することが必要であると思います。そうすることによって、グループ内で共通のファイルなどを管理しやすくなり、間違いも起こらないからです。自分のファイルを他のグループの人に修正してもらう時にいちいち権限を付けていたのでは効率が悪いですし、第三者に権限を与えておくというのはセキュリティ上望ましくありません。しっかりとしたアカウント管理が必要だということです。
本コンテンツは「UNIXコマンド辞典 ビギナー編」(2003年)を元にWeb用に再編集したものです
All Contents copyright © 2003-2009 Odyssey Communications Inc., Shoeisha Co., Ltd.