【Linux】umaskコマンドでファイル作成時の初期権限(マスク値)を設定する

目次

概要

Linuxにおいて、ファイルやディレクトリを新規作成した際に、デフォルトで付与されるアクセス権限(パーミッション)を制御するためのコマンドです。

「どの権限を与えるか」ではなく「どの権限を禁止するか(マスクするか)」という引き算の考え方で設定するのが特徴です。

サーバーのセキュリティポリシーとして、作成されるファイルが他人に勝手に読み書きされないよう、適切な値を設定しておくことが重要です。

仕様(引数・オプション)

構文

umask [オプション] [マスク値]

主な引数・オプション

オプション説明
-Sマスク値(数値)ではなく、許可されている権限を記号(rwx)形式で表示します(Symbolic)。
-pそのまま入力として再利用可能な形式(umask 0022)で表示します(printable)。

基本の使い方

オプションなしで実行すると、現在設定されているumask値(数値)が表示されます。

コマンド

# 現在のumask値を確認
umask

実行結果

通常、多くのディストリビューションでは 00220002 がデフォルトです。

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–)

注意点

  1. 一時的な設定:コマンドラインで実行した umask 設定は、ログアウトすると消えてしまいます。永続化するには .bashrc などの設定ファイルに記述する必要があります。
  2. 既存ファイルには無効:umaskを変更しても、すでに存在しているファイルの権限は変わりません。既存ファイルは chmod で変更してください。
  3. 実行権限の制限:セキュリティ上の理由から、ファイル作成時のベース権限は 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 の設定が有効です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次