首頁 > linux教程 > Linux權限管理 閱讀:0更新時間:2020-03-28 01:00:19

Linux sudo命令用法詳解:系統權限管理

我們知道,使用 su 命令可以讓普通用戶切換到 root 身份去執行某些特權命令,但存在一些問題,比如說:
  • 僅僅為了一個特權操作就直接賦予普通用戶控制系統的完整權限;
  • 當多人使用同一臺主機時,如果大家都要使用 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

本例中,無法使用 su - sshd 的方式成功切換到 sshd 賬戶中,因為此用戶的默認 Shell 是 /sbin/nologin。這時就顯現出 sudo 的優勢,我們可以使用 sudo 以 sshd 的身份在 /tmp 目錄下創建 mysshd 文件,可以看到,新創建的 mysshd 文件的所有者確實是 sshd。

【例 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 命令切換至 vbird1 身份,并運行 sh -c 的方式來運行一連串的命令。

前面說過,默認情況下 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行的位置
#這兩行是系統為我們提供的模板,我們參照它寫自己的就可以了
…省略部分輸出…

通過 visudo 命令,我們就打開了 /etc/sudoers 文件,可以看到如上顯示的 2 行信息,這是系統給我們提供的 2 個模板,分別用于添加用戶和群組,使其能夠使用 sudo 命令。

這兩行模板的含義分為是:

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

表 1 對以上 2 個模板的各部分進行詳細的說明。
表 1 /etc/sudoers 用戶和群組模板的含義
模塊 含義
用戶名或群組名 表示系統中的那個用戶或群組,可以使用 sudo 這個命令。
被管理主機的地址 用戶可以管理指定 IP 地址的服務器。這里如果寫 ALL,則代表用戶可以管理任何主機;如果寫固定 IP,則代表用戶可以管理指定的服務器。如果我們在這里寫本機的 IP 地址,不代表只允許本機的用戶使用指定命令,而是代表指定的用戶可以從任何 IP 地址來管理當前服務器。
可使用的身份 就是把來源用戶切換成什么身份使用,(ALL)代表可以切換成任意身份。這個字段可以省略。
授權命令 表示 root 把什么命令命令授權給用戶,換句話說,可以用切換的身份執行什么命令。需要注意的是,此命令必須使用絕對路徑寫。默認值是 ALL,表示可以執行任何命令。

【例 3】
授權用戶 lamp 可以重啟服務器,由 root 用戶添加,可以在 /etc/sudoers 模板下添加如下語句:

[root@localhost ~]# visudo
lamp ALL=/sbin/shutdown -r now

注意,這里也可以寫多個授權命令,之間用逗號分隔。用戶 lamp 可以使用 sudo -l 查看授權的命令列表:

[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 用戶擁有了 shutdown -r now 的權限。這時,lamp 用戶就可以使用 sudo 執行如下命令重啟服務器:

[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這一行后面寫入

此配置信息表示,group 這個群組中的所有用戶都能夠使用 sudo 切換任何身份,執行任何命令。接下來,我們使用 usermod 命令將 pro1 加入 group 群組,看看有什么效果:

[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 的配置中。

可以看到,由于 pro1 加入到了 group 群組,因此 pro1 就可以使用 sudo 命令,而 pro2 不行。同樣的道理,如果我們想讓 pro3 也可以使用 sudo 命令,不用再修改 /etc/sudoers 文件,只需要將 pro3 加入 group 群組即可。

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

優秀教程

国产亚洲欧美日韩