この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Linuxのファイル権限とumaskの公開仕様を確認し、一時ディレクトリで安全に差を観察しながら、サービス運用での意味まで整理しています。検証ステータス:📘 仕様確認済み・実行未検証
umask 022 や 077 は暗記しがちですが、重要なのは新しく作るファイルやディレクトリに、最初からどの権限を与えないかを決める仕組みだということです。
まず試す
d=$(mktemp -d) cd "$d" umask 022 touch a.txt stat -c '%a %n' a.txt
一般的には次のようになります。
644 a.txt
次に変更します。
umask 077 touch b.txt stat -c '%a %n' b.txt
今度は通常、
600 b.txt
になります。
「666 – 022」と単純な引き算ではない
説明で 666 - 022 = 644 と書かれることがありますが、umaskの本質は算術の引き算ではなく、許可ビットからマスクされたビットを落とすことです。
通常ファイルは実行ビットを最初から付けないため基準は主に 666、ディレクトリは 777 が基準になります。
flowchart LR A[作成時の基準mode] --> B[umaskで禁止bitを落とす] B --> C[実際の初期mode]
ディレクトリでは結果が違う
umask 022 mkdir dir022 umask 077 mkdir dir077 stat -c '%a %n' dir022 dir077
一般的には 755 と 700 の差を観察できます。
つまりumaskは、通常ファイルだけでなく新規ディレクトリにも効きます。
chmodとの違い
umask: これから新規作成するものの初期権限に影響chmod: すでに存在するもののmodeを変更
umask 077 に変えても、既存の 644 ファイルが自動で 600 にはなりません。
仕事でどう使えるか
特に有効なのは、アプリやバッチが秘密を含むファイルを生成するケースです。
バックアップファイル
一時ファイル
APIレスポンスの保存
秘密鍵や設定ファイル
バッチの出力ログ
サービスが生成する作業ファイル
たとえば処理開始時に umask 077 を明示すれば、そのプロセスから作るファイルを他ユーザーから読みにくい初期状態にできます。
shellで確認したumaskとサービスのumaskは同じとは限らない
systemdサービス、cron、コンテナ、アプリケーション自身が別のumaskを設定している場合があります。
「自分のSSHセッションでは077だからサービスも077だろう」と考えず、実際にどの実行コンテキストでファイルを作っているかを確認します。
systemdではユニット設定の UMask= で明示できるケースがあります。
注意点
umaskを厳しくすれば常に良いわけではありません。複数ユーザーやグループで共有するファイルを 077 で作ると、必要な共同作業まで妨げることがあります。
実務では、
誰が読む必要があるか
誰が書く必要があるか
新規作成時から制限すべきか
group共有が必要か
を決めてから値を選びます。
後始末
cd / rm -rf "$d"
まとめ
umaskは新規作成時の初期権限を制御する
chmodとは役割が違う
通常ファイルとディレクトリでは基準modeが違う
サービスではshellとは別のumaskになる場合がある
秘密を含む生成物では明示的なumaskが事故防止に役立つ
