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


83

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

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

Answers:


104

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

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

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


3
哇,从来不知道sudoedit。它在OS X上不起作用,所以我认为它是GNU工具?无论如何,很酷的信息在这里。我总是手动进行编辑,从来没有遇到过问题-我现在知道这很幸运,而且该工具可以帮助您预防灾难。谢谢!
Harv

2
@Harv。没有GNU,sudo并且OS X确实具有GNU工具。由于sudo最初是作为开放源代码应用程序创建的,因此可能没有理由要实现许多实现。sudosudoedit是相同的命令,sudosudo -e称为时一样sudoedit。我相信这只是OS X忘记添加sudoedit -> sudo链接,但是您仍然应该能够使用sudo -e或调用sudoargv [0] sudoedit来获得相同的行为。
斯特凡Chazelas

有趣的是,visudo默认情况下使用nano。
蒂姆(Tim)

3
@Tim:“真实”默认值为vi,但可以将其配置为使用其他名称。因此,nano确实可能是您的发行版/设置上的默认设置。请参见手册页
2014年

2
@ AngularInDepth.com,后果非常明显。如果保存了无效的sudoers文件,则系统将无法解析该文件。因此,如果我执行a sudo vim /etc/sudoers并破坏语法,那么我将无法sudo vim /etc/sudoers再次对其进行修复。实际上,由于系统无法解析文件,所有通过sudo提升特权的能力都将丢失。
Spencer D

23

从visudo手册页:

visudo锁定sudoers文件以防止同时进行多次编辑,提供基本的完整性检查并检查解析错误。如果当前正在编辑sudoers文件,您将收到一条消息,稍后再试。

还要从serverfault检查此答案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.