溫馨提示×

溫馨提示×

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

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

Linux sudo實(shí)現(xiàn)靈活授權(quán)

發(fā)布時間:2020-07-14 10:42:27 來源:網(wǎng)絡(luò) 閱讀:404 作者:houzhihui 欄目:系統(tǒng)運(yùn)維

sudo用途:

sudo用于為普通用戶授權(quán),一句話:允許哪些用戶在哪些主機(jī)上登錄后以哪個用戶身份運(yùn)行哪些命令。類似Windows系統(tǒng)中的右鍵以管理員方式運(yùn)行。

一、sudo與su的區(qū)別

舉個例子,運(yùn)維部門來一位新人想交給他完成一些基本的軟件部署任務(wù),但又擔(dān)心他對系統(tǒng)架構(gòu)環(huán)境不熟而引發(fā)誤操作,此時讓他使用su命令直接切換高權(quán)限的管理賬號可能會風(fēng)險很大,而sudo的靈活授權(quán)就可以把權(quán)限限定到合理的范圍,從而降低風(fēng)險。

1. su 實(shí)際上就是以目標(biāo)用戶身份進(jìn)行登錄,執(zhí)行su命令切換用戶時必須知道目標(biāo)用戶的密碼,授權(quán)很不靈活,同時也帶來了用戶密碼泄露的安全風(fēng)險。
2. sudo 則是基于配置文件明確定義指定用戶中以執(zhí)行哪些命令,只是臨時進(jìn)行安全上下文切換,而不需要進(jìn)行用戶登錄切換。在執(zhí)行sudo 執(zhí)行命令時只需要輸入用戶自己的密碼即,而不需要知道安全上下文切換的目標(biāo)用戶密碼。
3. su與sudo都可以執(zhí)行用戶切換操作,但sudo必須在配置文件中明確定義才可以進(jìn)行賬號切換。

su 切換用戶

  1. su username:不完全切換,HOME不會變?yōu)槟繕?biāo)用戶的HOME目錄
  2. su - username:完全切換,HOME會變?yōu)槟繕?biāo)用戶的HOME目錄。
    sudo切換用戶
  3. sudo -i 切換為root用戶
  4. sudo -u 命令后跟切換的目標(biāo)用戶名

sudo的相關(guān)文件

1.  sudo命令來源sudo-1.8.25p1-4.el8.x86_64軟件包。
2.  配置文件:存儲于/etc/sudoers,但支持模塊化配置獨(dú)立的配置模塊存儲于/etc/sudoers.d/目錄
3.  日志文件:sudo的操作記錄存儲于/var/log/secure文件中。
4.  時間探針:sudo的令牌超時機(jī)制是基于時間探針文件時間戳來判斷是否超時的,時間探針文件存儲于/run/sudo/ts/目錄下。

學(xué)習(xí)思路:

  1. sudo提供了專門的配置文件編輯工具visudo命令,具有語法檢測功能。
  2. 授權(quán)語法輸寫格式:user host=(root) command
  3. 授權(quán)語法共由4個元素:被授權(quán)用戶 登錄主機(jī)IP=(切換后的用戶身份) 授予哪些操作權(quán)限
  4. 4個授權(quán)元素可以是明確的具體對象,也可以是將一組對象組織在一起的別名。

      被授權(quán)用戶:進(jìn)程的發(fā)起者,可是將一組用戶名或組名組織在一個集合中,集合的名字就是對象別名
      登錄主機(jī):可以是一個具體的IP地址,主機(jī)名稱,也可以是多個IP地址、主機(jī)名稱,網(wǎng)段組織一起的集合。
      切換后的用戶身份:進(jìn)程的最終用戶,如果不填寫則默認(rèn)為root用戶,即被授權(quán)的用戶以任種身份來執(zhí)行后面的定義的Command。
      command:可以是一系列相關(guān)命令的集合,如:將網(wǎng)絡(luò)管理類命令組織在一起定義別名。

    以上三種元素的別名定義在配置文件中已有明確的范例,可以直接引用,在定義用戶別名時如果其成員中包含用戶組名,則必須使用%進(jìn)行引用。

最佳操作實(shí)踐:

  1. sudo的配置文件采用模塊化風(fēng)格的配置,支持includedir引用/etc/sudoers.d目錄中的單獨(dú)定義的模塊化配置文件,因此建議根據(jù)生產(chǎn)需求基于授權(quán)用戶或功能性操作集來單獨(dú)定義配置文件,在授權(quán)管理上會更清晰。
  2. 在編輯配置文件時強(qiáng)烈建議使用visudo命令,該命令不加任何選項參數(shù)則直接編輯/etc/sudoers文件,所以在定義模塊化配置時使用visudo -f 后加配置模塊文件的路徑。

二、sudo元素別名定義

元素別名可以理解為變量,別名定義有嚴(yán)格的格式要求,sudo中共有四種類型的別名:別名內(nèi)的成員對象類型受這四種類型的約束,且是必須在系統(tǒng)中存在的對象。

1. 定義語法原則:

  a.語法:別名類型     名稱=對象1,對象2,對象3…
  b.別名可以是在大字母、數(shù)字、下劃線的組,注意必須是大寫字母
  c.如果別名內(nèi)有多個成員,則用逗號分隔即可。
  d.別名定義必須在同一行內(nèi),如果一行寫不下可以使用\進(jìn)行續(xù)行。
  e.支持通配符書寫。

2. User_Alias :進(jìn)程起發(fā)始者

例:基于用戶或組名定義別名:User_Alias ADMINS = user1,user2,%admins
例:基于UID或GID定義別名:User_Alias ADMINS = #1023(UID), user2,%#1099(GID)

3. Host_Alias:登錄主機(jī)

