「Umask」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(en:umaskへの転送ページ)
 
(言語間リンク)
(同じ利用者による、間の4版が非表示)
1行目: 1行目:
  +
[[Category:セキュリティ]]
#redirect[[en:umask]]
 
  +
[[Category:ファイルシステム]]
  +
[[en:Umask]]
  +
[[es:Umask]]
  +
[[ru:Umask]]
  +
{{Related articles start}}
  +
{{Related|ファイルのパーミッションと属性}}
  +
{{Related articles end}}
  +
  +
''umask'' ユーティリティはファイル作成モードマスクを制御するのに使われます。モードマスクは新しく作成されたファイルのファイルパーミッションの初期値を決定します。このユーティリティの挙動は [[wikipedia:ja:POSIX|POSIX]] によって仕様化されており、[http://pubs.opengroup.org/onlinepubs/9699919799/utilities/umask.html POSIX のプログラマーマニュアル] に解説があります。''umask'' はシェルの実行環境に影響を与えるため、基本的にシェルのビルトインコマンドとして実装されます。
  +
  +
== モードマスクの意味 ==
  +
  +
モードマスクには新しく作成されたファイルに設定される'''べきではない'''パーミッションビットが記述されます。つまり新しく作成されたファイルには[[Wikipedia:ja:否定|全く逆]]のパーミッションビットが設定されます。マスクで何らかのビットが {{ic|1}} に設定されていれば、新しく作成したファイルの該当パーミッションは無効になります。マスクはパーミッションビットを取り除くフィルターとして機能し、ファイルのデフォルト権限を設定するのに役立ちます。
  +
  +
新しく作成されたファイルに設定されるパーミッションビットの値は論理[[wikipedia:Material nonimplication|非含意]] (付加) を使って計算され、論理記号で表現することができます:
  +
  +
R: (D & (~M))
  +
  +
つまり、最終的なパーミッション {{ic|R}} はデフォルトのパーミッション {{ic|D}} の[[wikipedia:ja:論理積|論理積]]とファイル作成時のモードマスク {{ic|M}} の[[wikipedia:ja:ビット演算|論理否定]]が合わさった結果になります。
  +
  +
{{Note|
  +
* Linux ではファイルを作成するときに実行権限を付与することはできません。実際、ディレクトリ作成時のデフォルトのパーミッションは 777 ですが、ファイルの場合は 666 となっています。
  +
* Linux では、マスクのファイルパーミッションビットだけが使われます [http://man7.org/linux/man-pages/man2/umask.2.html]。マスクの ''suid'', ''sgid'', ''sticky'' ビットは無視されます。
  +
}}
  +
  +
例えば、ファイル作成モードマスクが 027 だとします。それぞれの数字は以下を表します:
  +
  +
* 0 は新しく作成したファイルに設定されない ''user'' パーミッションビットです。
  +
* 2 は新しく作成したファイルに設定されない ''group'' パーミッションビットです。
  +
* 7 は新しく作成したファイルに設定されない ''other'' パーミッションビットです。
  +
  +
新しく作成したファイルの所有者がユーザー {{ic|User1}} で所有グループがグループ {{ic|Group1}} の場合、下にある表と照合すれば、{{ic|User1}} は新しく作成されたファイルに対して全ての権限を得ることになり (8進数で7)、{{ic|Group1}} グループの他のユーザーは書き込み権限がなく (8進数で5)、その他のユーザーは新しく作成したファイルを扱う権限が全くないことがわかります (8進数で0)。つまり、027 マスクで作成されたファイルのパーミッションは 750 になります。
  +
  +
{| class="wikitable"
  +
|+
  +
! 8進数 !! バイナリ !! 意味
  +
|-
  +
| 0 || 000 || 権限なし
  +
|-
  +
| 1 || 001 || 実行のみ
  +
|-
  +
| 2 || 010 || 書き込みのみ
  +
|-
  +
| 3 || 011 || 書き込みと実行
  +
|-
  +
| 4 || 100 || 読み込みのみ
  +
|-
  +
| 5 || 101 || 読み込みと実行
  +
|-
  +
| 6 || 110 || 読み書き
  +
|-
  +
| 7 || 111 || 読み書き実行
  +
|}
  +
  +
== 現在のマスクの値を表示 ==
  +
  +
現在のマスクを表示するには、何も引数を付けずに ''umask'' を実行します。デフォルトの出力スタイルは実装によりますが、基本的に8進数で表示されます:
  +
  +
{{hc|$ umask|0027}}
  +
  +
POSIX によって標準化されている {{ic|-S}} オプションを使った場合、記号表記でマスクが表示されます。ただし、記号表記の値は8進数の逆の値 (つまり新しく作成したファイルに設定されるパーミッションビット) になるので注意してください:
  +
  +
{{hc|$ umask -S|2=
  +
u=rwx,g=rx,o=
  +
}}
  +
  +
== マスクの値を設定 ==
  +
  +
{{Note|Umask の値はケースバイケースで設定してください。例えば、デスクトップユーザーは他のユーザーからファイルにアクセスできないようにホームフォルダの制限を厳しくすると良いでしょう ({{ic|useradd -m}} では {{ic|chmod 700}} が適用されます)。他のユーザーとファイルを共有する場合やファイルを公開する場合 ([[Apache]] を使用する場合) などは umask の制限を緩めるべきです。}}
  +
  +
umask の値は ''umask'' コマンドで設定することができます。モードマスクを指定するのに使う文字列は [[chmod]] でモードを指定する時と同じ構文ルールに従っています (詳しくは [http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html#tag_20_17_13 POSIX Programmer's Manual] を参照)。
  +
  +
(Arch を含む [https://projects.archlinux.org/svntogit/packages.git/tree/trunk/profile?h=packages/filesystem]) ほとんど Linux ディストリビューションはデフォルト値を {{ic|022}} に設定しています。もしくは {{ic|/etc/profile}} や {{ic|/etc/bashrc}} などのデフォルト[[シェル]]設定ファイルで {{ic|002}} に設定されています。
  +
  +
別の値を設定する必要がある場合、ファイルを直接編集するか (全てのユーザーに影響を与えます)、ユーザーのシェル設定ファイル (例: {{ic|~/.bashrc}}) から ''umask'' を呼び出すようにすることでユーザーの umask だけを変更することができます。ただし、変更は次のログイン時から適用されます。現在のセッション中のみ umask を変更したい場合、''umask'' を実行して設定したい値を入力してください。例えば {{ic|umask 077}} を実行すると新しいファイルに読み書き権限が付与され、新しいフォルダには読み書き実行権限が付与されます。
  +
  +
== 参照 ==
  +
  +
* POSIX プログラマーマニュアル:
  +
** [http://pubs.opengroup.org/onlinepubs/9699919799/utilities/umask.html umask] ({{ic|umask(1P)}} でも閲覧できます)
  +
** [http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html#tag_20_17_13 chmod (extended description)] ({{ic|chmod(1P)}} でも閲覧できます)
  +
* [[wikipedia:umask]]
  +
* [https://blogs.gentoo.org/mgorny/2011/10/18/027-umask-a-compromise-between-security-and-simplicity/ 027 umask: a compromise]

2017年8月17日 (木) 23:14時点における版

関連記事

umask ユーティリティはファイル作成モードマスクを制御するのに使われます。モードマスクは新しく作成されたファイルのファイルパーミッションの初期値を決定します。このユーティリティの挙動は POSIX によって仕様化されており、POSIX のプログラマーマニュアル に解説があります。umask はシェルの実行環境に影響を与えるため、基本的にシェルのビルトインコマンドとして実装されます。

モードマスクの意味

モードマスクには新しく作成されたファイルに設定されるべきではないパーミッションビットが記述されます。つまり新しく作成されたファイルには全く逆のパーミッションビットが設定されます。マスクで何らかのビットが 1 に設定されていれば、新しく作成したファイルの該当パーミッションは無効になります。マスクはパーミッションビットを取り除くフィルターとして機能し、ファイルのデフォルト権限を設定するのに役立ちます。

新しく作成されたファイルに設定されるパーミッションビットの値は論理非含意 (付加) を使って計算され、論理記号で表現することができます:

R: (D & (~M))

つまり、最終的なパーミッション R はデフォルトのパーミッション D論理積とファイル作成時のモードマスク M論理否定が合わさった結果になります。

ノート:
  • Linux ではファイルを作成するときに実行権限を付与することはできません。実際、ディレクトリ作成時のデフォルトのパーミッションは 777 ですが、ファイルの場合は 666 となっています。
  • Linux では、マスクのファイルパーミッションビットだけが使われます [1]。マスクの suid, sgid, sticky ビットは無視されます。

例えば、ファイル作成モードマスクが 027 だとします。それぞれの数字は以下を表します:

  • 0 は新しく作成したファイルに設定されない user パーミッションビットです。
  • 2 は新しく作成したファイルに設定されない group パーミッションビットです。
  • 7 は新しく作成したファイルに設定されない other パーミッションビットです。

新しく作成したファイルの所有者がユーザー User1 で所有グループがグループ Group1 の場合、下にある表と照合すれば、User1 は新しく作成されたファイルに対して全ての権限を得ることになり (8進数で7)、Group1 グループの他のユーザーは書き込み権限がなく (8進数で5)、その他のユーザーは新しく作成したファイルを扱う権限が全くないことがわかります (8進数で0)。つまり、027 マスクで作成されたファイルのパーミッションは 750 になります。

8進数 バイナリ 意味
0 000 権限なし
1 001 実行のみ
2 010 書き込みのみ
3 011 書き込みと実行
4 100 読み込みのみ
5 101 読み込みと実行
6 110 読み書き
7 111 読み書き実行

現在のマスクの値を表示

現在のマスクを表示するには、何も引数を付けずに umask を実行します。デフォルトの出力スタイルは実装によりますが、基本的に8進数で表示されます:

$ umask
0027

POSIX によって標準化されている -S オプションを使った場合、記号表記でマスクが表示されます。ただし、記号表記の値は8進数の逆の値 (つまり新しく作成したファイルに設定されるパーミッションビット) になるので注意してください:

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

マスクの値を設定

ノート: Umask の値はケースバイケースで設定してください。例えば、デスクトップユーザーは他のユーザーからファイルにアクセスできないようにホームフォルダの制限を厳しくすると良いでしょう (useradd -m では chmod 700 が適用されます)。他のユーザーとファイルを共有する場合やファイルを公開する場合 (Apache を使用する場合) などは umask の制限を緩めるべきです。

umask の値は umask コマンドで設定することができます。モードマスクを指定するのに使う文字列は chmod でモードを指定する時と同じ構文ルールに従っています (詳しくは POSIX Programmer's Manual を参照)。

(Arch を含む [2]) ほとんど Linux ディストリビューションはデフォルト値を 022 に設定しています。もしくは /etc/profile/etc/bashrc などのデフォルトシェル設定ファイルで 002 に設定されています。

別の値を設定する必要がある場合、ファイルを直接編集するか (全てのユーザーに影響を与えます)、ユーザーのシェル設定ファイル (例: ~/.bashrc) から umask を呼び出すようにすることでユーザーの umask だけを変更することができます。ただし、変更は次のログイン時から適用されます。現在のセッション中のみ umask を変更したい場合、umask を実行して設定したい値を入力してください。例えば umask 077 を実行すると新しいファイルに読み書き権限が付与され、新しいフォルダには読み書き実行権限が付与されます。

参照