Plik Sudoers, włącz NOPASSWD dla użytkownika, wszystkie polecenia


142

Przedmowa

Jest to dość złożone pytanie związane z plikiem Sudoers i ogólnie poleceniem sudo.

UWAGA: Wprowadziłem te zmiany na dedykowanym komputerze z systemem Ubuntu Desktop 13.04, którego używam wyłącznie do celów edukacyjnych. Rozumiem, że włączenie NOPASSWD sudo jest ogromnym zagrożeniem dla bezpieczeństwa.

Pytanie

Początkowo moją jedyną zmianą w pliku sudoers (/ etc / sudoers) była jedna linia, specyfikacja użytkownika, która powinna umożliwić „nicholsonjf” uruchamianie wszystkich poleceń za pomocą sudo bez konieczności wprowadzania hasła (patrz wiersz rozpoczynający się od „nicholsonjf” „):

# 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
nicholsonjf    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

Jednak to nie zadziałało, a za każdym razem, gdy uruchamiałem polecenie jako „nicholsonjf”, wciąż pojawiał się monit o podanie hasła. Mogłem uruchomić polecenia sudo jako „nicholsonjf” dopiero po usunięciu „nicholsonjf” z grup sudo i admin.

Czy ktoś może wyjaśnić, dlaczego to zadziałało?

Czy to dlatego, że użytkownik „nicholsonjf” odziedziczył prawa sudo z dwóch specyfikacji grup „admin” i „sudo” (patrz poniżej w pliku sudoers), które zastępowały specyfikację użytkownika „nicholsonjf”, ponieważ znajdowały się w dalszej części plik konfiguracyjny?


7
Uwaga: WSZYSTKIE = NOPASSWD: WSZYSTKIE musi być WSZYSTKIE = (WSZYSTKIE) NOPASSWD: WSZYSTKIE, w przeciwnym razie to nie działa ...
— André Verwijs


Odpowiedzi:


164

Dodana linia została zastąpiona. Od man sudoers:

Gdy wiele wpisów pasuje do użytkownika, są one stosowane w kolejności. W przypadku wielu dopasowań używana jest ostatnia zgodność (niekoniecznie najbardziej specyficzna).

W twoim przypadku nicholsonjfbył członkiem grupy, sudowięc dla niego ta linia miała zastosowanie:

%sudo   ALL=(ALL:ALL) ALL

Jeśli chcesz zastąpić wpisy, po /etc/sudoersprostu wstaw nowe wpisy po nich.

Nowy wpis powinien wyglądać

myuser ALL=(ALL) NOPASSWD: ALL dla jednego użytkownika lub

%sudo ALL=(ALL) NOPASSWD: ALL dla grupy.


6
Aby uzyskać kompletne rozwiązanie, chciałbym zobaczyć coś NOPASSWDw tej odpowiedzi ...
— Daniel Alder,

22
Myślę, że rozwiązaniem powinno być:%sudo ALL=(ALL) NOPASSWD:ALL
— Daniel Alder,

3
@DanielAlder: Wiersz specyfikacji z pytania nicholsonjf ALL=NOPASSWD: ALLjest poprawny. To było po prostu w niewłaściwym miejscu, jak wyjaśniłem w odpowiedzi. ------ RunasSpecyfikacja - w twoim przypadku (ALL)- jest opcjonalna. Jeśli pominiesz specyfikację, możesz uruchomić polecenia jako rooti nie możesz ich używać -uoraz -gopcji sudo.
— pabouk

Jest to gorsze zagrożenie bezpieczeństwa, ponieważ zapewnia wielu użytkownikom dostęp bez hasła. Jeśli to twój komputer osobisty, to nie jest znaczące - być może. Po prostu przeniosę linię osobistą, aby trwała.
— Mark Williams,

4
Dodatek zamiast korekty, jeśli używasz czegoś opartego na debian / ubuntu (może być ogólnie stosowane, nie widziałem go nigdzie indziej). Twoim absolutnym najlepszym rozwiązaniem jest dodanie niestandardowych poleceń do pliku w /etc/sudoers.d/ i pozostawienie sudoers zarządzany przez menedżera pakietów.
— Aquarion

119

W przypadku pojedynczego użytkownika dodaj ten wiersz na końcu sudoerspliku, używającsudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

