第13章 ファイルシステムの権限の管理
ファイルシステムの権限は、ユーザーおよびグループアカウントがファイルの内容を読み取り、変更し、実行する権限、およびディレクトリーに入る権限を制御します。権限を慎重に設定して、不正アクセスからデータを保護します。
13.1. ファイル権限の管理
すべてのファイルまたはディレクトリーには、以下のレベルの所有権があります。
- ユーザー所有者 (u)。
- グループの所有者 (g)。
- その他 (o)。
各所有権レベルには、以下のパーミッションを割り当てることができます。
- 読み取り (r)。
- 書き込み (w)。
- 実行 (x)。
ファイルの execute 権限があると、そのファイルを実行するできることに注意してください。ディレクトリーの実行権限では、ディレクトリーのコンテンツにアクセスできますが、実行はできません。
新規ファイルまたはディレクトリーが作成されると、デフォルトのパーミッションセットが自動的に割り当てられます。ファイルまたはディレクトリーのデフォルトパーミッションは、以下の 2 つの要素に基づいています。
- 基本パーミッション。
- ユーザーのファイル作成モードマスク (umask)
13.1.1. ベースファイルのパーミッション
新規ファイルまたはディレクトリーが作成されるたびに、基本パーミッションが自動的に割り当てられます。ファイルまたはディレクトリーの基本パーミッションは、シンボリック または 8 進数 の値で表すことができます。
パーミッション | シンボリック値 | 8 進数値 |
パーミッションなし | --- | 0 |
実行 | --x | 1 |
書き込み | -w- | 2 |
書き込みおよび実行 | -wx | 3 |
読み取り | r-- | 4 |
読み取りおよび実行 | r-x | 5 |
読み取りおよび書き込み | rw- | 6 |
読み取り、書き込み、実行 | rwx | 7 |
ディレクトリーの基本パーミッションは 777
(drwxrwxrwx
) で、すべてのユーザーに読み取り、書き込み、実行権限を付与します。つまり,ディレクトリーの所有者、グループ、その他のユーザーはディレクトリーのコンテンツ表示、そのディレクトリーでの項目の作成、削除、編集、サブディレクトリーへの移動が可能です。
ディレクトリー内の個別ファイルには、ディレクトリーに無制限にアクセスできるにも拘らず、編集ができない独自のパーミッションが割り当てられている可能性があります。
ファイルの基本パーミッションは 666
(-rw-rw-rw-
) で、すべてのユーザーに読み取りおよび書き込み権限を付与します。ファイルの所有者、グループ、その他のユーザーは、ファイルの読み取りと編集が可能です。
例13.1 ファイルのパーミッション
ファイルに以下のパーミッションがある場合:
$ ls -l -rwxrw----. 1 sysadmins sysadmins 2 Mar 2 08:43 file
-
-
ファイルであることを示します。 -
rwx
は、ファイルの所有者にファイルの読み取り、書き込み、実行のパーミッションがあることを示します。 -
rw-
は、グループに読み取りと書き込みのパーミッションがあるが、ファイルの実行はできません。 -
---
は、他のユーザーにファイルの読み取り、書き込み、実行のパーミッションがないことを示します。 -
.
は、SELinux セキュリティーコンテキストがファイルに設定されていることを示しています。
例13.2 ディレクトリーのパーミッション
ディレクトリーに以下のパーミッションがある場合:
$ ls -dl directory drwxr-----. 1 sysadmins sysadmins 2 Mar 2 08:43 directory
-
d
は、ディレクトリーであることを示します。 rwx
は、ディレクトリーの所有者にディレクトリーの内容を読み取り、書き込み、およびアクセスするパーミッションがあることを示します。ディレクトリーの所有者は、ディレクトリー内のアイテム (ファイル、サブディレクトリー) を表示して、アイテムのコンテンツへのアクセスや変更が可能です。
-
r-x
は、そのグループがディレクトリーの内容を読み取るパーミッションを持っているが、書き込み (新しいエントリーの作成やファイルの削除) はできないことを示します。x
パーミッションは、cd
コマンドを使用してディレクトリーにアクセスできることを意味します。 ---
は、他のユーザーがディレクトリーの内容の読み取り、書き込み、またはアクセスパーミッションがないことを示します。ディレクトリーのユーザー所有者またはグループ所有者ではない場合に、そのディレクトリーのアイテムを表示したり、アイテムの情報にアクセスしたり、変更したりできません。
-
.
は、SELinux セキュリティーコンテキストがディレクトリーに設定されていることを示しています。
ファイルまたはディレクトリーに自動的に割り当てられる基本パーミッションは、最終的にファイルまたはディレクトリーに指定されるデフォルトのパーミッション ではありません。ファイルまたはディレクトリーを作成すると、umask により基本パーミッションが変更されます。基本パーミッションと umask の組み合わせにより、ファイルおよびディレクトリーのデフォルトパーミッションが作成されます。
13.1.2. ユーザーのファイル作成モードマスク
ユーザーファイル作成モードマスク (umask) は、新規作成ファイルおよびディレクトリーにファイル権限を設定する方法を制御する変数です。umask は、基本パーミッション値からパーミッションを自動的に削除して、Linux システムの全体的なセキュリティーを強化します。umask は、シンボリック 値または 8 進数 の値で表すことができます。
パーミッション | シンボリック値 | 8 進数値 |
読み取り、書き込み、実行 | rwx | 0 |
読み取りおよび書き込み | rw- | 1 |
読み取りおよび実行 | r-x | 2 |
読み取り | r-- | 3 |
書き込みおよび実行 | -wx | 4 |
書き込み | -w- | 5 |
実行 | --x | 6 |
権限なし | --- | 7 |
標準ユーザーのデフォルトの umask は 0002
です。root
ユーザーのデフォルトの umask は 0022
です。
umask の最初の数字は、特別なパーミッション (スティッキービット) を表します。umask の最後の 3 桁はユーザーの所有者 (u)、グループの所有者 (g) およびその他 (o) からそれぞれ削除したパーミッションを表します。
例13.3 ファイルの作成時に umask を適用
以下の例では、umask の 8 進数値 0137
が基本パーミッション 777
に適用され、デフォルトパーミッション 640
のファイルが作成されます。
13.1.3. デフォルトのファイル権限
デフォルトのパーミッションは、新規作成ファイルおよびディレクトリーに対して自動的に設定されます。デフォルトのパーミッションの値は、umask を基本パーミッションに適用して決定します。
例13.4 標準ユーザーが作成したディレクトリーのデフォルト権限
標準ユーザー が新しい ディレクトリー を作成すると、umask は 002
(rwxrwxr-x
) に、ディレクトリーの基本パーミッションは 777
(rwxrwxrwx
) に設定されます。これにより、デフォルトのパーミッションが 775
(drwxrwxr-x
) になります。
シンボリック値 | 8 進数値 | |
基本パーミッション | rwxrwxrwx | 777 |
Umask | rwxrwxr-x | 002 |
デフォルトパーミッション | rwxrwxr-x | 775 |
このパーミッションでは、ディレクトリーの所有者とグループはディレクトリーのコンテンツの表示、ディレクトリーでのアイテムの作成、削除、編集、サブディレクトリーへの移動が可能です。他のユーザーはディレクトリーの内容を表示して、サブディレクトリーに移動することしかできません。
例13.5 標準ユーザーが作成したファイルのデフォルト権限
標準ユーザー が新しい ファイル を作成すると、umask は 002
(rwxrwxr-x
) に、ファイルの基本パーミッションは 666
(rw-rw-rw-
) に設定されます。これにより、デフォルトのパーミッション 664
(-rw-rw-r--
) になります。
シンボリック値 | 8 進数値 | |
基本パーミッション | rw-rw-rw- | 666 |
Umask | rwxrwxr-x | 002 |
デフォルトパーミッション | rw-rw-r-- | 664 |
このパーミッションでは、ファイルの所有者とグループはファイルの読み取りと編集が可能ですが、他のユーザーはこのファイルの読み取りしかできません。
例13.6 root ユーザーが作成したディレクトリーのデフォルト権限
root ユーザー が新規 ディレクトリー を作成すると、umask は 022
(rwxr-xr-x
) に、ディレクトリーの基本パーミッションは 777
(rwxrwxrwx
) に設定されます。これにより、デフォルトのパーミッションが 755
(rwxr-xr-x
) になります。
シンボリック値 | 8 進数値 | |
基本パーミッション | rwxrwxrwx | 777 |
Umask | rwxr-xr-x | 022 |
デフォルトパーミッション | rwxr-xr-x | 755 |
このパーミッションでは、ディレクトリーの所有者はディレクトリーの内容の表示、ディレクトリー内のアイテムの作成、削除、編集、サブディレクトリーへの移動が可能です。グループとその他のユーザーは、ディレクトリーの内容の表示とサブディレクトリーの移動のみが可能です。
例13.7 root ユーザーが作成したファイルのデフォルト権限
root ユーザー が新規 ファイル を作成すると、umask は 022
(rwxr-xr-x
) に、ファイルの基本パーミッションは 666
(rw-rw-rw-
) に設定されます。これにより、デフォルトのパーミッションは 644
(-rw-r—r--
) になりました。
シンボリック値 | 8 進数値 | |
基本パーミッション | rw-rw-rw- | 666 |
Umask | rwxr-xr-x | 022 |
デフォルトパーミッション | rw-r—r-- | 644 |
このパーミッションでは、ファイルの所有者はファイルを読み取りと編集が可能ですが、グループや他のユーザーはこのファイルの読み取りのみが可能です。
セキュリティー上の理由から、通常のファイルに umask が 000
(rwxrwxrwx
) に設定されていても、デフォルトで実行権限がありません。ただし、ディレクトリーは実行権限を持つ状態で作成できます。
13.1.4. シンボリック値を使用したファイル権限の変更
chmod
ユーティリティーにシンボリック値 (組み合わせ文字および記号) を付けて、ファイルまたはディレクトリーのファイルのパーミッションを変更できます。
以下の パーミッション を割り当てることができます。
- 読み取り (r)
- 書き込み (w)
- 実行 (x)
パーミッションは、以下の レベルの所有権 に割り当てることができます。
- ユーザー所有者 (u)
- グループ所有者 (g)
- その他 (o)
- すべて (a)
パーミッションを追加または削除するには、以下の 記号 を使用できます。
-
+
: 既存のパーミッションの上にパーミッションを追加します。 -
-:
既存のパーミッションからパーミッションを削除します。 -
=
: 既存のパーミッションを削除し、新しいパーミッションを明示的に定義します。
手順
ファイルまたはディレクトリーのパーミッションを変更するには、以下を使用します。
$ chmod <level><operation><permission> file-name
<level>
は、パーミッションを設定する 所有権のレベル に置き換えます。<operation>
は、署名 の 1 つに置き換えます。<permission>
は、割り当てる パーミッション に置き換えます。file-name は、ファイルまたはディレクトリーの名前に置き換えます。たとえば、すべてのユーザーに読み取り、書き込み、実行 (rwx
)my-script.sh
のパーミッションを付与するには、chmod a=rwx my-script.sh
コマンドを使用します。詳細は ベースファイルのパーミッション を参照してください。
検証
特定のファイルのパーミッションを表示するには、以下を使用します。
$ ls -l file-name
file-name は、ファイルの名前に置き換えます。
特定のディレクトリーのパーミッションを表示するには、以下を使用します。
$ ls -dl directory-name
directory-name は、ディレクトリー名に置き換えます。
特定のディレクトリー内の全ファイルのパーミッションを表示するには、以下を使用します。
$ ls -l directory-name
directory-name は、ディレクトリー名に置き換えます。
例13.8 ファイルおよびディレクトリーの権限の変更
my-file.txt
のパーミッションを-rw-rw-r--
から-rw------
に変更するには以下を使用します。my-file.txt
の現在のパーミッションを表示します。$ ls -l my-file.txt -rw-rw-r--. 1 username username 0 Feb 24 17:56 my-file.txt
グループ所有者 (g) およびその他のファイル (
o
) からファイルを読み取り、書き込み、実行
(rwx
) するパーミッションを削除します。$ chmod go= my-file.txt
パーミッションを等号 (
=
) の後ろに指定していない場合には自動的に無視される点に注意してください。my-file.txt
のパーミッションが正しく設定されていることを確認します。$ ls -l my-file.txt -rw-------. 1 username username 0 Feb 24 17:56 my-file.txt
my-directory
のパーミッションをdrwxrwx---
からdrwxrwxr-x
に変更するには、以下を使用します。my-directory
の現在のパーミッションを表示します。$ ls -dl my-directory drwxrwx---. 2 username username 4096 Feb 24 18:12 my-directory
すべてのユーザー (
a
) に対する読み取りおよび実行 (r-x
) アクセスを追加します。$ chmod o+rx my-directory
my-directory
とそのコンテンツが正しく設定されていることを確認します。$ ls -dl my-directory drwxrwxr-x. 2 username username 4096 Feb 24 18:12 my-directory
13.1.5. 8 進数値を使用したファイル権限の変更
chmod
ユーティリティーに 8 進数値 (数値) を指定して chmod ユーティリティーを使用し、ファイルまたはディレクトリーのファイルパーミッションを変更できます。
手順
既存のファイルまたはディレクトリーのファイル権限を変更するには、以下を使用します。
$ chmod octal_value file-name
file-name は、ファイルまたはディレクトリーの名前に置き換えます。octal_value は 8 進数値に置き換えます。詳細は ベースファイルのパーミッション を参照してください。