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

loo*_*tro 14 linux php permissions command-line-interface file-permissions

我的 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 身份运行)?

rih*_*iha 25

以另一个用户身份运行一次命令:

sudo -u www-data php script.php
Run Code Online (Sandbox Code Playgroud)

如果您是root.

至于总是运行 php as www-data,有几种可能性。您可以创建一个简单的包装器 shellscript。如果/usr/bin/php只是到/usr/bin/php5或类似的软链接,那就更简单了。只需php5用这样的脚本替换软链接(不是文件):

#!/bin/sh

sudo -u www-data php5 $*

return $?
Run Code Online (Sandbox Code Playgroud)

但这没有经过测试。另请注意,这将始终尝试以php5user身份运行www-data,即使该用户可能不是root也可能没有权限这样做。而且它也可能不是您真正想要的。某些已安装的服务在尝试执行 php 时可能会遇到问题。

仅将其应用于 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
Run Code Online (Sandbox Code Playgroud)

一旦这是你的.bashrc.profile或类似的,你打开每一个新外壳将允许您直接(+ X)在执行任何可执行文件$HOME/bin/root/bin根)。

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

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

alias phpwww='sudo -u www-data php'
Run Code Online (Sandbox Code Playgroud)