Hur man kontrollerar sudo Access på Linux

Använda sudo för att hantera behörigheter i Linux

Kommandot sudo ger dig möjlighet att utföra kommandon i Linux som om du vore en annan användare, exempelvis root. Genom att använda sudo kan du också finjustera vem som får tillgång till root-funktioner. Du kan ge användare fullständig behörighet eller begränsa dem till att endast kunna använda en utvald uppsättning kommandon. I den här guiden visar vi hur du gör.

sudo och root-privilegier

Det är en välkänd (förenklad) princip att i Linux behandlas allt som en fil. Det mesta i operativsystemet, från processer, filer, mappar, sockets och pipes, kommunicerar faktiskt med kärnan genom filbeskrivningar. Så även om allt inte bokstavligen är en fil, hanteras de flesta systemobjekt som om de vore det. Linux och Unix-liknande system följer denna princip i största möjliga mån.

Den här ”allt är en fil”-filosofin genomsyrar Linux. Det är enkelt att förstå hur filbehörigheter blev grundläggande för användarnas privilegier och rättigheter. Om du äger en fil eller mapp (en specifik 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örigheter så att andra användare eller grupper kan läsa, ändra eller köra filen. Allt styrs av dessa behörigheter.

Med ett viktigt undantag: superanvändaren, även kallad root. Root-kontot är ett konto med särskilt höga privilegier. Det är inte bundet av behörigheterna som gäller för andra objekt i operativsystemet. Root-användaren kan göra vad som helst, med vad som helst, när som helst.

Den som har tillgång till root-lösenordet kan göra samma sak. Det finns en risk för att de kan ställa till med problem, medvetet eller oavsiktligt. Faktum är att även root-användaren kan ställa till med problem genom att göra misstag. Ingen är perfekt. Det är en riskabel situation.

Därför är det numera rekommenderat att undvika att logga in direkt som root. Logga in med ett vanligt användarkonto och använd sudo för att få de privilegier du behöver under den korta tid du behöver dem. Ofta handlar det bara om att utföra ett enstaka kommando.

Listan över sudoers

sudo var redan installerat på de datorer med Ubuntu 18.04.3, Manjaro 18.1.0 och Fedora 31 som användes för denna artikel. Detta är ingen överraskning. sudo har funnits sedan tidigt 1980-tal och har blivit standardmetoden för att använda superanvändarfunktioner i de flesta Linuxdistributioner.

När du installerar en modern Linuxdistribution läggs den användare du skapar under installationen till i en lista som kallas ”sudoers”. Det är användare som har rätt att använda sudo-kommandot. Eftersom du har sudo-behörighet kan du i din tur lägga till andra användare i sudoers-listan.

Det är givetvis riskabelt att ge full superanvändarbehörighet till vem som helst, eller till någon som bara har ett delvis eller specifikt behov. Sudoers-listan ger dig möjlighet att bestämma vilka kommandon en användare kan använda sudo med. På så sätt ger du dem inte full kontroll, men de kan ändå utföra sina uppgifter.

Kör kommandon som en annan användare

Från början hette kommandot ”superuser do” eftersom det lät dig göra saker som superanvändare. Nu har kommandots användningsområde utvidgats, och du kan använda sudo för att utföra kommandon som om du vore vilken användare som helst. Namnet har också ändrats för att återspegla den nya funktionaliteten: ”substitute user do.”

För att köra ett kommando som en annan användare med sudo, använder vi alternativet -u (user). Här ska vi använda kommandot whoami som användaren mary. Om du använder kommandot sudo utan alternativet -u, körs kommandot som root.

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

sudo -u mary whoami

Utdata från whoami visar att användarkontot som kör kommandot är mary.

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

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

Du är nu inloggad som mary. Filerna ”.bashrc”, ”.bash_aliases” och ”.profile” för användarkontot mary behandlas på samma sätt som om användaren mary själv hade loggat in.

Kommandotolken ändras för att visa att det är en session för användarkontot mary.
Kommandot pwd bekräftar att du befinner dig i Marys hemkatalog.
whoami talar om att du använder användarkontot mary.
Filerna i katalogen tillhör användarkontot mary.
Kommandot exit återgår till din vanliga användarsession.

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 viktigt att du gör detta endast med kommandot visudo. visudo förhindrar att flera personer redigerar sudoers-filen samtidigt. Det utför också syntaxkontroller och analyser av filinnehållet när du sparar det.

Om dina ändringar inte klarar testerna sparas inte filen automatiskt. Du får valmöjligheter. Du kan avbryta och förkasta ändringarna, gå tillbaka och redigera igen, eller tvinga att felaktiga ändringar ska sparas. Det sista alternativet är en väldigt dålig idé. Låt dig inte frestas. Du riskerar att låsa ute alla från att använda sudo.

Även om du startar redigeringsprocessen med kommandot visudo, är visudo inte en redigerare i sig. Den anropar en av dina befintliga textredigerare för att utföra filändringarna. På Manjaro och Ubuntu startade visudo den enkla redigeraren nano. På Fedora startade visudo den mer avancerade, men mindre intuitiva, redigeraren vim.

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

sudo dnf installera nano

Och sedan anropar du visudo med det här kommandot:

sudo EDITOR=nano visudo

Detta är en bra kandidat för ett alias. Nu öppnas nano med sudoers-filen inläst.

Lägga till användare i sudogruppen

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

sudo visudo

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

Procenttecknet anger att detta är en gruppdefinition och inte en användardefinition. I vissa distributioner har %sudo-raden en hash # i början av raden. Detta gör raden till en kommentar. Om det är fallet tar du bort hashen och sparar filen.

%sudo-raden är uppbyggd på följande sätt:

  • %sudo: Namnet på gruppen.
  • ALL=: Denna regel gäller för alla datorer i nätverket.
  • (ALL:ALL): Medlemmar i den här gruppen kan köra kommandon som alla användare och alla grupper.
  • ALL: Medlemmar i den här gruppen kan köra alla kommandon.

Med andra ord kan medlemmar i den här gruppen köra vilket kommando som helst, som vilken användare eller grupp som helst, på den här datorn eller på valfri annan dator i nätverket. Ett enkelt sätt att ge någon root-behörighet 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 och mary. Vi lägger till användarkontot tom i sudo-gruppen med kommandot usermod. Alternativet -G (grupper) specificerar gruppen vi lägger till kontot tom till. Alternativet -a (add) lägger till den här gruppen i listan över grupper som tom redan tillhör. Utan det här alternativet skulle användarkontot tom läggas i den nya gruppen, men tas bort från alla andra grupper.

sudo usermod -a -G sudo tom

Låt oss kontrollera vilka grupper Mary tillhör:

groups

Användarkontot mary tillhör endast gruppen mary.

Låt oss nu kolla Tom:

groups

Användarkontot tom, och därmed Tom, finns i grupperna tom och sudo.

Låt oss testa om Mary kan göra något som kräver sudo-privilegier.

sudo less /etc/shadow

Mary får inte läsa den känsliga filen ”/etc/shadow”. Hon får ett meddelande om att hon försöker använda sudo utan tillåtelse. Låt oss se hur det går för Tom:

sudo less /etc/shadow

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

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

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

Tom har fått fullständiga sudo-rättigheter. Han kan göra allt som root, eller någon annan i sudo-gruppen, kan göra. Det kan ge honom mer makt än vad du vill ge honom. Ibland finns det behov av att en användare ska kunna utföra en funktion som kräver root-privilegier, men det finns ingen anledning att de ska ha full sudo-behörighet. Du kan uppnå detta genom att lägga till dem i sudoers-filen och specificera vilka kommandon de kan använda.

Låt oss ta Harry, ägare av användarkontot harry. Han är inte i sudo-gruppen och har inga sudo-privilegier.

groups

Det vore bra om Harry kunde installera programvara, men vi vill inte att han ska ha full sudo-rättighet. Inga problem. Vi öppnar visudo:

sudo visudo

Bläddra ner genom filen tills du har passerat gruppdefinitionerna. Vi lägger till en rad för Harry. Eftersom det här är en användardefinition och inte en gruppdefinition, behöver vi inte inleda raden med ett procenttecken.

Posten för användarkontot harry ser ut så här:

harry    ALL=/usr/bin/apt-get

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

Detta betyder att användarkontot harry kan använda de listade kommandona på alla datorer i det här nätverket. Det finns ett kommando listat: ”/usr/bin/apt-get”. Vi kan ge Harry tillgång 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 den. Om du vill kontrollera att raden är syntaktiskt korrekt kan du be visudo att genomsöka filen och kontrollera syntaxen med alternativet -c (check only):

sudo visudo -c

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

sudo apt-get install finger

Harry får de sudo-rättigheter han behöver, och 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 lyckats ge honom specifika, begränsade rättigheter. Han kan bara använda de angivna kommandona.

Använda sudoers User_Alias

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

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

Låt oss skapa en User_Alias och använda den 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 med ett mellanslag, inte en tabulator. Logiken kan brytas ner så här:

  • User_Alias: Detta talar om för visudo att detta är en User_Alias.
  • INSTALLERS: Det här är ett valfritt namn på det här aliaset.
  • = harry, mary: Listan med användare som ska ingå i det här aliaset.

Nu redigerar vi raden som vi la till tidigare för användarkontot harry:

harry    ALL=/usr/bin/apt-get

Ändra den så att den ser ut så hä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 programvara.

sudo apt-get install colordiff

Mary kan installera programvaran eftersom hon ingår i INSTALLERS User_Alias och detta User_Alias har tilldelats dessa rättigheter.

Tre snabba sudo-tips

När du glömmer att lägga till sudo till ett kommando skriver du:

sudo !!

Och det senaste kommandot kommer att upprepas med sudo i början av raden.

När du har använt sudo och autentiserat dig med ditt lösenord, behöver du inte ange lösenordet på ytterligare sudo-kommandon inom 15 minuter. Om du vill att autentiseringen ska glömmas bort direkt, använder du:

sudo -k

Har du någonsin undrat var du kan se misslyckade försök att använda sudo? De registreras i filen ”/var/log/auth.log”. Du kan se den med:

less /var/log/auth.log

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

Med stor makt…

…kommer möjligheten att delegera delar av den till andra. Nu vet du hur du selektivt kan ge behörighet till andra användare.