Czy może być jakiś problem podczas używania gedit do edycji plików systemowych za pomocą 'sudo -H gedit'?

10

Jestem stosunkowo nowy w Ubuntu, zauważyłem, że w odpowiedziach na tej stronie, kiedy ludzie sugerują edycję plików systemowych, polecenie, które wydają, to zawsze sudo nanolub sudo vi. Ponieważ nie lubię używać edytorów tekstu opartych na terminalach, zwykle używam

sudo -H gedit

zamiast tego i jak dotąd działało idealnie dobrze.

Czy może być jakiś problem z geditedycją plików systemowych, czy też wybór edytora tekstu zależy wyłącznie od preferencji osoby? Czy jest coś, o czym powinienem pamiętać (np. Kodowanie) podczas edycji tych plików?

shinobody
źródło
3
Ta -Hczęść jest ważna , nie używaj jej sudodo uruchamiania aplikacji GUI bez niej.
pomsky

Odpowiedzi:

10

Tak długo, jak poprawnie go uruchomisz, zależy to od twoich preferencji.

Oprócz różnic w funkcjach , preferowany jest edytor tekstów. Dzieje się tak nawet wtedy, gdy edytor tekstu jest programem graficznym takim jak Gedit . Nie oznacza to, że nie ma dobrego powodu nanoi vimsą często zalecane. Edytory tekstu oparte na terminalach, takie jak vim(lub przynajmniej vipolecenie), i nanosą dostępne nawet, gdy nie ma GUI, a nawet w większości bardzo minimalnych i uszkodzonych systemów ; mają za sobą pewną tradycję (jeśli jesteś stronnikiem tego rodzaju rzeczy); można je uruchamiać w tym samym terminalu, w którym wykonywane są inne zadania; automatycznie integrują się z przepływami pracy użytkowników terminalowego multipleksera ; i są bardziej dostępne niż jakikolwiek innyszczególny graficzny edytor tekstu, nawet Gedit, nawet na Ubuntu (który ma kilka smaków ).

To nie wszystko. Jeśli zamierzasz edytować pliki systemowe, jednym z podejść jest uruchomienie edytora jako root. To nie jedyne podejście, i istnieją pewne argumenty przeciwko nim (patrz poniżej), ale jest to jeden wspólny. Jeśli zastosujesz to podejście i użyjesz programu graficznego jako edytora, musisz zadbać o to, aby uruchomić go w taki sposób, że $HOMEjest to katalog główny root, a nie własny , a to dodaje kolejną warstwę kłopotów i złożoności. Ale już to robisz; biegniesz sudo -H gedit, co jest jednym z rozsądnych sposobów . Mimo to ta złożoność jest kolejnym powodem, dla którego ludzie sugerują edytory nie graficzne.

Programy graficzne są często bardziej skomplikowane niż programy nie graficzne. Uruchamianie większej liczby rzeczy jako root jest na ogół złe, ponieważ istnieje więcej sposobów, aby coś poszło nie tak, w tym z powodu możliwych błędów, w tym przez przypadek. (Nie graficzne edytory tekstu, które vimsą jednak dość wyrafinowane i często są skonfigurowane do uruchamiania wielu zewnętrznych programów do wykonywania różnych zadań).

Oprócz uruchamiania edytora jako root, innym ogólnym podejściem jest edycja pliku, który edytor może modyfikować nawet podczas działania jako użytkownik (inny niż root), tak aby zmiany w pliku były propagowane do pliku będącego własnością root zmienić. Brzmi to abstrakcyjnie, ponieważ szczegóły różnią się znacznie. Następują dwa główne konkretne podejścia.

sudoedit

Jednym z dość długotrwałych sposobów jest sudoedit(udokumentowane na tej samej stronie podręcznika cosudo ). Domyślnie sudoeditużywa domyślnego edytora tekstu , który zwykle nie jest - i nie powinien - być programem graficznym. Ale można powiedzieć to, aby użyć dowolnego edytora za pośrednictwem SUDO_EDITOR, VISUALlub EDITOR zmiennych środowiskowych , który konsultuje się w tej kolejności. W ten sposób możesz uruchomić:

