Làm cách nào để thay đổi người dùng NGINX?


37

Tôi có một đoạn script PHP tạo thư mục và xuất hình ảnh vào thư mục. Điều này chỉ hoạt động tốt trong Apache nhưng gần đây chúng tôi đã quyết định chuyển sang NGINX để sử dụng nhiều RAM hạn chế hơn. Tôi đang sử dụng lệnh mkdir () của PHP để tạo thư mục:

mkdir(dirname($path['image']['server']), 0755, true);

Sau khi chuyển sang NGINX, tôi nhận được cảnh báo sau:

Warning: mkdir(): Permission denied in ...

Tôi đã kiểm tra tất cả các quyền của thư mục mẹ, vì vậy tôi đã xác định rằng có lẽ tôi cần thay đổi 'người dùng' NGINX hoặc PHP-FPM nhưng tôi không chắc chắn làm thế nào (tôi không bao giờ phải chỉ định người dùng quyền cho APACHE). Tôi dường như không thể tìm thấy nhiều thông tin về điều này. Bất kỳ sự trợ giúp nào đều sẽ là tuyệt vời!

(Lưu ý: Bên cạnh việc cúp máy nhỏ này, việc chuyển sang NGINX khá đơn giản; tôi sử dụng lần đầu tiên và chỉ mất khoảng 10 phút để khởi động và chạy với NGINX. Bây giờ tôi chỉ cần ủi ra khỏi kinks.)


1
Nếu nginx được cài đặt bởi người quản lý gói, tốt nhất có lẽ là chỉ sử dụng 'ps' để xem nginx của người dùng nào đang chạy và thay đổi chủ sở hữu của thư mục thành người dùng đó. Thông thường bảo mật được thiết lập khá tốt theo mặc định bởi các gói, việc thay đổi người dùng có thể làm đảo lộn điều gì khác.
Joachim Isaksson

nginx.confwww.conftheo mặc định IIRC.
PeeHaa

Nếu bạn đang sử dụng fastcgi, hãy kiểm tra xem bạn có thể suexec các phpscripts không. điều đó sẽ cho phép bạn chạy các trang web khác nhau dưới người dùng cụ thể của họ. Tôi chắc chắn một số hướng dẫn thiết lập có sẵn trực tuyến.
hakre

Câu trả lời:


58

Chạy nginx & php-fpm dưới dạng www: www

1. Nginx

Chỉnh sửa nginx.conf và đặt người dùng thànhwww www;

Nếu tiến trình chủ được chạy dưới quyền root, thì nginx sẽ setuid () / setgid () thành USER / GROUP. Nếu NHÓM không được chỉ định, thì nginx sử dụng cùng tên với USER. Theo mặc định, không ai là người dùng và không ai hoặc nhóm nogroup hoặc --user = USER và --group = GROUP từ tập lệnh ./cool.

2. PHP-FPM

Chỉnh sửa php-fpm.conf và đặt người dùng và nhóm thành www.

người dùng - người dùng Unix của các quy trình. "Dữ liệu www" mặc định

nhóm - Nhóm quy trình Unix. "Dữ liệu www" mặc định


1
Được rồi tôi chỉ thay đổi nginx.conf (nó đã được đặt thành user www-data). Tuy nhiên, tôi không thấy bất kỳ người dùng nào được xác định trong php-fpm.conf. Tôi có nên thêm nó vào đầu bằng cách sử dụng cùng một cú pháp ( user www www) không?
David

Cú pháp php-conf không giống os nginx.conf. Tìm [www]một phần và thêm user=wwwvào dòng tiếp theo, và group=wwwtrong phần tiếp theo.
glavić

Tôi đã gặp lỗi sau khi khởi động lại nginx: Khởi động lại nginx : [emerg] getpwnam("www") failed in /etc/nginx/nginx.conf:1 nginx: configuration file /etc/nginx/nginx.conf test failed.
David

Sau đó, bạn có thể chạy Nginx và php-fpm với tư cách là người dùng có quyền thích hợp cho các thư mục phù hợp hoặc tạo người dùng mới có tên www bằng cách chạy "sudo useradd -g www www". Xin vui lòng cho chúng tôi biết, nếu bạn cần giải thích chi tiết hơn.
Roman Prykhodchenko

1
@xorinzor: không, sử dụng những gì bạn có: D
glavić

25

Trong Ubuntu 14.04 , tệp để thay đổi người dùngnhóm trong PHP-FPM là : /etc/php5/fpm/pool.d/www.conf. Trong tệp này thay đổi các tham số:

user = www
group = www
listen.owner = www
listen.group = www

3
Đây cũng là trường hợp cho Ubuntu 16.10.
Craimasjien

1
Đây cũng là trường hợp của Ubuntu 18.04
siliconrockstar

Đây sẽ là một bổ sung rất tốt cho câu trả lời được chấp nhận.
Ashkan Kh. Nazary

Đối với PHP 7.2, nó có trong/etc/php/7.2/fpm/pool.d/www.conf
Cromax

6

Để trả lời câu hỏi thực tế của bạn là chỉ cần thay đổi userdòng nginx.confnhư vậy:

user    [username];

Thí dụ:

user    www-data;

Người dùng ưa thích để Nginx chạy như thực sự khác nhau giữa các hệ điều hành. Đôi khi Nginx được cho là chạy như www-data. Những lần khác, nó thực sự được coi là chạy nobody.

Trên một số hệ điều hành (như Windows), điều đó thậm chí không quan trọng, và userdòng trong nginx.confcó thể được nhận xét hoặc loại trừ hoàn toàn.


Nếu tôi thêm chỉ thị của người dùng vào và khởi động lại dịch vụ Nginx, nó sẽ báo lỗi rằng 'người dùng' là một lệnh không xác định - do đó có ổn không khi bỏ nó?
JoeTidee

Có, tùy thuộc vào HĐH và / hoặc Nginx, một số phiên bản không yêu cầu chỉ thị rõ ràng của người dùng.
rubynorails

Tôi đã phải đặt chỉ thị người dùng ở đầu tệp cấu hình Nginx của mình để được nhận dạng.
JoeTidee
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.