Infra Engineer

デフォルトパーミッションとumask
2022.07.26
Lv1

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

本記事の対象者

LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。


今回の内容

今回は、デフォルトパーミッションとumaskについて解説します。
ファイルやディレクトリ作成時のパーミッションが決定する仕組みとその変更方法になります。

・デフォルトパーミッション
・umask
・まとめ
・確認問題

デフォルトパーミッション

ファイルやディレクトリ作成時のパーミッションのことを、デフォルトパーミッションと言います。
これはどのように決定しているのでしょうか。
まず以下の例を見てください。

[root@localhost umask_sample]# ll
合計 0
[root@localhost umask_sample]# mkdir sample
[root@localhost umask_sample]# touch sample.txt
[root@localhost umask_sample]# ll
合計 0
drwxr-xr-x. 2 root root 6  7月  6 11:05 sample
-rw-r--r--. 1 root root 0  7月  6 11:05 sample.txt

ディレクトリとファイルを作成した際に、それぞれパーミッションが設定されていますが、両者で少し異なるのが分かります。
これは以下のように決定してます。

 

  • sampleディレクトリ

777022 = 755

755 → rwxr-xr-x

  • sample.txtファイル

666022 = 644

644 → rw-r–r–

 

何か計算をしていますが、この中で赤字になっているものはディレクトリやファイルにあらかじめ決められた固定値です。
この固定値は、ディレクトリは「777ファイルは「666と定められています。
そして青字になっている部分は「umask」といいます。
デフォルトパーミッションは以下の計算法則で決定しています。

 

デフォルトパーミッションの決定法則

ディレクトリ

デフォルトパーミッション = 777 – umask

ファイル

デフォルトパーミッション = 666 – umask

 

ディレクトリやファイルの固定値は暗記しましょう。

 


umask

umaskは、デフォルトパーミッションの決定に用いられる値です。
設定は「/etc/bashrc」に記載されています。
初期状態では、rootユーザのumaskは「022」、一般ユーザのumaskは「002」に設定されています。

[root@localhost ~]# cat /etc/bashrc
~~省略~~
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
       umask 002
    else
       umask 022
fi
~~省略~~

このumaskの値を変更するには、umaskコマンドを使用します。

umask
意味 umaskを設定する。
書式 umask [マスク値]

引数なしで使用すると、現在のumask値を表示します。

例①)
現在のumask値を表示。(引数なし)
[root@localhost ~]# who am i
root     pts/1        2022-07-06 11:03 (192.168.56.1)
[root@localhost ~]# umask
0022
[sak@localhost ~]$ who am i
sak      pts/2        2022-07-06 14:06 (192.168.56.1)
[sak@localhost ~]$ umask
0002

rootユーザでは「022」、一般ユーザでは「002」に設定されていることが分かります。

例②)
一般ユーザsakのumaskの値を「027」に変更してみる。
[sak@localhost umask_sample]$ umask
0002
[sak@localhost umask_sample]$ mkdir sample
[sak@localhost umask_sample]$ ll
drwxrwxr-x. 2 sak sak 6  7月  6 14:12 sample
[sak@localhost umask_sample]$ umask 027
[sak@localhost umask_sample]$ mkdir sample2
[sak@localhost umask_sample]$ ll
drwxrwxr-x. 2 sak sak 6  7月  6 14:12 sample
drwxr-x---. 2 sak sak 6  7月  6 14:14 sample2

初期状態ではumaskは「002」です。
この状態で「sample」ディレクトリを作成するとそのパーミッションは「775(rwxrwxr-x)」になっています。
これは「777 – 002」の結果です。
次にumaskコマンドを使用してumaskを「027」に変更しています。
そして「sample2」ディレクトリを作成すると、今度はパーミッションが「750(rwxr-x—)」になっています。
「777 – 027 = 750」だからです。
このように、umaskを変更することでデフォルトパーミッションを変更することができます。

ただし、umaskコマンドによる設定は一時的なものです。
再起動により失われます。
永続的にumaskを変更したい場合は、「/etc/bashrc」ファイルの値を書き換える必要があります。
また、ユーザ個別に設定したい場合は、「~/.bashrc」などに設定を書きこむことで可能です。
既にumaskの設定行が存在する場合はそこの値を変更、存在しない場合は「umask 022」などのように末尾に追記すればよいです。


まとめ

今回は、デフォルトパーミッションとumaskについて解説しました。

chmodコマンドを使用すればファイルやディレクトリのパーミッションの変更は可能です。
しかし、作成時点で設定したい特定のパーミッションが決まっている場合は、umaskを設定する方がよいでしょう。
LPIC-1ではumaskに関する問題がいくつか出題されますので、計算方法はしっかり身に着けておいてください。

最後に確認問題で今回の記事の知識を是非復習しましょう。


確認問題

問題

新規作成したファイルのデフォルトパーミッションが「rw-r—–」である場合、設定されているumaskは次のうちどれか。

A) 117
B) 640
C) 030
D) 227
E) 027

解答
答え:E

問題文のパーミッションを8進数表記になおすと「640」です。
また、ファイルの固定値は「666」です。
デフォルトパーミッション = 固定値 – umask
なので、umaskは「026」となりますが、umaskの計算では位がマイナスになることはありません。
よって、この選択肢の場合は「027」が正解となります。
選択肢に「026」があれば、それも正解です。
「027」にするか「026」にするかはディレクトリ作成時のデフォルトパーミッションに影響を与えます。