溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux開發(fā)中sudo與su之間的區(qū)別是什么

發(fā)布時(shí)間:2022-01-24 10:55:57 來源:億速云 閱讀:122 作者:kk 欄目:開發(fā)技術(shù)

Linux開發(fā)中sudo與su之間的區(qū)別是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

在Linux開發(fā)中我們一般都是以普通用戶就行工作,有時(shí)會(huì)因?yàn)閭€(gè)別原因需要root用戶的身份,su和sudo都可以使用root身份,這篇文章和大家分享一下兩者的區(qū)別。

su 命令的主要作用是讓你可以在已登錄的會(huì)話中切換到另外一個(gè)用戶。換句話說,這個(gè)工具可以讓你在不登出當(dāng)前用戶的情況下登錄為另外一個(gè)用戶。

su 命令經(jīng)常被用于切換到超級(jí)用戶或 root 用戶(因?yàn)樵诿钚邢鹿ぷ?,?jīng)常需要 root 權(quán)限),但是 – 正如前面所提到的 – su 命令也可以用于切換到任意非 root 用戶。

如何使用 su 命令切換到 root 用戶,如下:

Linux開發(fā)中sudo與su之間的區(qū)別是什么

不帶命令行參數(shù)的 su 命令

如上,su 命令要求輸入的密碼是 root 用戶的密碼。所以,一般 su 命令需要輸入目標(biāo)用戶的密碼。在輸入正確的密碼之后,su 命令會(huì)在終端的當(dāng)前會(huì)話中打開一個(gè)子會(huì)話。

su –

還有一種方法可以切換到 root 用戶:運(yùn)行 su - 命令,如下:

Linux開發(fā)中sudo與su之間的區(qū)別是什么

su – 命令

那么,su 命令與 su - 命令之間有什么區(qū)別呢?前者在切換到 root 用戶之后仍然保持舊的(或者說原始用戶的)環(huán)境,而后者則是創(chuàng)建一個(gè)新的環(huán)境(由 root 用戶 ~/.bashrc 文件所設(shè)置的環(huán)境),相當(dāng)于使用 root 用戶正常登錄(從登錄屏幕登錄)。

su 命令手冊(cè)頁很清楚地說明了這一點(diǎn):

可選參數(shù) - 可提供的環(huán)境為用戶在直接登錄時(shí)的環(huán)境。

因此,你會(huì)覺得使用 su - 登錄更有意義。但是, su 命令也是有用的,那么大家可能會(huì)想知道它在什么時(shí)候用到。以下內(nèi)容摘自 ArchLinux wiki 網(wǎng)站 – 關(guān)于 su 命令的好處和壞處:

  • 有的時(shí)候,對(duì)于系統(tǒng)管理員(root)來講,使用其他普通用戶的 Shell 賬戶而不是自己的 root Shell 賬戶更會(huì)好一些。尤其是在處理用戶問題時(shí),最有效的方法就是是:登錄目標(biāo)用戶以便重現(xiàn)以及調(diào)試問題。

  • 然而,在多數(shù)情況下,當(dāng)從普通用戶切換到 root 用戶進(jìn)行操作時(shí),如果還使用普通用戶的環(huán)境變量的話,那是不可取甚至是危險(xiǎn)的操作。因?yàn)槭窃跓o意間切換使用普通用戶的環(huán)境,所以當(dāng)使用 root 用戶進(jìn)行程序安裝或系統(tǒng)更改時(shí),會(huì)產(chǎn)生與正常使用 root 用戶進(jìn)行操作時(shí)不相符的結(jié)果。例如,以普通用戶安裝程序會(huì)給普通用戶意外損壞系統(tǒng)或獲取對(duì)某些數(shù)據(jù)的未授權(quán)訪問的能力。

注意:如果你想在 su - 命令的 - 后面?zhèn)鬟f更多的參數(shù),那么你必須使用 su -l 而不是 su -。以下是 - 和 -l 命令行選項(xiàng)的說明:

 -`, `-l`, `--login

提供相當(dāng)于用戶在直接登錄時(shí)所期望的環(huán)境。

當(dāng)使用 – 時(shí),必須放在 su 命令的最后一個(gè)選項(xiàng)。其他選項(xiàng)(-l 和 --login)無此限制。

su -c

還有一個(gè)值得一提的 su 命令行選項(xiàng)為:-c。該選項(xiàng)允許你提供在切換到目標(biāo)用戶之后要運(yùn)行的命令。

su 命令手冊(cè)頁是這樣說明:

 -c`, `--command COMMAND

使用 -c 選項(xiàng)指定由 Shell 調(diào)用的命令。

被執(zhí)行的命令無法控制終端。所以,此選項(xiàng)不能用于執(zhí)行需要控制 TTY 的交互式程序。

參考示例:

 su [target-user] -c [command-to-run]

