Dlaczego opcja sudoers NOPASSWD nie działa?

75

Mam linię NOPASSWD w / etc / sudoers (edytowaną za pomocą visudo)

gatoatigrado    ALL=(ALL) NOPASSWD: /bin/set-slow-cpufreq

Jednak wynikiem jest

gatoatigrado@coral:~> sudo -n /bin/set-slow-cpufreq
sudo: sorry, a password is required to run sudo

Tego rodzaju polecenie działa na maszynie OpenSuSE, ale nie na Ubuntu 11.10. Co ja robię źle?

Uwaga : Nie mogę znaleźć żadnych odpowiednich komunikatów w dzienniku systemowym, np tail -f /var/log/syslog. Poprzez .

edytować

Oto / etc / sudoers.

Defaults    env_reset

# things I've tried copying from an opensuse machine
Defaults always_set_home
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS XDG_SESSION_COOKIE"

root    ALL=(ALL:ALL) ALL
gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
gatoatigrado
źródło
2
Czy możesz pokazać wszystko sudoers, kolejność reguł nie jest bez znaczenia.
enzotib

Odpowiedzi:

117

Powinieneś umieścić tę linię za linią z regułą dla sudogrupy, ponieważ, jak sudoersmówi strona man:

   When multiple entries match for a user, they are applied in order.
   Where there are multiple matches, the last match is used (which is not
   necessarily the most specific match).
enzotib
źródło
5
jako dodatkowa uwaga dotyczy to również użytkowników w wielu grupach: np. użytkownik jest w grupie admin i group sudo, jeśli reguła sudo jest po adminie, to reguła sudo zastępuje regułę admin dla użytkownika w obu grupach.
Populus
2
Dzięki! Dodałem moją linię na końcu /etc/sudoersi teraz działa. Pełne wyjaśnienie dla osób zainteresowanych: techglimpse.com/ubuntu-sudoers-nopasswd-option-not-working
elimisteve
4

Idealnie, jeśli dostosowujesz, które polecenia mogą być uruchamiane sudo, powinieneś wprowadzić te zmiany w osobnym pliku, /etc/sudoers.d/zamiast bezpośrednio edytować sudoersplik. Powinieneś również zawsze używać visudodo edycji plików.

Przykład: sudo visudo -f /etc/sudoers.d/slowcpu

Wstaw swoje pozwolenie na udzielenie linii: gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq

Następnie zapisz i wyjdź, a visudoostrzeże Cię, jeśli wystąpią jakiekolwiek błędy składniowe.

Możesz uruchomić, sudo -laby zobaczyć uprawnienia przyznane przez użytkownika, jeśli którekolwiek z NOPASSWDpoleceń specyficznych dla użytkownika pojawi się PRZED jakimkolwiek %groupyouarein ALL=(ALL) ALLpoleceniem na wyjściu, zostaniesz poproszony o podanie hasła.

Jeśli odkryjesz, że tworzysz wiele takich plików sudoers.d, być może będziesz chciał utworzyć je o nazwach poszczególnych użytkowników, aby były łatwiejsze do wizualizacji. Należy pamiętać, że kolejność NAZW PLIKU i ZASAD w pliku jest bardzo ważna, OSTATNIE załadowane wygrywa, niezależnie od tego, czy jest WIĘCEJ, czy MNIEJ dopuszczające niż poprzednie wpisy.

Możesz kontrolować porządkowanie nazw plików za pomocą prefiksu 00-99 lub aa / bb / cc, ale pamiętaj również, że jeśli DOWOLNE pliki nie mają prefiksu numerycznego, zostaną załadowane po plikach numerowanych, zastępując ustawienia. Wynika to z faktu, że w zależności od ustawień języka „sortowanie leksykalne” powłoka używa najpierw liczb sortowania, a następnie może przeplatać wielkie i małe litery podczas sortowania w porządku rosnącym.

