Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

chmod

ファイルのアクセス権を変更する
2015/05/20 08:00

対応OS: linux , freebsd, solaris
chmod [-f] [-R] MODE FILE...

 ファイルやディレクトリにはアクセス権(パーミッション)があり、そのファイルやディレクトリを操作するユーザが、そのファイルやディレクトリの所有者の場合、ファイルやディレクトリが所属するグループに属しているユーザの場合、それ以外の場合によって、操作できる内容

 を制限できます。

 chmodコマンドは、FILE...に指定したファイルあるいはディレクトリのアクセス権を変更します。変更内容はMODEで指定します。

 一般ユーザは、所有するファイルやディレクトリのアクセス権しか変更できませんが、スーパーユーザは、すべてのファイルやディレクトリのアクセス権を変更できます。

アクセス権(パーミッション)

 アクセス権とは、ファイルやディレクトリに対して行う操作の権限で、読み込み権、書き込み権、実行権の3つがあります。

 読み込み権は、ファイルの場合は、そのファイルやディレクトリの内容を参照する権限です。例えば、catコマンドを実行して、読み込み権がないファイルの内容を表示したり、lsコマンドを実行して、読み込み権のないディレクトリの内容を表示することはできません。

 書き込み権は、ファイルを更新したり、ディレクトリ内にファイルを追加したりといったことを行う権限です。

 実行権は、シェルスクリプトや実行可能形式のファイルを実行したりする権限です

HINT!

 一般に、ファイルやディレクトリの所有者のことを「所有者」といい、ファイルやディレクトリが所属するグループに属するユーザのことを「グループ」といい、その他のユーザのことを「その他」といいます。

 グループ

オプション
① -f
FILE...に、アクセス権を変更できないファイルを指定した場合でも、エラーが発生しないようにします(変更は行われない)。
② -R
FILE...にディレクトリを指定した場合に、その中に含まれるファイルやサブディレクトリの所属するグループも変更します。
引数
① MODE
アクセス権の変更内容を表す3文字の文字列を指定します。この文字列は、変更するユーザを表す文字と、変更方法を表す文字と、アクセス権を表す文字の3文字からなります。それぞれの文字は次のとおりです。
アクセス権の変更内容を表すそれぞれの文字
文字内容
変更するユーザを表す文字
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権限なし
HINT!

 3文字の文字列による指定では、変更内容がわかりやすいといった利点がありますが、各ユーザについて、一度にバラバラの設定を行うといったことができません。それに対して3桁の8進数での指定では、バラバラの設定でも一度にできる利点がありますが、慣れるまでは変更内容がわかりにくい欠点があります。

 ケースバイケースで使い分けるとよいでしょう

② FILE...
アクセス権を変更するファイルやディレクトリのパスをスペースで区切って指定します。ワイルドカードによる指定も可能です。
グループの書き込み権を剥奪する
$ 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
$
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 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
$
HINT!

 lsコマンド

UNIXシステムはマルチアカウント

 UNIXシステムというのは、マルチアカウントという優れた機能を持っています。一度に大勢の人が同時にUNIXシステムを使えるということですが、だからこそ権限については厳しくなっています。権限は所有者、グループ所有者、第三者という切り分けで管理され、細かく設定することが可能です。Linuxシステムでユーザを追加すると指定がなければグループは新たに作成され、1ユーザ1グループの環境になってしまいます。これではグループを持つ意味がなくなってしまいます。スーパーユーザはアカウント追加の時に、同じ作業をする人、同じサークルの人など、ある括りでグループを設定することが必要であると思います。そうすることによって、グループ内で共通のファイルなどを管理しやすくなり、間違いも起こらないからです。自分のファイルを他のグループの人に修正してもらう時にいちいち権限を付けていたのでは効率が悪いですし、第三者に権限を与えておくというのはセキュリティ上望ましくありません。しっかりとしたアカウント管理が必要だということです。

関連タグ

UNIXコマンド辞典トップページに戻る

All contents copyright © 2005-2017 Shoeisha Co., Ltd. All rights reserved. ver.1.5