Jak uruchomić polecenie sudo bez hasła?

235

W jaki sposób ubuntuużytkownik obrazów AWS dla Ubuntu Server 12.04 ma hasło bez hasła sudodla wszystkich poleceń, gdy nie ma w nim konfiguracji /etc/sudoers?

Używam serwera Ubuntu 12.04 na Amazon. Chcę dodać nowego użytkownika, który zachowuje się tak samo jak domyślny użytkownik Ubuntu. W szczególności chcę sudonowego hasła bez hasła .

Dodałem więc nowego użytkownika i przeszedłem do edycji /etc/sudoers(oczywiście używając Visudo). Po przeczytaniu tego pliku wyglądało na to, że domyślny ubuntuużytkownik zaczyna uzyskiwać hasło sudobez członkostwa w admingrupie. Dodałem do tego mojego nowego użytkownika. Co nie działało. Potem próbowałem dodać NOPASSWDdyrektywę do sudoers. Co też nie działało.

W każdym razie teraz jestem po prostu ciekawa. W jaki sposób ubuntuużytkownik otrzymuje uprawnienia bez hasła, jeśli nie są zdefiniowane w /etc/sudoers. Jaki jest mechanizm, który na to pozwala?

Aychedee
źródło
Powiązane: Wykonaj sudo bez hasła?
Eliah Kagan

Odpowiedzi:

332

Ok, znalazłem odpowiedź, więc równie dobrze mogę ją tutaj umieścić dla kompletności. Na końcu /etc/sudoersjest to, co moim zdaniem było tylko komentarzem:

#includedir /etc/sudoers.d

Jednak tak naprawdę obejmuje to zawartość tego katalogu. Wewnątrz którego znajduje się plik /etc/sudoers.d/90-cloudimg-ubuntu. Który ma oczekiwaną zawartość

# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

Właśnie tam mieszka konfiguracja sudo dla domyślnego użytkownika ubuntu.

Powinieneś edytować ten plik za pomocą visudo. Następujące polecenie pozwoli ci edytować poprawny plik za pomocą visudo.

sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

I dodaj linię taką jak:

aychedee ALL=(ALL) NOPASSWD:ALL

Na końcu.

Aychedee
źródło
4
Jestem prawie pewien, że musiałem dokonać pełnego restartu.
aychedee
2
nowe zasady sudo będą stosowane dla każdego nowego zalogowanego użytkownika - więc musisz się przynajmniej zalogować ponownie
bluszcz
32
„sudo service sudo restart” działa :)
Laice
4
W późniejszych wersjach (na przykład 14.04) dołączony plik to /etc/sudoers.d/90-cloud-init-users(tak do edycji ... sudo visudo -f /etc/sudoers.d/90-cloud-init-users). Chociaż tworzenie dodatkowych plików byłoby łatwiejsze niż edytowanie wygenerowanego. Zauważ, że pliki zawierająca .lub kończące się ~będzie nie zostać uwzględnione.
Molomby
2
@ Phil_1984_ Najprawdopodobniej został dodany jako komentarz, aby umożliwić zgodność z innymi (standardowymi?) Wersjami sudo, które nie zezwalają na dołączanie, ale nie byłyby zaskoczone dziwnym komentarzem. (Normy są trudne! ;-)
jpaugh
94

Odkryłem, że najłatwiejszą rzeczą do zrobienia, aby łatwo odtworzyć to zachowanie na wielu serwerach, było:

sudo visudo

Zmień tę linię:

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) ALL

do tej linii:

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL

I przenieś go poniżej tej linii:

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

powinieneś teraz mieć to:

# 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

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

# Members of the admin group may gain root privileges
%admin  ALL=(ALL) NOPASSWD:ALL

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

#includedir /etc/sudoers.d

następnie dla każdego użytkownika, który potrzebuje dostępu sudo Z hasłem :

sudo adduser <user> sudo

i dla każdego użytkownika, który potrzebuje dostępu sudo BEZ hasła :

