Scroll to navigation

SU(1) Användarkommandon SU(1)

NAMN

su - kör ett kommando med ersättande användar- och grupp-ID

SYNOPSIS

su [flaggor] [-] [användare|UID [argument...]]

BESKRIVNING

su gör att kommandon kan köras med ett ersättande användar- och grupp-ID.

När su anropas utan att användare har angetts körs ett interaktivt skal som standard som root. När användare har angetts kan ytterligare argument anges, och i så fall skickas de till skalet.

För bakåtkompatibilitet är su standardinställningen att inte ändra den aktuella katalogen och att endast ställa in miljövariablerna HOME och SHELL (plus USER och LOGNAME om målets användare inte är root). Det rekommenderas att alltid använda flaggan --login (i stället för dess genväg -) för att undvika biverkningar som orsakas av blandade miljöer.

Den här versionen av su använder PAM för autentisering, konto- och sessionshantering. Vissa konfigurationsflaggor som finns i andra su-implementationer, t.ex. stöd för en wheel-grupp, måste konfigureras via PAM.

su är främst avsett för icke-privilegierade användare, och den rekommenderade lösningen för privilegierade användare (t.ex. skript som körs av root) är att använda kommandot runuser(1), som inte kräver autentisering och ger separat PAM-konfiguration. Om PAM-sessionen inte krävs alls är den rekommenderade lösningen att använda kommandot setpriv(1).

Observera att su i samtliga fall använder PAM (pam_getenvlist(3)) för att göra den slutliga miljömodifieringen. Kommandoradsflaggor som --login och --preserve-environment påverkar miljön innan den modifieras av PAM.

Sedan version 2.38 återställer su processresursgränserna RLIMIT_NICE, RLIMIT_RTPRIO, RLIMIT_FSIZE, RLIMIT_AS och RLIMIT_NOFILE.

FLAGGOR

-c, --command kommando

Skicka kommando till skalet med flaggan -c. Skapar en ny session via setsid(2). Se --session-command för att behålla samma session.

-f, --fast

Skicka -f till skalet, vilket kan vara användbart eller inte beroende på vilket skal det är.

-g, --group grupp

Ange den primära gruppen. Alternativet är bara tillgängligt för root-användaren.

-G, --supp-group grupp

Ange en kompletterande grupp. Alternativet är bara tillgängligt för root-användaren. Den första angivna tilläggsgruppen används också som primärgrupp om flaggan --group inte anges.

-, -l, --login

Starta skalet som ett inloggningsskal med en miljö som liknar en riktig inloggning.

Observera att på system baserade på systemd(1) kan en ny session definieras som en verklig ingångspunkt till systemet. Ur det perspektivet skapar su ingen riktig session (via PAM). Använd verktyg som systemd-run(1) eller machinectl(1) för att starta en fullständig, riktig session.

su gör det:

•clear all the environment variables except TERM, COLORTERM, NO_COLOR and variables specified by --whitelist-environment

•initialize the environment variables HOME, SHELL, USER, LOGNAME, and PATH

•change to the target user’s home directory

•set argv[0] of the shell to '-' in order to make the shell a login shell

-m, -p, --preserve-environment

Bevara hela miljön, d.v.s. ange inte HOME, SHELL, USER eller LOGNAME. Denna flagga ignoreras om flaggan --login har angetts.

-P, --pty

Skapa en pseudoterminal för sessionen. Den oberoende terminalen ger bättre säkerhet eftersom användaren inte delar terminal med den ursprungliga sessionen. Se säkerhetsråden om TIOCSTI-sårbarheten nedan.

Hela sessionen kan också flyttas till bakgrunden (t.ex. su --pty - användare -c program &). Om pseudoterminalen är aktiverad fungerar su som en mellanhand mellan sessionerna (synkroniserar standard in och standard ut).

Den här funktionen är främst avsedd för interaktiva sessioner. Om standardinmatningen inte är en terminal, utan t.ex. en pipe (t.ex. echo "date" | su --pty), inaktiveras flaggan ECHO för pseudoterminalen för att undvika röriga utdata.

-s, --shell skal

Kör det angivna skal i stället för standardinställningen. Om målanvändaren har ett begränsat skal (dvs. inte listat i /etc/shells) ignoreras flaggan --shell och miljövariablerna SHELL om inte den anropande användaren är root.

Det skal som ska köras väljs enligt följande regler, i tur och ordning:

•det skal som anges med --shell

