「Umask」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎マスクの値を設定: 情報を更新)
 
(3人の利用者による、間の7版が非表示)
1行目: 1行目:
 
[[Category:セキュリティ]]
 
[[Category:セキュリティ]]
 
[[Category:ファイルシステム]]
 
[[Category:ファイルシステム]]
  +
[[Category:コマンド]]
 
[[en:Umask]]
 
[[en:Umask]]
 
[[es:Umask]]
 
[[es:Umask]]
  +
[[pt:Umask]]
  +
[[ru:Umask]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|ファイルのパーミッションと属性}}
 
{{Related|ファイルのパーミッションと属性}}
 
{{Related articles end}}
 
{{Related articles end}}
   
''umask'' ユーティリティはファイル作成モードマスクを制御するのに使われます。モードマスクは新しく作成されたファイルのファイルパーミッションの初期値を決定します。このユーティリティの挙動は [[wikipedia:ja:POSIX|POSIX]] によって仕様化されており、[http://pubs.opengroup.org/onlinepubs/9699919799/utilities/umask.html POSIX のプログラマーマニュアル] に解説があります。''umask'' はシェルの実行環境に影響を与えるため、基本的にシェルのビルトインコマンドとして実装されます。
+
[[Wikipedia:umask|umask]] ユーティリティはファイル作成モードマスクを制御するのに使われます。モードマスクは新しく作成されたファイルのファイルパーミッションの初期値を決定します。このユーティリティの挙動は [[wikipedia:ja:POSIX|POSIX]] によって仕様化されており、[https://pubs.opengroup.org/onlinepubs/9699919799/utilities/umask.html POSIX のプログラマーマニュアル] に解説があります。''umask'' はシェルの実行環境に影響を与えるため、基本的にシェルのビルトインコマンドとして実装されます。
   
 
== モードマスクの意味 ==
 
== モードマスクの意味 ==
   
  +
モードマスクには新しく作成されたファイルに設定される'''べきではない'''パーミッションビットが記述されます。つまり新しく作成されたファイルには[[Wikipedia:ja:否定|全く逆]]のパーミッションビットが設定されます。マスクで何らかのビットが {{ic|1}} に設定されていれば、新しく作成したファイルの該当パーミッションは無効になります。マスクはパーミッションビットを取り除くフィルターとして機能し、ファイルのデフォルト権限を設定するのに役立ちます。
The mode mask contains the permission bits that should '''not''' be set on a newly created file, hence it is the [[wikipedia:Logical complement|logical complement]] of the permission bits set on a newly created file. If some bit in the mask is set to {{ic|1}}, the corresponding permission for the newly created file will be disabled. Hence the mask acts as a filter to strip away permission bits and helps with setting default access to files.
 
   
  +
新しく作成されたファイルに設定されるパーミッションビットの値は論理[[wikipedia:Material nonimplication|非含意]] (付加) を使って計算され、論理記号で表現することができます:
The resulting value for permission bits to be set on a newly created file is calculated using bitwise [[wikipedia:Material nonimplication|material nonimplication]] (also known as abjunction), which can be expressed in logical notation:
 
   
 
R: (D & (~M))
 
R: (D & (~M))
   
  +
つまり、最終的なパーミッション {{ic|R}} はデフォルトのパーミッション {{ic|D}} の[[wikipedia:ja:論理積|論理積]]とファイル作成時のモードマスク {{ic|M}} の[[wikipedia:ja:ビット演算|論理否定]]が合わさった結果になります。
That is, the resulting permissions {{ic|R}} are the result of [[wikipedia:Logical conjunction|bitwise conjunction]] of default permissions {{ic|D}} and the [[wikipedia:Bitwise negation|bitwise negation]] of file-creation mode mask {{ic|M}}.
 
   
 
{{Note|
 
{{Note|
  +
* Linux ではファイルを作成するときに実行権限を付与することはできません。実際、ディレクトリ作成時のデフォルトのパーミッションは 777 ですが、ファイルの場合は 666 となっています。
* Linux does not allow a file to be created with execution permissions, in fact the default creation permissions are 777 for directories, but only 666 for files.
 
  +
* Linux では、マスクのファイルパーミッションビットだけが使われます ({{man|2|umask}} を参照)。マスクの ''suid'', ''sgid'', ''sticky'' ビットは無視されます。
* On Linux, only the file permission bits of the mask are used, i.e. the 022 mask is equivalent to 0022.[http://man7.org/linux/man-pages/man2/umask.2.html]
 
 
}}
 
}}
   
  +
例えば、ファイル作成モードマスクが 027 だとします。それぞれの数字は以下を表します:
For example, let us assume that the file-creation mode mask is 027. Here the bitwise representation of each digit represents:
 
   
  +
* 0 は新しく作成したファイルに設定されない ''user'' パーミッションビットです。
* 0 stands for the ''user'' permission bits not set on a newly created file
 
  +
* 2 は新しく作成したファイルに設定されない ''group'' パーミッションビットです。
* 2 stands for the ''group'' permission bits not set on a newly created file
 
  +
* 7 は新しく作成したファイルに設定されない ''other'' パーミッションビットです。
* 7 stands for the ''other'' permission bits not set on a newly created file
 
   
  +
新しく作成したファイルの所有者がユーザー {{ic|User1}} で所有グループがグループ {{ic|Group1}} の場合、下にある表と照合すれば、{{ic|User1}} は新しく作成されたファイルに対して全ての権限を得ることになり (8進数で7)、{{ic|Group1}} グループの他のユーザーは書き込み権限がなく (8進数で5)、その他のユーザーは新しく作成したファイルを扱う権限が全くないことがわかります (8進数で0)。つまり、027 マスクで作成されたファイルのパーミッションは 750 になります。
With the information provided by the table below this means that for a newly created file, for example owned by {{ic|User1}} user and {{ic|Group1}} group, {{ic|User1}} has all the possible permissions (octal value 7) for the newly created file, other users of the {{ic|Group1}} group do not have write permissions (octal value 5), and any other user does not have any permissions (octal value 0) to the newly created file. So with the 027 mask taken for this example, files will be created with 750 permissions.
 
   
 
{| class="wikitable"
 
{| class="wikitable"
 
|+
 
|+
! Octal !! Binary !! Meaning
+
! 8進数 !! バイナリ !! 意味
 
|-
 
|-
| 0 || 000 || no permissions
+
| 0 || 000 || 権限なし
 
|-
 
|-
| 1 || 001 || execute only
+
| 1 || 001 || 実行のみ
 
|-
 
|-
| 2 || 010 || write only
+
| 2 || 010 || 書き込みのみ
 
|-
 
|-
| 3 || 011 || write and execute
+
| 3 || 011 || 書き込みと実行
 
|-
 
|-
| 4 || 100 || read only
+
| 4 || 100 || 読み込みのみ
 
|-
 
|-
| 5 || 101 || read and execute
+
| 5 || 101 || 読み込みと実行
 
|-
 
|-
| 6 || 110 || read and write
+
| 6 || 110 || 読み書き
 
|-
 
|-
| 7 || 111 || read, write and execute
+
| 7 || 111 || 読み書き実行
 
|}
 
|}
   
59行目: 62行目:
 
{{hc|$ umask|0027}}
 
{{hc|$ umask|0027}}
   
  +
POSIX によって標準化されている {{ic|-S}} オプションを使った場合、記号表記でマスクが表示されます。ただし、記号表記の値は8進数の逆の値 (つまり新しく作成したファイルに設定されるパーミッションビット) になるので注意してください:
When the {{ic|-S}} option, standardized by POSIX, is used, the mask will be displayed using symbolic notation. However, the '''symbolic notation value will always be the logical complement of the octal value''', i.e. the permission bits to be set on the newly created file:
 
   
 
{{hc|$ umask -S|2=
 
{{hc|$ umask -S|2=
67行目: 70行目:
 
== マスクの値を設定 ==
 
== マスクの値を設定 ==
   
  +
{{Note|Umask の値はケースバイケースで設定してください。例えば、デスクトップユーザーは他のユーザーからファイルにアクセスできないようにホームフォルダの制限を厳しくすると良いでしょう ({{ic|useradd -m}} では {{ic|chmod 700}} が適用されます)。他のユーザーとファイルを共有する場合やファイルを公開する場合 ([[Apache]] を使用する場合) などは umask の制限を緩めるべきです。}}
{{Note|Umask values can be set on a case-by-case basis. For example, desktop users may find the restricted permissions on their home folder ({{ic|chmod 700}}, as applied by {{ic|useradd -m}}) sufficient, as they make all files within unaccessible to other users. Should this not be practical (for example when using [[Apache]]), and public files are stored amongst private ones, then consider restricting the umask instead.}}
 
   
umask の値は ''umask'' コマンドで設定することができます。モードマスクを指定するのに使う文字列は [[chmod]] でモードを指定する時と同じ構文ルールに従っています (詳しくは [http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html#tag_20_17_13 POSIX Programmer's Manual] を参照)
+
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}} 設定されています。
+
システム全体の umask の値は {{ic|/etc/profile}} や {{ic|/etc/bash.bashrc}} などのデフォルト[[シェル]]設定ファイルで設定することができます。(Arch を含む [https://github.com/archlinux/svntogit-packages/blob/packages/filesystem/trunk/profile /etc/profile]) ほとんど Linux ディストリビューションはデフォルト値を {{ic|022}} に設定しています。{{ic|pam_umask.so}} umask を設定することもできますが、{{ic|/etc/profile}} などによって上書きされる可能性があります。
   
  +
別の値を設定する必要がある場合、ファイルを直接編集するか (全てのユーザーに影響を与えます)、ユーザーのシェル設定ファイル (例: {{ic|~/.bashrc}}) から ''umask'' を呼び出すようにすることでユーザーの umask だけを変更することができます。ただし、変更は次のログイン時から適用されます。現在のセッション中のみ umask を変更したい場合、''umask'' を実行して設定したい値を入力してください。例えば {{ic|umask 077}} を実行すると新しいファイルに読み書き権限が付与され、新しいフォルダには読み書き実行権限が付与されます。
If you need to set a different value, you can either directly edit such file, thus affecting all users, or call ''umask'' from your shell's user configuration file, e.g. {{ic|~/.bashrc}} to only change your umask, however these changes will only take effect after the next login. To change your umask during your current session only, simply run ''umask'' and type your desired value. For example, running {{ic|umask 077}} will give you read and write permissions for new files, and read, write and execute permissions for new folders.
 
  +
  +
{{man|8|pam_umask|DESCRIPTION}} で述べたように、{{ic|1=umask=value}} は [[ユーザーとグループ#ユーザーデータベース]] の {{ic|/etc/passwd}} セクションでも使用できます。
  +
[https://bbs.archlinux.org/viewtopic.php?pid=1857211#p1857211 setting UMASK in GECOS field] に関するディスカッションを参照してください。
  +
  +
=== KDE/Plasma の umask 値を設定する ===
  +
  +
{{ic|/etc/profile}} を介して umask 値を設定しても、KDE ​/Plasma セッションは systemd [[ユーザーユニット]] として開始されるため、機能しなくなりました。
  +
  +
umask 値は、{{ic|pam_umask.so}} または systemd [[ドロップインファイル]] を介して設定できます。
  +
  +
{{hc|/etc/systemd/system/user@.d/override.conf|2=
  +
[Service]
  +
UMask=0002
  +
}}
  +
  +
{{ic|pam_umask.so}} を使用すると、テキストコンソールとグラフィカル KDE セッションの両方のシステム全体の umask 値を 1 か所で設定できます。{{ic|/etc/profile}} または systemd 設定の変更は省略できます。したがって、{{ic|/etc/pam.d/login}} と {{ic|/etc/pam.d/systemd-user}} の両方に含まれる設定ファイルで {{ic|pam_umask.so}} を有効にする必要があります。
  +
  +
次の行を {{ic|/etc/pam.d/system-login}} に追加します。
  +
  +
# session optional pam_umask.so umask=022
   
 
== 参照 ==
 
== 参照 ==
   
 
* POSIX プログラマーマニュアル:
 
* POSIX プログラマーマニュアル:
** [http://pubs.opengroup.org/onlinepubs/9699919799/utilities/umask.html umask] (also available as {{ic|umask(1P)}})
+
** [http://pubs.opengroup.org/onlinepubs/9699919799/utilities/umask.html umask] ({{man|1p|umask}} でも閲覧できます)
** [http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html#tag_20_17_13 chmod (extended description)] (also available as {{ic|chmod(1P)}})
+
** [http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html#tag_20_17_13 chmod (extended description)] ({{man|1p|chmod}} でも閲覧できます)
* [[wikipedia:umask]]
 
 
* [https://blogs.gentoo.org/mgorny/2011/10/18/027-umask-a-compromise-between-security-and-simplicity/ 027 umask: a compromise]
 
* [https://blogs.gentoo.org/mgorny/2011/10/18/027-umask-a-compromise-between-security-and-simplicity/ 027 umask: a compromise]

2023年11月1日 (水) 03:12時点における最新版

関連記事

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

モードマスクの意味

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

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

R: (D & (~M))

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

ノート:
  • Linux ではファイルを作成するときに実行権限を付与することはできません。実際、ディレクトリ作成時のデフォルトのパーミッションは 777 ですが、ファイルの場合は 666 となっています。
  • Linux では、マスクのファイルパーミッションビットだけが使われます (umask(2) を参照)。マスクの 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 を参照)

システム全体の umask の値は /etc/profile/etc/bash.bashrc などのデフォルトシェル設定ファイルで設定することができます。(Arch を含む /etc/profile) ほとんどの Linux ディストリビューションはデフォルト値を 022 に設定しています。pam_umask.so で umask を設定することもできますが、/etc/profile などによって上書きされる可能性があります。

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

pam_umask(8) § DESCRIPTION で述べたように、umask=valueユーザーとグループ#ユーザーデータベース/etc/passwd セクションでも使用できます。 setting UMASK in GECOS field に関するディスカッションを参照してください。

KDE/Plasma の umask 値を設定する

/etc/profile を介して umask 値を設定しても、KDE ​/Plasma セッションは systemd ユーザーユニット として開始されるため、機能しなくなりました。

umask 値は、pam_umask.so または systemd ドロップインファイル を介して設定できます。

/etc/systemd/system/user@.d/override.conf
[Service]
UMask=0002

pam_umask.so を使用すると、テキストコンソールとグラフィカル KDE セッションの両方のシステム全体の umask 値を 1 か所で設定できます。/etc/profile または systemd 設定の変更は省略できます。したがって、/etc/pam.d/login/etc/pam.d/systemd-user の両方に含まれる設定ファイルで pam_umask.so を有効にする必要があります。

次の行を /etc/pam.d/system-login に追加します。

# session    optional   pam_umask.so         umask=022

参照