2011-01-17 12 views
14

exec()を別のユーザーとして実行することはできますか(私のボックスではwww-データとして実行されます)。 www-dataが所有していないファイルにアクセスする必要のあるスクリプトを実行したい。execを別のユーザーとして実行

答えて

4

私は、シリアルポートと通信するためには、いくつかのPHPスクリプトが必要であったのと同様の要件がありました。最初のシリアルポートは通常、ルートとグループダイヤルアウトで所有される/ dev/ttyS0です。

私の初期設定では、私は自分のapacheユーザーをグループダイヤルアウトに追加しました。 PHPスクリプトは問題なくシリアルポートに直接話すことができました。ただし、一度に1つのスクリプトインスタンスしかシリアルポートを開くことができないため、このソリューションは機能しませんでした。

その後、シリアルポートとPHPスクリプトの間にレイヤーを提供するデーモンを作成しました。 PHPスクリプトは、名前付きパイプを介してデーモンと通信し、デーモンは要求をフォーマットしてシリアルポートに渡します。ちょっとしたキャッシングを行います。

www-データ、またはApacheのユーザーが何であれ、それらのファイルを所有するグループにグループの実行権限を与えたり、私のようにプロキシを使用したりしてください。セキュリティがあなたに関係する場合は、私は後者に行くでしょう。

0

サーバーを実行するユーザーを変更できます。これは、Windows版のApacheを使用して簡単に行うことができます(サービスとしてApacheが実行され、Apacheを実行するユーザーを簡単に設定できます)。

どのサーバープラットフォームを使用していますか?

+0

ubuntu lucidを使用しています。私はセキュリティリスクのため、Apacheの実行中のユーザを変更したくないのですが、www-dataが所有していないファイルへのアクセスを必要とするバックエンドアプリケーションをいくつか作成しました。 www-データとそのファイルの所有者を含むグループを作成するという流れはどうでしょうか? – mrwooster

+0

これは機能する他のオプションになります。 yozuがユーザーに高いレベルのアクセス権(rootなど)を割り当てると、Apacheのユーザーを変更することはセキュリティ上のリスクに過ぎません。 – Thariama

1

いいえ、直接ではありません。もしあなたがLinuxマシン上で権限を持っているなら、あなたのファイルにsetuidビットをセットすることができます。

ウェブサーバーは、理由により、別のユーザーとして実行されることに注意してください。これは非常に重要なセキュリティメカニズムであり、これを回避することでセキュリティ上の脆弱性が生じる可能性があります。

6

サーバーの構成(Apacheの場合)にアクセスできる場合は、suPHPを使用することを検討してください。仮想ホストのconfigurationでは、明示的にPHPスクリプトが実行されているユーザーとグループを設定することができます。

<VirtualHost 192.168.1.1:80> 
... 
suPHP_UserGroup user group 
... 
</VirtualHost> 

この設定は--with-setid-mode=paranoidオプションで構築suPHP構成のために利用可能です。

ユーザーIDを変更するもう1つの方法は、適切な特権が必要なposix_setuid()です。これは、PHPスクリプトをというルートとして実行することを意味します。これは、セリフのセキュリティ上の問題です。

関連する問題