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 sudoers
ini 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 nano
masih 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+=EDITOR
atau 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 -E
atau bahkanalias sudo='sudo -E'
: Mengalahkan titik memilikienv_reset
dan 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 visudo
masih 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 VISUAL
dan SUDO_EDITOR
variabel (putus asa)
Apakah ada sesuatu yang saya lewatkan yang akan membuat sudo visudo
terbuka 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) editor
memeriksa $ EDITOR, tetapi jika dijalankansudo visudo
,sudo
tidak menetapkan $ EDITOR, jadi ketikavisudo
dijalankan $ 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/echo
digunakan sebagai editor. Bug? Atau kesalahpahaman lain?
Terima kasih
VISUAL
diutamakanEDITOR
. Saya pikirEDITOR
variabel saya hanya diabaikan. Ternyata, di Centos7 keduanyaEDITOR
danVISUAL
tampaknya defaultpico
.