Jak zezwolić na wykonanie bez pytania o hasło przy użyciu sudo?

15

Piszę aplikację Java, w której muszę wykonać wiersz polecenia i uzyskać wynik, ale kiedy wykonuję polecenie, prosi o hasło sudo. Do tej pory próbowałem:

$ sudo -s
$ vim /etc/sudoers
# User privilege specification
root         ALL=(ALL:ALL) NOPASSWD: ALL
javauser     ALL=(ALL:ALL) NOPASSWD: ALL

:wq
$ 4 -r--r-----   1 root root     615 2011-10-26 09:23 sudoers

Po wykonaniu polecenia ponownie pojawia się pytanie „[javauser] hasło do javauser:”. Ale wspomniałem już o noPASSWD.

whoamipowraca alexi dodaję go jako ten w sudoerspliku

# User privilege specification
root    ALL=(ALL:ALL) ALL
alex 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

Bieganie wciąż pyta mnie o hasło, jakieś pomysły?

muru
źródło
Wygląda na to, że istnieje już bardzo podobne pytanie: askubuntu.com/questions/39281/… - czy próbowałeś już odpowiedzi?
Siergiej
Upewnij się, że w kodzie java używasz „sudo / absolut / ścieżka / do / polecenie” w wywołaniu systemowym. Btw. ze względów bezpieczeństwa powinieneś użyć sudo visudozamiast vimedytować plik sudoers. W ten sposób, jeśli popełnisz błąd, program cię o tym ostrzeże.
con-f-use
Można znaleźć tutaj, co dokładnie próbowałem: gist.github.com/1315951

Odpowiedzi:

28

Musisz wykonać następujące czynności, na typie terminala sudo visudoi dodać taki wiersz na końcu pliku, podając polecenia, które chcesz uruchomić bez wpisywania hasła sudo (sugeruję, abyś używał każdego polecenia, którego chcesz użyć w programie i nie tylko zezwalaj na wykonywanie wszystkich programów)

<yourusername> ALL=NOPASSWD: <command1>, <command2>

Teraz możesz uruchamiać określone polecenia bez hasła, o ile wpisujesz je za pomocą sudo.

tzn .: powiedzmy, że chcesz uruchomić shutdown -r nowbez konieczności wpisywania hasła sudo za każdym razem, a Twoja nazwa użytkownika to „joedoe”

  1. wpisz sudo visudona terminalu

  2. Dodaj joedoe ALL=NOPASSWD: /usr/sbin/shutdown -r nowjako nowy wiersz na końcu pliku , użyj bezwzględnych ścieżek do programu, którego próbujesz użyć.

  3. w swoim programie możesz następnie używać sudo shutdown -r nowbez konieczności wpisywania hasła sudo.

Bezwzględną ścieżkę do programu można znaleźć za pomocą which <program name>terminala.

To bardzo brudna sztuczka, która pozostawia twój system otwarty na inne niebezpieczeństwa, ale domyślam się, że wiesz, co robisz i chcesz tego.

Edytować

Naprawdę musisz upewnić się, że uprawnienia, które ustawiasz, znajdują się na końcu pliku , aby nic nie zostało zastąpione uprawnieniami grup.

Bruno Pereira
źródło
Wygląda na to, że już to zrobił.
con-f-use
Jeśli już to zrobił, dlaczego wyjaśniasz mu, że powinien używać, sudo visudoa nie vimedytować pliku sudoers? Gdyby to zrobił, zadziałałoby.
Bruno Pereira
1
@goOgle, czy wpisujesz sudoprzed poleceniem w kodzie? musisz to zrobić, nawet jeśli wymusiłeś nopasswd w pliku sudoers. tj .: użyj sudo <command>nie tylko <command>.
Bruno Pereira
1
Dla mnie cmd = „whoami” zwraca brunoa cmd = "sudo whoami"zwracaroot
Bruno Pereira
3
Znaleziono to! Może to odtworzyć, jeśli mój wiersz nie znajduje się na końcu sudoerspliku. Po przypisaniu grup itp. Naprawdę ostatnia linia! Przesuń linię, aby była ostatnią w pliku! (mam nadzieję, że to było to).
Bruno Pereira