为什么要使用visudo而不是直接修改sudoers文件呢?

Das*_*son 93 sudo

我明白,如果你想修改谁可以使用sudo以及他们可以用它做什么,你应该使用visudo. 我知道我不应该自己直接修改 /etc/sudoers 文件。

它是什么,visudo这是否直接修改该文件没有做?会出什么问题?

Mat*_*Mat 116

visudo实际覆盖sudoers文件之前检查文件语法。

如果您使用普通编辑器,弄乱语法,然后保存...sudo将(可能)停止工作,并且由于/etc/sudoers只能通过 修改root,您会被卡住(除非您有另一种获得 root 的方法)。

此外,它确保编辑将是一个原子操作。如果您需要确保没有其他人可以破坏您仔细考虑的配置更改,则此锁定很重要。除了以 root 身份编辑其他文件之外,/etc/sudoers还有一个sudoedit命令可以防止此类编辑冲突。

  • 哇,从来不知道 sudoedit。它在 OS X 上不起作用,所以我认为它是一个 GNU 工具?无论如何,这里有很酷的信息。我总是手动编辑,从来没有遇到过问题 - 我现在明白这只是运气,该工具可以帮助防止灾难。谢谢! (3认同)
  • @Tim:“真正的”默认值是 vi,但可以将其配置为使用其他内容。因此 nano 确实可能是您的发行版/设置的默认设置。请参阅 [手册页](http://www.sudo.ws/visudo.man.html)。 (3认同)
  • @Harv。没有 GNU `sudo`,而 OS X 确实有 GNU 工具。由于 sudo 最初是作为开源应用程序创建的,因此可能没有理由对其进行多种实现。`sudo` 和 `sudoedit` 是相同的命令,当被称为 `sudoedit` 时,`sudo` 的行为与 `sudo -e` 相同。我相信只是 OS X 忘记添加 `sudoedit -> sudo` 链接,但您仍然应该能够使用 `sudo -e` 或调用 `sudo` 并将 argv[0] 设置为 `sudoedit` 来获取相同的行为。 (2认同)
  • @AngularInDepth.com,后果很明显。如果保存无效的 sudoers 文件,系统将无法解析它。因此,如果我执行 `sudo vim /etc/sudoers` 并破坏语法,那么我将无法再次执行 `sudo vim /etc/sudoers` 来修复它。实际上,所有通过 sudo 提升权限的能力都将丢失,因为系统将无法解析文件。 (2认同)

amy*_*sin 26

从 visudo 手册页:

visudo 针对多个同时编辑锁定 sudoers 文件,提供基本的健全性检查,并检查解析错误。如果当前正在编辑 sudoers 文件,您将收到一条消息,稍后再试。

还要从 serverfault 中检查这个答案