我遇到的最常见的误解涉及安全、灵活性和中央管理。在这里,我揭穿了这些sudo的神话。
无论是参加会议还是阅读博客,我经常听到关于sudo的几个误解。这些误解大多集中在安全性、灵活性和集中管理方面。在这篇文章中,我将揭穿其中的一些迷思。
许多误解的产生可能是因为用户只知道sudo的基本功能。 sudoers 文件,默认情况下,只有两条规则。根用户和管理组wheel 的成员,实际上可以使用sudo做任何事情。几乎没有任何限制,可选功能也完全没有启用。即使这样的设置也比共享根密码要好,因为你通常可以通过日志了解谁在你的系统上做了什么。然而,学习一些鲜为人知的新旧功能,可以让你对你的系统有更多的控制和可见性。
正如这些文章的标题所示,许多有益的可能性已经存在了十多年,而用户却没有注意到或使用它们,而且sudo仍在不断发展。我对这些常见误解的回应可能会让你了解到一些新的功能!
Sudo配置被存储在本地,使其容易受到攻击
是的,在默认情况下,配置是存储在本地的。如果你给了用户root shell或编辑器的权限,他们可以修改sudoers 文件。在单个主机上,你对此无能为力。然而,一旦你有多个主机,有很多方法可以解决这个问题。
所有主要的配置管理平台,包括Ansible,都支持维护sudoers 文件。即使实际的配置是一个本地文件,它也是由一个中心位置来维护的。任何本地变化都可以被检测、报告,并自动改回集中管理的版本。
另一种可能性是使用LDAP(轻量级目录访问协议)来存储sudo的配置。它有相当多的限制--例如,你不能使用别名--但使用LDAP意味着配置被存储在一个中央目录中,任何改变都立即生效,而且本地用户不能修改设置。
使用LDAP进行中央配置是困难的
如果你只有几台新安装的主机,开始使用LDAP来存储sudo配置可能很困难。然而,大多数组织,即使只有几台主机,也已经有LDAP或活动目录(AD)在运行,并且有人员知道如何配置和维护这些目录服务。将sudo支持添加到已经存在的目录服务中,并不是非常困难。甚至可以同时拥有本地sudoers 和LDAPsudoers ,并指定评估的顺序,例如,先LDAP后本地,或者先本地后LDAP。
在多个主机上维护一个sudoers文件容易出错,而且是一个合规问题
是的,这是正确的,只要你手工编辑单个sudoers 文件。然而,正如我在对前一个神话的回应中所建议的,即使主机数量非常少,大多数组织也会引入某种目录服务,如LDAP或AD,以及配置管理。你可以使用目录服务来集中存储sudo配置,或者你可以使用Ansible和其他配置管理应用程序,从中央配置库中维护主机上的sudoers 文件。
sudo代码库太大
是的,它的确很大。有些人甚至称它为 "死星",并说一个大的代码库也意味着它不安全。有一些较小的软件项目;然而,这些项目只实现了sudo功能的一个非常基本的子集。使用这些软件,你会失去对你的系统上发生的事情的很多可见性(想想会话记录)。商业的sudo替代品可能会实现许多sudo 的功能。然而,sudo是开源的,而且是分析最多的开源代码之一。商业代码库甚至更大,而且没有被第三方分析过。
外壳访问的可见性是很棘手的
仅仅使用默认设置,shell或编辑器访问就很难看到shell会话内发生的事情。然而,会话记录能够使shell会话中发生的事情可见,这已经超过十年了。sudo的1.9.0版本引入了会话记录的中央收集,因此它们不能被本地用户删除或修改。1.9.8版本还包括子命令记录。你可以使用日志来检查在sudo会话中执行的任何命令,并且只在必要时观看记录(例如,如果一个用户启动Midnight Commander)。观看会话记录是很乏味的,而且可能非常耗费时间--有些人甚至有长达三天的sudo会话--所以尽可能地查看日志肯定是最好的。
你不能在sudo中使用双因素认证
这是正确的。sudo中没有开箱即用的双因素认证(2FA)。然而,你可以使用Linux PAM实现2FA。或者,如果你愿意,你可以在sudo中实现它。Sudo有一个模块化的架构,因此可以进行扩展。1.9版本的sudo引入了审批插件API(应用编程接口),使得在执行命令前有额外的限制成为可能。你可以用C或Python编码你的批准插件,并自己实现2FA。
Sudo日志并不能提高安全性
如果你只在本地收集日志信息,而且根本不检查它们,那么日志信息就不能提高安全性。然而,即使是三十多年前的syslogd,即最初的syslog实现也支持中央日志收集。从远程主机或云服务中删除sudo日志并不像修改本地日志那样容易。
sudo中也有对中央日志的内置支持。使用sudo_logsrvd ,你不仅可以收集会话记录,还可以收集事件日志。最后,sudo_logsrvd 可以将事件转发到syslog(默认)或维护自己的日志文件。