Tôi sẽ hoàn thành câu trả lời của rahmu và MV bằng một giải pháp kỹ thuật. Mọi thứ sau đây chỉ hợp lệ cho các hệ thống giống như UNIX.
Cuộn qua phần chmod / chown cho một ví dụ sử dụng ACL - một công cụ mạnh hơn các chế độ tệp UNIX.
Tìm tên người dùng máy chủ web của bạn
Trước tiên, bạn sẽ cần biết tên người dùng mà máy chủ web của bạn chạy. Nếu bạn đang sử dụng Apache, nó có thể được apache
hoặc httpd
, www-data
vv Trên hầu hết các Debian giống như các hệ thống, Apache là www-data
. Đối với nginx, nói chung, nó cũng là www-data
.
Để kiểm tra, hãy thử:
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
Đảm bảo rằng tên người dùng mà lệnh này trả về là mạch lạc (ví dụ: tôi sử dụng nginx 99% thời gian, nhưng lệnh này trả về tomcat7
, một máy chủ web Java tôi đã cài đặt một lần) .
Cấp quyền cho máy chủ web: sử dụng chmod
vàchown
Thực hiện chmod
666 hoặc 777 (giải pháp khắc phục cho loại vấn đề đó trong tài liệu / hướng dẫn xấu) có thể làm cho mọi thứ hoạt động một cách kỳ diệu, nhưng không an toàn. Cho phép 666 hoặc 777 sẽ cấp quyền truy cập cho "người khác". Vì vậy, không chỉ Apache, mà còn grandmother
và nsa
(miễn là các tài khoản người dùng đó tồn tại trên máy của bạn - nhưng thực sự không, xin vui lòng tránh làm điều này trừ khi chỉ để kiểm tra / khắc phục sự cố).
Tốt hơn là nên cụ thể hơn và cấp quyền cho chỉ bạn và Apache. Thay đổi nhóm các tệp của bạn để cung cấp toàn quyền kiểm soát các tệp của bạn cho máy chủ web. Để làm điều này, thay đổi chủ sở hữu đệ quy:
chown -R www-data:www-data your/folder/
Nhưng rất có thể, bạn có thể muốn giữ quyền truy cập đầy đủ vào các tệp của mình bằng cách chỉ thay đổi nhóm:
chown -R yourusername:www-data your/folder/
Sau đó, làm điều thích hợp chmod
để cung cấp cho nhóm www-data
các quyền giống như bạn. Ví dụ: nếu chế độ hiện tại là 640 (6 cho bạn, 4 cho dữ liệu www, 0 cho người khác, dịch sang -rw-r -----) , đặt thành 660 (6 cho bạn, 6 cho www- dữ liệu, 0 cho người khác, dịch sang -rw-rw ----) . Xem câu trả lời của rahmu để tìm hiểu thêm về các chế độ tệp, đây là một cơ chế cũ, tuy thanh lịch.
Để tránh thao tác với các số phức chmod
, bạn cũng có thể sử dụng cú pháp này:
chmod -R g+rw your/folder/
Nó có nghĩa là "cho phép nhóm ( g
), thêm ( +
) đọc và ghi ( rw
) trên thư mục your/folder/
, đệ quy ( -R
)".
Trong 90% trường hợp, điều này là đủ.
Phương pháp ưa thích của tôi: sử dụng ACL (Danh sách điều khiển truy cập)
Đôi khi giải pháp đầu tiên là không đủ. Tôi sẽ lấy ví dụ về Symfony Framework ghi nhật ký và lưu trữ rất nhiều dữ liệu. Vì vậy, nó cần truy cập ghi vào thư mục thích hợp.
Và phương thức chmod
/ chown
có thể không đủ, khi bạn đang sử dụng song song Bảng điều khiển Symfony trong CLI (dưới tài khoản người dùng của tôi) và Web (người dùng máy chủ web). Điều này gây ra rất nhiều vấn đề vì Symfony liên tục sửa đổi quyền.
Trong trường hợp này, chúng tôi sẽ sử dụng ACL (Danh sách điều khiển truy cập), đây là cách nâng cao hơn để quản lý quyền trên nhiều hệ thống UNIX.
Tại đây các lệnh được cung cấp bởi tài liệu Symfony chính thức ( vui lòng thay đổi app/cache
và app/logs
theo nhu cầu của bạn ):
Trên một hệ thống hỗ trợ chmod +a
(ví dụ: không phải Debian / Ubuntu)
sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
Trên một hệ thống không hỗ trợ chmod +a
(phổ biến nhất)
Bạn sẽ cần setfacl
công cụ; có thể nó được cài đặt trên hệ thống của bạn theo mặc định, vì vậy hãy thử setfacl -v
xem lệnh có khả dụng không.
Nếu lệnh không khả dụng và bạn đang sử dụng Ubuntu 14.04+, bạn sẽ chỉ cần cài đặt công cụ:
sudo apt install acl
Mặt khác, hãy làm theo tài liệu HĐH của bạn, bởi vì bạn có thể cần thay đổi cách phân vùng của bạn được gắn kết ( tài liệu Ubuntu tại đây ).
Và chúng tôi ở đó:
sudo setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
Tôi không bao giờ có bất kỳ vấn đề với phương pháp này, hài lòng hoặc tiền của bạn trở lại.