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.
Odpowiedzi:
/etc/sudoers
Plik 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: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/hosts
poprawności, i dlatego się nie udaje, jeśli nie jest poprawne.Można argumentować, że
sudo
nie trzeba zawracać głowy szukaniem nazwy, jeśli część hosta jest ustawionaALL=
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.
źródło
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:
Umieść ten wiersz w
/etc/sudoers
plikuźródło
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).
źródło