sudo
sudo (substitute user [或 superuser] do),是一種電腦程式,用於類Unix作業系統如BSD、Mac OS X/macOS以及GNU/Linux,該電腦程式可以讓用戶以安全的方式使用特定的權限執行程式(通常為作業系統的超級用戶)。
開發者 | Todd C. Miller |
---|---|
目前版本 |
|
原始碼庫 | |
作業系統 | 類Unix系統 |
類型 | 權限授權 |
許可協定 | ISC-style[2] |
網站 | www |
原理
在sudo於1980年前後被寫出之前[3],一般用戶利用 su
切換用戶,管理系統時通常使用此命令切換為超級用戶。但是使用su的缺點之一在於必須要先告知目標用戶的密碼。
sudo使一般用戶不需要知道目標用戶的密碼即可獲得權限。首先由超級用戶將普通用戶的名字、可以執行的特定命令、按照哪種用戶或用戶組的身份執行等資訊,登記在特殊的檔案中(通常是/etc/sudoers
),即完成對該用戶的授權(此時該用戶稱為「sudoer」)[4];在一般用戶需要取得特定權限時,其可在命令前加上「sudo
」,此時sudo將會詢問該用戶自己的密碼(以確認終端機前的是該用戶本人),回答後系統即會將該命令的行程以目標用戶的權限執行。如果沒有指定目標使用者,就預設以超級用戶的權限執行。之後的一段時間內(預設為5分鐘[5],可在/etc/sudoers
自訂),使用sudo不需要再次輸入密碼。
由於不需要目標用戶的密碼,部分Unix系統甚至利用sudo使一般用戶取代超級用戶作為管理帳號,例如Ubuntu、macOS等。但也有一些Unix系統對sudo做了限制,如FreeBSD需手動安裝sudo,然後必須手動組態/etc/sudoers
(安裝在/usr/bin/sudo
),或/usr/local/etc/sudoers
(安裝在/usr/loacl/bin/sudo
)[6]。
語法
sudo [-bhHpV][-s ][-u <用户>][指令]
或
sudo [-klv]
參數
-b 在後台執行指令。
-h 顯示說明。
-H 將HOME環境變數設為新身份的HOME環境變數。
-k 結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼。
-l 列出目前用戶可執行與無法執行的指令。
-p 改變詢問密碼的提示符號。
-s 執行指定的shell。
-u <用戶> 以指定的用戶作為新的身份。若不加上此參數,則預設以root作為新的身份。
-v 延長密碼有效期限5分鐘。
-V 顯示版本資訊。
-S 從標準輸入流替代終端來取得密碼
安全漏洞
2020年1月,CVE-2019-18634公佈一個已存在9年以上的漏洞,指出在pwfeedback的功能選項中。此功能讓系統可以星號字元表示目前輸入的字元,但在sudoer檔案開啟pwfeedback功能後,可能讓用戶觸發堆疊式緩衝溢位攻擊,讓沒有系統管理權限的用戶、甚至連非列於sudoer檔案中的用戶得以提升到root帳號權限。Sudo 1.7.1到1.8.25p1都受本漏洞影響,不過前提是系統管理員需開啟pwfeedback功能。[7][8][9]
參見
- wheel用戶組
參考資訊
- ^ [sudo-announce] sudo 1.9.16p1 released. 2024年11月12日 [2024年11月18日].
- ^ Sudo License. [2009-07-07]. (原始內容存檔於2015-07-31).
- ^ Miller, Todd C. A Brief History of Sudo. [2008-06-20]. (原始內容存檔於2007-02-22).
- ^ 以Ubuntu系統為例,管理員通過執行
visudo
來編輯/etc/sudoers
,給普通用戶授予某些sudo的權力 - ^ 依各發行版可能有所異同,例如Ubuntu下預設為15分鐘。
- ^ 存档副本. [2022-10-19]. (原始內容存檔於2022-10-19).
- ^ NVD - CVE-2019-18634. National Vulnerability Database. [2020-01-31]. (原始內容存檔於2020-02-06).
- ^ Dan Goodin. Serious flaw that lurked in sudo for 9 years hands over root privileges. Ars Technica. [2020-02-05]. (原始內容存檔於2022-05-07).
- ^ 林妍溱. Sudo爆可取得根帳號權限的漏洞. iThome. [2020-02-06]. (原始內容存檔於2020-02-06).
外部連結
- 官方網站
- How to audit and log user and root shells with sudo via sudosh(頁面存檔備份,存於互聯網檔案館)
- sudo tools(頁面存檔備份,存於互聯網檔案館)
- a logging root shell(頁面存檔備份,存於互聯網檔案館)
- sudo(8) man page from OpenBSD
- sudo(8) man page(頁面存檔備份,存於互聯網檔案館) from linuxmanpages.com
- sudo explained in webcomic form(頁面存檔備份,存於互聯網檔案館) by Xkcd