
Drop — rootless Linux sandbox gVisor-ის მხარდაჭერით
ღია კოდის პროექტი Drop პროგრამებსა და კოდის აგენტებს იზოლირებულ გარემოში ამუშავებს root-ის გარეშე, კონტეინერების ნაცვლად უკვე დაყენებულ დისტრიბუტივს იყენებს და სურვილისამებრ gVisor-ის user-space ბირთვზე გაუშვებს.
Drop არის ღია კოდის Linux sandbox, რომელიც ცალკეულ პროგრამებსა და კოდის აგენტებს იზოლირებულ, ადვილად წასაშლელ გარემოში ამუშავებს კონტეინერებზე გადასვლის გარეშე. პროექტი გამოქვეყნებულია droprun.sh-ზე, კოდი GitHub-ზეა, Hacker News-ზე კი ის Show HN-ის პოსტად გამოჩნდა. Docker-ისა და Podman-ის მსგავს პრობლემას Drop უფრო მსუბუქად წყვეტს.
Rootless იზოლაცია
სამუშაო პროცესი Python-ის virtualenv-ითაა შთაგონებული: ქმნი გარემოს, შედიხარ მასში და ჩვეულებრივად მუშაობ, იზოლაციას კი ოპერაციული სისტემა უზრუნველყოფს. Drop-ს root არ სჭირდება. ყოველი გარემო Linux-ის user namespace-ში მუშაობს საკუთარი process, mount, network, IPC და cgroup namespace-ებით, ხოლო სანამ იზოლირებული პროგრამა გაეშვება, Drop აუქმებს user namespace-ის ყველა capability-ს — ამიტომ პროცესს bind mount-ის მსგავსი პრივილეგირებული ოპერაცია არ შეუძლია.
ყოველ გარემოს საკუთარი მუდმივი home დირექტორია აქვს, ორიგინალური home კი დამალულია. სისტემური დირექტორიები ჰოსტიდან მხოლოდ წასაკითხად ჩანს, /var და /tmp პირადია, ხელმისაწვდომია მხოლოდ რამდენიმე მოწყობილობა, localhost-ზე მომსახურე სერვისებზე წვდომა კი ნაგულისხმევად აკრძალულია; ქსელს pasta მართავს.
რისთვისაა განკუთვნილი
მთავარი გამოყენების შემთხვევა კოდის აგენტებია. აგენტის გაშვება ნებართვების გარეშე ნაკლებად სარისკოა, როცა საზღვრებს მოდელი კი არა, ოპერაციული სისტემა იცავს: შეცდომით შესრულებული rm -rf ~ რეალურ home დირექტორიას არ ეხება, ~/.ssh-ზე მიმართული prompt injection კი ვერაფერს პოულობს. მეორე შემთხვევა მესამე მხარის პროგრამებია: PyPI-დან ან npm-იდან დაყენებული პაკეტის გაშვებისას მავნე ან კომპრომეტირებული გამოშვების შედეგები იზოლირებული რჩება.
კონტეინერებისგან განსხვავებით Drop უკვე დაყენებულ დისტრიბუტივს იყენებს: არ არის ასაწყობი image და კონტეინერის კონფიგურაცია. TOML კონფიგურაცია განსაზღვრავს, რომელი ფაილები, დირექტორიები და ლოკალური ქსელური სერვისები გამოჩნდეს, ყველა გარემო კი ნაგულისხმევად საერთო base კონფიგს იზიარებს.
gVisor და დაყენება
ხელმისაწვდომია ორი runtime: ნაგულისხმევი native პროგრამებს namespace-ების გამოყენებით პირდაპირ ჰოსტის ბირთვზე უშვებს, gvisor კი დამატებით gVisor-ის user-space ბირთვზე, რათა syscall-ები ჰოსტის ბირთვამდე პირდაპირ არ მიდიოდეს. ამისთვის runsc უნდა იყოს დაყენებული; რეჟიმი ირჩევა TOML ფაილში (runtime = "gvisor") ან ცალკე ბრძანებისთვის. gVisor syscall-ებს ამძიმებს და vanilla Linux-ის ბირთვთან სრულად თავსებადი არ არის. დაყენებისას საჭიროა passt/pasta პაკეტი; Ubuntu 24-ზე AppArmor-ის პროფილმა უნდა დართოს drop-ის ბინარს user namespace-ის გამოყენება, Fedora-ზე კი SELinux-ის პოლიტიკა უნდა გაფართოვდეს, რომ pasta-მ namespace-ის ფაილები გახსნას.
შეზღუდვები
Drop ტერმინალის ხელსაწყოა: GUI პროგრამები ნაგულისხმევი კონფიგურაციით არ მუშაობს, X socket-ების გამოჩენა ზედმეტად ფართო უფლებებს მისცემდა, ხმის დაკვრა ან ჩაწერა კი შეუძლებელია. setuid პროგრამები საერთოდ არ გაეშვება, ის პროგრამები კი, რომლებიც თავად ეყრდნობიან Linux-ის user namespace-ებს — Podman ან Snap-ით დაყენებული აპლიკაციები — არ არის მხარდაჭერილი.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.