Czy używanie Vima jest bezpieczne w połączeniu z sudo?

25

Nie zaleca się używania sudoz aplikacją graficzną podobną geditdo opisanej pod tym linkiem . W związku z tym, mam tendencję do korzystania vimz sudo.

Ostatnio zauważyłem, że moja ~/.viminfowłasność jest rootem na dość nowej instalacji Ubuntu 16.04 (Xenial Xerus), więc zastanawiałem się, czy nawet Vima uważa się za graficzny, czy też jest jakiś inny problem z wywoływaniem sudo vim. Po zmianie właściciela na siebie poprzez:

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +

a następnie uruchomiony sudo vimnie mogłem być ~/.viminfo właścicielem roota. Jestem jednak pewien, że ostatnio był własnością root.

Czy inwokacja jest niewskazana sudo vim?

H2ONaCl
źródło
1
Możesz także używać vima bez sudo, a jeśli chodzi o zapisywanie pliku, możesz użyć:w !sudo tee %
ChatterOne,

Odpowiedzi:

22

Tak, jest bezpieczny.

Problem sudo geditpolega na tym, że aplikacje GUI używają pewnych plików, takich jak ~/.cache/dconf, i po podwyższeniu geditplik staje się własnością root. Cóż, ten konkretny plik zawiera specyficzne dla użytkownika ustawienia aplikacji GUI, w tym pulpitu, więc jeśli system nie może odczytać tych ustawień - jest źle. IIRC użytkownik nie może uruchomić określonego pulpitu. Wpływa to recently-used.xbelrównież na dane ostatnich plików użytkownika .

Z drugiej strony Vim nie ma tego problemu. Nie korzysta z bazy danych związanej z GUI i niczego nie wkłada recently-used.xbel. Został stworzony tylko dla konsoli, chociaż gVim również istnieje. W rzeczywistości w niektórych systemach Vim jest jedynym wyborem redaktora. Jest to więc bezpieczniejsze niż gedit, ponieważ nie powoduje tych samych problemów. W obu przypadkach nadal edytujesz jako root, więc możesz spowodować problemy z niewłaściwą edycją.

Zgodnie z tym postem na blogu :

Przy pierwszym użyciu vima plik ~/.viminfozostanie utworzony, a jeśli użyjesz sudo vimgo po raz pierwszy po zainstalowaniu go w nowym systemie, uprawnienia użytkownika ~/.viminfobędą ustawione na rootowanie zamiast domyślnego użytkownika.

Chociaż autor wskazuje, że może to prowadzić do problemów, nie ma nic złożonego - tylko chownplik z powrotem do siebie.

Zobacz też:

Sergiy Kolodyazhnyy
źródło
6
Pamiętaj, że vim nie jest bezpieczny w systemie z wieloma użytkownikami, w którym próbujesz ograniczyć uprawnienia administracyjne innych użytkowników. Użytkownik może użyć, sudo vimaby uzyskać kopię vima działającą jako root, a następnie :!/bin/shuzyskać powłokę root.
Mark
3
@Mark i co powstrzymuje użytkownika przed zrobieniem sudo /bin/sh? Praktycznie rzecz biorąc, jeśli użytkownik ma już dostęp do konta root, nie musi używać skomplikowanych sztuczek.
Sergiy Kolodyazhnyy
7
/etc/sudoersPlików. Nie musisz tego robić %wheel ALL=(ALL) ALL- sudokonfiguracja pozwala na znacznie więcej niuansów.
Mark
1
@ Zaznacz OK, dobra uwaga - nie każdy system ma takie same ustawienia.
Sergiy Kolodyazhnyy
Uhm ... Czy pozwolenie zmieni się, nawet jeśli plik istnieje? Załóżmy, że włamałem się na konto użytkownika innego niż administrator, ale nie znam jego hasła (być może udało mi się otworzyć powłokę). Czy to oznacza, że mogę skopiować /bin/bashaby ~/.viminfoumieścić na niej setuid i czekać, aby użytkownik mógł uruchomić sudo vimsię to chown-owane na roota?
ChatterOne,
15

Można to również wykorzystać sudoeditdo osiągnięcia tego; otwiera tymczasową kopię pliku w edytorze, a edytor działa tak jak Ty. Od strony man :

  1. Tworzone są tymczasowe kopie plików, które mają być edytowane z ustawieniem właściciela dla wywołującego użytkownika.

  2. Edytor określony przez zasadę jest uruchamiany w celu edycji plików tymczasowych. Polityka sudoers używa SUDO_EDITOR, VISUALi EDITORzmiennych środowiskowych (w tej kolejności). Jeśli żadna z SUDO_EDITOR, VISUALlub EDITORsą ustawione, pierwszy program wymieniony w edytorze sudoers(5)opcja jest używana.

  3. Jeśli zostały zmodyfikowane, pliki tymczasowe są kopiowane z powrotem do oryginalnej lokalizacji, a wersje tymczasowe są usuwane.

Działa to dobrze z vimem (ogólnie to robię) i wyobrażam sobie, że pozwoliłoby ci również użyć gedit. Istnieją pewne ograniczenia bezpieczeństwa .

