Bagaimana saya bisa mengatur sudo / visudo editor?

18

Saya menggunakan Ubuntu 10.04 Server dan mencoba mengatur sudoers untuk menghormati pilihan EDITOR pengguna (dalam batas)

Di sudoers saya, saya punya:

Defaults        editor=/usr/bin/nano:/usr/bin/vim
Defaults        env_reset

Dan di pengguna .bashrc:

export EDITOR=/usr/bin/vim

$ EDITOR disetel:

$ echo $EDITOR
/usr/bin/vim

Menurut man sudoersini harus cukup untuk $ EDITOR untuk disetel ke 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.

Namun nanomasih digunakan untuk pengguna ini. Pemeriksaan env yang cepat:

$ sudo -- env | grep EDITOR

Tidak menghasilkan apa-apa.

$ sudo -E -- env | grep EDITOR

Kembali EDITOR=/usr/bin/vim

Saya sadar bahwa saya dapat melakukan hal-hal berikut untuk menjadikan EDITOR berfungsi:

  • Setel env_editor, env_keep+=EDITORatau opsi lain apa pun yang membuat variabel EDITOR di sudoers: Saya tidak ingin melakukan ini karena dapat memungkinkan eksekusi sembarang dari apa pun (misalnya export EDITOR=~/bad_program_to_run_as_root)
  • Gunakan sudo -Eatau bahkan alias sudo='sudo -E': Mengalahkan titik memiliki env_resetdan pengguna tanpa SETENV (bukan sesuatu yang ingin saya berikan: lihat poin sebelumnya) dapatkansudo: sorry, you are not allowed to preserve the environment
  • Set editor=/usr/bin/vim: Tetapi ada pengguna lain yang tidak tahu vim
  • Gunakan sudo select-editor: Tutup, tetapi sudo visudomasih terbukanano
  • Cukup gunakan sudoedit atau vim langsung: Tapi kemudian Anda kehilangan keamanan alat-alat seperti visudo, vipw, crontab -e.
  • Hanya berurusan dengan itu: Mungkin, tetapi jika saya kehilangan wawasan saya ingin tahu

Saya juga sudah mencoba mengatur VISUALdan SUDO_EDITORvariabel (putus asa)

Apakah ada sesuatu yang saya lewatkan yang akan membuat sudo visudoterbuka di editor pilihan pengguna, tanpa membuat kompromi di atas?

EDIT:

Saya pikir saya mengerti mengapa ini tidak berfungsi seperti yang saya harapkan. Saya meletakkannya di sini kalau-kalau ada orang yang memiliki kesalahpahaman yang sama.

Dalam file sudoers

Defaults        editor=/usr/bin/nano:/usr/bin/vim
  • Hanya merujuk pada daftar editor yang diizinkan saat menjalankan visudo(bukan program lain)
  • editormemeriksa $ EDITOR, tetapi jika dijalankan sudo visudo, sudotidak menetapkan $ EDITOR, jadi ketika visudodijalankan $ akan kosong
  • Oleh karena itu editor pertama digunakan, dalam hal ini nano

Adakah yang bisa mengkonfirmasi bahwa ini benar?

Karena itu saya berharap solusi yang aman adalah menambahkan:

Defaults!/usr/sbin/visudo env_keep+=EDITOR

yaitu tetap EDITOR jika dan hanya jika menjalankan visudo. Ini kemudian akan diperiksa

Defaults                  editor=/usr/bin/nano:/usr/bin/vim

Dan jika tidak cocok akan digunakan nano

Namun anehnya, ini tidak terjadi:

$ sudo su - root
# export EDITOR=/bin/echo
# visudo
/etc/sudoers.tmp
visudo: /etc/sudoers.tmp unchanged

/bin/echodigunakan sebagai editor. Bug? Atau kesalahpahaman lain?

Terima kasih

Markus C
sumber

Jawaban:

6

Anda benar bahwa pengaturan EDITORvariabel harus mengubah editor yang digunakan sudo. Namun, ada dua variabel lain dengan diutamakan atas EDITOR: SUDO_EDITORdan VISUAL. Pastikan tidak ada yang menunjuk ke editor lain seperti nano.

Orang
sumber
Alasan saya tervvotasikan adalah karena sangat sedikit jawaban yang membuat referensi untuk VISUALdiutamakan EDITOR. Saya pikir EDITORvariabel saya hanya diabaikan. Ternyata, di Centos7 keduanya EDITORdan VISUALtampaknya default pico.
threeve
5

Ada solusi lain seperti yang dijelaskan di sini :

sudo update-alternatives --config editor

Tapi itu tidak ramah pada sistem multi-pengguna karena hanya memperbarui symlink di /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

Apa yang terjadi select-editor? Ketika saya menjalankannya, itu membuat file:

$ 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"

Tapi sudo visudotetap gunakan nano.

rld.
sumber
3

Di Debian 7, pengaturan EDITOR di lingkungan tidak berfungsi.

Untuk menggunakan Nano, saya akhirnya menambahkan baris berikut ke /etc/sudoers

Defaults        editor="/usr/bin/nano"
Kim3er
sumber
BEKERJA SEPERTI CHAMP di DigitalOcean Ubuntu 12.04. Terima kasih.
Joe Codeswell user601770
Terima kasih. Ini juga bekerja pada Oracle Linux. (Saya suka nano / pico.)
MikeP
1

env_reset tidak mencegah pengguna mengatur variabel di baris perintah:

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

Saya menemukan temuan Anda tentang editoropsi yang sedikit mengejutkan tetapi sayangnya saya tidak tahu jawaban atas pertanyaan sekunder Anda. Orang akan berpikir bahwa kamp Ubuntu akan memiliki banyak dokumen dan contoh konfigurasi tentang masalah ini, mungkin kita harus mencari lebih keras.

Ярослав Рахматуллин
sumber