it-swarm-eu.dev

Jaké jsou rozdíly mezi "su", "Sudo -s", "Sudo -i", "Sudo su"?

Už jsem to přečetl z manuálu, ale nevidím rozdíl ..

su - změnit ID uživatele nebo stát se superuživatelem

Sudo -s [command]

Možnost -s (Shell) spouští prostředí Shell určené proměnnou prostředí Shell, pokud je nastaveno, nebo Shell, jak je uvedeno v passwd (5). Je-li zadán příkaz, je předán do prostředí Shell k provedení. V opačném případě bude proveden interaktivní Shell.

Sudo -izmizí popis v manuál

159
Smile.Hunter

Hlavním rozdílem mezi těmito příkazy je způsob, jakým omezují přístup k jejich funkcím.

su (což znamená „nahradit uživatele“ nebo „přepnout uživatele“) - provede přesně to, spustí další instanci Shell s oprávněními cílového uživatele. Abychom se ujistili, že na to máte práva, požádá vás o heslo cílového uživatele. Chcete-li se tedy stát rootem, musíte znát heslo root. Pokud je na vašem počítači několik uživatelů, kteří potřebují spouštět příkazy jako root, musí všichni znát root heslo - uvědomte si, že to bude stejné heslo. Pokud potřebujete zrušit administrátorská oprávnění od jednoho z uživatelů, musíte změnit root heslo a sdělit to pouze těm lidem, kteří potřebují udržet přístup - chaotický.

Sudo (hmm ... co je mnemotechnická pomůcka? Super-User-DO?) je úplně jiná. Používá konfigurační soubor (/ etc/sudoers), který uvádí, kteří uživatelé mají práva na konkrétní akce (spouštění příkazů jako root atd.) Když je vyvolán, požádá o heslo uživatele, který jej spustil - zajistit, aby osoba v terminálu byla skutečně stejná „joe“, která je uvedena v /etc/sudoers. Chcete-li zrušit oprávnění správce od osoby, stačí upravit konfigurační soubor (nebo odebrat uživatele ze skupiny, která je uvedena v dané konfiguraci). Výsledkem je mnohem čistší správa oprávnění.

Výsledkem je, že v mnoha systémech založených na Debianu nemá uživatel root nastaveno žádné heslo - tj. Není možné se přímo přihlásit jako root.

Taky, /etc/sudoers umožňuje určit některé další možnosti - tj. uživatel X je schopen spouštět pouze program Y atd.

Často používané Sudo su kombinace funguje následovně: nejprve Sudo vás požádá o vaše heslo, a pokud to máte povoleno, vyvolá další příkaz (su) jako superuživatel. Protože su je vyvoláno root, nevyžaduje zadání hesla cílového uživatele. Tak, Sudo su vám umožní otevřít Shell jako jiný uživatel (včetně root), pokud vám povolí přístup superuživatele /etc/sudoers soubor.

126
Sergey

Sudo umožňuje spouštět příkazy ve vašem uživatelském účtu s oprávněními root. su umožňuje přepínat uživatele tak, abyste byli skutečně přihlášeni jako root.

Sudo -s spustí prostředí s oprávněními root. Sudo -i také získává prostředí uživatele root.

Chcete-li vidět rozdíl mezi su a Sudo -s, do cd ~ a poté pwd za každou z nich. V prvním případě budete v domovském adresáři root, protože jste root. V druhém případě budete ve svém vlastním domovském adresáři, protože jste sami s oprávněním root.

O této přesné otázce se diskutuje více zde .

63
Mike Scott

Tato odpověď je duplikem mé odpovědi na dupe této otázky , vložte sem kanonickou odpověď, aby ji lidé mohli najít!

Hlavní rozdíl mezi Sudo -i A Sudo -s Je:

  • Sudo -i Vám dává kořenové prostředí, tj. Váš ~/.bashrc Je ignorován.
  • Sudo -s Vám poskytuje prostředí uživatele, takže váš ~/.bashrc Je respektován.

Zde je příklad, jak vidíte, že mám aplikaci lsl ve svém adresáři ~/.bin/, Který je přístupný prostřednictvím Sudo -s, Ale není přístupný pomocí Sudo -i. Nezapomeňte také, že výzva Bash se změní stejně jako u Sudo -i, Ale ne u Sudo -s:

[email protected]:~$ ls .bin
lsl

[email protected]:~$ which lsl
/home/dotancohen/.bin/lsl

[email protected]:~$ Sudo -i

[email protected]:~# which lsl

[email protected]:~# exit
logout

[email protected]:~$ Sudo -s
Sourced .bashrc

[email protected]:~$ which lsl
/home/dotancohen/.bin/lsl

[email protected]:~$ exit
exit

Přestože Sudo -s Je vhodný pro poskytnutí prostředí, které znáte, Doporučuji použít Sudo -i pro dva důvody:

  1. Vizuální připomenutí, že jste v „kořenové“ relaci.
  2. Kořenové prostředí je mnohem méně pravděpodobně otráveno malwarem, jako je například nepoctivá linka v .bashrc.
40
dotancohen

su požádá o heslo uživatele „root“.

Sudo požádá o vaše vlastní heslo (a také zkontroluje, zda máte povoleno spouštět příkazy jako root, který je konfigurován pomocí /etc/sudoers - ve výchozím nastavení mohou všechny uživatelské účty, které patří do skupin „admin“ nebo „Sudo“ používat Sudo).

Sudo -s spustí Shell jako root, ale nemění váš pracovní adresář. Sudo -i simuluje přihlášení do kořenového účtu: váš pracovní adresář bude /root a root's .profile atd. bude pocházet jako při přihlášení.

10
Marius Gedminas
  • su Požádá o heslo root, stane se rootem, otevře interaktivní prostředí bez přihlášení.
  • su - Požádá heslo uživatele root, stane se rootem, otevře interaktivní přihlašovací prostředí.

  • Sudo -s Zeptá se na vaše hesla, stane se rootem, otevře interaktivní Shell bez přihlášení.
  • Sudo -i Zeptá se na vaše hesla, stane se rootem, otevře interaktivní přihlašovací prostředí.

Nejlepší praxí je použití těchto dvou.


  • Sudo su Zeptá se na heslo, na sekundu se stane rootem a jako root se spustí su.
  • Sudo su - Zeptá se na heslo, na sekundu se objeví root a spustí su - jako root.

V tomto případě tedy používáte su pomocí Sudo a nemusíte znát skutečné heslo root. Výsledky jsou stejné jako su a su -.

3
Ravexina

V Ubuntu nebo v souvisejícím systému nenajdu moc užitečné pro su v tradičním superuživatelském smyslu. Sudo to zvládne mnohem lépe. su je však skvělé, když se chcete stát dalším uživatelem v jednorázových situacích, kdy by konfigurace sudoerů byla hloupá.

Například, pokud opravuji svůj systém z živého CD/USB, často připojím svůj pevný disk a další potřebné věci a do systému vložím chroot. V takovém případě je můj první příkaz obecně:

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

Tímto způsobem nepracuji jako root, ale jako můj normální uživatel, a poté podle potřeby používám Sudo.

2
Scott Severance