はじめに (対象読者・この記事でわかること)

この記事は、Linuxサーバー(特にCentOS系)を運用しているシステム管理者や開発者、Linuxのファイルシステム管理に興味がある方を対象としています。

この記事を読むことで、以下のことがわかるようになります。

  • ファイルやディレクトリが作成される際のデフォルトのパーミッション(権限)がどのように決まるのか。
  • umask コマンドとその仕組み。
  • umask の設定方法(一時的および永続的)。
  • 特定のユーザーやグループ、あるいはシステム全体でデフォルトパーミッションを制御する方法。

これにより、意図しないパーミッション設定によるセキュリティリスクを低減し、より効率的なファイル管理が可能になります。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。

  • Linuxの基本的なコマンド操作(cd, ls, mkdir, touch, chmod, vim など)。
  • Linuxのパーミッション(rwx, 755, 644など)に関する基本的な理解。
  • テキストエディタ(vim または nano など)の基本的な使い方。

ファイル・ディレクトリ作成時のデフォルトパーミッションの仕組み

Linuxシステムにおいて、ファイルやディレクトリが新しく作成される際、そのパーミッションはデフォルトで自動的に設定されます。このデフォルトパーミッションは、umask という値によって制御されています。

umask とは何か?

umask は、「user file-creation mode mask」の略で、新規ファイルやディレクトリが作成される際に、与えられるはずのパーミッションからマスク(除去)されるビットを指定するものです。

Linuxのパーミッションは、通常、所有者、グループ、その他のユーザーに対して「読み取り(r)」「書き込み(w)」「実行(x)」の権限で設定されます。これらの権限は数値で表現されることが多く、例えば 777 は全てのユーザーに全ての権限を与えます。

  • r = 4
  • w = 2
  • x = 1

したがって、 * rwx = 4 + 2 + 1 = 7 * rw- = 4 + 2 + 0 = 6 * r-x = 4 + 0 + 1 = 5 * r-- = 4 + 0 + 0 = 4

ファイルやディレクトリが作成される際の「最大」パーミッションは以下のようになります。

  • ディレクトリ: 777 (rwxrwxrwx) - 全てのユーザーに全ての権限を与える状態を基本とします。
  • ファイル: 666 (rw-rw-rw-) - ファイルは通常、実行権限がデフォルトで付与されません。

umask の値は、この最大パーミッションから引き算されるのではなく、ビット演算(AND NOT)によって除去されるビットを指定します。

具体的には、以下の計算式で新しいパーミッションが決まります。

  • 新規ディレクトリのパーミッション: 777 & (~umask)
  • 新規ファイルのパーミッション: 666 & (~umask)

ここで、~umaskumask のビットを反転させた値です(例: umask0022 の場合、~umask0022 のビット反転、つまり 7755 のようなイメージで計算されます)。

umask の値の例とデフォルトパーミッション

一般的な umask の値とその結果を見てみましょう。

1. umask 0022 (多くのシステムでデフォルト)

  • ディレクトリ作成時:

    • 基本: 777
    • umask: 0022
    • 結果: 777 & ~0022
      • ~00227755 に相当します (ビット反転の概念)。
      • 777 & 7755 = 755
    • つまり、新規ディレクトリは rwxr-xr-x (755) になります。所有者には全て、グループとその他には読み取りと実行権限が与えられます。
  • ファイル作成時:

    • 基本: 666
    • umask: 0022
    • 結果: 666 & ~0022
      • ~00227755 に相当します。
      • 666 & 7755 = 644
    • つまり、新規ファイルは rw-r--r-- (644) になります。所有者には読み書き、グループとその他には読み取り権限が与えられます。

2. umask 0002 (グループへの書き込みを許可したい場合)

  • ディレクトリ作成時:

    • 結果: 777 & ~0002 = 775 (rwxrwxr-x)
    • 所有者とグループには全て、その他には読み取りと実行権限が与えられます。
  • ファイル作成時:

    • 結果: 666 & ~0002 = 664 (rw-rw-r--)
    • 所有者とグループには読み書き、その他には読み取り権限が与えられます。

3. umask 0077 (セキュリティを強化したい場合)

  • ディレクトリ作成時:

    • 結果: 777 & ~0077 = 700 (rwx------)
    • 所有者のみに全ての権限が与えられ、グループとその他には一切の権限が与えられません。
  • ファイル作成時:

    • 結果: 666 & ~0077 = 600 (rw-------)
    • 所有者のみに読み書き権限が与えられ、グループとその他には一切の権限が与えられません。

umask の確認方法

現在の umask の値を確認するには、ターミナルで以下のコマンドを実行します。

Bash
umask

出力は通常、4桁または3桁の8進数で表示されます。例えば 0022 のように表示されるはずです。

また、umask -S コマンドを実行すると、シンボリック表記で表示され、より直感的に理解できます。

Bash
umask -S

出力例: u=rwx,g=rx,o=rx (これは umask 0022 に相当します)

umask の設定方法

umask の設定は、一時的なものと永続的なものがあります。

一時的な設定 (現在のセッションのみ)

