Hur man kontrollerar sudo Access på Linux

Kommandot sudo låter dig köra kommandon på Linux som om du vore någon annan, till exempel root. sudo låter dig också styra vem som kan komma åt roots funktioner, med granularitet. Ge användarna full åtkomst eller låt dem använda en liten delmängd av kommandon. Vi visar dig hur.

sudo och root-behörigheter

Vi har alla hört (överförenklingen) att allt i Linux är en fil. I själva verket talar praktiskt taget allt i operativsystemet från processer, filer, kataloger, sockets och pipes till kärnan genom en filbeskrivning. Så även om allt inte är en fil, hanteras de flesta operativsystemobjekt som om de vore det. Där det är möjligt följer utformningen av Linux och Unix-liknande operativsystem denna princip.

Konceptet ”allt är en fil” är långtgående i Linux. Det är lätt att se hur filbehörigheter i Linux blev en av grundpelarna för användarprivilegier och rättigheter. Om du äger en fil eller katalog (en speciell typ av fil) kan du göra vad du vill med den, inklusive att redigera, byta namn, flytta och ta bort den. Du kan också ställa in behörigheterna för filen så att andra användare eller grupper av användare kan läsa, ändra eller köra filen. Alla styrs av dessa behörigheter.

Alla som är, förutom superanvändaren, kända som root. Rotkontot är ett särskilt privilegierat konto. Det är inte bundet av behörigheterna för något av objekten i operativsystemet. Rotanvändaren kan göra vad som helst med vad som helst och, i stort sett, när som helst.

Naturligtvis kan alla med tillgång till roots lösenord göra detsamma. De kan orsaka förödelse antingen av uppsåt eller av misstag. Faktum är att root-användaren kan orsaka förödelse genom att också göra ett misstag. Ingen är ofelbar. Det är farliga grejer.

Det är därför det nu anses vara bästa praxis att inte logga in som root alls. Logga in med ett vanligt användarkonto och använd sudo till höja dina privilegier under den korta varaktigheten du behöver dem. Ofta är det bara att utfärda ett enda kommando.

Sudoers Lista

sudo var redan installerat på datorerna Ubuntu 18.04.3, Manjaro 18.1.0 och Fedora 31 som användes för att undersöka den här artikeln. Detta är ingen överraskning. sudo har funnits sedan början av 1980-talet och har blivit standardmedlet för superanvändardrift för nästan alla distributioner.

När du installerar en modern distro läggs användaren du skapar under installationen till i en lista över användare som kallas sudoers. Det här är användarna som kan använda kommandot sudo. Eftersom du har sudo-befogenheter kan du använda dem för att lägga till andra användare till listan över sudoers.

Naturligtvis är det hänsynslöst att dela ut full superanvändarstatus villigt, eller till någon som bara har ett partiellt eller specifikt behov. Sudoers-listan låter dig specificera vilka kommandon de olika användarna får använda sudo med. På så sätt ger du dem inte nycklarna till kungariket, men de kan ändå åstadkomma det de behöver göra.

Köra ett kommando som en annan användare

Ursprungligen kallades det ”superuser do”, eftersom du kunde göra saker som superanvändare. Dess räckvidd har utökats nu, och du kan använda sudo för att utföra ett kommando som om du vore vilken användare som helst. Den har bytt namn för att återspegla den nya funktionen. Det kallas nu ”ersättande användare gör.”

För att använda sudo för att köra ett kommando som en annan användare, måste vi använda alternativet -u (användare). Här ska vi köra vem är jag kommando som användaren mary. Om du använder kommandot sudo utan alternativet -u, kör du kommandot som root.

Och naturligtvis, eftersom du använder sudo kommer du att bli ombedd att ange ditt lösenord.

sudo -u mary whoami

Svaret från whoami säger att användarkontot som kör kommandot är mary.

Du kan använda kommandot sudo för att logga in som en annan användare utan att veta deras lösenord. Du kommer att bli ombedd att ange ditt eget lösenord. Vi måste använda alternativet -i (inloggning).

sudo -i -u mary
pwd
whoami
ls -hl
exit

Du är inloggad som mary. Filerna ”.bashrc”, ”.bash_aliases” och ”.profile” för mary användarkontot behandlas exakt som om ägaren till mary användarkontot hade loggat in själv.

Kommandotolken ändras för att återspegla detta är en session för användarkontot mary.
Pwd-kommandot upprepar att du nu är i Mary’s hemkatalog.
whoami berättar för oss att du använder användarkontot mary.
Filerna i katalogen tillhör mary användarkonto.
Exit-kommandot återgår till din vanliga användarkontosession.

