到现在为止,已经了解了如何使用文件权限来管理访问。这些类型的权限分为自主访问控制 (DAC
) 或用户指定的访问控制。
基本上有两种方法,模仿用户并代表他们运行命令。最直接的是su
。它要求知道目标用户的密码,然后在认证成功时运行命令。
$ su amit -c id
Password: # entered wrong password
su: Authentication failure
$ su amit -c id
Password: # entered correct password
uid=1001(amit) gid=1001(amit) groups=1001(amit)
在 sudo
出现之后,上述方式是任何用户最后要做的事情。sudo
可以归类为强制访问控制 (MAC
),其中系统管理员必须管理配置文件或管理用户访问的策略。
在这篇文章中,将详细讨论 sudo
,在稍后的文章中,将讨论可能导致特权升级的 sudo
错误配置。
您的密码是您的私有财产,您不想与他人分享它们,除非有人窃取您的密码。在 su
中,您必须共享密码才能运行命令。
sudo
最初是 1980 年左右(Linux
发布前 11 年)发布的 UNIX
程序,系统管理员必须管理 /etc/sudoers
文件或 /etc/sudoers.d/
目录中的文件来为用户配置权限。它的意思是(超级用户做)并且它用于定义哪个用户/组可以代表谁(默认情况下root)做什么以及如何做
。
在 sudo
中,不仅可以为用户提供“运行方式”属性,还可以限制在有或没有密码的情况下可以执行的命令。如果在 sudoers
文件中配置了带密码的“运行方式”,系统将提示用户输入其帐户的密码,而不是目标用户的密码。另一个特点是,与 su
不同的是,一旦成功验证了 sudo
访问权限,它将为您的帐户缓存提升权限
而不是存储密码,因此可以以另一个用户身份运行命令而无需实际输入密码,除非超时和 没配置NOPASSWD
选项。
检查sudo权限的基础文件是/etc/sudoers
,如果还包括从其它文件包括配置,可以使用@includedir /etc/sudoers.d
。它允许使用 ID
或别名为组和用户配置访问权限。
用户和组的格式如下
为Jonas
用户配置访问控制
Jonas ALL=(ALL:ALL) ALL
#1001 ALL=(ALL:ALL) ALL
为developer
组配置访问控制
%developer ALL=(ALL:ALL) ALL
#%2020 ALL=(ALL:ALL) ALL
上述配置的通用表示形式如下
<user/group list> (<host list> or ALL) = [<runas-user:runas-group>] [<tag list>] (<command list> or ALL)
在小括号()中的字段是必需的,或者使用ALL
,而在中括号[]的字段是额外。如果没有<runas-user:runas-group>
,那么默认是(ALL:ALL)
并且<tag-list>
会忽略。
要使用 sudo
配置提权的命令,请在普通命令前添加 sudo
。例如,你想用 sudo
提升 id
命令,新命令看起来像 sudo id
。
$ id
uid=1001(amit) gid=1001(amit) groups=1001(amit)
$ sudo id
[sudo] password for amit:
uid=0(root) gid=0(root) groups=0(root)
$ sudo id # right to elevate is reused this time
uid=0(root) gid=0(root) groups=0(root)
现在允许用户 amit
代表用户 terabyte
执行所有命令,并且任何组也不需要密码来执行此操作。上述操作的配置如下所示
amit ALL=(terabyte) NOPASSWD: ALL
$ sudo id
[sudo] password for amit:
Sorry, user amit is not allowed to execute '/usr/bin/id' as root on h3ll.
$ sudo -u terabyte id
uid=1000(terabyte) gid=1000(terabyte) groups=1000(terabyte)
在第一种情况下,sudo
已成功通过身份验证,但在 sudoers
配置中找不到以 root
身份运行的配置。在第二种情况下,sudo
使用相同的权限提升,因为它是在超时之前访问的,并且配置为以 terabyte
用户身份运行。
要检查用户可以使用 sudo
运行什么命令以及以哪个用户身份运行,请使用 sudo -l
命令。
$ sudo -l
Runas and Command-specific defaults for amit:
Defaults!/etc/ctdb/statd-callout !requirettyUser amit may run the following commands on h3ll:
(terabyte) NOPASSWD: /bin/bash
在这种情况,用户 amit
可以以terabyte
用户身份运行命令 /bin/bash
而无需输入任何密码
请点一下右下角的“在看”,谢谢!!
暗号:97468