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-data
nhó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ù charlesr
là một phần của www-data
nhó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-data
cá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/www
trở thành một phần của www-data
nhó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-data
có 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/www
nê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
webmasters
nhóm - Tất cả các thư mục trong
/var/www
nên được đặt thành:2775
hoặcu=rwx,g=rwxs,o=rx
(rwxrwx-rx) - Tất cả các tệp trong
/var/www
phải được đặt thành:0664
hoặ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/www
nơi các tệp của bạn được phục vụ theo mặc định:
sudo addgroup webmasters
sudo adduser $USER webmasters
sudo chown -R root:webmasters /var/www
sudo 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àowebmasters
nhóm. - thay đổi chủ sở hữu của
/var/www
đểroot
và nhóm đểwebmasters
nhó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/www
và 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 trongwebmasters
nhóm. Làm tương tự cho tất cả các thư mục khác cần phải ghi.
/var/www
mà không thêm nó vào nhóm đó?