Vraag Wat zijn de verschillen tussen "su", "sudo -s", "sudo -i", "sudo su"?


Ik heb het al uit de handleiding gelezen, maar ik zie geen verschil.

su - wijzig gebruikers-ID of wordt superuser

sudo -s [command]

De -s (shell) optie draait de shell gespecificeerd door de SHELL omgevingsvariabele indien deze is ingesteld of de shell zoals gespecificeerd in passwd (5). Als een                    opdracht is opgegeven, wordt het doorgegeven aan de shell voor uitvoering. Anders wordt een interactieve shell uitgevoerd.

sudo -i  verdwijn de beschrijving in de handleiding


131
2017-10-22 06:11


oorsprong


Gebruik ook niet su user om in te loggen van niet-vertrouwde shells, maar su - user. Zien unix.stackexchange.com/q/7013/8250 - Lekensteyn
@Lekensteyn wow, geweldig voorbeeld. thx voor de LOL :) - törzsmókus
onthoud altijd het oude gebod: je zult de naam van de wortel niet tevergeefs beweren! - törzsmókus
Niet zeggen sudo -i is slecht, maar je kunt er zeker van zijn dat je het gebruikt - Kolob Canyon
Near-duplicate: askubuntu.com/questions/376199/... - Reinier Post


antwoorden:


Het belangrijkste verschil tussen deze opdrachten is de manier waarop ze de toegang tot hun functies beperken.

su  (wat "vervangende gebruiker" betekent of "van gebruiker wisselen") - doet precies dat, het start een ander shell-exemplaar met privileges van de doelgebruiker. Om ervoor te zorgen dat u over de rechten beschikt om dit te doen, wordt u om het wachtwoord gevraagd van de doelgebruiker. Dus, om root te worden, moet je het root-wachtwoord weten. Als er meerdere gebruikers op uw computer zijn die als root commando's moeten uitvoeren, moeten ze allemaal het rootwachtwoord kennen - merk op dat dit hetzelfde wachtwoord is. Als je beheerdersrechten van een van de gebruikers moet intrekken, moet je het rootwachtwoord wijzigen en het alleen aan die mensen geven die toegang moeten houden - rommelig.

sudo  (hmm ... wat is het geheugensteuntje? Super-User-DO?) is compleet anders. Het maakt gebruik van een configuratiebestand (/ etc / sudoers) dat aangeeft welke gebruikers rechten hebben op specifieke acties (opdrachten uitvoeren als root, etc.). Wanneer aangeroepen, wordt gevraagd om het wachtwoord van de gebruiker die het heeft opgestart  - om ervoor te zorgen dat de persoon op de terminal echt dezelfde "joe" is die in de lijst staat /etc/sudoers. Om beheerdersrechten van een persoon in te trekken, hoeft u alleen het configuratiebestand te bewerken (of de gebruiker te verwijderen uit een groep die in die configuratie voorkomt). Dit resulteert in veel schoner beheer van privileges.

Als gevolg hiervan, in veel op Debian gebaseerde systemen root gebruiker heeft geen wachtwoord ingesteld - d.w.z. het is niet mogelijk om rechtstreeks als root in te loggen.

Ook, /etc/sudoers laat toe om enkele extra opties te specificeren - dat wil zeggen dat gebruiker X alleen programma Y, etc. kan uitvoeren.

De vaak gebruikte sudo su combinatie werkt als volgt: eerst sudo vraagt ​​je om jouw wachtwoord en, als u dit mag doen, wordt het volgende commando aangeroepen (su) als een superuser. Omdat su wordt aangeroepen door root, het vereist niet dat u het wachtwoord van de doelgebruiker invoert. Zo, sudo su staat je toe om een ​​shell te openen als een andere gebruiker (inclusief root), als je toegang door de gebruiker tot supergebruiker wordt toegestaan /etc/sudoers het dossier.


107
2017-10-22 07:21



Ik heb nog nooit gezien su als "switch user", maar altijd als superuser; het standaardgedrag zonder de gebruikersnaam van een ander (hoewel het logisch is). Van wikipedia : "Het su-commando, al in 1974 ook wel supergebruiker [1] genoemd, is ook" substituutgebruiker "," spoofgebruiker "of" setgebruiker "genoemd omdat het de mogelijkheid biedt om het account dat aan het huidige eindstation is gekoppeld, te wijzigen ( venster)." - dr jimbob
@dr jimbob: je hebt gelijk, maar ik merk dat "switchen van gebruiker" eigenlijk een beetje beter beschrijft wat het doet - hoewel dit historisch gezien staat voor "supergebruiker". Ik ben ook heel blij dat het wikipedia-artikel erg op mijn antwoord lijkt: ik heb het artikel nooit eerder gezien :) - Sergey
De officiële betekenis van "su" is "vervangende gebruiker". Zie: "man su". - Angel O'Sphere
@ AngelO'Sphere: interessant genoeg vermeldt de manpage van Ubuntu helemaal geen 'substituut'. De manpage op gnu.org (gnu.org/software/coreutils/manual/html_node/su-invocation.html) zegt inderdaad "su: voer een commando uit met vervangende gebruikers- en groeps-ID". Ik denk dat gnu.org een canonieke bron is :) - Sergey
@Serqey nou, Linux is geen unix: D misschien is dat kleine woord verloren gegaan. Heb op dit moment geen Solaris- of SunOS-machine bij de hand, maar ik controleer mijn Mac later. Voor zover ik weet (dat is ongeveer 25 jaar geleden) was het altijd de bedoeling om "vervangende gebruiker" te noemen. - Angel O'Sphere


