0

/etc/ipsec.confPHPコードからファイルにアクセスしようとしています。コードは最初にWindowsサーバーでテストされ、その時点でにアクセス権を付与しましたc:\abc\ipsec.conf。アクセスはこれを使用してwampのhttpd.confで与えられました

<Directory "c:/abc/">
Allow from all
Deny from none
Order allow,deny
</Directory>

Suse Linuxでコードをテストしようとすると、このエラーが発生します

**Warning: fopen(/etc/ipsec.conf) [function.fopen]: failed to open stream: Permission denied in /srv/www/htdocs/nsg/_ipsec.php on line 6**

/etcディレクトリとファイルに777のアクセス許可を与えました。ディレクトリ/etcもに追加されますhttpd.confが、それでも同じエラーが発生します。

4

2 に答える 2

0

いくつかのコメントが指摘しているように、777 を に与える/etcのは悪い考えです。

php スクリプト内からアクセスするにchownは、ファイルのグループ ( を参照) を apache/php が動作している同じグループに変更し、 を介して適切なグループ権限を与える必要がありますchmod。セキュリティ上の理由から、apache のみが/etc.

編集SEliunx などを使用している場合、これは機能しない可能性があります。一般的な方法を指摘したかっただけです (これは 777-ing ファイルではありません)。

そしてもちろん、入力をサニタイズし、パス トラバーサルを防ぎ、偏執的になりましょう。

編集 2

注: セーフ モードが有効になっている場合、PHP は、スクリプトが動作しているディレクトリが、実行中のスクリプトと同じ UID (所有者) を持っているかどうかをチェックします。

したがって、セーフモードをオンにして、wwwrunユーザーが所有する同じグループに属していることを本当に確認する必要があります/etc(ここでセキュリティ上の懸念についての赤い旗を放棄します)。それ以外の場合は、読み書きしたい conf ファイルにこれを適用するだけです。

しかし、セキュリティとパーミッションを満たすためには、Apache2 suEXECが解決策になるかもしれません。

suEXEC 機能は、呼び出し元の Web サーバーのユーザー ID とは異なるユーザー ID で CGI および SSI プログラムを実行する機能を Apache ユーザーに提供します。通常、CGI または SSI プログラムが実行されるとき、Web サーバーを実行している同じユーザーとして実行されます。

つまり、独立したユーザーを作成するだけです。

于 2012-08-28T10:30:24.333 に答える
0

PHP スクリプトの要求に応じて変更されるSUIDヘルパー実行可能ファイルを作成することをお勧めします。/etc/ipsec.conf次に、PHP スクリプトで SUID 実行可能ファイルを実行して、必要なコマンドを発行できます。

このソリューションは非常に安全です。SUID 実行可能ファイルは、許可された変更のみが に対して行われていることを確認できipsec.confます。これにより、Web サーバーと重要なファイルの間に別のレイヤーが追加されます。

注意すれば、ヘルパー実行可能ファイルを PHP で作成できます。この場合、スクリプトを直接 SUID にすることはできないため、使用sudo(およびそれに応じて構成) する必要があります。/etc/sudoers

于 2012-08-28T19:18:40.583 に答える