日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux 命令之 sudo -- 以其他用户身份来执行命令

發(fā)布時(shí)間:2023/12/3 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 命令之 sudo -- 以其他用户身份来执行命令 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 命令介紹
  • 原理
  • 相關(guān)文件
    • 通配符
  • 和命令 su 的比較
  • 常用選項(xiàng)
  • 幾個(gè)重要選項(xiàng)的解讀
    • -k 選項(xiàng)
    • -s 選項(xiàng)
    • -i 選項(xiàng)
  • su、sudo su、sudo -i 的區(qū)別
  • 查看日志文件
  • 參考示例
    • 以用戶 mysql 的身份執(zhí)行命令 pwd
    • 以用戶 root 的身份執(zhí)行命令 pwd
    • 以 root 的權(quán)限執(zhí)行上一條命令
    • 以 root 的權(quán)限編輯指定的文件
    • 普通用戶切換成 root 身份
    • 使用 root 的身份執(zhí)行最近一條指令
    • 使用 sudo 切換 Shell 類型
    • 切換成指定的用戶
    • 顯示當(dāng)前用戶可以用 sudo 執(zhí)行哪些命令
    • 通過(guò)加入群組的方式給普通用戶授權(quán)

命令介紹

substitute user identity to do,替換身份去執(zhí)行,縮寫為 sudo。

sudo 命令用來(lái)以其他身份來(lái)執(zhí)行命令,預(yù)設(shè)的身份為 root。在 /etc/sudoers 中設(shè)置了可執(zhí)行 sudo 指令的用戶。若其未經(jīng)授權(quán)的用戶企圖使用 sudo,則會(huì)發(fā)出警告的郵件給管理員。用戶使用 sudo 時(shí),必須先輸入密碼,之后有 5 分鐘的有效期限,超過(guò)期限則必須重新輸入密碼。

簡(jiǎn)單的說(shuō),sudo 是一種權(quán)限管理機(jī)制,管理員可以授權(quán)一些普通用戶去執(zhí)行一些 root 執(zhí)行的操作,而不需要知道 root 的密碼。普通用戶必須在文件 /etc/sudoers 中進(jìn)行有關(guān)授權(quán),才能使用命令 sudo。

