Linux 一般使用者能夠執行 root 權限的指令嗎?Linux 的 su 與 sudo 範例教學與設定




su 和 sudo 在 Linux 系統中,扮演管理權限一個很重要的功能,它們可以讓你在 Linux 系統上執行系統管理者命令以及管理權限。我們將深入瞭解這兩個指令的工作原理,以及如何在實際應用中使用它們。

su 指令是什麼?

su 指令是Linux中的一個關鍵工具,用於切換到其他用戶的帳戶。它的全名是 “Switch User”,意思是切換用戶。通常情況下,我們使用su來切換到超級用戶(root)帳戶,以執行需要特權的操作。請注意,使用su時需要知道目標用戶的密碼。

su 指令介紹

su 如何使用?

使用su指令非常簡單。只需在終端中輸入以下命令:

#這條命令中的 "-" 表示切換到目標用戶的環境,包括目標用戶的工作目錄和 shell 環境設定。
su -
#如果您不加 "-",則僅切換用戶,但保持當前用戶的環境。
su

接下來,系統將要求您輸入目標用戶的密碼。請輸入正確的密碼,然後按下 Enter 鍵。如果您輸入的密碼正確,您將成功切換到目標用戶的帳戶。

請注意,當您使用su切換到超級用戶帳戶時,請小心操作,因為您將擁有對系統的完全控制權。不小心的操作可能導致系統損壞,所以請謹慎使用su指令。

su 常用參數

參數描述
-切換到目標用戶的環境,包括工作目錄和 shell 環境設定
-c 命令執行完指定的指令之後就會自動離開
--help顯示幫助信息

sudo 指令介紹

sudo 是什麼?

sudo 是 “以超級用戶權限執行(Superuser Do)” 的縮寫。它允許普通用戶執行特權操作,前提是他們具有權限。相比於 su,提供了更細粒度的權限控制,並且不需要知道超級用戶的密碼,只需要輸入您自己的密碼,用起來更方便!

sudo 如何使用?

sudo 命令

然後,系統將要求您輸入您自己的密碼,以確認您具有執行該命令的權限。如果您有權限,命令將被執行。

如:在安裝套件的時候非常常用到這個指令

sudo apt-get install 軟件包名稱

sudo 常用參數

參數描述
-u 用户名指定要執行命令的目標用戶
-l--list顯示當前用戶的 sudo 權限

su, sudo 簡單來說有甚麼不一樣?

整理了主要的差異如這個表格,幫助您更好了解整篇文章架構及這兩個指令的差異

指令susudo
用途切換到其他用戶的帳戶,通常是超級用戶以超級用戶權限執行特權命令
密碼需要目標用戶的密碼,如 root需要用戶自己的密碼
權限控制較少細粒度,通常切換到目標用戶的全部權限較高細粒度,可以指定哪些命令需要特權執行
安全性較低,因為完全切換到目標用戶,潛在風險較高較高,因為只執行特權命令,限制了風險
用法su -(切換到超級用戶)sudo 命令(以特權執行命令)
退出使用 exitlogout 退出切換的用戶簡單地關閉終端或使用 exit 退出特權模式
登錄紀錄記錄登錄紀錄中顯示切換到目標用戶的記錄登錄紀錄中顯示使用 sudo 執行的命令記錄

如何限制 sudo 指令權限 ? /etc/sudoers 文件詳細說明

/etc/sudoers 文件是 Linux 系統中非常重要的配置文件之一,它控制著使用者對 sudo 命令的訪問權限。這個文件使用特定的語法和格式來定義哪些使用者可以執行哪些命令以及在什麼條件下。

使用 visudo 命令

編輯 /etc/sudoers 文件時,應始終使用 visudo 命令,而不是直接使用文本編輯器。visudo 會檢查文件的語法錯誤,並在發現錯誤時禁止保存文件,以防止出現訪問問題。

超級使用者(root)

/etc/sudoers 文件中,超級使用者,也就是 root 用戶,通常被設置為預設擁有所有權限。這表示 root 用戶可以執行任何命令,而不受限於 sudo

使用者、群組設定

對於一般使用者,/etc/sudoers 文件允許系統管理員配置哪些使用者可以使用 sudo 命令以及其訪問權限。以下是一個示例的使用者設定:

#帳號名稱 來源主機=(可切換帳號) 可執行的指令
username ALL=(ALL:ALL) ALL
#例如,若要讓 edward 這個帳號可以使用 sudo 執行所有的指令
edward ALL=(ALL) ALL

#%群組名稱    來源主機=(可切換帳號) 可執行的指令
%groupname  ALL=(ALL) ALL

#例如,要讓 dev 群組中的所有使用者都可以使用 sudo
%dev  ALL=(ALL) ALL

這個設定表示 username 用戶可以以任何用戶(ALL)的身份,在任何主機(ALL)上執行任何命令(ALL)。

