su-commando: verschil tussen su en su -, sudo su en sudo -i, en zo wissel je van account

TestomgevingRHEL-familieAlmaLinux 9.8util-linux 2.37root-accountDebian 12 · util-linux 2.38 gewoon accountGecontroleerd op 2026-11-05
Opdrachten uitvoeren met een ander account

Wil je in Linux opdrachten uitvoeren met een ander account zonder uit te loggen bij het huidige account, dan gebruik je het su-commando. Bij een vergelijking waarbij su werd uitgevoerd vanaf het root-account van een AlmaLinux 9-server naar daemon, een systeemaccount dat niet kan inloggen, veranderde één koppelteken de werkmap en PATH, en liep de opdracht pas nadat er een shell was opgegeven.

De uitvoer hieronder komt van een AlmaLinux 9.8-server (root-account) en een Debian 12-server (gewoon account). De wachtwoordvragen en sudo zijn niet op een productieserver uitgevoerd maar samengevat volgens de officiële handleidingen, en een deel van de PATH-waarde en het patchversienummer van util-linux in de simulator zijn vervangen door voorbeeldwaarden.

1️⃣ Zo gebruik je het su-commando

  • ↪️ Basisvorm en terug met exit

De basisvorm is [su accountnaam], en als je de accountnaam weglaat, wisselt su naar root. Typ je exit in de nieuwe shell, dan stopt die shell en ga je terug naar de shell van het oorspronkelijke account dat su uitvoerde.

Voer je het uit vanaf een gewoon account, dan typ je bij de regel Password: het wachtwoord van het doelaccount (volgens de standaardinstelling van PAM). Op deze server slaat /etc/pam.d/su de authenticatie over als root het uitvoert, daarom werd er geen wachtwoord gevraagd bij het wisselen van het root-account naar daemon.

su --help

Usage:
 su [options] [-] [<user> [<argument>...]]

Change the effective user ID and group ID to that of <user>.
A mere - implies -l.  If <user> is not given, root is assumed.

Options:
 -m, -p, --preserve-environment      do not reset environment variables
 -w, --whitelist-environment <list>  don't reset specified variables

 -g, --group <group>             specify the primary group
 -G, --supp-group <group>        specify a supplemental group

 -, -l, --login                  make the shell a login shell
 -c, --command <command>         pass a single command to the shell with -c
 --session-command <command>     pass a single command to the shell with -c
                                   and do not create a new session
 -f, --fast                      pass -f to the shell (for csh or tcsh)
 -s, --shell <shell>             run <shell> if /etc/shells allows it
 -P, --pty                       create a new pseudo-terminal

 -h, --help                      display this help
 -V, --version                   display version

For more details see su(1).

Zoals de help vermeldt, is het koppelteken [-] de login-optie, gelijk aan [-l], en argumenten na de accountnaam gaan naar de shell van het doelaccount. Op de AlmaLinux 9-server kwam su uit het pakket util-linux 2.37 en op de Debian 12-server uit het pakket 2.38.

su --version
su from util-linux 2.38.1

Of het account waarnaar je wilt wisselen een shell kan openen, zie je in het laatste veld van de regel uit getent passwd.

getent passwd daemon
daemon:x:2:2:daemon:/sbin:/sbin/nologin

De shell van daemon was /sbin/nologin. Bij een account met nologin in plaats van een login-shell opent su geen shell, ook niet na het wisselen.

2️⃣ Verschil tussen su en su -

  • ↪️ Login-shell en omgevingsvariabelen

Met een koppelteken (-) opent su dezelfde shell die je krijgt als je inlogt met het doelaccount. In de map /tmp werd dezelfde opdracht één keer zonder en één keer met koppelteken uitgevoerd.

su -s /bin/sh -c pwd daemon
/tmp
su - -s /bin/sh -c pwd daemon
/usr/sbin

Zonder koppelteken bleef de werkmap /tmp, terwijl [su -] naar de thuismap van daemon, /sbin, ging. Op deze server is /sbin een link naar /usr/sbin, daarom toonde pwd /usr/sbin.

