Tóm tắt cập nhật
Thư mục / var / www được sở hữu bởi root:root
điều đó có nghĩa là không ai có thể sử dụng nó và nó hoàn toàn vô dụng. Vì tất cả chúng ta đều muốn một máy chủ web thực sự hoạt động (và không ai nên đăng nhập dưới dạng "root"), nên chúng ta cần sửa lỗi này.
Chỉ có hai thực thể cần truy cập.
PHP / Perl / Ruby / Python đều cần truy cập vào các thư mục và tệp vì chúng tạo ra nhiều trong số chúng (tức là
/uploads/
). Các ngôn ngữ script này nên được chạy dưới nginx hoặc apache (hoặc thậm chí một số thứ khác như FastCGI cho PHP).Các nhà phát triển
Làm thế nào để họ có quyền truy cập? Tôi biết rằng ai đó, một nơi nào đó đã làm điều này trước đây. Tuy nhiên, với hàng tỷ trang web ngoài kia, bạn sẽ nghĩ rằng sẽ có nhiều thông tin hơn về chủ đề này.
Tôi biết rằng 777 là quyền đọc / ghi / thực thi đầy đủ cho chủ sở hữu / nhóm / người khác. Vì vậy, điều này dường như không cần thiết chính xác vì nó cung cấp cho người dùng ngẫu nhiên toàn quyền.
Những quyền nào cần được sử dụng /var/www
để:
- Kiểm soát nguồn như git hoặc svn
- Người dùng trong một nhóm như "trang web" ( hoặc thậm chí được thêm vào "dữ liệu www" )
- Máy chủ như apache hoặc lighthttpd
- Và PHP / Perl / Ruby
tất cả có thể đọc, tạo và chạy các tập tin (và thư mục) ở đó không?
Nếu tôi đúng, các tập lệnh Ruby và PHP không được "thực thi" trực tiếp - mà được chuyển cho một trình thông dịch. Vì vậy, không cần thực thi quyền trên các tệp trong /var/www
...? Vì vậy, có vẻ như sự cho phép chính xác sẽ được chmod -R 1660
thực hiện
- tất cả các tệp có thể chia sẻ bởi bốn thực thể này
- tất cả các tệp không thể thực thi do nhầm lẫn
- chặn tất cả những người khác từ thư mục hoàn toàn
- đặt chế độ cấp phép thành "dính" cho tất cả các tệp trong tương lai
Điều này có đúng không?
Cập nhật 1: Tôi mới nhận ra rằng các tệp và thư mục có thể cần các quyền khác nhau - Tôi đã nói về các tệp ở trên vì vậy tôi không chắc các quyền của thư mục sẽ cần là gì.
Cập nhật 2: Cấu trúc thư mục /var/www
thay đổi mạnh mẽ vì một trong bốn thực thể ở trên luôn luôn thêm (và đôi khi loại bỏ) thư mục và thư mục con sâu nhiều cấp. Họ cũng tạo và xóa các tệp mà 3 thực thể khác có thể cần quyền truy cập đọc / ghi. Do đó, các quyền cần phải thực hiện bốn điều trên cho cả tệp và thư mục. Vì không ai trong số họ cần phải có quyền thực thi (xem câu hỏi về ruby / php ở trên) nên tôi cho rằng rw-rw-r--
quyền đó là tất cả những gì cần thiết và hoàn toàn an toàn vì bốn thực thể này được điều hành bởi nhân viên đáng tin cậy (xem # 2) và tất cả người dùng khác trên hệ thống chỉ có quyền truy cập đọc.
Cập nhật 3: Đây là dành cho máy phát triển cá nhân và máy chủ của công ty tư nhân. Không có "khách hàng web" ngẫu nhiên như một máy chủ được chia sẻ.
Cập nhật 4: Bài viết này của lát lưu trữ dường như là tốt nhất để giải thích những gì cần thiết để thiết lập quyền cho thư mục www của bạn. Tuy nhiên, tôi không chắc người dùng hoặc nhóm apache / nginx nào với PHP HOẶC svn / git chạy như thế nào và làm thế nào để thay đổi chúng.
Cập nhật 5: Cuối cùng tôi đã tìm thấy một cách để làm cho tất cả điều này hoạt động (câu trả lời dưới đây). Tuy nhiên, tôi không biết liệu đây có phải là cách chính xác và AN TOÀN để làm việc này không. Vì vậy, tôi đã bắt đầu một tiền thưởng. Người có phương pháp bảo mật và quản lý thư mục www tốt nhất sẽ thắng.