sudo
sudo (substitute user [或 superuser] do),是一种电脑程序,用于类Unix操作系统如BSD、Mac OS X/macOS以及GNU/Linux,该电脑程序可以让用户以安全的方式使用特定的权限运行程序(通常为操作系统的超级用户)。
![]() 终端中的sudo命令 | |
开发者 | Todd C. Miller |
---|---|
当前版本 | |
源代码库 | |
操作系统 | 类Unix系统 |
类型 | 权限授权 |
许可协议 | ISC-style[3] |
网站 | www |
原理
在sudo于1980年前后被写出之前[4],一般用户利用 su
切换用户,管理系统时通常使用此命令切换为超级用户。但是使用su的缺点之一在于必须要先告知目标用户的密码。
sudo使一般用户不需要知道目标用户的密码即可获得权限。首先由超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers
),即完成对该用户的授权(此时该用户称为「sudoer」)[5];在一般用户需要取得特定权限时,其可在命令前加上「sudo
」,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的以目标用户的权限运行。如果没有指定目标用户,就默认以超级用户的权限执行。之后的一段时间内(缺省为5分钟[6],可在/etc/sudoers
自订),使用sudo不需要再次输入密码。
由于不需要目标用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、macOS等。但也有一些Unix系统对sudo做了限制,如FreeBSD需手动安装sudo,然后必须手动配置/etc/sudoers
(安装在/usr/bin/sudo
),或/usr/local/etc/sudoers
(安装在/usr/loacl/bin/sudo
)[7]。
语法
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功能。[8][9][10]
参见
- wheel用户组
参考信息
- . 2023年11月6日 [2023年11月10日].
- . 2023年12月30日 [2024年1月28日].
- . [2009-07-07]. (原始内容存档于2015-07-31).
- Miller, Todd C. . [2008-06-20]. (原始内容存档于2007-02-22).
- 以Ubuntu系统为例,管理员通过执行
visudo
来编辑/etc/sudoers
,给普通用户授予某些sudo的权力 - 依各发行版可能有所异同,例如Ubuntu下缺省为15分钟。
- . [2022-10-19]. (原始内容存档于2022-10-19).
- . National Vulnerability Database. [2020-01-31]. (原始内容存档于2020-02-06).
- Dan Goodin. . Ars Technica. [2020-02-05]. (原始内容存档于2022-05-07).
- 林妍溱. . 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