4.3.5. umask を使用した、新規ファイルのデフォルト権限の設定
プロセスがファイルを作成すると、そのファイルにはデフォルト権限 (-rw-rw-r– など) が設定されます。こうした初期権限は、ファイルモード作成マスク (ファイル権限マスク または umask とも呼ばれる) で部分的に定義されます。たとえば、bash の umask は、デフォルトで 0022 となるなど、すべてのプロセスにそれぞれの umask が設定されています。プロセスの umask は変更できます。
umask を構成するもの
umask は、標準のファイル権限に対応するビットで構成されています。たとえば、umask 0137 の場合、その数字は次のような意味になります。
0 = 意味なし。必ず 0 になります (umask は特別なビットに影響しません)。
1 = オーナーの権限。実行ビットが設定されます。
3 = グループの権限。実行ビットおよび書き込みビットが設定されます。
7 = その他のユーザーの権限。実行ビット、書き込みビット、読み取りビットが設定されます。
umask では 2 進法、8 進法、またはシンボリック表示が使用できます。たとえば、8 進法の 0137 はシンボリック表示では u=rw-,g=r–,o=— となります。シンボリック表示は 8 進法表示とは異なり、禁止権限ではなく、許可された権限を示します。
umask の仕組み
umask は、ファイルに パーミッションを付与するのを禁止する ようにします。
umask に設定しているビットは、ファイルには設定されません。
umask に設定していないビットは、他の要素にもよりますが、ファイルに設定されます。
以下の図は、umask 0137 が新しいファイルの作成にどのように影響するかを示しています。
図4.3 ファイルの作成時に umask を適用
ユーザーグループ umask の例
重要
セキュリティー上の理由から、レギュラーファイルにはデフォルトで実行権限が設定されていません。したがって、umask がいかなる権限も禁止しない 0000 であっても、新しいレギュラーファイルは実行権限を持ちません。ただし、ディレクトリーは実行権限を持つ状態で作成できます。
[john@server tmp]$ umask 0000
[john@server tmp]$ touch file
[john@server tmp]$ mkdir directory
[john@server tmp]$ ls -lh .
total 0
drwxrwxrwx. 2 john john 40 Nov 2 13:17 directory
-rw-rw-rw-. 1 john john 0 Nov 2 13:17 file
4.3.5.1. シェルで umask の管理
bash、ksh、zsh、tcsh などのよく使用されるシェルでは、umask は、umask シェルの builtin を使用して管理されます。シェルから起動したプロセスは、その umask を継承します。
現在のマスクの表示
現在の umask を 8 進法で表示するには、以下のコマンドを実行します。
~]$ umask
0022
現在の umask をシンボリック表示で表示するには、以下のコマンドを実行します。
~]$ umask -S
u=rwx,g=rx,o=rx
umask を使用したシェルにおけるマスクの設定
8 進法を使用して、現行シェルセッションに umask を設定するには、以下のコマンドを実行します。
~]$ umask octal_mask
octal_mask を、0 から 7 の 4 桁以下の数値に置き換えます。3 桁以下の数値を指定すると、頭に 0 が付いた 4 桁の数値として権限が設定されます。たとえば、入力したコマンドが umask 7 であれば、そのコマンドの数値は 0007 として解釈されます。
例4.1 8 進法を使用した umask の設定
新しいファイルで、オーナーとグループに書き込み権限と実行権限を持たせず、その他のユーザーにはいかなる権限も持たせないようにするには、以下を実行します。
~]$ umask 0337
もしくは、簡潔に次のコマンドを実行します。
~]$ umask 337
シンボリック表記法を使用して、現行シェルセッションの umask を設定するには、以下のコマンドを実行します。
~]$ umask -S symbolic_mask
例4.2 シンボリック表示を使用した umask の設定
シンボリック表記法を使用して umask 0337 を設定するには、次のコマンドを実行します。
~]$ umask -S u=r,g=r,o=
デフォルトシェルの umask での作業
シェルには、通常、デフォルトの umask が設定されている構成ファイルがあります。bash の場合は /etc/bashrc です。デフォルトの bash の umask を表示するには、以下のコマンドを実行します。
~]$ grep -i -B 1 umask /etc/bashrc
出力では、umask の設定が、umask コマンドまたは UMASK 変数のいずれかを使用して行われていることが示されます。以下の例では、umask コマンドを使用して、umask が 022 に設定されています。
~]$ grep -i -B 1 umask /etc/bashrc
# By default, we want umask to get set. This sets it for non-login shell.
—
if [ $UID -gt 199 ] && [ 「id -gn」 = 「id -un」 ]; then
umask 002
else
umask 022
bash のデフォルト umask を変更するには、/etc/bashrc で umask コマンドの呼び出し、または UMASK 変数の割り当てを変更します。この例では、デフォルトの umask を 0227 に変更します。
if [ $UID -gt 199 ] && [ 「id -gn」 = 「id -un」 ]; then
umask 002
else
umask 227
特定ユーザーのデフォルトシェルの umask での作業
デフォルトでは、新規ユーザーのデフォルトの bash の umask は、/etc/bashrc に定義したものに設定されます。
特定ユーザーの bash umask を変更するには、そのユーザーの $HOME/.bashrc ファイルで、umask コマンドの呼び出しを追加します。たとえば、ユーザー john の bash の umask を 0227 に変更するには、次のコマンドを実行します。
john@server ~]$ echo ‘umask 227’ >> /home/john/.bashrc
新しく作成されたホームディレクトリーのデフォルト権限設定
作成したユーザーホームディレクトリーの権限を変更するには、/etc/login.defs ファイルで UMASK 変数を変更します。
# The permission mask is initialized to this value. If not specified,
# the permission mask will be initialized to 022.
UMASK 077

コメント