Esegui nginx come utente non root


17

Ho seguito questo processo per installare nginx sul mio Ubuntu 10.04 Lucid Server http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Mi sono perso dopo aver creato uno script init per avviare nginx e quindi chiamare /etc/init.d/nginx start. Quando l'ho fatto, ho ricevuto il seguente errore:

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:17:27 [emerg] 859#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

L'unico modo in cui posso eseguirlo è se lo uso sudoed esegue il processo come root, che è quello che non voglio.

Ho avuto chownl'intera directory ( chown -R nginx:nginx /opt/nginx) e ho anche chmod -R 755la directory.

L'aggiunta della userdirettiva come suggerito da CS3 mi dà anche questo errore, ma con una riga aggiuntiva.

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:48:34 [warn] 1606#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /opt/nginx/conf/nginx.conf:2
2012/03/16 18:48:34 [emerg] 1606#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

Qualche idea?


and I've also chmod -R 755 the directory as wellContinua a farlo e alla fine pagherai un prezzo. È spaventoso assistere a quante persone ci sono su Internet suggerendo questo come una prima porta di chiamata per "risolvere" qualsiasi problema. Unix non darà un feedback amichevole se fai qualcosa di stupido.

Risposte:


11

Prima di tutto, dovrebbero essere eseguiti gli script di init

sudo /etc/init.d/name

quando non si è effettuato l'accesso come root (quando l'utente connesso è abilitato sudo)

In secondo luogo, quando si esegue sudo /etc/init.d/nginx start ==> attiva il processo master nginx come processi root e worker come l'utente specificato nella direttiva utente nginx.conf (ad es. Www-data)

Potete confermare se tutto il processo in nginx viene eseguito da root quando si avvia sudo /etc/init.d/nginx?

con

ps aux | grep [n]ginx

per esempio.

inserisci qui la descrizione dell'immagine

Suggerimento: Ubuntu 10.04 LTS ha un eccellente supporto per i pacchetti ubuntu da parte del team di nginx. Quindi, perché preoccuparsi di installare dal sorgente se non si dispone di un modulo personalizzato all'interno di nginx?

Consultare qui

Il pacchetto binario viene già fornito con moduli praticamente necessari

nginx version: nginx/1.0.12
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-upstream-fair

Il processo di lavoro che ho ha un ID, non un nome. Qualche possibilità che sia l'ID utente nginx? Sono abbastanza nuovo su Ubuntu. Non sapevo che il pacchetto apt avesse attivato tutte queste bandiere. Come l'hai scoperto?
Giovanni

hai controllato se l'utente specificato nel tuo nginx.conf esiste o no? Il repository ufficiale non ha questo Nginx! Si prega di utilizzare PPA dall'URL specificato
kaji

Ho usato un nome utente diverso che è più lungo del limite di 8 caratteri. Ecco perché viene mostrato l'ID utente, giusto?
Giovanni

Sì, questo è uno scenario
Kaji,

1
nginx -V è la tua risposta
kaji

1

Aggiungi la direttiva utente all'interno di nginx.conf

Riferimento: http://wiki.nginx.org/CoreModule#user


Scusa, potresti essere più specifico? L'ho già fatto senza alcun risultato.
Giovanni

L'esecuzione di qualsiasi cosa tra le porte da 1 a 1024 richiede i privilegi di root. La direttiva utente garantisce che nginx venga eseguito come utente non root per motivi di sicurezza.
Shyam Sundar CS

Inoltre, affinché i log vengano aperti e scritti, la directory nginx deve essere indicata all'utente da cui si sta tentando di eseguire.
Shyam Sundar CS

1

Il mio 5 kopek riguardo a questo

nginx -V 2>&1 | sed 's/ --/\n--/g' | grep path

.. ti porterà a tutti gli altri percorsi, che dovresti sovrascrivere nella configurazione personalizzata o con l'opzione "-g".


Il seguente comando mostra tutte le righe dall'output ed evidenzia quelle che contengono il termine 'percorso':nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards

0

Nel mio caso mancava un riferimento al file nel mio nginx.conf:

error_log /var/log/nginx/error.log warn;

È diventato: error_log warn;

Quindi ho accidentalmente eliminato il riferimento /var/log/nginx/error.log che ha causato un messaggio di errore di autorizzazione negata.

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.