it-swarm-vi.tech

Cách tốt nhất để xử lý các quyền đối với dữ liệu www của người dùng Apache 2 trong / var / www là gì?

Có ai có giải pháp Nice để xử lý tệp trong /var/www? Chúng tôi đang chạy Máy chủ ảo dựa trên tên và người dùng Apache 2 là www-data.

Chúng tôi đã có hai người dùng thường xuyên và root. Vì vậy, khi làm rối với các tập tin trong /var/www, thay vì phải ...

chown -R www-data:www-data

... Tất cả thời gian, cách xử lý này là gì?

Câu hỏi bổ sung: Làm thế nào để bạn cứng sau đó đi vào quyền?

Điều này luôn luôn là một vấn đề trong môi trường phát triển hợp tác.

218
Gareth

Cố gắng mở rộng trên @ Zoredache's câu trả lời , khi tôi tự mình thực hiện điều này:

  • Tạo một nhóm mới (www-pub) và thêm người dùng vào nhóm đó

    groupadd www-pub

    usermod -a -G www-pub usera ## phải sử dụng -a để chắp thêm vào các nhóm hiện có

    usermod -a -G www-pub userb

    groups usera ## nhóm hiển thị cho người dùng

  • Thay đổi quyền sở hữu mọi thứ trong/var/www thành root: www-pub

    chown -R root:www-pub /var/www ## -R cho đệ quy

  • Thay đổi quyền của tất cả các thư mục thành 2775

    chmod 2775 /var/www ## 2 = đặt id nhóm, 7 = rwx cho chủ sở hữu (root), 7 = rwx cho nhóm (www-pub), 5 = rx cho thế giới (bao gồm cả dữ liệu www của Apache người dùng)

    Đặt ID nhóm ( SETGID ) bit (2) khiến nhóm (www-pub) bị sao chép vào tất cả các tệp/thư mục mới được tạo trong thư mục đó. Các tùy chọn khác là SETUID (4) để sao chép id người dùng và STICKY (1) mà tôi nghĩ chỉ cho phép chủ sở hữu xóa các tệp.

    Có một -R tùy chọn đệ quy, nhưng điều đó sẽ không phân biệt giữa các tệp và thư mục, vì vậy bạn phải sử dụng find , như vậy:

    find /var/www -type d -exec chmod 2775 {} +

  • Thay đổi tất cả các tệp thành 0664

    find /var/www -type f -exec chmod 0664 {} +

  • Thay đổi ô cho người dùng của bạn thành 0002

    Umask kiểm soát các quyền tạo tệp mặc định, 0002 có nghĩa là các tệp sẽ có 664 và thư mục 775. Đặt cài đặt này (bằng cách chỉnh sửa dòng umask ở cuối /etc/profile trong trường hợp của tôi) có nghĩa là các tệp được tạo bởi một người dùng sẽ có thể ghi được bởi những người dùng khác trong nhóm www mà không cần phải chmod chúng.

Kiểm tra tất cả điều này bằng cách tạo một tệp và thư mục và xác minh chủ sở hữu, nhóm và quyền với ls -l.

Lưu ý: Bạn sẽ cần đăng xuất/đăng nhập để thay đổi nhóm của mình có hiệu lực!

209
Tom

Tôi không hoàn toàn chắc chắn về cách bạn muốn định cấu hình các quyền, nhưng điều này có thể cung cấp cho bạn một điểm khởi đầu. Có lẽ có những cách tốt hơn. Tôi giả sử bạn muốn cả hai người dùng có thể thay đổi bất cứ điều gì trong/var/www /

  • Tạo một nhóm mới (www-pub) và thêm người dùng vào nhóm đó.
  • Thay đổi quyền sở hữu của mọi thứ trong/var/www thành root: www-pub.
  • Thay đổi quyền của tất cả các thư mục thành 2775
  • Thay đổi tất cả các tập tin thành 0664.
  • Thay đổi ô cho người dùng của bạn thành 0002

Điều này có nghĩa là bất kỳ tệp mới nào được tạo bởi một trong hai người dùng của bạn phải là tên người dùng: www-pub 0664 và bất kỳ thư mục nào được tạo sẽ là tên người dùng: www-pub 2775. Apache sẽ có quyền truy cập đọc vào mọi thứ thông qua thành phần 'người dùng khác'. Bit SETGID trên các thư mục sẽ buộc tất cả các tệp được tạo phải thuộc sở hữu của nhóm sở hữu thư mục. Điều chỉnh ô là cần thiết để đảm bảo rằng bit ghi được đặt để bất kỳ ai trong nhóm cũng có thể chỉnh sửa các tệp.

Đối với cách tôi khó khăn về quyền. Nó hoàn toàn phụ thuộc vào trang web/máy chủ. Nếu chỉ có 1-2 biên tập viên và tôi chỉ cần giữ cho họ không phá vỡ mọi thứ quá tệ thì tôi sẽ đi dễ dàng. Nếu doanh nghiệp yêu cầu một cái gì đó phức tạp hơn thì tôi sẽ thiết lập một cái gì đó phức tạp hơn.

