Jalankan nginx sebagai pengguna non-root

17

Saya mengikuti proses ini untuk menginstal nginx di Lucid Server Ubuntu 10,04 saya http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Saya tersesat setelah membuat skrip init untuk memulai nginx, dan kemudian memanggil /etc/init.d/nginx mulai. Ketika saya melakukan itu, saya mendapatkan kesalahan berikut:

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)

Satu-satunya cara saya dapat menjalankannya adalah jika saya menggunakan sudodan menjalankan prosesnya root, yang tidak saya inginkan.

Saya sudah chownseluruh direktori ( chown -R nginx:nginx /opt/nginx) dan saya juga chmod -R 755direktori juga.

Menambahkan userarahan seperti yang disarankan oleh CS3 juga memberi saya kesalahan ini, tetapi dengan baris tambahan.

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)

Ada ide?

John
sumber
and I've also chmod -R 755 the directory as wellTerus lakukan ini dan Anda akan membayar harga untuk itu pada akhirnya. Sangat menakutkan untuk menyaksikan berapa banyak orang di internet yang menyarankan ini sebagai pelabuhan panggilan pertama untuk "memperbaiki" masalah apa pun. Unix tidak akan memberikan umpan balik yang ramah jika Anda melakukan sesuatu yang bodoh.

Jawaban:

11

Pertama-tama, skrip init seharusnya dijalankan

sudo /etc/init.d/name

ketika Anda tidak masuk sebagai root (saat pengguna yang masuk sudo diaktifkan)

Kedua, ketika Anda menjalankan sudo /etc/init.d/nginx start ==> ia menjalankan proses master nginx sebagai proses root dan pekerja sebagai pengguna yang Anda tentukan dalam direktif pengguna nginx.conf Anda (mis. Www-data)

Bisakah Anda mengkonfirmasi apakah semua proses Anda di bawah nginx dijalankan oleh root saat mengeluarkan sudo /etc/init.d/nginx mulai?

dengan

ps aux | grep [n]ginx

misalnya.

masukkan deskripsi gambar di sini

Saran: Ubuntu 10,04 LTS memiliki dukungan paket ubuntu yang sangat baik dari tim nginx. Jadi, mengapa repot-repot menginstal dari sumber jika Anda tidak memiliki persyaratan untuk modul khusus di dalam nginx?

Konsultasikan di sini

Paket biner sudah dilengkapi dengan modul yang sangat dibutuhkan

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
kaji
sumber
Proses pekerja yang saya miliki memiliki ID, bukan nama. Apakah ada kemungkinan itu adalah ID pengguna nginx? Saya cukup baru di Ubuntu. Saya tidak tahu paket apt semua bendera ini dihidupkan. Bagaimana Anda mengetahui hal itu?
John
sudahkah Anda memeriksa apakah pengguna yang Anda tentukan di nginx.conf Anda ada atau tidak? Repo resmi tidak memiliki Nginx ini! Silakan gunakan PPA dari URL yang ditentukan
kaji
Saya menggunakan nama pengguna yang berbeda yang lebih panjang dari batas 8 karakter. Itu sebabnya User ID ditampilkan, kan?
John
ya itu satu skenario
kaji
1
nginx -V adalah jawaban Anda
kaji
1

Tambahkan arahan pengguna di dalam nginx.conf

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

Shyam Sundar CS
sumber
Maaf, bisakah Anda lebih spesifik? Saya sudah melakukan itu tetapi tidak berhasil.
John
Menjalankan apa pun di antara port 1 hingga 1024 membutuhkan hak akses root. Arahan pengguna memastikan bahwa nginx berjalan sebagai pengguna bukan root untuk alasan keamanan.
Shyam Sundar CS
Juga, agar log dapat dibuka dan ditulis, direktori nginx harus di-chown ke pengguna yang Anda coba jalankan.
Shyam Sundar CS
1

5 kopek saya tentang ini

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

.. akan memberi Anda semua jalur lain, yang harus Anda timpa dalam konfigurasi yang disediakan khusus atau dengan opsi "-g".

gaRex
sumber
Perintah berikut menunjukkan semua baris dari output, dan menyoroti yang mengandung istilah 'path':nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards
0

Dalam kasus saya ada referensi file yang hilang di nginx.conf saya:

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

Menjadi: error_log beri peringatan;

Jadi saya tidak sengaja menghapus referensi /var/log/nginx/error.log yang menyebabkan izin ditolak pesan kesalahan.

ilker
sumber