VIM: „sudo vim bad_idea”?

20

Użytkownik irc na #Vim namawiał mnie, żebym nie używał Sudo z Vimem jak:

sudo vim bad_idea

Kiedy robię rzeczy w lokalizacjach takich jak / var / www /, nie mogę bez tego pisać. Zatem niestosowanie sudo staje się problemem. Oczywiście mogłem dokonać zmian w różnych lokalizacjach, takich jak / tmp /, a następnie skopiować katalogi do / var / www. Jednak wyczuwam łatwiejszy sposób.

  1. Jeśli nie „sudo Vim”, dlaczego?
  2. Jeśli tak, na pierwsze pytanie, w jaki sposób można obejść problemy z niestosowaniem sudo?
Léo Léopold Hertz 준영
źródło

Odpowiedzi:

35

Ja zaliczam się do pierwszej kategorii: sudo vim /var/www/html/some_fileto zły pomysł; umożliwia ucieczki powłoki, które nie są rejestrowane. Zamiast tego użyj sudoedit /var/www/html/some_file; to ma ten sam efekt.

Kevin M.
źródło
5
Co to są „ucieczki powłoki, które nie są rejestrowane”? i dlaczego nie ma znaczenia tylko w / var / www?
hasen
6
vim ma moc uruchamiania innych poleceń w linii poleceń. Ponieważ jednak vim został uruchomiony przez sudo i dlatego działa jako root, dowolne z tych poleceń będą działały z uprawnieniami roota. Te polecenia są znane jako „ucieczki powłoki” i nie są rejestrowane tak, jak inne wywołania sudo. I nie ogranicza się tylko do / var / www; jest wszędzie, gdzie bym go użył. Nawet alias „sudo vi” do „sudoedit” w moim pliku bashrc.
Kevin M
Widzę, do czego zmierzasz i chcę się zgodzić, ale wyjaśnij. Nie mamy pojęcia, czy jego zwykłe czynności związane z rootowaniem su i sudo są rejestrowane, czy nie. „sudo vim” pozwala na uruchamianie podpowłoki jako root - to wszystko jest dokładne; wewnątrz tej powłoki „sudo” nie będzie kontrolować, co root może, a czego nie może zrobić.
pbr
3
Kevin, jak udało ci się dokonać aliasu „sudo vi” na „sudoedit”? Z podręcznika bash ... "Znaki /, $,` i = oraz dowolne metaznaki powłoki lub znaki cytowania wymienione powyżej mogą nie pojawiać się w nazwie aliasu. ” ... przestrzeń jest jednym z tych metaznaków, o których mówi.
pbr
9
OK, więc nie jest to alias per se, ale ma ten sam efekt: 'function sudo () {[[$ 1 == vi]] && shift && sudoedit "$ @" || polecenie sudo "$ @"; } '
Kevin M.
10

Patrz: /programming/1005/getting-root-permissions-on-a-file-inside-of-vi :

% zostaje zastąpione bieżącą nazwą pliku, więc możesz użyć:

: w! sudo tee%

hiperslug
źródło
Jeśli zamierzasz użyć tee, sugerowałbym ': w! Sudo tee%> / dev / null', aby nie zobaczyć całego pliku. Zazwyczaj zamiast tego używam „: w! Dd =%”, ponieważ szybciej jest pisać i osiąga to samo. Oczywiście dzieje się tak tylko wtedy, gdy zapomniałem użyć sudoedit / sudo -e.
jamessan
7

vim pozwala użytkownikom wykonywać dowolne polecenia powłoki, dlatego wielu administratorów systemu nie zezwala na używanie vima z sudo.

rvim jest dołączony do vima. Jest to ograniczony vim, który nie pozwala na polecenia powłoki. (Lub pozwalają ci zawiesić vima z tych samych powodów.)

To, czy musisz przejść do tych ekstremów na własnym pudełku, jest dyskusyjne.

Richard Hoskins
źródło
1
+1. Zgadzać się w zupełności. sudo vimnastępnie wejdź :!bashi masz powłokę jako root - dokładnie dlaczego rvimistnieje
dbr
3
Właściwie, jeśli można sudo vim, można prawdopodobnie sudo bashlub sudo su -w prawo?
dlamblin
@Diamblin Uprawnienia można uzyskać z bardziej szczegółowymi szczegółami, więc niekoniecznie. Dlatego potrzebny jest rvim. „sudo vim” to to samo co „sudo su -” dla wszystkich celów i celów. Na bitowym pudełku Debiana, w którym jeden użytkownik jest administratorem systemu, to wszystko jest akademickie.
Richard Hoskins,
Jak Ubuntu radzi sobie z tym problemem? CentOS viuruchamia vimale jako root vistartów vi. Na Ubuntu vimjest używany w obu przypadkach, a sudo vitakże uruchamia vim...
cwd
6

Podczas edycji plików konfiguracyjnych całego systemu wszystko jest w porządku - pamiętaj tylko, że jesteś rootem, a zatem masz całą moc, i zrzuć te uprawnienia, gdy tylko ich nie potrzebujesz.