Van de omgevingsvariabelen werden alleen vijf regels uit de uitvoer van env vergeleken: HOME, USER, SHELL, PATH en LOGNAME.

su -s /bin/sh -c env daemon | grep -E '^(HOME|USER|SHELL|PATH|LOGNAME)='
SHELL=/bin/sh
LOGNAME=daemon
HOME=/sbin
USER=daemon
PATH=/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
su - -s /bin/sh -c env daemon | grep -E '^(HOME|USER|SHELL|PATH|LOGNAME)='
SHELL=/bin/sh
LOGNAME=daemon
HOME=/sbin
USER=daemon
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin

HOME, USER en LOGNAME kregen in beide gevallen de waarden van daemon. Zonder koppelteken hield PATH de waarde van root, dat su uitvoerde, en met [su -] werd PATH opnieuw ingesteld volgens de login-instellingen.

Volgens de officiële handleiding verandert su zonder koppelteken alleen HOME en SHELL, en verandert het USER en LOGNAME alleen mee als het doelaccount niet root is. Wissel je dus vanaf een gewoon account zonder koppelteken naar root, dan blijft in USER de oorspronkelijke accountnaam staan.

Ook [$0], dat de naam van de shell toont, was anders.

su -s /bin/sh -c 'echo $0' daemon
sh
su - -s /bin/sh -c 'echo $0' daemon
-sh

Bij [su -] stond er een koppelteken voor de naam van de shell en verscheen -sh. Een shell waarvan de naam met een koppelteken begint, werkt als login-shell en leest de login-configuratiebestanden (volgens de officiële handleiding). De verschillen tussen de twee vormen zie je hieronder.

Vergelijkingsusu -
WerkmapOngewijzigd (/tmp)Thuismap van het doelaccount (/usr/sbin)
HOME, USER, LOGNAMEWaarde van daemonWaarde van daemon
PATHWaarde van root, dat su uitvoerdeOpnieuw ingesteld door de login-instellingen
Naam van de shell ($0)sh-sh (login-shell)
Andere omgevingsvariabelenBlijven behoudenGewist op enkele na, zoals TERM (volgens de officiële handleiding)

De officiële handleiding raadt aan altijd de login-optie mee te geven zodat omgevingen niet door elkaar lopen, en [--login] te schrijven in plaats van het koppelteken. su zonder koppelteken behoudt de huidige map en PATH, dus als je een opdracht wilt controleren met de instellingen van een ander account, kan het resultaat afwijken van [su -].

3️⃣ Opties su -c en su -s

  • ↪️ Eén opdracht uitvoeren en de shell opgeven

Om maar één opdracht met een ander account uit te voeren zonder een shell te openen, zet je de opdracht achter -c. Toen id met [su -c] werd uitgevoerd op het nologin-account, verscheen een weigeringsmelding in plaats van de uitvoer van de opdracht.

su -c id daemon
This account is currently not available.

Ook een opdracht die je met -c meegeeft, wordt door de shell van het account uitgevoerd, dus als die shell nologin is, komt de opdracht nooit aan de beurt. Geef dan met -s de shell op die moet worden uitgevoerd.

su -s /bin/sh -c id daemon
uid=2(daemon) gid=2(daemon) groups=2(daemon)

Met /bin/sh liep id als UID 2 van daemon. Gebruik deze vorm om bestandsrechten of opdrachtresultaten met een serviceaccount te controleren.

Is de shell van het doelaccount een beperkte shell die niet in /etc/shells staat, zoals nologin, dan kan alleen root de shell met -s wijzigen. Volgens de officiële handleiding worden -s en de variabele SHELL van een andere gebruiker dan root in dat geval genegeerd.

Bevat de opdracht achter -c spaties, zet hem dan tussen aanhalingstekens zodat hij als één geheel wordt doorgegeven. su geeft de exitcode van de uitgevoerde opdracht ongewijzigd terug, 126 als de opdracht niet kon worden uitgevoerd en 127 als hij niet werd gevonden (volgens de officiële handleiding).