VISUAL=gedit sudoedit filename

Zastąp filenameścieżką względną lub bezwzględną do pliku.

To tworzy tymczasową kopię pliku, który chcesz edytować. Kopia jest twoją własnością, a nie rootem (lub kimkolwiek jest pierwotny właściciel). Otwiera edytor tekstu i możesz edytować tymczasową kopię. Po zamknięciu edytora tekstu sudoeditsprawdza, czy rzeczywiście dokonano zmian. Jeśli tak, kopiuje zmodyfikowaną tymczasową kopię z powrotem do oryginału.

Chociaż sudoeditwspółpracuje z edytorami graficznymi, jest także przydatny dla edytorów terminalowych. W obu przypadkach edytor tekstu działa tak jak Ty, więc ma konfigurację, a Ty wykonujesz w nim inne czynności niż modyfikacje tego pliku, co zapewnia pewną ochronę przed niektórymi błędami.

Możesz dowolnie ustawić jedną z tych zmiennych środowiskowych . SUDO_EDITORjest chyba najlepszy, ponieważ jest używany do mniejszej liczby innych rzeczy. Jeśli jednak to ustawisz gedit, pamiętaj, że polecenia takie nie będą działać, gdy GUI nie jest dostępne, jak to często bywa (choć nie zawsze ) w wirtualnej konsoli lub przez SSH .sudoedit filename

Backend administratora GVFS

Innym nowszym sposobem na to jest otwarcie pliku za pomocą admin://ścieżki GVFS, a nie tradycyjnej ścieżki w stylu uniksowym. Dziękuję pomsky za nauczenie mnie o tym. Podobnie jak istnieją ścieżki GVFS do edycji plików, które pod innymi względami nie są dogodnym miejscem do edycji - na przykład dlatego, że znajdują się na zdalnym komputerze, z którym masz połączenie przez SSH - GVFS obsługuje admin://ścieżki do edycji plików nie posiadasz.

Jest to koncepcyjnie podobne do sudoedittego, że uruchamiasz swój edytor jak ty, a plik, który redaktor widzi, jest czymś, co można edytować. Próba otwarcia pliku wymaga uwierzytelnienia; nie jest to magiczny sposób na obejście zwykłych ograniczeń bezpieczeństwa.

gedit admin:///path/to/filename

Tam /path/to/filenamemusi być absolutna ścieżka do pliku, zaczynając /. Po tym są trzy /postacie admin:.

Kodowanie i inne rzeczy teoretycznie zależne od konfiguracji edytora

Na kodowanie pliku nie wpływa tak naprawdę to, czy edytor, którego używasz, jest graficzny. Niektóre edytory vimmogą nawet działać graficznie ( gvimpolecenie) lub nie graficznie ( vimpolecenie). Prosta odpowiedź na pytanie dotyczące kodowania polega na tym, że nie musisz się tym martwić. To wystarczająco blisko prawdy, że tak naprawdę nie musisz czytać reszty tej odpowiedzi.

W obecnych (i ostatnie) wydaniach Ubuntu, komendy jak sudo nanoi sudo vimuruchomić te redaktorzy jako root ale $HOMEnadal ustawiony na swoim katalogu domowym. Oznacza to, że redaktorzy domyślnie używają twojej konfiguracji zamiast konfiguracji roota. Jeśli jest coś w konfiguracji tych edytorów (lub w programie, który uruchamiają, aby wykonać część swojej pracy, na przykład git) na temat kodowania lub zakończenia linii , będzie to przestrzegane. Dzięki tak się nie stanie.sudo -H editor

