現在の位置: ホーム> 最新記事一覧> PHP UMASK関数を使用する場合、ディレクトリアクセス許可を設定するためにどのような重要なポイントを注意する必要がありますか?

PHP UMASK関数を使用する場合、ディレクトリアクセス許可を設定するためにどのような重要なポイントを注意する必要がありますか?

gitbox 2025-08-27

1. umask()の仕組みを理解します

umask()は、実際にはファイルまたはディレクトリに権限を直接設定していません。マスクを介したファイルまたはディレクトリの権限の値を制限します。各ファイルとディレクトリには、通常(ファイル)と777 (ディレクトリ)が作成されたときにデフォルトの許可があります。ただし、 umask()は、これらのデフォルト値でビットワイズと「操作(および)を実行することにより、実際のアクセス許可を設定します。

たとえば、デフォルトの許可777はUMASK値で計算され、最終許可値を計算します。例えば:

  • デフォルトのディレクトリ権限: 777

  • Umask Value: 022

計算結果は755です。つまり、ディレクトリの権限はRWXR-XR-Xです。


2。umask ()関数を使用してディレクトリ権限を設定する方法

PHPでは、 UMASK()関数を使用してプロセスのUMASKを設定できます。設定後、PHPは、後続の作成でファイルまたはディレクトリを作成する際にUMASK値の影響を受けます。通常、ディレクトリが作成される前に、UMASK値を設定する必要があります。

たとえば、次のコードは0022にumaskを設定するため、PHPによって作成されたディレクトリには755の権限があります。

 <span><span><span class="hljs-comment">// 設定 umask</span></span><span>
</span><span><span class="hljs-title function_ invoke__">umask</span></span><span>(</span><span><span class="hljs-number">0022</span></span><span>);

</span><span><span class="hljs-comment">// ディレクトリを作成します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">mkdir</span></span><span>(</span><span><span class="hljs-string">'new_directory'</span></span><span>);
</span></span>

上記の例では、 MKDIR()関数は755の権限を持つディレクトリを作成します。デフォルトの許可777をマイナスUMASK 022の後、最終ディレクトリ許可は755です。


3。許可を設定する際の一般的なエラーと予防措置

3.1許可が緩すぎることに注意してください

特に公共または共有サーバー環境でディレクトリの権限を設定する場合、過度の権限がセキュリティリスクにつながる可能性があります。たとえば、ディレクトリアクセス許可を777(完全に開いている)に設定すると、誰でもディレクトリのコンテンツを読み、書き込み、実行できます。この問題を回避するには、755や750などの少なくとも保守的な許可を使用することをお勧めします。

3.2 Umaskは、新しく作成されたファイルとディレクトリにのみ有効です

Umask()によって設定された許可マスクは、現在のプロセスによって作成されたファイルまたはディレクトリにのみ影響することに注意する必要があります。 umask()は、既存のファイルやディレクトリに影響を与えません。作成されたファイルまたはディレクトリに権限を変更する必要がある場合は、 chmod()関数を使用できます。

 <span><span><span class="hljs-title function_ invoke__">chmod</span></span><span>(</span><span><span class="hljs-string">'existing_directory'</span></span><span>, </span><span><span class="hljs-number">0755</span></span><span>);
</span></span>

3.3 PHPのセーフモードとopen_basedir設定との互換性

一部のPHP構成環境(PHPのセーフモード有効またはOpen_Basedirが設定されているなど)では、PHPのファイルとディレクトリの操作権限が制限される場合があります。 Umask()を介してアクセス許可を設定した場合でも、これらの構成によって制限される場合があります。したがって、これらの環境でumask()を使用する場合は、特別な注意が必要です。


4。Webアプリケーションでumask()を使用する実際のシナリオ

4.1ファイルアップロード

ファイルのアップロードをサポートするWebアプリケーションでは、アップロードされたファイルが特定の権限を必要とすることがよくあります。 umask()を使用して、ファイルが作成されたときにアクセス許可を制御します。たとえば、ユーザーがアップロードしたファイルを処理する場合、適切なUMASK値を設定して、アップロードされたファイルにあまりにも緩いアクセス許可がないことを確認できます。

 <span><span><span class="hljs-comment">// 設定 umask,ファイルの許可がないことを確認してください 777</span></span><span>
</span><span><span class="hljs-title function_ invoke__">umask</span></span><span>(</span><span><span class="hljs-number">0022</span></span><span>);

</span><span><span class="hljs-comment">// アップロードされたファイルを処理します</span></span><span>
</span><span><span class="hljs-title function_ invoke__">move_uploaded_file</span></span><span>(</span><span><span class="hljs-variable">$tmp_name</span></span><span>, </span><span><span class="hljs-variable">$destination</span></span><span>);
</span></span>

4.2キャッシュディレクトリを作成します

Webアプリケーションでは、キャッシュディレクトリは通常、一時的なデータを保存するために使用されます。キャッシュされたディレクトリが悪意のあるユーザーによって変更されないようにするために、適切なUMASKを設定することにより、ディレクトリに正しいアクセス許可があることを確認できます。

 <span><span><span class="hljs-title function_ invoke__">umask</span></span><span>(</span><span><span class="hljs-number">0027</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">mkdir</span></span><span>(</span><span><span class="hljs-string">'/path/to/cache'</span></span><span>, </span><span><span class="hljs-number">0775</span></span><span>);
</span></span>

この例では、キャッシュディレクトリは許可775として作成されます。ファイル所有者と同じユーザーのグループのみが許可を読み書きしていますが、他のユーザーはディレクトリのコンテンツを変更できません。