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 (misalnyaexport EDITOR=~/bad_program_to_run_as_root) - Gunakan
sudo -Eatau bahkanalias sudo='sudo -E': Mengalahkan titik memilikienv_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, tetapisudo 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 dijalankansudo visudo,sudotidak menetapkan $ EDITOR, jadi ketikavisudodijalankan $ 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
VISUALdiutamakanEDITOR. Saya pikirEDITORvariabel saya hanya diabaikan. Ternyata, di Centos7 keduanyaEDITORdanVISUALtampaknya defaultpico.