Umask

提供: ArchWiki
2023年11月1日 (水) 03:12時点におけるKgx (トーク | 投稿記録)による版 (→‎マスクの値を設定: 情報を更新)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

umask ユーティリティはファイル作成モードマスクを制御するのに使われます。モードマスクは新しく作成されたファイルのファイルパーミッションの初期値を決定します。このユーティリティの挙動は POSIX によって仕様化されており、POSIX のプログラマーマニュアル に解説があります。umask はシェルの実行環境に影響を与えるため、基本的にシェルのビルトインコマンドとして実装されます。

モードマスクの意味

モードマスクには新しく作成されたファイルに設定されるべきではないパーミッションビットが記述されます。つまり新しく作成されたファイルには全く逆のパーミッションビットが設定されます。マスクで何らかのビットが 1 に設定されていれば、新しく作成したファイルの該当パーミッションは無効になります。マスクはパーミッションビットを取り除くフィルターとして機能し、ファイルのデフォルト権限を設定するのに役立ちます。

新しく作成されたファイルに設定されるパーミッションビットの値は論理非含意 (付加) を使って計算され、論理記号で表現することができます:

R: (D & (~M))

つまり、最終的なパーミッション R はデフォルトのパーミッション D論理積とファイル作成時のモードマスク M論理否定が合わさった結果になります。

ノート:
  • Linux ではファイルを作成するときに実行権限を付与することはできません。実際、ディレクトリ作成時のデフォルトのパーミッションは 777 ですが、ファイルの場合は 666 となっています。
  • Linux では、マスクのファイルパーミッションビットだけが使われます (umask(2) を参照)。マスクの suid, sgid, sticky ビットは無視されます。

例えば、ファイル作成モードマスクが 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 の値はケースバイケースで設定してください。例えば、デスクトップユーザーは他のユーザーからファイルにアクセスできないようにホームフォルダの制限を厳しくすると良いでしょう (useradd -m では chmod 700 が適用されます)。他のユーザーとファイルを共有する場合やファイルを公開する場合 (Apache を使用する場合) などは umask の制限を緩めるべきです。

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

参照