三分鐘快速了解 Linux sudo
指令是什麼!
今天我們要來看一個非常常見的東西!如果你有在使用 linux 系統的話,那你一定對這個指令非常熟悉。
沒錯!今天我們就要來看什麼是 sudo
!
只要你是軟體工程師,那幾乎天天都會用到這個指令,但你真的知道這是什麼嗎?
不知道沒關係!我們今天就是要來了解這個到底在幹嘛!
什麼是 sudo
我們首先當然要先來理解什麼是 sudo
。sudo
其實是「Super User DO」的縮寫。
sudo
通常會被加在某一個指令的前面,代表這個指令是透過 Super User 所執行的。
Super User 在這裡就是指電腦管理員的意思,也就是擁有這台電腦的最高權限,可以讀寫這台電腦中的任何檔案。在 Linux 系統中,root 就是一個 Super User。
那什麼樣的指令會需要在前面加上 sudo
呢?
比如說,更改電腦的網路設定、查看某些密鑰、更改系統設定等等。
一台電腦可能有很多不同的使用者,而一般來說,我們不會想要每一個使用者都有權限更改電腦設定,因為這很容易搞砸電腦設定。
那麼假如,今天一個沒有權限的使用者需要這樣的權限怎麼辦?
那麼他就可以利用 sudo
來執行指令,代表他是透過管理員身份執行的!
如果沒有 sudo
其實,在初始 Linux 系統被開發時,sudo
指令並不存在。
那麼,在 sudo
出現前,大家是如何取得權限的呢?
不外乎就是兩個:
- 登入 root 使用者
- 利用指令
su
(switch user) 切換成為 root 使用者
這兩個方式都需要知道 root 的密碼。而這兩個方式也都並不安全。
想像一下,假如今天有一個人登入了 root 帳號,執行指令後忘記登出了,那麼下一個人就直接成為 root 了。
使用指令 su
也是一樣的概念,如果做完事忘記切換回來,那麼下一個人就有權限可以更改所有檔案。
這當然不是我們想要的,因此,之後才有了 sudo
的出現。
sudo
的出現
sudo
的出現提供了兩個重要的手段:
- 在一段時間後,可以強制登出 root 使用者
- 只有特定的使用者可以使用
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
權限:
- 加入特定群組
- 直接賦予權限
藉由將 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 ls
和 sudo mv
而已!
因此,兩個方法雖然都可以,但第二個方法提供了我們更細微的設定,所以完全看你的使用場景而定。
測試 sudo
權限
到這裡就完成啦!接下來我們就來測試看看 dummy 的權限:
$ su - dummy $ sudo ls /root
這次,你應該就可以成功執行這樣的指令了!
你可以看到在 /root
資料夾下的所有檔案與資料夾。
總結
這章我們又快速且開心的學到了一個新的知識啦!
其實我之前雖然大概知道這在幹嘛,但從來沒有清楚搞懂背後的邏輯。
現在終於懂啦!希望也有讓你們清楚了解!
那這章就到這裡啦~
如果有學到東西的話可以留個五星評價喔!