3

PHPスクリプトを介してシステム内の別のユーザーにファイル所有者のアクセス許可を設定する必要があるという問題があります

そのため、次のコマンドを使用してこれを行います。ここで、1002 はシステムのユーザー ID です。

file_put_contents($filename, $content);
system("chown 1002 " . $filename . "");

ただし、プロダクションサーバーでのみこのエラーが発生します(テストサーバーは正常に動作します)

chown: changing ownership of `/var/spool/asterisk/06h12m7.call':
Operation not permitted
4

2 に答える 2

4

root ユーザー (または root 権限で実行している) である場合にのみ、ファイルの所有者を変更できます。

ファイル filename の所有者をユーザー user に変更しようとします。ファイルの所有者を変更できるのは、スーパーユーザーだけです。 http://www.php.net/manual/en/function.chown.php

ほとんどの場合、テスト サーバーでは、php スクリプトを実行している apache プロセスが既にファイルを所有しているか、root 権限で実行していますが、運用サーバーではそうではありません。root 権限で実稼働環境で実行することは絶対にお勧めしません。

状況に応じて役立ついくつかの回避策として、chgrp関数を使用してファイルの「グループ」設定を変更できます。これは、ファイルへの書き込み権限を持つすべてのユーザーに許可されます。関数を使用して誰でもファイルを書き込み可能にすることもできますchmodが、これは危険な場合があります。両方の機能へのリンクを以下に示します。

于 2012-11-05T03:17:53.067 に答える
4

サーバーLinuxを使用していると仮定して、この質問にタグを付けたので。Apache本番サーバーではApache、すべての php プロセスを所有するプロセスは、通常、apache userまたは ではない他のユーザーによって実行されますroot user

そのことを念頭に置いて、あなたがしようとしているのはchown、所有していないファイルの所有者を変更する関数 (apache ユーザーとして実行される) を使用することです。(はい、所有者を自分が所有するファイルにのみ変更できます)。

PHPマニュアルを引用すると、chown関数は所有者を変更しようとします:

ファイル filename の所有者をユーザー user に変更しようとします。ファイルの所有者を変更できるのは、スーパーユーザーだけです。

本番サーバーでは、通常、ユーザーディレクトリモードで実行しています。つまり、ホームディレクトリにあるファイルにバインドされているため、ディレクトリ/home/yourusername/public_html内のファイル/varは手の届かないところにあります(通常はroot) であり、chown できないのはそのためです。

お役に立てば幸いです。乾杯!

于 2012-11-05T03:18:52.490 に答える