Linux
為什麼我們使用 su - 而不僅僅是 su?
我不明白為什麼
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 -
。