Scopri quale utente Apache è in esecuzione?


212

Voglio proteggere una directory di caricamento dei file sul mio server come descritto qui in modo splendido, ma ho un problema prima di poter seguire queste istruzioni. Non so quale utente Apache stia eseguendo.

Ho trovato un suggerimento che puoi guardare in httpd.conf e ci sarà una linea "Utente", ma non esiste una linea del genere nel mio file httpd.conf, quindi immagino che Apache sia in esecuzione come utente predefinito. Non riesco a scoprire di cosa si tratti.

Quindi, la mia domanda è (sono):

  • come faccio a sapere qual è l'utente predefinito
  • devo cambiare l'utente predefinito?
  • se la risposta è sì e cambio l'utente predefinito modificando httpd.conf, è probabile che rovini qualcosa?

Grazie!


12
perché questa domanda è stata sottovalutata? Sì, è stato aggiornato in quanto è stato risposto altrove, ma non vedo la necessità di votare verso il basso? È una domanda perfettamente valida? Forse al nostro down voter piacerebbe aggiungere un commento costruttivo al riguardo?
Bryan,

2
Potresti voler pubblicare quell'aggiornamento come risposta e accettarlo, poiché sei attualmente nella coda senza risposta.
Fahad Sadah,

7
+1 per essere informato su StackOverflow; alcuni utenti sembrano insistenti a scappare da nuovi utenti
wruckie

La domanda collegata non esiste più
pal4life,

La prossima domanda: cosa fare perché è uno dei due utenti, come roote www-data. Come si dà al gruppo Apache "giusto" l'autorizzazione ad accedere a qualcosa?

Risposte:


228

ps aux | egrep '(apache|httpd)' in genere mostrerà come funziona Apache.

Di solito non è necessario modificare l'utente predefinito, "nobody" o "apache" sono in genere ottimi utenti. Finché non è "radice";)

modifica: comando più accurato anche per la cattura di binari apache


42
Sì, o saranno dati www su Ubuntu.
gravyface,

10
... e Debian. :)
cubuspl42,

7
Quel comando mi mostra un elenco di cose, la maggior parte da apachema rootanche da 1 .
Utente

2
Ho 3 processi ( /usr/sbin/apache2 -k start), uno è l'utente roote gli altri due www-data. Dovrei essere preoccupato?
domenica

3
@zundi, il servizio inizia come root per fare cose come il bind alle porte riservate (es. 80 e 443). Quindi inizia qualunque sia il numero configurato di processi, per far funzionare il web server e qualsiasi altra attività, come gli utenti definiti. In questo modo le richieste vengono gestite da processi non privilegiati. Noterai che l'ID padre (PPID) è lo stesso per tutti gli altri processi. Quell'idea sarà il PID per quell'unico processo in esecuzione come root.
Kevin,

41

Puoi provare il seguente comando:

ps -ef | egrep '(httpd|apache2|apache)' | grep -v `whoami` | grep -v root | head -n1 | awk '{print $1}'

1
Adoro questa risposta, migliore (più generica) della risposta più votata. Grazie
pgr

14

Usa apachectl -S, che mostrerà qualcosa all'utente e al gruppo Apache, qualcosa del genere:

User: name="_www" id=70
Group: name="_www" id=70

Grazie, sul mio Mac vedo che Apache funziona come '_www'.
Mercurio,

Questa è una buona risposta, perché è l'unico comando che ti dice molto di più sul tuo server web in esecuzione e lo presenta in modo completo.
kontur,

9

Secondo ubuntuforums.org , su Ubuntu l'utente predefinito per apache2 è www-data.

Visto per essere vero su Ubuntu 13.10 Saucy.


Da Lars Noodén sul forum sopra.