W szczególnym przypadku /var/www/, np. Na stronach serwera WWW, możesz pomyśleć o zmianie niektórych praw własności / grup / uprawnień --- ale czy i jak w dużej mierze zależy od konkretnej konfiguracji (pojedynczy / wielu użytkowników, prawdziwy serwer WWW / po prostu localhost, dynamiczny / static itp.)

balpha
źródło
6
+1 rzeczywiście - jest to najlepszy sposób obsługi stron serwera WWW. Upewnij się, że masz do nich dostęp, a nie podnosząc swoje uprawnienia.
bedwyr
1
-1 nie ma powodu, aby uruchamiać vima z podwyższonymi uprawnieniami, gdy sudoedit wykona tę samą pracę.
sml
4

Takie pytanie zmusza mnie do uderzenia się w czoło. Jestem po drugiej stronie bezpieczeństwa, „bezpieczeństwo nie powinno kolidować z wrażeniami użytkownika, chyba że jest to spodziewane lub wymagane, aby zapobiec sytuacji, w której przeciętny człowiek będzie robił złośliwe działania”.

Zapobieganie używaniu vima w sudo to tylko pomoc zespołu. Jak wspomniano wcześniej, ktoś może po prostu użyć:

sudo su -

Lub

sudo /bin/bash

Lub

sudo nano file

Lub

sudo my_exectuable_text_editor file

ect

Jeśli naprawdę martwisz się, że ktoś zrobi coś złośliwego na urządzeniu, nie przyznawaj mu uprawnień sudo (lub oczywiście hasła root), kropka. Nie ma pocisku odłamkowego, który zapobiegałby złośliwej aktywności przy użyciu sudo, a oszalejesz tylko poprzez „stosowanie” wszystkich „poprawek”, aby upewnić się, że dana osoba nie jest w stanie zrobić nic złośliwego.

Ktoś wspomniał o zmianie własności / grup. To przyklejony problem, jakby serwer WWW był uruchamiany jako inny użytkownik, a Ty zmieniasz uprawnienia do pliku, teraz Twoja witryna nagle nie działa. Oczywiście to ci nie pomoże. Możesz dodać siebie do grupy, na której działa serwer WWW, jednak jeśli grupa nie ma dostępu do zapisu do plików, musisz wykonać chmod -R g + w * (lub pojedyncze pliki chmod) co chcesz i może być kłopotliwe, jeśli musisz chmod każdy plik.

Niektórzy sugerowali nawet używanie rvim. Jasne, można po prostu dodać wiersz w / etc / sudoers, aby zezwolić tylko niektórym użytkownikom na sudo rvim, jednak logiczne byłoby, że gdybyś musiał pójść tą drogą, lepiej byłoby zaimplementować internetowy menedżer plików. W ten sposób działa jako użytkownik, na którym działa serwer WWW, dzięki czemu nie występują problemy z uprawnieniami do plików i nadal możesz mieć szczegółową kontrolę nad tym, kto edytuje jakie pliki.

W każdym razie moje dwa centy.

Natalie Adams
źródło
2

Uruchomienie sudo vimnie zmieni $HOMEkatalogu, więc będziesz uruchamiał Vima z uprawnieniami roota, ale $HOMEnadal wskazuje na normalnego użytkownika.

Jeśli uruchamiasz Vima po raz pierwszy, może się zdarzyć, że ~/.viminfoplik zostanie utworzony w normalnym katalogu użytkownika, ale z uprawnieniami administratora.

Denilson Sá Maia
źródło
1
Zależy od sudo. Na moim laptopie sudo vim -c '!echo $HOME' -c qdaje mój folder domowy, ale na moim serwerze daje /root. Być może będę musiał rzucić okiem na to, dlaczego tak jest, może to być spowodowane tym, że jeden OS X jest drugim Gentoo, lub może mieć coś wspólnego z /etc/sudoerskonfiguracją.
Nemo157,
Aha! masz rację - skończyłem tutaj, zastanawiając się, dlaczego mój .viminfobył dostępny tylko dla roota.
Ayrat,
1

JEŚLI TO JEST TWÓJ WŁASNY KOMPUTER ... Nie widzę powodu, dla którego nie możesz używać 'sudo vim', poza przypadkiem, który zauważył Denilson - że może stworzyć twoje ~ / .viminfo należące do roota.

Jeśli nie - jeśli administrator systemu ogranicza to, co możesz, a czego nie możesz zrobić - dla „man sudo”: w większości systemów można zapobiec ucieczce powłoki za pomocą funkcji noexec sudo. Szczegółowe informacje można znaleźć w instrukcji sudoers (5). „

Więc w tym przypadku, jeśli twój administrator systemu jest zaniepokojony potencjalnym działaniem podpowłoki jako roota z poziomu vima, może użyć funkcji noexec. Ale ... wracając do początkowej sprawy - jeśli to jest TWÓJ komputer, myślę, że jesteś cholernie bezpieczny, uruchamiając „sudo vim”.

pbr
źródło