Redigera sudoers-filen

För att lägga till användare till listan över personer som kan använda sudo måste du redigera sudoers-filen. Det är mycket viktigt att du bara gör det med hjälp av kommandot visudo. Kommandot visudo hindrar flera personer från att försöka redigera sudoers-filen samtidigt. Det är också utför syntaxkontroll och analys på filinnehållet när du sparar dem.

Om dina redigeringar inte klarar testerna sparas inte filen blint. Du får alternativ. Du kan avbryta och överge ändringarna, gå tillbaka och redigera ändringarna igen, eller tvinga felaktiga ändringar att sparas. Det sista alternativet är en allvarligt dålig idé. Bli inte frestad att göra det. Du kan hamna i en situation där alla av misstag låses ute från att använda sudo.

Även om du startar redigeringsprocessen med kommandot visudo, är visudo inte en redigerare. Den anropar en av dina befintliga redaktörer för att utföra filredigeringarna. På Manjaro och Ubuntu startade visudo-kommandot den enkla redaktören nano. På Fedora lanserade visudo den mer kapabla—men mindre intuitivt—vim.

Om du föredrar att använda nano på Fedora kan du göra det enkelt. Installera först nano:

sudo dnf installera nano

Och sedan måste visudo anropas med detta kommando:

sudo EDITOR=nano visudo

Det ser ut som en bra kandidat för ett alias. Nano-editorn öppnas med sudoers-filen laddad i den.

Lägger till användare i sudogruppen

Använd visudo för att öppna sudoers-filen. Använd antingen det här kommandot eller det som beskrivs ovan för att ange vilken redigerare du vill ha:

sudo visudo

Bläddra igenom sudoers-filen tills du ser definitionen av %sudo-posten.

Procenttecknet indikerar att detta är en gruppdefinition och inte en användardefinition. På vissa distributioner har %sudo-raden en hash # i början av raden. Detta gör raden till en kommentar. Om så är fallet, ta bort hashen och spara filen.

%sudo-raden delas upp så här:

%sudo: Namnet på gruppen.
ALL=: Denna regel gäller för alla värdar på detta nätverk.
(ALLA:ALLA): medlemmar i denna grupp kan köra kommandon som alla användare och alla grupper.
Alla: medlemmar i den här gruppen kan köra alla kommandon.

För att omformulera det lite kan medlemmar i den här gruppen köra vilket kommando som helst, som vilken användare eller vilken grupp som helst, på den här datorn eller på vilken annan värd som helst i detta nätverk. Så ett enkelt sätt att ge någon root-privilegier och möjligheten att använda sudo, är att lägga till dem i sudo-gruppen.

Vi har två användare, Tom och Mary, med användarkonton tom respektive mary. Vi lägger till användarkontot tom till sudo-gruppen med kommandot usermod. Alternativet -G (grupper) anger gruppen vi ska lägga till tom-kontot till. Alternativet -a (lägg till) lägger till denna grupp i listan över grupper som användarkontot tom redan är i. Utan detta alternativ skulle användarkontot tom placeras i den nya gruppen men tas bort från alla andra grupper.

sudo usermod -a -G sudo tom

Låt oss kolla vilka grupper Mary är i:

groups

Användarkontot mary är bara i mary-gruppen.

Låt oss kolla med Tom:

groups

Tom-användarkontot – och därför Tom – finns i grupperna tom och sudo.

Låt oss försöka få Mary att göra något som kräver sudo-privilegier.

sudo less /etc/shadow

Mary kan inte titta in i den begränsade filen ”/etc/shadow.” Hon får ett mildt besked för att hon försöker använda sudo utan tillåtelse. Låt oss hur det går för Tom:

sudo less /etc/shadow

Så snart Tom anger sitt lösenord visas filen /etc/shadow.

Bara genom att lägga till honom i sudo-gruppen har han höjts till eliten bland de som kan använda sudo. Helt obegränsat.

Ge användarna begränsade sudo-rättigheter

Tom har fått fullständiga sudorättigheter. Han kan göra vad som helst som root – eller någon annan i sudogruppen – kan göra. Det kan ge honom mer makt än vad du gärna lämnar över. Ibland finns det ett krav på att en användare ska utföra en funktion som kräver root-privilegier, men det finns inget motiverat fall för att de ska ha full sudo-åtkomst. Du kan uppnå den balansen genom att lägga till dem i sudoers-filen och lista de kommandon de kan använda.

