为什么我必须使用“visudo”来编辑“/etc/sudoers”文件?

为什么我必须使用“visudo”来编辑“/etc/sudoers”文件?

在 中/etc/sudoers,它说道:

# This file MUST be edited with the 'visudo' command as root.

我的问题是,为什么必须用 来编辑此文件visudo

看来我能够通过gedit以下命令成功编辑文件:

sudo gedit /etc/sudoers

如果我能够使用它来编辑它gedit,为什么必须使用visudo

答案1

使用起来更安全visudo。您可以编辑/etc/sudoers直接,但如果你在那里输入错误,你将无法使用sudo不再。并且无法修复您的错误。

visudo锁定 sudoers 文件以防止多个同时编辑,提供基本的健全性检查,并检查解析错误。

您可以通过以下方式阅读更多内容:

man visudo

答案2

当您使用时visudo,如果您设法引入语法错误,visudo则只会退出并提示“现在怎么办?”,但它不会在屏幕上为您提供任何选项。

然而,选项在visudo手册页

维苏多解析sudoers编辑后的文件,不会保存
如果有语法错误,则更改。发现错误后,维苏多将要
打印一条消息,说明该行數量错误发生的位置
用户将收到“现在怎么办?”提示。此时
用户可以输入“e”来重新编辑sudoers文件,'x' 退出而不
保存更改,或按“Q”退出并保存更改。“Q”选项
应谨慎使用,因为如果维苏多相信
是一个解析错误,所以须藤没有人能够须藤再次
直到错误被修复。如果输入“e”来编辑sudoers文件
检测到解析错误后,光标将放在
发生错误的行(如果编辑器支持此功能
特征)。

但是,这几乎只是一整段文字,而且不太直观。

为了避免因语法错误而产生混淆,我建议您在~/.bashrc(或来自的其他文件~/.bashrc)中定义以下函数。

# Improved visudo command
editsudo () {
  echo "Valid options at the 'What now?' prompt:"
  echo "  e : Re-edit the sudoers file"
  echo "  x : Exit without saving the changes"
  echo "  Q : Quit and save changes (NOT recommended)"
  sudo visudo
}

这有两个优点:

  1. 该命令editsudo确保运行sudo visudo(因此更短)。
  2. 该命令editsudo首先打印帮助文本,以便如果您因错误退出,您就可以获得上面的相关信息。

答案3

直接从马嘴里说出来man visudo

visudo编辑sudoers类似于 vipw(8)。 visudo锁定sudoers文件是否同时进行多个编辑,提供基本的健全性检查,并在安装编辑后的文件之前检查解析错误。如果sudoers文件目前正在编辑,您将收到一条消息,稍后再试。

visudo解析sudoers编辑后,如果出现语法错误,则不会保存更改。发现错误后,visudo将打印一条消息,指出发生错误的行号,并且用户将收到“现在怎么办?”提示。 [...]

相关内容