Umask
関連記事
umask ユーティリティはファイル作成モードマスクを制御するのに使われます。モードマスクは新しく作成されたファイルのファイルパーミッションの初期値を決定します。このユーティリティの挙動は POSIX によって仕様化されており、POSIX のプログラマーマニュアル に解説があります。umask はシェルの実行環境に影響を与えるため、基本的にシェルのビルトインコマンドとして実装されます。
モードマスクの意味
モードマスクには新しく作成されたファイルに設定されるべきではないパーミッションビットが記述されます。つまり新しく作成されたファイルには全く逆のパーミッションビットが設定されます。マスクで何らかのビットが 1
に設定されていれば、新しく作成したファイルの該当パーミッションは無効になります。マスクはパーミッションビットを取り除くフィルターとして機能し、ファイルのデフォルト権限を設定するのに役立ちます。
新しく作成されたファイルに設定されるパーミッションビットの値は論理非含意 (付加) を使って計算され、論理記号で表現することができます:
R: (D & (~M))
つまり、最終的なパーミッション R
はデフォルトのパーミッション D
の論理積とファイル作成時のモードマスク M
の論理否定が合わさった結果になります。
例えば、ファイル作成モードマスクが 027 だとします。それぞれの数字は以下を表します:
- 0 は新しく作成したファイルに設定されない user パーミッションビットです。
- 2 は新しく作成したファイルに設定されない group パーミッションビットです。
- 7 は新しく作成したファイルに設定されない other パーミッションビットです。
新しく作成したファイルの所有者がユーザー User1
で所有グループがグループ Group1
の場合、下にある表と照合すれば、User1
は新しく作成されたファイルに対して全ての権限を得ることになり (8進数で7)、Group1
グループの他のユーザーは書き込み権限がなく (8進数で5)、その他のユーザーは新しく作成したファイルを扱う権限が全くないことがわかります (8進数で0)。つまり、027 マスクで作成されたファイルのパーミッションは 750 になります。
8進数 | バイナリ | 意味 |
---|---|---|
0 | 000 | 権限なし |
1 | 001 | 実行のみ |
2 | 010 | 書き込みのみ |
3 | 011 | 書き込みと実行 |
4 | 100 | 読み込みのみ |
5 | 101 | 読み込みと実行 |
6 | 110 | 読み書き |
7 | 111 | 読み書き実行 |
現在のマスクの値を表示
現在のマスクを表示するには、何も引数を付けずに umask を実行します。デフォルトの出力スタイルは実装によりますが、基本的に8進数で表示されます:
$ umask
0027
POSIX によって標準化されている -S
オプションを使った場合、記号表記でマスクが表示されます。ただし、記号表記の値は8進数の逆の値 (つまり新しく作成したファイルに設定されるパーミッションビット) になるので注意してください:
$ umask -S
u=rwx,g=rx,o=
マスクの値を設定
umask の値は umask コマンドで設定することができます。モードマスクを指定するのに使う文字列は chmod でモードを指定する時と同じ構文ルールに従っています (詳しくは POSIX Programmer's Manual を参照)
システム全体の umask の値は /etc/profile
や /etc/bash.bashrc
などのデフォルトシェル設定ファイルで設定することができます。(Arch を含む /etc/profile) ほとんどの Linux ディストリビューションはデフォルト値を 022
に設定しています。pam_umask.so
で umask を設定することもできますが、/etc/profile
などによって上書きされる可能性があります。
別の値を設定する必要がある場合、ファイルを直接編集するか (全てのユーザーに影響を与えます)、ユーザーのシェル設定ファイル (例: ~/.bashrc
) から umask を呼び出すようにすることでユーザーの umask だけを変更することができます。ただし、変更は次のログイン時から適用されます。現在のセッション中のみ umask を変更したい場合、umask を実行して設定したい値を入力してください。例えば umask 077
を実行すると新しいファイルに読み書き権限が付与され、新しいフォルダには読み書き実行権限が付与されます。
pam_umask(8) § DESCRIPTION で述べたように、umask=value
は ユーザーとグループ#ユーザーデータベース の /etc/passwd
セクションでも使用できます。
setting UMASK in GECOS field に関するディスカッションを参照してください。
KDE/Plasma の umask 値を設定する
/etc/profile
を介して umask 値を設定しても、KDE /Plasma セッションは systemd ユーザーユニット として開始されるため、機能しなくなりました。
umask 値は、pam_umask.so
または systemd ドロップインファイル を介して設定できます。
/etc/systemd/system/user@.d/override.conf
[Service] UMask=0002
pam_umask.so
を使用すると、テキストコンソールとグラフィカル KDE セッションの両方のシステム全体の umask 値を 1 か所で設定できます。/etc/profile
または systemd 設定の変更は省略できます。したがって、/etc/pam.d/login
と /etc/pam.d/systemd-user
の両方に含まれる設定ファイルで pam_umask.so
を有効にする必要があります。
次の行を /etc/pam.d/system-login
に追加します。
# session optional pam_umask.so umask=022
参照
- POSIX プログラマーマニュアル:
- umask (umask(1p) でも閲覧できます)
- chmod (extended description) (chmod(1p) でも閲覧できます)
- 027 umask: a compromise