更加正確地說(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 使一般用戶不需要知道超級(jí)用戶的密碼即可獲得權(quán)限。首先超級(jí)用戶將普通用戶的名字、可以執(zhí)行的特定命令、按照哪種用戶或用戶組的身份執(zhí)行等信息,登記在特殊的文件中(通常是 /etc/sudoers),即完成對(duì)該用戶的授權(quán)(此時(shí)該用戶稱為“sudoer”);在一般用戶需要取得特殊權(quán)限時(shí),其可在命令前加上 sudo,此時(shí) sudo 將會(huì)詢問(wèn)該用戶自己的密碼(以確認(rèn)終端機(jī)前的是該用戶本人),回答后系統(tǒng)即會(huì)將該命令的進(jìn)程以超級(jí)用戶的權(quán)限運(yùn)行。之后的一段時(shí)間內(nèi)(默認(rèn)為5分鐘,可在 /etc/sudoers 自定義),使用 sudo 不需要再次輸入密碼。

sudo 命令的運(yùn)行,需經(jīng)歷如下幾步:

當(dāng)用戶運(yùn)行 sudo 命令時(shí),系統(tǒng)會(huì)先通過(guò) /etc/sudoers 文件,驗(yàn)證該用戶是否有運(yùn)行 sudo 的權(quán)限;
確定用戶具有使用 sudo 命令的權(quán)限后,還要讓用戶輸入自己的密碼進(jìn)行確認(rèn)。出于對(duì)系統(tǒng)安全性的考慮,如果用戶在默認(rèn)時(shí)間內(nèi)(默認(rèn)是 5 分鐘)不使用 sudo 命令,此后使用時(shí)需要再次輸入密碼;
密碼輸入成功后,才會(huì)執(zhí)行 sudo 命令后接的命令。

顯然,能否使用 sudo 命令,取決于對(duì) /etc/sudoers 文件的配置(默認(rèn)情況下,此文件中只配置有 root 用戶)。默認(rèn)情況下 sudo 命令只有 root 身份可以使用。

相關(guān)文件

配置文件:
/etc/sudoers
/etc/sudoers.d/

時(shí)間戳文件:
/var/db/sudo

日志文件:
/var/log/secure

通配符

?:匹配任意一個(gè)字符 *:匹配任意數(shù)量的任意字符 [wxc]:匹配其中一個(gè)字符 [!wxc]:除了這三個(gè)字符的其它字符 \x:轉(zhuǎn)義 [[alpha]]:表示匹配任意一個(gè)英文字母。示例:/bin/ls [[alpha]]*

和命令 su 的比較

相對(duì)于使用 su 命令還需要新切換用戶的密碼,sudo 命令的運(yùn)行只需要知道自己的密碼即可,甚至于,我們可以通過(guò)手動(dòng)修改 sudo 的配置文件,使其無(wú)需任何密碼即可運(yùn)行。

常用選項(xiàng)

選項(xiàng)說(shuō)明
-b在后臺(tái)執(zhí)行指令
-e 或 --edit編輯文件而非執(zhí)行命令,等效于 sudoedit
-i 或 --login以目標(biāo)用戶身份登錄 shell,可同時(shí)指定一條命令。其實(shí)就是相當(dāng)于使用目標(biāo)用戶的身份重新登錄 shell
-H將HOME環(huán)境變量設(shè)為新身份的HOME環(huán)境變量
-k結(jié)束密碼的有效期限,也就是下次再執(zhí)行sudo時(shí)便需要輸入密碼。強(qiáng)迫使用者在下一次執(zhí)行 sudo 時(shí)輸入密碼(不論有沒(méi)有超過(guò) N 分鐘)
-l列出目前用戶可執(zhí)行與無(wú)法執(zhí)行的指令。顯示出自己(執(zhí)行 sudo 的使用者)的權(quán)限。用于顯示當(dāng)前用戶可以用 sudo 執(zhí)行那些命令
-p改變?cè)儐?wèn)密碼的提示符號(hào),即可以更改問(wèn)密碼的提示語(yǔ),其中 %u 會(huì)代換為使用者的帳號(hào)名稱,%h 會(huì)顯示主機(jī)名稱
-s<shell>執(zhí)行指定的shell。執(zhí)行環(huán)境變量 SHELL 中所指定的 shell ,或是 /etc/passwd 里所指定的 shell
-S從標(biāo)準(zhǔn)輸入流替代終端來(lái)獲取密碼
-u<用戶>以指定的用戶作為新的身份。若不加上此參數(shù),則預(yù)設(shè)以root作為新的身份
-v延長(zhǎng)密碼有效期限5分鐘。因?yàn)?sudo 在第一次執(zhí)行時(shí)或是在 N分鐘內(nèi)沒(méi)有執(zhí)行(N 預(yù)設(shè)為五)會(huì)提示輸入密碼,這個(gè)參數(shù)是重新做一次確認(rèn),如果超過(guò)N分鐘,也會(huì)提示輸入密碼
-V顯示版本信息
-h顯示幫助

幾個(gè)重要選項(xiàng)的解讀

-k 選項(xiàng)

考慮下這種情況:
輸入密碼后你剛剛運(yùn)行了幾個(gè) sudo 驅(qū)動(dòng)的命令,而 sudo 會(huì)話默認(rèn)保持 5 分鐘。假設(shè)在這會(huì)話期間,你需要讓某些人訪問(wèn)你的終端,但你不想讓他們可以使用 sudo,你將會(huì)怎么做?沒(méi)錯(cuò),-k 選項(xiàng)允許用戶提前結(jié)束 sudo 會(huì)話的有效期。

以下是 sudo 幫助頁(yè)面的解釋:

-k, --reset-timestamp

不帶任何命令使用時(shí),撤銷用戶緩存的憑據(jù)。換句話講,下一次使用sudo將會(huì)要求輸入密碼。使用這個(gè)參數(shù)不需要密碼,也可以放到一個(gè)
./logout文件中來(lái)撤銷 sudo 權(quán)限。

當(dāng)與一個(gè)命令,或者一個(gè)可能需要密碼的操作一起用時(shí),這個(gè)參數(shù)將會(huì)導(dǎo)致sudo忽略用戶緩存的憑據(jù)。結(jié)果是sudo要求輸入密碼(如果這是被安全策略所要求的),而且不會(huì)更新用戶緩存的憑據(jù)。

-s 選項(xiàng)

有時(shí)你的工作要求你運(yùn)行一堆需要 root 權(quán)限的命令,你不想每次都輸入密碼。你也不想通過(guò)改變/etc/sudoers文件調(diào)整sudo會(huì)話的過(guò)期時(shí)限。

這種情況下,你可以用 sudo 的 -s 選項(xiàng)。以下是 sudo 幫助頁(yè)面的解釋:

-s,–shell

如果設(shè)置了 SHELL 環(huán)境變量或者調(diào)用用戶的密碼數(shù)據(jù)庫(kù)指定了 shell,就運(yùn)行該 shell 。如果指定了命令,命令將會(huì)通過(guò) shell
的 -c參數(shù)將命令傳遞給該 shell 執(zhí)行。如果沒(méi)有指定命令,會(huì)執(zhí)行一個(gè)交互式 shell。

所以,基本上這命令參數(shù)做的是:

1.啟動(dòng)一個(gè)新的 shell,至于是哪一個(gè) shell,參照 SHELL 環(huán)境變量賦值。如果 $SHELL 是空的,將會(huì)用 /etc/passwd 中定義的 shell。
2.如果你用 -s 參數(shù)傳遞了一個(gè)命令名(例如,sudo -s whoami),實(shí)際執(zhí)行的是 sudo /bin/bash -c whoami。
3.如果你沒(méi)有嘗試執(zhí)行其他命令(也就是說(shuō),你只是運(yùn)行 sudo -s),你將會(huì)得到一個(gè)有 root 權(quán)限的交互式的 shell。
4.請(qǐng)記住,-s 命令行參數(shù)給你一個(gè)有 root 權(quán)限的 shell,但那不是 root 環(huán)境 —— 還是執(zhí)行的你自己的 .bashrc。例如,在 sudo -s 運(yùn)行的新 shell 里,執(zhí)行 whoami 命令仍會(huì)返回你的用戶名,而非 root 。

-i 選項(xiàng)

-i 選項(xiàng)和 -s 選項(xiàng)相像。然而,還是有點(diǎn)區(qū)別。一個(gè)重要的區(qū)別是 -i 給你的是 root 環(huán)境,意味著原用戶的 .bashrc 被忽略。這就像沒(méi)有顯式地用 root 登錄也能成為 root 。此外,你也不用輸入 root 用戶密碼。

su、sudo su、sudo -i 的區(qū)別

補(bǔ)充…

查看日志文件

在 ubuntu 中,sudo 的日志默認(rèn)被記錄在 /var/log/auth.log 文件中。當(dāng)我們執(zhí)行 sudo 命令時(shí),相關(guān)日志都是會(huì)被記錄下來(lái)的。比如下圖中顯示的就是一次執(zhí)行 sudo 命令的日志:

在 CentOS 中查看日志 /vat/log/secure:

