Bạn không bao giờ phải chạy một trang web từ trong thư mục nhà của bạn . KHÔNG BAO GIỜ. Mặt khác, bạn sẽ phải cung cấp cho máy chủ web khả năng duyệt qua/home/
để xem cấu trúc thư mục, nhưng cũng vào/home/$USER/
(thư mục chính của người dùng của bạn, nơi chúng tôi có thể thử và xem những gì khác tồn tại trong thư mục người dùng của bạn), cũng như bất kỳ thư mục con nào khác trong đó. Máy chủ web được cấu hình kém hoặc cấu hình sai hoặc chưa được vá có thể gây rò rỉ dữ liệu lớn theo cách này hoặc mất thông tin xác thực và điều đó sẽ khiến dữ liệu cá nhân và thông tin đăng nhập của bạn gặp rủi ro. Cách tiếp cận symlink mà bạn đang sử dụng không giúp ích gì cho cùng một lý do như cố gắng cấp quyền cho Apache để đọc/home/andre/www/moodle
- máy chủ web phải có khả năng duyệt qua thư mục chính của bạn để đến vị trí mà liên kết tượng trưng /var/www/html
chỉ đến, điều này vẫn gây ra rủi ro bảo mật.
Thứ nhất, sử dụng sudo cp -r /home/andre/www/moodle/ /var/www/html/
. Điều này sẽ sao chép các tập tin của bạn vào /var/www/html
và để nó ra khỏi thư mục nhà của riêng bạn. Sau đó, chúng tôi sẽ làm lại các quyền để bạn và máy chủ web có thể truy cập mọi thứ trong thư mục đó và cung cấp cho người dùng của bạn đọc / ghi đầy đủ vào tất cả các tệp và thư mục. Sau đó, bạn sẽ chỉ phải làm việc /var/www/html
cho trang web của bạn.
Điều này có hiệu lực, bốn bước, sau khi bạn sao chép dữ liệu của mình trở lại /var/www/html
:
- Cấp cho Apache quyền truy cập vào các thư mục và tệp, để nó có thể phục vụ trang web mà không gặp lỗi 403.
- Cung cấp cho người dùng 'chủ sở hữu' của bạn qua các tệp và thư mục và tự đọc / ghi trên tất cả các tệp và thư mục, cũng như khả năng duyệt qua các thư mục.
- (Tùy chọn nhưng được khuyến nghị) Thiết lập nó sao cho mọi tệp hoặc thư mục được tạo từ đây trong toàn bộ cấu trúc thư mục có nhóm được đặt
www-data
.
- (Tùy chọn) Dọn dẹp bảo mật cuối cùng, nơi chúng tôi thiết lập quyền để bạn và máy chủ web có thể xem dữ liệu trang web, nhưng người dùng khác không thể truy cập các tệp hoặc cấu trúc thư mục cho trang web.
(1) Cho phép Apache truy cập vào các thư mục và tệp.
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
Điều này đệ quy đặt 'nhóm' là www-data
dành cho các thư mục và tệp. Điều này sau đó cho phép máy chủ web lặp lại và có quyền truy cập vào cấu trúc thư mục gốc của tài liệu trang web (chỉ +x
dành cho thư mục). Sau đó, nó cũng đảm bảo máy chủ web có quyền đọc cho tất cả các tệp, do đó dữ liệu trang web có thể được nhận.
Có thể có một số trường hợp bạn phải cấp cho máy chủ web quyền ghi vào tệp hoặc vào thư mục - điều này có thể đạt được bằng cách thực hiện sudo chmod g+w /var/www/html/PATH
( PATH
đường dẫn đến tệp hoặc thư mục trong cấu trúc thư mục nơi bạn cần áp dụng quyền viết cho máy chủ web).
THÔNG BÁO : Có rất nhiều trường hợp điều này có thể làm lộ thông tin 'an toàn' về cấu hình trang web (chẳng hạn như thông tin truy cập cơ sở dữ liệu, v.v.) và bạn nên xóa quyền truy cập 'khác' đối với dữ liệu đó trên các tệp hoặc thư mục riêng lẻ đó với như sau: sudo chmod o-rwx /var/www/html/FILEPATH
(thay thế FILEPATH
bằng đường dẫn liên quan đến /var/www/html
thư mục của tệp).
Cũng lưu ý rằng bạn có thể phải chạy lại các lệnh này trong tương lai nếu 'tệp mới' gặp phải 403 vấn đề, để cấp quyền chính xác cho máy chủ web để có thể truy cập các tệp và thư mục được tạo hoặc sao chép trong và không www-data
đặt nhóm chính xác.
(2) Cung cấp cho chủ sở hữu của bạn quyền đọc / ghi vào các thư mục và tệp và cho phép truy cập thư mục để duyệt qua cấu trúc thư mục.
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
Thay thế USER
trong lệnh đầu tiên với tên người dùng của riêng bạn!
Chúng tôi làm ba điều ở đây. Đầu tiên, chúng tôi đặt người dùng của bạn là "Chủ sở hữu" của tất cả các tệp và thư mục trong /var/www/html
. Tiếp theo, chúng tôi đặt quyền đọc và ghi trên các thư mục và cho phép bạn truy cập các thư mục để truy cập chúng ( +x
mục trên mục thư mục). Sau đó, chúng tôi đặt tất cả các tệp để có quyền đọc / ghi cho chủ sở hữu mà chúng tôi vừa đặt.
(3) (Tùy chọn) Đảm bảo mọi tệp mới sau khi tệp này được tạo với www-data
tư cách là người dùng 'truy cập'.
sudo find /var/www/html -type d -exec chmod g+s {} +
Cái này đặt bit "set gid" cho nhóm trên các thư mục. Các tệp và thư mục được tạo bên trong các thư mục này sẽ luôn có www-data
dưới dạng nhóm, cho phép truy cập máy chủ web.
(4) (Tùy chọn) Dọn dẹp bảo mật cuối cùng, nếu bạn không muốn người dùng khác có thể xem dữ liệu
Chúng tôi cần người dùng của bạn để xem các thư mục và tập tin. Chúng tôi cũng cần máy chủ web để làm như vậy. Chúng tôi có thể không muốn người dùng hệ thống khác (trừ root) xem dữ liệu. Vì vậy, cho phép không cung cấp cho họ quyền truy cập đó và làm cho nó để chỉ người dùng của bạn và máy chủ web có thể xem dữ liệu.
sudo chmod -R o-rwx /var/www/html/
LƯU Ý: Bạn sẽ không phải chạy lại điều này sau, hoặc chỉnh sửa các quyền cho danh mục quyền 'khác' ở đây. Nếu người dùng 'khác' không thể truy cập /var/www/html/
(họ không có +x
bit cần thiết /var/www/html
để duyệt qua cấu trúc thư mục và cấu trúc thư mục, cũng như +r
bit để đọc danh sách tệp), thì quyền trên các mục bên dưới thư mục đó cho người dùng khác hoặc các nhóm không thực sự quan trọng quá nhiều.
Cũng có một giải pháp ít xâm lấn hơn cho vấn đề này, mặc dù nó không được bảo đảm để hoạt động cho tất cả các tệp mới, cũng không được đảm bảo hoạt động trên tất cả các hệ thống tệp , liên quan đến danh sách kiểm soát truy cập tệp. Điều này cho phép bạn để lại quyền sở hữu các tệp www-data
cho mọi thứ, nhưng cung cấp cho bạn quyền sở hữu hiệu quả, cho tất cả các ý định và mục đích, mặc dù bạn không sở hữu các tệp cá nhân.
Giải pháp này ít xâm lấn hơn và cho phép bạn có một thư mục và tất cả các tệp trong đó thuộc sở hữu của www-data:www-data
hoặc root:www-data
nhưng cũng cho phép bạn truy cập. Nó sử dụng Danh sách điều khiển truy cập , cho phép bạn có nhiều người dùng có quyền mà không cần thiết lập các nhóm riêng lẻ. Điều này cũng cho phép người dùng root
hoặc www-data
hệ thống sở hữu các tệp, nhưng cũng cho phép bạn thêm các quyền bổ sung cho từng trường hợp cụ thể và tinh chỉnh các quyền cho một số người dùng nhất định để họ có thể đọc mọi thứ nhưng không thể chỉnh sửa, v.v.
Giả sử chúng tôi vẫn đang làm việc /var/www/html/
và chúng tôi không muốn rình mò những người dùng khác ngoài chúng tôi và hệ thống (và tất nhiên là root) để xem dữ liệu của chúng tôi, chúng tôi sẽ cần thực hiện những điều sau:
- Trả lại quyền sở hữu cho người dùng hệ thống máy chủ web
www-data
.
sudo chown -R www-data: www-data / var / www / html
- Đệ quy cung cấp cho bạn đọc / ghi trên các tệp, trong khi cung cấp cho người dùng khác (không bao gồm
www-data
và root
tất nhiên) không có quyền truy cập vào các tệp.
sudo find / var / www / html -type f -exec setfacl -mu: YOUUSERNAME: rw -m other :: --- {} \;
- Đệ quy cung cấp cho bạn đọc / ghi / duyệt trên các thư mục, xóa quyền truy cập vào các thư mục cho người dùng khác (không bao gồm
www-data
và root
) và đặt đây là ACL 'mặc định' cho các tệp mới trong thư mục.
sudo find / var / www / html -type d -exec setfacl -d -mu: YOUUSERNAME: rwx -mo :: --- {} \;
- Chúng ta cũng cần đặt
setgid
bit cho tất cả các thư mục, để nếu bạn tạo tệp, máy chủ web vẫn có thể truy cập tệp đó www-data
thông qua quyền của nhóm.
sudo find / var / www / html -type d -exec chmod g + x {} \;
Và bây giờ bạn đã có quyền truy cập vào tất cả các thư mục và bạn không cần phải truy cập từ www-data
đó giúp vì máy chủ web vẫn có thể tạo các tệp ở mọi nơi mà nó cần (chẳng hạn như các tiền đề dựa trên PHP có các thư mục bộ đệm riêng của họ và như vậy cần phải được tạo ra và viết để hoạt động đúng).
Nhắc nhở duy nhất: Nếu bạn tự tạo các tệp mới, bạn cần phải chỉnh sửa chúng theo cách phù hợp để trao quyền sở hữu cho máy chủ web. Điều đó đơn giản sudo chown www-data:www-data filename
và danh sách kiểm soát truy cập vẫn sẽ cho phép bạn có quyền sở hữu hiệu quả đối với tệp.
Có nhiều trường hợp tôi đã phải làm điều này như một sysadmin cho một số loại truy cập không chuẩn mà không thay đổi chủ sở hữu của một tệp nhất định. Điều này hoạt động, nhưng có đau đầu riêng của nó, vì không phải mọi hệ thống tệp đều hỗ trợ danh sách truy cập tệp.
+x
đối với các tệp sẽ cung cấp quyền thực thi và chúng tôi không muốn các tệp PHP được thực thi, nhất thiết, thông qua dòng lệnh PHP hoặc dưới dạng thực thi trên chính máy chủ - chúng tôi muốn chúng được xử lý bởi trình phân tích cú pháp PHP trong máy chủ web (và chúng tôi không cần các tệp PHP để+x
trình phân tích cú pháp PHP đọc và xử lý chúng). Các thư mục cần+x
để cho phép truyền tải qua các thư mục - nghĩa là, nếu một thư mục không phải là+x
tôi và tôi không thể root, tôi không thể truy cập vào thư mục, đó là vấn đề bạn gặp phải khi Apache không hoạt động với symlink và nhà của bạn danh mục.