sudo / visudoのエディターを適切に設定するにはどうすればよいですか?


18

Ubuntu 10.04 Serverを使用しており、ユーザーのEDITORの選択を尊重するようにsudoersを設定しようとしています(制限内)

私の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、このユーザーにはまだ使用されています。envの簡単なチェック:

$ sudo -- env | grep EDITOR

何も返しません。

$ sudo -E -- env | grep EDITOR

戻り値 EDITOR=/usr/bin/vim

EDITORを機能させるために次のことができることを認識しています。

  • Set env_editorenv_keep+=EDITORまたはsudoersでEDITOR変数を保持する他のオプション:任意の実行を許可する可能性があるため(たとえばexport EDITOR=~/bad_program_to_run_as_root
  • 使用sudo -Eまたは偶数alias sudo='sudo -E'env_resetSETENVを持たないユーザーと(ユーザーに提供したくないもの:前のポイントを参照)を無効にしますsudo: sorry, you are not allowed to preserve the environment
  • Set 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 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エディターとして使用されます。バグ?または別の誤解?

ありがとう

回答:


6

EDITOR変数を設定すると、に使用されるエディターが変更されるはずですsudo。ただし、EDITORSUDO_EDITORおよびに優先する2つの変数がありVISUALます。それらのどれものような他のエディタを指していないことを確認してくださいnano


私が賛成した理由は、非常に少ない答えVISUALが優先することに言及するからEDITORです。私のEDITOR変数はただ無視されていると思った。結局、Centos7の両方でEDITORVISUALデフォルトはのようですpico
スリーヴ

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でチャンピオンのように機能しました。ありがとう。
ジョーCodeswell user601770

ありがとうございました。これはOracle Linuxでも機能しました。(私はnano / picoが好きです。)
MikeP

1

env_resetは、ユーザーがコマンドラインで変数を設定できないようにします。

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

このeditorオプションについてのあなたの発見はやや衝撃的ですが、残念ながらあなたの二次的な質問に対する答えがわかりません。Ubuntuのキャンプには、この問題に関する多くのドキュメントと構成例があると思うでしょう。おそらく、もっと難しく見えるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.