Linux LXC vs FreeBSD tù


62

Có sự khác biệt đáng chú ý nào giữa các nhà tù LXC (Linux container)FreeBSD về bảo mật, tính ổn định và hiệu suất không?

Thoạt nhìn, cả hai cách tiếp cận trông rất giống nhau.


1
LXC là một công nghệ khá mới, vì vậy tôi mong đợi sự bảo mật và ổn định tốt hơn với các nhà tù. Thậm chí không đoán được hiệu suất. Có một số vấn đề bảo mật đã biết với LXC có thể được giảm thiểu bằng cách sử dụng selinux chẳng hạn. Cá nhân tôi thích LXC, mặc dù.
Pavel imerda

1
@ PavelŠimerda Tôi mới nghe nói về LXC ngày hôm nay, nhưng tôi đã ngạc nhiên khi phát hiện ra rằng cả Heroku và có lẽ Google App Engine đều đã sử dụng LXC.
Philipp Claßen

3
Nếu bạn vừa va vào LXC, bạn nên xem Docker sử dụng LXC dưới nắp ca-pô: docker.io/the_whole_story
Kev

1
Docker không sử dụng lxc nữa.

1
@nwildner nó không sử dụng liblxc nữa, nhưng nó sử dụng chính xác các khái niệm: không gian tên kernel.
0xC0000022L

Câu trả lời:


101

Bất kể tên ưa thích được sử dụng ở đây, cả hai đều là giải pháp cho một vấn đề cụ thể: Một giải pháp tách biệt tốt hơn so với chroot Unix cổ điển . Ảo hóa cấp hệ điều hành, các thùng chứa, vùng hoặc thậm chí "chroot với steroid" là tên hoặc tiêu đề thương mại xác định cùng một khái niệm phân tách không gian người dùng, nhưng với các tính năng khác nhau.

Chroot được giới thiệu vào ngày 18 tháng 3 năm 1982, vài tháng trước khi phát hành 4.2 BSD , như một công cụ để kiểm tra hệ thống cài đặt và xây dựng của nó, nhưng ngày nay nó vẫn còn thiếu sót. Vì mục tiêu đầu tiên của chroot chỉ là cung cấp một đường dẫn newroot , các khía cạnh khác của hệ thống cần được cách ly hoặc kiểm soát đã được khám phá (mạng, chế độ xem, thông lượng I / O). Đây là nơi các container đầu tiên (ảo hóa cấp độ người dùng) xuất hiện.

Cả hai công nghệ (FreeBSD Jails và LXC) đều sử dụng cách ly không gian người dùng để cung cấp một lớp bảo mật khác. Việc ngăn xếp này sẽ đảm bảo rằng một quy trình xác định sẽ chỉ giao tiếp với các quy trình khác trong cùng một bộ chứa trên cùng một máy chủ và nếu sử dụng bất kỳ tài nguyên mạng nào để đạt được giao tiếp "thế giới bên ngoài", tất cả sẽ được chuyển tiếp đến giao diện / kênh được chỉ định mà bộ chứa này có.

Đặc trưng

Nhà tù FreeBSD:

  • Được coi là công nghệ ổn định, vì nó là một tính năng trong FreeBSD kể từ 4.0;
  • Nó sử dụng hệ thống tập tin ZFS tốt nhất tại điểm mà bạn có thể sao chép các bản sao và tạo các mẫu tù để dễ dàng triển khai nhiều bản hơn. Một số ZFS điên rồ hơn ;
  • Tài liệu tốt , và phát triển ;
  • Nhà tù phân cấp cho phép bạn tạo các nhà tù bên trong nhà tù (chúng ta cần đi sâu hơn!). Kết hợp với allow.mount.zfsđể đạt được nhiều sức mạnh hơn và các biến khác như children.maxxác định các tù con tối đa.
  • rctl (8) sẽ xử lý các giới hạn tài nguyên của các nhà tù (bộ nhớ, CPU, đĩa, ...);
  • FreeBSD tù xử lý không gian người dùng Linux ;
  • Cách ly mạng với vnet, cho phép mỗi nhà tù có ngăn xếp mạng, giao diện, địa chỉ và bảng định tuyến riêng;
  • nullfs để giúp liên kết các thư mục với các thư mục được đặt trên máy chủ thật vào trong nhà tù;
  • tiện ích ezjail để giúp triển khai hàng loạt và quản lý các nhà tù;
  • Rất nhiều điều chỉnh nhân ( sysctl). security.jail.allow.*các tham số sẽ giới hạn hành động của người dùng root của nhà tù đó.
  • Có thể, các nhà tù FreeBSD sẽ mở rộng một số tính năng của dự án VPS như di chuyển trực tiếp trong tương lai gần.
  • Có một số nỗ lực tích hợp ZFS và Docker . Vẫn còn thử nghiệm.
  • FreeBSD 12 hỗ trợ bhyve bên trong nhà tù và pf bên trong nhà tù, tạo ra sự cô lập hơn nữa đối với các công cụ đó
  • Rất nhiều công cụ thú vị đã được phát triển trong những năm qua. Một số trong số họ được lập chỉ mục trên bài đăng blog này .
  • Các lựa chọn thay thế: Dự án VPS FreeBSD

