Esecuzione di Apache come utente diverso


10

Quando eseguo il ps -efHcomando per elencare tutto il processo, posso vedere Apache in esecuzione come roote sembra avere sotto-processi in esecuzione come www-data. Ecco l'estratto:

root     30117     1  0 09:10 ?        00:00:00   /usr/sbin/apache2 -k start
www-data 30119 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30120 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30121 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start

Posso far funzionare Apache e tutti i processi secondari come utente diverso apache2d:apache2d? Se é cosi, come? Ho letto da qualche parte che si possono trovare le impostazioni per questo /etc/apache2/httpd.confma quel file sembra essere vuoto? Questo può essere ottenuto modificando il proprietario e il gruppo dello /etc/init.d/apache2script e quindi impostando il flag setuid su di esso?

Risposte:


21

Apache deve inizialmente essere eseguito come root per eseguire il bind alla porta 80. Se inizialmente non lo si esegue come root, non è possibile eseguire il bind alla porta 80. Se si desidera eseguire il bind su una porta sopra la 1024, sì, è possibile. Altrimenti non preoccuparti di root. Questo è il processo Apache padre e non soddisfa alcuna richiesta. Genererà processi figlio e lascerà cadere i privilegi per la gestione delle richieste.

Per modificare l'utente Apache, impostare i parametri Usere Groupnella configurazione di Apache.


Beh, mi dispiace divagare, ma noto che haproxy può funzionare come haproxy (non come root) e associare tcp 80 port. Come ci riesce? Qualche illuminazione?
Kiiwii,

1
Non I processi possono essere associati a porte inferiori a 1024 se dispone di privilegi di superutente. Quindi haproxy sta iniziando come root e rilascia i privilegi (probabilmente) o setuid root (improbabile).
Bahamat,

Non è necessario eseguirlo come root, è sufficiente consentire all'utente 'apache' l'accesso alle porte riservate (ovvero quelle inferiori a 1024). Questa risposta spiega come puoi usare 'authbind' per farlo: superuser.com/questions/710253/…
Animal451

4

@bahamat lo spiega abbastanza bene, ma aggiungerò qualche dettaglio in più.

Nel corso del normale funzionamento, il processo apache di proprietà di root non eseguirà alcuna operazione effettiva oltre all'ascolto sulla porta 80 e all'inoltro delle connessioni in entrata ai suoi www-datafigli (in modo sicuro non privilegiato, come l' utente).

La posizione del file di configurazione principale dipende dalle opzioni in fase di compilazione e varia in base alla distribuzione, ma /etc/apache2/apache2.confè una buona idea iniziale.

Inoltre, se stai configurando un sistema di web hosting multiutente, potresti voler esaminare SuExec e fcgid in modo che ciascun processo apache di ciascun utente di web hosting venga eseguito come detto utente, in modo che se un utente è negligente con la sua sicurezza, altro gli utenti non saranno interessati.


3

Almeno in Ubuntu, le impostazioni sono disponibili /etc/apache2/envvars. Modificali, quindi riavvia Apache e sei pronto e funzionante.


Grazie, questo mi ha aiutato! Sto installando un Ubuntu Vagrant Box, e per qualche motivo /etc/apache2/httpd.conf non è stato usato per caricare l'utente e il gruppo. envars sembra fare il trucco!
Greg,

2

Inoltre, controlla Apache2 ITK MPM .

Inoltra un thread Apache con il uid/ assegnato gid, questo continuiamo ad usare mod_php. Niente di più chmod/ chownecc.


La votazione per la mpm_itkquale è un miglioramento significativo rispetto a suexec / fcgid
Shadur,

0

Mac OSX:

Ciò che ha funzionato per me sta andando nel file di configurazione di Apache:

/etc/apache2/httpd.conf

In questo file ho cercato Utente o Gruppo

e si imbatté in:

User _www
Group _www

L'ho cambiato in qualsiasi utente / gruppo di cui avessi bisogno (nel mio caso l'utente / il gruppo che è il proprietario dei file della mia app Web che puoi vedere. E questo puoi controllare usando il semplice 'ls -l' comando)

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.