Один раз выполните команду от имени другого пользователя:
sudo -u www-data php script.php
Это должно работать, если вы root
.
Что касается постоянного запуска php как www-data
, есть несколько возможностей. Вы можете создать простую оболочку shellscript. Если / usr / bin / php
является только программной ссылкой на / usr / bin / php5
или аналогичный, это упрощает задачу. Просто замените программную ссылку (НЕ файл php5
) сценарием вроде этого:
#!/bin/sh
sudo -u www-data php5 $*
return $?
Это не проверено. Также имейте в виду, что это ВСЕГДА будет пытаться запустить php5
от имени пользователя www-data
, даже если пользователь не является root
и может не иметь разрешения на выполнение так. И это также может быть не то, что вам действительно нужно. Некоторые установленные службы могут столкнуться с проблемами при попытке запустить php.
(возможно, лучшее) решение применить это только к root может заключаться в том, чтобы оставить программную ссылку / usr / bin / php
в покое и поместить сценарий в / root / bin
вместо этого. Затем добавьте эту папку в PATH через .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
для root).
Подсказка: вы можете назвать скрипт-оболочку как-то вроде phpwww
, чтобы вы явно указали php script.php
или phpwww script.php
, чтобы решить, хотите ли вы регулярно или sudo'ed php.
Другое решение - простой псевдоним. Поместите это в свой .bashrc
, .profile
или аналогичный:
alias phpwww='sudo -u www-data php'
Чтобы запустить команды от имени другого пользователя -> переключитесь на этого пользователя, используя:
su www-data
Я все равно буду заинтересован (если это возможно) в настройке PHP так, чтобы запуск:
root@mycomp php (php script creating a file)
от имени root пользователя
приводил к созданию файла с www-data: www-data user / group
(таким образом мне не пришлось бы переключаться с root на www-data для выполнения моих команд)
Я бы попробовал сделать / usr / bin / php принадлежащим www-data и установить разрешение suid, которое заставляет команду выполняться владельцем файла. Вы бы сделали это с:
chmod u+s /usr/bin/php
из вас, кто любит восьмеричную запись:
chmod 4755 /usr/bin/php
Хотя я должен сказать, что это должно вызывать беспокойство всякий раз, когда вы делаете www-data владельцем чего-либо, в качестве точки учетной записи www-data - владеть как можно меньше.
, если у вас есть php-fpm (FastCGI Process Manager)
вы можете установить его в конфигурационном файле, расположенном по адресу (по крайней мере для centos): /etc/php-fpm.d/www.conf
в строке 39 вы можете установить пользователя и 49 вы установите группу
создать файл сценария:
touch /usr/bin/phpuid
chmod +x /usr/bin/phpuid
добавить содержимое:
#!/bin/bash
UIDX="#"`stat -c '%u' $1`
sudo -u $UIDX php5 $*
запустить свои сценарии от root:
phpuid /path/to/script.php
или использовать интерпретатор в ваши скрипты
#!/usr/bin/phpuid
<?php
phpinfo();
примечание: протестировано на debian 7 вам может потребоваться установить sudo
apt-get install sudo
, все файлы, созданные script.php, будут иметь тот же uid этого скрипта