Sudo (substitute user do),是一种程序,用于类Unix操作系统如BSD,Mac OS X,以及GNU/Linux以允许用户透过安全的方式使用特殊的权限运行程序 (通常为系统的超级用户)。
在sudo于1980年前后被写出之前,一般用户管理系统的方式是利用 su
切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。
sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers
),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要获取特殊权限时,其可在命令前加上“sudo
”,此时sudo将会询问该用户自己的密码(以确认终端前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers
自定义),使用sudo不需要再次输入密码。
由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理账号,例如Ubuntu、macOS等。
sudo
或
sudo
-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功能。