「なぜ644になるのか理由が分からない」
こうした疑問を解決するのが、umaskコマンドです。
この記事では、umaskの仕組みからパーミッション初期値の確認・変更方法、永続化の設定まで、実務で押さえておくべきポイントを解説します。
・umask はファイル・ディレクトリ新規作成時のパーミッション初期値を決める仕組み
・デフォルト umask 022 ではファイル=644、ディレクトリ=755 になる計算方法
・umask 002 でグループ書き込みを許可、umask 077 でセキュリティ強化
・設定を永続化するには ~/.bashrc または /etc/login.defs に記述する
・umask 000 は全員書き込み可能になるため本番環境では絶対に設定しない
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
umaskとは?パーミッションの初期値を決める仕組み
umask(ユーマスク)は、ファイルやディレクトリを新規作成したときに設定されるパーミッションの初期値を制御する仕組みです。Linuxでは、ファイル作成時に付与できる最大のパーミッションが決まっています。
・ファイル:666(rw-rw-rw-)
・ディレクトリ:777(rwxrwxrwx)
この最大値からumask値を「引いた」値が、実際に設定されるパーミッションです。
たとえばumaskが 022 の場合:
・ファイル:666 - 022 = 644(rw-r--r--)
・ディレクトリ:777 - 022 = 755(rwxr-xr-x)
多くのLinuxディストリビューションでは、一般ユーザーのumaskは022がデフォルトです。
※ chmodは既存ファイルのパーミッションを変更するコマンド、umaskは新規作成時の初期値を設定する仕組みです。この違いを押さえておきましょう。
umaskコマンドの基本的な使い方
1. 現在のumask値を確認する
引数なしで実行すると、現在設定されているumask値を表示します。$ umask 0022
2. umask値を変更する
umaskコマンドに値を指定すると、現在のシェルセッションのumask値が変更されます。# umask値を002に変更する $ umask 002 # 確認する $ umask 0002 # ファイルを作って確認する $ touch test_002.txt $ ls -l test_002.txt -rw-rw-r-- 1 tanaka tanaka 0 3月 17 10:30 test_002.txt
3. umask値とパーミッションの対応表
よく使うumask値と、その結果のパーミッションをまとめます。| umask値 | ファイル | ディレクトリ | 用途 |
|---|---|---|---|
| 022 | 644 (rw-r--r--) | 755 (rwxr-xr-x) | 一般的なデフォルト |
| 002 | 664 (rw-rw-r--) | 775 (rwxrwxr-x) | グループでの共同作業 |
| 077 | 600 (rw-------) | 700 (rwx------) | セキュリティ重視 |
| 027 | 640 (rw-r-----) | 750 (rwxr-x---) | グループ読み取りのみ許可 |
4. 記号形式で確認する(-Sオプション)
-S オプションを付けると、umask値を記号(シンボリック)形式で表示します。$ umask -S u=rwx,g=rx,o=rx
上の例では、所有者(u)はrwx、グループ(g)はrx、その他(o)はrxが許可されます。
実務で使えるumask活用テクニック
5. umask値を永続化する
umaskコマンドで設定した値は、現在のシェルセッションが終了すると元に戻ります。永続化するには設定ファイルに記述します。・個人の設定:~/.bashrc に記述する
# ~/.bashrc に追記する $ echo "umask 002" >> ~/.bashrc # 設定を反映する $ source ~/.bashrc
# /etc/login.defs のUMASK設定を確認する $ grep UMASK /etc/login.defs UMASK 022
6. 共有ディレクトリでグループ書き込みを許可する
チームで共有するディレクトリでは、umask 002 と SGID(Set Group ID)を組み合わせるのが定番です。# 共有ディレクトリを作成する $ sudo mkdir /var/shared $ sudo chown :developers /var/shared $ sudo chmod 2775 /var/shared # 各ユーザーのumaskを002にしておく $ umask 002 # ファイルを作成すると、グループにも書き込み権限が付く $ touch /var/shared/report.txt $ ls -l /var/shared/report.txt -rw-rw-r-- 1 tanaka developers 0 3月 17 10:30 report.txt
7. セキュリティを強化する(umask 077)
他のユーザーに一切アクセスさせたくない場合は、umask 077 を設定します。$ umask 077 $ touch secret.txt $ ls -l secret.txt -rw------- 1 tanaka tanaka 0 3月 17 10:30 secret.txt
umaskのトラブルシュートとよくあるミス
umask値を変更したのに反映されない場合
umaskを変更したのに新しいファイルのパーミッションが変わらない場合、以下を確認してください。・別のシェルセッションで作業していないか:umaskの変更は現在のシェルにしか反映されません。新しいターミナルを開いた場合は設定ファイルに書かれた値に戻ります
・アプリケーションが独自にパーミッションを設定していないか:一部のアプリケーション(Apache、MySQL等)は、設定ファイルで独自のumask値を持っています
# 現在のumask値を確認する $ umask # どの設定ファイルでumaskが設定されているか調べる $ grep -r "umask" /etc/profile /etc/bashrc ~/.bashrc ~/.bash_profile 2>/dev/null
【重要】umask 000 の危険性
umask 000 は「マスクなし」、つまりファイルは666(誰でも読み書き可能)、ディレクトリは777(誰でもフルアクセス可能)で作成されます。これは重大なセキュリティリスクです。本番サーバーでは絶対に umask 000 を設定しないでください。
もし誤って設定してしまった場合は、すぐにumask値を戻し、意図しないパーミッションで作成されたファイルがないか確認しましょう。
# 誰でも書き込めるファイルを検索する $ find /var/www -perm -o+w -type f
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| 現在のumask値を確認する | umask |
| 記号形式で確認する | umask -S |
| umask値を変更する | umask 002 |
| セキュリティを強化する | umask 077 |
| 永続化する(個人) | echo "umask 002" >> ~/.bashrc |
| システムのデフォルトを確認する | grep UMASK /etc/login.defs |
| 誰でも書き込めるファイルを検索する | find /パス -perm -o+w -type f |
新規ファイルのパーミッションが意図どおりに設定できていますか?
コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:chownコマンドで所有者・グループを変更する方法|-Rの一括変更も
- 前のページへ:chmodコマンドでパーミッションを変更する方法|755・644の意味と-Rの一括変更【早見表付き】
- この記事の属するカテゴリ:Linuxコマンド・LinuxコマンドU-Z・ユーザ・グループ管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます