umask

4月 2, 2009

umask


パーミッションに関連して、umaskについてまとめてみよう、と。
(基本中の基本ではあるが、やはりうっかりすると忘れてしまうので)

UNIX系OS上のデフォルトパーミッションは、ファイルは666,ディレクトリは777であるが、
実際にこれらを新規作成するとパーミッションは644,755となる。これにはumaskという
しくみが関っている。

umask値は、新たに作成されるファイル・ディレクトリのデフォルトパーミッションを制御する。
引数なしでumaskコマンドを実行すると、現在のumask値を表示する。

$ umask
0022


一番左の桁はsticky bit等特殊なパーミッションのためにあるので、ここでは右の3桁のみ確認すればよい。値を指定すると、それ以降に新規作成するファイル・ディレクトリに適用される(作成済みのファイルには影響を与えない)。

$ umask 027


通常、デフォルトのumask値は022。この数値は、デフォルトパーミッションの値に対して
「許可したくない」値であり、デフォルトパーミッションの値からumask値を引いた値が、
新規に作成されるファイル・ディレクトリのパーミッションとして設定される。
ファイル・ディレクトリのそれぞれのデフォルトパーミッションは以下となる。

ファイル:666
ディレクトリ:777


umask値が022だったら、666-022=644,777-022=755というように、644,755が新規作成時に設定されることになる。umask値027だったら、666-027=640,777-027=750となる。

設定するべきumask値を割り出すには、逆にデフォルトパーミッションから設定したいパーミッションの値を引けばいい。例えば、すべての新規作成のファイルについて自分以外のアクセス(読み・書き・実行)を禁止したければ、パーミッションは600にする必要がある。666-600=066なので、066がumask値となる。

$ umask 066
$ touch abc
$ ls -l abc


としてみると、ファイルabcのパーミッションは

"-rw-------"

と、600になっているはず。

追記(2011/02/14)
訂正です。066だとファイルに対してはその値が適用されるが、ディレクトリには適用されず、結果的に755のパーミッションになってしまう。ファイル・ディレクトリともに自分以外のアクセスを認めないようにするにはumask 077にする。


このようなデフォルト以外のumask値はログイン時のみ有効で、ログアウトするともとのumask値に戻る。恒久的に特定の値を設定したい場合、ユーザのhomeディレクトリ配下の.bashrcに以下のように記述しておく。

umask 027


なお、システム全体に適用されるumask値は/etc/.bashrcに記載されており、
ここでの値は全ユーザーのumaskとして適用される。

余談ですが。

umaskについてググっていたら英語のサイトでいくつか面白そうなのをみつけてしまった。
このページなんか、クイズとかあって英語も兼ねたお勉強になっていいかな、と。

他のサイトからの抜粋など組み合わせて、こんなexplainを書いてみた。

What “umask 007″ command do?

“All files created from now on will have the default permission of 660.
then,all new files will be locked to outsiders but readable and writable by the owner and group of the file.”

これ以降作成されるすべてのファイルはデフォルトパーミッションが660となる。すべての新規作成ファイルはオーナーと所属グループメンバーにのみ読取り・書込み権限が付与され、その他のグループからのアクセスはブロックされる。


…こんなことまで書くつもりなかったのに、ちょっと脱線してしまいました。
うーむ、何気ないことからでも、世界はどんどん広がるのだなーw

Categories: Linux

No Responses so far | Have Your Say!

Comments are closed.