รัน nginx ในฐานะผู้ใช้ที่ไม่ใช่รูท


17

ฉันได้ปฏิบัติตามขั้นตอนนี้เพื่อติดตั้ง nginx บน Ubuntu 10.04 Lucid Server ของฉันhttp://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

ฉันหลงทางหลังจากจุดสร้างสคริปต์เริ่มต้นเพื่อเริ่ม nginx แล้วเรียก /etc/init.d/nginx start เมื่อฉันทำอย่างนั้นฉันได้รับข้อผิดพลาดต่อไปนี้:

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)

วิธีเดียวที่ฉันสามารถเรียกใช้ได้คือถ้าฉันใช้sudoและมันทำงานตามกระบวนการrootซึ่งเป็นสิ่งที่ฉันไม่ต้องการ

ฉันchownเป็นไดเรกทอรีทั้งหมด ( chown -R nginx:nginx /opt/nginx) และฉันก็chmod -R 755เป็นไดเรกทอรีเช่นกัน

การเพิ่มuserคำสั่งตามที่แนะนำโดย CS3 ยังทำให้ฉันมีข้อผิดพลาดนี้ แต่มีบรรทัดเพิ่มเติม

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)

ความคิดใด ๆ


and I've also chmod -R 755 the directory as wellทำสิ่งนี้ต่อไปและคุณจะจ่ายราคาให้ในที่สุด มันน่ากลัวที่จะเห็นว่ามีคนจำนวนมากบนอินเทอร์เน็ตที่แนะนำสิ่งนี้ว่าเป็นพอร์ตแรกของการโทรเพื่อ "แก้ไข" ปัญหาใด ๆ Unix จะไม่ให้คำติชมที่เป็นมิตรถ้าคุณทำอะไรที่ผิดปกติ

คำตอบ:


11

ก่อนอื่นสคริปต์ init ควรจะถูกเรียกใช้

sudo /etc/init.d/name

เมื่อคุณไม่ได้เข้าสู่ระบบในฐานะ root (เมื่อผู้ใช้ที่เข้าสู่ระบบเปิดใช้งาน sudo)

ประการที่สองเมื่อคุณเรียกใช้ sudo /etc/init.d/nginx start ==> มันจะทำการประมวลผลต้นแบบ nginx เป็นกระบวนการรูทและกระบวนการทำงานตามที่ผู้ใช้ที่คุณระบุในคำสั่งผู้ใช้ nginx.conf ของคุณ (เช่น www-data)

คุณสามารถยืนยันได้หรือไม่ว่ากระบวนการทั้งหมดของคุณภายใต้ nginx นั้นถูกเรียกใช้โดยรูทเมื่อออก sudo /etc/init.d/nginx start หรือไม่

กับ

ps aux | grep [n]ginx

เช่น.

ป้อนคำอธิบายรูปภาพที่นี่

คำแนะนำ: Ubuntu 10.04 LTS ได้รับการสนับสนุนแพคเกจ ubuntu ที่ยอดเยี่ยมจากทีม nginx ดังนั้นทำไมต้องติดตั้งจากแหล่งถ้าคุณไม่มีความต้องการสำหรับโมดูลที่กำหนดเองภายใน nginx

ปรึกษาที่นี่

แพ็คเกจไบนารีมาพร้อมกับโมดูลที่จำเป็นมาก

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

กระบวนการของผู้ปฏิบัติงานที่ฉันมี ID ไม่ใช่ชื่อ มีโอกาสใดบ้างที่เป็น ID ผู้ใช้ nginx ฉันค่อนข้างใหม่สำหรับ Ubuntu ฉันไม่ทราบว่าแพกเกจ apt เปิดแฟลกเหล่านี้ทั้งหมดแล้ว คุณค้นพบได้อย่างไร
John

คุณได้ตรวจสอบว่ามีผู้ใช้ที่คุณระบุใน nginx.conf หรือไม่ repo อย่างเป็นทางการไม่มี Nginx นี้! โปรดใช้ PPA จาก URL ที่ระบุ
kaji

ฉันใช้ชื่อผู้ใช้อื่นซึ่งยาวเกินอักขระสูงสุด 8 ตัว นั่นเป็นสาเหตุที่ ID ผู้ใช้ถูกแสดงใช่ไหม
John

ใช่นั่นคือสถานการณ์เดียว
kaji

1
nginx -V คือคำตอบของคุณ
kaji

1

เพิ่มคำสั่งของผู้ใช้ภายใน nginx.conf

การอ้างอิง: http://wiki.nginx.org/CoreModule#user


ขออภัยคุณเจาะจงมากขึ้นไหม ฉันได้ทำไปแล้วเพื่อประโยชน์
John

การรันอะไรก็ได้ระหว่างพอร์ต 1 ถึง 1024 ต้องใช้สิทธิ์พิเศษ ผู้ใช้สั่งให้แน่ใจว่า nginx ทำงานในฐานะผู้ใช้ที่ไม่ใช่รูทด้วยเหตุผลด้านความปลอดภัย
Shyam Sundar CS

นอกจากนี้เพื่อให้สามารถเปิดและเขียนบันทึกได้ไดเรกทอรี nginx ควรจะถูก chown'd กับผู้ใช้ที่คุณพยายามเรียกใช้
Shyam Sundar CS

1

5 kopek ของฉันเกี่ยวกับสิ่งนี้

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

.. จะให้คุณพา ธ อื่นทั้งหมดซึ่งคุณควรแทนที่ในการกำหนดค่าที่กำหนดเองหรือด้วยตัวเลือก "-g"


คำสั่งต่อไปนี้แสดงบรรทัดทั้งหมดจากเอาต์พุตและไฮไลต์ผู้ที่มีคำว่า 'path':nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards

0

ในกรณีของฉันมีการอ้างอิงไฟล์หายไปใน nginx.conf ของฉัน:

error_log /var/log/nginx/error.log เตือน;

เป็น: error_log เตือน;

ดังนั้นฉันบังเอิญลบลบ /var/log/nginx/error.log ซึ่งทำให้เกิดการอนุญาตปฏิเสธข้อความข้อผิดพลาด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.