it-swarm-eu.dev

su vs Sudo -s vs Sudo -i vs Sudo bash

Jaký je rozdíl mezi následujícími příkazy:

su
Sudo -s
Sudo -i
Sudo bash

Vím pro su Potřebuji znát heslo root a pro Sudo musím být v souboru sudoers, ale jakmile se jednou spustí, jaký je rozdíl?

Vím, že je rozdíl mezi su a Sudo -s protože můj domovský adresář je /root po provedení su, ale můj domovský adresář je stále /home/myname po Sudo -s. Ale mám podezření, že je to jen příznak základního rozdílu, který mi chybí.

93
Snitse

S su budete stát se další uživatel - ve výchozím nastavení root, ale potenciálně jiný uživatel. Pokud řeknete su -, vaše prostředí bude nahrazeno také prostředím pro přihlášení daného uživatele, takže to, co vidíte, je nerozeznatelné od přihlášení jako tento uživatel. Neexistuje způsob, jak by systém mohl sdělit, co děláte, zatímco su 'd jinému uživateli z akcí tohoto uživatele, když se přihlásí.

Věci se u Sudo velmi liší:

  • Příkazy, kterými procházíte Sudo vykonat jako cílový uživatel - ve výchozím nastavení root, ale s -u - ale zaznamenává příkazy, které skrz něj procházíte, označí je vaším uživatelským jménem, ​​takže vinu lze později přiřadit. :)

  • Sudo je velmi flexibilní. Můžete omezit příkazy, které může daný uživatel nebo skupina uživatelů například spouštět. S su je to všechno nebo nic.

    Tato funkce se obvykle používá k definování rolí. Můžete například definovat skupinu „záloh“ povolenou ke spuštění dump a tar, z nichž každá potřebuje přístup root, aby správně zálohovala systémový disk.

    Zmíním se o tom zde, protože to znamená, že můžete někomu dát Sudo oprávnění, aniž byste jim udělili Sudo -s nebo Sudo bash schopnosti. Mají pouze oprávnění potřebná k provedení své práce, zatímco s su mají spuštěn celý systém. Musíte s tím však dávat pozor: pokud někomu dáte schopnost říct Sudo vi, například mohou Shell z vi a mají účinně stejnou sílu jako s Sudo -s.

  • Protože namísto kořenového hesla bere heslo sudoeru, izoluje Sudo oprávnění mezi více sudoery.

    Tím se vyřeší administrativní problém s su, což znamená, že když se změní heslo root, museli být informováni všichni, kdo to museli vědět su. Sudo umožňuje nezávisle měnit hesla sudoerů. Ve skutečnosti je běžné, že uživatel root root účtu v systému pomocí hesla Sudo vynutí všechny úkoly sysadmin, které mají být provedeny pomocí Sudo. Ve velké organizaci s mnoha důvěryhodnými sudoery to znamená, že když jeden ze sysadminů odejde, nemusíte měnit kořenové heslo a distribuovat je těm administrátorům, kteří zůstanou.

Hlavní rozdíl mezi Sudo bash a Sudo -s je to -s je kratší a umožňuje předávat příkazy k provedení ve výchozím prostředí vašeho uživatele několika způsoby:

  1. Můžeš říct Sudo -s some-command které běží some-command pod vaší Shell. Je to v podstatě zkratka pro Sudo $Shell -c some-command.

  2. Místo toho můžete tyto příkazy předat standardnímu vstupu Shell, například Sudo -s < my-Shell-script. Můžete to použít s heredoc k odeslání několika příkazů na jedno volání Sudo, abyste se vyhnuli nutnosti opakovaně psát Sudo.

Obě tyto chování jsou volitelné. Mnohem častěji dáváte -s samotné, takže interaktivně spustí prostředí uživatele. V tomto režimu se liší od Sudo bash v tom, že by to mohlo spouštět jiné prostředí než bash, protože to vypadá nejprve v proměnné prostředí Shell, a pak, pokud to není nastaveno, na nastavení uživatelského prostředí Shell, obvykle v /etc/passwd.

Shell provozuje Sudo -s zdědí vaše současné uživatelské prostředí. Pokud to, co skutečně chcete, je čisté prostředí, jako byste se dostali hned po přihlášení, je místo toho Sudo -i, relativně nedávný přírůstek do Sudo. Zhruba řečeno, Sudo -i je Sudo -s tak jako su - je su: resetuje všechny proměnné prostředí kromě několika a pošle vás zpět do domovského adresáře uživatele. Pokud mu také nedáte příkazy ke spuštění pod tímto Shell prostřednictvím standardního vstupu nebo Sudo -i some-command, spustí Shell jako interaktivní přihlašovací prostředí, takže spouštěcí skripty vašeho uživatele Shell (např. .bash_profile) znovu spusťte.

