Linux ubuntuでPHP CLIを構成してwww-dataとして実行するにはどうすればよいですか?


12

私のubuntuにsymfony2アプリケーションがあります。symfonyには便利なコンソールコマンドがたくさんあります(php app/console cache:clearまたはなどphp app/console assets:install web)。

問題はroot、それらをユーザーとして実行すると、新しく生成されたファイルにroot:rootユーザー/グループが含まれ、Webサイトにアクセスするとエラーが発生することです(Apacheがこれらのファイルを読み取ったり変更したりできないためですwww-data:www-data

実行chown www-data:www-dataすると問題は解決しますが、キャッシュをクリアするたびに実行することは解決策ではありません。

常にwww-dataユーザー/グループとして実行するようにPHP CLIを構成するにはどうすればよいですか?

または

コマンドを別のユーザーとして実行するにはどうすればよいですか(rootになり、www-dataとして実行します)?

回答:


23

別のユーザーとしてコマンドを1回実行します。

sudo -u www-data php script.php

もしそうなら、これはうまくいくはずですroot

phpを常にとして実行する場合と同様にwww-data、いくつかの可能性があります。単純なラッパーシェルスクリプトを作成できます。/usr/bin/phpがへのソフトリンクのみ、/usr/bin/php5または類似している場合は、それが簡単になります。ソフトリンク(ファイルではなくphp5)を次のようなスクリプトに置き換えるだけです。

#!/bin/sh

sudo -u www-data php5 $*

return $?

それはテストされていません。また、ユーザーがそうでなくても、実行する権限がない場合でも、これは常にphp5userとして実行しようとすることに注意してください。そして、それはあなたが本当に望んでいるものではないかもしれません。インストールされたサービスの中には、phpを実行しようとしたときに問題が発生するものがあります。www-dataroot

ルートにのみ適用する(おそらくより良い)ソリューションは、ソフトリンクを/usr/bin/phpそのままにし、/root/bin代わりにスクリプトを配置することです。その後経由PATHにそのフォルダを追加し.bashrc.profileまたは類似。あなたが持っている場合/etc/skel/.profile、それはそれがどのように行われるかを指摘するかもしれません:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

これがや類似のものになったら.bashrc.profile新しいシェルを開くたびに、$HOME/bin/root/binfor root)で実行可能ファイル(+ x)​​を直接実行できます。

ヒント:ラッパースクリプトに次のような名前を付けて、phpwww明示的に指定するphp script.phpphpwww script.php、通常のphpかsudo化されたphpのどちらにするかを決定できます。

別の解決策は、単純なエイリアスです。あなたにこれを置き.bashrc.profileまたは類似:

alias phpwww='sudo -u www-data php'

おかしい、聞こえの半分が過ぎて、もう一度自分の質問に出くわした=)前回あなたの答えを受け入れるのを忘れたようです-私はそれを修正しました、ありがとう!
loostro 2013

エイリアスメソッドは非常に流血の意味があり、私の正確な問題を解決しました
RedactedProfile

1

## linuxでmwarghが回答(IRC Freenode.net)


コマンドを別のユーザーとして実行するには、次のコマンドを使用してそのユーザーに切り替えます。

su www-data

(可能な場合は)PHPを構成して実行するようにしたいと思います。

root@mycomp php (php script creating a file)

rootユーザーとして

www-data:www-data user / group を含むファイルが作成されます

(これにより、コマンドを実行するためにルートからwww-dataに切り替える必要がなくなります)


1

/ usr / bin / phpをwww-dataが所有するようにして、suid権限を設定して、ファイルの所有者がコマンドを実行するように強制します。これを行うには:

chmod u+s /usr/bin/php

あなたは8進表記が好きです:

chmod 4755 /usr/bin/php

www-dataアカウントのポイントはできる限り所有しないことなので、www-dataを何かの所有者にするときはいつでも1つは不安になるはずです。


だから、私はリハの答えで行くつもりです
loostro

1

php-fpm(FastCGI Process Manager)を入手した場合は、
(centosの場合は)にある構成ファイルで設定できます/etc/php-fpm.d/www.conf
。39行目でユーザーを設定し、49行目でグループを設定できます。


それはには当てはまりませんphp-cliよね?
riha 2012年

1

スクリプトファイルを作成します。

touch /usr/bin/phpuid
chmod +x /usr/bin/phpuid

コンテンツを追加:

#!/bin/bash

UIDX="#"`stat -c '%u' $1`
sudo -u $UIDX php5 $*

ルートからスクリプトを実行します。

phpuid /path/to/script.php

またはスクリプトでインタープリターを使用する

#!/usr/bin/phpuid
<?php
phpinfo();

注:debian 7でテストされています。sudoのインストールが必要になる場合があります

apt-get install sudo

script.phpによって作成されたすべてのファイルは、そのスクリプトの同じuidを持ちます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.