概要

umaskはユーザごとにファイルとディレクトリを新規作成するときの権限を設定する。

umaskには禁止するビットを設定する。

多くの場合、umaskの設定はグローバル設定ファイルである/etc/profile/etc/bashrcやユーザごとの.bashrc.bash_profileに設定する。

umask値を変更する

現在のumask設定を確認するにはumaskコマンドを実行する。

$ umask
0022

現在のログインセッションでumaskを変更すると、ログイン中、umaskを変えることができる。

$ ssh 192.0.2.1 'umask'
0022
$ ssh 192.0.2.0 'umask 0777; umask'
0777
$ ssh 192.0.2.0 'umask'
0022

スクリプト内で変更する場合はスクリプト内に限って変更される。

$ cat umask.sh 
umask 0777
umask

$ umask
0027
$ sh umask.sh 
0777
$ umask
0027

ファイルとumask

ファイルは、通常rw-rw-rw-(つまり666)で作成しようとするが、umaskで設定された禁止ビットが引かれたとおりのパーミッションで作成される。

$ umask
0022

$ touch file
$ ls -l file | awk '{print $1}'
-rw-r--r--

ディレクトリとumask

ディレクトリは、通常rwxrwxrwx(つまり777)で作成しようとするが、umaskで設定された禁止ビットが引かれたとおりのパーミッションで作成される。

$ umask
0022

$ mkdir directory
$ ls -ld directory | awk '{print $1}'
drwxr-xr-x

umask -Sで設定、設定確認

今まで説明した通り、umaskには禁止するビットを設定し、ファイルとディレクトリはumaskで設定された禁止ビットが引かれたのパーミッションで作成される。

引き算をしなければならず直感的にわかりずらいが、-Sオプションを使うことで、実際にどのパーミッションでディレクトリが作成されるのかをrwxを使ったシンボルで示せる。

$ umask
0027

$ mkdir directory2
$ ls -ld directory2 | awk '{print $1}'
drwxr-x---

$ umask -S
u=rwx,g=rx,o=

設定確認だけでなく設定自体も-Sオプションを使ってできる。

$ umask
0022
$ umask -S g=rwx,u=rwx,o=
u=rwx,g=rwx,o=
$ umask
0007

ちなみにmanによると設定の場合は-Sは省略できる。

$ umask g=rwx,u=rwx,o=

If mode begins with a digit, it is interpreted as an octal number; otherwise it is interpreted as a symbolic mode mask similar to that accepted by chmod(1).