Đây là một câu hỏi Canonical về việc bảo vệ ngăn xếp LAMP
Các nguyên tắc tuyệt đối để bảo mật máy chủ LAMP là gì?
Đây là một câu hỏi Canonical về việc bảo vệ ngăn xếp LAMP
Các nguyên tắc tuyệt đối để bảo mật máy chủ LAMP là gì?
Câu trả lời:
Câu trả lời của David là một cơ sở tốt của các nguyên tắc chung của việc làm cứng máy chủ. Như David chỉ ra, đây là một câu hỏi rất lớn. Các kỹ thuật cụ thể bạn thực hiện có thể phụ thuộc nhiều vào môi trường của bạn và cách máy chủ của bạn sẽ được sử dụng. Cảnh báo, điều này có thể mất rất nhiều công việc trong môi trường thử nghiệm để xây dựng và hoàn thành đúng. Tiếp theo là rất nhiều công việc để tích hợp vào môi trường sản xuất của bạn, và quan trọng hơn là quy trình kinh doanh.
Tuy nhiên, trước tiên, hãy kiểm tra xem liệu tổ chức của bạn có bất kỳ chính sách cứng rắn nào không, vì những chính sách này có thể liên quan trực tiếp nhất. Nếu không, tùy thuộc vào vai trò của bạn, đây có thể là thời điểm tuyệt vời để xây dựng chúng. Tôi cũng sẽ khuyên bạn nên giải quyết từng thành phần riêng biệt từ dưới lên.
L
Có rất nhiều hướng dẫn tốt có sẵn để giúp bạn. Danh sách này có thể hoặc không thể giúp bạn tùy thuộc vào phân phối của bạn.
A
Apache có thể được vui vẻ để bảo đảm. Tôi thấy việc làm cứng hệ điều hành và duy trì khả năng sử dụng dễ dàng hơn cả Apache hoặc PHP.
M
Chữ P
này chạy dài vào toàn bộ ý tưởng về Thực tiễn lập trình an toàn, là toàn bộ môn học của chính nó. Sans và OWASP có một lượng thông tin vô lý về chủ đề này, vì vậy tôi sẽ không cố gắng sao chép nó ở đây. Tôi sẽ tập trung vào cấu hình thời gian chạy và để các nhà phát triển của bạn lo lắng về phần còn lại. Đôi khi 'P' trong LAMP đề cập đến Perl, nhưng thường là PHP. Tôi đang giả định sau.
Bạn đã hỏi một câu hỏi, khá thẳng thắn, xứng đáng với một vài cuốn sách về chủ đề này. Nhưng có một số hướng dẫn cơ bản chung hoạt động tốt:
Hy vọng rằng sẽ giúp bạn bắt đầu.
Đây là một danh sách kiểm tra tốt mà tôi muốn bắt đầu.
Thêm vào những gì David gợi ý, cài đặt của bạn càng nhiều mô-đun, nghĩa là tôi hạn chế quyền truy cập vào một số người dùng / nhóm nhất định được tạo riêng cho một tác vụ và giới hạn phạm vi của họ, ngăn xếp LAMP của bạn càng an toàn: Một ví dụ về điều này là có người dùng Apache đối với các tệp / thư mục Apache có quyền được đặt tương ứng và không thuộc bất kỳ nhóm nào có thể truy cập các tệp / thư mục hệ thống quan trọng. Người dùng có thể truy cập các bảng MySql được liên kết với các trang web của bạn mà bạn sẽ phục vụ và chỉ những bảng đó. Ngoài ra, bạn có thể hạn chế quyền truy cập của họ để cung cấp lượng truy cập tối thiểu từ cuộc gọi PHP. Ngoài ra, hãy đảm bảo rằng tên người dùng MySQL được sử dụng / hiển thị thông qua tệp PHP không phải là cùng tên người dùng hoặc mật khẩu được sử dụng cho người dùng khác.
Điều này có nghĩa là gì: nếu người dùng apache hoặc người dùng MySql bị xâm phạm, họ không thể gây hại gì ngoài phạm vi của thư mục apache có quyền truy cập (trong trường hợp người dùng apache) và bên ngoài bảng ( s) / cơ sở dữ liệu (trong trường hợp người dùng cho cơ sở dữ liệu MySQL).
Nếu bằng cách nào đó, người dùng MySQL bị xâm phạm, chẳng hạn, họ không thể truy cập cơ sở dữ liệu và bỏ tất cả các cơ sở dữ liệu khỏi MySQL và phá hỏng tất cả dữ liệu của bạn. Họ MIGHT trong một số trường hợp có thể bỏ bảng hoặc chèn thông tin vào một số bảng trong cơ sở dữ liệu bị cô lập, đó là lý do tại sao chỉ cấp quyền truy cập bảng khi thực sự cần thiết và chỉ cấp quyền cần thiết ... nếu bạn không ' Không cần phải có đặc quyền bảng thả hoặc cập nhật đặc quyền, sau đó không cung cấp cho người dùng đó.
Ngoài ra, nếu vì lý do nào đó, tên người dùng và mật khẩu tài khoản quản trị của bạn bị phát hiện vì MySQL, nếu bạn sử dụng tên người dùng khác với bất kỳ tên người dùng nào trên hệ thống của bạn, trước tiên họ phải phá vỡ bảo mật hệ thống của bạn trước khi xâm nhập vào cơ sở dữ liệu của bạn. Điều tương tự cũng đúng về người dùng apache và quyền truy cập vào các tệp.
Ví dụ thời gian! Tôi sẽ đưa ra một ví dụ hệ thống để đơn giản hóa ý tưởng.
nói rằng bạn có người dùng trên hệ thống của mình (root nên bị vô hiệu hóa để bảo mật thông qua một cái gì đó như umod -l hoặc passwd -l, v.v.): john, barney, terence và lisa.
bạn có thể tạo một người dùng trong MySQL với tên của bigbird (đảm bảo bạn sử dụng mật khẩu băm). Bigbird chỉ có các đặc quyền chọn và cập nhật đặc quyền, nhưng không bỏ hoặc tạo, và chắc chắn là không . Ngoài ra, bạn tạo một người dùng MySQL quản trị khác có tên garfield để làm việc trên cơ sở dữ liệu MySQL và bạn xóa người dùng root khỏi cơ sở dữ liệu MySQL để không bị bắt buộc. garfield đã được cấp . đặc quyền trên toàn MySQL (hiệu quả, đây chỉ là đổi tên root).
bây giờ, bạn tạo một nhóm apache hoặc người dùng và chúng tôi sẽ gọi nó là apweb2. Appweb2 không phải là thành viên của các nhóm khác và tất cả các tệp / thư mục cho apache được lưu trữ trong / home / apweb2 /. Mỗi máy chủ ảo sẽ có thư mục con riêng và mỗi máy chủ này sẽ có bộ gốc tài liệu được đặt thành thư mục con đó. Symlinks sẽ bị vô hiệu hóa để không vô tình cung cấp quyền truy cập vào phần còn lại của hệ thống.
Ngoài ra, bạn có thể hạn chế quyền truy cập ssh chỉ với một số người dùng nhất định (hoặc một số nhóm nhất định, tôi muốn đưa họ vào nhóm ssh và làm cho điều duy nhất có thể sử dụng ssh).
Ngoài ra, bạn có thể chọn người dùng nào có đặc quyền sudo để hạn chế mọi thứ hơn nữa. Một bước nữa bạn có thể tiến xa hơn là làm cho bất kỳ người dùng ssh nào không thể sudo, bạn có thể tạo người dùng đặc biệt có thể sử dụng sudo mà không thể sử dụng ssh, để khi bạn đăng nhập, bạn phải đăng nhập vào người dùng khác để có truy cập vào sudo.
Vì vậy, bằng cách mô đun hóa từng phân đoạn, nếu một phân đoạn bị xâm phạm, toàn bộ ngăn xếp sẽ không bị xâm phạm và bạn có thể khắc phục sự cố 1 thay vì phải bắt đầu lại từ đầu.
Tôi tìm thấy tài liệu này từ SANS.org thực sự hữu ích http://www.sans.org/score/checklists/linuxchecklist.pdf
Tại thời điểm hiện tại, đừng bỏ qua ảo hóa container, cụ thể là Docker, systemd-nspawn và các cơ chế ảo hóa container mà chúng được xây dựng (không gian tên, cgroups). Sử dụng ảo hóa container cho phép bạn cách ly các tiến trình, ví dụ, nếu một trong các dịch vụ bị xâm phạm, kẻ tấn công sẽ không có quyền truy cập vào các dịch vụ khác.
Trong trường hợp LAMP, có thể sử dụng, ví dụ, bốn container Docker với SSH-server, Apache, MySQL, PHP-FPM / Python / Perl / etc.