linux sudo命令詳解
簡(jiǎn)單的說(shuō),sudo 是一種權(quán)限管理機(jī)制,管理員可以授權(quán)于一些普通用戶去執(zhí)行一些 root 執(zhí)行的操作,而不需要知道 root 的密碼。
嚴(yán)謹(jǐn)些說(shuō),sudo 允許一個(gè)已授權(quán)用戶以超級(jí)用戶或者其它用戶的角色運(yùn)行一個(gè)命令。當(dāng)然,能做什么不能做什么都是通過(guò)安全策略來(lái)指定的。sudo 支持插件架構(gòu)的安全策略,并能把輸入輸出寫入日志。第三方可以開(kāi)發(fā)并發(fā)布自己的安全策略和輸入輸出日志插件,并讓它們無(wú)縫的和 sudo 一起工作。默認(rèn)的安全策略記錄在 /etc/sudoers 文件中。而安全策略可能需要用戶通過(guò)密碼來(lái)驗(yàn)證他們自己。也就是在用戶執(zhí)行 sudo 命令時(shí)要求用戶輸入自己賬號(hào)的密碼。如果驗(yàn)證失敗,sudo 命令將會(huì)退出。(注意,本文介紹的 sudo 命令運(yùn)行在 ubuntu 14.04中。)
sudo 命令語(yǔ)法
sudo [-bhHpV][-s ][-u <用戶>][指令]
或
sudo [-klv]
參數(shù)
-b 在后臺(tái)執(zhí)行指令。
-h 顯示幫助。
-H 將HOME環(huán)境變量設(shè)為新身份的HOME環(huán)境變量。
-k 結(jié)束密碼的有效期限,也就是下次再執(zhí)行sudo時(shí)便需要輸入密碼。
-l 列出目前用戶可執(zhí)行與無(wú)法執(zhí)行的指令。
-p 改變?cè)儐?wèn)密碼的提示符號(hào)。
-s 執(zhí)行指定的shell。
-u <用戶> 以指定的用戶作為新的身份。若不加上此參數(shù),則預(yù)設(shè)以root作為新的身份。
-v 延長(zhǎng)密碼有效期限5分鐘。
-V 顯示版本信息。
-S 從標(biāo)準(zhǔn)輸入流替代終端來(lái)獲取密碼
sudo 程序相關(guān)文件
/etc/sudoers /etc/init.d/sudo /etc/pam.d/sudo /var/lib/sudo /usr/share/doc/sudo /usr/share/lintian/overrides/sudo /usr/share/bash-completion/completions/sudo /usr/bin/sudo /usr/lib/sudo
基本配置
系統(tǒng)默認(rèn)創(chuàng)建了一個(gè)名為 sudo 的組。只要把用戶加入這個(gè)組,用戶就具有了 sudo 的權(quán)限。
至于如何把用戶加入 sudo 組,您可以直接編輯 /etc/group 文件,當(dāng)然您得使用一個(gè)有 sudo 權(quán)限的用戶來(lái)干這件事:
$ sudo vim /etc/group
在 sudo 組中加入新的用戶,要使用逗號(hào)分隔多個(gè)用戶。

