Quyền truy cập tệp mặc định cho dữ liệu www của người dùng php


8

Tôi có một php được cài đặt trên máy ubfox của tôi. Rễ web là/var/www

Tôi đặt quyền cho thư mục này như vậy:

sudo chown -R ftpuser: www-data / var / www

ftpuser là người dùng tôi thiết lập để tôi có thể ftp đến / var / www từ một máy khác trên mạng. dữ liệu www là người dùng sử dụng php. Tôi đã kiểm tra lại bằng cách sử dụng whoamitừ php.

Bất cứ khi nào tôi tải lên một tệp mới vào máy, nhóm không có quyền đối với tệp đó. Vì vậy, khi tôi cố gắng truy cập nó trong trình duyệt của mình thông qua machine-name/new-file.phptôi được cho phép bị từ chối và tôi phải đi và chmodtập tin mới.

Tôi tự hỏi liệu có cách nào để tôi có thể mặc định người dùng / nhóm dữ liệu www có quyền truy cập vào các tệp mới để tôi không phải giữ chmod mỗi tệp mới không?

Câu trả lời:


6

Bạn có thể sử dụng ACL. Để thiết lập ACL cho Ubuntu 10.10, trước tiên hãy gắn hệ thống tệp với tùy chọn acl trong / etc / fstab.

sudo vim /etc/fstab

UUID = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 mặc định, acl 0 1

sudo mount -o remount,acl /

Sau đó tạo một nhóm mà người dùng có thể thuộc về mục đích này.

sudo groupadd developers
sudo usermod -a -G developers $username

Người dùng cần phải đăng xuất và đăng nhập lại để trở thành thành viên của nhóm nhà phát triển.

Tất nhiên, không làm điều này nếu bạn có nội dung trong thư mục / var / www mà bạn muốn, mà chỉ để minh họa cho việc thiết lập nó để bắt đầu:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root.developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public

Sau đó thay thế các tham chiếu đến "/ var / www" bằng "/ var / www / public" trong tệp cấu hình và tải lại.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Nếu chúng tôi muốn hạn chế xóa và đổi tên khỏi tất cả trừ người dùng đã tạo tệp:

sudo chmod +t /var/www/public

Theo cách này, nếu chúng ta muốn tạo các thư mục cho các khung tồn tại bên ngoài gốc tài liệu Apache hoặc có thể tạo các thư mục có thể ghi được trên máy chủ, thì vẫn dễ dàng.

Thư mục nhật ký ghi được Apache:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Thư mục thư viện có thể đọc được của Apache:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/lib
sudo chmod 0750 /var/www/lib

Điều này hoạt động hoàn hảo với tôi, nhưng tôi sẽ quan tâm nếu bạn có thể giải thích những gì chmod g+ssetfaclcác lệnh đã làm (và các tham số của chúng).
Greg

4

Tôi chắc rằng bạn đã sắp xếp việc này rồi, vì vậy đây là cho bất kỳ ai có yêu cầu tương tự

chạy lệnh "thay đổi quyền sở hữu" trên thư mục webroot của bạn:

sudo chown manny -R www

Điều này sẽ khiến bạn trở thành chủ sở hữu thay thế "manny" bằng tên người dùng của bạn, cho phép bạn viết / đọc trong thư mục www


1

Nếu máy chủ web của bạn thậm chí không thể đọc được các tệp, thì rất có thể các quyền của new-file.phpnó là khoảng 600 (đọc và viết cho chủ sở hữu). Tìm kiếm một cài đặt umask trong ứng dụng FTP của bạn và đảm bảo rằng nó giống như 007.

Nếu ứng dụng web của bạn cần chỉnh sửa các tệp (hoặc các thao tác khác chỉ có thể được thực hiện bởi chủ sở hữu tệp), bạn cần một cách tiếp cận khác. Nếu bạn đang sử dụng Apache, bạn nên cân nhắc sử dụng MPM itk . Với mô-đun đó, bạn có thể làm cho Apache chạy / mở các tệp bằng cùng một người dùng là "ftpuser". Nếu bạn cần thêm thông tin về chủ đề này, hãy thêm một bình luận.

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.