📌 Belangrijkste opties: resultaten uit dit artikel

OptieTaakResultaat in dit artikel
-Opent dezelfde shell als bij inloggen met het doelaccount en gaat naar de thuismap van dat accountVanuit /tmp gaf pwd zonder koppelteken /tmp en met koppelteken /usr/sbin, en echo $0 gaf -sh
-c opdrachtVoert één opdracht uit met de shell van het doelaccount zonder een shell te openensu -c id daemon op het nologin-account daemon gaf [This account is currently not available.]
-s shellVoert de opgegeven shell uit in plaats van die van het account; bij accounts met een beperkte shell alleen rootsu -s /bin/sh -c id daemon gaf uid=2(daemon) gid=2(daemon) groups=2(daemon)
--helpToont het gebruik en de lijst met optiesRegel Usage en de optielijst -m, -w, -g, -G, -l, -c, -f, -s, -P, -h, -V
--versionToont versie-informatiesu from util-linux 2.38.1 op de Debian 12-server

📎 Andere opties: volgens de officiële handleiding

OptieTaak
-lLogin-optie, gelijk aan het koppelteken (-); lange naam --login
-mLaat omgevingsvariabelen staan en verandert ook HOME, SHELL, USER en LOGNAME niet; genegeerd samen met de login-optie (gelijk aan -p)
-w lijstBehoudt de met komma's opgegeven variabelen als de login-optie de omgeving leegmaakt; HOME, SHELL, USER, LOGNAME en PATH worden opnieuw ingesteld
-g groepStelt de primaire groep in; alleen root
-G groepStelt aanvullende groepen in; alleen root; zonder -g wordt de eerste aanvullende groep de primaire groep
-fGeeft -f door aan de shell; optie voor csh en tcsh
-PMaakt een nieuwe pseudoterminal zodat de terminal niet met de oorspronkelijke sessie wordt gedeeld
--session-command opdrachtGelijk aan -c maar zonder nieuwe sessie; de handleiding raadt het af

🔲 Simulator voor het su-commando

De simulator hieronder start met het gewone account user1, en je kunt zelf su, [su -] en sudo invoeren en met exit terugkeren. Accounts en wachtwoorden zijn voorbeeldwaarden.

Simulator voor het su-commandoutil-linux 2.37
[user1@server1 ~]$
Werkt alleen in je browser; accounts en wachtwoorden zijn voorbeeldwaarden, en met ↑↓ haal je eerdere opdrachten terug (wachtwoorden blijven niet in de geschiedenis).

4️⃣ Verschil tussen sudo su en sudo -i

  • ↪️ Gevraagd wachtwoord en veranderende map

sudo su voert su via sudo uit met root-rechten. Omdat root su uitvoert, wordt het root-wachtwoord niet gevraagd, en vraagt sudo eerst het wachtwoord van wie het uitvoert (volgens de officiële documentatie).

Welke accounts sudo mogen uitvoeren, staat in de /etc/sudoers-instellingen. Voert een account zonder toestemming sudo uit, dan wordt het geweigerd met [user1 is not in the sudoers file.] (volgens de melding in het programma).

Per opdracht die een root-shell opent, zie je hieronder het gevraagde wachtwoord en de werkmap. De opdrachten in dit deel zijn niet op een productieserver uitgevoerd en zijn samengevat volgens de handleidingen su(1) en sudo(8).

CommandoGevraagd wachtwoordGestarte shellWerkmap
surootroot-shellongewijzigd
su -rootroot-login-shell/root
sudo suAccount dat het uitvoerderoot-shellongewijzigd
sudo su -Account dat het uitvoerderoot-login-shell/root
sudo -iAccount dat het uitvoerderoot-login-shell/root
sudo -sAccount dat het uitvoerdeShell uit de variabele SHELL (root-rechten)ongewijzigd

[sudo -i] en [sudo su -] eindigen allebei in een root-login-shell. Bij [sudo -i] start sudo de shell van root direct als login-shell, terwijl [sudo su -] daartussen nog een keer via su gaat.

