Як налаштувати PHP CLI на Linux ubuntu для запуску як www-data?


12

У мене на убунту є додаток symfony2. Symfony має масу корисних консольних команд (наприклад, php app/console cache:clearабо php app/console assets:install web).

Проблема полягає в тому, що якщо я запускаю їх як rootкористувач, у новостворених файлів з'явиться root:rootкористувач / група, і якщо я звертаюсь до свого веб-сайту, я отримую помилки (оскільки apache не може читати / змінювати ці файли -> вони повинні мати www-data:www-data).

Запуск chown www-data:www-dataвирішує проблему, але запуск її кожного разу, коли я очищаю кеш, не є рішенням.

Як я можу налаштувати PHP CLI так, щоб він завжди працював як користувач / група даних www?

або

Як я можу запустити команду як інший користувач (будучи root, запустити її як www-data)?

Відповіді:


23

Запустіть команду як інший користувач один раз:

sudo -u www-data php script.php

Це має спрацювати, якщо ти є root.

Що стосується завжди запущеного php www-data, то існує кілька можливостей. Ви можете створити просту оболонку оболонки. Якщо /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чи подібному, кожної нової оболонці відкриття дозволить вам безпосередньо здійснювати будь-які виконувані файли (+ х) $HOME/bin( /root/binдля кореня).

Підказка: Ви можете назвати сценарій обгортки чимось таким, phpwwwщоб ви чітко вказали php script.phpабо phpwww script.phpвирішили, чи хочете ви регулярний або sudo'ed php.

Ще одне рішення - простий псевдонім. Помістіть це у вашому .bashrc, .profileчи аналогічному:

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

Смішно, минуло півчуття, і я знову натрапив на власне запитання =) Здається, я минулого разу забув прийняти вашу відповідь - я просто це зафіксував, дякую!
loostro

Метод псевдоніму має стільки кривавого сенсу, і він вирішив мою точну проблему
RedactedProfile

1

Відповів mwargh на ## linux (IRC Freenode.net)


Щоб запустити команди як інший користувач -> переключіться на цього користувача, використовуючи:

su www-data

Я все ще зацікавлений (якщо це можливо) в налаштуванні PHP так, щоб він працював:

root@mycomp php (php script creating a file)

як користувач root

призведе до створення файлу з www-data: www-data user / group

(таким чином я не повинен був би переходити з root на www-data для запуску моїх команд)


1

Я б спробував зробити / usr / bin / php, що належить www-data, і встановив дозвіл suid, який змушує команду виконувати власника файлу. Ви зробите це за допомогою:

chmod u+s /usr/bin/php

з вас подобається восьмеричні позначення:

chmod 4755 /usr/bin/php

Хоча я мушу сказати, що це повинно створювати занепокоєння кожного разу, коли ви робите www-data власником будь-чого, оскільки суть облікового запису www-data полягає в тому, щоб якомога менше володіти даними.


Ось чому я піду відповідь
riha

1

якщо ви отримали php-fpm (FastCGI Process Manager),
ви можете встановити його у конфігураційному файлі, розташованому за адресою (принаймні для центів): /etc/php-fpm.d/www.conf
у рядку 39 ви можете встановити користувача, а 49 - встановити групу


Це не стосується php-cli, чи не так?
riha

1

створити файл сценарію:

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 цього сценарію

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.