如何正确设置 sudo/visudo 的编辑器?

如何正确设置 sudo/visudo 的编辑器?

我正在使用 Ubuntu 10.04 服务器并尝试设置 sudoers 以尊重用户的 EDITOR 选择(在限制范围内)

在我的 sudoers 中我有:

Defaults        editor=/usr/bin/nano:/usr/bin/vim
Defaults        env_reset

在用户 .bashrc 中:

export EDITOR=/usr/bin/vim

$EDITOR 设置如下:

$ echo $EDITOR
/usr/bin/vim

据此man sudoers将 $EDITOR 设置为 vim 就足够了:

editor  A colon (':') separated list of editors allowed to be used with visudo.
        visudo will choose the editor that matches the user's EDITOR environment
        variable if possible, or the first editor in the list that exists and is
        executable. The default is the path to vi on your system.

但是nano此用户仍在使用。快速检查环境:

$ sudo -- env | grep EDITOR

不返回任何内容。

$ sudo -E -- env | grep EDITOR

返回EDITOR=/usr/bin/vim

我知道我可以做以下事情来使编辑器正常工作:

  • 设置env_editorenv_keep+=EDITOR或将 EDITOR 变量保留在 sudoers 中的任何其他选项:我不想这样做,因为它可能允许任意执行任何操作(例如export EDITOR=~/bad_program_to_run_as_root
  • 使用sudo -E甚至alias sudo='sudo -E':打败了拥有和用户没有 SETENV 的观点env_reset(这不是我想给出的东西:参见上一点)获得sudo: sorry, you are not allowed to preserve the environment
  • 设置editor=/usr/bin/vim:但是还有其他用户不知道 vim
  • 使用sudo select-editor:关闭,但sudo visudo仍可打开nano
  • 直接使用 sudoedit 或 vim 即可:但是,这样一来,您就失去了visudovipw、等工具的安全性crontab -e
  • 接受它吧:可能吧,但如果我错过了一些见解,我很想知道

我也尝试过设置VISUALSUDO_EDITOR变量(绝望中)

我是否遗漏了某些东西,可以让其sudo visudo在用户选择的编辑器中打开,而无需做出上述妥协?

编辑:

我想我明白了为什么它没有像我预期的那样工作。我把它写在这里以防其他人有同样的误解。

在 sudoers 文件中

Defaults        editor=/usr/bin/nano:/usr/bin/vim
  • 仅指运行时允许的编辑器列表visudo(而不是任何其他程序)
  • editor检查 $EDITOR,但如果正在运行sudo visudosudo则不会设置 $EDITOR,因此visudo运行时它将为空
  • 因此,在本例中,使用第一个编辑器nano

有人能确认这是正确的吗?

因此我期望一个安全的解决方案是添加:

Defaults!/usr/sbin/visudo env_keep+=EDITOR

即,当且仅当运行 visudo 时,才保留 EDITOR。然后会根据

Defaults                  editor=/usr/bin/nano:/usr/bin/vim

如果不匹配,则使用nano

但奇怪的是,事实似乎并非如此:

$ sudo su - root
# export EDITOR=/bin/echo
# visudo
/etc/sudoers.tmp
visudo: /etc/sudoers.tmp unchanged

/bin/echo用作编辑器。错误?还是另一个误解?

谢谢

答案1

您说得对,设置EDITOR变量应该会更改 使用的编辑器sudo。但是,还有两个变量的优先级高于EDITOR:SUDO_EDITORVISUAL。确保它们都没有指向其他编辑器,例如nano

答案2

还有另一种解决方案这里

sudo update-alternatives --config editor

但它在多用户系统上不太友好,因为它仅更新符号链接/usr/bin/

$ ls -l `which editor`
lrwxrwxrwx 1 root root 24 lip  4 19:37 /usr/bin/editor -> /etc/alternatives/editor

$ ls -l /etc/alternatives/editor
lrwxrwxrwx 1 root root 18 Jul  5 01:39 /etc/alternatives/editor -> /usr/bin/vim.basic

到底发生了什么select-editor?当我运行它时,它会创建一个文件:

$ ls -l .selected_editor 
-rw-r--r-- 1 rld rld 75 Jul  5 01:54 .selected_editor

$ cat .selected_editor 
# Generated by /usr/bin/select-editor
SELECTED_EDITOR="/usr/bin/vim.basic"

sudo visudo继续使用纳米。

答案3

在 Debian 7 中,在环境中设置 EDITOR 不起作用。

为了使用 Nano,我最终将以下行添加到/etc/sudoers

Defaults        editor="/usr/bin/nano"

答案4

env_reset 不会阻止用户在命令行上设置变量:

$ sudo EDITOR=vim -- env |grep EDIT
EDITOR=vim

我发现你关于这个选项的发现editor有点令人震惊,但不幸的是我不知道你第二个问题的答案。有人会认为 Ubuntu 阵营会有很多关于这个问题的文档和配置示例,也许我们应该更仔细地研究一下。

相关内容