Dla grupy

%supergroup  ALL=(ALL) NOPASSWD: ALL

8
Zanim przeczytałem tę odpowiedź, zrobiłem %sudo ALL=NOPASSWD: ALLto i działa. Czy jestem jedyną osobą, która uważa, że ​​formularz Extended Backus-Naur jest naprawdę trudny do zrozumienia?
— Vince

4
@Vince Po użyciu polecenia nie mogę sudobez hasła jako użytkownik bez uprawnień sudo. Np. sudo -u root -iDziała, ale sudo -u git -inie działa.
— NeverEndingQueue,

Jest to znacznie bardziej pomocna odpowiedź niż zaakceptowana, która, choć odpowiada na pytanie PO, prawdopodobnie nie jest tym, czego większość ludzi dociera do tej strony za pośrednictwem Google.
— Mahmoud Al-Qudsi

3

Aby nigdy nie poprosi bieżącego użytkownika o hasło, gdy dany użytkownik korzysta sudozrobić

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

spowoduje to utworzenie pliku o nazwie /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-passwordi będzie oznaczać, że użytkownik, który uruchomił to polecenie, nie będzie monitowany o podanie hasła podczas wykonywania sudopolecenia. Nadal będziesz monitowany o podanie hasła w innych kontekstach, na przykład podczas instalowania programów z aplikacji graficznej Ubuntu Software .

Zalety robienia tego w ten sposób w porównaniu z dodawaniem wiersza w echopoleceniu do /etc/sudoersużywania sudo visudo(jak sugerują inne odpowiedzi) to:

  1. /etc/sudoersjest czasem modyfikowany przez aktualizacje systemu, podczas gdy pliki w nim /etc/sudoers.dnie są
  2. sudo visudometoda jest podatna na błąd (jak wynika z tego samego pytania), podczas kopiowania / wklejania polecenia jest znacznie trudniejsze do bałagan

Zgodnie z sudo cat /etc/sudoers.d/READMEtą funkcją (wstawianie dodatkowych plików sudoer /etc/sudoers.d) jest domyślnie włączony od Debiana 1.7.2p1-1, który pojawił się pod koniec lat 90. (Ubuntu jest oparty na Debianie ).


(nie wahaj się edytować mojej odpowiedzi, jeśli możesz wymyślić lepszą nazwę pliku)
— Boris

0

Jak Vince nie wspomniano w komentarzu , można skorzystać z tej linii:

%sudo ALL=NOPASSWD: ALL

(Różni się to od linii pokazanych w tych odpowiedziach i rozwiązało to problem).


@Eliah to nie różni się tak bardzo od innych odpowiedzi. Wystarczy zastąpić symbol zastępczy supergroupw odpowiedzi Fedira słowem sudo. Co dalej, kolejny użytkownik grupy wheel? Lub jakakolwiek inna grupa, z której korzysta użytkownik?
— muru

1
@muru „Wszystko, co robi, to zastąpić symbol zastępczy supergroupw odpowiedzisudo Fedira słowem .” Co? Wymiana supergroupze sudow linii %supergroup ALL=(ALL) NOPASSWD:ALLplonów %sudo ALL=(ALL) NOPASSWD:ALL, nie %sudo ALL=NOPASSWD: ALL.
— Eliah Kagan

Co jest prawdopodobnie gorsze, ponieważ teraz NOPASSWD jest przeznaczony tylko dla użytkownika root jako użytkownik docelowy. Więc nawet nie odpowiada poprawnie na pytanie!
— muru

@muru Co to jest nawet zapewne jednak jest substytucja supergroupz sudo. To jest własna odpowiedź, a nie post dzięki lub kopia innej odpowiedzi. Ale tak, zgadzam się: jeśli nie zamierzają tego , dla większości użytkowników nie będzie to tak dobre, jak metody z innych odpowiedzi. (Ale, szczególnie biorąc pod uwagę pytanie, które brzmi „wszystkie polecenia”, a nie „wszyscy docelowi użytkownicy”, nie sądzę, że w efekcie nawet nie próbuje odpowiedzieć na zadane pytanie.)
— Eliah Kagan,

To działało dla mnie i chciałem podzielić się z innymi użytkownikami :) (w razie potrzeby usuń mój komentarz).
— E. Fortes
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.