62
Zoredache

Tôi nghĩ rằng bạn có thể thấy POSIX ACL (danh sách kiểm soát truy cập) hữu ích. Chúng cho phép một mô hình cấp phép chi tiết hơn so với người dùng: nhóm: mô hình khác. Tôi đã tìm thấy chúng dễ dàng hơn để giữ thẳng trong đầu vì tôi có thể rõ ràng hơn và cũng có thể đặt hành vi "mặc định" cho một nhánh của hệ thống tệp.

Ví dụ: bạn có thể chỉ định rõ ràng từng quyền của người dùng:

setfacl -Rm d:u:userA:rwX,u:userA:rwX /var/www
setfacl -Rm d:u:userB:rwX,u:userB:rwX /var/www

Hoặc bạn có thể làm điều đó dựa trên một số nhóm được chia sẻ:

setfacl -Rm d:g:groupA:rwX,u:groupA:rwX /var/www

Và có lẽ bạn muốn giữ người dùng Apache của mình ở chế độ chỉ đọc

setfacl -Rm d:u:www-data:rX,u:www-data:rX /var/www

Trang nam:

Hướng dẫn

39
Joe Holloway

Câu hỏi này là hỏi lại và vì đã thảo luận trên meta, các thực tiễn tốt nhất hiện tại cung cấp các phương pháp tốt hơn so với có sẵn trong năm 2009, khi điều này được hỏi. Câu trả lời này cố gắng đưa ra một số giải pháp hiện tại để xử lý môi trường phát triển web cộng tác một cách an toàn .


Đối với một máy chủ web an toàn & phát triển hợp tác, không chỉ có các quyền của tệp:

  • Có người dùng riêng cho mọi trang web tức là không phục vụ tất cả các trang web bằng cách sử dụng www-data. Điều này rất quan trọng, vì ngày nay Apache hiếm khi chỉ phục vụ tĩnh tệp nội dung, nhưng đang chạy động các trang web. Câu trả lời này tập trung vào PHP vì đây là ngôn ngữ phổ biến nhất ngôn ngữ trang web của máy chủ, nhưng cũng áp dụng các nguyên tắc tương tự cho các ngôn ngữ khác.

    Nếu bạn gặp vấn đề về bảo mật trên một trang web, nó có thể lây lan sang mọi trang web đang chạy với cùng một người dùng. Kẻ tấn công có thể thấy mọi thứ người dùng nhìn thấy, bao gồm thông tin đăng nhập cơ sở dữ liệu và sửa đổi mọi trang web mà người dùng có quyền ghi.

  • Sử dụng Giao thức truyền tệp SSH (SFTP). Trong khi sử dụng FTP nên bị bỏ qua để bảo mật (vì nó sẽ gửi cả mật khẩu và nội dung trong văn bản thuần túy), SFTP thay thế an toàn cũng có một tính năng là một giải pháp hoàn hảo để phát triển web hợp tác.

    Khi bạn đã cách ly các trang web và một người dùng trên mỗi trang, bạn cần cấp quyền truy cập cho các nhà phát triển web của mình, câu hỏi này là gì. Thay vì cung cấp cho họ mật khẩu cho những người dùng trang này - hoặc truy cập vào các tệp của trang bằng tài khoản người dùng cá nhân của họ như đề xuất ban đầu - bạn có thể sử dụng khóa SSH để đăng nhập.

    Mọi nhà phát triển đều có thể tạo ra cặp khóa và giữ bí mật khóa riêng. Sau đó, khóa chung được thêm vào ~/.ssh/authorized_keys tệp cho mọi tài khoản người dùng trang web mà nhà phát triển đang làm việc. Điều này có nhiều lợi thế để quản lý mật khẩu và đăng nhập:

    • Mọi nhà phát triển có thể có quyền truy cập vào bất kỳ số lượng trang web nào mà không cần phải nhớ hoặc lưu trữ tất cả các mật khẩu liên quan đến việc sắp xếp người dùng trên mỗi trang.

    • Không cần thay đổi và chia sẻ mật khẩu mỗi khi ai đó rời công ty.

    • Bạn có thể sử dụng mật khẩu rất mạnh hoặc vô hiệu hóa hoàn toàn mật khẩu dựa trên đăng nhập.

  • Sử dụng PHP-FPM . Đó là cách tiếp cận hiện tại để chạy PHP với tư cách là người dùng. Tạo mới pool cho mỗi người dùng, tức là một nhóm trên mỗi trang web. Điều này là tốt nhất cho cả bảo mật và hiệu suất, vì bạn cũng có thể chỉ định số lượng tài nguyên mà một trang web có thể tiêu thụ.

    Xem ví dụ NeverEinatingSecurity's Chạy php-fpm với người dùng/uid và nhóm riêng biệt trên linux . Có các hướng dẫn như HowtoForge's Sử dụng PHP-FPM với Apache trên Ubuntu 16.04 không sử dụng PHP-FPM để tăng bảo mật thông qua phân tách người dùng, hướng dẫn sử dụng một ổ cắm FPM duy nhất trên máy chủ.

11
Esa Jokinen