Linux / コマンド / umask - 新しいファイル・ディレクトリのデフォルト権限制限

umaskは、現在のシェルとその子プロセスが新しいファイルやディレクトリを作成する際に取り除く権限ビットを設定します。既存のファイルの権限は変更しません。

一般的なツールが指定する作成時のモードは、通常ファイルが8進数の666、ディレクトリが777です。この条件で、umask 022を適用すると通常ファイルは644、ディレクトリは755で作成されます。これは単純な数字の引き算ではなく、許可ビットからマスクビットを取り除く方式です。プログラムがより制限されたモードを要求すると、実際の結果もより狭くなります。

基本的な文法

umask [-S] [マスク]

インストールされている実装とオプションは、配布版によって異なる場合があります。help umaskで現在のシステムの説明を確認してください。

使用例

現在のマスク確認

シェルに適用された8進数マスクを表示します。

umask

記号式で確認

マスクが制限しない権限ビットを記号で表示します。実際に作成されたファイルのモードそのものではありません。

umask -S

現在のシェルの新しいファイル権限制限

新しく作成するファイルおよびディレクトリに適用される制限を調整します。既存のファイルには適用されません。試す前に umask の現在値を控え、実習後は umask 記録した8進数 で戻してください。実習用に別のBashを起動してから実行し、終わったら exit で元のシェルへ戻る方法もあります。

umask 027
umask

権限ビットをマスクで制限する

新しい作業ディレクトリでシェルにumask 027を設定すると、touch が通常指定する作成モード666からグループ書き込みおよびその他のユーザー権限が制限されます。mkdir が通常指定する作成モードは777です。既存のファイルにtouchを実行しても権限は再計算されないため、ファイルやディレクトリがない場所で例を実行してください。

umask 027
umask
touch demo.txt
mkdir demo-dir
stat -c '%a %n' demo.txt demo-dir

例の出力(アクセス制御リスト(ACL)の継承など追加条件がない場合):

0027
640 demo.txt
750 demo-dir

umaskは現在のシェルおよびその子プロセスに適用され、すでに存在するファイルの権限は変更されません。実際の権限はプログラムが要求したモードおよびACL・ファイルシステムポリシーにも影響されるので、重要なパスは statのモード表示 で確認します。Linuxでは親ディレクトリの デフォルトACLを継承する場合、umaskではなく継承ACLと要求モードから権限が決まるため、単純なマスク計算どおりとは限りません。

マスクは単純な十進引き算ではなく、要求された権限ビットを覆う方式で適用されます。したがって、プログラムが最初から実行ビットを要求していない一般ファイルにはumaskを変更しても実行ビットは自動的には付与されません。ログインシェル・サービス管理者・コンテナは、それぞれ異なるマスクを設定することも可能です。

主なオプションと形式

オプション・形式 説明
022 グループ書き込みおよびその他のユーザー書き込みを制限する一般的な例です。
027 グループ書き込みおよびその他のユーザーのすべての権限を制限します。
-S 現在の設定を記号形式で表示します。
-p Bashで再実行可能な形式で表示します。

使用する際の注意点

Bashではumaskはシェル組み込みコマンドであり、別の子シェルで実行しても親シェルの設定は変更されません。新しいファイルが必ずしも666から始まるわけではなく、アプリケーションが要求したモードやACL・ファイルシステムのポリシーも結果に影響を与えます。既存ファイルのモードを変える場合は chmodによるアクセス権の変更 を使います。

よくある質問

umask 022を実行すると既存のファイルも644になりますか?

いいえ。その後、このシェルおよび子プロセスが作成する項目の権限制限にのみ適用されます。

公式ドキュメント

オプションの正確な動作と実装による差異はumaskに関する公式ドキュメントで確認できます。