umask 概要
オペレーティングシステムは新しいファイルやディレクトリを作成する際に基本権限を付与します。この基本権限から `umask` 値が '除外' されて最終権限が決まります。`umask` はセキュリティの観点から重要で、例えば重要な設定ファイルがあまりにも開放的な権限で作成されるのを防ぐことができます。各ユーザーセッションごとに `umask` 値が異なる設定が可能で、通常は `.bashrc` や `.profile` のようなシェル初期化ファイルで設定されます。
umask の動作原理
`umask` は **許可したい権限ではなく、'除外する' 権限を指定するマスク値** です。つまり、基本最大権限から `umask` 値を引いた結果が最終権限となります。
基本最大権限
- ファイル: `666` (読み取りおよび書き込み、実行権限なし)
- ディレクトリ: `777` (読み取り、書き込みおよび実行権限すべてを含む)
umask 計算方法
`umask` は 3 桁の 8 進数で表現されます (例: `022`, `002`)。この値は所有者 (User)、グループ (Group)、その他 (Others) の順に適用されます。各桁の数字は権限ビット (読み取り=4, 書き込み=2, 実行=1) の合計を示します。最終権限は次のように計算されます:
タイプ | 基本最大権限 | umask | 最終権限 |
---|---|---|---|
ファイル | 666 (rw-rw-rw-) | 022 (--w--w-) | 644 (rw-r--r--) |
ディレクトリ | 777 (rwxrwxrwx) | 022 (--w--w-) | 755 (rwxr-xr-x) |
一般的な umask 値
ほとんどのシステムで基本 `umask` 値は `0022` または `0002` です。前の `0` は特別な権限 (sticky bit, SGID, SUID) に関連しており、通常は `0` に設定されます。
一般的な umask 値の意味
- `umask 022`: ファイルは `644`(rw-r--r--)、ディレクトリは `755`(rwxr-xr-x) 権限で作成されます。これは所有者にすべての権限を、グループとその他のユーザーに読み取りおよび実行権限を付与する最も一般的な設定です。
- `umask 002`: ファイルは `664`(rw-rw-r--)、ディレクトリは `775`(rwxrwxr-x) 権限で作成されます。これはグループユーザーにも書き込み権限を許可し、同じグループ内でのコラボレーションに適しています。
- `umask 077`: ファイルは `600`(rw-------)、ディレクトリは `700`(rwx------) 権限で作成されます。非常に厳格な権限設定で、所有者以外は誰もアクセスできません。セキュリティが非常に重要な個人ファイルやディレクトリに適しています。
主要な umask コマンドオプション
`umask` コマンドは現在の値を確認したり、新しい値を設定するために使用されます。オプションなしで使用すると、現在の `umask` 値が表示されます。
1. umask 値の確認と設定
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`umask` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用例
`umask` コマンドのさまざまな活用例を通じて新しく作成されるファイルおよびディレクトリの基本権限を確認し、設定する方法を学んでください。
現在の umask 値を確認
umask
現在のシェルセッションの `umask` 値を 8 進数 (例: `0022`) で確認します。
umask 値をシンボリックモードで確認
umask -S
`umask` 値を 8 進数の代わりに 'u=rwx,g=rx,o=rx' のように最終的に許可される権限の形で確認します。
umask 値を 002 に設定
umask 002
新しく作成されるファイルは `664`(rw-rw-r--)、ディレクトリは `775`(rwxrwxr-x) 権限で設定されるように `umask` を変更します。 (同じグループのユーザーに書き込み権限を許可)
厳格な umask 値 077 に設定
umask 077
新しく作成されるファイルは `600`(rw-------)、ディレクトリは `700`(rwx------) 権限で設定されるように `umask` を変更します。所有者以外はアクセス不可です。
umask 変更後のファイル/ディレクトリ作成権限を確認
umask 002
touch test_file_002.txt
mkdir test_dir_002
ls -l test_file_002.txt test_dir_002
umask を `002` に設定した後、新しいファイルとディレクトリを作成して変更された権限が適用されたか `ls -l` で確認します。