Container rootless của Podman và khai thác Copy Fail
(garrido.io)- CVE-2026-31431 Copy Fail cho phép người dùng cục bộ không có đặc quyền lấy được shell
root, và ngay cả trong container rootless của Podman cũng có thể leo thang lên quyềnrootbên trong container - Container rootless của Podman kết hợp user namespace, tách biệt UID và Linux capabilities để ánh xạ
rootbên trong container thành người dùng không có đặc quyền trên host và hạn chế quyền trên host - Trong thử nghiệm, người dùng
foocủa container rootless non-root có thể trở thànhrootbên trong container sau khi chạy Copy Fail, nhưng quyền vẫn bị giới hạn trong phạm vi mà người dùng host không có đặc quyềnbarđược phép, và không thể đọc các tệp thuộc sở hữuroottrên host - Khi áp dụng
--security-opt=no-new-privilegeshoặc--cap-drop=all, ngay cả sau khi chạy Copy Fail, shell vẫn giữ nguyên ởfoovà capabilities ở trạng tháinone, nhờ đó ngăn việc giành ngay shellrootvà leo thang capability - Tác động của Copy Fail có thể còn tồn tại vượt quá vòng đời container, nên cần vá kernel và khởi động lại, đồng thời phải áp dụng thêm phòng thủ theo chiều sâu như hệ thống tệp gốc chỉ đọc, giới hạn tài nguyên bằng cgroups, image runtime tối giản và tường lửa
Phạm vi phơi lộ của Copy Fail và container rootless của Podman
- CVE-2026-31431 được công bố ngày 29 tháng 4 tại copy.fail, và khi chạy script Python đã được công khai, người dùng cục bộ không có đặc quyền có thể lấy được shell
root - Copy Fail cũng có thể bị khai thác bên trong container Linux, và ngay cả trong container rootless của Podman cũng có thể giành được shell
rootbên trong container - Trong thử nghiệm,
rootcủa container bị giới hạn ở phạm vi quyền của người dùng không có đặc quyềnbarđã chạy container trên host - Cách triển khai rootless của Podman kết hợp user namespace, tách biệt UID và Linux capabilities để hạn chế quyền trên host của các tiến trình container
- Copy Fail cho thấy ngay cả container rootless cũng không miễn nhiễm với lỗ hổng, nhưng cấu hình Podman có thể giúp giảm phạm vi tấn công sau khi bị xâm nhập
Cách hoạt động của container rootless
-
Ví dụ cơ bản: người dùng không có đặc quyền
barchạy máy chủ HTTP- Môi trường ví dụ là người dùng không có đặc quyền
barvới UID1001dùng Podman để build image dựa trênubuntu:latestvà chạypython3 -m http.server - Khi xem bằng
pstrên host, tiến trìnhpython3chạy dưới quyền sở hữu của người dùngbar - Podman dùng mô hình fork/exec, nên tiến trình container trở thành tiến trình con cháu của tiến trình
podman run, và có thể tách biệt tiến trình container khỏi hostroothoặc người dùng khác bằng cơ chế tách UID thông thường - Trong cấu hình Docker thông thường, ngay cả khi người dùng không có đặc quyền chạy
docker run, Docker client vẫn giao tiếp với daemon có quyền root, và daemon cuối cùng tạo tiến trình container, nên trên host tiến trình container có thể hiện làroot
- Môi trường ví dụ là người dùng không có đặc quyền
-
Rootless rootful
- Nếu image container không có chỉ thị
USERrõ ràng hoặc cờ--user, thông thường lệnh trong container sẽ chạy vớirootbên trong container - Trong đầu ra
podman top, tiến trình máy chủ HTTP được ánh xạ tới người dùng host1001, nhưng với tư cách người dùng bên trong container thì nó chạy dướiroot - Cấu hình này là trạng thái rootless rootful: chạy như người dùng không có đặc quyền trên host nhưng là
rootbên trong container
- Nếu image container không có chỉ thị
-
User namespace
- Container rootless của Podman dùng user namespace để ánh xạ UID/GID khác nhau giữa bên trong và bên ngoài container
- Trong ví dụ,
rootvới UID0bên trong container được ánh xạ tớibarvới UID1001trên host - Thiết lập
bar:165536:65536trong/etc/subuidxác định dải UID có thể được cấp cho các tiến trình namespace củabar - Trong ví dụ, ngoài UID
1001củabar, các UID từ165536đến231072có thể được gán cho các tiến trình củabar - Nếu chạy
sleepvới người dùngwww-databên trong container, thì bên trong nó làwww-datanhưng trên host sẽ hiển thị là165568 - Khi vào user namespace bằng
podman unshare, thư mục home thuộc sở hữubar:bartrên host sẽ hiện làroot:rootbên trong namespace - Docker cũng hỗ trợ user namespace, nhưng cần cấu hình riêng và chỉ cho phép một user namespace duy nhất, trong khi Podman chạy các container rootless của từng người dùng UNIX trong user namespace tương ứng của người đó
-
Các thao tác đặc quyền và Linux capabilities
- Podman dùng Linux capabilities để cấp các quyền root tinh vi cho tiến trình container
- Trong lúc build image, các tác vụ như
apt installcó thể thực hiện được nhờ tổ hợp capability nhưchown,dac_override,fowner,setgid,setuid,net_bind_service,sys_chroot - Nếu loại bỏ toàn bộ capability bằng
podman build --cap-drop=all,aptsẽ thất bại ở các thao tác nhưsetgroups,setegid,seteuid,chown, khiến việc build image thất bại - Cũng có thể chỉ thêm những capability cần thiết; trong ví dụ,
CAP_SETUID,CAP_SETGID,CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNERđược thêm vào để cài đặt gói - Ở trạng thái chạy mặc định, máy chủ HTTP chạy dưới
rootbên trong container và có nhiều effective capabilities nhưCHOWN,DAC_OVERRIDE,FOWNER,FSETID,KILL,NET_BIND_SERVICE,SETFCAP,SETGID,SETPCAP,SETUID,SYS_CHROOT - Máy chủ HTTP không cần các quyền này, nên có thể loại bỏ toàn bộ bằng
podman run --cap-drop=all; khi đópodman topsẽ hiển thị effective capabilities lànone
-
Rootless non-root
- Để chạy máy chủ HTTP bằng người dùng không có đặc quyền ngay cả bên trong container, có thể dùng người dùng sẵn có trong
/etc/passwd, ví dụwww-data, hoặc tạo người dùng chuyên dụng trong lúc build image - Trong ví dụ, một người dùng và nhóm
foovới UID1002được tạo, cấp quyền đọc cho/var/www/html, rồi thiết lậpUSER foo:foo - Khi chạy image này với
--cap-drop=all, tiến trình sẽ ở trạng thái người dùngfoobên trong container, UID host166537, và effective capabilities lànone - Tiến trình container nên chạy với mức đặc quyền tối thiểu cần thiết; ví dụ nếu
foocần bind vào cổng đặc quyền80thì phải thêm--cap-add=CAP_NET_BIND_SERVICE - Có thể phân loại cách chạy container thành bốn kiểu
- người dùng host
root+ containerroot: root rootful - người dùng host
root+ người dùng không có đặc quyền trong container: root non-root - người dùng host không có đặc quyền + container
root: rootless rootful - người dùng host không có đặc quyền + người dùng không có đặc quyền trong container: rootless non-root
- người dùng host
- Podman giúp việc chạy container rootless rootful trở nên dễ dàng, và nếu có thể chạy tiến trình container dưới người dùng không có đặc quyền thì cũng tương đối dễ xây dựng cấu hình rootless non-root
- Để chạy máy chủ HTTP bằng người dùng không có đặc quyền ngay cả bên trong container, có thể dùng người dùng sẵn có trong
Bind mount và cách ly UID
- Khi mount một thư mục của host vào container, khả năng truy cập các tệp do
rootcủa host,barcủa host vàfootrong namespace sở hữu sẽ thay đổi tùy theo ánh xạ UID - Trong ví dụ, tạo các tệp
root.txtdorootcủa host sở hữu vàbar.txtdobarcủa host sở hữu trong thư mục/var/lib/bar/test, rồi mount đọc/ghi vào/testtrong container - Khi chạy container bằng
foo, tệp dobarcủa host sở hữu sẽ hiện làroot:rootbên trong container, còn tệp dorootcủa host sở hữu sẽ hiện lànobody:nogroupvì không được ánh xạ vào namespace foobên trong container không thể đọcbar.txtvàroot.txt, và rootless non-root cung cấp thêm một lớp cách ly so với rootless rootfulfoo.txtdofootạo trong thư mục đã mount sẽ hiển thị trên host là do UID166537sở hữu, và người dùngbartrên host không thể đọc nội dung tệp đó- Khi chạy container dưới dạng
rootbên trong,roottrong namespace có thể đọc tệp dobarcủa host sở hữu và tệp dofoosở hữu, nhưng không thể đọc tệproot.txtdorootcủa host sở hữu - Khi chạy dưới dạng
rootbên trong và áp dụng--cap-drop=all, ngay cả tệp củafoocũng không đọc được, và chỉ có thể đọc tệp dobarcủa host sở hữu
Kiểm thử Copy Fail
-
Điều kiện kiểm thử
- Bài kiểm thử Copy Fail sử dụng phiên bản exploit từ commit đã công khai ban đầu
8e918b5 - Ảnh container mẫu được thêm
curlvào ảnh máy chủ HTTP hiện có để có thể tải script exploit từ bên trong container - Ảnh được build với tên
copyfail - Kernel dùng để kiểm thử là
6.12.74+deb13+1-amd64của Debian, và theo tiêu chuẩn Debian, các bản gần đây dưới6.12.85được xem là vẫn có thể dùng làm kernel chưa vá - Thông thường, khi người dùng không đặc quyền
foogọisu, sẽ bị yêu cầu mật khẩuroot - Trong mỗi bài kiểm thử, người dùng container tải script Copy Fail về
/tmp, chạy nó, rồi nếu lấy được shellrootthì gọisleep - Do Copy Fail tồn tại vượt qua vòng đời của container, VM được khởi động lại trước mỗi lần kiểm thử
- Bài kiểm thử Copy Fail sử dụng phiên bản exploit từ commit đã công khai ban đầu
-
Kết quả trong rootless rootful
- Khi chạy container với
--user=root, tiến trình bên trong container vốn đã làroot - Trong trạng thái này, nếu chạy script Copy Fail rồi gọi
su, sẽ nhận được shelluid=0(root), nhưng vì người dùngrootvốn đã có thể mở một shell root khác bằngsumà không cần mật khẩu, nên Copy Fail về thực chất không bổ sung gì thêm - Trong
podman top,/bin/bash,python3 copy_fail_exp.py,su,sleepđều hiện làrootbên trong container, người dùng host1001 - Cùng một tập capability được giữ nguyên, gồm
CHOWN,DAC_OVERRIDE,FOWNER,FSETID,KILL,NET_BIND_SERVICE,SETFCAP,SETGID,SETPCAP,SETUID,SYS_CHROOT rootbên trong có thể đọcbar.txtvàfoo.txttrong/testđã mount, nhưng không thể đọcroot.txtdorootcủa host sở hữu
- Khi chạy container với
-
Kết quả trong rootless non-root
- Sau khi chạy container bằng
foo, nếu chạy script Copy Fail rồi gọisu, quyền sẽ được leo thang lênrootbên trong container idcủa shell kết quả hiển thị làuid=0(root) gid=1002(foo) groups=1002(foo)- Trong
podman top,/bin/bashban đầu, tiến trình chạy exploit và lệnh gọisuđều hiện với UID host166537, người dùng containerfoo, và capabilitiesnone - Sau khi leo thang đặc quyền,
[sh]vàsleephiện là người dùng host1001, người dùng containerroot, và có cùng tập capability như rootless rootful - Ngay cả
rootcủa container sau khi leo thang đặc quyền cũng không thể đọcroot.txtdorootcủa host sở hữu - Trong trạng thái này, container đã bị xâm phạm, nhưng phạm vi tấn công bị giới hạn trong phạm vi mà container và người dùng không đặc quyền
bartrên host có thể thực hiện
- Sau khi chạy container bằng
-
Kết quả khi áp dụng
no-new-privileges- Podman có thể dùng
--security-opt=no-new-privilegesđể ngăn tiến trình container có thêm đặc quyền so với thời điểm khởi chạy - Khi áp dụng tùy chọn này cho container rootless non-root và chạy Copy Fail, shell vẫn mở nhưng vẫn ở trạng thái
uid=1002(foo) - Trong
podman top, mọi tiến trình vẫn giữ UID host166537, người dùng containerfoo, capabilitiesnone - Trong
/testđã mount,foocũng chỉ có thể đọc tệp của chính mình và không thể đọcbar.txthayroot.txt - Container đã bị xâm phạm, nhưng bị giới hạn ở người dùng không đặc quyền
foobên trong cùng trạng thái không có capability
- Podman có thể dùng
-
Kết quả khi áp dụng
--cap-drop=all- Ngay cả khi chạy container rootless non-root với
--cap-drop=all,foovốn dĩ cũng không có capability nào - Trong trạng thái này, khi chạy Copy Fail và gọi
su, shell mở ra vẫn giữuid=1002(foo) - Trong
podman top,/bin/bash, tiến trình exploit,su, shell vàsleepđều ở trạng tháifoovà capabilitiesnone - Exploit không lấy được shell
root, vàfoochỉ có thể đọc tệp của chính mình trong/test - Kết quả này tương tự bài kiểm thử
no-new-privileges, và hai biện pháp này có thể được dùng cùng nhau để giảm hiệu quả mức độ lộ capability
- Ngay cả khi chạy container rootless non-root với
-
Tính dai dẳng của exploit
- Dù có thể ngăn việc lấy shell
rootngay lập tức và capability bằngno-new-privilegeshoặc--cap-drop=all, hiệu quả của chính exploit vẫn còn tồn tại - Nếu sau đó chạy một container mới mà không giới hạn capability, người dùng container không đặc quyền
foovẫn có thể trở thànhrootcủa container chỉ bằng cách gọisu - Vì vậy, việc vá kernel và khởi động lại vẫn là cần thiết
- Dù có thể ngăn việc lấy shell
Chiến lược phòng thủ theo chiều sâu
-
Ảnh chỉ đọc
- Thêm
--read-onlyvàopodman runsẽ gắn hệ thống tệp gốc của container ở chế độ chỉ đọc - Podman mặc định vẫn gắn một số thư mục như
/tmp,/run,/var/tmpở chế độ có thể ghi, nên để biến nó thành hoàn toàn chỉ đọc thì cần thêm cả--read-only-tmpfs=false - Nếu container chỉ đọc bị xâm nhập, hệ thống sẽ không cho phép ghi, nên có thể hạn chế một số kiểu tấn công sau khai thác
- Tuy vậy, vì có thể pipe đầu ra của
curlsangpython3, chỉ riêng thiết lập chỉ đọc không ngăn được việc thực thi exploit - Máy chủ HTTP
python3trong ví dụ không cần ghi vào hệ thống tệp, nên có thể dùng tùy chọn này một cách an toàn - Nhiều ảnh dựng sẵn giả định có quyền ghi vào một số thư mục nhất định, nên có thể không hoạt động đúng với hệ thống tệp gốc chỉ đọc
- Hệ thống tệp gốc chỉ đọc là độc lập với các volume có thể ghi được gắn vào container; khi bị xâm nhập, vẫn có thể ghi vào các thư mục mount đó
- Thêm
-
Giới hạn tài nguyên
- Docker và Podman có thể dùng cgroups để giới hạn tài nguyên cấp cho container
- Container không cần bộ nhớ, CPU và PID không giới hạn
- Có thể kiểm tra mức sử dụng tài nguyên của container bằng
podman statsrồi áp dụng giới hạn phù hợp
-
Giới hạn các binary khả dụng
- Ví dụ dùng ảnh
ubuntuđể đơn giản hóa, nhưng ảnhubuntuchứa nhiều binary mà kẻ tấn công có thể lợi dụng khi container bị xâm nhập - Việc chạy máy chủ HTTP không cần đến phần lớn các binary đó
- Nên giữ ảnh runtime mỏng nhất có thể
- Có thể dùng multi-stage build để tách môi trường build-time và runtime
- Có thể dùng các ảnh chuyên mục đích như python3, biến thể
-slimcủa Debian, hoặc các bản phân phối nhỏ hơn nhưalpine - Nếu tương thích với tiến trình container, có thể dùng distroless images hoặc
scratchđể tạo runtime không có shell, trình quản lý gói hay tiện ích hệ thống
- Ví dụ dùng ảnh
-
Tường lửa
- Có thể dùng
iptableshoặcnftablesđể giới hạn tiến trình container bằng tường lửa - Chỉ nên cho phép các kết nối vào/ra thực sự cần thiết cho tiến trình container
- Trong ví dụ máy chủ HTTP, không cần DNS hay kết nối tới máy chủ cục bộ/từ xa, nên có thể giới hạn theo hướng chỉ cho phép các gói
tcpđến từ những kết nối vào đã được thiết lập
- Có thể dùng
Ý nghĩa trong vận hành
- Container rootless chuẩn của Podman mặc định cung cấp khả năng cô lập tốt hơn cấu hình container Docker tiêu chuẩn
- Docker cũng hỗ trợ chạy rootless và dùng user namespace không đặc quyền, nhưng cần nhiều công sức cấu hình hơn Podman và còn bị ảnh hưởng bởi khác biệt về kiến trúc
- Docker vẫn được dùng rất rộng rãi, và các công cụ self-hosting như Dokku, Kamal, Coolify, Dokploy cũng mặc định dùng Docker
- Nếu chạy ảnh từ Docker Hub mà không rà soát kỹ hoặc không áp dụng các biện pháp khóa chặt, dịch vụ có thể chạy với bề mặt tấn công rộng hơn mức cần thiết
- Cần hiểu các chi tiết triển khai của ảnh container
- Cần biết tiến trình container chạy dưới người dùng nào hoặc những người dùng nào
- Cần biết tiến trình container phụ thuộc vào những thư mục nào trong hệ thống tệp gốc
- Cần phân biệt Linux capabilities nào là cần thiết và capabilities nào là không cần
- Kết hợp nhiều cơ chế mà Podman và container cung cấp có thể giúp harden container và giảm blast radius khi bị xâm nhập
- Tùy theo workload, không nên coi container là ranh giới bảo mật duy nhất
- Có thể kết hợp container với máy vật lý hoặc máy ảo riêng để cô lập hiệu quả
- Podman cung cấp cách cô lập từng workload ngay trên cùng một host bằng cách chạy chúng dưới các người dùng không đặc quyền riêng biệt và user namespace riêng của chúng
1 bình luận
Ý kiến trên Lobste.rs
Cần tập trung vào hành vi nguyên thủy mà lỗ hổng này cho phép, hơn là exploit đã được công bố
Lỗ hổng này cho phép ghi vào page cache bất kể có phải chỉ đọc hay không, nên container độc hại có thể sửa đổi các trang thuộc về file ảnh nền của overlayfs, và tùy cách triển khai container, ảnh hưởng còn có thể lan sang các container khác
Trong cấu hình rootless ở đây, mục tiêu sẽ là các container khác đang chạy dưới cùng một người dùng trên hệ thống host
Một cách exploit khác là chạy hoặc tìm một container dựa trên base image đã biết là đang được sử dụng, sửa page cache bên trong container đó, rồi khiến các container khác dùng chung cùng runtime và dữ liệu overlayfs thực thi đoạn mã đó
Rootless và user namespace là quan trọng, nhưng trong trường hợp này không giúp ích nhiều; như trang copy.fail nói, nên cân nhắc chặn lời gọi hệ thống
socket(AF_ALG, ...)bằng seccomp trong containerSẽ tốt hơn nếu giải thích cụ thể “tùy cách triển khai container” ở đây nghĩa là gì
Điểm mạnh của rootless Podman là, tùy workload, không cần phải chạy container bằng cùng một người dùng trên host
Nếu ý là trường hợp chạy nhiều container rootless dưới tài khoản người dùng chính của máy trạm thì tôi đồng ý, nhưng trên server có thể tách từng cái thành người dùng riêng, và cùng một image container cũng có thể chạy dưới các người dùng không đặc quyền khác nhau
Điều này khá khác với mặc định của Docker là chạy phần lớn mọi thứ bằng
root, nhưng ở cuối bài tôi cũng đã viết rằng đây không phải ranh giới bảo mật tối hậu, và việc chia container rootless cho nhiều người dùng không đặc quyền có phù hợp hay không còn tùy mục đích sử dụngMột số workload cụ thể thì tôi tách riêng bằng VM
Tôi muốn hỏi việc nói rootless và user namespace không giúp ích ở đây có phải là đang nói tới việc ngăn exploit hay không
Tôi chưa từng dùng seccomp với policy tường minh cho container nên không đề cập, nhưng đây là dịp tốt để tìm hiểu thêm
Tôi thích Podman và container rootless, nhưng sau khi xem CopyFail thì cũng đi đến cùng kết luận như bình luận bên cạnh
Dù
podman+rootlesscó lợi thế kiểm soát truy cập bổ sung, cuối cùng nó vẫn xác nhận lại lời khuyên kinh điển rằng container không phải là ranh giới bảo mật, và chỉ cần một kernel exploit là có thể xuyên thủng toàn bộTôi chỉ quản trị hệ thống như một sở thích, nhưng như một hướng đi mới trong mảng này tôi có để ý libkrun backend for crun with podman
Nó hứa hẹn vẫn xử lý được phần lớn workload đã được container hóa, nhưng thực chất chạy bên trong MicroVM có guest kernel riêng
Tôi không rõ mức độ trưởng thành, mức kiểm chứng thực tế hay mức độ audit bảo mật của nó ra sao, và một số phần trông vẫn khá tiên phong
MicroVM đang được các công cụ lập trình dùng LLM tích cực tiếp nhận, nên tình trạng đó có thể còn kéo dài một thời gian
podman machinecũng có vẻ đầy hứa hẹn, nhưng tiếc là dường như chỉ nhắm tới máy trạm của lập trình viên, với mô hình mỗi hệ thống host chỉ có một VM để chạy containerDù vậy, tôi vẫn thấy câu “container không phải là ranh giới bảo mật” là quá đơn giản. Container rõ ràng vẫn là một ranh giới bảo mật, chỉ là không mạnh đến mức chúng ta muốn tin mà thôi
Trong triển khai cục bộ, ranh giới này mờ hơn đôi chút
Xét từ góc độ phần cứng, VM không an toàn hơn process một cách bản chất, nhưng có ba lý do khiến ranh giới của nó dễ phòng thủ hơn
Thoát VM hiếm hơn system call, nên có nhiều khoảng trống hơn để áp dụng các biện pháp giảm thiểu side-channel mà không phải trả giá hiệu năng quá lớn
Giao diện host của VM cũng đơn giản hơn nhiều. Thiết bị khối có giao diện đọc ghi theo block, còn thiết bị mạng thì gửi và nhận frame
Lời gọi
setsockoptmà Linux hay *BSD cung cấp cho socket có bề mặt tấn công lớn hơn rất nhiều so với hầu hết driver giả lập hoặc paravirtualization, và ngay cả như vậy thì đó cũng chỉ là một phần rất nhỏ trong toàn bộ bề mặt tấn công của kernelGiao diện VM cũng có ít trạng thái hơn nhiều. Có các giao dịch đang diễn ra trong vòng ring theo mô hình request-response, nhưng ngoài ra hầu như không có gì
Những thứ như credential, UID, GID, bảng file descriptor làm tăng độ phức tạp dựa trên trạng thái trong kernel, và nếu có bug thì process có thể lợi dụng chúng
Khó khăn của biến thể dùng cho workstation là nó lại đưa những độ phức tạp đó trở về
Ví dụ, layer nền của container có thể được phơi ra như một block device chứa filesystem bất biến, nhưng volume và thư mục chia sẻ thì có lẽ sẽ được mount bằng 9pfs hoặc VirtIO-FS, tức 9p hoặc FUSE trên VirtIO
Khi đó bề mặt tấn công lại mở rộng ra
Nếu may mắn thì exploit sẽ cần tới cả một chuỗi tấn công
Tôi quen phía FreeBSD hơn, ở đó thường sandbox các thành phần cung cấp thiết bị paravirtualization hoặc giả lập bằng Capsicum, nên trước tiên phải chiếm được process trên host, rồi sau đó nếu muốn truy cập thứ mà VM vốn không có quyền, còn phải xuyên tiếp vào kernel
Nhưng nếu không có lớp sandbox bổ sung như vậy, thì thoát container lại trở về thế giới nơi kẻ tấn công có thể làm mọi thứ mà người dùng đó làm được, và không khá hơn bao nhiêu so với việc root bị phá trên desktop
Cá nhân tôi còn thích gVisor hơn. Nó không phải runtime VMM, nhưng đã tồn tại nhiều năm và còn được các công ty như Tencent sử dụng, nên rất hợp với môi trường của tôi, nơi mọi container vốn đã chạy bên trong VM Proxmox
Một thứ khác tôi đang thử là syd-oci, có vẻ như nhận được ít chú ý hơn đôi chút so với hai lựa chọn mặc định là MicroVM hoặc gVisor
Cảm ơn vì tài liệu tham khảo về libkrun, trông nó là một hướng đi đầy hứa hẹn
Khả năng cao điều đó cũng sẽ dẫn tới các đợt audit bảo mật