Niektóre osoby używają goły sudo(tj. Bez -ilub -H) dla redaktorów, ponieważ tego chcą. Ale tak naprawdę powinieneś pomyśleć o tym dwa razy. Nie tylko możesz osiągnąć ten cel bardziej czysto za pomocą metody sudoedit, ale istnieją także inne wady poleceń takich jak sudo nanoi sudo vim:

  • Jeśli konfiguracja edytora powoduje, że coś zostanie uruchomione, zostanie ono uruchomione jako root. W przypadku wyrafinowanych edytorów, takich jak vim, może to spowodować, że całkiem nietypowy kod będzie działał jako root. Jak wspomniano powyżej, mniej kodu uruchamianego jako root jest ogólnie dobry i jest to jeden z argumentów przeciwko uruchamianiu edytorów graficznych jako root.

    Jeśli twoja vimkonfiguracja ma wiele wtyczek - na przykład do przeprowadzania analizy statycznej kodu źródłowego podczas pisania - a root nie, mniej rzeczy działa jako root z niż . (Jeszcze mniej działa jako root z , ale twoje wtyczki nadal działają!) Jest to niezależne od tego, czy twój edytor jest graficzny.sudo -H vim filenamesudo vim filenameVISUAL=vim sudoedit filename

  • Jeśli twoja konfiguracja edytora jest zepsuta i nie pozwala ci na łatwą edycję plików, to naprawienie tego może być jeszcze bardziej kłopotliwe, ponieważ dotyczy również rootowania. To tylko kłopot, a nie trudny problem do rozwiązania.

  • Polecenia takie sudo vimmają trochę ten sam problem co polecenie (źle doradzone!) sudo gedit. Jeśli uruchomisz edytor taki vimjak root, ale bez resetowania $HOME(jak sudo -Hi sudo -izrobiłby to), i utworzy on pliki konfiguracyjne dla siebie , pliki konfiguracyjne będą znajdować się w twoim katalogu domowym, ale będą własnością root, a twoja konfiguracja może być nieco zepsuta kiedy później uruchomisz edytor jak ty.

    Cóż, to z pewnością brzmi jak ten problem! Powodem, dla którego jest to mniej ważna sprawa niż w przypadku aplikacji graficznych, jest to, że edytor zwykle wciąż się uruchamia, komunikaty o błędach są zwykle łatwiejsze do zrozumienia, zwykle łatwiej jest ustalić, na które konkretne pliki mają wpływ, a uszkodzenie zwykle ogranicza się do ten jeden program. (Programy graficzne używają plików konfiguracyjnych w większej liczbie miejsc). Ponadto, w przeciwieństwie do edytorów graficznych, użytkownicy, którzy tylko przypadkowo korzystają z edytora tekstu i nie zmieniają jego konfiguracji celowo, raczej nie doświadczają tego problemu.

Ponownie możesz użyć konfiguracji edytora własnego konta użytkownika, unikając problemów z uprawnieniami, używając sudoeditlub, z pulpitu, uruchamiając edytor normalnie, ale uzyskując dostęp do pliku przez admin://ścieżkę.

Na koniec zauważ, że wyżej wspomniane zachowanie, sudokiedy -Hlub kiedy -izostanie przekazane, jest faktycznie planowane do zmiany w przyszłej wersji Ubuntu (tak jak już wiele lat temu w większości systemów operacyjnych typu Unix, które używają sudo). Zachowanie zmieniło się już w Ubuntu 19.10 , która jest wersją rozwojową od tego pisania.

Eliah Kagan
źródło
2
Innym problemem sudo -Hjest to, że 1 raz na 100 lub 1000 zapomnisz, -Ha własność pliku może zostać przeniesiona z użytkownika na root $HOME.
WinEunuuchs2Unix
3

Aby odpowiedzieć na twoje pytanie: Ogólnie rzecz biorąc, używanie edytora GUI nie będzie problemem, geditponieważ jest bardzo powolny w przypadku dużych plików.

Ale dla programów GUI użyłbyś pkexeclub gksuzamiast sudo. Może być konieczne skonfigurowanie,pkexec zanim będzie działać.

pkexec gedit

lub dla starszych wersji Ubuntu (np. 16.04) możesz użyć:

gksu gedit

(Chociaż możesz spróbować lepszych edytorów GUI, np. geany;-))

pLumo
źródło
gksujest prawie odrzucony.
pomsky
pkexec......
Rinzwind
prawda prawda prawda ....
pLumo
3
To powinno pomóc (@eliah)
pomsky
1
Aby rozwinąć komentarz pomsky'ego. Jeśli otrzymasz odmowę połączenia, wyświetl błąd, musisz zamiast tego ustawić alias:pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY
mchid