或者您可以使用 usermod 命令把用戶添加到一個(gè)組中:
$ sudo usermod -a -G sudo jack
上面的設(shè)置中我們把用戶 jack 添加到了 sudo 組中,所以當(dāng)用戶 jack 登錄后就可以通過(guò) sudo 命令以 root 權(quán)限執(zhí)行命令了!
詳細(xì)配置
在前面的配置中我們只是把用戶 jack 加入了 sudo 組,他就具有了通過(guò) root 權(quán)限執(zhí)行命令的能力。
現(xiàn)在我們想問(wèn)一下,這是怎么發(fā)生的?是時(shí)候介紹如何配置 sudo 命令了!
sudo 命令的配置文件為 /etc/sudoers。(注意,/etc/sudoers 的配置內(nèi)容十分豐富,我們僅做簡(jiǎn)單的介紹。要了解更多信息,請(qǐng)參考 man sudoers。)
編輯這個(gè)文件是有單獨(dú)的命令的 visudo(這個(gè)文件我們最好不要使用 vim 命令來(lái)打開(kāi)),是因?yàn)橐坏┠愕恼Z(yǔ)法寫錯(cuò)會(huì)造成嚴(yán)重的后果,這個(gè)工具會(huì)替你檢查你寫的語(yǔ)法,這個(gè)文件的語(yǔ)法遵循以下格式:
who where whom command
說(shuō)白了就是哪個(gè)用戶在哪個(gè)主機(jī)以誰(shuí)的身份執(zhí)行那些命令,那么這個(gè) where, 是指允許在那臺(tái)主機(jī) ssh 連接進(jìn)來(lái)才能執(zhí)行后面的命令,文件里面默認(rèn)給 root 用戶定義了一條規(guī)則:
root ALL=(ALL:ALL) ALL
root 表示 root 用戶。
ALL 表示從任何的主機(jī)上都可以執(zhí)行,也可以這樣 192.168.100.0/24。
(ALL:ALL) 是以誰(shuí)的身份來(lái)執(zhí)行,ALL:ALL 就代表 root 可以任何人的身份來(lái)執(zhí)行命令。
ALL 表示任何命令。
那么整條規(guī)則就是 root 用戶可以在任何主機(jī)以任何人的身份來(lái)執(zhí)行所有的命令。
現(xiàn)在我們可以回答 jack 為什么具有通過(guò) root 權(quán)限執(zhí)行命令的能力了。打開(kāi) /etc/sudoers 文件:

sudo 組中的所有用戶都具有通過(guò) root 權(quán)限執(zhí)行命令的能力!
再看個(gè)例子:
nick 192.168.10.0/24=(root) /usr/sbin/useradd
上面的配置只允許 nick 在 192.168.10.0/24 網(wǎng)段上連接主機(jī)并且以 root 權(quán)限執(zhí)行 useradd 命令。
設(shè)置 sudo 時(shí)不需要輸入密碼
執(zhí)行 sudo 命令時(shí)總是需要輸入密碼事件很不爽的事情(拋開(kāi)安全性)。有些應(yīng)用場(chǎng)景也需要在執(zhí)行 sudo 時(shí)避開(kāi)輸入密碼的交互過(guò)程。
那么需要如何設(shè)置呢?其實(shí)很簡(jiǎn)單,只需要在配置行中添加 NOPASSWD: 就可以了:
****** ALL=(ALL) NOPASSWD: ALL
再試試看,是不是已經(jīng)不需要輸入密碼了?
sudo 的日志
在 ubuntu 中,sudo 的日志默認(rèn)被記錄在 /var/log/auth.log 文件中。當(dāng)我們執(zhí)行 sudo 命令時(shí),相關(guān)日志都是會(huì)被記錄下來(lái)的。比如下圖中顯示的就是一次執(zhí)行 sudo 命令的日志:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在 Linux 終端中查找域名 IP 地址的命令(五種方法)
本教程介紹了如何在 Linux 終端驗(yàn)證域名或計(jì)算機(jī)名的 IP 地址。我們將教你如何有效使用這些命令在 Linux 終端中識(shí)別多個(gè)域的 IP 地址信息2019-12-12
移植busybox構(gòu)建最小根文件系統(tǒng)的步驟詳解
這篇文章主要介紹了移植busybox構(gòu)建最小根文件系統(tǒng)的步驟,本文分為五部給大家介紹的非常詳細(xì),需要的朋友可以參考下2019-07-07
Linux低電量自動(dòng)關(guān)機(jī)的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于Linux低電量自動(dòng)關(guān)機(jī)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用linux具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
Linux系統(tǒng)中SSH服務(wù)基于key認(rèn)證實(shí)踐的過(guò)程
這篇文章主要介紹了Linux系統(tǒng)中SSH服務(wù)基于key認(rèn)證實(shí)踐,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
Linux如何設(shè)置文件和文件夾的讀寫權(quán)限
這篇文章主要介紹了Linux如何設(shè)置文件和文件夾的讀寫權(quán)限問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10

