4

まず第一に、私はネイティブ スピーカーではないので、英語が下手で申し訳ありません。

私は FCGI で PHP を使用しているため、仮想ホストのそれぞれが異なるユーザーとしてそれぞれの php スクリプトを実行しています。

2 つの仮想ホスト (user1 と user2) の間で php クラスを共有する必要があったため、/etc/group 内の user1 グループに user2 を追加することをお勧めします。私はそれを行い、次のコマンドでグループのアクセス許可が正常に機能していることをテストしました。

su user2
cat /home/user1/shared_class.php

そしてそれはうまくいきました(user2はuser1クラスにうまくアクセスしました)。

しかし、PHP は同じパーミッションを認識していないようでした。テスト用に次のスクリプトを user2 仮想ホストに保存し、ブラウザーから実行しました。

<?php
passthru('whoami');
passthru('cat /home/user1/shared_class.php');
?>

正しいユーザー名 ('user2') が返されましたが、shared_class.php の内容は返されませんでした。require_once('/home/user1/shared_class.php') を実行しようとすると、「アクセスが拒否されました」というエラーも表示されます。したがって、「user2」には shared_class.php へのアクセス許可がないと PHP が認識していることは明らかです。

私が行った別のテストは実行することでした

su user1
chmod o+r /home/user1/shared_class.php

その最後のchmodの後、「user2」PHPスクリプトはファイルを問題なく読み取ることができたので、フォルダーの制限(open_basedirまたはその他のディレクティブ)ではなく、PHPが/etc/groupを無視しているだけだと確信しています。

これは期待されていますか?それを達成する方法はありますか?

私が現在使用している回避策は、

su user1
chown user1:user2 /home/user1/shared_class.php

そうすれば、user2 は php から問題なくファイルにアクセスできますが、/etc/group を使用して user2 を user1 グループに追加するなど、chown の設定を手動で変更しなくてもファイルを共有できるようにしたいと考えています。

ありがとう。

4

1 に答える 1

0

最初に確認するのは SELinux 設定です (存在する場合)。これを実行して確認できます。

getenforce

注: これにより、ユーザーの所有権が に、グループの所有chown user1:user2権が に変更されますが、ユーザーの権限はスタックされません。user1user2

そして:ユーザーは、ディレクトリをトラバースできるようにするには、ディレクトリに +x を付ける必要があります:)

PHP CGI は、指定したとおりに実行されます。私が使用したほとんどの PHPCGI サービスでは、プロセスのグループも指定できます。

私は提案します:

  1. というグループを作成します。phpcgi
  2. user1 と user2 をプライマリ グループにするphpcgi
  3. CGIプロセスを次のように実行するように変更しますphpcgi
  4. ファイルの場合:
    1. 所有権をに設定%USER%:phpcgi
    2. chmod 0660
  5. フォルダの場合:
    1. 所有権をに設定%USER%:phpcgi
    2. chmod 0770

次に、すべてを再起動して、もう一度試してください:)

于 2013-02-25T08:41:26.113 に答える