概要
Linuxにおいて、ファイルやディレクトリを新規作成した際に、デフォルトで付与されるアクセス権限(パーミッション)を制御するためのコマンドです。
「どの権限を与えるか」ではなく「どの権限を禁止するか(マスクするか)」という引き算の考え方で設定するのが特徴です。
サーバーのセキュリティポリシーとして、作成されるファイルが他人に勝手に読み書きされないよう、適切な値を設定しておくことが重要です。
仕様(引数・オプション)
構文
umask [オプション] [マスク値]
主な引数・オプション
| オプション | 説明 |
-S | マスク値(数値)ではなく、許可されている権限を記号(rwx)形式で表示します(Symbolic)。 |
-p | そのまま入力として再利用可能な形式(umask 0022)で表示します(printable)。 |
基本の使い方
オプションなしで実行すると、現在設定されているumask値(数値)が表示されます。
コマンド
# 現在のumask値を確認
umask
実行結果
通常、多くのディストリビューションでは 0022 や 0002 がデフォルトです。
0022
実践コマンド
umask値を分かりやすく表示する
数値の羅列では実際の権限がイメージしにくいため、-S オプションを使って「最終的に許可される権限」を確認します。
# 記号形式で表示
umask -S
u=rwx,g=rx,o=rx
※ これは「所有者はフルアクセス、グループとその他は読み・実行が可能」という状態(chmod 755相当)になる設定です。
マスク値を変更してファイルの権限を確認する
極端な設定を行って、生成されるファイルの権限がどう変化するかを確認する実験です。
※ファイルのベース権限は 666 (rw-rw-rw-)、ディレクトリは 777 (rwxrwxrwx) です。ここからumask値を引いたものが実際の権限になります。
# 実験1: マスク値を 000 (制限なし) に設定してファイル作成
umask 000
touch file_open.txt
ls -l file_open.txt
# 実験2: マスク値を 777 (全権限剥奪) に設定してファイル作成
umask 777
touch file_closed.txt
ls -l file_closed.txt
# 実験1の結果: 666 - 000 = 666 (rw-rw-rw-)
-rw-rw-rw- 1 user user 0 Jan 20 12:00 file_open.txt
# 実験2の結果: 666 - 777 = 000 (---------)
---------- 1 user user 0 Jan 20 12:01 file_closed.txt
計算と設定の再利用
現在の設定をスクリプト等に保存したい場合、-p オプションを使います。
# 設定コマンド形式で出力
umask -p
umask 0022
カスタムポイント
- 推奨値:
0022: 一般的なサーバー設定。自分は読み書き可、他人は読み取りのみ(ファイル: 644, ディレクトリ: 755)。0077: セキュアな設定。自分以外は一切アクセス不可(ファイル: 600, ディレクトリ: 700)。
- 計算方法:作成される権限 = (ベース権限) – (umask値)例: ファイル(666) – umask(022) = 644 (rw-r–r–)
注意点
- 一時的な設定:コマンドラインで実行した umask 設定は、ログアウトすると消えてしまいます。永続化するには .bashrc などの設定ファイルに記述する必要があります。
- 既存ファイルには無効:umaskを変更しても、すでに存在しているファイルの権限は変わりません。既存ファイルは chmod で変更してください。
- 実行権限の制限:セキュリティ上の理由から、ファイル作成時のベース権限は 666 となっており、umaskを 000 にしてもファイルに実行権限(x)は付きません。実行権限が必要な場合は作成後に chmod +x する必要があります。
応用
新規ユーザーのデフォルト設定を変更する
システムに追加される全ユーザーのデフォルトumask値を変更したい場合、/etc/skel/.bashrc に設定を追記します。これにより、今後 useradd されたユーザーのホームディレクトリに設定が配布されます。
# 新規ユーザー作成時のテンプレート末尾に umask 0077 を追記
# (管理者権限が必要です)
echo "umask 0077" | sudo tee -a /etc/skel/.bashrc
# 内容確認
tail -n 1 /etc/skel/.bashrc
umask 0077
まとめ
umaskコマンドは、システム上で「新しく生まれるファイル」のセキュリティレベルを決定する予防的なコマンドです。ファイルの権限を毎回 chmod で修正するのは手間がかかるため、Webサーバーやデータベースサーバーなど、特定の権限ルールが求められる環境では、ユーザーのログインスクリプト(.bashrcなど)に適切なumask値を記述しておくことが推奨されます。特に機密情報を扱うユーザーでは、他者からのアクセスを完全に遮断する 0077 の設定が有効です。
