3 sudo-ersättningar och den som gör det helt värdelöst

Att byta operativsystem istället för sudo-implementation kan öka säkerheten. Alternativ som Run0, sudo-rs och Opendoas erbjuder olika lösningar, men Qubes gör sudo nästan överflödigt.
Att byta sudo-implementation är i stort sett irrelevant, men att byta operativsystem kan vara en spännande resa. Medan vissa debatterar sudo och setuid, kvarstår en öppen dörr för angripare—dock inte på det sätt du tror.
Det finns några vägar att lösa sudo-problemet: bättre implementationer, säkrare kod eller inneslutning. Opendoas, run0 och sudo-rs utforskar dessa alternativ med varierande framgång, men Qubes har gjort inneslutning så effektiv att sudo knappt är relevant längre.
Problemen med sudo
Ett stort angreppsyta och setuid
Sudo har tjänat *nix-världen sedan 80-talet men lider av två stora problem. För det första: dess massiva kodbas på över 100 000 rader ger en enorm angreppsyta. Översvämning av brus döljer information, och en stor kodbas är perfekt för det.
För det andra är beroendet av setuid ett problem. Denna behörighetsbit låter körbara filer köras med ägarens rättigheter. När en användare kör sudo köres binären som root. Problemet uppstår när icke-privilegierade användare får köra privilegierad kod. Om binären har brister kan de utnyttjas, vilket leder till godtycklig kodexekvering eller privilegieförhöjning.
Run0
En verkligen annorlunda ansats till privilegier
Run0, ett kommando i systemd sedan v256, är först på listan av alternativ. Det försöker kringgå sudos brister med en radikalt annan modell. Istället för setuid använder det polkit för granulära behörighetskontroller.
Run0 fungerar annorlunda än sudo. Medan sudo foo förgrenar sig till ett privilegierat "foo" som ärver mycket av sin kontext, skapar run0 en ny, isolerad exekveringsmiljö. Inga miljövariabler eller säkerhetskontexter följer med.
Run0 känns lite rå, till exempel cachar den inte autentiseringar. Därför kommer sekventiella kommandon att fråga om autentisering om och om igen—trist, men hanterbart.
Run0 finns på de flesta system med systemd, och du kan testa själv:running
run0 lseller starta en interaktiv terminal:
run0 Sudo-rs
Jag övervägde att skriva om detta i Rust
Sudo-rs är nästa kandidat och en drop-in ersättning för sudo, utvecklad av Trifecta Tech Foundation och nu del av Canonicals plan att oxidisera Ubuntu. Dess huvudpoäng: en sudo-liknande binär med minnessäker kod. Medelstarka säkerhetshot mot minneskorrumpering är vanliga och om de kan adresseras, kan det finnas skäl till en helt ny strategi.
Opendoas
En liten kodbas med en begränsad commit-historik
Opendoas, en fork av OpenBSD:s doas, är ett annat alternativ. Den fokuserar på enkelhet för att ersätta sudo: en mindre kodbas innebär en mindre angreppsyta.
”Mindre” beskriver verkligen deras proposition, med runt 3000 rader kod jämfört med hundratusentals i sudo. Läsbarheten ökar chansen att upptäcka sårbarheter.
Trots detta verkar opendoas sakna regelbundet underhåll. Flera år har passerat sedan senaste commit, vilket kan tyda på att den är så komplett att ändringar är sällsynta, även om användningen av upstream doas har uppdaterats så sent som 2024.
Qubes OS
Sudo är i grunden onyttigt
Grunden onyttigt
Qubes beslut att avaktivera sudo provocerar. Det handlar om att prioritera isolering.
Qubes virtuell maskiner (VM) delar upp data i olika säkerhetsdomäner—bankärenden, webbläsning, arbete—vilket skyddar systemet. Root-ägda kataloger kommer från ett separat system.
En attack kan inte orsaka bestående skada; systemen återställs vid omstart och innehåller endast allmän info. Viktig data, som lösenord och webbläsarsessioner, ligger i hemmakatalogen. Angripare behöver inte root-behörighet för att få tag på denna information. Användning av sudo känns därför irrelevant; de starka gränserna mellan domänerna räcker.
Sudo skyddar mot skadliga förändringar, men med de virtuella maskinerna på Qubes är det inte ett problem. Användardata är den verkliga svagheten, oavsett vilket system.
Alla tre tillvägagångssätt gör mening, men Qubes gör sudo helt överflödigt
Run0 finns redan i många system, vilket är en stor fördel. Men användarupplevelsen behöver förbättras, och systemd har rykte om sig att vara problematiskt, vilket kan hämma spridningen.
Rust-omskrivningar verkar vara en lovande väg tack vare dess bekantskap. För systemkod är minnessäkra språk en smart lösning. Jag vill dock inte hetsa upp C-entusiaster eller starta en debatt om Rust på Linux.
Vid traditionell privilegietilldelning ser jag den mest effektiva lösningen som en kombination av alla tre alternativen: en liten kodbas, ett minnessäkert språk och att undvika setuid. Det kan tyckas vara fegt, men det skulle toppa min lista.
För många är det en tuff uppgift att ersätta sudo, med dess först-mover fördel. De ser helt enkelt sudo som en olägenhet, inte en nödvändighet.
Oavsett vad, sitter sudo (på min desktop) där utan lösenord. Kanske är den riktiga ersättningen inte något av de tidigare nämnda alternativen, utan något helt nytt.
Nu när du har läst klart 3 sudo-ersättningar och den som gör det helt värdelöst, inbjuder vi dig att utforska kategorin Linux ytterligare. Där hittar du fler intressanta artiklar som kommer att utöka dina kunskaper och hålla dig informerad. Sluta inte läsa och upptäcka mer!

Lämna ett svar