Người dùng nên chạy NGinx và PHP như thế nào?


15

Quyền là một cái gì đó đã gây nhầm lẫn cho tôi một thời gian với Linux. Vì vậy, tại thời điểm cả hai phiên bản NGinx và PHP-FPM của tôi đang chạy với người dùng và nhóm:

dữ liệu www

Đây có phải là tiêu chuẩn? Tôi gặp rắc rối khi tôi tải lên tập tin.

Ví dụ , một tệp sẽ được tải lên cả với dữ liệu www của người dùng và nhóm. Bây giờ, do cách tôi đặt quyền (0440) trong ứng dụng web của mình, tôi không thể đăng nhập qua ssh bằng tài khoản bình thường để tải xuống các tệp đó. Điều này không thể thay đổi.

Tôi đã nghĩ đến việc thay đổi ví dụ nginx và php của mình để giữ nhóm, nhưng thay đổi chúng để chạy dưới tên người dùng của tôi.

Cách chính xác để xử lý quyền ở đây là gì? Cảm ơn bạn.

Câu trả lời:


12

Đây là cách thức hoạt động: Khi bạn đăng nhập qua FTP / SSH và tải lên các tệp, chúng được tạo bằng quyền của bạn. Có lẽ webroot của bạn có thể ghi được trên thế giới (0777), điều đó không an toàn - mọi người dùng trong hệ thống đều có thể viết một cái gì đó ở đó. PHP chạy với các đặc quyền người dùng khác nhau (Chúng được chỉ định trong cấu hình PHP-FPM, không phải cấu hình nginx) và vì thư mục có thể ghi trên thế giới, người dùng PHP (dữ liệu www) cũng có thể ghi ở đó. Nhưng chủ sở hữu của tệp này là dữ liệu www, không phải tài khoản của bạn. Chúng là 2 tài khoản riêng biệt ở cấp độ hệ thống tập tin.

Tôi khuyên bạn nên tạo người dùng chuyên dụng với các đặc quyền ít nhất có thể, sở hữu thư mục webroot và sẽ được sử dụng để tải lên FTP / SSH VÀ sẽ chạy php. Bạn nên thay đổi cấu hình PHP-FPM, trong phần worker có mục nhập người dùng và cấu hình NGINX, để bạn có thể làm cho các tệp trang web của mình không thể đọc được và an toàn hơn.

Đừng chạy PHP với người dùng đặc quyền (sudo capabilities, viết đặc quyền vượt quá docroot), điều đó có thể gây ra sự thỏa hiệp bảo mật máy chủ.


1
Câu trả lời hay, tôi đã tạo một người dùng mới, các thư mục mới, sao chép mọi thứ, áp dụng các quyền chính xác và chro người dùng. Hoạt động độc đáo. Cảm ơn bạn.
Nhà phát triển Pixel

Tôi có thể thêm người dùng FTP của mình vào www-datanhóm thay vì tạo người dùng chuyên dụng không? Nó có giải quyết được vấn đề @ ThePixelDeveloper không? Cảm ơn.
Vladyslav Turak

2

Người www-datadùng & nhóm khá chuẩn. Nó có thể là www hoặc web trên các hệ thống khác nhưng ý tưởng là như nhau: Chạy các dịch vụ web bằng tài khoản chuyên dụng. Do đó, khi máy chủ web của bạn bị xâm nhập, kẻ tấn công sẽ chỉ có thể truy cập các tệp mà tài khoản này đã được cấp.

Nếu người dùng phải quản lý các dịch vụ web, bạn nên thêm người dùng vào nhóm có liên quan (dữ liệu www) hoặc cho phép anh ta su (hoặc sudo) cho người dùng có liên quan (vẫn là dữ liệu www).


10
Lý do cho dữ liệu www là tài khoản không có đặc quyền - nó không thể ghi vào bất kỳ tệp nào trên toàn bộ hệ thống tệp, không thể đọc bất cứ thứ gì ngoại trừ các tệp có thể đọc được trên thế giới. Trước đây, bạn sẽ sử dụng người dùng tích hợp "không ai" để đạt được điều này. Tuy nhiên, bằng cách tạo "dữ liệu www", bạn có thể cho phép người dùng này ghi vào một số tệp mà không phải làm cho các tệp đó có thể ghi được trên thế giới (điều này là xấu). Nguyên tắc cơ bản, "dữ liệu www" là đặc quyền như "không ai" theo mọi cách khác, đúng.
thomasrutter

@thomasrutter, từ những gì tôi hiểu, tôi nên chạy Nginx và PHP-FPM dưới người dùng dữ liệu www trong nhóm dữ liệu www. Nếu tôi muốn người dùng này có thể read& writevào một thư mục nào đó, tôi cần cấp cho anh ta quyền thích hợp. Trong hầu hết các trường hợp, đây sẽ là thư mục gốc /var/www/html755quyền. Tôi có đúng không Cảm ơn!
Vladyslav Turak

1

Tôi cố gắng tránh việc nginx / php thực thi các tập lệnh được sở hữu dưới dạng dữ liệu www vì lý do bảo mật.


9
bạn sẽ giải thích về điều đó?
Karussell
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.