Jak mogę poprawnie ustawić edytor sudo / visudo?

17

Używam serwera Ubuntu 10.04 i próbuję skonfigurować sudoers, aby szanować wybór EDYTORA użytkownika (w granicach)

W moich sudoerach mam:

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

A w użytkowniku .bashrc:

export EDITOR=/usr/bin/vim

Ustawiono $ EDITOR:

$ echo $EDITOR
/usr/bin/vim

Według man sudoers powinno to wystarczyć, aby $ EDITOR został ustawiony na 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.

jednak nano jest nadal używany dla tego użytkownika. Szybkie sprawdzenie Env:

$ sudo -- env | grep EDITOR

Zwraca nic.

$ sudo -E -- env | grep EDITOR

Zwraca EDITOR=/usr/bin/vim

Wiem, że mogłem wykonać następujące czynności, aby praca EDITORA:

  • Zestaw env_editor, env_keep+=EDITOR lub dowolna inna opcja, która utrzymuje zmienną EDITOR w sudoers: Nie chcę tego robić, ponieważ może to umożliwić dowolne wykonanie czegokolwiek (np. export EDITOR=~/bad_program_to_run_as_root )
  • Posługiwać się sudo -E lub nawet alias sudo='sudo -E': Pokonuje cel posiadania env_reset a użytkownicy bez SETENV (nie coś, co chcę rozdać: patrz poprzedni punkt) sudo: sorry, you are not allowed to preserve the environment
  • Zestaw editor=/usr/bin/vim: Ale są inni użytkownicy, którzy nie znają vima
  • Posługiwać się sudo select-editor: Zamknij, ale sudo visudo wciąż się otwiera nano
  • Po prostu użyj sudoedit lub vim bezpośrednio: Ale wtedy tracisz bezpieczeństwo narzędzi takich jak visudo, vipw, crontab -e.
  • Zajmij się tym: Prawdopodobnie, ale jeśli brakuje mi jakiegoś wglądu, chciałbym to wiedzieć

Próbowałem również ustawić VISUAL i SUDO_EDITOR zmienne (w desperacji)

Czy jest coś, za czym tęskniłem? sudo visudo otwarty w wybranym edytorze użytkowników, bez kompromisów powyżej?

EDYTOWAĆ:

Myślę, że rozumiem, dlaczego to nie działa tak, jak się tego spodziewam. Odkładam to tutaj na wypadek, gdyby ktoś inny miał to samo nieporozumienie.

W pliku sudoers

Defaults        editor=/usr/bin/nano:/usr/bin/vim
  • Dotyczy tylko listy edytorów, które są dozwolone podczas uruchamiania visudo (nie jakikolwiek inny program)
  • editor sprawdza $ EDITOR, ale jeśli działa sudo visudo, sudo nie ustawia $ EDITOR, więc kiedy visudo biegnie będzie pusty
  • Dlatego w tym przypadku używany jest pierwszy edytor nano

Czy ktoś może potwierdzić, że jest to poprawne?

Spodziewałem się zatem, że bezpiecznym rozwiązaniem byłoby dodanie:

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

tj. utrzymuj EDITORA jeśli i tylko wtedy, gdy uruchomisz visudo. Zostanie to sprawdzone

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

A jeśli nie pasuje, to użyje nano

Dziwnie jednak nie wygląda to tak:

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

/bin/echo jest używany jako edytor. Pluskwa? Lub inne nieporozumienie?

Dzięki

Mark C
źródło

Odpowiedzi:

6

Masz rację, ustawiając EDITOR zmienna powinna zmienić używany edytor sudo. Istnieją jednak dwie inne zmienne z pierwszeństwem przed EDITOR: SUDO_EDITOR i VISUAL. Upewnij się, że żaden z nich nie wskazuje innego edytora nano.

Guy
źródło
Powodem, dla którego głosowałem, jest to, że tak niewiele odpowiedzi odnosi się do VISUAL pierwszeństwo przed EDITOR. Myślałem, że jestem EDITOR zmienna była właśnie ignorowana. Okazuje się, że w Centos7 oba EDITOR i VISUAL domyślnie pico.
threeve
5

Jest inne rozwiązanie, jak opisano tutaj :

sudo update-alternatives --config editor

Ale nie jest tak przyjazny w systemie z wieloma użytkownikami, ponieważ aktualizuje tylko dowiązanie symboliczne /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

Co się stało z select-editor tak czy inaczej? Po uruchomieniu tworzy plik:

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

Ale sudo visudo nadal używa nano.

rld.
źródło
3

W Debianie 7 ustawienie EDITOR w środowisku nie działało.

Aby użyć Nano, skończyłem dodając następującą linię do /etc/sudoers

Defaults        editor="/usr/bin/nano"
kim3er
źródło
WORKED LIKE A CHAMP na DigitalOcean Ubuntu 12.04. Dzięki.
Joe Codeswell user601770
Dziękuję Ci. To także działało na Oracle Linux. (Lubię nano / pico.)
MikeP
1

env_reset nie powstrzymuje użytkownika przed ustawieniem zmiennych w wierszu poleceń:

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

Uważam, że twoje ustalenia na temat editor opcja lekko szokująca, ale niestety nie znam odpowiedzi na twoje dodatkowe pytania. Można by pomyśleć, że obóz Ubuntu miałby mnóstwo dokumentów i przykładów konfiguracji w tej kwestii, być może powinniśmy wyglądać mocniej.

Ярослав Рахматуллин
źródło