Spróbuj uruchomić printf '%s\n' {{0..99},{A-Z},{a-z}} | sorti printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sortsprawdź, czy bieżący język drukuje AaBbCcitp., A ABCnastępnie abcokreśl najlepszy najlepszy „przedostatni” prefiks.

dragon788
źródło
Zgadzam się z tym. Część logiki edytowania pliku / etc / sudoers wydawała się sprzeczna z intuicją - nie mogłem zmusić% wheel ALL = (ALL) NOPASSWD: ALL do działania w sposób, w jaki został napisany w sudoers, dopóki nie przeczytałem postu, w którym ktoś powiedział #includedir Linia /etc/sudoers.d musiała znajdować się przed innymi liniami, takimi jak% SUDO i% WHEEL. Kiedy umieściłem katalog #include nad innymi uprawnieniami grupy, zaczęły działać. Więc wtedy stworzyłem pliki dla każdej grupy w /etc/sudoers.d/ ponumerowane w tej samej kolejności, w jakiej były w pliku sudoers, ale root ALL = (ALL) ALL wciąż musiał być sudoerami poniżej linii #includedir. Dziwne.
AveryFreeman
Właściwie uważam, że incir powinien pozostać na końcu sudoers. To, co prawdopodobnie widziałeś, to jeden z innych plików sudoers. D cofał twoją zmianę. Być może w głównym pliku znajdował się wiersz, który ograniczał grupę kół. Należy pamiętać, że sudoers są przetwarzane tam, gdzie wygrywa ostatnia reguła stosowana do polecenia lub grupy, więc bycie bardziej szczegółowym pomaga, ale jeśli ogólne DOWOLNE polecenie pojawi się na końcu i nie ma NOPASSWD, zastąpi poprzednie wyjątki. Dlatego powinieneś mieć swoje reguły w osobnych plikach, aby były one przetwarzane później.
dragon788
Nie sądzę, to była nowa instalacja arch. Wszystko, co zrobiłem, to odkomentowanie tej linii. Ale to zdecydowanie dobra rzecz do sprawdzenia, dzięki.
AveryFreeman
Niektóre systemy faktycznie nie używają koła i zamiast tego używają grupy o nazwie sudo lub adm lub admin. Nie pamiętam zachowania Arch, ale możesz biegać idi zobaczyć, do których grup należysz.
dragon788
Łuk używa koła.
AveryFreeman
4

Po prostu na to wpadłem.

Moja sytuacja polega na tym, że konfiguruję zdalny system, który będzie działał bez głowy. Włączyłem pełne szyfrowanie dysku (w przeciwnym razie osoba atakująca z dostępem fizycznym może zrobić wszystko, co chce) Chcę autoryzować tylko za pomocą klucza pub (rozłączę hasło, aby schemat „mieć coś, wiem coś” będzie hasłem chroniona para kluczy - logowanie do roota jest oczywiście całkowicie wyłączone)

Instalator Ubuntu pyta o administratora innego niż root, który zostanie dodany do grupy sudo. Następnie ręcznie dodałem się do sudoerspliku, używając sudo visudo:

my_username ALL=(ALL:ALL) NOPASSWD:ALL

UWAGA, jeśli używasz nopasswd na swoim laptopie, zawsze musisz zablokować komputer, gdy odchodzisz, w przeciwnym razie zwykły napastnik może wiele kompromisów, gdy wstajesz, aby wstawić śmietankę do kawy

Nadal musiałem uwierzytelnić się hasłem.

Odpowiedź enzotibu jest kluczem do tego, co się dzieje. Grupa sudo pojawia się w sudoers po wpisie mojej nazwy użytkownika.

Zamiast przenosić mój wpis poniżej linii sudo, po prostu usunąłem wiersz, który wcześniej dodałem, a następnie dodałem NOPASSWDdo wpisu dla%sudo

To wydaje się działać. Ponownie używaj nopasswd tylko wtedy, gdy jest to naprawdę potrzebne (w moim przypadku było to dokładnie to, czego potrzebowałem, dla większości użytkowników wymagających hasła do działania sudo)

