Sudo

sudo （substitute user [或 superuser] do），是一種電腦程式，用於類Unix作業系統如BSD、Mac OS X/macOS以及GNU/Linux，該電腦程式可以讓使用者以安全的方式使用特定的權限執行程式（通常為作業系統的超級使用者）。

原理
在sudo於1980年前後被寫出之前，一般使用者利用 su 切換用户，管理系統时通常使用此命令切换為超級使用者。但是使用su的缺點之一在於必須要先告知目标使用者的密碼。

sudo使一般使用者不需要知道目标使用者的密碼即可獲得權限。首先由超級使用者將普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息，登記在特殊的檔案中（通常是/etc/sudoers），即完成對該使用者的授權（此時該使用者稱為「sudoer」）；在一般使用者需要取得特定權限時，其可在命令前加上「sudo」，此時sudo將會詢問該使用者自己的密碼（以確認終端機前的是該使用者本人），回答後系統即會將該命令的-{zh-tw:行程;zh-cn:进程}-以目标使用者的權限執行。如果没有指定目标用户，就默认以超级用户的权限执行。之後的一段時間內（預設為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）。

语法
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功能。

參考資訊

外部連結
 
 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

安全软件
系統管理
Unix用户管理和支持相关实用工具