quyền truy cập dữ liệu www?


108

Vì vậy, tôi có một thư mục trong / var / www (được gọi là cake) và tôi cần cho phép www-data để ghi vào nó, nhưng tôi cũng muốn ghi vào nó (mà không cần phải sử dụng sudo). Tôi ngại thay đổi quyền thành 777 trong trường hợp một số người dùng khác trên máy của tôi (hoặc một tin tặc) cố gắng sửa đổi các tệp trong thư mục đó. Làm cách nào để tôi chỉ cho phép truy cập cho chính tôi và dữ liệu www của Apache?

Câu trả lời:


168
sudo chown -R yourname:www-data cake

sau đó

sudo chmod -R g+s cake

Lệnh đầu tiên thay đổi chủ sở hữu và nhóm.

Lệnh thứ hai thêm thuộc tính s sẽ giữ cho các tệp và thư mục mới bên trong bánh có cùng quyền nhóm.


3
Tại sao chmod g + s là đệ quy?
Ben Rogmans

không biết về g + s. rất rất tiện dụng!
FRAGA

1
người dùng có thể làm gì với các tệp được tạo bởi www-data trong chính cake và các tệp được tạo bởi www-data trong thư mục được tạo bởi www-data? chẳng hạn về các thao tác sửa, đổi tên, xóa? như tôi hiểu, không thể đổi tên và xóa trong thư mục được tạo bởi www-data và người dùng hoàn toàn không thể chỉnh sửa các tệp được tạo bởi www-data.
qdinar

49

Như đã nêu trong một bài báo của Slicehost :

Thiết lập người dùng

Vì vậy, hãy bắt đầu bằng cách thêm người dùng chính vào nhóm người dùng Apache:

sudo usermod -a -G www-data demo

Điều đó sẽ thêm 'bản trình diễn' của người dùng vào nhóm 'dữ liệu www'. Hãy đảm bảo rằng bạn sử dụng cả hai tùy chọn -a và -G với lệnh usermod được hiển thị ở trên.

Bạn sẽ cần đăng xuất và đăng nhập lại để cho phép thay đổi nhóm.

Kiểm tra các nhóm ngay bây giờ:

groups
...
# demo www-data

Vì vậy, bây giờ tôi là thành viên của hai nhóm: Nhóm của riêng tôi (demo) và nhóm Apache (www-data).

Thiết lập thư mục

Bây giờ chúng ta cần đảm bảo rằng thư mục public_html thuộc sở hữu của người dùng chính (demo) và là một phần của nhóm Apache (www-data).

Hãy thiết lập điều đó:

sudo chgrp -R www-data /home/demo/public_html

Khi chúng ta đang nói về quyền, tôi sẽ thêm một lưu ý nhanh về lệnh sudo: Bạn nên sử dụng đường dẫn tuyệt đối (/ home / demo / public_html) như được hiển thị ở trên thay vì đường dẫn tương đối (~ / public_html). Nó đảm bảo sudo đang được sử dụng ở đúng vị trí.

Nếu bạn có một thư mục public_html với các liên kết tượng trưng thì hãy cẩn thận với lệnh đó vì nó sẽ tuân theo các liên kết tượng trưng. Trong những trường hợp thư mục public_html đang hoạt động, hãy thay đổi từng thư mục theo cách thủ công.

Setgid

Tốt cho đến nay, nhưng hãy nhớ lệnh chúng tôi vừa đưa ra chỉ ảnh hưởng đến các thư mục hiện có. Có gì mới không?

Chúng tôi có thể đặt quyền sở hữu để mọi thứ mới cũng nằm trong nhóm 'www-data'.

Lệnh đầu tiên sẽ thay đổi quyền cho thư mục public_html để bao gồm bit "setgid":

sudo chmod 2750 /home/demo/public_html

Điều đó sẽ đảm bảo rằng mọi tệp mới đều được cấp nhóm 'www-data'. Nếu bạn có các thư mục con, bạn sẽ muốn chạy lệnh đó cho từng thư mục con (loại quyền này không hoạt động với '-R'). May mắn thay, các thư mục con mới sẽ được tạo tự động với bit 'setgid'.

Nếu chúng ta cần cho phép quyền ghi vào Apache, vào thư mục tải lên chẳng hạn, thì hãy đặt quyền cho thư mục đó như sau:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

Các quyền chỉ cần được đặt một lần vì các tệp mới sẽ tự động được chỉ định quyền sở hữu chính xác.


Giải pháp này phù hợp với tôi. Trước đó, tôi luôn chạy máy chủ từ thiết bị đầu cuối bằng người dùng root. Với giải pháp này, tôi có thể tải tệp lên thư mục có quyền 770. Điều này thật tuyệt vời, vì trước đó tôi chỉ có thể tải tệp lên bằng quyền 777.
Ifan Iqbal
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.