Vertalingsoverzicht: Dit artikel is een gelocaliseerde versie van Never use just su. De laatste vertaling is gedateerd 17/10/2023. U kunt meehelpen om de vertaling te synchroniseren, als er wijzigingen zijn geweest in de originele versie. |
Andere talen Deutsch ; English ; Français ; Nederlands ; |
Synopsis: Wanneer u het commando |
Het gebruik van het kale commando su
is extreem riskant, en kan later problemen veroorzaken die niet gemakkelijk opgespoord kunnen worden wanneer u niet vertrouwd bent met de gevaren.
Kortom: wanneer u root-privileges nodig heeft, gebruik altijd su --login
, dat afgekort mag worden tot su -l
, of kortweg su -
.
Een alternatief voor het gebruik van su -
, is het gebruik van het commando sudo. [1]
Oorzaak
Om het verschil en het gevaar te begrijpen van alleen su
, zonder streepje er achter, kunt u beginnen met het lezen van de handleiding voor su
. In die uitleg staat dat het toevoegen van de optie --login
het commando su
op de vier manieren anders laat werken:
Wanneer u de shell begint als een login shell, met een omgeving die gelijk is aan een echte login, dan: - wist dit alle omgevingsvariabelen, behalve TERM en de variabelen die beschreven staan in ''–whitelist-environment''. - worden de omgevingsvariabelen HOME, SHELL, USER, LOGNAME en PATH geïnitialiseerd. - stapt het systeem over naar de home-map van de doelgebruiker - stelt dit argv[0] van de shell in als ‘-’, om van de shell een inlog-shell te maken.
De onderstaande code-voorbeelden tonen hoe de omgevingsvariabelen geraakt worden door het gebruik van de optie --login
.
Log eerst in met een kale su
zonder streepje:
Password: # env|grep tester|sort LOGNAME=tester MAIL=/var/spool/mail/tester PWD=/home/tester SCREENDIR=/home/tester/tmp USER=tester # exit exit $
Resultaat: de omgevingsvariabelen verwijzen nog steeds naar het oorspronkelijke login id (in dit geval tester), in plaats van naar het id van de gebruiker root.
Log nu eens in met het commando su --login
:
Password: # env|grep tester|sort # # exit exit $
Resultaat: de omgevingsvariabelen zijn gewist en verwijzen niet meer door naar het oorsponkelijke login-id (in dit geval was dit tester).
Wat het gebruik van su
zonder de optie su --login
gevaarlijk maakt, is dat veel programma’s deze omgevingsvariabelen gebruiken om te bepalen waar zij de bestanden opslaan die zij gebruiken. Wanneer u bijvoorbeeld een programma uitvoert dat een bestand aanpast dat is opgeslagen in ~/.config
, dan zal het configuratiebestand voor dat programma in uw gebruikers-map .config
eigendom worden van root.
Wanneer u later, na het verlaten van het su
root privilege, probeert datzelfde programma te starten, en u iets doet waardoor dat programma zijn .config
bestand wil aanpassen, dan zal dit mislukken, omdat u als gewone gebruiker geen bestanden kunt aanpassen die eigendom zijn van root.
Files in uw home
map die eigendom zijn geworden van root, veroorzaken problemen die zeer moeilijk zijn op te sporen.
Waarschuwing! Onthoudt dat u altijd su - gebruikt, en nooit het kale su !
|
Herstel van de fout
Wanneer u de fout al heeft gemaakt, kunt u deze herstellen met:
Password: # chown -Rc tester:tester /home/tester # exit exit $
De optie ‘c’ bij het commando chown (change ownership) laat zien welke veranderingen dit commando heeft uitgevoerd. De optie ‘R’ staat voor recursief.
U moet de naam tester telkens vervangen door uw eigen gebruikersnaam.
Indien u IMAP gebruikt voor mail, dient u de groep van de mail map terug te veranderen naar mail met het commando:
Password: # chgrp -Rc mail ~/mail # exit exit $
Er kunnen nog andere herstel-veranderingen nodig zijn voor andere programma’s, dus controleer de uitvoer van het commando chown zorgvuldig.