Câu trả lời:
Trước hết, hãy lưu ý rằng mọi khả năng tạo tập lệnh trong Apache (php, cgi, ruby, ...) đều tương đương với tài khoản shell với các đặc quyền của người dùng đang chạy tập lệnh.
Nếu máy chủ được chia sẻ với nhiều người dùng, bạn có thể muốn nghĩ về việc sử dụng suexec (- hoặc ITK MPM - Được đề xuất bởi David Schmitt ) để không phải mọi tập lệnh đều chạy như một người dùng apache.
Ảo hóa hoặc chroot apache, để bất kỳ sự thỏa hiệp nào ít nhất cũng được chứa trong một lớp bảo mật bổ sung. Xin lưu ý rằng khi bạn chroot apache, việc bảo trì có thể trở nên khó khăn hơn, khi bạn kết thúc việc chuyển thư viện vào nhà tù, v.v. Nếu bạn đang sử dụng FreeBSD, bạn có thể sử dụng một nhà tù thay thế, việc bảo trì dễ dàng hơn nhiều, vì bạn chỉ cần cài đặt apache từ các cổng và chạy portaudit từ bên trong nó, mà không phải lo lắng về bất kỳ phụ thuộc thư viện nào và di chuyển các tệp theo cách thủ công, điều này luôn trở thành một mớ hỗn độn xấu xí. Với các bản BSD, bạn chỉ cần sử dụng hệ thống quản lý gói (cổng). (Trên GNU / Linux, bạn cũng có thể sử dụng VServer để ảo hóa. - Được đề xuất bởi David Schmitt )
(rõ ràng) Theo kịp các bản cập nhật và bản vá, không chỉ cho Apache, mà cả PHP, ruby, perl, v.v ... không chỉ tin tưởng hệ điều hành của bạn để cung cấp cho bạn tất cả các bản cập nhật. Một số distro cực kỳ chậm với các bản vá của chúng. Hạn chế thời gian tiếp xúc với các lỗ hổng 0 ngày càng nhiều càng tốt. Dán nguồn cấp dữ liệu milw0rm vào trình đọc RSS của bạn, đăng ký danh sách gửi thư của insecure.org , v.v ... Không chỉ giúp bạn tìm hiểu về các lỗ hổng trước khi HĐH của bạn phát hành bản vá, bạn cũng sẽ tìm hiểu về các lỗ hổng trong php nhất định Các ứng dụng cms chẳng hạn, thậm chí có thể không được quản lý hoặc vá bởi hệ điều hành của bạn.
Sử dụng một cái gì đó như tripwire / aide, Audit hoặc mtree (trên BSD) để theo dõi các thay đổi trên hệ thống tệp của bạn. Điều này thực sự quan trọng. Có bất kỳ thay đổi nào được gửi đến bạn thường xuyên, xem xét chúng một cách thủ công, mỗi ngày. Nếu bất kỳ thay đổi tập tin không nên thay đổi, điều tra lý do tại sao. Nếu một số javascript độc hại bằng cách nào đó được chèn vào các trang của bạn thông qua bất kỳ phương thức nào, bạn S Catch bắt nó theo cách này. Điều này không chỉ cứu máy chủ của bạn, mà cả người dùng của bạn, vì các trang web của riêng bạn có thể bị lạm dụng để lây nhiễm khách truy cập của bạn. (Đây là một chiến thuật rất phổ biến, những kẻ tấn công thường không quan tâm đến máy chủ của bạn, chúng chỉ muốn lây nhiễm càng nhiều khách truy cập của bạn càng tốt cho đến khi bị phát hiện. Những kẻ tấn công này thậm chí không thèm giấu dấu vết của chúng thường. Nắm bắt một thỏa hiệp như thế này càng nhanh càng tốt là rất quan trọng.)
Sử dụng những thứ như suhosin để bảo vệ php giúp. Nhưng cũng học cách hiểu nó, điều chỉnh cấu hình của nó theo các tham số dự kiến của ứng dụng của bạn.
Sử dụng một bản vá kernel như PaX có thể giúp bảo vệ bạn khỏi nhiều lỗ hổng tràn bộ đệm. Ngay cả khi phần mềm của bạn dễ bị tổn thương. (Điều này không làm cho bạn trở nên bất khả xâm phạm, nó chỉ là một lớp nhỏ, nhỏ khác.)
Đừng quá tự tin khi sử dụng một số công cụ bảo mật. Hiểu các công cụ bạn sử dụng và sử dụng thông thường. Đọc, học, theo kịp với càng nhiều càng tốt.
Cân nhắc sử dụng kiểm soát truy cập bắt buộc (ví dụ: SELinux ). Nó cho phép bạn chỉ định, cho mỗi ứng dụng, những gì nó được phép làm, rất chi tiết. Những tập tin nào được phép truy cập. Những gì gọi là kernel được phép thực hiện, v.v ... Đây là một quá trình rất liên quan và đòi hỏi nhiều sự hiểu biết. Một số distro cung cấp các chính sách SELinux được tạo sẵn cho các gói của họ (ví dụ: Gentoo ). Tuy nhiên, gợi ý này là một mâu thuẫn với ý kiến dưới đây, nhưng vẫn hợp lệ.
Giữ mọi thứ đơn giản. Một chiến lược bảo mật phức tạp có thể làm việc chống lại bạn.
Trong Apache, thiết lập một quy tắc mặc định rất hạn chế (Tùy chọn Không có, Từ chối tất cả, v.v ...) và ghi đè khi cần cho các Virtualhost cụ thể.
Từ chối quyền truy cập vào tất cả các dotfiles (cũng bao gồm ngay các tệp .htaccess)
Luôn sử dụng https bất cứ nơi nào có bất kỳ loại xác thực mật khẩu.
Tường lửa phải là một chính sách từ chối theo mặc định. Xây dựng một số quy tắc cụ thể trong tường lửa của bạn để ghi lưu lượng truy cập cụ thể.
Thiết lập các tập lệnh phân tích cú pháp để quét các bản ghi của bạn để tìm sự bất thường. (bộ IDS mở đầu có thể làm điều này, nhưng thành thật mà nói, tôi khuyên bạn nên xây dựng các tập lệnh của riêng mình theo thời gian, vì nó sẽ giúp bạn hiểu các công cụ và quy tắc của riêng bạn tốt hơn.)
Có máy chủ gửi thư cho bạn báo cáo hàng ngày về người dùng đã đăng nhập lần cuối, kết nối hoạt động, băng thông được sử dụng, v.v ...
Có một cron quét các nhị phân suid, các tệp có thể ghi trên thế giới và những thứ tương tự, và gửi chúng cho bạn qua đường bưu điện.
Đối với bất kỳ nội dung nào bạn thiết lập được gửi qua thư cho bạn, bạn nên tạo một danh sách các trường hợp ngoại lệ theo thời gian. (các thư mục để bỏ qua các thay đổi hệ thống tệp trên, các tệp 777 để cho phép, các tệp nhị phân cho phép). Điều quan trọng là bạn chỉ được thông báo về những điều không nên xảy ra. Nếu bạn nhận được một thư mỗi ngày với những thứ tầm thường, bạn sẽ bắt đầu phớt lờ chúng, và chúng sẽ trở nên vô nghĩa.
Có một chiến lược sao lưu dự phòng rắn lớp tốt. Và đừng chỉ cho rằng việc tạo một hình ảnh hoặc bản sao của mọi thứ đều hoạt động. Ví dụ: nếu MySQL ở giữa ghi vào bảng trong quá trình sao lưu của bạn, các tệp nhị phân MySQL của bạn có thể bị hỏng khi bạn khôi phục bản sao lưu của mình. Vì vậy, bạn sẽ cần một cron mà mysqldump là cơ sở dữ liệu của bạn trên đầu các hình ảnh thông thường hoặc tarball hàng đêm hoặc kiểm soát phiên bản hoặc bất cứ điều gì khác mà bạn đã thiết lập. Hãy suy nghĩ về chiến lược sao lưu của bạn. Ý tôi là, THỰC SỰ nghĩ về nó.
Đừng dựa vào danh sách như thế này để bảo mật :) Nghiêm túc! Bạn sẽ tìm thấy rất nhiều trong số này trên internet, đọc tất cả, nghiên cứu mọi đề xuất, và sử dụng ý thức và kinh nghiệm chung để tạo nên tâm trí của riêng bạn. Cuối cùng, kinh nghiệm và ý thức chung là những thứ duy nhất sẽ cứu bạn. Không phải danh sách, cũng không phải công cụ. Đừng đọc, nhưng đừng chỉ sao chép mà không hiểu.
Tôi đề nghị Danh sách kiểm tra bảo mật Linux , từ SAN. Tôi sử dụng nó, cộng với một thủ tục trong nhà khác. Danh sách kiểm tra có thể hơi lỗi thời, nhưng nhiều điểm chính là đúng.
Sẽ luôn có vô số quyền để kiểm tra, vô số danh sách kiểm tra, không bao giờ kết thúc việc phát hiện ra các lỗi / lỗ hổng mới. Bảo mật Tôi không nghĩ là thứ gì đó bạn bật hoặc tắt, nó là thứ bạn làm liên tục.
Với "sự thất bại không thể tránh khỏi" của phần mềm, SELinux giúp đưa ra một số lo lắng (một lần nữa không có viên đạn bạc nào để bảo mật). giả sử một ứng dụng không gian người dùng bị xâm phạm, chính sách SELinux chính xác sẽ ngăn không cho nó hoạt động theo các đặc quyền thông thường (nghĩa là nếu Selinux bị vô hiệu hóa hoặc cho phép). Điều này tất nhiên sẽ yêu cầu bạn giám sát nhật ký kiểm toán của mình và phân tích chính sách đã cài đặt và sửa đổi nó khi cần thiết để cho phép các ứng dụng hoạt động.
Không nói chính sách mặc định sẽ không giúp nhưng cá nhân tôi muốn biết những gì nó cho phép.