我正在使用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_editor
,env_keep+=EDITOR
或者保持EDITOR变量在sudoers中任何其他选项:我不想这样做,因为它可能允许任何任意执行(例如export EDITOR=~/bad_program_to_run_as_root
) - 使用
sudo -E
甚至alias sudo='sudo -E'
:击败拥有env_reset
SETENV和没有SETENV的用户的观点(不是我想讲的:请参见上一点)sudo: sorry, you are not allowed to preserve the environment
- 设置
editor=/usr/bin/vim
:但是还有其他一些不知道vim的用户 - 使用
sudo select-editor
:关闭,但sudo visudo
仍在打开nano
- 只要使用sudoedit或直接vim的:但后来你失去像工具的安全
visudo
,vipw
,crontab -e
。 - 只需处理一下:可能,但是如果我缺少一些见识,我很想知道
我也尝试过设置VISUAL
和SUDO_EDITOR
变量(无奈中)
我有没有想念的东西sudo visudo
可以在所选的用户编辑器中打开,而不会做出上面的折衷?
编辑:
我想我理解为什么这没有按我预期的那样工作。我把它放在这里,以防其他人有同样的误解。
在sudoers文件中
Defaults editor=/usr/bin/nano:/usr/bin/vim
- 仅引用运行时允许的编辑器列表
visudo
(不引用任何其他程序) editor
检查$ EDITOR,但如果运行sudo visudo
,sudo
则不设置$ 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
用作编辑器。虫子?还是另一个误解?
谢谢
VISUAL
优先于EDITOR
。我以为我的EDITOR
变量只是被忽略了。事实证明,在Centos7都EDITOR
和VISUAL
似乎默认pico
。