Làm cách nào để tôi cung cấp cho các tệp và thư mục được tạo bởi FTP quyền chính xác để Apache đọc và ghi chúng?


8

Tôi là một người Windows, vì vậy xin miễn cho sự thiếu hiểu biết của tôi với câu hỏi Linux cơ bản này.

Tôi đang chăm sóc một máy chủ Linux (Debian) chỉ cài đặt Apache2 và vsftp trên nó.

Điều đang xảy ra là tôi đang có một cuộc chiến không ngừng với người sở hữu các tệp và thư mục và dường như không thể hiểu đúng.

Đây là sự hiểu biết của tôi cho đến nay:

  • Người dùng dữ liệu www cần quyền sở hữu các thư mục và tệp vì tất cả các tệp trong / var / www / html chạy các tập lệnh yêu cầu chúng ghi vào thư mục của chúng. Và tất nhiên nó cần để có thể phục vụ các trang thông qua http.
  • Người dùng ftp của tôi (hãy gọi nó là ftpuser ) cũng yêu cầu quyền ghi vào thư mục / var / www / html (đệ quy) vì tôi cần có thể tải lên các tệp mới.

Với suy nghĩ này, tôi đã tạo ra một nhóm có tên là ftpandwww và đã chọn tất cả các thư mục và tệp cho nhóm này. Điều này đã làm việc đến một mức độ ...

Tôi đang ở gần đúng nơi, ngoại trừ thực tế là mọi thư mục mới được tạo bằng ứng dụng khách FTP của tôi đều có quyền sai (tôi có thể sửa bằng cách thay đổi chúng trong ứng dụng khách FTP), nhưng sau đó dữ liệu www không thể ghi vào chúng bởi vì chúng thuộc sở hữu của ftpuser và cuối cùng tôi phải SSH và chạy một nhóm chown đến ftpandwww để cả hai đều hạnh phúc.

Làm cách nào để làm cho tất cả các thư mục mới mà tôi tạo trong FTP có quyền chính xác (774) và được nhóm ftpandwww tự động sở hữu để tôi có thể tải lên và phục vụ qua web (có quyền ghi) mà không cần phải truy cập và truy cập tất cả thư mục và tập tin mới mỗi lần?


Câu trả lời:


10

Sử dụng quyền SetGID trên thư mục gốc của web và truyền bá chúng cho trẻ em.

Khi bạn áp dụng SetGID trên một thư mục, tất cả các mục mới trong thư mục đó sẽ được tạo với cùng một nhóm mà cha mẹ chúng có, bất kể thành viên nhóm mặc định của người dùng.

Để áp dụng SetGID cho một đối tượng hệ thống tập tin, hãy sử dụng chmodvới 2 ở phía trước mã cấp phép.
(ví dụ: 740 => 2740).

Tôi sử dụng SetGID trên nhiều chia sẻ Samba của mình để các tệp luôn có nhóm riêng Usersvà bất kỳ thành viên nào trong nhóm cũng có thể đọc tệp (tôi thường sử dụng 2750để chỉ người dùng chủ sở hữu mới có thể ghi vào tệp).

Trong trường hợp của bạn, hãy chạy một cái gì đó như thế này (thay thế XXX bằng các quyền bạn muốn):

sudo chown -R  root:ftpandwww /var/www
sudo chmod -R 2XXX /var/www 

Sau đó, các tập tin và thư mục mới sẽ đi ra với quyền sở hữu như thế nào ftpuser:ftpandwww.

Biên tập:

Tùy thuộc vào usecase của bạn, SetGID có thể đủ để giải quyết vấn đề của bạn, nhưng nếu bạn tiếp tục gặp sự cố khi một hoặc người dùng khác bị từ chối viết, do quyền của nhóm không chính xác (nhưng quyền sở hữu là đúng), thì đặt cược tốt nhất của bạn là đặt một umask tùy chỉnh cho người dùng tạo ra các tập tin .

Nếu bạn gặp khó khăn khi đặt UMASK cho người dùng (vì đó là daemon), hãy kiểm tra chủ đề này trên các tùy chọn để đặt UMASK của người dùng daemon .

Tôi muốn giới thiệu mặt nạ 007nếu bạn muốn các thành viên trong nhóm có thể viết và xóa các tệp và không có đặc quyền cho những người không sở hữu.


Cảm ơn, tôi sẽ thử điều này, khi bạn đề cập rằng tất cả các tệp và thư mục sẽ có quyền sở hữu ftpuser này: ftpandwww sẽ dữ liệu www vẫn phục vụ chúng và có quyền (thông qua tập lệnh) để ghi lại vào các thư mục không? Cảm ơn một lần nữa.
omega1

Người dùng chủ sở hữu thực tế sẽ có thể là người dùng đang chạy quy trình, trừ khi nó sử dụng xác thực cục bộ (nhưng điều đó hoàn toàn phụ thuộc vào ứng dụng). Dù bằng cách nào, câu trả lời cho câu hỏi của bạn phụ thuộc vào XXX bạn chọn sử dụng. vì cả wwwdata và ftpdata đều nằm trong cùng một nhóm, nếu bạn cho 770, thì có, cả hai tài khoản sẽ có thể ghi vào các đối tượng. Tuy nhiên, nếu bạn đã cho nó 740, chỉ người dùng chủ sở hữu mới có thể viết, nhưng bất kỳ thành viên nào của ftpandwww đều có thể đọc được. Vấn đề là bạn đang sử dụng perm nhóm chứ không phải perm người dùng cho các hoạt động này.
Frank Thomas
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.