現在のターミナルセッションでのみ umask の値を変更したい場合は、umask コマンドに続けて数値を指定します。

Bash
umask 0002

この設定は、そのターミナルセッションを閉じると元に戻ります。SSH接続などで一時的にパーミッションのデフォルト値を変更したい場合に便利です。

永続的な設定 (ユーザーごと)

特定のユーザーがログインした際に、常に特定の値の umask を適用させたい場合は、そのユーザーのホームディレクトリにある設定ファイルに記述します。

  • Bash シェルの場合:
    • ~/.bashrc: ログインシェル以外(非ログインシェル)で読み込まれます。インタラクティブなシェルでよく使われます。
    • ~/.bash_profile, ~/.bash_login, ~/.profile: ログインシェルで読み込まれます。通常、これらの中から一つが優先的に使われます。

一般的には、~/.bashrcumask の設定を記述するのが推奨されています。

設定例:

  1. テキストエディタで ~/.bashrc ファイルを開きます。 bash vim ~/.bashrc
  2. ファイルの末尾に以下の行を追加します。 bash # Set default umask to 0022 umask 0022
  3. ファイルを保存して閉じます。
  4. 変更を反映させるために、設定ファイルを再読み込みするか、一度ログアウトして再度ログインします。 bash source ~/.bashrc

これで、次回以降、このユーザーでログインした際には umask 0022 が適用されるようになります。

永続的な設定 (システム全体)

システム全体で umask のデフォルト値を変更したい場合は、以下のファイルを編集します。

  • /etc/profile: ログインシェルで読み込まれ、システム全体に適用されます。
  • /etc/bashrc: 非ログインシェルで読み込まれ、システム全体に適用されます。
  • /etc/login.defs: ユーザーアカウント作成時のデフォルト umask の設定など、ログインに関するシステム全体の設定が含まれています。

umask の設定をシステム全体に適用する手順例 (/etc/profile を編集する場合):

  1. root権限で /etc/profile ファイルを編集します。 bash sudo vim /etc/profile
  2. ファイルの末尾に以下の行を追加します。 bash # Set default umask for all users to 0022 umask 0022
  3. ファイルを保存して閉じます。
  4. 変更を反映させるために、システムを再起動するか、各ユーザーが一度ログアウトして再度ログインする必要があります。

注意点: /etc/profile などシステム全体の設定ファイルを変更する際は、誤った記述がシステム全体に影響を与える可能性があるため、慎重に行う必要があります。

/etc/login.defs での設定: umask のシステム全体でのデフォルト値は、/etc/login.defs ファイルで定義されていることが多いです。このファイルを編集することで、新規ユーザー作成時のデフォルト umask を変更できます。

Bash
sudo vim /etc/login.defs

ファイル内にある UMASK の行を探し、値を変更します。

# UMASK is the default umask value for the superuser.
# Default value is 022.
UMASK           022

この値を 002077 などに変更し、ファイルを保存します。この設定は、新しく作成されるユーザーアカウントにのみ適用されます。既存のユーザーの umask を変更するには、上記で説明したユーザーごとの設定ファイル(~/.bashrc など)を編集する必要があります。

umask を設定する際の注意点

  • セキュリティ: umask の値を小さくしすぎると、意図せず公開性の高いパーミッションでファイルが作成される可能性があります。特に、Webサーバーのドキュメントルートなど、インターネットに公開される領域では、適切な umask 設定が重要です。一般的には 00220002 がよく使われますが、プロジェクトや環境によっては 0077 など、より厳格な設定が必要になる場合もあります。
  • 互換性: 複数のユーザーが同じサーバーを利用する場合、umask の設定によっては、意図せず他のユーザーのファイルにアクセスできてしまう可能性があります。ユーザーごとの umask 設定と、グループ共有したいディレクトリのパーミッション設定を考慮する必要があります。
  • 実行権限: ファイルにはデフォルトで実行権限が付与されないことが一般的ですが、スクリプトファイルなどを頻繁に作成する場合は、umask の設定を考慮するか、chmod +x で明示的に実行権限を付与する必要があります。

まとめ

本記事では、Linux (CentOS) におけるファイル・ディレクトリ作成時のデフォルトパーミッションが umask によって制御されている仕組みと、その設定方法について解説しました。

  • umask は、新規ファイル・ディレクトリ作成時に与えられるパーミッションから「マスク(除去)」されるビットを指定する値です。
  • デフォルトパーミッションは、「最大パーミッション」から umask の影響を引いた結果として決まります(計算はビット演算で行われます)。
  • umask の値は、umask コマンドで確認でき、~/.bashrc/etc/profile などを編集することで、ユーザーごと、あるいはシステム全体で永続的に設定できます。
  • 適切な umask 設定は、サーバーのセキュリティを維持し、効率的なファイル管理を行う上で非常に重要です。

この記事を通して、umask の理解を深め、ご自身の環境に合わせて適切なデフォルトパーミッションを設定できるようになることを願っています。 今後は、ACL(Access Control Lists)などのより詳細なパーミッション管理についても記事にする予定です。

参考資料