2

私は次のようなPHPプロセスを持っています:

  • ルートとして開始
  • でpidファイルに書き込んでから閉じます/var/run/
  • chown()s別のユーザーにpidファイルを言った
  • 経由でそのユーザーに変更posix_setuid()
  • プロセスの最後にpidファイルを削除しようとします

現在、現在のユーザーにpidファイルを送信していますが、呼び出しchown()で「アクセスが拒否されました」と主張するファイルを削除できません。unlink()つまり、有効なユーザーがファイルを所有していて、ファイルが現在の(または任意の)プロセスで開かれていない場合でも、アクセス許可が不十分です。

思い切って、pidファイルの場所をホームディレクトリに移動しようとしましたが、これは問題なく機能します。プロセスのユーザーは私の個人ユーザーではないため、有効なユーザーにはホームディレクトリへの書き込み権限がなく、特定のファイルが1つだけあることに注意してください。

では、pidファイルが入っているときに削除できないのはなぜ/var/run/ですか?

4

1 に答える 1

1

問題は、ユーザーがファイルを削除するためにディレクトリへの書き込み権限が必要なことです。ファイル自体の書き込み権限では、ファイルを削除できません。これが、ファイルをホームディレクトリに移動するときに機能する理由です。ホームディレクトリには書き込み権限があります:)。おそらく、posix_setuid()を介してユーザーを変更する前に、ファイルを自宅に移動することが可能な解決策ですか?

Linuxのアクセス許可の詳細については、この記事を参照してください。

編集:私はあなたの投稿を読み直したところ、ファイルをユーザーの実際の家に移動しなかったとあなたが言ったことに気づきました。ただし、ファイルを移動する/ home / dirは、ユーザーがファイルを削除するための書き込み権限をユーザーに付与する必要があります。私の勘では、ファイルの移動先のディレクトリには、ユーザーがメンバーであるグループ所有者に書き込みが許可されているか、全員に書き込みが許可されています。「ls-l」はこの情報を表示するはずです。

于 2011-02-07T05:12:26.027 に答える