polecenie sudo próbuje wyszukać nazwę hosta

15

Ostatnio zmieniłem plik sudoers i nazwę hosta poprzez / etc / hostname. Po zmianie tych plików moje polecenie sudo zajmuje dużo czasu. Mówi także, że sudo nie może rozwiązać hosta kaagini (nazwa hosta mojego komputera).

Dlaczego sudo musi znać nazwę hosta, aby zezwolić na coś?

Mój plik sudoers ma polecenie „Defaults env_reset”. Widziałem kilka podobnych pytań, ale kontekst nie jest tutaj zdalnym logowaniem. Błąd pojawia się na lokalnym hoście.

Początkowe wyszukanie problemu mówi, że plik / etc / hosts musi mieć rzeczywistą nazwę hosta dla 127.0.0.1. To naprawiło mój problem. Ale moje aktualne pytanie brzmi: dlaczego potrzebujemy tego do sudo? Jeśli sudo działa niezależnie od miejsca logowania.

prathmesh.kallurkar
źródło
@OliverSalzburg Poprawnie sformułowałem pytanie. Daj mi znać, jeśli coś jest nie tak
prathmesh.kallurkar

Odpowiedzi:

16

/etc/sudoersPlik został zaprojektowany, aby móc być rozpowszechniane wśród wielu serwerach. Aby to osiągnąć, każde uprawnienie w pliku ma część hosta.

Zazwyczaj jest to ustawione, ALL=co oznacza, że ​​uprawnienie jest ważne dla dowolnego serwera, jednak można je ustawić dla określonych hostów:

%sudo    kaagini=(ALL) ALL

Aby sudo wiedziała, dlaczego należy zastosować tę regułę, musi ona sprawdzić host, na którym działa. Używa wywołania, które opiera się na /etc/hostspoprawności, i dlatego się nie udaje, jeśli nie jest poprawne.

Można argumentować, że sudonie trzeba zawracać głowy szukaniem nazwy, jeśli część hosta jest ustawiona ALL=na wszystkie uprawnienia, ale po prostu nie działa w ten sposób - wydaje się, że działa tam, gdzie jest uruchomiona przed przetworzeniem reguł .

Jest to naprawdę łatwe w utrzymaniu, ponieważ sudo czyta tylko / etc / sudoers, aby zobaczyć, co użytkownik może zrobić na bieżącym komputerze. Ale jako administrator posiadający 100 serwerów może to wymagać 100 różnych plików / etc / sudoers do utrzymania. Ponieważ sudoers ma część hosta w uprawnieniach, możesz utrzymywać pojedynczy plik sudoers i rozpowszechniać go na wszystkich komputerach, zachowując jednocześnie szczegółowość co do tego, co użytkownicy mogą zrobić na każdym komputerze.

Paweł
źródło
Dziękuję za odpowiedź. Czy możesz przyjść ponownie do rozproszonego pliku sudoers? Widzisz, mam system operacyjny uruchomiony na komputerze A. Czy plik uprawnień (/ etc / sudoers) dla tego systemu operacyjnego powinien być przechowywany na innych komputerach. Lub twoja odpowiedź oznacza, że ​​polecenie sudo może powiedzieć coś takiego jak użytkownik John może sudo z komputera A, ale nie z komputera B?
prathmesh.kallurkar
Naprawdę ułatwia konserwację. sudo odczytuje tylko / etc / sudoers, aby zobaczyć, co użytkownik może zrobić na bieżącym komputerze. Ale jako administrator posiadający 100 serwerów może to wymagać 100 różnych plików / etc / sudoers do utrzymania. Ponieważ sudoers ma część hosta w uprawnieniach, możesz utrzymywać pojedynczy plik sudoers i rozpowszechniać go na wszystkich komputerach, a mimo to mieć szczegółowość co do tego, co użytkownicy mogą zrobić na każdym komputerze.
Paul
jeszcze jedno pytanie ... czy administrator serwera musi scpować nowy plik sudoers za każdym razem, gdy nastąpi zmiana w głównym pliku sudoers, czy też sudo zapewnia sposób na utrzymanie pliku sudoers przez sieć?
prathmesh.kallurkar
@ prathmesh.kallurkar Nie, nie ma wbudowanej metody dystrybucji, ale jest to linux, więc jest to normalne. Użyjesz rsync, scp lub innego narzędzia, aby wykonać tę część.
Paul
1
Uważam, że to błąd (jeśli istnieją WSZYSTKIE reguły, wtedy sudo nie musi znać swojej nazwy hosta), dlatego
złożyłem
1

Dzięki połączonemu raportowi o błędzie złożonemu przez Matthiasa Urlichsa w innym komentarzu następujące polecenie rozwiązało problem:

Defaults !fqdn

Umieść ten wiersz w /etc/sudoerspliku

kjones
źródło
-3

Puppet to oprogramowanie do zarządzania konfiguracją, które jest w stanie automatycznie konfigurować flotę serwerów, odczytując pliki Puppet Manifests. Taki plik może zawierać definicję pliku / etc / sudoers, który można następnie wypchnąć do wszystkich „marionetkowych” agentów z twojego „marionetkowego” mistrza. Wtedy wszystkie hosty otrzymają tę samą kopię pliku / etc / sudoers, która może (i powinna) zawierać definicje HOST, więc możesz przyznać niektórym użytkownikom niektóre polecenia na niektórych hostach (ale nie na innych).

Felipe Alvarez
źródło
3
Czy potrafisz rozszerzyć swoją odpowiedź, aby wyjaśnić, czym jest marionetka, gdzie ją znajdziesz i jak ją wykorzystać do rozwiązania problemu? Z kolejki recenzji
fixer1234,
2
Przeczytaj Jak polecić oprogramowanie, aby uzyskać porady dotyczące tego, jak powinieneś polecać oprogramowanie. Powinieneś podać przynajmniej link, dodatkowe informacje o samym oprogramowaniu oraz o tym, jak można go użyć do rozwiązania problemu w pytaniu.
DavidPostill