7 个关于 sudo 的迷思已被揭穿

我遇到的大多数常见误解都涉及安全性、灵活性和集中管理。在此,我将揭穿这些关于 sudo 的迷思。
6 位读者喜欢这篇文章。
How Linux got to be Linux: Test driving 1993-2003 distros

Internet Archive Book Images。由 Opensource.com 修改。CC BY-SA 4.0

无论是在参加会议还是阅读博客时,我经常听到一些关于 sudo 的误解。 这些误解大多集中在安全性、灵活性和集中管理方面。 在本文中,我将揭穿其中的一些迷思。

许多误解可能源于用户只了解 sudo 的基本功能。 默认情况下,sudoers 文件只有两条规则:root 用户和管理 wheel 组的成员几乎可以使用 sudo 执行任何操作。 几乎没有任何限制,可选功能也完全未启用。 即使是这种设置也比共享 root 密码要好,因为通常可以使用日志跟踪系统上谁做了什么。 但是,了解一些鲜为人知的旧功能和新功能可以让你对系统拥有更多的控制权和可见性。

如果你只知道如何在 sudo 中为特定用户或组授予对特定命令的访问权限,我建议阅读我之前关于 sudo 的一些文章

正如这些文章标题所示,许多有益的可能性已经存在了十多年,但用户没有注意到或使用它们,并且 sudo 仍在不断开发中。 我对这些常见误解的回应可能会让你了解一些新功能!

Sudo 配置本地存储,使其易受攻击

是的,默认情况下,配置是本地存储的。 如果你给用户 root shell 或编辑器访问权限,他们可以修改 sudoers 文件。 在单台主机上,对此你无能为力。 但是,一旦你有多台主机,就有许多方法可以解决这个问题。

包括 Ansible 在内的所有主要配置管理平台都支持维护 sudoers 文件。 即使实际配置是本地文件,它也是从中心位置维护的。 任何本地更改都可以被检测到、报告并自动更改回集中管理的版本。

另一种可能性是使用 LDAP(轻型目录访问协议)来存储 sudo 的配置。 它有一些限制——例如,你不能使用别名——但是使用 LDAP 意味着配置存储在中央目录中,任何更改都会立即生效,并且本地用户无法修改设置。

使用 LDAP 进行中央配置很困难

如果你只有几台新安装的主机,那么开始使用 LDAP 来存储 sudo 配置可能会很困难。 但是,大多数组织,即使只有几台主机,也已经运行了 LDAP 或 Active Directory (AD),并且有人员知道如何配置和维护这些目录服务。 将 sudo 支持添加到现有的目录服务中并非难如登天。 甚至可以同时拥有本地 sudoers 和 LDAP sudoers,并指定评估顺序,例如,先 LDAP,后本地,或先本地,后 LDAP。

在多台主机上维护 sudoers 文件容易出错且存在合规性问题

是的,这是对的,只要你手动编辑各个 sudoers 文件。 但是,正如我对前一个迷思的回应中建议的那样,即使主机数量很少,大多数组织也会引入某种目录服务,例如 LDAP 或 AD,以及配置管理。 你可以使用目录服务来集中存储 sudo 配置,或者你可以使用 Ansible 和其他配置管理应用程序从中央配置存储库维护主机上的 sudoers 文件。

sudo 代码库太大

是的,它很大。 有些人甚至称之为“死星”,并说庞大的代码库也意味着它不安全。 有一些较小的软件项目; 但是,这些项目仅实现了 sudo 功能的一个非常基本的子集。 使用这些,你会失去对系统上正在发生的事情的很多可见性(只需考虑会话记录)。 商业 sudo 替代品可能会实现许多 sudo 功能。 但是,sudo 是开源的,并且是最受分析的开源代码之一。 商业代码库甚至更大——并且没有经过第三方的分析。

Shell 访问可见性很棘手

仅使用默认设置,shell 或编辑器访问使得很难看到 shell 会话内部发生了什么。 但是,十多年来,会话记录已经能够使 shell 会话内部发生的事情可见。 sudo 的 1.9.0 版本引入了会话记录的集中收集,因此本地用户无法删除或修改它们。 1.9.8 版本还包括子命令日志记录。 你可以使用日志来检查在 sudo 会话中执行的任何命令,并且仅在必要时(例如,如果用户启动 Midnight Commander)观看记录。 观看会话记录很乏味并且可能非常耗时——有些人甚至有三天之久的 sudo 会话——因此尽可能查看日志绝对是更可取的。

你不能在 sudo 中使用双因素身份验证

这是正确的:sudo 中没有开箱即用的双因素身份验证 (2FA)。 但是,你可以使用 Linux PAM 实现 2FA。 或者,如果你愿意,可以在 sudo 内部进行。 Sudo 具有模块化架构,因此可以扩展。 sudo 的 1.9 版本引入了审批插件 API(应用程序编程接口),使得在执行命令之前可以有额外的限制。 你可以使用 C 或 Python 编写你的审批插件,并自己实现 2FA。

Sudo 日志不会提高安全性

如果你仅在本地收集日志消息并且根本不检查它们,那么日志消息不会提高安全性。 但是,即使是 syslogd,三十多年前的原始 syslog 实现,也支持中央日志收集。 从远程主机或云服务中删除 sudo 日志不像修改本地日志那样容易。

sudo 中还内置了对中央日志记录的支持。 使用 sudo_logsrvd,你不仅可以收集会话记录,还可以收集事件日志。 最后,sudo_logsrvd 可以将事件转发到 syslog(默认)或维护其自己的日志文件。

有什么问题吗?

我希望我的文章有助于解决围绕 sudo 的一些迷思。 如果你有任何关于 sudo 的问题,请随时联系 sudo 用户邮件列表

Peter Czanik
Peter 是一名工程师,在 Balabit(One Identity 业务部门,开发了 syslog-ng 的公司)担任开源布道师。 他协助发行版维护 syslog-ng 软件包,跟踪错误跟踪器,帮助用户并在会议(SCALE、All Things Open、FOSDEM、LOADays 等)上定期谈论 sudo 和 syslog-ng。

评论已关闭。

© . All rights reserved.