3

小さなWebアプリを開発しました。

このアプリは、ユーザーが画像をアップロードできるようにします。また、これらの画像の名前を含むテキスト ファイルを生成します (名前は MySQL データベースに保存され、MySQL データベースから取得されます)。

MAMP を使用してこのアプリを開発しました。アップロードされた画像ファイルを作成するには、PHP 関数を使用します

imagejpeg('my/path/name.jpg')

ファイルを削除するには、PHP関数を使用します

unlink('folder1/folder2/name.jpg')

関数を使用しているテキストドキュメントに書き込む

fopen('folder1/folder2/name.txt', 'w')

これら 3 つの関数はすべて、アクセス許可に関連するエラーを生成します。現在、サイトはライブ ホスティング環境に移行されています。

どうしてこれなの?folder1フォルダとを設定するために必要なアクセス許可は何folder2ですか?

パーミッション 777 は、サーバーを一般に公開するため、一般的に悪いことを知っています。ただし、フォルダーで 777 を使用しない限り、関数が機能しないことがわかりました。誰でも私のジレンマに光を当てることができますか?

4

3 に答える 3

1

エレガントだと思う解決策がありますが、おそらく私だけです:)ディレクトリのグループ所有者をwww-dataに変更し、権利を775に設定します。

chown -R :www-data folder1
chmod -R 775 folder1
于 2010-06-10T14:44:16.333 に答える
1

フォルダーのパーミッションをやみくもに 777 に設定しないでください。これにより、システム上のすべてのユーザーに対して読み取り、書き込み、実行ビットが有効になります。

一般的なセキュリティ対策として、アプリケーションの実行に必要な最小限の権限を常に付与する必要があります。

上記の質問からあなたのアプリケーションの要件についてはあまり知りませんが、犯人のディレクトリには、あなたと Web サーバーを実行するユーザーの読み取り/書き込み/実行権限のみが必要なようです。それらを Web ユーザーに付与するだけで、sudo を使用して自分でアクセスできます。

read - ディレクトリのリストを取得できます。
write - ディレクトリに新しいファイルを作成するか、既存のファイルを削除するか、ファイルの名前を変更します。(例: unlink() 関数の使用)
実行 - ディレクトリに移動してアクセスできるようにします。

あなたの場合、以下はうまくいくはずです:

chown -R www-data: folder1/
chmod 700 folder1/ folder1/folder2/

これは、Web サーバーがユーザー www-data として実行されていることを前提としています。sudo を使用せずに FTP または bash シェルを介してディレクトリとそれぞれのファイルにアクセスしたい場合は、wwwusers などのグループを作成し、それらのディレクトリへのアクセスが必要なすべてのユーザーをそのグループに追加する必要があります。次に、次のようにします。

chown -R www-data:wwwusers folder1/
chmod 770 folder1/ folder1/folder2/

ところで、あなたがサーバーに root を持っていて、有効な POSIX ACL や grsecurity のようなものは何もないと仮定しているという点で、私の回答は素朴です。ACL を使用すると、次のようなことを行う必要がありますsetfacl -mu:www-data:rwx /path/to/dir。その場合、ほとんどの場合、ホスティング プロバイダーに支援を求める必要があります。

UNIX または UNIX ライクなファイルシステム上のディレクトリとファイルに対するパーミッションの仕組みの基本を理解する必要があります。を必ず実行してman chmodくださいman chownUNIX パーミッションの詳細については、こちらとこちらもご覧ください。

于 2010-06-10T14:53:36.627 に答える
0

アクセス許可を変更するだけでなく、フォルダーの所有権を調べましたか? Web サーバーは、スクリプトとフォルダーを開発およびデプロイするユーザーとは別のユーザーとして実行されます。簡単な修正は、フォルダーの所有者を Web サーバー ユーザーに変更することです。

于 2010-06-10T14:42:46.587 に答える