プロセスのファイル作成マスク、つまり umask は、そのプロセスがファイルシステムオブジェクトを作成するとき、選択された権限ビットが設定されるのを防ぎます。umask は完全な既定モードではなくマスクです。まずアプリケーションがモードを要求し、カーネルが umask で禁止されたビットを除きます。
パーミッション · レッスン 4
Umask
プロセスの umask が、新しく作成するファイルとディレクトリで要求された権限ビットを制限する仕組みを学びます。
概念的には次のようになります。
resulting mode = requested mode AND NOT umask
アクセス制御リストやアプリケーションの動作によって詳細が加わる場合があるため、正確な権限が重要なら結果を確認してください。
Umask を表示・設定する
引数なしで umask を実行すると、現在のシェルのマスクが、多くの場合8進形式で表示されます。
$ umask
0022
現在のシェルと、それ以降にそのシェルから開始するプロセスについて設定します。
$ umask 027
各8進位置は、所有者、グループ、その他に対応します。マスクのビットは、要求された対応権限を削除します。2 は書き込み、4 は読み取り、1 は実行をマスクします。
umask 027 は現在のシェルで何を変更しますか?
新しいファイルとディレクトリのモードを計算する
通常ファイルを既定で実行可能にするのは危険なため、多くの一般的なプログラムは新しい通常ファイルに 0666 を要求します。ディレクトリでは探索に実行権限が必要なので、一般に 0777 を要求します。
umask 0022 の場合は次のようになります。
regular file: 0666 masked by 0022 -> 0644 (rw-r--r--)
directory: 0777 masked by 0022 -> 0755 (rwxr-xr-x)
umask は要求されたビットを削除するだけです。アプリケーションが要求しなかった実行権限を追加することはできません。アプリケーションがさらに制限された開始モードを要求すれば、結果もさらに制限されます。
プログラムが通常ファイルにモード 0666 を要求し、umask が 0022 の場合、結果のモードはどれですか?
プログラムがディレクトリに 0777 を要求し、umask が 0027 の場合、結果のモードはどれですか?
スコープと永続性
一つのシェルで umask を変更しても、その親プロセスや無関係なセッションは変わりません。この値は、そのシェルと子孫が今後作成するオブジェクトへ適用され、既存ファイルのモードは維持されます。
望む値を永続化するには、環境に適したログイン、シェル、PAM、サービスマネージャー、アプリケーションの設定へ記述します。正しい場所は異なり、サービスが独自の umask を設定する場合もあります。一つの対話的シェル設定ファイルを編集すれば、システム上のすべてのプロセスを制御できると考えてはいけません。
新しい umask を設定すると、既存ファイルには何が起こりますか?
隔離された環境で異なるマスクの下にファイルとディレクトリを作成し、ls -ld でモードを比較してください。Linux のユーザー、グループ、ファイルパーミッションラボが適した練習環境を提供します。
レッスン完了
Umask を完了しました
umask が新しく要求された権限を制限する仕組みを予測できるようになりました。
umaskで現在のシェルのマスクを表示・設定する。アプリケーションが要求したモードからマスクされたビットを除く。
一般的なファイル要求
0666とディレクトリ要求0777を区別する。umask のスコープと永続性を、プロセスと環境に固有のものとして扱う。