web-dev-qa-db-ja.com

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

私はUbuntu10.04サーバーを使用しており、ユーザーのEDITORの選択を尊重するようにsudoerを設定しようとしています(制限内)

私の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を機能させるために次のことができることを認識しています。

  • env_editorenv_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を取得するという点を打ち負かします
  • Set editor=/usr/bin/vim:しかし、vimを知らない他のユーザーがいます
  • Sudo select-editorを使用:閉じますが、Sudo visudoは引き続きnanoで開きます
  • Sudoeditまたはvimを直接使用するだけです。ただし、visudovipwcrontab -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はエディターとして使用されます。バグ?または別の誤解?

ありがとう

18
Mark C

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

6
Guy

説明されているように別の解決策がありますここ

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を使い続けています。

5
rld.

Debian 7では、環境でEDITORを設定することはできませんでした。

Nanoを使用するために、次の行を/etc/sudoersに追加しました

Defaults        editor="/usr/bin/nano"
3
kim3er

env_resetは、ユーザーがコマンドラインで変数を設定することを妨げません。

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

editorオプションに関するあなたの調査結果は少し衝撃的ですが、残念ながら私はあなたの二次的な質問に対する答えを知りません。 Ubuntuキャンプには、この問題に関する多くのドキュメントと設定例があるはずだと思う人もいるでしょう。