新聞中心
在早前的一篇文章中,我們深入討論了 sudo 命令的相關(guān)內(nèi)容。同時,在該文章的末尾有提到相關(guān)的命令 su 的部分內(nèi)容。本文,我們將詳細討論關(guān)于 su 命令與 sudo 命令之間的區(qū)別。

在開始之前有必要說明一下,文中所涉及到的示例教程都已經(jīng)在 Ubuntu 14.04 LTS 上測試通過。
Linux su 命令
su 命令的主要作用是讓你可以在已登錄的會話中切換到另外一個用戶。換句話說,這個工具可以讓你在不登出當前用戶的情況下登錄為另外一個用戶。
su 命令經(jīng)常被用于切換到超級用戶或 root 用戶(因為在命令行下工作,經(jīng)常需要 root 權(quán)限),但是 - 正如前面所提到的 - su 命令也可以用于切換到任意非 root 用戶。
如何使用 su 命令切換到 root 用戶,如下:
如上,su 命令要求輸入的密碼是 root 用戶的密碼。所以,一般 su 命令需要輸入目標用戶的密碼。在輸入正確的密碼之后,su 命令會在終端的當前會話中打開一個子會話。
su -
還有一種方法可以切換到 root 用戶:運行 su - 命令,如下:
那么,su 命令與 su - 命令之間有什么區(qū)別呢?前者在切換到 root 用戶之后仍然保持舊的(或者說原始用戶的)環(huán)境,而后者則是創(chuàng)建一個新的環(huán)境(由 root 用戶 ~/.bashrc 文件所設(shè)置的環(huán)境),相當于使用 root 用戶正常登錄(從登錄屏幕登錄)。
su 命令手冊頁很清楚地說明了這一點:
可選參數(shù) - 可提供的環(huán)境為用戶在直接登錄時的環(huán)境。
因此,你會覺得使用 su - 登錄更有意義。但是, su 命令也是有用的,那么大家可能會想知道它在什么時候用到。以下內(nèi)容摘自 ArchLinux wiki 網(wǎng)站 - 關(guān)于 su 命令的好處和壞處:
- 有的時候,對于系統(tǒng)管理員(root)來講,使用其他普通用戶的 Shell 賬戶而不是自己的 root Shell 賬戶更會好一些。尤其是在處理用戶問題時,最有效的方法就是是:登錄目標用戶以便重現(xiàn)以及調(diào)試問題。
- 然而,在多數(shù)情況下,當從普通用戶切換到 root 用戶進行操作時,如果還使用普通用戶的環(huán)境變量的話,那是不可取甚至是危險的操作。因為是在無意間切換使用普通用戶的環(huán)境,所以當使用 root 用戶進行程序安裝或系統(tǒng)更改時,會產(chǎn)生與正常使用 root 用戶進行操作時不相符的結(jié)果。例如,以普通用戶安裝程序會給普通用戶意外損壞系統(tǒng)或獲取對某些數(shù)據(jù)的未授權(quán)訪問的能力。
注意:如果你想在 su - 命令的 - 后面?zhèn)鬟f更多的參數(shù),那么你必須使用 su -l 而不是 su -。以下是 - 和 -l 命令行選項的說明:
-, -l, --login
提供相當于用戶在直接登錄時所期望的環(huán)境。
當使用 - 時,必須放在 su 命令的最后一個選項。其他選項(-l 和 --login)無此限制。
su -c
還有一個值得一提的 su 命令行選項為:-c。該選項允許你提供在切換到目標用戶之后要運行的命令。
su 命令手冊頁是這樣說明:
-c, --command COMMAND
使用 -c 選項指定由 Shell 調(diào)用的命令。
被執(zhí)行的命令無法控制終端。所以,此選項不能用于執(zhí)行需要控制 TTY 的交互式程序。
參考示例:
su [target-user] -c [command-to-run]
示例中,command-to-run 將會被這樣執(zhí)行:
[shell] -c [command-to-run]
示例中的 shell 類型將會被目標用戶在 /etc/passwd 文件中定義的登錄 shell 類型所替代。
sudo vs. su
現(xiàn)在,我們已經(jīng)討論了關(guān)于 su 命令的基礎(chǔ)知識,是時候來探討一下 sudo 和 su 命令之間的區(qū)別了。
關(guān)于密碼
兩個命令的最大區(qū)別是:sudo 命令需要輸入當前用戶的密碼,su 命令需要輸入 root 用戶的密碼。
很明顯,就安全而言,sudo 命令更好。例如,考慮到需要 root 訪問權(quán)限的多用戶使用的計算機。在這種情況下,使用 su 意味著需要與其他用戶共享 root 用戶密碼,這顯然不是一種好習(xí)慣。
此外,如果要撤銷特定用戶的超級用戶/root 用戶的訪問權(quán)限,唯一的辦法就是更改 root 密碼,然后再告知所有其他用戶新的 root 密碼。
而使用 sudo 命令就不一樣了,你可以很好的處理以上的兩種情況。鑒于 sudo 命令要求輸入的是其他用戶自己的密碼,所以,不需要共享 root 密碼。同時,想要阻止特定用戶訪問 root 權(quán)限,只需要調(diào)整 sudoers 文件中的相應(yīng)配置即可。
默認行為
兩個命令之間的另外一個區(qū)別是其默認行為。sudo 命令只允許使用提升的權(quán)限運行單個命令,而 su 命令會啟動一個新的 shell,同時允許使用 root 權(quán)限運行盡可能多的命令,直到明確退出登錄。
因此,su 命令的默認行為是有風(fēng)險的,因為用戶很有可能會忘記他們正在以 root 用戶身份進行工作,于是,無意中做出了一些不可恢復(fù)的更改(例如:對錯誤的目錄運行 rm -rf 命令?。?。關(guān)于為什么不鼓勵以 root 用戶身份進行工作的詳細內(nèi)容,請參考這里。
日志記錄
盡管 sudo 命令是以目標用戶(默認情況下是 root 用戶)的身份執(zhí)行命令,但是它們會使用 sudoer 所配置的用戶名來記錄是誰執(zhí)行命令。而 su 命令是無法直接跟蹤記錄用戶切換到 root 用戶之后執(zhí)行了什么操作。
靈活性
sudo 命令比 su 命令靈活很多,因為你甚至可以限制 sudo 用戶可以訪問哪些命令。換句話說,用戶通過 sudo 命令只能訪問他們工作需要的命令。而 su 命令讓用戶有權(quán)限做任何事情。
sudo su
大概是因為使用 su 命令或直接以 root 用戶身份登錄有風(fēng)險,所以,一些 Linux 發(fā)行版(如 Ubuntu)默認禁用 root 用戶帳戶。鼓勵用戶在需要 root 權(quán)限時使用 sudo 命令。
然而,您還是可以成功執(zhí)行 su 命令,而不用輸入 root 用戶的密碼。運行以下命令:
sudo su
由于你使用 sudo 運行命令,你只需要輸入當前用戶的密碼。所以,一旦完成操作,su 命令將會以 root 用戶身份運行,這意味著它不會再要求輸入任何密碼。
PS:如果你想在系統(tǒng)中啟用 root 用戶帳戶(強烈反對,因為你可以使用 sudo 命令或 sudo su 命令),你必須手動設(shè)置 root 用戶密碼,可以使用以下命令:
sudo passwd root
結(jié)論
當你需要可用的工具來提升(或一組完全不同的)權(quán)限來執(zhí)行任務(wù)時,這篇文章以及之前的教程(其中側(cè)重于 sudo 命令)應(yīng)該能給你一個比較好的建議。 如果您也想分享關(guān)于 su 或 sudo 的相關(guān)內(nèi)容或者經(jīng)驗,歡迎您在下方進行評論。
新聞名稱:深入理解sudo與su之間的區(qū)別
網(wǎng)站地址:http://m.5511xx.com/article/ccsossc.html


咨詢
建站咨詢
