Chạy nginx với tư cách là người dùng không root


17

Tôi đi theo quá trình này để cài đặt nginx trên Ubuntu 10.04 Lucid tôi chủ http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Tôi đã bị mất sau khi tạo một tập lệnh init để bắt đầu nginx, và sau đó gọi /etc/init.d/nginx bắt đầu. Khi tôi làm điều đó, tôi đã nhận được lỗi sau:

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)

Cách duy nhất tôi có thể chạy nó là nếu tôi sử dụng sudovà nó chạy quy trình như root, đó là điều tôi không muốn.

Tôi chownlà toàn bộ thư mục ( chown -R nginx:nginx /opt/nginx) và tôi cũng chmod -R 755là thư mục.

Thêm userchỉ thị theo đề xuất của CS3 cũng cho tôi lỗi này, nhưng với một dòng bổ sung.

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)

Có ý kiến ​​gì không?


and I've also chmod -R 755 the directory as wellTiếp tục làm điều này và cuối cùng bạn sẽ phải trả giá cho nó. Thật đáng sợ khi chứng kiến ​​có bao nhiêu người trên internet cho rằng đây là một cuộc gọi đầu tiên để "khắc phục" bất kỳ vấn đề nào. Unix sẽ không cung cấp thông tin phản hồi thân thiện nếu bạn làm điều gì đó sai lầm.

Câu trả lời:


11

Trước hết, init script được cho là chạy

sudo /etc/init.d/name

khi bạn chưa đăng nhập bằng root (khi người dùng đăng nhập được bật sudo)

Thứ hai, khi bạn chạy sudo /etc/init.d/nginx start ==> nó kích hoạt quy trình nginx chính dưới dạng root và worker process như người dùng bạn đã chỉ định trong chỉ thị người dùng nginx.conf của bạn (ví dụ: dữ liệu www)

Bạn có thể xác nhận nếu tất cả quá trình của bạn dưới nginx được chạy bởi root khi phát hành sudo /etc/init.d/nginx bắt đầu không?

với

ps aux | grep [n]ginx

ví dụ.

nhập mô tả hình ảnh ở đây

Gợi ý: Ubuntu 10.04 LTS có hỗ trợ gói ubfox tuyệt vời từ nhóm nginx. Vì vậy, tại sao phải cài đặt từ nguồn nếu bạn không có yêu cầu cho mô-đun tùy chỉnh bên trong nginx?

Tham khảo ý kiến tại đây

Gói nhị phân đã đi kèm với các mô-đun khá cần thiết

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

Quy trình công nhân tôi có ID, không phải tên. Bất kỳ cơ hội nào đó là ID người dùng nginx? Tôi khá mới với Ubuntu. Tôi không biết gói apt đã bật tất cả các cờ này. Làm thế nào bạn tìm ra điều đó?
Giăng

Bạn đã kiểm tra xem người dùng bạn đã chỉ định trong nginx.conf có tồn tại hay chưa? Repo chính thức không có Nginx này! Vui lòng sử dụng PPA từ URL được chỉ định
kaji

Tôi đã sử dụng tên người dùng khác dài hơn giới hạn 8 ký tự. Đó là lý do tại sao ID người dùng đang được hiển thị, phải không?
Giăng

vâng đó là một kịch bản
kaji

1
nginx -V là câu trả lời của bạn
kaji

1

Thêm chỉ thị người dùng bên trong nginx.conf

Tham khảo: http://wiki.nginx.org/CoreModule#user


Xin lỗi, bạn có thể cụ thể hơn? Tôi đã làm điều đó rồi nhưng không có kết quả.
Giăng

Chạy bất cứ thứ gì giữa các cổng 1 đến 1024 đều yêu cầu quyền root. Chỉ thị của người dùng đảm bảo rằng nginx chạy như người dùng không root vì lý do bảo mật.
Shyam Sundar CS

Ngoài ra, để các bản ghi được mở và ghi, thư mục nginx nên được sử dụng cho người dùng mà bạn đang cố gắng chạy.
Shyam Sundar CS

1

5 kopek của tôi về điều này

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

.. sẽ giúp bạn có tất cả các đường dẫn khác, mà bạn nên ghi đè trong cấu hình được cung cấp tùy chỉnh hoặc với tùy chọn "-g".


Lệnh sau hiển thị tất cả các dòng từ đầu ra và làm nổi bật những dòng có thuật ngữ 'đường dẫn':nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
chuyển tiếp vào

0

Trong trường hợp của tôi, có một tham chiếu tệp bị thiếu trong nginx.conf của tôi:

error_log /var/log/nginx/error.log cảnh báo;

Đã trở thành: error_log cảnh báo;

Vì vậy, tôi đã vô tình xóa /var/log/nginx/error.log tham chiếu gây ra thông báo lỗi từ chối cấp phép.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.