示例中,command-to-run 將會(huì)被這樣執(zhí)行:

 [shell] -c [command-to-run]

示例中的 shell 類型將會(huì)被目標(biāo)用戶在 /etc/passwd 文件中定義的登錄 shell 類型所替代。

sudo vs. su

現(xiàn)在,我們已經(jīng)討論了關(guān)于 su 命令的基礎(chǔ)知識(shí),是時(shí)候來探討一下 sudo 和 su 命令之間的區(qū)別了。

關(guān)于密碼

兩個(gè)命令的最大區(qū)別是:sudo 命令需要輸入當(dāng)前用戶的密碼,su 命令需要輸入 root 用戶的密碼。

很明顯,就安全而言,sudo 命令更好。例如,考慮到需要 root 訪問權(quán)限的多用戶使用的計(jì)算機(jī)。在這種情況下,使用 su 意味著需要與其他用戶共享 root 用戶密碼,這顯然不是一種好習(xí)慣。

此外,如果要撤銷特定用戶的超級(jí)用戶/root 用戶的訪問權(quán)限,唯一的辦法就是更改 root 密碼,然后再告知所有其他用戶新的 root 密碼。

而使用 sudo 命令就不一樣了,你可以很好的處理以上的兩種情況。鑒于 sudo 命令要求輸入的是其他用戶自己的密碼,所以,不需要共享 root 密碼。同時(shí),想要阻止特定用戶訪問 root 權(quán)限,只需要調(diào)整 sudoers 文件中的相應(yīng)配置即可。

默認(rèn)行為

兩個(gè)命令之間的另外一個(gè)區(qū)別是其默認(rèn)行為。sudo 命令只允許使用提升的權(quán)限運(yùn)行單個(gè)命令,而 su 命令會(huì)啟動(dòng)一個(gè)新的 shell,同時(shí)允許使用 root 權(quán)限運(yùn)行盡可能多的命令,直到明確退出登錄。

因此,su 命令的默認(rèn)行為是有風(fēng)險(xiǎn)的,因?yàn)橛脩艉苡锌赡軙?huì)忘記他們正在以 root 用戶身份進(jìn)行工作,于是,無意中做出了一些不可恢復(fù)的更改(例如:對(duì)錯(cuò)誤的目錄運(yùn)行 rm -rf 命令!)。關(guān)于為什么不鼓勵(lì)以 root 用戶身份進(jìn)行工作的詳細(xì)內(nèi)容,請(qǐng)參考這里。

日志記錄

盡管 sudo 命令是以目標(biāo)用戶(默認(rèn)情況下是 root 用戶)的身份執(zhí)行命令,但是它們會(huì)使用 sudoer 所配置的用戶名來記錄是誰執(zhí)行命令。而 su 命令是無法直接跟蹤記錄用戶切換到 root 用戶之后執(zhí)行了什么操作。

靈活性

sudo 命令比 su 命令靈活很多,因?yàn)槟闵踔量梢韵拗?sudo 用戶可以訪問哪些命令。換句話說,用戶通過 sudo 命令只能訪問他們工作需要的命令。而 su 命令讓用戶有權(quán)限做任何事情。

sudo su

大概是因?yàn)槭褂?su 命令或直接以 root 用戶身份登錄有風(fēng)險(xiǎn),所以,一些 Linux 發(fā)行版(如 Ubuntu)默認(rèn)禁用 root 用戶帳戶。鼓勵(lì)用戶在需要 root 權(quán)限時(shí)使用 sudo 命令。

然而,您還是可以成功執(zhí)行 su 命令,而不用輸入 root 用戶的密碼。運(yùn)行以下命令:

 sudo su

由于你使用 sudo 運(yùn)行命令,你只需要輸入當(dāng)前用戶的密碼。所以,一旦完成操作,su 命令將會(huì)以 root 用戶身份運(yùn)行,這意味著它不會(huì)再要求輸入任何密碼。

PS:如果你想在系統(tǒng)中啟用 root 用戶帳戶(強(qiáng)烈反對(duì),因?yàn)槟憧梢允褂?sudo 命令或 sudo su 命令),你必須手動(dòng)設(shè)置 root 用戶密碼,可以使用以下命令:

 sudo passwd root

結(jié)論

當(dāng)你需要可用的工具來提升(或一組完全不同的)權(quán)限來執(zhí)行任務(wù)時(shí),這篇文章以及之前的教程(其中側(cè)重于 sudo 命令)應(yīng)該能給你一個(gè)比較好的建議。 

什么是Linux系統(tǒng)

Linux是一種免費(fèi)使用和自由傳播的類UNIX操作系統(tǒng),是一個(gè)基于POSIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng),使用Linux能運(yùn)行主要的Unix工具軟件、應(yīng)用程序和網(wǎng)絡(luò)協(xié)議。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI