博客專欄

EEPW首頁 > 博客 > 扣丁學(xué)堂Linux培訓(xùn)之系統(tǒng)sudo命令十個(gè)技巧方法分享

扣丁學(xué)堂Linux培訓(xùn)之系統(tǒng)sudo命令十個(gè)技巧方法分享

發(fā)布人:扣丁客1 時(shí)間:2020-12-24 來源:工程師 發(fā)布文章

sudo表示“superuserdo”。它允許已驗(yàn)證的用戶以其他用戶的身份來運(yùn)行命令。其他用戶可以是普通用戶或者超級(jí)用戶。然而,大部分時(shí)候我們用它來以提升的權(quán)限來運(yùn)行命令。

sudo命令與安全策略配合使用,默認(rèn)安全策略是sudoers,可以通過文件/etc/sudoers來配置。其安全策略具有高度可拓展性。人們可以開發(fā)和分發(fā)他們自己的安全策略作為插件。

與su的區(qū)別

在GNU/Linux中,有兩種方式可以用提升的權(quán)限來運(yùn)行命令:

使用su命令

使用sudo命令

su表示“switchuser”。使用su,我們可以切換到root用戶并且執(zhí)行命令。但是這種方式存在一些缺點(diǎn):

我們需要與他人共享root的密碼。

因?yàn)閞oot用戶為超級(jí)用戶,我們不能授予受控的訪問權(quán)限。

我們無法審查用戶在做什么。

sudo以獨(dú)特的方式解決了這些問題。

首先,我們不需要妥協(xié)來分享root用戶的密碼。普通用戶使用他們自己的密碼就可以用提升的權(quán)限來執(zhí)行命令。

我們可以控制sudo用戶的訪問,這意味著我們可以限制用戶只執(zhí)行某些命令。

除此之外,sudo用戶的所有活動(dòng)都會(huì)被記錄下來,因此我們可以隨時(shí)審查進(jìn)行了哪些操作。在基于Debian的GNU/Linux中,所有活動(dòng)都記錄在/var/log/auth.log文件中。

本教程后面的部分闡述了這些要點(diǎn)。

實(shí)際動(dòng)手操作sudo

現(xiàn)在,我們對(duì)sudo有了大致的了解。讓我們實(shí)際動(dòng)手操作吧。為了演示,我使用Ubuntu。但是,其它發(fā)行版本的操作應(yīng)該是相同的。

允許sudo權(quán)限

讓我們添加普通用戶為sudo用戶吧。在我的情形中,用戶名為linuxtechi。

1)按如下所示編輯/etc/sudoers文件:

$sudovisudo

2)添加以下行來允許用戶linuxtechi有sudo權(quán)限:

linuxtechiALL=(ALL)ALL

上述命令中:

linuxtechi表示用戶名

第一個(gè)ALL指示允許從任何終端、機(jī)器訪問sudo

第二個(gè)(ALL)指示sudo命令被允許以任何用戶身份執(zhí)行

第三個(gè)ALL表示所有命令都可以作為root執(zhí)行

以提升的權(quán)限執(zhí)行命令

要用提升的權(quán)限執(zhí)行命令,只需要在命令前加上sudo,如下所示:

$sudocat/etc/passwd

當(dāng)你執(zhí)行這個(gè)命令時(shí),它會(huì)詢問linuxtechi的密碼,而不是root用戶的密碼。

以其他用戶執(zhí)行命令

除此之外,我們可以使用sudo以另一個(gè)用戶身份執(zhí)行命令。例如,在下面的命令中,用戶linuxtechi以用戶devesh的身份執(zhí)行命令:

$sudo-udeveshwhoami[sudo]passwordforlinuxtechi:devesh

內(nèi)置命令行為

sudo的一個(gè)限制是——它無法使用Shell的內(nèi)置命令。例如,history記錄是內(nèi)置命令,如果你試圖用sudo執(zhí)行這個(gè)命令,那么會(huì)提示如下的未找到命令的錯(cuò)誤:

$sudohistory[sudo]passwordforlinuxtechi:sudo:history:commandnotfound

訪問rootshell

為了克服上述問題,我們可以訪問rootshell,并在那里執(zhí)行任何命令,包括Shell的內(nèi)置命令。

要訪問rootshell,執(zhí)行下面的命令:

$sudobash

執(zhí)行完這個(gè)命令后——您將觀察到提示符變?yōu)榫?hào)(#)。

技巧

這節(jié)我們將討論一些有用的技巧,這將有助于提高生產(chǎn)力。大多數(shù)命令可用于完成日常任務(wù)。

以sudo用戶執(zhí)行之前的命令

讓我們假設(shè)你想用提升的權(quán)限執(zhí)行之前的命令,那么下面的技巧將會(huì)很有用:

$sudo!4

上面的命令將使用提升的權(quán)限執(zhí)行歷史記錄中的第4條命令。

在Vim里面使用sudo命令

很多時(shí)候,我們編輯系統(tǒng)的配置文件時(shí),在保存時(shí)才意識(shí)到我們需要root訪問權(quán)限來執(zhí)行此操作。因?yàn)檫@個(gè)可能讓我們丟失我們對(duì)文件的改動(dòng)。沒有必要驚慌,我們可以在Vim中使用下面的命令來解決這種情況:

:w!sudotee%

上述命令中:

冒號(hào)(:)表明我們處于Vim的退出模式

感嘆號(hào)(!)表明我們正在運(yùn)行shell命令

sudo和tee都是shell命令

百分號(hào)(%)表明從當(dāng)前行開始的所有行

使用sudo執(zhí)行多個(gè)命令

至今我們用sudo只執(zhí)行了單個(gè)命令,但我們可以用它執(zhí)行多個(gè)命令。只需要用分號(hào)(;)隔開命令,如下所示:

$sudo--bash-c'pwd;hostname;whoami'

上述命令中

雙連字符(--)停止命令行切換

bash表示要用于執(zhí)行命令的shell名稱

-c選項(xiàng)后面跟著要執(zhí)行的命令

無密碼運(yùn)行sudo命令

當(dāng)?shù)谝淮螆?zhí)行sudo命令時(shí),它會(huì)提示輸入密碼,默認(rèn)情形下密碼被緩存15分鐘。但是,我們可以避免這個(gè)操作,并使用NOPASSWD關(guān)鍵字禁用密碼認(rèn)證,如下所示:

linuxtechiALL=(ALL)NOPASSWD:ALL

限制用戶執(zhí)行某些命令

為了提供受控訪問,我們可以限制sudo用戶只執(zhí)行某些命令。例如,下面的行只允許執(zhí)行echo和ls命令。

linuxtechiALL=(ALL)NOPASSWD:/bin/echo/bin/ls

深入了解sudo

讓我們進(jìn)一步深入了解sudo命令。

$ls-l/usr/bin/sudo-rwsr-xr-x1rootroot145040Jun132017/usr/bin/sudo

如果仔細(xì)觀察文件權(quán)限,則發(fā)現(xiàn)sudo上啟用了setuid位。當(dāng)任何用戶運(yùn)行這個(gè)二進(jìn)制文件時(shí),它將以擁有該文件的用戶權(quán)限運(yùn)行。在所示情形下,它是root用戶。

為了演示這一點(diǎn),我們可以使用id命令,如下所示:

$iduid=1002(linuxtechi)gid=1002(linuxtechi)groups=1002(linuxtechi)

當(dāng)我們不使用sudo執(zhí)行id命令時(shí),將顯示用戶linuxtechi的id。

$sudoiduid=0(root)gid=0(root)groups=0(root)

但是,如果我們使用sudo執(zhí)行id命令時(shí),則會(huì)顯示root用戶的id。

從這篇文章可以看出——sudo普通用戶提供了更多受控訪問。使用這些技術(shù),多用戶可以用安全的方式與GNU/Linux進(jìn)行交互。最后想要了解更多關(guān)于Linux發(fā)展前景趨勢(shì),請(qǐng)關(guān)注扣丁學(xué)堂Linux培訓(xùn)官網(wǎng)、微信等平臺(tái),扣丁學(xué)堂IT職業(yè)在線學(xué)習(xí)教育平臺(tái)為您提供權(quán)威的Linux視頻教程系統(tǒng),通過千鋒扣丁學(xué)堂金牌講師在線錄制的Linux視頻教程課程,讓你快速掌握Linux從入門到精通開發(fā)實(shí)戰(zhàn)技能。扣丁學(xué)堂Linux技術(shù)交流群:692395686。微信號(hào):codingbb

*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。



關(guān)鍵詞:

相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