Cấp quyền ghi cho nhóm dữ liệu www


27

Tôi đang tạo một trang web và một phần của chức năng là viết ra dữ liệu do người dùng tạo bằng php. Tôi đang sử dụng nginx trên Ubuntu 13.04. Hiện tại tôi chỉ đang thử nghiệm và mọi thứ được phục vụ thông qua nginx trên locahost.

Tập lệnh php của tôi không thể ghi tệp văn bản (mặc dù tôi có thể thực hiện việc này một cách thủ công) và tôi nghĩ đó là vấn đề về quyền để ghi vào thư mục /var/www/example.com/public_html của tôi.

Hiện tại tôi (iain) sở hữu thư mục này nhưng có vẻ hợp lý hơn khi chuyển quyền sở hữu thư mục / var / www và mọi thứ bên trong đó cho người dùng dữ liệu www (hoặc nên là nhóm?) Và thêm chính tôi vào nhóm dữ liệu www. Đây có phải là cách đúng đắn để làm điều này?

useradd -G www-data iain
chown -R www-data:www-data /var/www/example.com
chmod 775 /var/www

Vì vậy, điều này có nghĩa là bất cứ ai trong nhóm dữ liệu www bây giờ có thể đọc, viết và thực thi trong / var / www?

Câu trả lời:


52

Đầu tiên, useraddtạo một người dùng mới. Khi bạn (iain) đã tồn tại, bạn muốn gọi usermodthay thế. Vì vậy, đó sẽ là:

sudo usermod -aG www-data iain
addgroup www-data

(lưu ý các -amáy chủ dựa trên Debian (bao gồm Ubuntu) sẽ thêm bạn vào nhóm đó và giữ tư cách thành viên của bạn cho các nhóm khác. Quên nó và bạn sẽ chỉ thuộc về nhóm dữ liệu www - có thể là một trải nghiệm tồi nếu một trong những chúng là bánh xe. Trên các máy chủ loại SUSE, tùy chọn -Athay -aGvì đọc man usermodkỹ để làm cho đúng.)

Thứ hai, bạn không muốn apache có quyền truy cập rw đầy đủ /var/www: đây có thể là một vi phạm an ninh lớn. Theo nguyên tắc chung, chỉ cho phép những gì bạn cần, và không có gì hơn ( nguyên tắc đặc quyền tối thiểu ). Trong trường hợp này, bạn cần apache ( www-data) và bạn ( www-datanhóm) để viết (và đọc) /var/www/example.com/public_html, vì vậy

sudo chown -R www-data:www-data /var/www/example.com/public_html
sudo chmod -R 770 /var/www/example.com/public_html

Chỉnh sửa : để trả lời câu hỏi ban đầu của bạn, vâng, bất kỳ thành viên nào www-datahiện có thể đọc và thực thi /var/www(vì bit cuối cùng của quyền của bạn là 5 = read + exec). Nhưng vì bạn chưa sử dụng công -Rtắc, nên chỉ áp dụng cho /var/wwwvà không áp dụng cho các tệp và thư mục con mà nó chứa. Bây giờ, liệu họ có thể viết hay không là một vấn đề khác, và tùy thuộc vào nhóm /var/wwwmà bạn chưa đặt. Tôi đoán nó là điển hình root:root, vì vậy không, họ (có lẽ) không thể viết.

Chỉnh sửa vào 2014-06-22 : thêm một lưu ý rằng -aGtùy chọn này hợp lệ trên các máy chủ dựa trên Debian. Nó rõ ràng thay đổi theo phân phối, vì vậy hãy đọc mankỹ trước khi thực hiện.


Ok, tôi hiểu rồi. Nhóm / var / www thực sự là root: root. Cảm ơn các liên kết. Có vẻ hợp lý hơn khi có thói quen cấp những gì cần thiết hơn là để thuận tiện. Cảm ơn đã hướng dẫn.
duff

2
Ok, vì vậy tôi vừa thử viết thư cho /var/www/example.com/public_html cp -r php /var/www/example.com/public_htmlvà tôi bị từ chối. Tôi thuộc nhóm dữ liệu www có quyền rwxrwx --- cho thư mục này. Tại sao lại thế này?
duff

Có thể có nhiều thứ ở đây. Ví dụ: bạn không thể có quyền đọc một số thứ trong php hoặc bạn đã không đăng xuất và đăng nhập sau usermod (Tôi đã cập nhật câu trả lời của mình vào thời điểm đó với addgroup để tránh điều này và đặt ra nơi sử dụng sudo).
Calimo

Từ tất cả các câu trả lời liên quan www-data:www-data, câu hỏi này đã giải quyết vấn đề với các quyền bị thiếu. Cảm ơn bạn.
Eugene
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.