如何在 linux ubuntu 上配置 PHP CLI 以作為 www-data 執行?
我的 ubuntu 上有一個 symfony2 應用程序。Symfony 有很多有用的控制台命令(比如
php app/console cache:clear
orphp 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
(或允許這樣做的其他使用者;請參閱sudo
組man sudoers
和visudo
),這應該可以工作。**為了可重用性,添加一個別名。**將它放在你的
.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 $?
不過,這還沒有經過測試。另請注意,這將始終嘗試以
php5
user身份執行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.php
或phpwww script.php
決定是否需要正常或 sudo’ed php。