Możesz uruchomić sudo bez hasła , dodając NOPASSWDregułę do polityki sudoers. Najbezpieczniejszym rozwiązaniem jest zezwolenie tylko na konkretne polecenie administracyjne, zamiast wyłączania monitu o podanie hasła dla każdego polecenia sudo.
Zanim cokolwiek zmienisz, pamiętaj, co robi to ustawienie: każdy, kto uzyska kontrolę nad Twoim zalogowanym kontem, może uruchomić dozwolone polecenie jako użytkownik root bez konieczności ponownego uwierzytelniania. W podręczniku sudoers opisano NOPASSWDtag, który usuwa uwierzytelnianie dla pasujących poleceń.
Dlaczego sudo -s nie jest metodą sudo bez hasła
Starsza rada dotycząca uruchomienia sudo -snie konfiguruje w rzeczywistości sudo bez hasła. -sOpcja uruchamia powłokę w sudo, ale zasady sudo nadal mogą wymagać wcześniejszego uwierzytelnienia. Możesz również zobaczyć kilka poleceń uruchomionych bez kolejnego monitu, ponieważ sudo zazwyczaj buforuje pomyślne uwierzytelnienie na krótki czas. To różni się od NOPASSWDreguły stałej.
Uruchom określone polecenie sudo bez hasła
Ten przykład pozwala użytkownikowi alexzrestartować Nginx bez hasła. Zastąp nazwę użytkownika, polecenie i argumenty wartościami odpowiadającymi Twojemu systemowi.
1. Potwierdź swoją nazwę użytkownika i ścieżkę polecenia
Uruchom następujące polecenia jako zwykły użytkownik:
whoami
command -v systemctl
Drugie polecenie może zwrócić /usr/bin/systemctl. Użyj ścieżki podanej przez Twój system. Reguły sudoers powinny identyfikować polecenia na podstawie pełnej ścieżki.
Przed napisaniem reguły sudoers sprawdź nazwę konta i pełną ścieżkę polecenia.
2. Utwórz dedykowany plik typu „sudoers”
Zamiast edytować /etc/sudoersbezpośrednio, użyj visudoz plikiem w /etc/sudoers.d:
sudo visudo -f /etc/sudoers.d/alex-nopasswd
Zazwyczaj w tym kroku konfiguracji należy wprowadzić hasło. visudoJest to preferowane, ponieważ sprawdza składnię przed zaakceptowaniem zmian. W podręczniku Ubuntu Visudo zaznaczono również, że visudoblokuje plik podczas edycji i sprawdza go pod kątem błędów parsowania.
Otwórz osobny plik sudoers, visudozamiast edytować główny plik zasad przy użyciu zwykłego edytora tekstu.
alex ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
Ta reguła zezwala na uruchamianie tylko poleceń z tymi argumentami jako root bez uwierzytelniania. Aby zezwolić na wykonywanie kilku konkretnych poleceń, rozdziel specyfikacje poleceń przecinkami.
Jeśli celowo chcesz, aby każde polecenie sudo dla jednego użytkownika pomijało uwierzytelnianie, ogólna zasada jest taka:
alex ALL=(ALL:ALL) NOPASSWD: ALL
To znacznie mniej bezpieczne rozwiązanie i rzadko stanowi najlepszy wybór na stacji roboczej lub w systemie współdzielonym. Zhakowana sesja użytkownika miałaby bezpośredni dostęp do nieograniczonych uprawnień roota.
Reguła specyficzna dla polecenia jest bezpieczniejsza niż udzielanie NOPASSWD: ALL.
4. Sprawdź i przetestuj regułę
Po zapisaniu i opuszczeniu edytora należy sprawdzić pełną politykę sudoers:
sudo visudo -c
Nie pomijaj tego sprawdzenia. visudoDokumentacja wyjaśnia, że polityka sudoers jest oceniana jako całość, więc sprawdzenie pełnej konfiguracji pozwala wykryć problemy, które mogą dotyczyć dołączonych plików.
Następnie unieważnij wszystkie zapisane w pamięci podręcznej dane uwierzytelniające sudo i przeprowadź test w trybie nieinteraktywnym:
sudo -k
sudo -n /usr/bin/systemctl restart nginx
Ta -nopcja powoduje, że sudo nie będzie pytać o hasło. Jeśli reguła jest zgodna, polecenie zostanie wykonane bez pytania o hasło. Jeśli uwierzytelnienie jest nadal wymagane, sudo zakończy działanie z błędem, zamiast czekać na podanie hasła. Jest to sudo -nszczególnie przydatne w przypadku skryptów, które nigdy nie powinny zawieszać się na monicie o hasło.
Sprawdź poprawność zasad, wyczyść dane uwierzytelniające z pamięci podręcznej i użyj polecenia, sudo -naby potwierdzić, że polecenie na pewno nie wymaga już podawania hasła.
Rozwiązywanie problemów z sudo bez hasła
Polecenie nadal prosi o podanie hasła: sprawdź, czy nazwa użytkownika, ścieżka polecenia i argumenty dokładnie odpowiadają wpisowi sudoers.
Polecenie jest niedozwolone: uruchom sudo -l, aby sprawdzić uprawnienia przypisane do Twojego konta.
Wygląda na to, że opcja „drop-in” jest ignorowana: użyj prostej nazwy pliku, takiej jak alex-nopasswd. Niektóre konfiguracje sudoers ignorują pliki, /etc/sudoers.dktórych nazwy zawierają kropkę lub kończą się sufiksami w stylu kopii zapasowej.
Musisz cofnąć zmianę: otwórz ponownie moduł za pomocą sudo visudo -f /etc/sudoers.d/alex-nopasswd, usuń lub zawęź regułę, zapisz i uruchom sudo visudo -cponownie.
Najlepsze praktyki
Używaj sudo bez hasła tylko wtedy, gdy zachodzi konkretna potrzeba, na przykład w przypadku ściśle kontrolowanej akcji serwisowej lub zadania automatyzacji. Preferuj dokładną ścieżkę polecenia i dokładne argumenty, unikaj ich, NOPASSWD: ALLgdy to możliwe, i ogranicz regułę sudoers do minimum, na jakie pozwala zadanie. Dzięki temu zachowasz większość ochrony sudo, jednocześnie eliminując monit o podanie hasła tam, gdzie jest to rzeczywiście konieczne.