成員對象可以是:IP地址、主機(jī)名、FQDN、CDIR格式網(wǎng)絡(luò)號
例:Host_Alias     CDNSERVERS =192.168.39.7, 192.168.40.0/24, node1, notd2.microcisco.com

4. Runas_Alias:進(jìn)程執(zhí)行的最終用戶

Runas_Alias SRVMGMT=microcisco

5. Cmnd_Alias:被授權(quán)用戶允許執(zhí)行的命令集合

集合成員之間以逗號分隔,每個命令都書寫絕對路徑,命令支持通配符匹配,要執(zhí)行的命令如果有必須明確指定參數(shù),命令的參數(shù)同樣支持通配符匹配。
例1:【定義安裝命令集】Cmnd_Alias INSTALL= /bin/rpm, /usr/bin/up2date, /usr/bin/yum
例2:【基于通配符排除】Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*, !/usr/bin/passwd root

6. 默認(rèn)用戶與runas用戶

授權(quán)需求:定義授權(quán)模板用戶,將常用的權(quán)限都授予該模板用戶,將其他有權(quán)限需求的用戶只需要將該模板用戶作為默認(rèn)賬號,即可解決頻繁的授權(quán)工作。如果有新的權(quán)限需求則只需對授權(quán)模板用戶授權(quán)即可。
配置文件中可以定默認(rèn)用戶與runas用戶,使用sudo時可以使用-u 選項指定runas用戶,不加-u時使用默認(rèn)用戶,定義語法如下:
Defaults:microcisco runas_default=vmlab
microcisco IPMI=(tom,root) /usr/bin/cat /etc/shadow,NOPASSWD:SOFTWARE

三、sudo安全

1.sudo自身權(quán)限委派sudoedit

默認(rèn)sudo的配置文件/etc/sudoers權(quán)限440,屬主屬組為root,也就是這個文件其它用戶沒有任何權(quán)限,sudoedit則是用于授權(quán)哪個用戶可以編輯sudo配置文件,只需在授權(quán)規(guī)則中將sudoedit命令寫入執(zhí)行的command列表中即可。

2.sudo的訪問令牌生存周期

為用戶做sudo授權(quán)后,用戶執(zhí)行命令會要求輸入自己的用戶密碼,默認(rèn)情況此后的5分鐘之內(nèi)再用sudo執(zhí)行命令則不必再次輸入密碼,由次可見sudo也有類似的訪問令牌生存周期機(jī)制。

  1. sudo -V 可以查看令牌期限,字段為:Authentication timestamp timeout 默認(rèn)為5分鐘,原理是執(zhí)行sudo時通過檢測時間探針文件的時間戳來判斷訪問令牌是否過期,方法就是將執(zhí)行sudo的當(dāng)前時間與時間探針文件的時間戳對比,如果當(dāng)前時間大于時間探針文件時間戳并且超過了5分鐘,則認(rèn)為訪問令牌過期,需要重新認(rèn)證。
  2. 探針文件存儲于/run/sudo/ts目錄下。可以根據(jù)生產(chǎn)需求修改令牌生存周期,visudo編輯配置文件,在env_reset后添加超時時間如:env_reset,timesamp_timeout=1
  3. sudo-v 可以重置時間探針文件的時間戳
  4. sudo -k 通過重置密碼時間為1970年1月1日來作廢sudo的緩存令牌。使用戶在本次或下一次用sudo執(zhí)行命令時必須輸入密碼。
  5. sudo -K 通過冊除時間探針文件來作廢sudo的緩存令牌

3.使用sudo時取消輸用密碼過程

對于頻繁使用的命令在每次sudo令牌過期后重新輸入密碼會比較麻煩,在運(yùn)行shell腳本中涉及到sudo授權(quán)的命令時因要求輸入密碼也會打斷腳本的運(yùn)行。
NOPASSWD可以實(shí)現(xiàn)sudo免密執(zhí)行命令,但同時也存在安全隱患,一定要做好嚴(yán)格授權(quán)。如下圖所示
Linux sudo實(shí)現(xiàn)靈活授權(quán)
正確的授權(quán)方式
Linux sudo實(shí)現(xiàn)靈活授權(quán)
4.sudo 通配符匹配引發(fā)安全漏洞
wang ALL=(root) /bin/cat /var/log/messages
期望授權(quán)允許用戶wang,查看 /var/log/目錄下的messages開頭的文件。
安全威脅:sudo cat /var/log/messages /etc/shadow,結(jié)果可以查看shadow文件,
在glob中代表任意長度任意字符,包括空格、/等。

5.sudo在安全實(shí)踐中的注意事項:

  1. sudo文件默認(rèn)具有權(quán)限suid權(quán)限,屬主屬組為root,其它用戶具備執(zhí)行權(quán)限。
  2. sudo的訪問令牌生存周期:執(zhí)行sudo獲取授予權(quán)令牌后,若暫時離開管理機(jī)時執(zhí)行sudo -k或-K作廢sudo獲取的訪問令牌。
  3. sudo在進(jìn)行目錄授權(quán)時,一定要明確排除不希望授權(quán)的對象?;谕ㄅ浞慕?jīng)典錯誤授權(quán)
  4. 不要將sudoedit命令授權(quán)給其它用戶,sudoedit實(shí)際上就是sudo命令的軟鏈接

四、實(shí)驗(yàn)部分

1. 編輯默認(rèn)配置文件:visudo
2. 定義模塊化的配置文件:visudo -f /etc/sudoers.d/vmlab
3.  定義別名

Linux sudo實(shí)現(xiàn)靈活授權(quán)

4. 定義sudo默認(rèn)用戶

Defaults:microcisco runas_default=vmlab
sudo command 用戶默認(rèn)用戶執(zhí)行命令。
sudo -u username 用指定用戶執(zhí)行命令。

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

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

AI