Jak zmodyfikować nieprawidłowy plik „/ etc / sudoers”?

238

Jak edytować nieprawidłowy plik sudoers? Zgłasza poniższy błąd i nie pozwala mi ponownie edytować, aby go naprawić.

Oto co się dzieje:

$ sudo visudo
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting
Mniam mniam mniam
źródło
2
świetne pytanie, biorąc pod uwagę tę stronę, powoduje ten błąd help.ubuntu.com/community/RootSudoTimeout

Odpowiedzi:

361

W nowoczesnym systemie Ubuntu (i wielu innych dystrybucjach GNU / Linux) naprawienie uszkodzonego sudoerspliku jest w rzeczywistości dość łatwe i nie wymaga ponownego uruchamiania, korzystania z płyty CD na żywo ani fizycznego dostępu do komputera.

Aby to zrobić przez SSH, zaloguj się do komputera i uruchom polecenie pkexec visudo. Jeśli masz fizyczny dostęp do maszyny, SSH nie jest konieczne; wystarczy otworzyć okno terminala i uruchomić to pkexecpolecenie.

Zakładając, że ty (lub inny użytkownik) jesteś upoważniony do uruchamiania programów tak jak rootw PolicyKit, możesz wprowadzić hasło, a następnie uruchomi się ono visudojako rooti możesz je naprawić /etc/sudoers.

Jeśli chcesz edytować jeden z plików konfiguracyjnych w /etc/sudoers.d(który w tej sytuacji jest rzadki, ale możliwy), użyj .pkexec visudo -f /etc/sudoers.d/filename

Jeśli masz pokrewną sytuację, w której musisz wykonać dodatkowe polecenia administracyjne systemu jako root, aby rozwiązać problem (również rzadkie w tej sytuacji, ale powszechne w innych), możesz uruchomić interaktywną powłokę root pkexec bash. Mówiąc ogólnie, dowolne nie graficzne polecenie, które można uruchomić, sudomożna pkexeczamiast tego uruchomić .

(Jeśli w systemie jest więcej niż jedno konto użytkownika autoryzowane do uruchamiania programów, jak w rootprzypadku PolicyKit, wówczas w przypadku każdej z tych czynności zostaniesz poproszony o wybranie konta, którego chcesz użyć, zanim zostaniesz poproszony o podanie hasła.)


Jeśli to nie zadziała - na przykład, jeśli nie ma użytkowników uprawnionych do uruchamiania programów jako root za pośrednictwem PolicyKit - uruchom komputer z Live CD Ubuntu (takiego jak CD, którego prawdopodobnie użyłeś do instalacji Ubuntu) i podłącz system plików dla zainstalowany system. Możesz to zrobić, uruchamiając się, sudo parted -laby wyświetlić swoje partycje - prawdopodobnie jest tylko jedna partycja ext4, a to jest główny system plików.

Załóżmy, że główny system plików zainstalowanego systemu Ubuntu to / dev / sda1. Następnie możesz go zamontować sudo mount /dev/sda1 /mnt. Następnie możesz edytować plik sudoers zainstalowanego systemu za pomocą sudo nano -w /mnt/etc/sudoers. Lub, jeszcze lepiej, możesz go edytować za pomocą

sudo visudo -f /mnt/etc/sudoers

(co uniemożliwi zapisanie pliku sudoers z niepoprawną składnią).

