3 zamienniki sudo i jeden, który czyni je całkowicie bezużytecznymi

W artykule omówiono alternatywy dla sudo, takie jak run0, sudo-rs i opendoas, oraz wskazano, dlaczego Qubes OS sprawia, że sudo staje się zbędne.
Zmiana implementacji sudo to mało emocjonujące doświadczenie. W przeciwieństwie do przejścia na nowe systemy operacyjne, które bywają fascynujące. Podczas gdy niektórzy analizują zawiłości sudo i setuid, jeden z dostawców otwiera furtkę dla atakujących — ale nie tak, jak myślisz.
Problem sudo można rozwiązać na kilka sposobów: lepsze implementacje, bezpieczniejszy kod lub izolacja. Opendoas, run0 i sudo-rs podchodzą do zagadnienia na różne sposoby, ale Qubes stawia poprzeczkę na tyle wysoko, że sudo traci na znaczeniu.
Problemy z sudo
Ogromna powierzchnia ataku i setuid
Sudo funkcjonuje w świecie *nix od lat 80., ale jego rozmiar to problem sam w sobie: 100 tys. linii kodu to spora powierzchnia ataku. Zbyt wiele szumów, by wyłapać istotne informacje. Ocean kodu to doskonała zasłona.
Poleganie na setuid to drugi problem. Umożliwia uruchamianie plików jako ich właściciela. Ponieważ sudo działa jako root, uruchamiane pliki funkcjonują z tymi samymi uprawnieniami. Gdy w kodzie są luki, nieuprzywilejowani mogą wszczepić exploity. Tak powstają przypadki wykonywania dowolnego kodu i eskalacji uprawnień.
Run0
Nowe podejście do uprawnień
Run0, wprowadzone w systemd od wersji v256, stanowi alternatywę dla sudo. Zamiast setuid, korzysta z polkit – demona, który precyzyjnie zarządza uprawnieniami.
Run0 działa na innej zasadzie. Gdy sudo foo uruchamia proces jako "foo" z uprawnieniami roota, run0 nie to robi. Wykonuje procesy w forkowanym pseudo-terminalu (PTY), izolując je. Zmienne środowiskowe, przypisania cgroup i kontekst bezpieczeństwa znikają w nowym otoczeniu.
Run0 potrzebuje jeszcze dopracowania, na przykład nie buforuje poświadczeń. Każde polecenie wymaga ponownej autoryzacji, co bywa irytujące, ale do przeżycia.
Run0 działa na większości systemów z systemd. Możesz spróbować samodzielnie:
run0 lsMożesz także uruchomić interaktywny terminal:
run0 Sudo-rs
Duma w Rust
Sudo-rs to kolejna sensowna alternatywa. Stworzona przez Trifecta Tech Foundation, obecnie wspierana przez Canonical w ramach projektu oxidacji Ubuntu. Prosta idea: zamiennik sudo napisany z dbaniem o bezpieczeństwo kodu. Ataki na błędy pamięci to wciąż popularne metody lokalnej eskalacji uprawnień.
Opendoas
Minimalizm w doskonałości
Opendoas to fork doas z OpenBSD, który również ma zastąpić sudo, stawiając na prostotę. Mniejsza baza kodu to mniejsza powierzchnia ataku.
"Mniejsza" to niedopowiedzenie, bo opendoas ma zaledwie 3000 linii kodu, wobec setek tysięcy w sudo. Gdy kod jest zrozumiały, łatwiej zlokalizować lukę.
Niestety, opendoas boryka się z brakiem regularnych aktualizacji. Ostatni commit sprzed kilku lat budzi wątpliwości; może baza kodu jest tak doskonała, że nowości nie są konieczne, ale upstream doas aktualizowany był jeszcze w 2024.
Qubes OS
Sudo jest w zasadzie bezużyteczne
Qubes całkowicie rezygnuje z sudo. Dlaczego? Mocna izolacja to klucz do bezpieczeństwa.
Maszyny wirtualne Qubes nie tylko chronią system; dzielą dane na różne domeny bezpieczeństwa—bankowość, przeglądanie, praca. Właściciele katalogów roota pochodzą z odrębnego świata.
Atakujący nie mogą trwale uszkodzić systemu. Po każdym ponownym uruchomieniu wszystko wraca do normy, zaledwie z danymi systemowymi. Krytyczne informacje, jak bazy danych haseł i sesje przeglądarki, tkwią w twoim katalogu domowym. A do ich kradzieży nie potrzebują dostępu roota. Sudo traci sens w tym kontekście. Silne granice między domenami wystarczają.
Sudo zabezpiecza system przed złośliwymi zmianami, ale Qubes to nie problem. Tylko dane użytkownika są wrażliwe, co dotyczy każdej platformy.
Wszystkie trzy podejścia mają sens, ale Qubes czyni sudo całkowicie zbędnym
Run0 pojawił się w większości systemów—spory plus. Ale UX wymaga poprawek, a systemd nie ma najlepszej prasy, co może zniechęcać.
Rust brzmi dobrze, bo tak przywykliśmy. Dla krytycznego kodu systemowego języki pamięci bezpieczne są trafionym wyborem. Nie chcę jednak wzniecać kontrowersji wśród zapaleńców C ani wchodzić w burzliwą debatu o Rust w Linuksie.
Tradycyjne podejście do podnoszenia uprawnień? Połączenie trzech alternatyw wydaje się najbardziej efektywne: kompaktowa baza kodu, język bezpieczny dla pamięci, unikanie setuid. Może to brzmieć jak wymówka, ale to na szczycie mojej listy.
Dla większości zastąpienie sudo to odległa wizja, biorąc pod uwagę jego pierwszeństwo. Mało kto traktuje to poważnie—postrzegają sudo jako kłopot, a nie niezbędność.
Na moim pulpicie sudo wciąż czeka bez hasła. Może prawdziwe zastąpienie nie leży w znanych przydziałach, lecz w nowym, świeżym podejściu.
Jeśli ciekawią Cię artykuły podobne do 3 zamienniki sudo i jeden, który czyni je całkowicie bezużytecznymi, zajrzyj do kategorii Linux i odkryj jeszcze więcej interesujących treści.
Dodaj komentarz

Możesz być zainteresowany