Jak skonfigurować PHP CLI na Linux Ubuntu, aby działał jako www-data?

12

Mam aplikację symfony2 na moim Ubuntu. Symfony ma wiele przydatnych poleceń konsoli (takich jak php app/console cache:clearlub php app/console assets:install web).

Problem polega na tym, że jeśli uruchomię je jako rootużytkownik, nowo wygenerowane pliki będą miały root:rootużytkownika / grupę, a jeśli uzyskam dostęp do mojej strony internetowej, pojawią się błędy (ponieważ apache nie może odczytać / zmodyfikować tych plików -> powinien je mieć www-data:www-data).

Uruchamianie chown www-data:www-datarozwiązuje problem, ale uruchamianie go za każdym razem, gdy wyczyszczę pamięć podręczną, nie jest rozwiązaniem.

Jak mogę skonfigurować PHP CLI, aby zawsze działał jako użytkownik / grupa danych www?

lub

Jak mogę uruchomić polecenie jako inny użytkownik (jako root, uruchom go jako dane www)?

Loostro
źródło

Odpowiedzi:

23

Uruchom komendę jako inny użytkownik raz:

sudo -u www-data php script.php

To powinno zadziałać, jeśli tak root.

Jeśli chodzi o zawsze uruchamianie php as www-data, istnieje kilka możliwości. Możesz stworzyć prosty skrypt powłoki. Jeśli /usr/bin/phpjest to tylko miękkie łącze do /usr/bin/php5lub podobne, to upraszcza to. Po prostu zastąp link programowy (NIE plik php5) skryptem takim:

#!/bin/sh

sudo -u www-data php5 $*

return $?

To jednak nie zostało przetestowane. Pamiętaj również, że ZAWSZE będzie to próbowało działać php5jako użytkownik www-data, nawet jeśli użytkownik może nie być rooti może nie mieć na to pozwolenia. I może nie być tym, czego naprawdę chcesz. Niektóre zainstalowane usługi mogą napotykać problemy podczas próby uruchomienia php.

(Prawdopodobnie lepszym) rozwiązaniem, aby zastosować to tylko do roota, może być pozostawienie soft-linku w /usr/bin/phpspokoju i zamiast tego umieścić skrypt /root/bin. Następnie dodać ten folder do PATH poprzez .bashrc, .profilelub podobnym. Jeśli tak /etc/skel/.profile, może to wskazywać, jak to się robi:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Po to jest Twój .bashrc, .profilelub podobne, każda nowa powłoka otwarciu będzie można bezpośrednio wykonywać żadnych plików wykonywalnych (+ x) $HOME/bin( /root/binroot).

Wskazówka: możesz nazwać skrypt otoki phpwwwtak, abyś wyraźnie określił php script.phplub phpwww script.phpzdecydował, czy chcesz regularnego czy sudo'owanego php.

Innym rozwiązaniem jest prosty alias. Umieścić to w swoim .bashrc, .profilelub podobne:

alias phpwww='sudo -u www-data php'
Riha
źródło
Zabawne, minęło pół wysłuchania i znów natknąłem się na swoje pytanie =) Wydaje się, że zapomniałem przyjąć twoją odpowiedź ostatnim razem - właśnie to naprawiłem, dziękuję!
loostro
Metoda aliasowa ma tak cholerny sens i rozwiązała mój dokładny problem
RedactedProfile
1

Odpowiedzi udzielił mwargh na ## linux (IRC Freenode.net)


Aby uruchomić polecenia jako inny użytkownik -> przejdź do tego użytkownika, używając:

su www-data

Nadal byłbym zainteresowany (jeśli to możliwe) konfiguracją PHP, aby działało:

root@mycomp php (php script creating a file)

jako użytkownik root

spowoduje utworzenie pliku z www-data: www-data użytkownik / grupa

(w ten sposób nie musiałbym przełączać się z katalogu głównego na dane www, aby uruchomić moje polecenia)

Loostro
źródło
1

Spróbowałbym zrobić / usr / bin / php własnością www-data i ustawić uprawnienia suid, które wymuszają wykonanie polecenia przez właściciela pliku. Zrobiłbyś to z:

chmod u+s /usr/bin/php

z was jak zapis ósemkowy:

chmod 4755 /usr/bin/php

Chociaż muszę powiedzieć, że powinno to sprawić, że staniesz się niespokojny za każdym razem, gdy uczynisz www-data właścicielem czegoś, ponieważ celem konta www-data jest posiadanie jak najmniej.

gulasz
źródło
Dlatego pójdę z odpowiedzią
riha
1

jeśli masz do php-fpm (FastCGI Process Manager)
można go ustawić w pliku konfiguracyjnym znajduje się w (conajmniej dla CentOS) /etc/php-fpm.d/www.conf
na linii 39 można ustawić użytkownika i 49 ustawić grupę

VeXii
źródło
To nie dotyczy php-cli, prawda?
riha
1

utwórz plik skryptu:

touch /usr/bin/phpuid
chmod +x /usr/bin/phpuid

Dodaj zawartość:

#!/bin/bash

UIDX="#"`stat -c '%u' $1`
sudo -u $UIDX php5 $*

uruchom swoje skrypty z roota:

phpuid /path/to/script.php

lub użyj interpretera w swoich skryptach

#!/usr/bin/phpuid
<?php
phpinfo();

Uwaga: testowane na Debianie 7, może być konieczne zainstalowanie sudo

apt-get install sudo

wszystkie pliki utworzone przez script.php będą miały ten sam identyfikator użytkownika tego skryptu

pielgrzym z ziemi świętej
źródło