Dodanie NOPASSWD do / etc / sudoers nie działa

45

14.04 tutaj. SSHed do mojego komputera, dodałem następujący wiersz do /etc/sudoers:

myuser   ALL=NOPASSWD: ALL

A potem próbował uruchomić:

sudo mkdir /etc/blah

... i jestem proszony o podanie hasła. Dlaczego?!?

Ja nie chce zostać poproszony o hasło podczas wykonywania tej operacji. Uwaga: po uruchomieniu ls -ltr /otrzymuję:

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

Ale nie sądzę, żeby to miało znaczenie, ponieważ ustawiłem się jako „sudoer”, prawda?

Co ważniejsze, co muszę zrobić, aby móc działać sudo mkdir /etc/blahjako mój bieżący użytkownik ( myuser) bez pytania o hasło?

Oto cały mój /etc/sudoersplik:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root      ALL=(ALL:ALL) ALL
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
Zac
źródło
Czy możesz opublikować plik sudoers? Dyrektywa ma rację, ale nie mogła działać z uwagi na kontekst.
Lety
Dzięki @Letizia - proszę zobaczyć moją aktualizację, coś cię wyskoczy?
Zac
Chyba powinienem również pamiętać, że nie nie używać visudojednak ręczne edytowanie tego pliku nie kopiuj-n-wklej pracy, Wpisałem wszystko jak jest. Ale czy visudoedytuje inne pliki oprócz tego? To może być to ...
Zac
Sprawdź także wszystkie pliki /etc/sudoers.d/, mogą być nadrzędne w stosunku do/etc/sudoers
tokland

Odpowiedzi:

68

To sekwencja / kolejność reguł spowodowała to. Ostatnia reguła ma pierwszeństwo.

Aby rozwiązać problem, po prostu przesuń linie,

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

z sudoerspliku do

sudo visudo -f /etc/sudoers.d/myOverrides 

Jest to lepsze podejście niż edytowanie sudoerspliku za pomocą zwykłego edytora tekstowego. Jeśli przypadkowo wstawisz błędy do pliku, uruchomienie może być niemożliwe sudo. Zawsze używaj visudo, aby sprawdzić składnię i otrzymywać ostrzeżenia o błędach!

Twoja dyrektywa nie działa, ponieważ jest nadpisana przez:

%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL

Jeśli uruchomisz groupspolecenie, zobaczysz, że użytkownik należy do tych grup.

Lety
źródło
Nazwa pliku powinna być zgodna z konwencją nn-somename, na przykład/etc/sudoers.d/20-myoverrides
shimatai
Tak, oczywiście, jeśli masz więcej niż jeden plik, są one parsowane w uporządkowanej kolejności leksykalnej, więc dobrą praktyką jest użycie liczby i łatwo będzie znać tę kolejność.
Lety
21

Jeśli mój użytkownik jest w grupie sudo , to kolejność wierszy nie zapewni dostępu bez hasła (jak zauważył Florian Diesch), ponieważ trzecia linia zastępuje pierwszą.

myuser    ALL=(www-data:www-data) NOPASSWD: ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

Więc po prostu wstaw linie w tej kolejności:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

W ramach konta myuser użyj, sudo -laby sprawdzić, jakie uprawnienia ma mój użytkownik .

Kostyantyn
źródło
10

Jeśli dla użytkownika pasuje wiele wpisów, użyty zostanie ostatni . Więc jeśli fizzbuzzi chadminsą członkami grup, w adminprzeciwnym razie sudobędą nadal proszeni o hasło.

Umieść dwie linie na końcu sudoerspliku za #includedirlinią.

Florian Diesch
źródło
Rzeczywiście, więc kombinacja @ Letizia i twoich odpowiedzi jest najlepsza, ponieważ domyślnie #includedirjest to ostatni wpis sudoers.
muru
0

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. Trzeba przyznać NIGDY NOPASSWDna ALLpolecenia.

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

Wstaw swoje pozwolenie na udzielenie linii: myuser ALL= NOPASSWD: /bin/mkdir

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 masz DOWOLNE pliki, które 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 jest drukowany AaBbCcitp., A ABCnastępnie abcokreśl najlepszy najlepszy prefiks „ostatniej” litery.

dragon788
źródło