sudo(8): Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
(Skapade sidan med '= sudo(8) = == NAMN == sudo, sudoedit — kör ett kommando som en annan användare == SYNOPSIS == <pre> sudo -h | -K | -k | -V sudo -v [-ABkNnS] [-g grupp] [-h värd] [-p prompt] [-u användare] sudo -l [-ABkNnS] [-g grupp] [-h värd] [-p prompt] [-U användare] [-u användare] [kommando [arg ...]] sudo [-ABbEHnPS] [-C num] [-D katalog] [-g grupp] [-h värd] [-p prompt] [-R katalog] [-T timeout] [-u användare] [VAR=värde] [-i | -s] [kommando [arg ...]] sudoedit [-AB...')
(Ingen skillnad)

Versionen från 31 augusti 2025 kl. 16.03

sudo(8)

NAMN

sudo, sudoedit — kör ett kommando som en annan användare

SYNOPSIS

sudo -h | -K | -k | -V
sudo -v [-ABkNnS] [-g grupp] [-h värd] [-p prompt] [-u användare]
sudo -l [-ABkNnS] [-g grupp] [-h värd] [-p prompt] [-U användare] [-u användare] [kommando [arg ...]]
sudo [-ABbEHnPS] [-C num] [-D katalog] [-g grupp] [-h värd] [-p prompt] [-R katalog] [-T timeout] [-u användare] [VAR=värde] [-i | -s] [kommando [arg ...]]
sudoedit [-ABkNnS] [-C num] [-D katalog] [-g grupp] [-h värd] [-p prompt] [-R katalog] [-T timeout] [-u användare] fil ...

BESKRIVNING

sudo låter en behörig användare köra ett kommando som superuser (root) eller som en annan användare, enligt säkerhetspolicyn (vanligen sudoers). Sudo har en insticksarkitektur för policy, loggning och I/O-loggning. Standardpolicyn sudoers konfigureras via /etc/sudoers eller LDAP (se sudoers(5)).

Policyn avgör vilka privilegier användaren har, om autentisering krävs, hur länge inloggningsuppgifter cache:as (typiskt 5 minuter per terminal), och om I/O ska loggas. visudo(8) bör användas för att redigera /etc/sudoers för att undvika syntaxfel.

När sudo anropas som sudoedit är flaggan -e underförstådd: filer redigeras via temporära kopior med policykontroller som förhindrar t.ex. symboliska länkar.

Flaggor

Nedan följer alla relevanta flaggor. Om inte annat anges kan varje flagga anges högst en gång.