Eliah Kagan
źródło
7
pkexec / usr / sbin / visudo pracował nad debian 7
marinara
10
ŚWIĘTA KROWA! Wielkie dzięki! Uratowałem mój bekon. Dodano plik zgodnie z sugestią do katalogu etc / sudoers.d / KORZYSTANIE Z REGULARNEGO EDYTORA TEKSTU (DON-T__D-O__T-HAT !!!). Utracono wszelką możliwość wykonywania podwyższonych uprawnień, W TYM, edytowania pliku naruszającego prawo. Pomogło to edytować plik. Dziwne, jednak najpierw musiałem edytować plik / etc / sudoers, potem znalazłem błędy w innym pliku i otworzyłem to dla mnie. NAWET WEIRDER dyrektywa w pliku / etc / sudoers 'inlcudedir /etc/sudoers.d' została skomentowana i nadal ją zawiera.
Dennis,
4
@Dennis Trochę myląco, #includedyrektywy w sudoersplikach są traktowane specjalnie; wiodące #nie powoduje interpretacji reszty linii jako komentarza. Jak man sudoersmówi: „Znak funta ('#') służy do wskazania komentarza (chyba że jest częścią dyrektywy #include lub chyba, że ​​...) Zobacz także visudo: #includedir sudoers.d (zarchiwizowane z lzone.de/ blog )
Eliah Kagan,
5
Mój użytkownik jest sudoer, ale dostałem ten błąd: Błąd wykonywania polecenia jako inny użytkownik: Brak autoryzacji
SuB
2
W Ubuntu 16.04 pkexec visudoprosi o hasło, które nie akceptuje poprawnego hasła. Zgłasza błąd „AWARIA AUTORYZACJI”.
Juha Untinen,
54

Zawsze używaj visudodo edycji pliku sudoers, nigdy nie edytuj go bezpośrednio. Zapobiegnie to zapisaniu go na dysku, chyba że zostanie zatwierdzone.

Cez
źródło
17
z perspektywy czasu jest 20/20
code_monk
4
To nie zapobiegnie katastrofie. Łatwo jest skutecznie się zaprzeczyć.
Joshua
Czy visudo może być używane przez osoby obsługujące skrypty? Jeśli tak to jak?
Lukas,
Nie mam zainstalowanego Visudo. Więc zrobiłem pkexec vim. Następnie wyświetla listę użytkowników i prosi o hasło. Kiedy podaję hasło, zgłasza błąd jako „Błąd wykonywania polecenia jako inny użytkownik: Brak autoryzacji”. Proszę o pomoc
Shyamkkhadka
24

Wpisz:

pkexec visudo

Następnie zmień ostatnią linię

#includedir /etc/sudoers

Do:

#includedir /etc/sudoers.d

To powinno rozwiązać twój problem.

Andrej Burcev
źródło
2
Zauważyłem, że usunięcie wiodącego #z #includedirpowoduje błędy składniowe, #jest to część dyrektywy, przynajmniej w Ubuntu 12.10.
SAFX
1
To tylko zaoszczędziło mi dużo bólu głowy. Dzięki tona :)
Addo Solutions
1
Nie mam zainstalowanego Visudo. Więc zrobiłem pkexec vim. Następnie wyświetla listę użytkowników i prosi o hasło. Kiedy podaję hasło, zgłasza błąd jako „Błąd wykonywania polecenia jako inny użytkownik: Brak autoryzacji”. Proszę o pomoc
Shyamkkhadka
11

jeśli ktokolwiek taki jak ja nie miał zainstalowanego pkexec lub nie był w stanie uruchomić vi, visudo, nano lub innego edytora w celu zmiany pliku sudoers, możesz być pewien tego procesu .. Zostałem zapisany:

  • restart
  • przytrzymaj klawisz Shift podczas uruchamiania, aby mieć opcję trybu odzyskiwania (wprowadź)
  • wpisz wiersz poleceń jako root (druga ostatnia opcja w moim menu grub)
  • zamontuj ponownie urządzenie rozruchowe dla rw i zastosuj exec bezpośrednio dla użytkownika i edytuj plik

    mount -n -o remount,rw /
    chmod u+x /etc/sudoers
    nano /etc/sudoers
    

napraw ten błąd i bądź szczęśliwy :)

Kresimir Pendic
źródło
Chociaż rozwiązanie pkexec sugerowane przez @ eliah-kagan wydaje się łatwiejsze, to jest ono bardziej uniwersalne. Na moim komputerze okazało się, że nie ma zainstalowanego pkexec i oczywiście nie mogłem go zainstalować, ponieważ sudo apt-get install pkexec jakoś nie działało.
running.t
Również w ramach tego podejścia użyłbym visudozamiast tego nano /etc/sudoers.
pa4080,
7

