Nếu chúng tôi kiểm tra quyền sở hữu của trang web1, chúng tôi sẽ tìm thấy một cái gì đó như thế này,
ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/
Điều này có nghĩa là thư mục được sở hữu bởi người dùng root, nhóm gốc. Trong khi người dùng root có quyền ghi (cộng với quyền đọc và thực thi) vào thư mục, nhóm gốc chỉ có quyền đọc và thực thi.
Chúng tôi sẽ muốn thay đổi quyền sở hữu nhóm thành một nhóm (mới) khác và thêm user1 vào nhóm cụ thể đó. Chúng tôi cũng sẽ cấp phép viết cho nhóm cụ thể đó.
Tạo một nhóm mới,
sudo addgroup site1
Thêm user1 vào nhóm vừa tạo,
sudo adduser user1 site1
Kiểm tra xem user1 có thực sự nằm trong nhóm đó không,
groups user1
Đầu ra phải là một danh sách giống như,
user1 : <other-groups> site1
Bây giờ chúng tôi có thể thay đổi quyền sở hữu nhóm của thư mục dự định của bạn.
sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1
Cấp quyền viết cho chủ sở hữu nhóm mới này,
sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)
Kiểm tra xem tất cả các thay đổi có thực sự ở đó không,
ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/
Vì vậy, thư mục bây giờ thuộc sở hữu của người dùng root, nhóm site1. Cả người dùng root và nhóm site1 đều có quyền ghi (cộng với quyền đọc và thực thi) vào thư mục. Bất kỳ người dùng nào thuộc nhóm site1 sẽ được hưởng tất cả các đặc quyền được cấp cho nhóm đó.
Bây giờ hãy đăng nhập với tên user1, di chuyển đến thư mục site1 và thử tạo một tệp trong thư mục đó,
echo "My User1 Site" > index.html
bash: index.html: Permission denied
Điều này không thành công vì rất có thể nhóm chính của user1 không phải là site1. Vì vậy, thay đổi nhóm đó.
newgrp - site1
Hãy thử tạo lại tệp (hãy cẩn thận rằng bạn đã được chuyển đến thư mục chính của user1 sau khi thay đổi nhóm), việc này sẽ hoạt động ngay bây giờ. Vì các tệp được tạo sẽ có quyền đọc thế giới, apache (hoặc máy chủ web của bạn) sẽ không gặp phải bất kỳ vấn đề nào khi truy cập chúng.
CHỈNH SỬA
Ngoài ra, như được chỉ ra bởi dan08 trong bình luận, bạn cần thêm dữ liệu www vào nhóm site1.
sudo adduser www-data site1
Trên nhiều bản phân phối (không phải tất cả), dữ liệu www là người dùng mà máy chủ web Apache chạy. Điều này cũng có nghĩa là mọi thứ được thực hiện bởi Apache (đặc biệt là các tập lệnh PHP) sẽ được thực hiện với sự cho phép của dữ liệu www của người dùng (và cả nhóm dữ liệu www) theo mặc định. WordPress sử dụng dữ liệu www của người dùng để ghi tệp.
Nếu bạn muốn xem máy chủ web apache đang chạy như thế nào, hãy ra lệnh,
ps aux | grep apache2 | less