在 中/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
}
这有两个优点:
- 该命令
editsudo
确保运行sudo visudo
(因此更短)。 - 该命令
editsudo
首先打印帮助文本,以便如果您因错误退出,您就可以获得上面的相关信息。
答案3
直接从马嘴里说出来man visudo
:
visudo
编辑sudoers类似于 vipw(8)。visudo
锁定sudoers文件是否同时进行多个编辑,提供基本的健全性检查,并在安装编辑后的文件之前检查解析错误。如果sudoers文件目前正在编辑,您将收到一条消息,稍后再试。
visudo
解析sudoers编辑后,如果出现语法错误,则不会保存更改。发现错误后,visudo
将打印一条消息,指出发生错误的行号,并且用户将收到“现在怎么办?”提示。 [...]