我正在使用 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_editor
,env_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 即可:但是,这样一来,您就失去了
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
用作编辑器。错误?还是另一个误解?
谢谢
答案1
您说得对,设置EDITOR
变量应该会更改 使用的编辑器sudo
。但是,还有两个变量的优先级高于EDITOR
:SUDO_EDITOR
和VISUAL
。确保它们都没有指向其他编辑器,例如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 阵营会有很多关于这个问题的文档和配置示例,也许我们应该更仔细地研究一下。