Hầu hết các câu trả lời ở đây không được viết với sự an toàn trong tâm trí. Thật tốt khi có cảm giác rằng chạy sudo
mỗi lần không phải là rất khôn ngoan. Nếu bạn mắc lỗi đánh máy (ví dụ: một khoảng trắng ở một vị trí sai: sudo rm -rf / var/www/dir
không thực thi! ), Bạn có thể làm hỏng hệ thống của mình.
Lưu ý: Bắt đầu với Apache 2.4.7 / Ubuntu 14.04, /var/www
đã được chuyển sang /var/www/html
Điều chỉnh các lệnh trong câu trả lời này cho phù hợp.
Xem:
Ý tưởng tồi:
chmod 777
(sagarchalise) - điều này cho phép bất kỳ ai có quyền truy cập vào hệ thống của bạn ghi vào các thư mục và tệp và do đó cho phép kẻ xâm nhập thực thi bất kỳ mã nào theo www-data
người dùng
chgrp -R www-data $HOME
(cob) - điều này cho phép www-data
đọc hoặc ghi bất kỳ tệp nào trong thư mục chính. Điều này không giữ nguyên tắc đặc quyền tối thiểu
chown -R $USER:$USER /var/www
(kv1dr) - trừ khi thế giới có quyền đọc /var/www
, máy chủ web chạy bên dưới www-data
sẽ không thể đọc (phục vụ) các tệp. Nếu tệp là một tài liệu HTML đơn giản có thể truy cập công khai, thì đó có thể không phải là vấn đề nếu thế giới có thể đọc tệp. Nhưng nếu tệp là một tệp PHP chứa mật khẩu, thì nó là.
LƯU Ý : trong các giải pháp dưới đây, tôi đã cấp www-data
đặc quyền ghi. Tuy nhiên, /usr/share/doc/base-passwd/users-and-groups.txt.gz
tiểu bang:
dữ liệu www
Một số máy chủ web chạy dưới dạng dữ liệu www. Nội dung web không nên thuộc sở hữu của người dùng này hoặc máy chủ web bị xâm nhập sẽ có thể viết lại một trang web. Dữ liệu được viết bởi các máy chủ web sẽ được sở hữu bởi dữ liệu www.
Nếu có thể, không cấp quyền ghi cho www-data
nhóm. www-data
chỉ cần có khả năng đọc các tệp để máy chủ web có thể phục vụ nó. Trường hợp duy nhất khi www-data
cần quyền ghi là cho các thư mục lưu trữ tải lên và các vị trí khác cần được ghi.
Giải pháp 1
Thêm chính bạn vào www-data
nhóm và đặt bit setgid trên /var/www
thư mục sao cho tất cả các tệp mới được tạo cũng thừa hưởng nhóm này.
sudo gpasswd -a "$USER" www-data
Sửa các tệp được tạo trước đó (giả sử bạn là người dùng duy nhất /var/www
):
sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;
(thậm chí an toàn hơn: sử dụng 640
hoặc 2750
thủ công chmod g+w file-or-dir
mà máy chủ web có thể ghi được)
Giải pháp 2
Tạo một liên kết tượng trưng cho từng dự án vào thư mục nhà của bạn. Giả sử dự án của bạn được đặt tại ~/projects/foo
và bạn muốn đặt nó tại /var/www/foo
, chạy:
sudo ln -sT ~/projects/foo /var/www/foo
Nếu thư mục chính của bạn không có bit thực thi (giảm dần) được đặt cho other
(vì lý do bảo mật), hãy thay đổi nhóm của nó thành www-data
, nhưng chỉ đặt bit thực thi (không đọc / ghi). Làm tương tự cho ~/projects
thư mục vì nó có thể chứa các dự án khác ngoài www. (Bạn không cần sudo
nếu trước đó bạn đã thêm người dùng của mình vào www-data
nhóm.)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
Đặt nhóm thành www-data
bật ~/projects/foo
và cho phép máy chủ web đọc và ghi vào tệp và tệp + thư mục và xuống thư mục:
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
Thậm chí an toàn hơn: sử dụng 640 và 2750 theo mặc định và các tệp và thư mục chmod theo cách thủ công mà người dùng máy chủ web có thể ghi được. Chỉ nên thêm bit setgid nếu bạn muốn mọi tập tin mới tạo ~/projects/foo
được truy cập vào nhóm.
Từ bây giờ, bạn có thể truy cập trang web của mình tại http://localhost/foo
và chỉnh sửa các tệp dự án của mình ~/projects/foo
.
Xem thêm