GKFX
źródło
4
Jest to o wiele lepsze, jeśli wolisz używać własnej konfiguracji vima zamiast roota.
NieDzejkob,
2
Jest to również bezpieczniejsze, jeśli nie chcesz uruchamiać losowego kodu wtyczki jako root (jednak wtyczki działające, ponieważ mogą również wyrządzić wiele szkód, jeśli są złośliwe, więc nie używaj wtyczek, którym nie ufasz pierwsze miejsce).
Kevin,
2

Link jest bardzo stary (2013). Zaleca się używanie gksudolub gksudo aplikacji graficznych, ale oba stają się przestarzałe. Później zaakceptowana odpowiedź również sugeruje sudo -H.

Ogólny konsensus w społeczności Ask Ubuntu dotyczy ostatnio:

sudo -H gedit /path/to/filename

Pozostaje tylko problem, sudoktóry nie ma profilu ustawień kart, rozszerzeń, zawijania słów, nazwy czcionek, rozmiaru czcionki itp. Możesz je dziedziczyć z profilu użytkownika za pomocą skryptu opakowania takiego: Jak mogę zsynchronizować mój katalog główny gedit z preferencjami mojego użytkownika gedit?

WinEunuuchs2Unix
źródło
2

Tak, jest bezpieczny w użyciu sudo vim. Występują problemy

  • Konieczność zamknięcia pliku i ponownego otwarcia za pomocą, sudo vimaby móc edytować.

  • Mając root vimrcjako domyślny, a nie moje niestandardowe przydatne rzeczy.

Oto funkcja, którą możesz ustawić, bashrcaby vim mógł automatycznie sudo, jeśli nie możesz normalnie edytować pliku.

vim() {
    #only good for auto-sudo. delete if no sudo privileges.
    #If you're not just opening a single file, let's not use this.
    if [[ "$#" -ne 1 ]]; then
        command vim "$@"
    #cases: if we can write to the file, or the file doesn't exist and we can make new files in that directory
    elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
        # \vim or 'vim' only escape aliases, not functions
        command vim "$1"
    else
        sudo env HOME="$HOME" vim -u $HOME/.vimrc "$1"
    fi
}
jeremysprofile
źródło
Na Ubuntu sudodomyślnie zachowuje $HOMEzmienną środowiskową, co oznacza, że sudo vim będzie używać dostosowany .vimrc, a to oznacza również, że sudo vimbędzie zmienić właściciela ~/.viminfona root: root i spowodować pewne niedogodności.
Marius Gedminas
Przyjęta odpowiedź nie zgadza się z tobą viminfo.
jeremysprofile
1

Można używać vi jako root. Będą chwile, kiedy będziesz musiał edytować plik, który wymaga uprawnień sudo lub root, takich jak zmiana pliku interfejsów sieciowych lub edycja pliku konfiguracyjnego sshd. Używanie roota do graficznych treści jest złe, ponieważ ludzie łączyliby się z IRC lub przeglądali sieć jako root. Gdyby to zrobili, miałby pełny dostęp do roota.

Litera M.
źródło
2
Istnieje co najmniej jeden konkretny wyjątek dotyczący używania vi jako root. Plik kontrolujący ścieżkę sudo (/ etc / sudoers) nigdy nie powinien być edytowany za pomocą vi. W przypadku tego pliku należy użyć polecenia visudo. Nawet nie określasz, który plik jest edytowany, to tylko przypadek specjalny.
user628388,
1

Coś, co nie zostało wspomniane w innych odpowiedziach, to to, że uruchomienie vima z rootem da rootowi uprzywilejowanie dla wszystkich zainstalowanych wtyczek. Tak więc pytanie, czy można bezpiecznie uruchamiać jako root, zależy od tego, czy ufasz programistom wtyczek (lub współpracownikom ich projektu), że nie są właścicielami twojego systemu.

Vim jest zwykle sprawdzany przez opiekunów pakietów we wszystkich dystrybucjach Linuksa, więc łatwo jest zaufać. Jednak wtyczki vim są zazwyczaj instalowane bezpośrednio z repozytoriów GitHub i zazwyczaj mają znacznie mniej kontroli użytkowników (być może zero). Innymi słowy, nie przeprowadza się z nimi procesu weryfikacji.

Jeśli nie ładujesz wtyczek podczas rootowania, myślę, że uruchamianie jako root zależy od tego, czy ufasz programistom vim. Możesz jednak pominąć konieczność ufania im, używając sudoedit, który jest tworzony przez tych samych twórców sudo, ludzi, którym i tak ufaliśmy już z dostępem do roota. GKFX i NieDzejkob wspominali już, dlaczego sudoedit jest idealny. Oprócz tego, że nie musisz ufać prawom dostępu do konta root innym osobom, oprócz twórców sudo, możesz załadować wszystkie wtyczki, którym już ufałeś, na swoje normalne konto użytkownika.

JoL
źródło
Ta dyskusja na temat braku zaufania do różnych programistów wydaje się nieco niekompletna; jeśli masz sudoedit /etc/apt/sources.listzainstalowaną zainfekowaną wtyczkę, prawdopodobnie może ona wstawić złośliwe repozytorium i uzyskać dostęp do konta root przy następnym uruchomieniu aktualizacji. Jestem pewien, że istnieje długa lista plików chronionych przed rootem, których dotyczy coś podobnego. I oczywiście nie każdy wirus wymaga roota; dane bankowe można pobrać tylko za pomocą rozszerzenia przeglądarki.
GKFX,