Wie konfiguriere ich PHP CLI unter Linux Ubuntu so, dass es als WWW-Daten ausgeführt wird?

12

Ich habe eine symfony2-Anwendung auf meinem Ubuntu. Symfony verfügt über zahlreiche nützliche Konsolenbefehle (wie php app/console cache:clearoder php app/console assets:install web).

Das Problem ist, wenn ich sie als rootBenutzer ausführe, haben die neu generierten Dateien root:rootBenutzer / Gruppe, und wenn ich auf meine Website zugreife, werden Fehler angezeigt (da Apache diese Dateien nicht lesen / ändern kann -> sollten sie haben www-data:www-data).

Das Ausführen chown www-data:www-datalöst das Problem, aber das Ausführen jedes Mal, wenn ich meinen Cache lösche, ist keine Lösung.

Wie kann ich die PHP-CLI so konfigurieren, dass sie immer als WWW-Datenbenutzer / -gruppe ausgeführt wird?

oder

Wie kann ich einen Befehl als anderer Benutzer ausführen (als Root-Befehl als WWW-Daten ausführen)?

loostro
quelle

Antworten:

23

Führen Sie einen Befehl einmal als anderer Benutzer aus:

sudo -u www-data php script.php

Dies sollte funktionieren, wenn Sie es sind root.

Da immer PHP as ausgeführt wird www-data, gibt es mehrere Möglichkeiten. Sie können ein einfaches Wrapper-Shellscript erstellen. Wenn /usr/bin/phpes sich nur um einen Softlink /usr/bin/php5oder ähnliches handelt, ist dies einfacher. Ersetzen Sie einfach den Softlink (NICHT die Datei php5) durch ein Skript wie das folgende:

#!/bin/sh

sudo -u www-data php5 $*

return $?

Das ist aber nicht getestet. Beachten Sie auch, dass dies IMMER versucht, php5als Benutzer ausgeführt zu werden www-data, auch wenn der Benutzer möglicherweise nicht rootdazu berechtigt ist. Und es kann auch nicht das sein, was Sie wirklich wollen. Einige installierte Dienste können beim Versuch, PHP auszuführen, auf Probleme stoßen.

Eine (möglicherweise bessere) Lösung, um dies nur auf root anzuwenden, besteht darin, den Softlink in /usr/bin/phpRuhe zu lassen und /root/binstattdessen das Skript zu platzieren. Dann fügen Sie diesen Ordner auf PATH über .bashrc, .profileoder ähnliches. Wenn ja /etc/skel/.profile, kann dies darauf hinweisen, wie das gemacht wird:

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

Sobald diese in Ihrer ist .bashrc, .profileoder ähnliches, wird jede neue Shell Sie öffnen können Sie alle ausführbaren Dateien direkt ausführen (+ x) in $HOME/bin( /root/binfür root).

Tipp: Möglicherweise möchten Sie das Wrapper-Skript so benennen, phpwwwdass Sie es explizit angeben php script.phpoder phpwww script.phpentscheiden, ob Sie reguläres oder sudo'ed PHP möchten.

Eine andere Lösung ist ein einfacher Alias. Legen Sie diese in Ihrem .bashrc, .profileoder ähnlich:

alias phpwww='sudo -u www-data php'
Riha
quelle
Komisch, ein halbes Hören ist vergangen und ich bin wieder auf meine eigene Frage gestoßen =) Scheint, als hätte ich beim letzten Mal vergessen, deine Antwort zu akzeptieren - das habe ich gerade behoben, danke!
Loostro
Die Alias-Methode macht so viel blutigen Sinn, und sie hat mein genaues Problem gelöst
RedactedProfile
1

Beantwortet von mwargh unter ## linux (IRC Freenode.net)


So führen Sie einen Befehl als anderer Benutzer aus -> wechseln Sie zu diesem Benutzer, indem Sie Folgendes verwenden:

su www-data

Ich wäre immer noch daran interessiert (wenn es möglich ist), PHP so zu konfigurieren, dass es läuft:

root@mycomp php (php script creating a file)

als Root- Benutzer

führt zum Erstellen einer Datei mit www-data: www-data user / group

(Auf diese Weise müsste ich nicht von root zu www-data wechseln, um meine Befehle auszuführen)

loostro
quelle
1

Ich würde versuchen, / usr / bin / php im Besitz von www-data zu machen und die suid-Berechtigung festzulegen, wodurch der Befehl vom Dateieigentümer ausgeführt wird. Sie würden dies tun mit:

chmod u+s /usr/bin/php

von dir gefällt die oktale Notation:

chmod 4755 /usr/bin/php

Obwohl ich sagen muss, dass es einen unruhig machen sollte, wenn Sie www-data zum Eigentümer von irgendetwas machen, da der Sinn des www-data-Kontos darin besteht, so wenig wie möglich zu besitzen.

Eintopf
quelle
Deshalb werde ich mit
Rihas
1

Wenn Sie das php-fpm (FastCGI Process Manager) haben
, können Sie es in der Konfigurationsdatei einrichten, die sich unter (mindestens für Centos) befindet: In /etc/php-fpm.d/www.conf
Zeile 39 können Sie den Benutzer und 49 die Gruppe festlegen

VeXii
quelle
Das trifft nicht zu php-cli, oder?
Riha
1

Skriptdatei erstellen:

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

Inhalt hinzufügen:

#!/bin/bash

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

Führen Sie Ihre Skripte von root aus:

phpuid /path/to/script.php

oder verwenden Sie einen Interpreter in Ihren Skripten

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

Hinweis: Auf Debian 7 getestet, müssen Sie möglicherweise sudo installieren

apt-get install sudo

Alle von script.php erstellten Dateien haben dieselbe UID wie dieses Skript

Palmer
quelle