Linux提权系列6:了解sudo
2023-3-31 08:2:56 Author: 奶牛安全(查看原文) 阅读量:7 收藏

到现在为止,已经了解了如何使用文件权限来管理访问。这些类型的权限分为自主访问控制 (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 错误配置。

sudo 到底是什么,为什么要使用它?

您的密码是您的私有财产,您不想与他人分享它们,除非有人窃取您的密码。在 su 中,您必须共享密码才能运行命令。

sudo 最初是 1980 年左右(Linux 发布前 11 年)发布的 UNIX 程序,系统管理员必须管理 /etc/sudoers 文件或 /etc/sudoers.d/ 目录中的文件来为用户配置权限。它的意思是(超级用户做)并且它用于定义哪个用户/组可以代表谁(默认情况下root)做什么以及如何做

sudo 中,不仅可以为用户提供“运行方式”属性,还可以限制在有或没有密码的情况下可以执行的命令。如果在 sudoers 文件中配置了带密码的“运行方式”,系统将提示用户输入其帐户的密码,而不是目标用户的密码。另一个特点是,与 su 不同的是,一旦成功验证了 sudo 访问权限,它将为您的帐户缓存提升权限而不是存储密码,因此可以以另一个用户身份运行命令而无需实际输入密码,除非超时和 没配置NOPASSWD选项。

了解 Sudoers 文件格式

检查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。例如,你想用 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 !requiretty

User amit may run the following commands on h3ll:
    (terabyte) NOPASSWD: /bin/bash

在这种情况,用户 amit 可以以terabyte用户身份运行命令 /bin/bash 而无需输入任何密码

请点一下右下角的“在看”,谢谢!!

暗号:97468


文章来源: http://mp.weixin.qq.com/s?__biz=MzU4NjY0NTExNA==&mid=2247488812&idx=1&sn=9abb8c1735dab4cbc70092a7bda1e026&chksm=fdf97e39ca8ef72fb6fb6ddfee1772b45d8292cee3c1cfecf0cd725a671f83c2902e3c656eeb#rd
如有侵权请联系:admin#unsafe.sh