To vše dělá Sudo -i podstatně bezpečnější než Sudo -s. Proč? Protože pokud někdo může upravit vaše prostředí před Sudo -s, mohly by způsobit nechtěné příkazy. Nejviditelnějším případem je změna Shell, ale může se také stát méně přímo, například prostřednictvím PAGER, pokud řeknete man foo zatímco pod Sudo -s.

Dalo by se říci: „Pokud mohou modifikovat PAGER, mohou modifikovat PATH, a pak mohou jednoduše nahradit zlý program Sudo,“ ale někdo dostatečně paranoidní může říct /usr/bin/Sudo /bin/bash aby se zabránilo této pasti. Pravděpodobně nejste tak paranoidní, že se také vyhnete pastím ve všech dalších vnímavých proměnných prostředí. Vzpomněli jste si také na kontrolu EDITOR, například před spuštěním jakéhokoli příkazu VCS ? Tím pádem Sudo -i.

Protože Sudo -i také změní váš pracovní adresář na domovský adresář uživatele, možná budete chtít použít Sudo -s pro situace, kdy víte, že chcete zůstat ve stejném adresáři, do kterého jste byli cd 'při spuštění Sudo. Je stále bezpečnější Sudo -i a cd tam, kde jste byli.

122
Warren Young

Z příspěvku buntuforums Udělal jsem před chvílí:

Zvažte následující experiment:

[email protected]:~% Sudo su
[Sudo] password for applic:
[email protected]:/home/applic# env > /tmp/Sudo_su_env
[email protected]:/home/applic# exit
exit
[email protected]:~% Sudo -s
applic .bashrc read...
[email protected]:~% env >/tmp/Sudo_s

Zde jsou rozdíly, které jsem našel:

S Sudo -s:

HOME=/home/applic
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
reads $USER's ~/.bashrc

S Sudo su:

HOME=/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
reads /etc/environment
reads /root/.bashrc

Všimněte si rozdílu v $HOME. Být root a mít $HOME nastaveno na běžný domov uživatele může způsobit problémy. Pokud například spustíte grafickou aplikaci, běžný uživatel ~/.Xauthority může být přepsán rootem. To způsobí běžné problémy uživatele později, jako například nemožnost spouštět určité grafické aplikace prostřednictvím cronu.

Shrnout:

                                     corrupted by user's 
        HOME=/root  uses root's PATH     env vars
Sudo -i     Y       Y[2]                 N
Sudo -s     N       Y[2]                 Y
Sudo bash   N       Y[2]                 Y
Sudo su     Y       N[1]                 Y
  1. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games pravděpodobně nastaveno /etc/environment
  2. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Dolní řádek je Sudo -i je správný příkaz, který se má spustit, když chcete kořenové prostředí, které není ovládáno prostředím uživatele.

27
unutbu

su (s čarodějnice ser nebo s ubstitute ser) umožňuje přepínat uživatele. su v podstatě zahajuje další instanci Shell s oprávněními zamýšleného uživatele. Ve výchozím nastavení vás přepne na uživatele root, chceme-li přepnout na konkrétního uživatele, musíme uživatele předat následujícím způsobem:

$ su bob  # switches to bob (requires bob's password)

su - znamená, že proměnné prostředí budou obnoveny na root a su znamená proměnné prostředí jako starý uživatel.

například: domovský adresář root, pokud používáte su - nebo starý domovský adresář uživatele, pokud používáte su.

Sudo (s uper ser do) je obslužný program příkazového řádku, který umožňuje uživatelům spouštět programy s bezpečnostními oprávněními jiného uživatele default je superuser, tj. root. Používá konfigurační soubor /etc/sudoers které uvádí, kteří uživatelé mají práva na konkrétní akce

Sudo by se mělo číst jako / ˈsuːduː /. syntaxe Sudo command tj. s čarodějnice ser a do tento příkaz.

  • su je ekvivalentní s Sudo -i a simuluje přihlášení do kořenového účtu. Váš pracovní adresář bude /root, a bude číst kořenové .profile atd. Výzva se změní z $ na #, což znamená, že máte přístup root.

  • Sudo -s spustí Shell jako root, ale nemění váš pracovní adresář.

  • Sudo bash kde bash je příkaz ke spuštění s Sudo. Tento příkaz spustí bash jako super uživatel.

  • Pomocí Sudo lze zaznamenávat vše, co někdo dělá.
  • Použití Sudo zabraňuje uživateli znát root heslo.
  • Pomocí Sudo můžeme omezit příkazy, které jsou povoleny ke spuštění.
9
Premraj