本文共 4654 字,大约阅读时间需要 15 分钟。
大家都知道须藤吧? 该工具默认安装在大多数Linux系统上,并且可用于大多数BSD和商业Unix变体。 不过,在与数百名sudo用户交谈之后,我收到的最常见答案是sudo是使生活复杂化的工具。
有一个root用户和su命令,那么为什么还要使用另一个工具? 对于许多人来说, sudo只是管理命令的前缀。 只有极少数提到,当您在同一系统中有多个管理员时,可以使用sudo日志查看谁做了什么。
那么, sudo是什么? 根据 :
“ Sudo允许系统管理员通过授予某些用户以root用户或其他用户身份运行某些命令的能力,同时提供命令及其参数的审核跟踪,从而委派权限。”
默认情况下, sudo带有一个简单的配置,一条规则允许一个用户或一组用户执行几乎所有操作(在本文后面的配置文件中有更多信息):
%wheel ALL=(ALL) ALL
在此示例中,参数表示以下含义:
因此,在此示例中, wheel组的成员可以以所有主机上的所有用户身份运行所有应用程序。 即使这个真正允许的规则也很有用,因为它会记录谁在您的计算机上做了什么。
在这种情况下,别名可以派上用场。 在多个位置维护相同的列表容易出错。 您定义一次别名,然后可以多次使用。 因此,当您对一位管理员失去信任时,可以将其从别名中删除,然后就可以完成。 使用多个列表而不是别名,很容易忘记将用户从具有较高特权的列表之一中删除。
sudo命令带有大量默认值。 不过,在某些情况下,您想覆盖其中一些情况。 这是在配置中使用Defaults语句时的情况。 通常,这些默认值是在每个用户上强制执行的,但是您可以根据主机,用户名等将设置缩小到一部分用户。 这是我那一代的系统管理员喜欢听到的一个例子:侮辱。 这些只是当有人误输入密码时的一些有趣消息:
czanik @ linux-mewy:~ > sudo ls [ sudo ] password for root: Hold it up to the light --- not a brain in sight ! [ sudo ] password for root: My pet ferret can type better than you ! [ sudo ] password for root: sudo: 3 incorrect password attempts czanik @ linux-mewy:~ >
由于并非每个人都喜欢sysadmin幽默,因此默认情况下将禁用这些侮辱。 以下示例显示了如何仅对经验丰富的系统管理员(即wheel组的成员)启用此设置:
Defaults !insults Defaults:%wheel insults
我没有足够的手指来指望有多少人感谢我将这些消息带回来。
当然, sudo中还有更严重的功能。 其中之一是摘要验证。 您可以在配置中包括应用程序摘要:
peter ALL = sha244:11925141bb22866afdf257ce7790bd6275feda80b3b241c108b79c88 /usr/bin/passwd
在这种情况下, sudo在运行应用程序之前检查应用程序的摘要并将其与配置中存储的摘要进行比较。 如果它们不匹配,则sudo拒绝运行该应用程序。 尽管很难在配置中维护此信息(没有用于此目的的自动化工具),但是这些摘要可以为您提供额外的保护层。
会话记录也是sudo鲜为人知的功能。 在演示之后,许多人离开了我,谈论在其基础架构上实施该计划的计划。 为什么? 因为使用会话记录,您不仅可以看到命令名称,还可以看到终端中发生的所有事情。 您可以看到您的管理员在做什么,即使他们具有外壳程序访问权限,并且日志仅显示bash已启动。
当前有一个限制。 记录存储在本地,因此具有足够的权限,用户可以删除其跟踪。 请继续关注即将推出的功能。
从1.8版开始, sudo更改为模块化,基于插件的体系结构。 通过将大多数功能实现为插件,您可以编写自己的功能轻松替换或扩展sudo的功能。 sudo已经提供了开源和商业插件。
在我的演讲中,我演示了sudo_pair插件,该插件可 。 这个插件是用Rust开发的,这意味着它不是那么容易编译,甚至更难以分发结果。 另一方面,该插件提供了有趣的功能,需要第二个管理员才能通过sudo批准(或拒绝)运行命令。 不仅如此,还可以在屏幕上跟踪会话并在发生可疑活动时终止会话。
在最近的All Things Open会议上的一次演讲中,我做了一个臭名昭著的演示:
czanik @ linux-mewy:~ > sudo rm -fr /
屏幕上显示的命令。 每个人都屏住呼吸,看看我的笔记本电脑是否被毁坏了,但它仍然可以幸免。
正如我在开始时已经提到的那样,日志记录和警报是sudo的重要组成部分。 如果您不定期检查sudo日志,那么使用sudo并没有太多价值。 该工具通过电子邮件提醒配置中指定的事件,并将所有事件记录到syslog中 。 调试日志可以打开并用于调试规则或报告错误。
电子邮件警报现在有点过时了,但是如果您使用syslog-ng收集日志消息,则会自动解析sudo日志消息。 您可以轻松创建自定义警报并将其发送到各种各样的目的地,包括Slack,Telegram,Splunk或Elasticsearch。 您可以从了解有关此功能的更多信息。
我们谈论了很多有关sudo的功能,甚至看到了几行配置。 现在,让我们仔细看看sudo的配置方式。 配置本身在/ etc / sudoers中是一个简单的文本文件。 不过,不建议直接编辑此文件。 而是使用visudo ,因为此工具还会执行语法检查。 如果您不喜欢vi ,可以通过将EDITOR环境变量指向您的首选选项来更改要使用的编辑器 。
在开始编辑sudo配置之前,请确保您知道root密码。 (是的,即使在Ubuntu上,默认情况下root也没有密码。) visudo检查语法时,很容易创建语法正确的配置以将您锁定在系统之外。
如果在紧急情况下手头有一个root密码,则可以开始编辑配置。 关于sudoers文件,需要记住一件事:从上至下读取该文件,最后设置为胜。 这个事实对您来说意味着您应该从通用设置开始,并在末尾放置异常,否则,通用设置会覆盖异常。
您可以在CentOS的基础上找到一个简单的sudoers文件,并添加我们之前讨论的几行:
Defaults !visiblepw Defaults always_set_home Defaults match_group_by_gid Defaults always_query_group_plugin Defaults env_reset Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS" Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin root ALL=(ALL) ALL %wheel ALL=(ALL) ALL Defaults:%wheel insults Defaults !insults Defaults log_output
该文件通过更改多个默认值开始。 然后是通常的默认规则: root用户和wheel组的成员对计算机具有完全权限。 接下来,我们为车轮组启用侮辱,但为其他所有人禁用。 最后一行启用会话记录。
上面的配置在语法上是正确的,但是您可以发现逻辑错误吗? 是的,有一个:自从上一个通用设置覆盖了先前的更具体设置以来,所有人都禁用了侮辱。 切换两条线后,安装程序将按预期工作: 车轮组的成员会收到有趣的消息,但其他用户则不会收到它们。
一旦必须在多台计算机上维护sudoers文件,您很可能希望集中管理配置。 这里有两种主要的开源可能性。 两者都有其优点和缺点。
您可以使用一种配置管理应用程序,也可以用来配置其余基础结构。 Red Hat Ansible,Puppet和Chef都具有用于配置sudo的模块。 这种方法的问题在于更新配置远非实时。 而且,用户仍然可以在本地编辑sudoers文件并更改设置。
sudo工具还可以将其配置存储在LDAP中。 在这种情况下,配置更改是实时的,用户无法与sudoers文件混在一起。 另一方面,该方法也有局限性。 例如,当LDAP服务器不可用时,您不能使用别名或使用sudo 。
sudo即将推出新版本的sudo 。 1.9版将包含许多有趣的新功能。 以下是最重要的计划功能:
我希望本文向您证明sudo不仅仅是一个简单的前缀。 有很多可能性可以微调系统上的权限。 您不仅可以微调权限,还可以通过检查摘要来提高安全性。 会话记录使您能够检查系统上正在发生的事情。 您也可以使用插件扩展sudo的功能,或者使用已有的东西或编写自己的东西。 最后,从即将发布的功能列表中,您可以看到,即使sudo已有数十年的历史,它仍然是一个不断发展的生动项目。
如果您想了解有关sudo的更多信息,请参考以下资源:
翻译自:
转载地址:http://xpszd.baihongyu.com/