Per essere sicuri su cosa [l'utente] è realmente impostato, controlla i file di configurazione effettivi. Il file ombrello apache2.confavrà qualcosa di simile al seguente,

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

Questo è un riferimento alle variabili di ambiente impostate in /etc/apache2/envvars. mod_suexecconsente inoltre agli script di essere eseguiti ancora con un altro utente e gruppo.

Per trovare eventuali host virtuali, che possono utilizzare utenti, gruppi o entrambi alternativi, controllare le configurazioni.

$ egrep "^User|^Group|^SuexecUserGroup" /etc/apache2/apache2.conf /etc/apache2/sites-available/*.conf

Per le distribuzioni basate su Red Hat sarebbe (di solito il suo utente che esegue httpd è apache):

$ egrep "^User|^Group|^SuexecUserGroup" /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf

8

So che questo è un vecchio post, ma è ancora elencato come senza risposta, quindi farò un suggerimento. Se non riesci a trovare l'utente o il gruppo su cui è in esecuzione Apache, forse prova ad aprire il file httpd.conf. Ci dovrebbe essere una voce lì per "Utente" e "Gruppo". Non solo puoi vedere su quale utente Apache dovrebbe essere in esecuzione, ma puoi cambiarlo se senti la necessità di farlo.


7

Puoi includere una riga di codice nello script PHP:

echo exec('whoami');

8
Fai attenzione qui, mostra all'utente che esegue PHP, non l'utente Apache. Se usi mod_php questi sono gli stessi ma se, come è ormai molto comune, stai usando qualcos'altro (come php_fpm) possono facilmente essere diversi.
benz001,

5

Questo codice - più o meno - elenca in ordine alfabetico tutti gli utenti non root che eseguono processi contenenti apache(o il cui nome contiene apache)

ps aux | grep -v root | grep apache | cut -d\  -f1 | sort | uniq

L'elenco includerà probabilmente gli utenti che eseguono processi come 'grep apache', come il tuo io.
mwfearnley,

4
  • Per scoprire l'utente, puoi semplicemente usare ps aux | grep apachementre è in esecuzione.
  • Non è necessario, ma se Apache è in esecuzione come root ci sono problemi di sicurezza.
  • In terzo luogo, la modifica dell'utente di Apache cambierà i suoi diritti di accesso ad alcune directory. Devi assicurarti che / var / www (o ovunque tu abbia i tuoi siti web) sia accessibile al nuovo utente e gruppo.
  • Sui sistemi che ho visto, apache veniva sempre installato usando apache: apache (o simile) come utente e gruppo, quindi probabilmente dovrebbe già essere impostato in questo modo.

NOTA: questa è la stessa risposta che ho dato su Stackoverflow .


2

Oppure puoi controllare il file di configurazione di apache e cercare il proprietario e il gruppo.


2

Come suggerito da Noyo qui :

APACHE_USER=$(ps axho user,comm|grep -E "httpd|apache"|uniq|grep -v "root"|awk 'END {if ($1) print $1}')

E poi:

echo $APACHE_USER

1
Ottieni l'utente (riga di comando di Ubuntu): echo $ APACHE_USER
Jadeye,

1

Un approccio alternativo, almeno per le distribuzioni basate su Debian / Ubuntu, è usare lo stesso metodo che Apache fa per impostare il suo utente e gruppo: source/etc/apache2/envvars !

$ echo "$(source /etc/apache2/envvars && echo "$APACHE_RUN_GROUP")"
www-data

Se vuoi essere sofisticato, puoi eliminare gli errori se il file non viene trovato e fornire un valore predefinito:

$ apacheuser = $ (
     source / fail / etc / apache2 / envvars 2> / dev / null &&
     echo "$ APACHE_RUN_GROUP" ||
     non fare eco a nessuno  
)
$ echo "$ apacheuser"
nessuno

1

Ho scoperto che la maggior parte delle soluzioni offerte qui sono specifiche del sistema o della configurazione (in particolare, la maggior parte delle soluzioni non funziona affatto su MacOS) e alcune si basano sull'utente che sa dove sono i file di configurazione di Apache in primo luogo. .

Quindi imbroglio un po 'e lascio che Apache stesso mi dica cosa.

Il semplice comando apachectl -Sti dirà cosa devi sapere su un'istanza in esecuzione di Apache e i suoi risultati possono essere analizzati abbastanza facilmente. Ecco la mia soluzione, che uso nella parte superiore di alcuni bashscript per determinare una varietà di cose di cui potrei avere bisogno in un determinato momento ...

# Store the results so we don't have to keep calling apachetl...
astatus=`apachectl -S`

# Now grab whatever you want from the result... 
HTTPD_ROOT_DIR=$(expr "`echo "$astatus" | grep ServerRoot`" : ".*\"\(.*\)\".*")
HTTPD_DOC_DIR=$(expr "`echo "$astatus" | grep \"Main DocumentRoot\" `" : ".*\"\(.*\)\".*")
HTTPD_USER=$(expr "`echo "$astatus" | grep \"User:.*name=\" `" : ".*\"\(.*\)\".*")
HTTPD_GROUP=$(expr "`echo "$astatus" | grep \"Group:.*name=\" `" : ".*\"\(.*\)\".*")

Questi valori possono quindi essere utilizzati come tali:

echo $HTTPD_ROOT_DIR // /etc/httpd
echo $HTTPD_DOC_DIR  // /var/www
echo $HTTPD_USER     // www-data
echo $HTTPD_GROUP    // www-data

0

Ho trovato questo comando nei documenti di CakePHP .

HTTPDUSER=`ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1`

Ora HTTPDUSERcontiene il nome utente dell'utente che esegue il server, echo $HTTPDUSERnel mio caso output - www-datautilizzando rlerdorf / php7dev .


0

Usa lsof e passa la porta che apache viene ascoltata come argomento. Vedere la colonna USER per l'utente appache è in esecuzione come.

# lsof -i :80
COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd     21058   root    4u  IPv6  74730      0t0  TCP *:http (LISTEN)
httpd     21111 www-data    4u  IPv6  74730      0t0  TCP *:http (LISTEN)
httpd     24915 www-data    4u  IPv6  74730      0t0  TCP *:http (LISTEN)

lsof potrebbe essere lento quando hai qualche file da 100k aperto e / o un server abbastanza occupato.
Dennis Nolte,
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.