[root@localhost ~]# tail /var/log/secure Apr 5 13:55:58 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0) Apr 5 13:56:11 localhost su: pam_unix(su-l:session): session closed for user tom Apr 5 13:56:17 localhost passwd: pam_unix(passwd:chauthtok): password changed for tom Apr 5 13:56:17 localhost passwd: gkr-pam: couldn't update the 'login' keyring password: no old password was entered Apr 5 13:56:23 localhost su: pam_unix(su-l:session): session opened for user tom by root(uid=0) Apr 5 13:56:43 localhost sudo: tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=list ##tom以管理員身份執(zhí)行了list命令 Apr 5 14:00:50 localhost sudo: tom : TTY=pts/0 ; PWD=/home/tom ; USER=root ; COMMAND=/usr/sbin/useradd test1 ##tom以管理員身份執(zhí)行了useradd命令,添加用戶test1 Apr 5 14:00:50 localhost useradd[2128]: new group: name=test1, GID=501 Apr 5 14:00:50 localhost useradd[2128]: new user: name=test1, UID=501, GID=501, home=/home/test1, shell=/bin/bash Apr 5 14:07:15 localhost su: pam_unix(su-l:session): session closed for user tom

以后可以查看日志文件分析主機(jī)是否遭到入侵攻擊,或者查看某用戶登錄進(jìn)來(lái)并使用特殊權(quán)限執(zhí)行了哪些指令等。所以我們要實(shí)時(shí)監(jiān)控此文件的動(dòng)向。

參考示例

以用戶 mysql 的身份執(zhí)行命令 pwd

當(dāng)前登錄用戶是 root,我要以 mysql 的身份執(zhí)行命令 pwd,命令如下:

[root@htlwk0001host ~]# sudo -u mysql pwd /root

以用戶 root 的身份執(zhí)行命令 pwd

當(dāng)前登錄用戶是 mysql,我要以 root 的身份執(zhí)行命令 pwd,命令語(yǔ)句如下:

[mysql@htlwk0001host root]$ sudo pwd [sudo] mysql 的密碼: mysql 不在 sudoers 文件中。此事將被報(bào)告。

注:
1.sudo 沒(méi)有使用選項(xiàng) -u 來(lái)指定其它用戶,默認(rèn)是 root 用戶
2.從上面輸出結(jié)果可以知道,使用命令 sudo,需要輸入當(dāng)前登錄用戶自己的密碼
3.當(dāng)前登錄用戶沒(méi)有在 /etc/sudoers 文件中,所以不能使用命令 sudo

這個(gè)命令相當(dāng)于使用 root 超級(jí)用戶重新登錄一次 shell,只不過(guò)密碼是當(dāng)前登錄用戶的密碼。而且重要是,該命令會(huì)重新加載 /etc/profile 文件以及 /etc/bashrc 文件等系統(tǒng)配置文件,并且還會(huì)重新加載 root 用戶的 $SHELL 環(huán)境變量所對(duì)應(yīng)的配置文件 ,比如:root 超級(jí)用戶的$SHELL 是 /bin/bash,則會(huì)加載 /root/.bashrc 等配置。如果是 /bin/zsh,則會(huì)加載 /root/.zshrc 等配置,執(zhí)行后是完全的 root 環(huán)境。

以 root 的權(quán)限執(zhí)行上一條命令

如果由于你忘了使用 sudo 而導(dǎo)致命令行返回一個(gè)錯(cuò)誤,只需輸入 sudo !! 就可以用 sudo 來(lái)執(zhí)行上一條指令:

[mysql@htlwk0001host ~]$ sudo !!

以 root 的權(quán)限編輯指定的文件

[root@htlwk0001host mysql]# sudo -e /root/student.txt

使用命令 sudo,如果沒(méi)有使用選項(xiàng) -u 指定用戶,默認(rèn)是 root 用戶。這條命令等效下面這條指令:

[root@htlwk0001host mysql]# sudoedit /root/student.txt

普通用戶切換成 root 身份

當(dāng)前登錄用戶是 mysql,想切換成用戶 root,可以執(zhí)行下面的命令:

[mysql@htlwk0001host ~]$ sudo -i [sudo] mysql 的密碼:

