从集中式会话记录、chroot支持到PythonAPI,sudo1.9提供了许多新功能。当你想在POSIX系统上执行操作时,最安全的方法之一是使用sudo命令。与以root身份登录和执行可能很危险的命令不同,sudo授予任何被系统管理员指定为“sudoer”的用户临时权限,以执行通常受限的活动。几十年来,这个系统帮助Linux、Unix和macOS系统免受愚蠢的错误和恶意攻击,它是当今所有主要Linux发行版的默认管理机制。当sudo1.9于2020年5月发布时,它带来了许多新功能,包括会话记录的集中收集、sudo中对chroot的支持以及PythonAPI。如果其中任何一个让您感到惊讶,请阅读我关于sudo一些鲜为人知的功能的文章。sudo不仅仅是管理命令的前缀。您可以微调权限、记录终端上发生的事情、使用插件扩展sudo、在LDAP中存储配置、进行大量日志记录等等。版本1.9.0及后续次要版本添加了各种新功能(我将在下面介绍),包括:集中收集sudo会话记录的日志服务审计插件API批准插件API插件的Python支持sudo内置chroot和CWD支持(自1.9.3起)我在哪里可以获得sudo1.9?大多数Linux发行版仍包含上一代sudo(1.8版),并将在长期支持(LTS)发行版中保留此版本数年。据我所知,提供最完整的sudo1.9包的Linux发行版是openSUSETumbleweed,它是一个滚动版本,并且在该sudo包的子包中提供Python支持。最近的Fedora版本包括sudo1.9,但不支持Python。FreeBSDPorts具有最新版本的sudo,如果您自己编译sudo而不是使用软件包,则可以启用Python支持。如果您最喜欢的Linux发行版尚未包含sudo1.9,请查看sudo二进制文件页面以查看是否有适用于您的系统的现成软件包。该页面还提供了一些商业Unix变体的包。与往常一样,在开始尝试sudo设置之前,请确保您知道root密码。是的,即使在Ubuntu上也是如此。有一个临时的“后门”很重要;没有它,如果出现问题,您将不得不破解您的系统。请记住:语法上正确的配置并不意味着每个人都可以在该系统上使用sudo做任何事情!日志服务日志服务提供会话日志的集中集合。这比本地会话记录存储有很多优点:更容易在一个地方搜索而不是访问单独的机器来查找记录即使发送机器停机也可以进行记录如果本地用户想掩盖他们的踪迹,记录不能被删除.为了进行快速测试,您可以通过未加密的连接向录制服务发送会话。说明包含在我的博客中,可以在几分钟内完成设置。对于生产环境,我建议使用加密连接。有多种可能性,因此请阅读最适合您的环境的文档。审计插件API新的审计插件API不是用户可见的功能。换句话说,您不能从sudoers文件配置它。它是一个API,这意味着您可以从插件访问审计信息,包括用Python编写的插件。您可以通过许多不同的方式使用它,例如将事件直接从sudo发送到Elasticsearch或在发生有趣的事情时将日志记录为服务(LaaS)。您还可以使用它进行调试,并以您喜欢的任何格式将无法访问的信息打印到屏幕上。根据您的使用方式,您可以在sudo插件手册页(对于C)和sudoPython插件手册页中找到它的文档。Python代码示例可以在sudo源代码中找到,我的博客上也提供了一个简化的示例。批准插件API批准插件API可以在执行命令之前添加额外的限制。这些限制仅在策略插件成功时运行,因此您可以有效地添加额外的策略层而无需更改策略插件和sudoers。可以定义多个审批插件,并且都必须成功才能执行命令。与审计插件API一样,您可以在C和Python中使用它。我博客上记录的示例Python代码很好地介绍了API。了解它的工作原理后,您可以扩展它以将sudo连接到票务系统,并仅批准具有相关公开票证的会话。您还可以连接到人力资源数据库,这样只有值班的工程师才有管理权限。Python对插件的支持虽然我不是程序员,但我最喜欢sudo1.9的新特性是Python对插件的支持。您可以从Python和C调用大部分API。幸运的是,sudo对性能不敏感,因此运行相对较慢的Python代码不是sudo的问题。使用Python扩展sudo有很多优点:开发更简单、速度更快无需编译;代码甚至可以通过配置管理进行分发许多API没有开箱即用的C客户端,但是有Python代码还有一些其他API可以用来做一些非常有趣的事情。通过使用策略插件API,您可以替换sudo策略引擎。请注意,您将失去大部分sudo功能,并且没有基于sudoers的配置。这在少数情况下仍然有用,但大多数时候,最好继续使用sudoers并使用批准插件API创建其他策略。如果您想尝试一下,我对Python插件的介绍提供了一个非常简单的策略:只允许id命令。仔细检查您是否知道root密码,因为一旦启用此策略,它就会阻止对sudo的任何实际使用。使用I/O日志记录API,您可以访问用户会话的输入和输出。这意味着您可以分析会话中发生的情况,甚至可以在出现可疑情况时终止会话。此API有许多可能的用途,例如防止数据泄漏。您可以监视屏幕上的关键字,如果数据流中出现任何关键字,您可以在关键字出现在用户屏幕上之前断开连接。另一种可能性是检查用户正在键入的内容,并使用该数据重建用户正在键入的命令行。例如,如果用户键入rm-fr/,您可以在按enter之前断开用户连接。组插件API允许查找非Unix组。在某种程度上,这类似于Approval插件API,因为它也扩展了Policy插件。您可以检查用户是否属于给定的组,并在稍后的配置部分中根据该组采取行动。chroot和CWD支持sudo的最新功能是支持chroot和更改工作目录(CWD),默认情况下这两个选项均未启用,您需要在sudoers文件中明确启用它们。启用它们后,您可以调整目标目录或允许用户指定要使用的目录。日志反映了何时使用这些设置。在大多数系统上,chroot仅对root用户可用。如果您的某个用户需要chroot,您需要给他们root权限,这不仅仅是给他们chroot权限。此外,您可以允许通过sudo访问chroot命令,但它仍然允许他们可以获得完全权限的漏洞。当您使用sudo的内置chroot支持时,您可以轻松地限制对单个目录的访问。您还可以让用户灵活地指定根目录。当然,这可能会导致灾难(例如sudo--chroot/-s),但至少会记录事件。当您通过sudo运行命令时,它会将工作目录设置为当前目录。这是预期的行为,但在某些情况下,命令可能需要从不同的目录运行。例如,我记得使用过一个应用程序,它通过检查我的工作目录是否为/root来检查我的权限。试用新功能希望本文能启发您进一步了解sudo1.9。集中式会话日志记录比在本地存储会话日志更方便、更安全。chroot和CWD支持为您提供额外的安全性和灵活性。使用Python扩展sudo可以轻松地为您的环境定制sudo。您可以使用最新的Linux发行版或sudo网站上的即用型软件包来试用这些新功能。如果您想了解有关sudo的更多信息,这里有一些资源:Sudo官方网站Sudo博客SudoonTwitter
