Tôi có một máy chủ khá chuẩn được thiết lập để chạy Apache và PHP. Một ứng dụng tôi đang chạy tạo các tệp và chúng được sở hữu bởi người dùng Apache www-data. Các tệp mà tôi tải lên qua SFTP được sở hữu bởi chính người dùng của tôi charlesr. Tất cả các tập tin là một phần của www-datanhóm. Vấn đề của tôi là tôi không thể sửa đổi hoặc ghi đè bất kỳ tệp nào thông qua SFTP được sở hữu bởi www-data, mặc dù charlesrlà một phần của www-datanhóm. Tôi có thể sửa đổi các tệp không có vấn đề thông qua phiên SSH.
Vì vậy, tôi không biết phải làm gì. Làm cách nào để cung cấp quyền phiên SFTP của tôi để sửa đổi www-datacác tệp sở hữu?
Đối với một chút nền tảng, đây là những ghi chú tôi đã viết cho chính mình khi thiết lập máy chủ:
Now set up permissions on `/var/www` where your files are served from by
default:
$ sudo adduser $USER www-data
$ sudo chgrp -R www-data /var/www
$ sudo chmod -R g+rw /var/www
$ sudo chmod -R g+s /var/www
Now log out and log in again to make the changes take hold.
The previous set of commands does the following:
1. adds the current user ($USER) to the `www-data` group;
2. changes `/var/www` to belong to the `www-data` group;
3. adds read/write permissions to the group that `/var/www` belongs to;
4. sets the SGID bit on `/var/www`; this final point bears some explaining.
Và sau đó tôi tiếp tục tự giải thích về việc thiết lập bit SGID có nghĩa là gì (tức là tất cả các tệp được tạo trong tự động /var/wwwtrở thành một phần của www-datanhóm).
CẬP NHẬT
Có vẻ như sự cố là do chính ứng dụng hoặc cụ thể hơn là khung ứng dụng ( Kohana ) thiết lập một số tệp nhất định mà nó ghi thành 0644 (rw-r - r--); tức là không thể ghi nhóm. Điều này, cùng với thực tế là các tệp cũng thuộc sở hữu www-datacó nghĩa là tôi không thể chỉnh sửa các tệp qua SFTP khi đăng nhập dưới dạng charlesr. Tôi không chắc tại sao tôi có thể chỉnh sửa các tệp qua SSH. Tôi đoán là tôi đã sử dụng sudo.
Đây là chiến lược cấp phép mà tôi hiện đang sử dụng nhờ sự giúp đỡ không mệt mỏi của Marty Fried , người đã chỉ ra những sai sót trong chiến lược trước đây của tôi và cũng giúp tôi ướp trong thế giới quyền Linux cho đến khi cuối cùng tôi cũng mò mẫm nó. Cảm ơn Marty!
Tổng quan
- Các tập tin và thư mục
/var/wwwnên được sở hữu bởiroot:webmasters - Tất cả các nhà phát triển nên là thành viên của
webmastersnhóm - Tất cả các thư mục trong
/var/wwwnên được đặt thành:2775hoặcu=rwx,g=rwxs,o=rx(rwxrwx-rx) - Tất cả các tệp trong
/var/wwwphải được đặt thành:0664hoặcug=rw,o=r(rw-rw-r--)
Những thứ sau đây phải được sở hữu bởi www-data:webmasters(tức là đây là những thư mục mà Apache cần để có thể ghi vào):
- ứng dụng / bộ đệm
- ứng dụng / nhật ký
- tải lên
- client_helpers / tải lên
LÀM THẾ NÀO ĐỂ
Để thiết lập quyền trên /var/wwwnơi các tệp của bạn được phục vụ theo mặc định:
sudo addgroup webmasterssudo adduser $USER webmasterssudo chown -R root:webmasters /var/wwwsudo find /var/www -type f -exec chmod 664 {} \;sudo find /var/www -type d -exec chmod 775 {} \;sudo find /var/www -type d -exec chmod g+s {} \;sudo chown -R www-data:webmasters application/cache/[vv ...]
Bây giờ hãy đăng xuất và đăng nhập lại để thay đổi được thực hiện.
Nhóm lệnh trước thực hiện như sau:
- Tạo một nhóm mới được gọi là
webmasters; tất cả người dùng cần quyền truy cập ghi vào tệp ứng dụng sẽ được thêm vào nhóm này. - thêm người dùng hiện tại (
$USER) vàowebmastersnhóm. - thay đổi chủ sở hữu của
/var/wwwđểrootvà nhóm đểwebmastersnhóm. - thêm 664 quyền (-rw-rw-r--) cho tất cả các tệp trong
/var/www. - thêm 775 quyền (drwxrwxr-x) cho tất cả các thư mục trong
/var/www. - đặt bit SGID trên
/var/wwwvà tất cả các thư mục trong đó; điểm cuối cùng này mang một số giải thích. Cũng lưu ý rằng bạn cũng có thể đặt số 2 ở phía trước bát phân chmod của mình (ví dụ 2644) để làm điều tương tự. - đặt chủ sở hữu thành
www-data(người dùng của Apache) và nhóm thư mục được cung cấp thànhwebmaster. Điều này đảm bảo thư mục có thể ghi được bởi Apache và bất kỳ ai trongwebmastersnhóm. Làm tương tự cho tất cả các thư mục khác cần phải ghi.
/var/wwwmà không thêm nó vào nhóm đó?