Tôi đang sử dụng Ubuntu 10.04 Server và đang cố gắng thiết lập sudoers để tôn trọng lựa chọn EDITOR của người dùng (trong giới hạn)
Trong sudoers của tôi, tôi có:
Defaults editor=/usr/bin/nano:/usr/bin/vim
Defaults env_reset
Và trong người dùng .bashrc:
export EDITOR=/usr/bin/vim
$ EDITOR được đặt:
$ echo $EDITOR
/usr/bin/vim
Theo man sudoers
điều này là đủ để $ EDITOR được đặt thành 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.
Tuy nhiên nano
vẫn đang được sử dụng cho người dùng này. Kiểm tra nhanh env:
$ sudo -- env | grep EDITOR
Trả về không có gì.
$ sudo -E -- env | grep EDITOR
Trả về EDITOR=/usr/bin/vim
Tôi biết rằng tôi có thể làm những điều sau đây để EDITOR hoạt động:
- Set
env_editor
,env_keep+=EDITOR
hoặc bất kỳ lựa chọn nào khác mà giữ biến EDITOR trong sudoers: Tôi không muốn làm điều này vì nó có thể cho phép thực thi tùy ý bất cứ điều gì (ví dụexport EDITOR=~/bad_program_to_run_as_root
) - Sử dụng
sudo -E
hoặc thậm chíalias sudo='sudo -E'
: Đánh bại điểm cóenv_reset
và người dùng không có SETENV (không phải thứ tôi muốn đưa ra: xem điểm trước) nhậnsudo: sorry, you are not allowed to preserve the environment
- Đặt
editor=/usr/bin/vim
: Nhưng có những người dùng khác không biết vim - Sử dụng
sudo select-editor
: Đóng, nhưngsudo visudo
vẫn mở trongnano
- Chỉ cần sử dụng sudoedit hoặc VIM trực tiếp: Nhưng sau đó bạn mất sự an toàn của các công cụ như
visudo
,vipw
,crontab -e
. - Chỉ cần đối phó với nó: Có thể, nhưng nếu tôi thiếu một số hiểu biết, tôi rất muốn biết
Tôi cũng đã thử thiết lập các biến VISUAL
và SUDO_EDITOR
(trong tuyệt vọng)
Có điều gì tôi đã bỏ lỡ sẽ sudo visudo
mở trong trình soạn thảo người dùng lựa chọn, mà không thực hiện các thỏa hiệp ở trên không?
BIÊN TẬP:
Tôi nghĩ rằng tôi hiểu tại sao điều này không hoạt động như tôi mong đợi. Tôi sẽ đặt nó xuống đây trong trường hợp bất kỳ ai khác có cùng quan niệm sai lầm.
Trong tập tin sudoers
Defaults editor=/usr/bin/nano:/usr/bin/vim
- Chỉ đề cập đến danh sách các biên tập viên được phép khi chạy
visudo
(không phải bất kỳ chương trình nào khác) editor
kiểm tra $ EDITOR, nhưng nếu đang chạysudo visudo
,sudo
không đặt $ EDITOR, vì vậy khivisudo
chạy, nó sẽ trống- Do đó, trình soạn thảo đầu tiên được sử dụng, trong trường hợp này
nano
Bất cứ ai có thể xác nhận rằng điều này là chính xác?
Do đó, tôi mong đợi rằng một giải pháp an toàn sẽ được thêm vào:
Defaults!/usr/sbin/visudo env_keep+=EDITOR
tức là giữ EDITOR khi và chỉ khi chạy visudo. Điều này sau đó sẽ được kiểm tra chống lại
Defaults editor=/usr/bin/nano:/usr/bin/vim
Và nếu nó không phù hợp thì sẽ sử dụng nano
Thật kỳ lạ, điều này dường như không phải là trường hợp:
$ sudo su - root
# export EDITOR=/bin/echo
# visudo
/etc/sudoers.tmp
visudo: /etc/sudoers.tmp unchanged
/bin/echo
được sử dụng làm trình soạn thảo. Bọ cánh cứng? Hay một quan niệm sai lầm khác?
Cảm ơn
VISUAL
việc được ưu tiên hơnEDITOR
. Tôi nghĩ rằngEDITOR
biến của tôi chỉ bị bỏ qua. Hóa ra, trong Centos7 cả haiEDITOR
vàVISUAL
dường như mặc địnhpico
.