Come configurare l'interfaccia della riga di comando di PHP su Linux Ubuntu per l'esecuzione come www-data?


12

Ho un'applicazione symfony2 sul mio Ubuntu. Symfony ha molti utili comandi della console (come php app/console cache:clearo php app/console assets:install web).

Il problema è che se li eseguo come rootutente, i file appena generati avranno root:rootutente / gruppo e se accedo al mio sito Web ricevo errori (perché apache non può leggere / modificare questi file -> dovrebbero avere www-data:www-data).

L'esecuzione chown www-data:www-datarisolve il problema, ma eseguirlo ogni volta che svuoto la cache non è una soluzione.

Come posso configurare l'interfaccia della riga di comando di PHP affinché venga sempre eseguita come utente / gruppo di dati www?

o

Come posso eseguire un comando come utente diverso (essendo root, eseguirlo come www-data)?

Risposte:


23

Esegui un comando come un altro utente una volta:

sudo -u www-data php script.php

Questo dovrebbe funzionare se lo sei root.

Per quanto riguarda sempre l'esecuzione di php as www-data, ci sono diverse possibilità. È possibile creare un semplice shellscript wrapper. Se /usr/bin/phpè solo un soft-link /usr/bin/php5o simile, questo lo rende più semplice. Sostituisci il soft-link (NON il file php5) con uno script come questo:

#!/bin/sh

sudo -u www-data php5 $*

return $?

Questo non è testato però. Inoltre, tieni presente che questo tenterà SEMPRE di essere eseguito php5come utente www-data, anche se l'utente potrebbe non esserlo roote potrebbe non essere autorizzato a farlo. E potrebbe anche non essere quello che vuoi davvero. Alcuni servizi installati potrebbero incorrere in problemi quando si tenta di eseguire php.

Una soluzione (forse migliore) da applicare solo a root potrebbe essere quella di lasciare solo il soft-link /usr/bin/phpe posizionare lo script /root/bin. Quindi aggiungere tale cartella a PATH via .bashrc, .profileo simili. Se sì /etc/skel/.profile, ciò può indicare come è stato fatto:

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

Una volta che questo è nella tua .bashrc, .profileo simile, ogni nuova shell che apri ti permetterà di eseguire direttamente qualsiasi eseguibile (+ x) in $HOME/bin( /root/binper root).

Suggerimento: potresti voler dare un nome simile allo script wrapper in phpwwwmodo da specificare esplicitamente php script.phpo phpwww script.phpdecidere se vuoi php regolare o sudo.

Un'altra soluzione è un semplice alias. Inserire questo nel vostro .bashrc, .profileo simili:

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

Divertente, è passata mezza udienza e mi sono imbattuto di nuovo nella mia domanda =) Sembra che ho dimenticato di accettare la tua risposta l'ultima volta - L'ho appena risolto, grazie!
loostro,

Il metodo alias ha un senso così cruento e ha risolto il mio esatto problema
RedactedProfile

1

Risposta di mwargh su ## linux (IRC Freenode.net)


Per eseguire un comando come utente diverso -> passare a quell'utente utilizzando:

su www-data

Sarei comunque interessato (se possibile) a configurare PHP in modo che l'esecuzione:

root@mycomp php (php script creating a file)

come utente root

comporterà la creazione di un file con www-data: www-data utente / gruppo

(in questo modo non dovrei passare da root a www-data per eseguire i miei comandi)


1

Vorrei provare a rendere / usr / bin / php di proprietà di www-data e impostare l'autorizzazione del suid, che impone l'esecuzione del comando da parte del proprietario del file. Lo faresti con:

chmod u+s /usr/bin/php

a te piace la notazione ottale:

chmod 4755 /usr/bin/php

Anche se devo dire che dovrebbe essere inquieto ogni volta che stai rendendo i dati www il proprietario di qualsiasi cosa, poiché il punto dell'account www-data è possedere il meno possibile.


Ecco perché andrò con la risposta di
Riha

1

se hai php-fpm (FastCGI Process Manager)
puoi impostarlo nel file di configurazione che si trova in (almeno per centos): /etc/php-fpm.d/www.conf
alla riga 39 puoi impostare l'utente e 49 impostare il gruppo


Non si applica a php-cli, vero?
Riha,

1

creare il file di script:

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

Aggiungi contenuto:

#!/bin/bash

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

esegui i tuoi script da root:

phpuid /path/to/script.php

o usa l'interprete nei tuoi script

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

nota: testato su debian 7 potrebbe essere necessario installare sudo

apt-get install sudo

tutti i file creati da script.php avranno lo stesso uid di quello script

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.