•det skal som anges i miljövariabeln SHELL, om flaggan --preserve-environment används

•det shell som anges i passwd-posten för målanvändaren

•/bin/sh

--session-command=kommando

Samma som -c, men skapa inte en ny session. (Avråds.) Se säkerhetsråden om TIOCSTI-sårbarheten nedan.

-T, --no-pty

Skapa inte en pseudoterminal; motsatsen till --pty och -P. Se säkerhetsråden om TIOCSTI-sårbarheten nedan.

-w, --whitelist-environment lista

Återställ inte de miljövariabler som anges i den kommaseparerade lista när du rensar miljön för --login. Vitlistan ignoreras för miljövariablerna HOME, SHELL, USER, LOGNAME och PATH.

-h, --help

Visa hjälptext och avsluta.

-V, --version

Visa version och avsluta.

SIGNALER

Efter att ha mottagit antingen SIGINT, SIGQUIT eller SIGTERM avslutar su sitt barn och avslutar därefter sig själv med den mottagna signalen. Barnet avslutas med SIGTERM, efter ett misslyckat försök och 2 sekunders fördröjning dödas barnet med SIGKILL.

KONFIGURATIONSFILER

su läser konfigurationsfilerna /etc/default/su och /etc/login.defs. Följande konfigurationsobjekt är relevanta för su:

FAIL_DELAY (nummer)

Fördröjning i sekunder om autentiseringen misslyckas. Talet måste vara ett icke-negativt heltal.

ENV_PATH (sträng)

Definierar miljövariabeln PATH för en vanlig användare. Standardvärdet är /usr/local/bin:/bin:/usr/bin.

ENV_ROOTPATH (sträng), ENV_SUPATH (sträng)

Definierar miljövariabeln PATH för root. ENV_SUPATH har företräde. Standardvärdet är /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin.

ALWAYS_SET_PATH (boolean)

Om värdet är yes och --login och --preserve-environment inte har angetts initierar su PATH.

Miljövariabeln PATH kan vara annorlunda på system där /bin och /sbin är sammanslagna till /usr; denna variabel påverkas också av kommandoradsflaggan --login och PAM-systeminställningen (t.ex. pam_env(8)).

AVSLUTSSTATUS

su returnerar normalt utgångsstatusen för det kommando som det utförde. Om kommandot stoppades av en signal returnerar su signalens nummer plus 128.

Exitstatus genereras av su själv:

1

Generiskt fel innan det begärda kommandot utfördes

126

Det begärda kommandot kunde inte utföras

127

Det begärda kommandot hittades inte

FILER

/etc/pam.d/su

standardkonfigurationsfil för PAM

/etc/pam.d/su-l

PAM-konfigurationsfil om --login anges

/etc/default/su

kommandospecifik logindef-konfigurationsfil

/etc/login.defs

global logindef konfigurationsfil

SÄKERHETSANMÄRKNINGAR

Om su delar terminal med den ursprungliga sessionen kan programmet vara sårbart för utökade privilegier genom kommandoinjektion via ioctl-anropen TIOCSTI/TIOCLINUX. Det finns två inbyggda sätt att förhindra detta: använd su med flaggan -c, som startar en ny session via setsid(2) utan styrande terminal. Om användningsfallet kräver en styrande terminal, exempelvis en interaktiv session, kan du i stället låta su använda en pseudoterminal med flaggan --pty eller -P.

Av säkerhetsskäl loggar su alltid misslyckade inloggningsförsök till filen btmp, men den skriver inte alls till filen lastlog. Den här lösningen kan användas för att kontrollera su beteende genom PAM-konfiguration. Om du vill använda modulen pam_lastlog(8) för att skriva ut varningsmeddelanden om misslyckade inloggningsförsök måste pam_lastlog(8) konfigureras så att den även uppdaterar filen lastlog. Till exempel genom att:

session required pam_lastlog.so nowtmp

HISTORIK

Detta su-kommando härstammar från coreutils su, som baserades på en implementation av David MacKenzie. Util-linux-versionen har omarbetats av Karel Zak.

SE ÄVEN

setpriv(1), login.defs(5), shells(5), pam(8), runuser(1)

FELRAPPORTERING

För felrapporter, använd felhanteraren <https://github.com/util-linux/util-linux/issues>.

TILLGÄNGLIGHET

Kommandot su ingår i paketet util-linux som kan hämtas från Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>.

2026-09-25 util-linux 2.42.4