注:
1.這里是輸入用戶 mysql 自己的登錄密碼。
2.必須在文件 /etc/sudoers 中配置用戶 mysql 有關(guān) sudo 的權(quán)限(即授權(quán)),用戶 mysql 才能使用命令 sudo。
3.選項(xiàng) -i,表示以目標(biāo)用戶 root 登錄 shell,這樣切換成用戶 root 后,相關(guān)的運(yùn)行環(huán)境也改變成用戶 root 的運(yùn)行環(huán)境,感覺(jué)好像就是以用戶 root 登錄 shell 一樣,其實(shí)還是有區(qū)別的,具體需要參閱手冊(cè)。

也可以使用命令 su 切換成 root 用戶:

[mysql@htlwk0001host ~]$ su root 密碼:

這里需要輸入用戶 root 的登錄密碼。

使用 root 的身份執(zhí)行最近一條指令

如果由于你忘了使用 sudo 而導(dǎo)致命令行返回一個(gè)錯(cuò)誤,只需輸入 sudo !! 就可以用 sudo 來(lái)執(zhí)行上一條指令。

使用 sudo 切換 Shell 類型

如果你需要執(zhí)行很多條需要 root 權(quán)限的命令,你可以臨時(shí)切換整個(gè)命令行 shell 來(lái)取得 root 級(jí)別的訪問(wèn)權(quán)限。方法就是先輸入sudo -s,回車后再鍵入你的密碼。

感覺(jué) -s 選項(xiàng)有點(diǎn)類似 -i 選項(xiàng),都可以切換指定用戶身份。

切換成指定的用戶

[root@htlwk0001host ~]# sudo -u mysql -i [mysql@htlwk0001host ~]$

或者

[root@htlwk0001host ~]# sudo -u mysql -s [mysql@htlwk0001host root]$

感覺(jué) -s 選項(xiàng)有點(diǎn)類似 -i 選項(xiàng),都可以切換成指定的用戶身份。但是兩者肯定有區(qū)別,我沒(méi)有研究出本質(zhì)的區(qū)別,目前可以知道的就是使用選項(xiàng) -i 切換后當(dāng)前工作目錄會(huì)改成目標(biāo)用戶的家目錄,而選項(xiàng) -s 則沒(méi)有改變,但是這點(diǎn)并不是很重要,我查看了兩種選項(xiàng)切換后的環(huán)境變量,也都改成了目標(biāo)用戶的環(huán)境變量。

重要:請(qǐng)注意 su 命令也能讓你切換用戶(默認(rèn)切換到 root )。這個(gè)命令需要你輸入 root 密碼。為了避免這一點(diǎn),你可以使用 sudo 執(zhí)行它

[mysql@htlwk0001host root]$ sudo su [sudo] mysql 的密碼: [root@htlwk0001host ~]#

這樣你只需要輸入你的登錄密碼。

顯示當(dāng)前用戶可以用 sudo 執(zhí)行哪些命令

[lamp@localhost ~]$ sudo -l [sudo] password for lamp: # 需要輸入lamp用戶的密碼 User lamp may run the following commands on this host: (root) /sbin/shutdown -r now

可以看到,lamp 用戶擁有了 shutdown -r now 的權(quán)限。這時(shí),lamp 用戶就可以使用 sudo 執(zhí)行如下命令重啟服務(wù)器:

[lamp@localhost ~]$ sudo /sbin/shutdown -r now

通過(guò)加入群組的方式給普通用戶授權(quán)

ubuntu 系統(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è)用戶:

sudo:x:27:nick,jack

或者您可以使用 usermod 命令把用戶 jack 添加到一個(gè) sudo 用戶組中:

$ sudo usermod -a -G sudo jack

上面的設(shè)置中我們把用戶 jack 添加到了 sudo 組中,所以當(dāng)用戶 jack 登錄后就可以通過(guò) sudo 命令以 root 權(quán)限執(zhí)行命令了!

總結(jié)

以上是生活随笔為你收集整理的Linux 命令之 sudo -- 以其他用户身份来执行命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。