Mar*_*k C 19 linux sudo ubuntu sudoers ubuntu-10.04
我正在使用 Ubuntu 10.04 Server 并尝试设置 sudoers 以尊重用户的 EDITOR 选择(在限制范围内)
在我的 sudoers 中,我有:
Defaults editor=/usr/bin/nano:/usr/bin/vim
Defaults env_reset
Run Code Online (Sandbox Code Playgroud)
在用户 .bashrc 中:
export EDITOR=/usr/bin/vim
Run Code Online (Sandbox Code Playgroud)
$EDITOR 设置:
$ echo $EDITOR
/usr/bin/vim
Run Code Online (Sandbox Code Playgroud)
根据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.
Run Code Online (Sandbox Code Playgroud)
但是nano
,该用户仍在使用。快速检查 env:
$ sudo -- env | grep EDITOR
Run Code Online (Sandbox Code Playgroud)
什么都不返回。
$ sudo -E -- env | grep EDITOR
Run Code Online (Sandbox Code Playgroud)
退货 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 的情况下打败了拥有和用户的点(不是我想给出的:见上一点)得到sudo: sorry, you are not allowed to preserve the environment
editor=/usr/bin/vim
: 但是还有其他用户不知道vimsudo select-editor
:关闭,但sudo visudo
仍然打开nano
visudo
, vipw
, 之类的工具的安全性crontab -e
。我也试过设置VISUAL
和SUDO_EDITOR
变量(在绝望中)
有没有我错过的东西会sudo visudo
在用户选择的编辑器中打开,而不会做出上述妥协?
编辑:
我想我明白为什么这不像我期望的那样工作。我把它放在这里以防其他人有同样的误解。
在 sudoers 文件中
Defaults editor=/usr/bin/nano:/usr/bin/vim
Run Code Online (Sandbox Code Playgroud)
visudo
(不是任何其他程序)editor
检查 $EDITOR,但如果正在运行sudo visudo
,sudo
则不会设置 $EDITOR,因此visudo
运行时它将为空nano
任何人都可以确认这是正确的吗?
因此,我希望安全的解决方案是添加:
Defaults!/usr/sbin/visudo env_keep+=EDITOR
Run Code Online (Sandbox Code Playgroud)
即当且仅当运行 visudo 时保持 EDITOR。这将被检查
Defaults editor=/usr/bin/nano:/usr/bin/vim
Run Code Online (Sandbox Code Playgroud)
如果它不匹配,两者都会使用 nano
奇怪的是,情况似乎并非如此:
$ sudo su - root
# export EDITOR=/bin/echo
# visudo
/etc/sudoers.tmp
visudo: /etc/sudoers.tmp unchanged
Run Code Online (Sandbox Code Playgroud)
/bin/echo
用作编辑器。漏洞?还是另一种误解?
谢谢
还有如描述的另一种解决方案在这里:
sudo update-alternatives --config editor
Run Code Online (Sandbox Code Playgroud)
但它在多用户系统上并不是那么友好,因为它只更新 中的符号链接/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
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事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"
Run Code Online (Sandbox Code Playgroud)
但是sudo visudo
一直在使用nano。
env_reset 不会阻止用户在命令行上设置变量:
$ sudo EDITOR=vim -- env |grep EDIT
EDITOR=vim
Run Code Online (Sandbox Code Playgroud)
我发现你关于这个editor
选项的发现有点令人震惊,但不幸的是我不知道你的次要问题的答案。人们可能会认为 Ubuntu 阵营在这个问题上会有大量的文档和配置示例,也许我们应该仔细看看。