Gdybym był rootem, mógłbym po prostu stworzyć fikcyjnego użytkownika / grupę, odpowiednio ustawić uprawnienia do plików i wykonać proces jako ten użytkownik. Jednak nie jestem, więc czy jest jakiś sposób na osiągnięcie tego bez rootowania?
permissions
not-root-user
jails
Tobias Kienzler
źródło
źródło
chroot
naturalnie by się tam zmieściło, ale znowu nie jesteś rootem.Odpowiedzi:
Więcej podobnych pytań z większą liczbą odpowiedzi wartych uwagi:
UWAGA: Niektóre odpowiedzi wskazują na konkretne rozwiązania, które nie zostały jeszcze tutaj wymienione.
W rzeczywistości istnieje wiele narzędzi więziennych o różnej implementacji, ale wiele z nich albo nie jest bezpiecznych z założenia (jak
fakeroot
,LD_PRELOAD
oparte na), albo nie jest kompletnych (jakfakeroot-ng
,ptrace
opartych na), lub wymagałoby rootowania (chroot
lubplash
wspomnianych w fakechroot etykieta ostrzegawcza ).To tylko przykłady; Pomyślałem o wyświetleniu ich wszystkich obok siebie, ze wskazaniem tych dwóch funkcji („można zaufać?”, „Wymaga skonfigurowania konta root?”), Być może w implementacjach wirtualizacji na poziomie systemu operacyjnego .
Zasadniczo odpowiedzi tam obejmują pełny zakres możliwości, a nawet więcej:
maszyny wirtualne / system operacyjny
rozszerzenie jądra (jak SELinux)
chroot
Pomocniki oparte na chroot (które jednak muszą być ustawione jako root root, ponieważ
chroot
wymagają roota, a możechroot
mogą działać w izolowanej przestrzeni nazw - patrz poniżej):[powiedzieć trochę więcej o nich!]
Znane narzędzia do izolacji oparte na chroot:
hsh-run
ihsh-shell
. ( Hasher został zaprojektowany do budowania oprogramowania w bezpieczny i powtarzalny sposób).ptrace
Innym rozwiązaniem izolacji wiarygodne (oprócz w
seccomp
opartym na jednym ) byłaby pełna syscall-przechwycenie przezptrace
, jak to opisano w podręczniku systemowymfakeroot-ng
:Jednak, jak można to przeczytać,
fakeroot-ng
sama nie jest przeznaczona do tego celu.(BTW, zastanawiam się, dlaczego zdecydowali się zastosować
seccomp
podejście oparte na Chromium zamiastptrace
opartego na ...)Z narzędzi niewymienionych powyżej zauważyłem dla siebie Geordi , ponieważ podobało mi się, że program kontrolny jest napisany w języku Haskell.
Znane narzędzia izolacji oparte na ptrace:
fakeroot-ng
seccomp
Jednym ze znanych sposobów osiągnięcia izolacji jest zastosowanie piaskownicowania seccomp w Google Chromium . Ale takie podejście zakłada, że piszesz pomocnika, który przetworzy niektóre (dozwolone) z dostępu do plików „przechwyconych” i innych wywołań systemowych; a także, oczywiście, staraj się „przechwytywać” wywołania systemowe i przekierowywać je do pomocnika (być może oznaczałoby to nawet zastąpienie przechwyconych wywołań systemowych w kodzie kontrolowanego procesu; więc nie brzmi mówiąc prosto: jeśli jesteś zainteresowany, lepiej przeczytaj szczegóły, a nie tylko moją odpowiedź).
Więcej powiązanych informacji (z Wikipedii):
(Ostatni element wydaje się interesujący, jeśli ktoś szuka ogólnego
seccomp
rozwiązania poza Chromium. Istnieje również post na blogu, który warto przeczytać od autora „seccomp-nurse”: SECCOMP jako rozwiązanie Sandboxing? ).Ilustracja tego podejścia z projektu „seccomp-nurse” :
Czy „elastyczny” seccomp jest możliwy w przyszłości Linuksa?
W 2009 r. Pojawiały się również sugestie dotyczące łatania jądra Linux, aby zapewnić większą elastyczność
seccomp
trybu - aby „uniknąć wielu akrobatyki, których obecnie potrzebujemy”. („Akrobatyka” odnosi się do komplikacji związanych z pisaniem pomocnika, który musi wykonać wiele potencjalnie niewinnych wywołań systemowych w imieniu procesu w więzieniu i zastępowania ewentualnie niewinnych wywołań systemowych w procesie w więzieniu.) Artykuł LWN napisał w tym miejscu:Ten „elastyczny seccomp” zbliżyłby możliwości Linuksa do zapewnienia pożądanej funkcji w systemie operacyjnym, bez potrzeby pisania skomplikowanych pomocników.
(Blog zamieszczający posty zasadniczo o tej samej treści, co ta odpowiedź: http://geofft.mit.edu/blog/sipb/33 .)
przestrzenie nazw (
unshare
)Izolowanie poprzez przestrzenie nazw (
unshare
rozwiązania oparte na bazach danych ) - nie wymienione tutaj - np. Nieudostępnianie punktów montowania (w połączeniu z FUSE?) Może być częścią działającego rozwiązania, jeśli chcesz ograniczyć dostęp systemu plików do niezaufanych procesów.Więcej na temat przestrzeni nazw, ponieważ ich implementacja została zakończona (ta technika izolacji znana jest również pod nme „Linux Containers” lub „LXC” , prawda?):
„Jednym z ogólnych celów przestrzeni nazw jest wspieranie wdrażania kontenerów, narzędzia do lekkiej wirtualizacji (a także innych celów)” .
Możliwe jest nawet utworzenie nowej przestrzeni nazw użytkownika, dzięki czemu „proces może mieć normalny nieuprzywilejowany identyfikator użytkownika poza obszarem nazw użytkownika, a jednocześnie mieć identyfikator użytkownika 0 w obszarze nazw. Oznacza to, że proces ma pełne uprawnienia root dla operacji w przestrzeni nazw użytkownika, ale nie jest uprzywilejowany dla operacji poza przestrzenią nazw ".
Aby zobaczyć prawdziwe działające polecenia, zobacz odpowiedzi na:
oraz specjalne programowanie / kompilowanie przestrzeni użytkownika
Ale cóż, oczywiście pożądane gwarancje „więzienia” można wdrożyć przez programowanie w przestrzeni użytkownika ( bez dodatkowego wsparcia dla tej funkcji z systemu operacyjnego ; być może dlatego ta funkcja nie została uwzględniona na pierwszym miejscu w projektowaniu systemów operacyjnych ); z mniej lub bardziej komplikacjami.
Wspomniane
ptrace
- lubseccomp
oparte na piaskownicy piaskownicy można postrzegać jako niektóre warianty wdrażania gwarancji, pisząc pomocnika piaskownicy, który kontrolowałby twoje inne procesy, które byłyby traktowane jako „czarne skrzynki”, dowolne programy uniksowe.Innym podejściem może być zastosowanie technik programowania, które mogą dbać o efekty, których należy zabronić. (To ty musisz wtedy pisać programy; nie są już czarnymi skrzynkami.) Aby wspomnieć o jednym, użycie czystego języka programowania (który zmusiłby cię do programowania bez efektów ubocznych), takiego jak Haskell , po prostu wywoła wszystkie efekty program jest jawny, więc programista może łatwo upewnić się, że nie wystąpią niedozwolone efekty.
Sądzę, że istnieją narzędzia piaskownicy dla programistów w innym języku, np. Java.
Por. Propozycja projektu „Sandboxed Haskell” .
NaCl - nie wspomniany tutaj - należy do tej grupy, prawda?
Niektóre strony zawierające informacje na ten temat zostały również wskazane w odpowiedziach tam:
źródło
chroot
, ale prawdopodobnie nadal wymagałoby prawdziwe uprawnienia roota ...Jest to podstawowe ograniczenie unikatowego modelu uprawnień: delegować może tylko root.
Nie musisz być rootem, aby uruchomić maszynę wirtualną (co nie jest prawdą we wszystkich technologiach VM), ale jest to rozwiązanie ciężkie.
Tryb użytkownika Linux jest stosunkowo lekkim rozwiązaniem do wirtualizacji Linux-on-Linux. Konfiguracja nie jest taka łatwa; trzeba wypełnić partycji root (w katalogu) z co najmniej minimum niezbędnego do bagażnika (kilka plików
/etc
,/sbin/init
a jego zależnościami, program logowania, muszli i użyteczności publicznej).źródło
Myślę, że możesz mieć trochę szczęścia,
LD_PRELOAD
aby przechwycić dostęp do niektórych plików, ale może to być naprawdę trudne.źródło
LD_PRELOAD
nie można ufać (można go obejść), ale przechwytywania poprzezptrace
można.LD_PRELOAD
rozwiązaniom opartym na rozwiązaniach nie można ufać jako środka bezpieczeństwa.Z pełnej listy chciałbym tylko dodać:
fakeroot (od opiekuna pakietów debian): ma na celu zbudowanie pakietu przy pomocy „przyjaznych” narzędzi. Nie jest to pełna izolacja, ale pomaga budować pakiety z różnymi użytkownikami i fałszywymi urządzeniami i innymi specjalnymi pseudo-plikami.
fakechroot (który używa fakeroot). Ten program ma wiele błędów. Na przykład „/ etc / hosts” jest zakodowany na stałe w glibc: nie można go zmienić za pomocą tego narzędzia.
qemu: musisz skompilować jądro Linuksa, ale wynik jest bardzo szybki i jest to „fałszywa” (tj. wirtualna) maszyna z prawdziwymi uprawnieniami roota. Możesz zbudować i zamontować dowolny obraz rozruchowy.
źródło
Firejail to miłe narzędzie do więzienia dowolnego procesu, z dostępem do roota lub bez niego, z wieloma opcjami i bardzo elastycznym:
źródło