其中四個欄位的意義如下:

  • 帳號名稱:可以使用 sudo 的帳號名稱。
  • 來源主機:透過限制使用者只能從特定的網路主機連線才能使用,可以有效防止入侵者從不明的主機進行登入攻擊。如果將限制指定為 ALL,則代表不限制來源主機。
  • 可切換帳號:如果將權限指定為 ALL,則可以取得任何帳號的權限。反之,則只能取得指定的帳號權限。
  • 可執行的指令:如果將指令權限指定為 ALL,則可以執行任何命令。反之,則只能執行特定的命令。

命令設定

使用者設定中的最後一個 ALL 代表允許執行的命令列表。這裡可以指定具體的命令或命令的通配符。例如,如果你只想讓使用者執行特定命令,可以像這樣設置:

#帳號名稱 來源主機=(可切換帳號) 可執行的指令
john ALL=(ALL) NOPASSWD: /usr/bin/apt-get update

這表示 username 用戶可以執行 /usr/bin/apt-get update 命令,但不能執行其他命令。

通配符

假設您希望使用者 bob 能夠執行 /usr/bin/apt-get 命令以更新軟件包列表和安裝軟件包,但只對以 install 開頭的指令允許執行,而不需要輸入密碼。您可以這樣設定:

bob ALL=(ALL) NOPASSWD: /usr/bin/apt-get update, /usr/bin/apt-get install *

這個設定表示:

  • bob 使用 sudo 時不需要輸入密碼。
  • 只允許 bob 執行 /usr/bin/apt-get update/usr/bin/apt-get install 開頭的指令,並且通配符 * 允許匹配任何以 install 開頭的指令,無需進一步指定。

這樣,bob 就可以更新軟件包列表和安裝軟件包,而不需要輸入密碼,並且只能執行特定模式的安裝指令。請注意,使用通配符號應謹慎,以確保您的設定不會對系統造成安全風險。

主機設定

/etc/sudoers 文件也允許指定命令可以在哪些主機上執行。如果你有多台主機,可以使用主機名或通配符進行設定。例如:

#帳號名稱 來源主機=(可切換帳號) 可執行的指令
username webserver=(ALL:ALL) /usr/bin/restart-web-app

這個設定表示:

  • john 使用 sudo 時不需要輸入密碼。
  • 只允許 john 執行 /usr/bin/apt-get update 這個特定命令,無法執行其他命令。

這樣,john 就能夠更新軟件包列表,而不需要輸入密碼,這是一個簡單且具體的命令設定範例。

不用輸入密碼

如果想要讓特定的使用者可以在不需要輸入密碼的情況下,可以加入 NOPASSWD 的設定。例如:

#edward使用者不需要再輸入密碼
edward ALL=(ALL) NOPASSWD:ALL
#dev群組不需要再輸入密碼
%dev ALL=(ALL) NOPASSWD:ALL

使用別名

當在 /etc/sudoers 中處理複雜的配置時,例如多個使用者和指令組合,使用別名的方式來管理設定會很有用。這樣可以簡化配置並使其更易於維護。

假設您有三位系統管理員,分別是 admin1admin2admin3,並且您想要允許他們執行特定的管理命令。您可以使用別名來簡化這些設定。

首先,建立一個帳號別名 ADMINS 包含這三位管理員:

User_Alias ADMINS = admin1, admin2, admin3

接下來,建立一個命令別名 MANAGE_CMDS 包含管理命令,例如重啟服務和查看系統日誌:

Cmnd_Alias MANAGE_CMDS = /usr/sbin/service apache2 restart, /usr/sbin/service nginx restart, /usr/bin/tail -f /var/log/syslog

最後,將別名用於設定這三位管理員的權限:

ADMINS ALL=(ALL) MANAGE_CMDS

這樣一來,您不需要在 /etc/sudoers 中重複列出每個管理員和每個管理命令,而是使用別名來簡化設定,使其更容易閱讀和管理。

常見問題解答

  1. 什麼時候應該使用 su,什麼時候應該使用 sudo
    • 應該使用 su 切換到超級用戶帳戶,以執行需要完全特權的操作。而 sudo 應該用於普通用戶執行需要特權的特定命令。
  2. 如何添加用戶到 sudo 群組?
    • 可以運行 sudo usermod -aG sudo 用户名 命令,其中 “用户名” 是您要添加的用戶名稱。

延伸閱讀

延伸閱讀:Linux 系統的連結檔 links 是什麼意思?5分鐘搞清楚硬連結軟連結學會 Linux ln 指令與教學

延伸閱讀:什麼是 Linux lsof ? 5分鐘學會管理行程和檔案的用法教學與範例





主頁 » LINUX » 實用技巧 » 如何讓 Linux 使用者免密碼安全執行 root 權限的指令?su 與 sudo 範例教學

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *