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

133

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

su - změna ID uživatele nebo superuser

sudo -s [command]

Volba-s (shellu) spustí shell specifikovaný proměnnou prostředí SHELL, pokud je nastavena, nebo shell, jak je specifikováno v passwd (5). Pokud                    příkaz je zadán, je předán do shellu k provedení. V opačném případě bude spuštěn interaktivní shell.

sudo -i zmizí popis v manuálu

    
dané Smile.Hunter 22.10.2011 08:11

5 odpovědí

109

Hlavní rozdíl mezi těmito příkazy spočívá v tom, že omezují přístup k jejich funkcím.

su (což znamená "nahradit uživatele" nebo "přepnout uživatele") - přesně to dělá, spustí další instance shellu s oprávněním cílového uživatele. Chcete-li zajistit, že máte práva k tomu, požádá vás o heslo cílového uživatele . Abyste se stal kořenem, musíte znát heslo pro root. Pokud je v počítači několik uživatelů, kteří potřebují spouštět příkazy jako root, všichni potřebují znát heslo uživatele root - všimněte si, že to bude stejné heslo. Pokud potřebujete zrušit oprávnění administrátora od jednoho z uživatelů, musíte změnit heslo uživatele root a říkat mu pouze ty osoby, které potřebují mít přístup - chaotický.

sudo (hmm ... co je mnemotechnické? Super-User-DO?) je zcela jiné. Používá konfigurační soubor (/ etc / sudoers), který uvádí, které uživatelé mají práva k určitým akcím (spouštět příkazy jako root atd.). Když je vyvolán, požádá o heslo uživatele, který ho spustil - zajistit, aby osoba na terminálu byla opravdu stejná "joe", která je uvedena v/etc/sudoers. Chcete-li odvolat administrátorská oprávnění od osoby, stačí upravit konfigurační soubor (nebo odebrat uživatele ze skupiny, která je uvedena v této konfiguraci). Výsledkem je mnohem čistší správa oprávnění.

Výsledkem je, že v mnoha systémech založených na Debianuroot uživatel nemá nastavenu heslo - tzn. není možné přímo přihlásit jako root.

Také/etc/sudoers umožňuje zadat některé další možnosti - tj. uživatel X je schopen spustit program Y atd.

Často používaná kombinacesudo su funguje následovně: prvnísudo vás požádá o heslo vaše a pokud to máte povoleno, vyvolá další příkaz (% co_kde %) jako superuživatel. Protožesu je vyvolánsu, nevyžaduje zadání hesla cílového uživatele. Takžeroot vám umožňuje otevřít shell jako jiný uživatel (včetně rootu), pokud máte povolen přístup pro superuživatelský souborsudo su.

    
odpověděl Sergey 22.10.2011 09:21
48

sudo umožňuje spustit příkazy ve vašem vlastním uživatelském účtu s oprávněním uživatele root. su umožňuje přepnout uživatele tak, abyste byli skutečně přihlášeni jako root.

sudo -s spouští shell s oprávněním uživatele root. sudo -i také získává prostředí uživatele root.

Chcete-li vidět rozdíl mezisu asudo -s, proveďte po každém z nichcd ~ a potompwd. V prvním případě budete v kořenovém adresáři, protože jste root. Ve druhém případě budete ve vašem domovském adresáři, protože jste sami s oprávněním uživatele root.

Existuje více diskuse o této přesné otázce zde .

    
odpověděl Mike Scott 22.10.2011 08:28
27

Tato odpověď je napálit mé odpovědi na dupe této otázky , vložte zde na kanonickou odpověď, aby ji našli lidé!

Hlavní rozdíl mezisudo -i asudo -s je:

  • % ko_kde% vám poskytuje kořenové prostředí, tj. vášsudo -i je ignorován.
  • ~/.bashrc vám poskytuje prostředí uživatele, takže vašesudo -s je respektováno.

Zde je příklad, můžete vidět, že mám aplikaci~/.bashrc v mém adresářilsl, který je přístupný prostřednictvím~/.bin/, ale není dostupný ssudo -s. Všimněte si také, že výzva Bash se změní stejně jako usudo -i, ale ne usudo -i:

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

Ačkolisudo -s je vhodný pro poskytnutí prostředí, které znáte, doporučuji použítsudo -s ze dvou důvodů:

  1. Vizuální připomenutí, že jste v relaci "root".
  2. Kořenové prostředí je mnohem méně pravděpodobné, že bude otráveno škodlivým softwarem, jako je rogue line vsudo -i.
odpověděl dotancohen 08.11.2014 15:07
6

su požádá o heslo uživatele "root".

sudo požádá o vlastní heslo (a také kontroluje, zda máte povoleno spouštět příkazy jako root, který je nakonfigurován pomocí/etc/sudoers - ve výchozím nastavení jsou povoleny všechny uživatelské účty patřící do skupiny "admin" použít sudo).

sudo -s spouští shell jako kořen, ale nemění váš pracovní adresář. sudo -i simuluje přihlašovací údaje do kořenového účtu: váš pracovní adresář bude/root a kořenový adresář.profile atd. bude získávat jako při přihlášení.

    
odpověděl Marius Gedminas 22.10.2011 21:38
2

V Ubuntu nebo v souvisejícím systému, nenašel jsem mnoho využití prosu v tradičním smyslu pro super-uživatele. sudo zpracovává tento případ mnohem lépe. Nicméněsu je skvělé, aby se stalo jiným uživatelem v jednorázových situacích, kdy by konfigurace sudoerů byla hloupá.

Například, pokud opravím svůj systém z živého disku CD / USB, často do počítače připojím pevný disk a další potřebné věci achroot. 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 pracuji ne jako kořen, ale jako můj běžný uživatel a pak používámsudo podle potřeby.

    
odpověděl Scott Severance 26.10.2011 09:23