Apache, suexec, PHP, suPHP


12

Mặc dù tôi khá thoải mái khi là người dùng Linux , nhưng Quản trị viên Linux của tôi hơi yếu. Vì vậy, tôi ở đây để tìm hướng dẫn với máy chủ CentOS mà tôi sắp xây dựng.

Tôi cần thiết lập một máy chủ web Apache2 cho một số khách hàng của chúng tôi. Tôi muốn nội dung web của mỗi khách hàng nằm trong thư mục chính của họ ( USERDIRtrong apache.conf, phải không?) Cho các trang web HTML tĩnh. Tôi muốn Apache chạy như máy khách ( suexec?). Một số nội dung của chúng sẽ là các ứng dụng PHP và tôi cũng muốn biết rằng tôi cũng muốn xem xét suphp.

Vì vậy, về cơ bản tôi muốn trông giống như một phiên bản nhỏ của một công ty lưu trữ web được chia sẻ. Xem xét mức độ phổ biến của những điều đó tôi nghĩ rằng tôi dễ dàng tìm thấy một hướng dẫn Cách làm hiện tại tốt đẹp để thiết lập tất cả những điều này nhưng cho đến nay tôi đã có rất ít may mắn. Tôi nghi ngờ từ tìm kiếm của tôi là tắt.

Vì vậy, các câu hỏi (vui lòng trả lời bất kỳ hoặc tất cả):

  1. Bất cứ ai cũng có một số liên kết chắc chắn với các hướng dẫn hiện tại / hiện đại sẽ giúp tôi thiết lập tất cả điều này? Không, trang web tài liệu apache không phải là hướng dẫn ;-)
  2. Vì tôi có sự kết hợp giữa các trang web tĩnh và ứng dụng PHP nên tôi muốn / cần cài đặt cả suexec và suphp? Nếu vậy, điều đó có giới thiệu bất kỳ thách thức nào tôi nên biết không?
  3. Tôi có nên xem xét các lựa chọn khác thay vì suexec và suphp không?

Tôi dự định cung cấp cho người dùng cuối quyền truy cập SSH, SFTP hoặc SCP vào nội dung của họ (nếu điều đó ảnh hưởng đến bất cứ điều gì).

Cảm ơn trước sự giúp đỡ của bạn.

[Chỉnh sửa] Tôi nên đã đề cập điều này sớm hơn: Một mục tiêu chính của nhiệm vụ của tôi là mô phỏng một nhà cung cấp dịch vụ lưu trữ được chia sẻ liên quan đến quyền hạn và quyền sở hữu tệp. Tôi thực sự muốn tránh việc dạy người dùng về việc cần thay đổi những thứ như vậy chỉ để xem các bổ sung / thay đổi của họ.

Câu trả lời:


14

Sử dụng suexec và suphp thực thi một loại phân tách đặc quyền khác với mặc định.

Mặc định là tách quyền của người dùng khỏi máy chủ web. Nghĩa là, người dùng sở hữu các tệp và anh ta phải cấp quyền cho máy chủ web để xem và thay đổi chúng.

Mô hình suexec / suphp là máy chủ web (khi chạy tập lệnh) chạy trong tài khoản của người dùng, vì vậy trang web có quyền làm bất cứ điều gì mà người dùng có quyền làm. Ở một mức độ nhất định, điều này loại bỏ sự tách biệt giữa người dùng và máy chủ web, nhưng đổi lại, nó thực thi một sự tách biệt KHÁC BIỆT: đó là, giữa trang web của một người dùng và trang web của một người dùng khác trên cùng một hộp.

Theo mặc định, PHP luôn chạy trong tài khoản người dùng của Apache, do đó, các tập lệnh PHP của một trang web có thể truy cập bất kỳ tệp nào mà các tập lệnh PHP của trang web khác có thể. Do đó, nếu một tài khoản trên máy chủ bị hack, việc lây nhiễm có thể lây lan sang các tài khoản khác. SuPHP ngăn chặn điều này.

Cả suexec và suphp đều không ảnh hưởng đến cách apache phục vụ nội dung tĩnh . Tất cả các quy tắc cũ vẫn được áp dụng. Thay vào đó, suexec và suphp thay đổi tài khoản theo đó CGI và PHP (tương ứng) sẽ chạy. Suexec làm cho CGI thực thi được chạy trong tài khoản của chủ sở hữu, trong khi SuPHP làm cho các tập lệnh PHP chạy dưới tài khoản của chủ sở hữu.

Suexec và SuPHP không nhất thiết phải tốt hơn . Họ chỉ khác nhau . Họ sẽ không ngăn chặn một trang web bị tấn công (và có thể làm cho trang web dễ bị hack hơn), nhưng họ sẽ ngăn chặn sự thỏa hiệp trên một trang web lây lan sang tất cả các trang web khác. Đối với người quản trị trang, sự cô lập này được cho là quan trọng hơn, đó là lý do tại sao một số hệ thống lưu trữ được chia sẻ làm cho suexec và suphp mặc định.

Một "gotcha" cực kỳ phổ biến là SuPHP kiểm tra quyền sở hữu và quyền của tập lệnh trước khi chạy và sẽ trả về lỗi 500 nếu quyền không phù hợp.

Đặc biệt:

  • Chủ sở hữu và nhóm của tệp phải khớp với chủ sở hữu trang web (như cài đặt trong cấu hình apache)
  • Các tập tin không được ghi trên thế giới
  • Thư mục mẹ không được ghi trên thế giới

Vì vậy, biết rằng tôi muốn mô phỏng một mô hình lưu trữ được chia sẻ (như bạn đã chỉ ra, giữ cho người dùng cách xa nhau) là mô hình suexec / suphp theo cách tôi muốn đi hay bạn cảm thấy có những lựa chọn tốt hơn? Tôi cũng đã chỉnh sửa bài đăng để chỉ ra rằng một mục tiêu chính là tránh dạy người dùng về việc phải sửa đổi các hoán vị tệp hoặc chủ sở hữu chỉ để xem các thay đổi hoặc bổ sung của họ.
Chris_K

2
suexec / suphp là một giải pháp tốt cho những gì bạn đang theo đuổi.
tylerl

Tôi thích suphp hơn suexec. Tôi nghĩ an toàn hơn.
Vladislav Rastrusny

@FractalizeR: Thông thường bạn sử dụng cả hai cùng một lúc. SuPHP dành cho PHP, suexec dành cho CGI. Bạn có thể chạy PHP qua suexec bằng cách chạy PHP dưới dạng CGI, nhưng điều đó hơi không cần thiết vì các tùy chọn tốt hơn (an toàn hơn, hiệu quả hơn) cho PHP tồn tại.
tylerl

@tylerl: Cảm ơn bạn rất nhiều vì câu trả lời của bạn. Các giải pháp an toàn / hiệu quả hơn cho PHP mà bạn đang đề cập là gì?
benjamin
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.