2012-08-24 21 views
48

PHPでumask(0);を使用する目的は何ですか?php umask(0)目的は何ですか

私はこれを数回見ましたが、正確に何をしているのかをドキュメントから理解することはできません。

誰かがこれを説明することができますし、それはいつ役に立つでしょうか?

+0

http://php.net/manual/en/function.umask.phpこれは基本的にファイル作成のためのものです。 – Sammaye

+5

@サマエ彼はドキュメンテーションが本当に彼を助けなかったと述べた。 –

+1

umaskのPHPマニュアルのドキュメントは非常に悪いです。 – Adam

答えて

43

umask0000(またはちょうど0)に設定すると、新しく作成されたファイルまたは作成されたディレクトリには、最初に特権が取り消されません。つまり、umaskが0の場合、すべてのファイルは0666またはworld-writableとして作成されます。 umaskの間に作成されたディレクトリは0です。0777になります。

通常、umask(0)が表示されたら、新しく作成されたファイルまたはディレクトリに必要な権限を明示的にworld-writable以外に設定するために、chmod()を直接呼び出す必要があります。

umaskを0に設定するときは注意してください!これは危険なことがあり、ほとんどの場合、Webサーバーがファイルを変更できる必要がある「実際の」ユーザーとは別のユーザーとして実行されるときに、Webサーバーによって後で書き込まれる必要があるファイルを作成するためにのみ役に立ちますWebサーバーによって作成されます。それ以外の場合は、システムのデフォルトのumaskは0022のようになりますが、ファイル所有者が書き込み可能ですが、他は偽です。その場合、通常のユーザーアカウントでマシンにログインした場合、PHPの下でWebサーバーによって作成されたファイルはでなく、は書き込み可能になります。

世界的に書き込み可能なファイルを作成するのではなく、ウェブサーバーがより明示的に書き込んでいるディレクトリを管理することが一般的には良い考えです。ディレクトリ内で作成されたファイルに特定のグループ権限が必要な場合は、そのディレクトリ内の新しいファイルがグループの所有権を継承するように、ディレクトリにsgidビットを設定することをお勧めします。ファイルへのアクセスを必要とするユーザーは、アクセス権を持つグループのメンバーである必要があります。これは、世界で読める、世界に書かれたファイルを作成するよりはるかに安全です。

php > umask(0); 
// Should get created as 666 
php > touch('file1.txt'); 

// "2" perms revoked from group, others, gets created as 644 
php > umask(022); 
php > touch('file2.txt'); 

// All revoked (2,4) from group, others, gets created as 600 
php > umask(066); 
php > touch('file3.txt'); 

-rw-rw-rw- 1 me group  0 Aug 24 15:34 file1.txt 
-rw-r--r-- 1 me group  0 Aug 24 15:35 file2.txt 
-rw------- 1 me group  0 Aug 24 15:37 file3.txt 
3

umaskは基本的にファイルを作成するためのデフォルト設定です。本質的には、デフォルトのchmodをオンにしてからファイルを書き込む方が、それを書き込んだりchmodしたりする方が安全です(いくつかはそうです)。最終日にファイルを書き終えてからchmodを実行するまでの時間は、最高でもミリ秒であるので、私はこれについて懐疑的です。

umask() sets PHP's umask to mask & 0777 and returns the old umask 

それは基本的にあなたがOSのLinuxなどに入れるものは何でもデフォルトの書き込み権限を設定し、あなたが戻ってそれをリセットすることができますので、古いものを返します。これは、PHPプロセス自体に適用されます。

ドキュメントページのコメント:http://php.net/manual/en/function.umask.phpが例として明確になります。

関連する問題