Linux sudo命令用法詳解:系統權限管理
- 僅僅為了一個特權操作就直接賦予普通用戶控制系統的完整權限;
- 當多人使用同一臺主機時,如果大家都要使用 su 命令切換到 root 身份,那勢必就需要 root 的密碼,這就導致很多人都知道 root 的密碼;
考慮到使用 su 命令可能對系統安裝造成的隱患,最常見的解決方法是使用 sudo 命令,此命令也可以讓你切換至其他用戶的身份去執行命令。
相對于使用 su 命令還需要新切換用戶的密碼,sudo 命令的運行只需要知道自己的密碼即可,甚至于,我們可以通過手動修改 sudo 的配置文件,使其無需任何密碼即可運行。
sudo 命令默認只有 root 用戶可以運行,該命令的基本格式為:
[root@localhost ~]# sudo [-b] [-u 新使用者賬號] 要執行的命令
常用的選項與參數:- -b :將后續的命令放到背景中讓系統自行運行,不對當前的 shell 環境產生影響。
- -u :后面可以接欲切換的用戶名,若無此項則代表切換身份為 root 。
- -l:此選項的用法為 sudo -l,用于顯示當前用戶可以用 sudo 執行那些命令。
【例 1】
[root@localhost ~]# grep sshd /etc/passwd
sshd:x:74:74:privilege-separated SSH:/var/empty/sshd:/sbin.nologin
[root@localhost ~]# sudo -u sshd touch /tmp/mysshd
[root@localhost ~]# ll /tmp/mysshd
-rw-r--r-- 1 sshd sshd 0 Feb 28 17:42 /tmp/mysshd
【例 2】
[root@localhost ~]# sudo -u vbird1 sh -c "mkdir ~vbird1/www; cd ~vbird1/www; \
> echo 'This is index.html file' > index.html"
[root@localhost ~]# ll -a ~vbird1/www
drwxr-xr-x 2 vbird1 vbird1 4096 Feb 28 17:51 .
drwx------ 5 vbird1 vbird1 4096 Feb 28 17:51 ..
-rw-r--r-- 1 vbird1 vbird1 24 Feb 28 17:51 index.html
前面說過,默認情況下 sudo 命令,只有 root 身份可以使用,那么,如何讓普通用戶也能使用它呢?
解決這個問題之前,先給大家分析一下 sudo 命令的執行過程。sudo命令的運行,需經歷如下幾步:
- 當用戶運行 sudo 命令時,系統會先通過 /etc/sudoers 文件,驗證該用戶是否有運行 sudo 的權限;
- 確定用戶具有使用 sudo 命令的權限后,還要讓用戶輸入自己的密碼進行確認。出于對系統安全性的考慮,如果用戶在默認時間內(默認是 5 分鐘)不使用 sudo 命令,此后使用時需要再次輸入密碼;
- 密碼輸入成功后,才會執行 sudo 命令后接的命令。
顯然,能否使用 sudo 命令,取決于對 /etc/sudoers 文件的配置(默認情況下,此文件中只配置有 root 用戶)。所以接下來,我們學習對 /etc/sudoers 文件進行合理的修改。
sudo命令的配置文件/etc/sudoers
修改 /etc/sudoers,不建議直接使用 vim,而是使用 visudo。因為修改 /etc/sudoers 文件需遵循一定的語法規則,使用 visudo 的好處就在于,當修改完畢 /etc/sudoers 文件,離開修改頁面時,系統會自行檢驗 /etc/sudoers 文件的語法。因此,修改 /etc/sudoers 文件的命令如下:
[root@localhost ~]# visudo
…省略部分輸出…
root ALL=(ALL) ALL <--大約 76 行的位置
# %wheel ALL=(ALL) ALL <--大約84行的位置
#這兩行是系統為我們提供的模板,我們參照它寫自己的就可以了
…省略部分輸出…
這兩行模板的含義分為是:
root ALL=(ALL) ALL
#用戶名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)
#%wheel ALL=(ALL) ALL
#%組名 被管理主機的地址=(可使用的身份) 授權命令(絕對路徑)
模塊 | 含義 |
---|---|
用戶名或群組名 | 表示系統中的那個用戶或群組,可以使用 sudo 這個命令。 |
被管理主機的地址 | 用戶可以管理指定 IP 地址的服務器。這里如果寫 ALL,則代表用戶可以管理任何主機;如果寫固定 IP,則代表用戶可以管理指定的服務器。如果我們在這里寫本機的 IP 地址,不代表只允許本機的用戶使用指定命令,而是代表指定的用戶可以從任何 IP 地址來管理當前服務器。 |
可使用的身份 | 就是把來源用戶切換成什么身份使用,(ALL)代表可以切換成任意身份。這個字段可以省略。 |
授權命令 | 表示 root 把什么命令命令授權給用戶,換句話說,可以用切換的身份執行什么命令。需要注意的是,此命令必須使用絕對路徑寫。默認值是 ALL,表示可以執行任何命令。 |
【例 3】
授權用戶 lamp 可以重啟服務器,由 root 用戶添加,可以在 /etc/sudoers 模板下添加如下語句:
[root@localhost ~]# visudo
lamp ALL=/sbin/shutdown -r now
[root@localhost ~]# su - lamp
#切換成lamp用戶
[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@localhost ~]$ sudo /sbin/shutdown -r now
再次強調,授權命令要使用絕對路徑(或者把 /sbin 路徑導入普通用戶 PATH 路徑中,不推薦使用此方式),否則無法執行。【例 4】
假設現在有 pro1,pro2,pro3 這 3 個用戶,還有一個 group 群組,我們可以通過在 /etc/sudoers 文件配置 wheel 群組信息,令這 3 個用戶同時擁有管理系統的權限。
首先,向 /etc/sudoers 文件中添加群組配置信息:
[root@localhost ~]# visudo
....(前面省略)....
%group ALL=(ALL) ALL
#在 84 行#wheel這一行后面寫入
[root@localhost ~]# usermod -a -G group pro1
[pro1@localhost ~]# sudo tail -n 1 /etc/shadow <==注意身份是 pro1
....(前面省略)....
Password: <==輸入 pro1 的口令喔!
pro3:$1$GfinyJgZ$9J8IdrBXXMwZIauANg7tW0:14302:0:99999:7:::
[pro2@localhost ~]# sudo tail -n 1 /etc/shadow <==注意身份是 pro2
Password:
pro2 is not in the sudoers file. This incident will be reported.
#此錯誤信息表示 pro2 不在 /etc/sudoers 的配置中。
beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。
通俗易懂,深入淺出,一篇文章只講一個知識點。
文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。
文章不涉及代碼,不燒腦細胞,人人都可以學習。
當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!