Linux

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

  • October 22, 2021

我的 ubuntu 上有一個 symfony2 應用程序。Symfony 有很多有用的控制台命令(比如php app/console cache:clearor php 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 身份執行)?

以另一個使用者身份執行一次命令:

sudo -u www-data php script.php

如果您已經sudo安裝並且是root(或允許這樣做的其他使用者;請參閱sudoman sudoersvisudo),這應該可以工作。

**為了可重用性,添加一個別名。**將它放在你的.bashrc,.profile或類似的(並重新載入 shell 以使其生效):

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

然後你可以輸入phpwww script.php,它會真正sudo -u www-data php script.php為你執行。


對於其他更複雜且容易出錯的方法,請繼續閱讀。

至於總是執行 php as www-data,有幾種可能性。您可以創建一個簡單的包裝器 shellscript。如果/usr/bin/php只是到/usr/bin/php5或類似的軟連結,這使它更簡單。php5只需用這樣的腳本替換軟連結(不是文件):

#!/bin/sh

sudo -u www-data php5 $*

return $?

不過,這還沒有經過測試。另請注意,這將始終嘗試以php5user身份執行www-data,即使使用者可能不是root並且可能沒有這樣做的權限。它也可能不是你真正想要的。某些已安裝的服務在嘗試執行 php.ini 時可能會遇到問題。

僅將其應用於 root 的(可能更好的)解決方案可能是/usr/bin/php單獨保留軟連結並放置腳本/root/bin。然後將該文件夾添加到 PATH via .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類似的,您打開的每個新 shell 都將允許您直接執行$HOME/bin(/root/bin對於 root) 中的任何執行檔 (+x)。

提示:您可能希望將包裝腳本命名為類似這樣的名稱,phpwww以便您明確指定php script.phpphpwww script.php決定是否需要正常或 sudo’ed php。

引用自:https://serverfault.com/questions/453811