如何在Linux ubuntu上配置PHP CLI以作为www-data运行?


12

我在Ubuntu上有一个symfony2应用程序。Symfony有很多有用的控制台命令(例如php app/console cache:clearphp app/console assets:install web)。

问题是,如果我以root用户身份运行它们,则新生成的文件将具有root:root用户/组,并且如果我访问我的网站,则会收到错误消息(因为apache无法读取/修改这些文件->它们应该具有www-data:www-data)。

运行chown www-data:www-data可以解决问题,但是每次清除缓存时都无法运行。

如何配置PHP CLI始终以www-data用户/组身份运行?

要么

如何以其他用户身份(以root用户身份,以www-data身份运行)运行命令?

Answers:


23

一次以其他用户身份运行命令:

sudo -u www-data php script.php

如果是这样,这应该可以工作root

至于始终以方式运行php www-data,有几种可能性。您可以创建一个简单的包装Shellscript。如果/usr/bin/php只是/usr/bin/php5与之或类似的软链接,这将使其更简单。只需使用如下php5脚本替换软链接(不是file ):

#!/bin/sh

sudo -u www-data php5 $*

return $?

那没有测试。另请注意,即使用户可能不是,也没有权限这样做,它总是会尝试以php5用户身份运行。而且它也可能不是您真正想要的。尝试执行php时,某些已安装的服务可能会出现问题。www-dataroot

一种仅适用于root用户的解决方案(可能更好)可能是不使用软链接/usr/bin/php/root/bin而是将脚本放入其中。然后将该文件夹添加到经由路径.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或类似的,你打开每一个新外壳将允许您直接(+ X)在执行任何可执行文件$HOME/bin/root/bin根)。

提示:您可能希望将包装脚本命名为类似的名称,phpwww以便您明确指定php script.phpphpwww script.php决定是否需要常规或sudo'ed php。

另一个解决方案是简单的别名。将此放在您的.bashrc.profile或类似:

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

好笑,半听不见了,我又迷失了自己的问题=)好像我上次忘记接受您的回答了-我已解决了,谢谢!
loostro

别名方法非常有道理,它解决了我的确切问题
RedactedProfile 2015年

1

由mwargh在## linux(IRC Freenode.net)上回答


要以其他用户身份运行命令->使用以下命令切换到该用户:

su www-data

我仍然对配置PHP感兴趣(如果可能的话),以便运行:

root@mycomp php (php script creating a file)

root用户身份

将导致使用www-data:www-data用户/组创建文件

(通过这种方式,我不必从根目录切换到www-data即可运行命令)


1

我将尝试使www-data拥有/ usr / bin / php并设置suid许可,这将强制命令由文件所有者执行。您可以这样做:

chmod u+s /usr/bin/php

你们中的人喜欢八进制表示法:

chmod 4755 /usr/bin/php

尽管我必须说,每当您将www-data设置为任何内容的所有者时,它都会使您感到不安,因为www-data帐户的重点是拥有尽可能少的所有权。


这就是为什么我会接受riha的回答
loostro

1

如果您有php-fpm(FastCGI流程管理器)
,则可以在(至少为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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.