Jak uruchomić aplikację przy użyciu sudo bez hasła?

40

... ale nadal są wymagane w przypadku aplikacji wymagających uprawnień administratora?

W celu umożliwienia:

$ apache2ctl restart
httpd not running, trying to start
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs

$ sudo !!
sudo apache2ctl restart             #no password asked
$                                   #works!

Dla porównania widziałem tę konfigurację w instancjach e3 amazona

Dowolny pomysł?

tutuca
źródło
To świetny samouczek na forach, który szczegółowo opisuje tworzenie osobnego pliku do określania programów, których zwykle używasz. Jest to dobry pomysł ze względów bezpieczeństwa.
Todd Partridge „Gen2ly”

Odpowiedzi:

51

Musisz edytować plik sudoers. Pamiętaj, że sukces daje mniej bezpieczny system, a awaria może uszkodzić sudo. ZAWSZE edytuj plik sudoers za pomocą sudo visudo, ponieważ visudo sprawdza błędy i nie zapisuje pliku, jeśli taki zostanie znaleziony.

Nie jest dobrym pomysłem, aby dać wszystkim zezwolenie na działanie jako root bez hasła, więc po prostu przepuść jeden plik wykonywalny, którego potrzebujesz (apache2ctl); dodaj na samym dole pliku:

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl

Jeśli chcesz, możesz zamienić ścieżkę do pliku wykonywalnego na „WSZYSTKO”, co daje kompletne sudo bez hasła.

Zamień NAZWISKO swoją nazwą użytkownika i naciśnij Ctrl+, Xaby zapisać i wyjść. Jeśli wystąpi błąd, zaoferuje przywrócenie, edycję lub zapisanie.

Upewnij się, że używasz pełnej ścieżki do pliku wykonywalnego:
tj. /usr/bin/apache2ctlzamiast po prostu apache2ctl. Jest to ważne, ponieważ bez wyraźnego podania ścieżki sudo pozwoli na uruchomienie dowolnego programu o nazwie apachectl na bieżącej ścieżce użytkownika jako root.

Mark Paskal
źródło
3
Pamiętaj, że %YOURNAMEda to uprawnienia grupie o nazwie podobnej do twojego użytkownika, co zwykle nie stanowi problemu, ponieważ każdy normalny użytkownik ma grupę o podobnej nazwie w systemach Ubuntu. Aby udzielić zgody użytkownikowi, określ YOURNAMEbez%.
Daniel Werner
Czy istnieje sposób na bardziej restrykcyjne? (niektóre funkcje tylko pliku wykonywalnego)
3pic
1
Stary post, ale na pewno zakończyć tę odpowiedź poprzez ograniczenie wejścia w sudoers' dla konkretnego hosta (jeśli to możliwe) i albo do podanych argumentów O do żadnego argumentu w ogóle (po apache2ctl), tak: YOURNAME YOUR-HOSTNAME = NOPASSWD: /usr/bin/apache2ctl <specific arg | "">. --- We wszystkich przypadkach man 5 sudoersjest odniesienie do.
Cbhihe,
25

Prawdziwa odpowiedź na to pytanie może być skomplikowana, ponieważ sudo jest bardzo potężne i można je skonfigurować do robienia fajnych rzeczy. Jest to dokładnie wyjaśnione w dokumentacji .

Krótka odpowiedź jest uruchamiana sudo visudow terminalu. Jeśli uruchamiasz visudo po raz pierwszy, zapyta cię, który edytor preferujesz. Ogólnie uważa się, że nano jest najłatwiejszy w użyciu, ale wybierz edytor, który najbardziej Ci odpowiada / znasz. Musisz zdecydować, komu chcesz dać dostęp; może być ALLdla każdego ( bardzo zły pomysł) , użytkownika lub grupy systemowej. Grupy są poprzedzone znakiem%. Na przykład, jeśli chcesz nadać wszystkim steroid_usersczłonkom grupy uprawnienia root bez potrzeby podawania hasła do wszystkich dodawanych poleceń:

%steroid_users ALL=(ALL) NOPASSWD: ALL

na końcu pliku, zamknij i zapisz plik. Jeśli wszystko pójdzie dobrze, a jesteś członkiem grupy steroid_users, będziesz mógł wystawiać sudo *some-command*bez kłopotu z wprowadzaniem hasła.

Pamiętaj, że każdy, kto ma dostęp do twojego terminala, gdy jesteś zalogowany - lub jeśli masz konfigurację ssh dla uwierzytelniania opartego na kluczach lub (co gorsza) ma włączone logowanie sesji bez hasła - pełny i nieograniczony dostęp do całego system. Jeśli masz w systemie wielu użytkowników lub jest to serwer plików, pliki wszystkich użytkowników mogą być zagrożone, ponieważ root może zrobić wszystko!

Ponadto, jeśli popełnisz błąd, visudo wyświetli komunikat o błędzie i nie zapisze zmian w pliku. Pomoże to całkowicie złamać sudo. Naprawdę powinieneś przeczytać dokumentację . Sudo zostało zaprojektowane tak, aby zapewnić użytkownikom wystarczający dostęp do wykonywania swojej pracy bez konieczności narażania całego systemu. Korzystne może być zapewnienie dostępu do hasła tylko dla niektórych poleceń.

Mam nadzieję, że to pomoże.

