Lennart Pottering wprowadził narzędzie run0, które pozwala na uruchamianie procesów pod identyfikatorami innych użytkowników. Nowe narzędzie jest pozycjonowane jako bezpieczniejszy zamiennik programu Sudo, zaimplementowane jako dodatek do polecenia systemd-run i pozwalające na rezygnację z używania pliku wykonywalnego z flagą SUID. Narzędzie run0 jest zawarte w wersji kandydującej do wydania systemd 256.
Należy zauważyć, że zmiana identyfikatora za pomocą flagi SUID w Sudo niesie ze sobą dodatkowe ryzyko ze względu na fakt, że proces SUID dziedziczy kontekst wykonania, który zawiera wiele właściwości kontrolowanych przez nieuprzywilejowanego użytkownika, takich jak zmienne środowiskowe, deskryptory plików, opcje harmonogramu i powiązania cgroup. Niektóre z tych właściwości są automatycznie czyszczone dla procesów SUID przez jądro, a niektóre są czyszczone przez samą aplikację. Jednak w złożonych programach SUID, takich jak Sudo, nadal regularnie wykrywane są luki, wynikające z nieostrożnego obchodzenia się z danymi zewnętrznymi, na które nieuprzywilejowany użytkownik może mieć wpływ.
run0 zamiast używać SUID, prosi menedżera systemu o uruchomienie powłoki lub procesu z określonym identyfikatorem użytkownika, utworzenie nowego pseudoterminala (PTY) i przesłanie danych pomiędzy nim a bieżącym terminalem (TTY). To zachowanie bardziej przypomina uruchamianie go za pomocą protokołu ssh niż uruchamianie go za pomocą klasycznego sudo. Proces uprzywilejowany działa w izolowanym kontekście, który jest uruchamiany przez proces o identyfikatorze PID 1, a nie przez proces użytkownika, tj. nie dziedziczy właściwości środowiska użytkownika, z wyjątkiem przekazywania zmiennej środowiskowej $TERM. Przesyłanie jest regulowane poprzez listę wyraźnie dozwolonych właściwości, zamiast próbować zakazywać niebezpiecznych właściwości (koncepcja białej listy zamiast czarnej listy).
Polkit służy do autoryzacji i określania możliwości użytkownika w run0. Klasyczny język reguł (/etc/sudoers) używany przez Sudo nie jest obsługiwany. Funkcjonalność uruchamiania programów z innymi uprawnieniami jest wbudowana w systemd-run, a komenda run0 jest tworzona jako dowiązanie symboliczne do komendy systemd-run, która po użyciu zapewnia interfejs wiersza poleceń podobny do sudo.
Jedną z dodatkowych funkcji run0 jest sygnalizacja pracy z podwyższonymi uprawnieniami poprzez ustawienie czerwonawego tła w terminalu i dodanie czerwonej kropki w tytule okna. Po zakończeniu wykonywania z innymi uprawnieniami kropka znika, a tło zmienia się na normalne. Ponadto run0 obsługuje wszystkie opcje „systemd-run”, na przykład parametr „--property”, za pomocą którego można ustawić dowolne ustawienia usług systemowych (na przykład „CPUWeight=200 MemoryMax=2G IPAccounting=yes”) .
Źródło: opennet.ru