Dodatkowe OSTRZEŻENIE: Zawsze edytuj sudoers za pomocą visudo. (sudo visudo) Ponadto, mając otwarte okno otwarte dla użytkownika root, możesz odzyskać wszelkie błędy, które możesz popełnić podczas zmiany pliku sudoers.

Jorfus
źródło
Nigdy nie jest dobrym pomysłem włączenie NOPASSWD przeciwko komendom / wszystkim, oznacza to, że każdy, kto dostanie się do twojego systemu i uda się wprowadzić użytkownika do grupy sudo, będzie mógł zrobić WSZYSTKO ZŁEGO do twojego systemu BARDZO szybko. Mogę to łatwo zrobić za pomocą zaledwie kilku minut dostępu za pomocą LiveCD lub przez nakłonienie użytkownika do uruchomienia polecenia cmd, sudoktóre używa własnych uprawnień, aby dodać innego użytkownika do grupy sudo oprócz uruchomienia żądanego polecenia.
dragon788
2
Nie składaj takich oświadczeń ogólnych. W systemie bezgłowym nie jest pożądane, aby w ogóle ustawiać hasło logowania (zamiast tego polegać na parach kluczy) Włączyłem pełne szyfrowanie dysku, więc powodzenia z tym live cd. (który, nawiasem mówiąc, pozwoliłby ci robić różne fajne rzeczy w niezaszyfrowanym systemie niezależnie od pliku sudoers) Ponadto nie możesz pisać w żadnej z lokalizacji w mojej PATH i nie daje ci powłoki na początek chyba że ufam, że nie spróbujesz obalić systemu. Twoje obawy dotyczące bezpieczeństwa nie są nieważne, są po prostu nieaktualne i nie są tak powszechnie stosowane, jak sugerujesz.
jorfus
Dla tych, którzy nie mają dogłębnego zrozumienia bezpieczeństwa, takich jak Ty, ten rodzaj rekomendacji jest prawdopodobnie lepszy niż alternatywa, ale zgadzam się, że nie jest idealny.
dragon788
@ dragon788 Prawda, może obaj możemy edytować nasze odpowiedzi, aby pomóc użytkownikom na wszystkich poziomach zrobić krok w kierunku lepszego bezpieczeństwa. Dodam ostrzeżenie, aby włączyć pełne szyfrowanie dysku, aby zapobiec kompromisowi, gdy atakujący ma fizyczny dostęp, i notatkę, że jeśli użytkownik laptopa zapomni publicznie zablokować swój komputer, sudo nopasswd może doprowadzić do szybkiego kompromisu. (Chociaż proponuję ustawienie pięciominutowej blokady i szybki klucz blokady ekranu może faktycznie prowadzić do lepszego bezpieczeństwa.)
jorfus
Doskonała aktualizacja, moja odpowiedź nie zawiera żadnych silnych rekomendacji innych niż te komentarze tutaj, i jak na ironię w pracy, gdzie używam pełnego szyfrowania dysku, skończyłem włączanie NOPASSWD, ponieważ mam bardzo bezpieczne hasło, które staje się kłopotliwe do wpisania wielokrotnie i używam xautolock do blokowania mojego komputera po krótkim czasie bezczynności.
dragon788
0

W systemie zdalnym zrezygnuj z szyfrowania, ale pozwól, aby wszystko było własnością roota jak w grupie „Administratorów” - to nie jest 0!
Możesz zmienić #sudo -g Administrators te, które potrzebują pełnego dostępu - nie w sudo pliku, ale w .loginprofilu. Każdy standardowy skrypt może teraz mieć dostęp do pilota jako „root” i możesz chronić pliki, które muszą być chronione.
Inną przydatną „grupą” jest „Sandbox” z katalogiem logowania w pamięci podręcznej przeglądarki i może czytać to swobodnie i nic więcej. Użyj pierwszej litery dużej litery.

Knut H.
źródło