『學了就忘』Linux許可權管理 — 54、sudo授權

繁華似錦Fighting發表於2021-11-29

1、什麼是sudo授權

在Linux系統中,/sbin//usr/sbin/兩個目錄中的命令只有超級使用者才能使用。sudo授權就是把指定的命令授權給普通使用者,讓普通使用者可以執行指定的命令。(只給使用者授權執行一個命令的許可權)

原則上:

  • 賦予的許可權越詳細,普通使用者得到的許可權越小。
  • 賦予的許可權越簡單,普通使用者得到的許可權越大。

2、 sudo授權說明

root身份操作:使用visudo命令,賦予普通使用者許可權命令。

# 使用者名稱 被管理主機的地址(IP地址)=(可使用的身份) 授權命令(絕對路徑)
root    ALL=(ALL)  ALL

# 組名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)
%wheel    ALL=(ALL)  ALL

# (組名前邊要加上%)

說明:

  • 使用者名稱/組名:代表root給哪個使用者或使用者組賦予命令,注意組名前加%
  • 被管理主機的地址:這裡的IP地址管理的不是登入者來源的IP地址,這裡的IP指定的是使用者可以管理哪個IP地址的伺服器。那麼如果你是一臺獨立的伺服器,這裡寫ALL和你伺服器的IP地址,作用是一樣的。如果寫ALL,代表可以管理任何主機,如果我們這裡寫本機的IP地址,不代表只允許本機的使用者使用指定命令,而代表指定的使用者可以從任何IP地址來管理當前伺服器。(這裡記住寫ALL就可以了)
  • 可使用身份:就是把來源使用者切換成什麼身份使用(就是把前面使用者的身份,切換成什麼身份),(ALL)代表可以切換成任意身份,包括root。這個欄位可以省略,代表切換成root
  • 授權命令:代表root把什麼命令授權給普通使用者。預設是ALL,代表任何命令,這個當然不行,賦予的許可權越詳細,普通使用者得到的許可權越小。不過需要注意,命令一定要寫成絕對路徑。

3、sudo命令的使用

示例1

需求:比如授權使用者user1可以重啟伺服器。

普通使用者是無法重啟伺服器的,因為沒有這個命令的許可權。

[userl@localhost ~]$ shutdown -r now
shutdown: Need to be root

root使用者新增如下行:

執行執行visudo命令,賦予普通使用者許可權。

[root@localhost ~]# visudo
user1  ALL=(省略不寫)/sbin/shutdown -r now (whereis查一下)

# 檢視可用的授權
[user1@localhost ~]$ sudo -1

檢視結果如下圖:

image

上圖中藍框前邊的(root),是因為我上邊配置的時候省略了等號後邊的賦值,預設切換成root使用者,如果我配置成ALL,(root)位置會顯示成ALL。(root和ALL效果上都一樣)

還要注意一點,如果編輯授權內容是user1 ALL=/sbin/shutdown,代表user1使用者可以使用shutdown命令所有的引數,如-r重啟,-h關機。所以就向上面的說賦予的許可權越詳細,普通使用者得到的許可權越小。

注意:配置sudo授權,不需要重啟伺服器,儲存退出即可。

普通使用者如何執行呢?

普通使用者直接使用shutdown命令是不行的,需要使用sudo /sbin/shutdown -r now,才能執行。注意要使用shutdown命令的絕對路徑。如下圖所示:

image

示例2

需求:我想授權一個使用者管理我的Web伺服器,以後修改設定更新網頁什麼都不用管。

首先要分析授權使用者管理Apache,至少要實現哪些基本授權:

  1. 可以使用Apache管理指令碼。
  2. 可以修改Apache配置檔案。
  3. 可以更新網頁內容。

剩下的解決不了,再來找我就行了。

假設Aapche管理指令碼程式為/etc/rc.d/init.d/httpd(舉例的是RPM包安裝的Apache)。

條件一,用visudo命令進行授權:

[root@localhost ~]# visudo 

# 編輯內容
user1  192.168.0.156(寫ALL一樣)=/etc/rc.d/init.d/httpd reload

擴充套件:

  • reload:是重新載入配置檔案的命令。如果你正在訪問伺服器,比如下載,先不會關閉伺服器,會等你訪問完成後再重啟伺服器。(起作用時間有時候會比較長)
  • restart:重啟,先把服務關了,再進行重啟。如果有人正在你的伺服器下程式,也直接斷了。(但是常用)

授權使用者user1可以連線192.168.0.156上的Apache伺服器,通過Apache管理指令碼重新讀取配置檔案,讓更改的設定生效(reload),但不允許其執行關閉(stop)、重啟(restart)等操作。

條件二,同樣使用visudo授權:

授權使用者user1可以用root身份使用vim編輯器,編輯Apache配置檔案。

[root@localhost ~]# visudo 
user1 192.168.0.156=/usr/bin/vim  /etc/httpd/conf/httpd.conf

以上兩種sudo的設定,要特別注意,使用sudo會犯兩個錯誤:

  • 第一,授權命令沒有細化到選項和引數。
  • 第二,認為只能授權管理員執行的命令。

條件三:則比較簡單,假設網頁存放目錄為/var/www/html,則只需要授權user1對此目錄具有寫許可權或者索性更改目錄所有者為user1即可。

示例3

需求:授權aa使用者可以新增其他普通使用者

[root@localhost ~]# visudo
 
# 賦予aa新增使用者許可權,命令必須寫入絕對路徑
aa ALL=/usr/sbin/useradd

# 賦予改密碼許可權
aa ALL=/usr/bin/passwd 

# 取消對root使用者的密碼修改
aa ALL=/usr/bin/passwd [A-Za-z]*,(逗號後一定要有一個空格)!/usr/bin/passwd"", !/usr/bin/passwd root 

說明:

  • [A-Za-z]*:正規表示式,表示任意字母任意重複多次。
  • !/usr/bin/passwd" ":表示不能在passwd命令後加空。因為passwd命令後什麼都不加,表示修改當前使用者密碼,因為sudo授權passwd命令給user1使用者,當user1使用者執行passwd命令時的身份時root,所以也是修改root使用者的密碼。
  • !/usr/bin/passwd root :表示禁止在passwd命令後加root
  • 以上三個條件的順序也不能改變,測試改變順序好像不太好用了。
  • 注意:有多個許可權的時候用逗號隔開。

普通使用者使用sudo命令執行新增新使用者命令:sudo /usr/sbin/useradd ee

相關文章