sudo adduser <user> admin

i na koniec uruchom to:

sudo service sudo restart

I to wszystko!

Edycja: Może być konieczne dodanie grupy administracyjnej, ponieważ nie sądzę, że istnieje ona domyślnie.

sudo groupadd admin

Możesz również dodać domyślnego ubuntuużytkownika AWS do admingrupy za pomocą tego polecenia:

sudo usermod ubuntu -g admin

Uwaga: Jak wspomniano w @hata , może być konieczne użycie admjako nazwy grupy administracyjnej, w zależności od używanej wersji Ubuntu.

jiminikiz
źródło
3
Uwaga do siebie: Konwencją jest przenoszenie mniej restrykcyjnych uprawnień niżej na stosie. Ale nie zrobienie tego nie wpłynie na funkcjonalność.
poweratom
2
Jak wyjaśnił jiminikiz, musiałem umieścić % admin po % sudo na moim Ubuntu GNOME 16.04 LTS. Ponadto identyfikator grupy administratorów to nie administrator, ale adm na moim Ubuntu. Ponowne uruchomienie nie było wymagane.
hata
5

Utworzyłbym własny plik w katalogu /etc/sudoers.d/ - plik utworzony przez Amazon Cloud może zostać nadpisany w przypadku jakiejkolwiek aktualizacji. Po utworzeniu pliku w /etc/sudoers.d dodaj ten wpis,

<your user name> ALL=(ALL) NOPASSWD:ALL

Uruchom ponownie system, a to zadziała.

WaughWaugh
źródło
2

Krótka odpowiedź bez użycia edytora (testowana na bash, bardzo ryzykowne do wykonania na zdalnych hostach).

Skonfiguruj sudo do pracy bez hasła dla bieżącego użytkownika:

echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers

Sprawdź edycję za pomocą:

sudo visudo -c

Sprawdź, czy możesz używać sudo bez hasła:

sudo cat /etc/sudoers | grep "$USER"

... lub po prostu spróbuj z:

sudo <anything>
użytkownik315445
źródło
21
To dość niebezpieczna rada ... skopiuj i wklej to źle, a zablokujesz się na własnym serwerze. Stąd rada dotycząca korzystania z visudo. Przed zapisaniem na dysk sprawdza poprawność składni. Tak więc dla każdego, kto chce tego użyć. Nie rób tego na zdalnym serwerze, na którym ci zależy. Możesz zamieścić ostrzeżenie o tym w swojej odpowiedzi.
aychedee
8
Nie używanie visudo to okropny pomysł. Zaufaj mi, wiem.
trognanders
1
IMHO, kopiowanie-wklejanie jest bezpieczniejsze niż edycja ręczna. Niewielkie uproszczenie:echo "$USER ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
theartofrain
4
@theartofrain - Normalnie się zgodzę, ale visudoszczególnie miło jest, że nie pozwalam ci złamać pliku sudoers, a tym samym nie blokuje cię z twojego komputera (lub przynajmniej sudo).
Jon V
3
@JonV Możesz również utracić uprawnienia administratora przez visudo, ale zwykle nie przez przypadek, ponieważ visudozapisuje tylko zmiany, które są dobrze uformowane zgodnie z gramatyką plików sudoers . Większość błędów jest błędna składniowo, więc nie powodują szkód visudo. Jeśli /etc/sudoerslub plik w pliku /etc/sudoers.d jest źle sformułowany, sudoodmawia podniesienia uprawnień dla kogokolwiek ze względów bezpieczeństwa, dlatego nieużywanie visudojest niebezpieczne. (Chociaż czasem pkexecmożna to naprawić bez ponownego uruchomienia.)
Eliah Kagan
0

W ten sposób zaimplementowałem użytkownika innego niż root, bez hasła, w efemerycznym obrazie Docker do użytku w potoku CICD:

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
    sed -i /etc/sudoers -re 's/^#includedir.*/## **Removed the include directive** ##"/g' && \
    echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id
Seth Bergman
źródło