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 enUser_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.