[sudo -s] voert de shell uit de variabele SHELL uit met root-rechten en gaat niet naar de thuismap. Heb je het wachtwoord één keer goed ingevoerd, dan vraagt sudo het standaard 5 minuten lang niet opnieuw in dezelfde terminal (volgens de handleiding van sudoers).

Het verschil tussen su en sudo is als het verschil tussen iemands huissleutel lenen en je naam opschrijven bij de beheerder om binnen te komen.

5️⃣ Fouten bij het su-commando

  • ↪️ This account is currently not available · Authentication failure

Wissel je naar een account dat niet kan inloggen, dan draait nologin in plaats van een shell en verschijnt [This account is currently not available.]. Toen root [su daemon] uitvoerde, verscheen alleen deze ene regel en was de exitcode 1.

su daemon
This account is currently not available.

Deze melding komt van het programma nologin dat in het laatste veld van de accountregel staat, en dezelfde tekst stond in /usr/sbin/nologin op de server. Als root kun je met -s een shell opgeven en opdrachten met dat account uitvoeren.

Is het wachtwoord fout, dan verschijnt [su: Authentication failure]. Deze tekst is de melding die de PAM-bibliotheek teruggeeft bij een mislukte authenticatie. Volgens de officiële handleiding is de exitcode 1 als su mislukt voordat de opdracht wordt uitgevoerd.

Weigert su terwijl je het wachtwoord van je eigen account goed hebt ingevoerd, controleer dan eerst of hier het wachtwoord van het doelaccount wordt gevraagd. sudo vraagt het wachtwoord van wie het uitvoert, su vraagt het wachtwoord van het account waarnaar je wisselt.

Typ je een accountnaam die niet bestaat, dan verschijnt [su: user user9 does not exist or the user entry does not contain all the required fields] (volgens de melding in het programma). De oorzaak en wat je moet controleren per fout zie je hieronder.

UitvoerOorzaakWat te controleren
This account is currently not available.Shell van het doelaccount is nologinLaatste veld van de accountregel in getent passwd; als root een shell opgeven met -s
su: Authentication failureWachtwoord klopt nietOf het het wachtwoord van het doelaccount is (sudo vraagt je eigen wachtwoord)
su: user user9 does not exist …Geen account met die naamgetent passwd accountnaam
user1 is not in the sudoers file.Account zonder toestemming voor sudosudoers-instellingen en de groep wheel

🔢 FAQ & aanbevolen content

De officiële handleiding beschrijft su vooral als opdracht voor gewone gebruikers en raadt voor scripts die root uitvoert de opdracht runuser aan, die geen authenticatie doorloopt. De vorm is [runuser -u account -- opdracht].

Zet je achter -w (--whitelist-environment) de namen van de variabelen die moeten blijven, gescheiden door komma's, dan behoudt [su -] die variabelen bij het leegmaken van de omgeving. Volgens de officiële handleiding worden HOME, SHELL, USER, LOGNAME en PATH opnieuw ingesteld, ook als ze in de lijst staan.

Volgens de officiële handleiding legt su mislukte inlogpogingen altijd vast in het bestand btmp en schrijft het niet naar het bestand lastlog. De btmp-gegevens bekijk je met de opdracht lastb.

ℹ️ Affiliatemelding
De content van deze site bevat affiliatelinks. Koopt een bezoeker via een van deze links een product of dienst, dan ontvangt deze site een commissie van de verkoper. Het bedrag dat de koper betaalt (bij acties gaat het omlaag ↓) wordt daardoor niet hoger. De vermelde prijzen, kortingen en voorraad gelden op het moment van schrijven en kunnen afwijken; controleer ze daarom vóór je aankoop bij de verkoper. Producten worden gekozen en beoordeeld volgens onze eigen criteria, en commissies hebben geen invloed op de volgorde of de inhoud van de beoordelingen.

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *

Laat zien dat je geen machine bent: 9   +   10   =