Jeśli pomieszałeś swój sudoersplik, musisz:

  • Uruchom ponownie w trybie odzyskiwania (naciśnij klawisz Escape podczas uruchamiania, wybierz opcję trybu odzyskiwania na ekranie gruba)
  • Wybierz opcję „Włącz sieć” (jeśli nie, system plików zostanie zamontowany jako tylko do odczytu. Kto wiedział)
  • Wybierz opcję „Drop to root shell”
  • uruchom visudo, napraw swój plik
  • Uruchom ponownie z normalną opcją grub

źródło: - http://mario.net.au/content/recover-etcsudoers-ubuntu-1204

smuga
źródło
Cześć, czy usuwa iptables, pliki istniejącego systemu?
Shyamkkhadka
6

Nie ma nic złego #include sudoer.d usunięcie #include sudoer.d nie zrobi żadnej różnicy.

Ale upewnij się, że nie masz żadnych błędów składniowych. Miałem ten sam problem, ale spędziłem godziny na naprawie i właśnie zorientowałem się, że to błędy składniowe. Zapoznaj się z instrukcją i popraw je.

Załóżmy na przykład, że Twoja nazwa użytkownika to: dolly Użyłem następujących, co jest nieprawidłowe

 dolly ALL = (ALL) ALL NO PASSWD: ALL

poprawna składnia to

dolly ALL = (ALL) ALL //give permission to everything, not good

lub

dolly ALL=(ALL) NOPASSWD:/usr/bin/thurderbird //good, give specific permission

mam nadzieję że to pomoże

Thusitha Nuwan
źródło
Lepszym podejściem niż upewnienie się, że nie masz błędów składniowych, jest zawsze użycie visudopodczas edycji tych plików, co zapewnia, że ​​nie będziesz mieć błędów składniowych, zanim zmodyfikuje plik. visudosłuży nie tylko do edycji - /etc/sudoersbędzie także tworzyć i edytować pliki /etc/sudoers.d. Będzie także działał z dowolnym edytorem tekstu. Szczegółowe informacje można znaleźć na stronie podręcznika .
Eliah Kagan
Jeśli chodzi o udzielanie określonych uprawnień, należy pamiętać, że jest to przydatne tylko w przypadku bardzo prostych poleceń / aplikacji, ponieważ każda wystarczająco złożona aplikacja (w tym thunderbird, która i tak nigdy nie powinna być uruchamiana jako root) skutecznie zapewni użytkownikowi pełny dostęp do systemu, gdy zostanie uruchomiona jako root. Nawet pozornie prosta funkcjonalność otwiera drzwi do pełnego dostępu do katalogu głównego. Na przykład użytkownik, który może uruchomić program, który może zapisać plik w dowolnej lokalizacji, ponieważ root może uzyskać pełny dostęp do roota (może zainstalować własny /etc/sudoerslub jeśli ograniczenia składni temu uniemożliwiają, może zainstalować własny /etc/crontab).
Eliah Kagan
3

uruchom tryb odzyskiwania, a następnie wpisz ten