Låt oss träffa Harry, ägaren av användarkontot harry. Han är inte i sudo-gruppen, och han har inga sudo-privilegier.

groups

Det är användbart för Harry att kunna installera programvara, men vi vill inte att han ska ha fulla sudo-rättigheter. Okej inga problem. låt oss tända visudo:

sudo visudo

Bläddra ner genom filen tills du kommer förbi gruppdefinitionerna. Vi kommer att lägga till en rad för Harry. Eftersom detta är en användardefinition och inte en gruppdefinition, behöver vi inte börja raden med ett procenttecken.

Posten för användarkontot harry är:

harry    ALL=/usr/bin/apt-get

Observera att det finns en flik mellan ”harry” och ”ALL=.”

Detta läses som att användarkontot harry kan använda de listade kommandona på alla värdar som är anslutna till detta nätverk. Det finns ett kommando listat, som är ”/usr/bin/apt-get.” Vi kan ge Harry åtkomst till mer än ett kommando genom att lägga till dem i kommandolistan, separerade med kommatecken.

Lägg till raden i sudoers-filen och spara filen. Om du vill dubbelkolla att raden är syntaktisk korrekt kan vi be visudo att skanna filen och kontrollera syntaxen åt oss, genom att använda alternativet -c (endast markera):

sudo visudo -c

Kontrollerna sker och visudo rapporterar att allt är bra. Harry borde nu kunna använda apt-get för att installera programvara men bör vägras om han försöker använda något annat kommando som kräver sudo.

sudo apt-get install finger

Lämpliga sudo-rättigheter har beviljats ​​Harry, och han kan installera programvaran.

Vad händer om Harry försöker använda ett annat kommando som kräver sudo?

sudo shutdown now

Harry hindras från att köra kommandot. Vi har framgångsrikt beviljat honom specifik, begränsad tillgång. Han kan använda det nominerade kommandot och inget annat.

Använda sudoers användaralias

Om vi ​​vill ge Mary samma privilegier kan vi lägga till en rad i sudoers-filen för användarkontot mary på exakt samma sätt som vi gjorde med Harry. Ett annat, snyggare, sätt att uppnå samma sak är att använda ett User_Alias.

i sudoers-filen innehåller ett User_Alias ​​en lista med användarkontonamn. Namnet på User_Alias ​​kan sedan användas i en definition för att representera alla dessa användarkonton. Om du vill ändra privilegierna för dessa användarkonton har du bara en rad att redigera.

Låt oss skapa ett User_Alias ​​och använda det i vår sudoers-fil.

sudo visudo

Scroll down in the file until you come to the User_Alias specification line.


Lägg till User_Alias ​​genom att skriva:

User_Alias INSTALLERS = harry, mary

Varje element separeras av ett mellanslag, inte en tabb. Logiken bryts ner som:

User_Alias: Detta talar om för visudo att detta kommer att bli ett User_Alias.
INSTALLATÖRER: Detta är ett godtyckligt namn för detta alias.
= harry, mary: Listan över användare som ska inkluderas i detta alias.

Nu ska vi redigera raden som vi lade till tidigare för användarkontot harry:

harry    ALL=/usr/bin/apt-get

Ändra så att det står:

INSTALLERS    ALL=/usr/bin/apt-get

Detta säger att alla användarkonton som ingår i definitionen av ”INSTALLERS” User_Alias ​​kan köra kommandot apt-get. Vi kan testa detta med Mary, som nu ska kunna installera mjukvara.

sudo apt-get install colordiff

Mary kan installera programvaran eftersom hon är i ”INSTALLERS” User_Alias ​​och att User_Alias ​​har tilldelats dessa rättigheter.

Tre snabba sudo-trick

När du glömmer att lägga till sudo till ett kommando, skriv

sudo !!

Och det sista kommandot kommer att upprepas med sudo lagt till i början av raden.

När du har använt sudo och autentiserat med ditt lösenord, behöver du inte använda ditt lösenord med ytterligare sudo-kommandon på 15 minuter. Om du vill att din autentisering ska glömmas bort direkt, använd:

sudo -k

Har du någonsin undrat var du kan se misslyckade sudo-kommandoförsök? De går till filen ”/var/log/auth.log”. Du kan se den med:

less /var/log/auth.log

Vi kan se posten för användarkontot mary som var inloggad på TTY pts/1 när hon försökte köra shutdown-kommandot som användarens ”root”.

Med stor kraft…

…kommer möjligheten att delegera delar av det till andra. Nu vet du hur du selektivt ger andra användare möjlighet.