umaskコマンドはBashの組み込みコマンド(BashというよりBourne Shellの組み込みコマンド)で、ファイル作成時の権限を制御出来るコマンドになります。
umaskコマンドでは、ファイルのパーミッションをマスクする(ファイル権限を設定しない部分,マスキングテープのような保護を行う意味)数値を設定することによって、ファイル作成時の権限を制御できます。
例えば、自ユーザにしか権限が必要ないファイルを多く作成する場合などに利用できます。
目次
現在のマスクの設定値を表示
umaskコマンドを引数なしで利用すると、現在のマスクの設定値を表示できます。
出力は4桁で示されていますが一番左の値はspecial mode bitsで、SUID・SGID・スティッキービット(制限付き削除フラグ)に利用されます。その次の3桁がファイル権限になります。
ファイル権限を設定するときなどは特別な理由がない限り、ファイル権限の3桁の値で十分です。
また、umaskの設定でデフォルト値が022や002だったり、OSによって少し異なる場合があるので注意が必要かもしれません。Ubuntu20.04ではデフォルトの値は「002」でした。
1 2 |
$ umask 0002 |
マスクを設定してファイルやディレクトリを作成
マスクの設定は8進数の形式でchmodコマンドで利用するときのように行います。ファイル権限についてはchmodコマンドを参考にしてください。
umaskコマンドで設定する引数は、ファイル権限を設定されたくない部分を8進数の形式で指定します。
例えば、umaskの設定が000の場合、ファイルを作成するとき、ファイル作成時の権限は666に、ディレクトリの作成時の権限は777が設定されます。
自ユーザの部分だけを設定したい場合はumaskコマンドで設定するのは077になり、ファイルの権限は600で、ディレクトリの権限は700で作成されます。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ cd umask/ $ umask 0002 $ umask 077 $ touch testfile $ ls -l 合計 0 -rw------- 1 ubuntu ubuntu 0 1月 16 04:01 testfile $ $ mkdir testdir $ ls -l 合計 4 drwx------ 2 ubuntu ubuntu 4096 1月 16 04:02 testdir -rw------- 1 ubuntu ubuntu 0 1月 16 04:01 testfile |
シンボル形式でも設定が可能です。この場合はファイル権限を設定したい部分をシンボル形式で指定します。例えば、077を設定したい場合は、シンボル形式で'u=rwx,g=,o='のようになります。
コマンド例と実行結果
1 2 3 4 5 |
$ umask 0002 $ umask u=rwx,g=,o= $ umask 0077 |
現在のマスク設定を再利用できる形式で表示(-pオプション)
-pオプションを用いると現在のマスク設定を再利用できる形式で表示できます。
1 2 |
$ umask -p umask 0002 |
これは、一時的にumaskを設定したい場合に戻すときに利用できます。戻すときは例えば、evalコマンドを利用して戻すことができます。
コマンド例と実行結果
1 2 3 4 5 6 7 8 |
$ default_umask=$(umask -p) $ umask 077 $ umask 0077 $ $ eval $default_umask $ umask 0002 |
また、-pオプションを用いて引数にファイル権限の設定を入力した場合は、オプションなしで利用した場合と同じ機能になり、マスクの設定を行います。
マスク設定をシンボル表示で表示(-Sオプション)
-Sオプションはシンボル形式で表示をできます。
1 2 |
$ umask -S u=rwx,g=rwx,o=rx |
また、-pオプションと一緒に用いると、シンボル形式での再利用できる形式で表示できます。
1 2 |
$ umask -pS umask -S u=rwx,g=rwx,o=rx |
umaskの設定は継承される
umaskコマンドのファイル作成の設定は親シェルから継承されます。シェルスクリプト作成の時に注意が必要かもしれません。
コマンド例と実行結果
1 2 3 4 5 6 7 |
$ umask 0002 $ umask 077 $ $ bash $ umask 0077 |
sshコマンドで重要なauthorized_keysのようなファイルをssh-copy-idコマンドではなく、手作業で作成したい場合、chmodコマンドを利用せずにumaskコマンドを利用すると、シンプルな記述を行うことができます。
ここでは、authorized_keysに保存する公開鍵の内容は気にせず、単純にディレクトリとファイルの作成を行い、その権限を確認します。
1 2 3 4 5 6 7 8 |
$ echo 'test' | bash -c 'cd; umask 077; mkdir -p .ssh; cat >> .ssh/authorized_keys' $ ls -al .ssh 合計 12 drwx------ 2 ubuntu ubuntu 4096 1月 16 04:35 . drwxr-xr-x 17 ubuntu ubuntu 4096 1月 16 04:35 .. -rw------- 1 ubuntu ubuntu 5 1月 16 04:35 authorized_keys $ cat .ssh/authorized_keys test |
umaskコマンドを用いれば、簡単に.sshのディレクトリ権限は700で、authorized_keysのファイル権限は600で作成できます。