私の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
を実行すると問題は解決しますが、キャッシュをクリアするたびに実行することは解決策ではありません。
または
別のユーザーとしてコマンドを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'
スクリプトファイルを作成します。
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を持ちます
別のユーザーとしてコマンドを実行するには、次のコマンドを使用してそのユーザーに切り替えます。
su www-data
(可能な場合は)PHPを構成して実行することに興味があります):
root@mycomp php (php script creating a file)
rootユーザーとして
www-data:www-data user/groupのファイルが作成されます
(これにより、コマンドを実行するためにルートからwww-dataに切り替える必要がなくなります)
/ usr/bin/phpをwww-dataが所有するようにして、ファイル所有者がコマンドを実行するように強制するsuid許可を設定してみます。これを行うには:
chmod u+s /usr/bin/php
あなたは8進表記が好きです:
chmod 4755 /usr/bin/php
Www-dataアカウントのポイントはできる限り所有しないことなので、www-dataを何かの所有者にするときはいつでも1つは不安になるはずです。
php-fpm(FastCGI Process Manager)を入手した場合
(centosの場合は少なくとも)にある構成ファイルで設定できます:/etc/php-fpm.d/www.conf
39行目でユーザーを設定でき、49行目でグループを設定できます