sudo laat je commando's uitvoeren in je eigen gebruikersaccount met root-rechten. su kunt u van gebruiker wisselen, zodat u bent aangemeld als root.

sudo -s draait een shell met rootprivileges. sudo -i verwerft ook de omgeving van de rootgebruiker.

Om het verschil tussen te zien su en sudo -s, doe cd ~ en dan pwd na elk van hen. In het eerste geval bevindt u zich in de hoofdmap van de hoofdmap, omdat u root bent. In het tweede geval bevindt u zich in uw eigen homedirectory, omdat u zelf bent met rootprivileges.

Er is meer discussie over deze exacte vraag hier.


48
2017-10-22 06:28



"jij bent jezelf met rootprivileges" is niet wat er feitelijk gebeurt :) Eigenlijk is het niet mogelijk om "jezelf te zijn met rootprivileges" - of je bent root of je bent jezelf. Probeer te typen wie ben ik in beide gevallen. Het feit dat cd ~ resultaten zijn verschillend is een gevolg van het feit dat sudo -s $ HOME omgevingsvariabele niet instelt. - Sergey
@Sergey, whoami zegt dat het 'root' is omdat je de 'whoami' cmd uitvoert alsof je het probleemt, dus tijdelijk (gedurende de duur van die opdracht) lijkt je de rootgebruiker, maar je hebt misschien nog steeds geen volledige root-toegang volgens het sudoers-bestand. - Octopus
@Octopus: wat ik probeerde te zeggen, is dat in Unix een proces maar één UID kan hebben en dat UID de permissies van het proces bepaalt. Je kunt niet "jezelf zijn met rootprivileges", een programma wordt uitgevoerd met je UID of met de UID van de root (0). - Sergey
Met betrekking tot "heeft u nog steeds geen volledige roottoegang volgens het sudoers-bestand": de sudoers bestand bepaalt wie welke opdracht kan uitvoeren als een andere gebruiker, maar dat gebeurt voordat de opdracht wordt uitgevoerd. Nadat je eenmaal een proces als, bijvoorbeeld, root had mogen starten - het lopende proces heeft de UID van de root en heeft volledige toegang tot het systeem, er is geen mogelijkheid voor sudo om dat te beperken. Nogmaals, je bent altijd jezelf of root, er is geen "half-half". Dus als sudoers bestand laat je shell draaien als root - permissies in die shell zouden niet te onderscheiden zijn van een "normale" rootshell. - Sergey


Dit antwoord is een dupe van mijn antwoord een dupe van deze vraag, plaats hier het canonieke antwoord zodat mensen het kunnen vinden!

Het grote verschil tussen sudo -i en sudo -s is:

  • sudo -i geeft je de rootomgeving, d.w.z. jouw ~/.bashrc wordt genegeerd.
  • sudo -s geeft je de gebruikersomgeving, dus jouw ~/.bashrc wordt gerespecteerd.

Hier is een voorbeeld, je kunt zien dat ik een applicatie heb lsl in mijn ~/.bin/ map die toegankelijk is via sudo -s maar niet toegankelijk met sudo -i. Merk ook op dat de Bash-prompt verandert zoals met sudo -i maar niet met sudo -s:

dotancohen@melancholy:~$ ls .bin
lsl

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ sudo -i

root@melancholy:~# which lsl

root@melancholy:~# exit
logout

dotancohen@melancholy:~$ sudo -s
Sourced .bashrc

dotancohen@melancholy:~$ which lsl
/home/dotancohen/.bin/lsl

dotancohen@melancholy:~$ exit
exit

hoewel sudo -s is handig om u de omgeving te geven die u kent, Ik raad aan het gebruik van sudo -i om twee redenen:

  1. De visuele herinnering dat u zich in een 'root'-sessie bevindt.
  2. De rootomgeving is veel minder snel vergiftigd met malware, zoals een regel met schurkenstaten .bashrc.

27
2017-11-08 14:07



Ik heb gemerkt dat sudo -s geen / etc / profile lijkt te verwerken, of alles wat ik heb in /etc/profile.d/ .. enig idee waarom? - meffect


su vraagt ​​naar het wachtwoord van de gebruiker "root".

sudo vraagt ​​om uw eigen wachtwoord (en controleert ook of u opdrachten als root mag uitvoeren, die via geconfigureerd zijn /etc/sudoers - standaard zijn alle gebruikersaccounts die behoren tot de "admin" -groep toegestaan ​​om sudo te gebruiken).

sudo -s lanceert een shell als root, maar verandert je werkdirectory niet. sudo -i simuleert een login in het root-account: uw werkdirectory zal dat zijn /rooten root's .profile etc. zullen worden betrokken als bij inloggen.


6
2017-10-22 19:38



om het antwoord completer te maken: sudo -s is bijna gelijk aan su ($ HOME is anders) en sudo -i is gelijk aan su - - DJCrashdummy


In Ubuntu of een gerelateerd systeem vind ik daar niet veel gebruik van su in de traditionele, super-user betekenis. sudo behandelt dat geval veel beter. Echter, su is geweldig om een ​​andere gebruiker te worden in eenmalige situaties waarin het configureren van sudoers dom zou zijn.

Als ik bijvoorbeeld mijn systeem vanaf een live-cd / USB repareer, mount ik vaak mijn harde schijf en andere noodzakelijke dingen en chroot in het systeem. In een dergelijk geval is mijn eerste opdracht in het algemeen:

su - myuser  # Note the '-'. It means to act as if that user had just logged in.

Op die manier werk ik niet als root, maar als mijn normale gebruiker, en gebruik ik vervolgens sudo waar nodig.


2
2017-10-26 07:23