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
檢視結果如下圖:
上圖中藍框前邊的(root
),是因為我上邊配置的時候省略了等號後邊的賦值,預設切換成root
使用者,如果我配置成ALL,(root
)位置會顯示成ALL。(root
和ALL效果上都一樣)
還要注意一點,如果編輯授權內容是user1 ALL=/sbin/shutdown
,代表user1
使用者可以使用shutdown
命令所有的引數,如-r
重啟,-h
關機。所以就向上面的說賦予的許可權越詳細,普通使用者得到的許可權越小。
注意:配置sudo授權,不需要重啟伺服器,儲存退出即可。
普通使用者如何執行呢?
普通使用者直接使用shutdown
命令是不行的,需要使用sudo /sbin/shutdown -r now
,才能執行。注意要使用shutdown
命令的絕對路徑。如下圖所示:
示例2
需求:我想授權一個使用者管理我的Web伺服器,以後修改設定更新網頁什麼都不用管。
首先要分析授權使用者管理Apache,至少要實現哪些基本授權:
- 可以使用Apache管理指令碼。
- 可以修改Apache配置檔案。
- 可以更新網頁內容。
剩下的解決不了,再來找我就行了。
假設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
。