三分鐘快速了解 Linux sudo 指令是什麼!

今天我們要來看一個非常常見的東西!如果你有在使用 linux 系統的話,那你一定對這個指令非常熟悉。

沒錯!今天我們就要來看什麼是 sudo

只要你是軟體工程師,那幾乎天天都會用到這個指令,但你真的知道這是什麼嗎?

不知道沒關係!我們今天就是要來了解這個到底在幹嘛!

什麼是 sudo

我們首先當然要先來理解什麼是 sudosudo 其實是「Super User DO」的縮寫。

sudo 通常會被加在某一個指令的前面,代表這個指令是透過 Super User 所執行的。

Super User 在這裡就是指電腦管理員的意思,也就是擁有這台電腦的最高權限,可以讀寫這台電腦中的任何檔案。在 Linux 系統中,root 就是一個 Super User。

那什麼樣的指令會需要在前面加上 sudo 呢?

比如說,更改電腦的網路設定、查看某些密鑰、更改系統設定等等。

一台電腦可能有很多不同的使用者,而一般來說,我們不會想要每一個使用者都有權限更改電腦設定,因為這很容易搞砸電腦設定。

那麼假如,今天一個沒有權限的使用者需要這樣的權限怎麼辦?

那麼他就可以利用 sudo 來執行指令,代表他是透過管理員身份執行的!

如果沒有 sudo

其實,在初始 Linux 系統被開發時,sudo 指令並不存在。

那麼,在 sudo 出現前,大家是如何取得權限的呢?

不外乎就是兩個:

  1. 登入 root 使用者
  2. 利用指令 su (switch user) 切換成為 root 使用者

這兩個方式都需要知道 root 的密碼。而這兩個方式也都並不安全。

想像一下,假如今天有一個人登入了 root 帳號,執行指令後忘記登出了,那麼下一個人就直接成為 root 了。

使用指令 su 也是一樣的概念,如果做完事忘記切換回來,那麼下一個人就有權限可以更改所有檔案。

這當然不是我們想要的,因此,之後才有了 sudo 的出現。

sudo 的出現

sudo 的出現提供了兩個重要的手段:

  1. 在一段時間後,可以強制登出 root 使用者
  2. 只有特定的使用者可以使用 sudo

第一點的好處不用我多講,我們來看看第二點。

其實並不是所有使用者都可以使用 sudo 這個指令,只有在特定群組中才有這樣的權限(接下去會講)。

這讓我們可以更好的掌控哪些人可以讀寫哪些資料,對電腦系統提供更多的保護。

實際範例

接下來,我們會展示一個簡單的範例,讓我們更了解 sudo 這個指令!

首先,我們會來創建一個新的使用者,這個使用者並不會有使用 sudo 的權限。

接著,我們會賦予這個使用者使用 sudo 的權限。

最後,確認這個使用者有正確的權限!

那就讓我們開始吧!

創建使用者

首先,我們來創立一個叫 dummy 的使用者:

$ sudo adduser dummy

我們接著設定這個使用者的密碼,以及其他相關的資訊。

一般來說,新創立的使用者都不會有使用 sudo 的權限。

檢查 sudo 權限

我們可以切換為 dummy 使用者並試著執行 sudo 指令,看看可不可以執行成功。

$ su - dummy
$ sudo ls /root

執行後,我們會看到類似這樣的錯誤:

dummy is not in the sudoers file. This incident will be reported.

這代表當前使用者 dummy 並沒有執行 sudo 的權限。

賦予 sudo 權限

基本上有兩種方法可以賦予 dummy 這個 sudo 權限:

  1. 加入特定群組
  2. 直接賦予權限
加入特定群組

藉由將 dummy 加入特定群組,我們可以讓 dummy 有使用 sudo 的權限。

我們可以修改 /etc/group 這個檔案,並將 dummy 加入叫做 sudo(或是 wheel)的群組。所有在這個群組中的使用者都可以執行 sudo 指令。

打開 /etc/group 檔案後,我們可以找到下面這一行,並在後面加上 dummy:

wheel:*:0:root, dummy

這樣就完成啦!

直接賦予權限

這方法則是直接針對 dummy 這個使用者賦予權限!

這個方法則是要透過修改 /etc/sudoers 這個檔案。一樣我們打開 /etc/sudoers 這個檔案,並將下面這行加到檔案中:

dummy ALL=(ALL) ALL

這樣就完成啦!

以上這兩個方法都可以讓這個 dummy 使用者擁有 sudo 權限,那差別究竟在哪裡呢?

  • 在第一個方法中,我們是針對「群組」給予 sudo 權限,所有在這個群組中的使用者都有這樣的權限。
  • 然而在第二個方法中,我們是針對「使用者」給予權限,這讓權限的管理更為細緻。另外,第二種方法也可以讓我們選擇要讓 dummy 可是使用哪些 sudo 指令。

比如說,如果我們將上面的指令修改成:

dummy ALL=(ALL) /bin/ls, /bin/mv

那就代表 dummy 只能執行 sudo lssudo mv 而已!

因此,兩個方法雖然都可以,但第二個方法提供了我們更細微的設定,所以完全看你的使用場景而定。

測試 sudo 權限

到這裡就完成啦!接下來我們就來測試看看 dummy 的權限:

$ su - dummy
$ sudo ls /root

這次,你應該就可以成功執行這樣的指令了!

你可以看到在 /root 資料夾下的所有檔案與資料夾。

總結

這章我們又快速且開心的學到了一個新的知識啦!

其實我之前雖然大概知道這在幹嘛,但從來沒有清楚搞懂背後的邏輯。

現在終於懂啦!希望也有讓你們清楚了解!

那這章就到這裡啦~

如果有學到東西的話可以留個五星評價喔!