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


18

我正在使用Ubuntu 10.04 Server并尝试设置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

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

  • 设置env_editorenv_keep+=EDITOR或者保持EDITOR变量在sudoers中任何其他选项:我不想这样做,因为它可能允许任何任意执行(例如export EDITOR=~/bad_program_to_run_as_root
  • 使用sudo -E甚至alias sudo='sudo -E':击败拥有env_resetSETENV和没有SETENV的用户的观点(不是我想讲的:请参见上一点)sudo: sorry, you are not allowed to preserve the environment
  • 设置editor=/usr/bin/vim:但是还有其他一些不知道vim的用户
  • 使用sudo select-editor:关闭,但sudo visudo仍在打开nano
  • 只要使用sudoedit或直接vim的:但后来你失去像工具的安全visudovipwcrontab -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用作编辑器。虫子?还是另一个误解?

谢谢

Answers:


6

没错,设置EDITOR变量应该更改用于的编辑器sudo。但是,还有两个其他变量优先于EDITORSUDO_EDITORVISUAL。确保它们都没有指向其他编辑器,例如nano


我之所以投票,是因为很少有答案提到VISUAL优先于EDITOR。我以为我的EDITOR变量只是被忽略了。事实证明,在Centos7都EDITORVISUAL似乎默认pico
threeve

5

此处介绍另一种解决方案:

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继续使用nano。


3

在Debian 7中,在环境中设置EDITOR无效。

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

Defaults        editor="/usr/bin/nano"

在DigitalOcean Ubuntu 12.04上像冠军一样工作。谢谢。
Joe Codeswell user601770

谢谢。这也适用于Oracle Linux。(我喜欢nano / pico。)
MikeP

1

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

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

我发现您对该editor选项的发现有些令人震惊,但不幸的是,我不知道您的次要问题的答案。有人会认为Ubuntu阵营将在此问题上提供大量文档和配置示例,也许我们应该加倍努力。

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.