chown -R root: root /etc/sudoers.d
chmod u = rwx, g = rx, o = rx /etc/sudoers.d/
chmod u = r, g = r, o = /etc/sudoers.d/*

tylko grupa główna i użytkownik root powinni mieć uprawnienia do odczytu

Kosaidpo
źródło
3

Możesz także zalogować się jako root na ttykonsoli za pomocą Ctrl+ Fn( Fnod 1 do 6) i uruchomić visudo.

magisterludi
źródło
2

Możesz edytować swój wpis rozruchowy również w Grub.

Po prostu uruchom ponownie komputer i poczekaj, aż grub się wyświetli. Następnie naciśnij „e” we wpisie „Ubuntu”, aby go edytować.

Poszukaj linii z „linux =” lub „kernel =” i po prostu dodaj „single” na końcu tej linii.

Następnie naciśnij klawisz F10, aby uruchomić ten tymczasowo zmodyfikowany wpis rozruchu. To da ci powłokę (bez GUI) z prawami roota i możesz edytować plik sudoers za pomocą s.th. jak nano / etc / sudoers z powrotem do poprzedniego stanu.

Następnie uruchom ponownie komputer i gotowe.

Markus Ressel
źródło
2
pkexec visudo

następnie cofnij swoje błędy

Bhavesh Gabani
źródło
1
nie jest konieczne używanie pkexec
Braiam
@Braiam visudomusi być uruchomiony jako root. Jeśli sudonie działa, pkexecczasami działa. Jest to objęte moją wcześniejszą odpowiedzią ... ale jest to poprawna odpowiedź visudosama w sobie (gdy nie jest uruchamiana jako root) nie będzie działać, i mogą mieć wartość w poprawnych, krótkich odpowiedziach, nawet jeśli ich rekomendacje znacznie pokrywają się z innymi odpowiedziami. Oczywiście, jeśli przejdzie się w tryb odzyskiwania, jest to powłoka root, a następnie ani sudonie visudojest to konieczne dla poleceń takich jak pkexec. Może to masz na myśli ...
Eliah Kagan
0

W Ubuntu 16.04 działającym na VirtualBox (nie powinno to robić różnicy) powyższe metody nie działały dla mnie (nieprawidłowy wiersz na końcu pliku). Co zadziałało to:

  1. Uruchom ponownie VirtualBox
  2. Pozwól, aby uruchomił się normalnie, dopóki nie poprosi o nazwę użytkownika i hasło w konsoli
  3. Zaloguj się normalnie przy użyciu swojej nazwy użytkownika
  4. Następnie, gdy skończysz w konsoli (pod warunkiem, że twoje urządzenie nie uruchamia się w GUI), po prostu podaj polecenie, su -a następnie podaj hasło do własnej nazwy użytkownika.
  5. Powinien teraz zakończyć się root@ubuntu-xenial:~#natychmiast, jeśli /etc/sudoersnie jest zbyt uszkodzony lub pusty. Nie jestem pewien, co by się stało w takim przypadku.
  6. Następnie możesz po prostu uruchomić visudoi naprawić plik.
  7. Następnie Ctrl + Xpojawi się monit o zapisanie zmodyfikowanego bufora. Naciśnij YiEnter
  8. Uruchom ponownie pudełko i powinno już działać.

Jeśli /etc/sudoerscoś jest puste lub brakuje czegoś i możesz to edytować, oto moja zawartość:

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

root ALL=(ALL:ALL) ALL

%admin ALL=(ALL) ALL

%sudo ALL=(ALL:ALL) ALL
Juha Untinen
źródło
Krok 4 nie ma sensu, działa tylko wtedy, gdy hasło roota jest takie samo jak zwykły użytkownik.
Alfred
Co jest bardzo powszechne w lokalnej maszynie wirtualnej.
Juha Untinen
0

Dobra praktyka: zapasowe okno terminala i uruchom je sudo su. Na innym termianlu uruchom visudo lub sudo vim / etc / sudoers. Jeśli coś pójdzie nie tak, wróć do terminalu pierwszego i napraw plik. Możesz zapytać, dlaczego nie uruchomić sudo suwcześniej visudow jednym terminalu? To również działa, ale wiąże się z większym ryzykiem zamknięcia terminalu, zanim się zorientujesz.

biocyberman
źródło
-1

Istnieje prostsze rozwiązanie. Bez ponownego uruchamiania, trybu odzyskiwania lub pkgexec( pkgexecnie działał i nie mam pojęcia, dlaczego lub jak powinienem go używać), po prostu wykonaj:

su root # switch to root user, without using sudo (which is broken at this point)
your_favorite_editor /etc/sudoers # e.g. nano

A potem po prostu napraw błąd składniowy!

rien333
źródło
O co chodzi z tą oceną? Działa idealnie dla mnie.
rien333