Các bộ chứa Linux (LXC):

  • Công nghệ "trong kernel" mới nhưng được chứng thực bởi những cái lớn (đặc biệt là Canonical);
  • Các container không có đặc quyền bắt đầu từ LXC 1.0, tạo ra một bước tiến lớn về bảo mật bên trong các container;
  • Ánh xạ UID và GID bên trong các thùng chứa;
  • Không gian tên hạt nhân, để phân tách IPC, mount, pid, mạng và người dùng. Các không gian tên này có thể được xử lý theo cách riêng biệt, trong đó một quy trình sử dụng một không gian tên mạng khác nhau sẽ không nhất thiết bị cô lập trên các khía cạnh khác như lưu trữ;
  • Kiểm soát các nhóm (nhóm) để quản lý tài nguyên và nhóm chúng. CGManager là người đạt được điều đó.
  • Cấu hình Apparmor / SELinux và các khả năng của Kernel để thực thi tốt hơn các tính năng Kernel có thể truy cập bằng các container. Seccomp cũng có sẵn trên các thùng chứa lxc để lọc các cuộc gọi hệ thống. Các khía cạnh bảo mật khác ở đây .
  • Chức năng di chuyển trực tiếp đang được phát triển. Thật sự rất khó để nói khi nào nó sẽ sẵn sàng để sử dụng sản xuất, vì docker / lxc sẽ phải xử lý tạm dừng quá trình không gian người dùng, chụp nhanh, di chuyển và hợp nhất - ref1 , ref2 .Di chuyển trực tiếp đang hoạt động với các bộ chứa cơ bản (không có thiết bị nào vượt qua cả các dịch vụ mạng phức tạp hoặc cấu hình lưu trữ đặc biệt).
  • Các ràng buộc API để cho phép phát triển trong python3 và 2, lua, Go, Ruby và Haskell
  • Khu vực "Có gì mới". Khá hữu ích bất cứ khi nào bạn cần kiểm tra xem một số lỗi đã được sửa hay một tính năng mới đã được cam kết. Đây .
  • Một thay thế thú vị có thể là lxd , dưới mui xe hoạt động với lxc, nhưng, nó có một số tính năng hay như api REST, tích hợp OpenStack, v.v.
  • Một điều thú vị khác là Ubuntu dường như đang vận chuyển zfs làm hệ thống tập tin mặc định cho các container vào ngày 16.04 . Để giữ cho các dự án được căn chỉnh, lxd đã khởi chạy phiên bản 2.0 và một số tính năng có liên quan đến zfs .
  • Các lựa chọn thay thế : OpenVZ , Docker
  • Docker . Lưu ý ở đây rằng Docker sử dụng các không gian tên, các nhóm tạo cách ly "trên mỗi ứng dụng" / "trên mỗi phần mềm". Sự khác biệt chính ở đây . Trong khi LXC tạo các thùng chứa với nhiều quy trình, Docker giảm một container càng nhiều càng tốt cho một quy trình và sau đó quản lý thông qua Docker.
  • Nỗ lực tích hợp Docker với SELinux và giảm khả năng bên trong một container để bảo mật hơn - Docker và SELinux, Dan Walsh
  • Sự khác biệt giữa Docker, LXD và LXC là gì

Docker không còn sử dụng lxc. Bây giờ họ có một lib cụ thể được gọi là libcontainer xử lý việc tích hợp với các tính năng không gian tên Kernel và cgroups cấp thấp.

Cả công nghệ đều không phải là thuốc chữa bách bệnh, nhưng cả hai đều là những cách khá tốt để cô lập một môi trường không yêu cầu Ảo hóa hoàn toàn do cơ sở hạ tầng hệ điều hành hỗn hợp. Bảo mật sẽ đến sau khi đọc rất nhiều tài liệu và triển khai các bộ điều chỉnh kernel, MAC và các cách ly mà những người có trình độ hệ điều hành này cung cấp cho bạn.

Xem thêm:


1
Đáng nói là ra khỏi hộp, lxc không có nỗ lực nào để cung cấp sự cách ly khách thích hợp. lxd , tuy nhiên, không cố gắng cung cấp sự cô lập như các nhà tù BSD hoặc các khu vực Solaris.
allquixotic

lxd là một "trải nghiệm tốt hơn" của LXC, đặt các tính năng khác lên trên nó. Tuy nhiên, có vẻ hay khi trích dẫn anh chàng nhỏ bé này ở đây

@allquixotic bạn có nghĩa là nếu sử dụng cấu hình không thay đổi được tạo từ các mẫu? Các thùng chứa đúng, nhưng không có đặc quyền (hỗ trợ userns) có sẵn với LXC 1.x và thậm chí có thể tự động khởi động khi khởi động hệ thống, miễn là chúng được sở hữu bởi root(và do đó nằm trong vị trí toàn hệ thống cho các container).
0xC0000022L
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.