Chris
źródło
To zadziałało, wziąłem to, a potem użyłem „sudo service sudo restart” z askubuntu.com/questions/192050/... i byłem w stanie wykorzystać to wszystko w mojej aktywnej sesji Ubuntu. Niesamowite!
Patrick
5

Musisz edytować plik „/ etc / sudoers” (do tego celu służy polecenie „visudo”), aby dodać NOPASSWD przed listą dozwolonych poleceń dla użytkownika lub grupy. Jeśli Twój użytkownik należy do grupy „admin” - potrzebujesz:

%admin ALL=(ALL) NOPASSWD: ALL

Sprawdź https://help.ubuntu.com/community/Sudoers , btw.

korjjj
źródło
3

MOŻESZ dodać flagę nopasswd do listy użytkowników, ale to nie eliminuje wszystkich zadawanych haseł. Zapytany zostanie tylko pierwszy.

  1. Edytuj sudoers: sudo visudo(Musisz użyć sudo. To jest plik administratora.)
  2. Dodaj użytkownika z flagą nopasswd po wierszu administratora (na końcu). Na przykład:
    cyrex ALL = NOPASSWD: ALLlubcyrex ALL = (ALL) NOPASSWD: ALL
Luis Alvarado
źródło
2
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

lub

sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2

Myślę, że to by to zrobiło.

Uważaj jednak, usuwając hasła do sudo.

Alex
źródło
2
Należy podać bezwzględną ścieżkę w pierwszym przykładzie ze względów bezpieczeństwa - pozbawiony skrupułów użytkownik może zmienić $ PATH i ukraść dostęp do katalogu głównego za pomocą niekwalifikowanej nazwy polecenia.
bgvaughan
0

Teraz prosta odpowiedź! Nie ma możliwości, aby coś popsuć lub przerobić instalację.

Wystarczy wpisać hasło kilka razy, a już nigdy nie będziesz musiał go wpisywać! Umożliwi to dodanie lokalnego konta administratora do grupy „root”, która następnie nie będzie komentować z szablonu, który pozwoli całej grupie administratora na „root”. Możesz przeczytać moje obawy dotyczące bezpieczeństwa / rozwiązania tej procedury w dalszej części tego postu.

% nazwa użytkownika i jest globalną zmienną dla twojej nazwy użytkownika (zamień ją na żądaną nazwę użytkownika)

Krok 1: Otwórz okno terminala, a następnie wpisz „ sudo usermod -a -G root %username%

Krok 2: Następnie skopiuj / wklej to ...

sudo sed -i 's/# auth       sufficient pam_wheel.so trust/auth       sufficient pam_wheel.so trust/g' /etc/pam.d/su`

Krok 2 LUB wpisz

sudo nano /etc/pam.d/su`

Przejdź do linii 19 i usuń „#” wcześniej # auth sufficient pam_wheel.so trust(może to być inny numer linii dla niektórych)

* Pierwsze polecenie dodaje twoją% username% do grupy „root”

Druga / trzecia komenda pozwala wszystkim członkom grupy „root” być superużytkownikiem bez hasła, a jedynie zezwala użytkownikowi „root” na uprawnienia do uwierzytelniania.


Przypis końcowy:

Nie zadzieraj z /etc/sudoers... Istnieje wiele kontroli / sald, przez które musi przejść uwierzytelnianie „su”. Uwierzytelnianie superużytkownika wykorzystuje tę samą procedurę pam.d, co wszystkie inne uwierzytelnienia logowania. „/etc/security/access.conf” ma układ do kontroli dostępu za pośrednictwem komunikacji tcp / ip (192.168.0.1) i usług telnet (tty1 i tty2 i tty3 ... itd.) Umożliwia to bardziej precyzyjne filtrowanie według aplikacji za pomocą protokołu transportowego. Jeśli zależy Ci na bezpieczeństwie, należy je skierować na zagrożenia zdalne / kodowe, a nie na kogoś, kto faktycznie dotyka komputera po wyjściu z pokoju !!!

Jedzenie na paranoję (nie wpisuj tego, po prostu go przejrzyj):

sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf

^ To blokuje dostęp do konsoli każdemu, kto nie jest członkiem systemu lub użytkownika root. Czasami programy instalują nazwy użytkowników / grupy, które są wykorzystywane!

Nathaniel F. Malm
źródło
2
Nie jest ekspertem od bezpieczeństwa, ale brzmi to nieco sprzecznie z intuicją. Wyłączasz hasła dla całej grupy, aby pojedynczy użytkownik mógł uruchomić określoną aplikację bez hasła, aby uniknąć „złożoności” udoskonalania sudo dla określonej aplikacji, prawda? A wszystko to na publicznym serwerze? Czy skrypt wyłączył twoje podstawowe instynkty przetrwania? Bezpieczeństwo jest złożone według projektu. Pamiętaj, to jest jak cebula. Ma warstwy i sprawia, że ​​płaczesz ... Utrata danych na zagrożonych serwerach to tylko część równania. Wiosenne ataki hakerów z twojego systemu są równie poważne, ale często pomijane
hmayag
2
Jest to sprzeczne z intuicją i przeciwne zdrowemu rozsądkowi: otwarcie całego słoika na ciasteczka dla użytkownika, który potrzebuje tylko jednego ciasteczka, jest dość nieodpowiedzialne. Dodawalibyście użytkowników do listy sudoers i usunęliście potrzebę wprowadzania haseł zamiast edytowania pliku / plików sudoers. „Jeśli broń jest niebezpieczna dla dzieci, nie dawaj im kanonu”. -me
John