-A, --askpass
Läs lösenord via ett hjälpprogram (grafiskt eller text). Sökväg kan sättas i SUDO_ASKPASS eller i /etc/sudo.conf (Path askpass ...).
-B, --bell
Pinga terminalklockan som del av lösenordsprompten (ingen effekt med askpass).
-b, --background
Kör kommando i bakgrunden. Jobbkontroll i skalet fungerar inte för sådana processer.
-C, --close-from=num
Stäng alla fildeskriptorer ≥ num före exekvering (minst 3). Kan begränsas av policy (closefrom_override i sudoers).
-D, --chdir=katalog
Kör kommando i angiven arbetskatalog (policy kan neka).
-E, --preserve-env
Begär att miljövariabler behålls. Policyn kan neka.
--preserve-env=lista
Lägg till en kommaseparerad lista av variabler som ska bevaras. Kan upprepas. Policyn kan neka.
-e, --edit
Redigera en eller flera filer i stället för att köra ett kommando (motsvarar sudoedit). Sudo skapar temporära kopior, kör editor (från SUDO_EDITOR, VISUAL, EDITOR eller editor-inställningen i sudoers) och skriver sedan tillbaka. Begränsningar för att förhindra otillåten redigering, t.ex.:
• Symboliska länkar får inte redigeras (>= 1.8.15)
• Sökvägsled som är skrivbara av anroparen följs inte (>= 1.8.16)
• Filer i skrivbara kataloger får inte redigeras (>= 1.8.16)
Enhetsfiler kan aldrig redigeras. Om fil inte finns skapas den. Editorn körs med användarens miljö. Vid fel sparas temporärfilen.
-g, --group=grupp
Kör med primärgrupp grupp (namn eller #GID). Om -u inte anges körs som anroparen men med primärgruppen satt till grupp. Sudoers tillåter mål-användarens grupper här om inte -P används.
-H, --set-home
Sätt HOME till mål-användarens hemkatalog (kan vara standard beroende på policy).
-h, --help
Visa kort hjälputskrift.
-h, --host=värd
Kör kommando på angiven värd om policy-plugin stödjer detta. (Sudoers gör normalt inte det.) Kan kombineras med -l för listning av rättigheter på fjärrvärd.
-i, --login
Kör mål-användarens skal som inloggningsskal (läser t.ex. .profile, .bash_profile, .login). Med kommando skickas det som -c "kommando". Sudo försöker byta till mål-användarens hemkatalog. Påverkar miljön enligt sudoers(5) (Command environment).
-K, --remove-timestamp
Ta bort alla cache:ade autentiseringsuppgifter för användaren (alla terminaler). Kan inte kombineras med kommando. Kräver inget lösenord.
-k, --reset-timestamp
Utan kommando: ogiltigförklara aktuell sessions cache; nästa sudo kräver lösenord om policy kräver det. Med kommando: ignorera cache och begär lösenord; uppdaterar inte cache. Kräver inget lösenord för att endast nolla cachen.
-l, --list
Utan kommando: lista anroparens (eller den i -U angivna) rättigheter på aktuell värd; upprepas för mer detaljer om policy stödjer det. Med kommando: visa full sökväg och argument om tillåtet; annars avslutas med status 1.
-N, --no-update
Uppdatera inte cache:ade uppgifter även om autentisering lyckas. sudo -Nnv kan användas för att testa om autentisering krävs/cachen är giltig.
-n, --non-interactive
Fråga aldrig efter inmatning; om lösenord behövs ges fel och avslut.
-P, --preserve-groups
Behåll anroparens gruppvektor oförändrad. (Annars sätter sudoers gruppvektorn till mål-användarens grupper. Real/effective GID sätts ändå till mål-användaren.)
-p, --prompt=prompt
Anpassad lösenordsprompt. Följande %-ersättningar stöds av sudoers:
%H = fullständigt värdnamn (FQDN)
%h = kort värdnamn
%p = namnet vars lösenord efterfrågas (respekterar rootpw/targetpw/runaspw)
%U = mål-användare (default root om inte -u)
%u = anroparens namn
%% = ett bokstavligt %
Överstyr SUDO_PROMPT och PAM-prompt om passprompt_override inte är avstängd.
-R, --chroot=katalog
Kör kommando i en chroot-miljö (se chroot(8)). Policy kan neka.
-S, --stdin
Skriv prompt till stderr och läs lösenord från stdin (i stället för terminal).
-s, --shell
Kör skalet i SHELL-miljövariabeln (eller anroparens skal). Med kommando skickas det som -c "kommando". Utan kommando: interaktivt skal.
-U, --other-user=användare
Med -l: lista rättigheter för given användare i stället för anroparen. Begränsas av policy; i sudoers får endast root eller användare med särskild ”list”-behörighet (eller rätt att köra vad som helst som root/den användaren) använda detta.
-T, --command-timeout=sekunder
Sätt timeout för kommando (avbryts om tiden löper ut). Policyn kan kräva explicit tillåtelse.
-u, --user=användare
Kör som annan användare än standard (vanligen root). användare kan vara namn eller #UID. Sudoers kan tillåta UID som saknas i passwd så länge targetpw inte används.
-V, --version
Visa version för sudo och laddade plugins; som root visas även byggkonfigurationsflaggor.
-v, --validate
Förläng giltighet för cache:ade uppgifter (typiskt 5 min) utan att köra kommando. Beror på policy.
--
Markerar slut på sudo-flaggor; efterföljande flaggor skickas till kommando.

Miljövariabler som argument

Miljövariabler kan anges som VAR=värde före kommandot (t.ex. LD_LIBRARY_PATH=/usr/local/lib). De underkastas samma begränsningar som befintliga miljövariabler enligt policy. Med sudoers och setenv/SETENV/ALL kan användaren tillåtas sätta annars förbjudna variabler (se sudoers(5)).

KOMMANDOKÖRNING

När sudo kör ett kommando anger säkerhetspolicyn vilken exekveringsmiljö som används. Vanligtvis sätts real och effektiv UID/GID till mål-användarens värden enligt lösenordsdatabasen, gruppvektorn initialiseras utifrån gruppdatabasen (om inte -P används), och miljö, umask, arbetskatalog m.m. sätts enligt policy.

Säkerhetspolicyn kan bestämma:

  • real och effektiv UID
  • real och effektiv GID
  • kompletterande grupper
  • miljövariabler
  • arbetskatalog
  • filrättighetsmask (umask)
  • schemaläggningsprioritet (nice-värde)

Processmodell

Det finns två sätt som sudo kan köra ett kommando:

  • **Med pty och monitor**:
 Om I/O-loggning används eller policy kräver det skapas en pseudoterminal och en sekundär sudo-process (monitor). Monitorn skapar ny terminalsession, forkar ett barn och kör kommandot via execve(2). Monitorn förmedlar jobbsignaler (t.ex. Ctrl+C) så att kommandot kan pausas/återupptas normalt. När kommandot avslutas returnerar monitorn status till huvudprocessen som loggar och avslutas. (Standard från version 1.9.14 och uppåt när sudoers används.)
  • **Utan pty**:
 sudo forkar, sätter miljön och kör kommandot direkt via execve(2). Huvudprocessen väntar på status, loggar och avslutas. Om policyn inte har en close-funktion kan kommandot köras direkt utan fork. (Standard före 1.9.14.)

På system med PAM stänger policyns close-funktion PAM-sessionen och kan logga exitstatus.

Signalhantering

När kommandot körs som barnprocess vidarebefordrar sudo signaler (t.ex. SIGINT, SIGQUIT) till kommandot. Dessa reläas endast om kommandot körs i ny pty eller signalen kom från en användarprocess. Detta förhindrar dubbel SIGINT vid Ctrl+C. Signaler som SIGSTOP och SIGKILL kan inte fångas och vidarebefordras därför inte. sudo reläar inte heller signaler som skickats av kommandot självt (förhindrar självdöd).

Specialfall: reboot(8) skickar SIGTERM till alla processer före omstart. sudo undviker att reläa denna till reboot självt, annars kan systemet hamna i halvstängt läge. Skript som kör reboot/shutdown via system() kan dock skapa detta problem – använd exec()-familjen istället.

Insticksmoduler (Plugins)

Plugins anges i /etc/sudo.conf via Plugin-rader. De kan vara dynamiska bibliotek eller inbyggda. Om inga plugins anges används sudoers som policy-, logg- och I/O-plugin. Se sudo.conf(5) och sudo_plugin(5) för detaljer.

RETURVÄRDEN

  • Om kommandot körs framgångsrikt returnerar sudo samma exitstatus som kommandot. Om kommandot avslutas med signal skickar sudo samma signal till sig självt.
  • Med -l utan kommando: exit 0 om användaren får köra sudo och autentisering lyckas; annars fel.
  • Med -l och kommando: exit 0 om kommandot tillåts, annars 1.
  • Vid autentiseringsfel, policyfel eller om kommandot inte kan exekveras: exit 1. Felmeddelande skrivs till stderr. Om PATH innehåller ogiltiga kataloger kan stat(2) misslyckas → fel på stderr. (Vanligt vid otillgänglig automounter.)

SÄKERHETSNOTER

sudo försöker vara säkert vid körning av externa kommandon.

  • För att undvika ”command spoofing” placeras . och "" (nuvarande katalog) sist i PATH. Policyn kan dessutom ändra eller ersätta PATH.
  • Användare bör aldrig få köra kommandon via sudo som ligger i kataloger skrivbara för dem själva. Då kan de ersätta filen och få obegränsad åtkomst.
  • Som standard loggas endast det kommando som sudo explicit kör. Om man kör sudo su eller sudo sh gäller inte sudoers-policy för efterföljande kommandon. (I/O-loggning kan dock fånga input/output, men inte som separata poster.) Därför bör man vara försiktig med att ge åtkomst till kommandon som kan ge skalutvägar.
  • sudo stänger av core dumps under sin egen körning för att förhindra informationsläckor (de återställs för kommandot). Detta kan ändras med Set disable_coredump false i sudo.conf.

MILJÖVARIABLER

sudo använder följande variabler (faktiskt innehåll styrs av policy):

EDITOR
Standardeditor i -e-läge (sudoedit), om varken SUDO_EDITOR eller VISUAL är satta.
MAIL
Sätts till mål-användarens mailbox vid -i eller om env_reset gäller i sudoers.
HOME
Mål-användarens hem vid -i/-H/-s (om set_home), eller om always_set_home/env_reset används.
LOGNAME
Sätts till mål-användarens inloggningsnamn vid -i, om set_logname gäller, eller om env_reset används.
PATH
Kan ändras av policy.
SHELL
Skal att använda med -s.
SUDO_ASKPASS
Hjälpprogram för att läsa lösenord (om -A eller ingen terminal).
SUDO_COMMAND
Fullständigt kommando som kördes inkl. argument (trunkeras vid 4096 tecken).
SUDO_EDITOR
Standardeditor för sudoedit.
SUDO_GID
GID för anroparen.
SUDO_HOME
Hemkatalog för anroparen.
SUDO_PROMPT
Standardlösenordsprompt (överskrids av -p).
SUDO_PS1
Om satt, används som PS1 i det körda programmet.
SUDO_UID
UID för anroparen.
SUDO_USER
Inloggningsnamn för anroparen.
USER
Samma värde som LOGNAME.
VISUAL
Editor för sudoedit om SUDO_EDITOR inte är satt.

FILER

/etc/sudo.conf

Konfigurationsfil för sudo-frontenden.

EXEMPEL

Följande exempel förutsätter en korrekt konfigurerad policy:

  • Lista innehåll i en skyddad katalog:
$ sudo ls /usr/local/protected
  • Lista hemkatalogen för användaren yaz (på system där ~yaz inte exporteras som root):
$ sudo -u yaz ls ~yaz
  • Redigera filen index.html som användaren www:
$ sudoedit -u www ~www/htdocs/index.html
  • Visa systemloggar som endast root/adm-grupp får läsa:
$ sudo -g adm more /var/log/syslog
  • Kör en editor som jim men med primärgrupp audio:
$ sudoedit -u jim -g audio ~jim/sound.txt
  • Stäng av en maskin:
$ sudo shutdown -r +15 "quick reboot"
  • Skapa en användningslista för kataloger under /home (via subshell):
$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"

DIAGNOSTIK

Felmeddelanden från sudo kan bl.a. vara:

editing files in a writable directory is not permitted
sudoedit vägrar redigera filer i kataloger skrivbara av anroparen (för att undvika race condition). Styrs av sudoedit_checkdir i sudoers(5).
editing symbolic links is not permitted
sudoedit följer inte symboliska länkar (styrs av sudoedit_follow i sudoers(5)).
effective uid is not 0, is sudo installed setuid root?
sudo kördes utan root-privilegier. Binären måste ägas av root och ha setuid-bit satt, och inte ligga på nosuid-monterat filsystem.
effective uid is not 0, is sudo on a filesystem with the 'nosuid' option ...
Binären har rätt ägare/behörighet men kördes ändå utan root-privilegier (vanligt på NFS eller nosuid-mount).
fatal error, unable to load plugins
Plugins i sudo.conf kunde inte laddas.
invalid environment variable name
Någon variabel angiven via -E innehöll '=' i namnet (inte tillåtet).
no password was provided
Inget lösenord lästes (t.ex. om stdin är /dev/null).
a terminal is required to read the password
Ingen terminal fanns tillgänglig. Lösning: ssh -t eller använd -S/askpass.
no writable temporary directory found
sudoedit hittade ingen skrivbar temporärkatalog.
The "no new privileges" flag is set, which prevents sudo from running as root
sudo kördes i en container med flaggan ”no new privileges”. Förhindrar setuid. Måste inaktiveras i containerkonfigurationen.
sudo must be owned by uid 0 and have the setuid bit set
Binären har fel ägare eller saknar setuid.
sudoedit is not supported on this platform
sudoedit stöds ej på systemet.
timed out reading password
Lösenordet matades inte in innan timeout (standard 5 minuter).
you do not exist in the passwd database
Användarens UID saknas i passwd-databasen.
you may not specify environment variables in edit mode
Endast tillåtet att ange miljövariabler när kommando körs, inte i editläge.

SE ÄVEN

su(1), stat(2), login_cap(3), passwd(5), sudo.conf(5), sudo_plugin(5), sudoers(5), sudoers_timestamp(5), sudoreplay(8), visudo(8)

HISTORIK

Se filen HISTORY.md i sudo-distributionen: https://www.sudo.ws/about/history/

FÖRFATTARE

Många personer har bidragit till sudo genom åren. Nuvarande version består huvudsakligen av kod skriven av:

Todd C. Miller

För en fullständig lista, se CONTRIBUTORS.md i distributionen: https://www.sudo.ws/about/contributors/

VARNINGAR (CAVEATS)

  • Det finns inget enkelt sätt att hindra en användare från att få ett rootskal om de får köra godtyckliga kommandon via sudo.
  • Många program (t.ex. textredigerare) tillåter att man kör kommandon via ”shell escapes”, vilket kringgår sudo:s kontroller. I sudoers kan detta begränsas med noexec.
  • Att köra cd via sudo är meningslöst, eftersom skalet inte byter katalog efter att kommandot avslutats:
$ sudo cd /usr/local/protected
 Använd istället -D för att byta katalog för det körda kommandot.  
  • Att köra skalskript via sudo kan exponera samma kärnbuggar som gör setuid-skript osäkra på vissa system (om systemet har /dev/fd/ är det dock oftast säkert).

BUGGAR

Om du hittar ett fel i sudo, rapportera via:

Säkerhetsproblem ska **inte** rapporteras på Bugzilla, GitHub eller publika listor. Skicka istället till: <sudo@sudo.ws> eller direkt till Todd C. Miller <Todd.Miller@sudo.ws> (PGP-nycklar: https://www.sudo.ws/dist/PGPKEYS).

SUPPORT

Begränsat gratisstöd finns via sudo-users-listan: https://www.sudo.ws/mailman/listinfo/sudo-users

ANSVARSFRISKRIVNING

sudo tillhandahålls ”I BEFINTLIGT SKICK”. Alla uttryckliga eller underförstådda garantier, inklusive men inte begränsade till garantier för säljbarhet eller lämplighet för visst ändamål, friskrivs. Se LICENSE.md i distributionen eller https://www.sudo.ws/about/license/.

COLOPHON

Denna manualsida är en del av sudo-projektet (”execute a command as another user”). Projektets webbplats: https://www.sudo.ws/

HTML-versionen av denna sida hämtades från projektets upstream-repository: https://github.com/sudo-project/sudo Senaste kända commit: 2025-01-21.

Problem med HTML-versionen eller förbättringsförslag för denna colophon (som inte är del av originalmanualen) kan rapporteras till: man-pages@man7.org

Sidslut

Orginalhemsidan på Engelska : https://man7.org/linux/man-pages/man8/sudo.8.html Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp som har sponsrat Linux.se med webbhotell.