概要
Linux システムでは、ファイルやディレクトリのアクセス制御を行うために、ファイルの権限、所有者、所有グループが使用されます。 本記事では、これらの概念について詳しく説明し、具体的な使用方法を紹介します。
ファイルの所有者
ファイルやディレクトリの所有者は、そのリソースを作成したユーザーです。所有者は、ファイルやディレクトリの権限を変更することもできます。これにより、そのリソースに対する他のユーザーのアクセス権を制御することができます。
ファイルの所有グループ
所有グループは、特定のグループに対してファイルやディレクトリのアクセス権を管理するために使用されます。グループに属するユーザーは、そのグループに設定された権限に基づいてファイルやディレクトリにアクセスできます。
ファイルの権限
ファイルの権限 (パーミッション) は、ファイルやディレクトリに対する読み取り (read)、書き込み (write)、実行 (execute) のアクセス権を定義します。各ファイルには、所有者 (user)、所有グループ (group)、その他のユーザー (others) の 3 つのカテゴリに対して権限が設定されています。
権限の種類
| 権限 | ファイルの場合 | ディレクトリの場合 |
|---|---|---|
| 読み取り (r) | ファイルの内容を読み取る権限 | ディレクトリ内のファイルリストを表示する権限 |
| 書き込み (w) | ファイルの内容を変更する権限 | ディレクトリ内のファイルを作成、削除、名前変更する権限 |
| 実行 (x) | ファイルを実行する権限 | ディレクトリを開いてアクセスする権限 |
権限の数値表現
権限の数値表現とは、所有者 (user)、所有グループ (group)、その他のユーザー (others) の 3 つの権限を 3 桁の 8 進数で表現したものです。
各桁の意味は以下のようになります。
- 1 桁目: 所有者 (user) の権限
- 2 桁目: グループ (group) の権限
- 3 桁目: その他のユーザー (others) の権限
各桁の値は、以下のように対応します。:
| 数値 (10 進数) | 数値 (2 進数) | 権限 |
|---|---|---|
| 0 | 000 | — |
| 1 | 001 | –x |
| 2 | 010 | -w- |
| 3 | 011 | -wx |
| 4 | 100 | r– |
| 5 | 101 | r-x |
| 6 | 110 | rw- |
| 7 | 111 | rwx |
例えば、権限が 755 の場合、それぞれの桁の意味は次の通りです:
- 7: 所有者は読み取り (4)、書き込み (2)、実行 (1) の全ての権限を持つ (4 + 2 + 1 = 7)。
- 5: グループは読み取り (4) と実行 (1) の権限を持つ (4 + 1 = 5)。
- 5: その他のユーザーも読み取り (4) と実行 (1) の権限を持つ (4 + 1 = 5)。
ls, stat コマンド: 権限を確認する
ファイルの権限は、ls -lコマンドを使用して表示できます。
$ ls -l
-rw-r--r-- 1 user group 1234 Jan 27 15:00 example.txt
この出力の各部分の意味は以下の通りです:
-rw-r--r--: ファイルの種類と権限- 最初の文字 (
-) はファイルの種類を示します (-は通常のファイル、dはディレクトリ)。 - 次の 3 文字 (
rw-) は所有者の権限を示します。 - 次の 3 文字 (
r--) は所有グループの権限を示します。 - 最後の 3 文字 (
r--) はその他のユーザーの権限を示します。
- 最初の文字 (
1: ハードリンクの数user: ファイルの所有者group: ファイルの所有グループ1234: ファイルのサイズ (バイト単位)Jan 27 15:00: 最終更新日時example.txt: ファイル名
権限を数値で表示する場合、stat コマンドを使用します。
$ stat -c "%a %n" example.txt
644 example.txt
この出力は、example.txt の権限が 644 であることを示しています。
chmod コマンド: 権限を変更する
ファイルの権限は、chmod コマンドを使用して変更できます。
以下に、chmod コマンドの使用例を示します:
| オプション | 説明 |
|---|---|
| -R | ディレクトリ内の全てのファイルに対して再帰的に権限を変更します |
| -v | 権限変更が成功したファイルやディレクトリの情報を詳細に表示します |
| -c | 権限が変更されたファイルやディレクトリの情報を表示します |
| –reference | 指定したファイルと同じ権限を他のファイルやディレクトリに適用します |
| -f | 権限変更に関するエラーメッセージを表示しません |
数値で指定する
先ほど説明した数値で所有者、所有グループ、その他のユーザーの権限を一度に指定する方法です。
# 所有者に読み取り、書き込み、実行権限を与え、グループとその他のユーザーに読み取り権限を与える
chmod 744 example.txt
記号で指定する
記号を使った指定方法では、以下の記号を使って権限を指定します:
- 対象
u: 所有者 (user)g: グループ (group)o: その他のユーザー (others)a: 全てのユーザー (all users)
- 追加、削除、設定
+: 権限を追加-: 権限を削除=: 権限を設定
- アクセス権
r: 読み取り (read)w: 書き込み (write)x: 実行 (execute)
# example.txt の所有者に書き込み権限を追加
chmod u+w example.txt
# example.txt のグループとその他のユーザーから実行権限を削除
chmod go-x example.txt
# example.txt の全てのユーザーに読み取り権限のみを設定
chmod a=r example.txt
chown コマンド: 所有者、所有グループを変更する
ファイルの所有者と所有グループは、chown コマンドを使用して変更できます。
以下に、chown コマンドの使用例を示します:
| オプション | 説明 |
|---|---|
| -R, –recursive | 指定したディレクトリとその中のすべてのファイル、サブディレクトリに対して再帰的に変更を適用します |
| -v, –verbose | 変更が行われたファイルやディレクトリの情報を詳細に表示します |
| -c, –changes | 変更が行われたファイルやディレクトリの情報を表示します |
| -f, –silent, –quiet | エラーメッセージを表示しません |
| –reference=RFILE | 指定したファイル (RFILE) と同じ所有者とグループを使用します |
| –no-dereference | シンボリックリンク自身の所有者を変更します (リンク先のファイルを変更しません) |
# ファイルの所有者を変更する
sudo chown newuser example.txt
# ファイルの所有者と所有グループを変更する
sudo chown newuser:newgroup example.txt
chgrp コマンド: 所有グループを変更する
ファイルの所有グループのみを変更する場合は、chgrpコマンドを使用します:
| オプション | 説明 |
|---|---|
| -R, –recursive | 指定したディレクトリとその中のすべてのファイル、サブディレクトリに対して再帰的に変更を適用します。 |
| -v, –verbose | 変更が行われたファイルやディレクトリの情報を詳細に表示します。 |
| -c, –changes | 変更が行われたファイルやディレクトリの情報を表示します。 |
| -f, –silent, –quiet | エラーメッセージを表示しません。 |
| –reference=RFILE | 指定したファイル (RFILE) と同じグループを使用します。 |
| –no-dereference | シンボリックリンク自身のグループを変更します (リンク先のファイルを変更しません)。 |
# ファイルの所有グループを変更する
sudo chgrp newgroup example.txt
umask コマンド: 権限のデフォルト値を設定する
umask は、新しく作成されるファイルやディレクトリのデフォルトの権限を制御するために使用されます。
umask で設定された値は、ファイルやディレクトリのデフォルトの権限から引かれるマスク値です。
デフォルトの権限
- 新規ファイルのデフォルトの権限は通常
666です (読み取りと書き込みが可能)。 - 新規ディレクトリのデフォルトの権限は通常
777です (読み取り、書き込み、実行が可能)。
umask の設定
umask コマンドの出力は、3 桁の 8 進数で表されます。各桁はそれぞれ所有者、グループ、その他のユーザーの権限を表します。
例えば、umask 022 は次のように解釈されます:
- 0: 所有者に対しては制限なし。
- 2: グループから書き込み権限を取り除く。
- 2: その他のユーザーから書き込み権限を取り除く。
この場合、新規に作成されるファイルの権限は 666 - 022 = 644 となり、新規ディレクトリの権限は 777 - 022 = 755 となります。
umask の確認と設定
現在の umask の値を確認するには、以下のコマンドを使用します:
$ umask
0022
umask の値を設定するには、以下のようにします:
# 新規ファイルのデフォルト権限を644 (-rw-r--r--)、ディレクトリのデフォルト権限を755 (drwxr-xr-x) に設定
umask 022
umask の設定の有効範囲
umask コマンドで設定された値は、設定したシェルセッションの間有効です。つまり、シェルセッションが終了するか、新しいシェルセッションを開始するまで、その値は維持されます。ログインし直すとリセットされてしまうため、恒久的に設定したい場合は、~/.bashrc や ~/.profile に umask <数値> を追記します。

コメント