web-dev-qa-db-ja.com

www-dataとして実行するようにLinux ubuntuでPHP CLIを構成する方法は?

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

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

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

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

または

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

12
loostro

別のユーザーとしてコマンドを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 $?

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

ルートにのみ適用する(おそらくより良い)ソリューションは、ソフトリンク/usr/bin/phpをそのままにし、代わりに/root/binにスクリプトを配置することです。次に、.bashrc.profileなどを使用して、そのフォルダーをPATHに追加します。あなたが/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/bin for root)の実行可能ファイル(+ x)​​を直接実行できます)。

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

別の解決策は、単純なエイリアスです。これを.bashrc.profileなどに配置します。

alias phpwww='Sudo -u www-data php'
23
riha

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

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();

注:Sudoのインストールが必要になる可能性があるdebian 7でテスト済み

apt-get install Sudo

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

1
palmer

## 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
loostro

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

chmod u+s /usr/bin/php

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

chmod 4755 /usr/bin/php

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

1
stew

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

1
VeXii