Unix デーモンがファイル作成モード マスクを 0 に設定する理由を理解するのに苦労しています。誰かが umask 機能をわかりやすく説明してくれるとありがたいです。
1 に答える
本を読んだり、コードを読んだりして、umask 値を 0 に設定することを推奨しているようです。それが最良の選択であると完全に確信したことはありませんが、簡単です。
問題は次のとおりです。
- デーモンがファイル (またはディレクトリ) を作成するとどうなりますか?
- デーモンが開始されたときの umask の値は?
最初の質問に対する答えは、デーモンが 444 または 644 などの 8 進モードでファイルを作成する可能性が高いということです。ただし、open()
値として 0444 または 0644 を使用して呼び出すと、umask に設定されているビットも削除されます。 -そのため、ファイルに対する実際のアクセス許可は、デーモンが計画したよりも制限的である可能性があります。
もちろん、これが大きな問題かどうかは、他の質問への回答によって異なります。私は通常、umask 022 で実行します。作成したファイルへのグループまたはパブリックの書き込みアクセスはありません。umask を明示的に設定しないデーモンを実行すると、デーモンが作成するファイルは、グループまたはパブリックの書き込み許可なしで残されます。それはいいです; 通常、ファイルのアクセス許可にはグループまたはパブリック アクセスが含まれていないため、問題はないだろうという仮説を立てました。しかし、妄想的なシステム管理者が 037 の umask で実行したとします (グループの書き込みも実行も、パブリックへのアクセスもありません)。次に、デーモンは実際のパーミッションが 440 または 640 のファイルを作成します。
umask を 0 に設定することにより、デーモンは、ファイルを作成するときに、作成するファイルのパーミッションが、open()
呼び出しで指定したパーミッションと正確に一致するようにします。これは、デーモンが不適切な書き込み許可を public に、特に group に与えないように注意する必要があることを意味します。
デーモンが何をするかに大きく依存します。多くのデーモンは root 権限で実行され、特定のユーザーに代わってファイルを作成する場合があります。root によって実行される他のデーモンは、システム管理者用のファイルのみを作成する場合があります。その他のデーモンは、特定のユーザー (たとえば、DBMS の管理アカウント) によって実行され、要件が異なる場合があります。このようなデーモンは root によって開始されますが、切り替えて DBMS 管理ユーザーになり、その過程で root 権限を失います。ファイル アクセスの要件は、これらの異なるクラスのデーモンではまったく異なる場合があります。umask の扱いが異なる場合があります。しかし、通常は、umask が決定論的であることを確認することをお勧めします。
ただし、デーモンが十分に慎重に作成されていない場合、またはどのパーミッションを使用する必要があるかについてシステム管理者とは異なる考えを持っているが、umask を 0 または別の既知の値に設定している場合、システム管理者はデフォルトをオーバーライドする方法がないままになる可能性があります。デーモンによって設定されたパーミッション。オープン ソースの利点の 1 つは、システム管理者が必要に応じてコードを変更して要件に合わせられることです。
そのため、デーモンを起動するユーザーの umask 設定に関係なく、一貫した動作が保証されるため、デーモンの umask をゼロに設定することをお勧めします。デーモンを作成している場合は、コンテキスト内で他の決定論的な値が妥当である可能性があります。愚か者が umask 777 を設定した場合に何が起こるかを常に考慮する必要があります。結果が望んだものになる可能性は低いです。