Zadałem już to pytanie w przepełnieniu stosu , ale zostałem poproszony o opublikowanie go tutaj. Czyniąc to samo.
Uruchomiłem to polecenie, używając mojego programu Java
sudo -u <username> -S pwd
Mam ten wynik
command=sudo -u <username> -S pwd
exitCode=1
sudo: sorry, you must have a tty to run sudo
Próbowałem edytować / etc / sudoers, ale już zawiera
<username> ALL=(ALL) NOPASSWD: ALL
Potem dowiedziałem się, że można to zrobić, komentując następujący kod w / etc / sudoers
# Defaults requiretty
Ponadto domyślnie, gdy sudo
próbujemy wykonać polecenie jako inny użytkownik , musimy podać własne hasło. Ale można to zmienić, wprowadzając następującą zmianę w / etc / sudoers-
Defaults targetpw
Moje pytanie brzmi: czy jest możliwe wykonanie powyższego polecenia w Javie bez wprowadzania jakichkolwiek zmian w dowolnym miejscu, tj. Przy domyślnych ustawieniach ?
requiretty
jest domyślnie włączone. Wedługsudo
własnej dokumentacji jest ona domyślnie „wyłączona”.Odpowiedzi:
Nie wiem, jak uruchamiać polecenia powłoki w Javie, ale spójrz na opcję -t dla polecenia ssh
To właśnie robię, gdy muszę uruchomić komendę jako root przez ssh (bezpośrednie logowanie do roota wyłączone i tty wymagane przez sudo)
źródło
Krótka odpowiedź brzmi: nie, musisz zmienić ustawienia, aby sudo działało inaczej niż obecnie.
sudo może być niewłaściwym narzędziem do tego. Reguły Sudo mają pomóc administratorom systemu w skonfigurowaniu sposobu na podniesienie uprawnień, które trudno nadużyć w celu uzyskania dodatkowych / niezamierzonych uprawnień.
Jeśli zastanowisz się, co sudo dla Ciebie robi:
Jeśli chcesz, aby java uruchamiała dowolne polecenia jako dowolni użytkownicy bez podawania hasła dla tych użytkowników lub własnego, w zasadzie zastępujesz sudo. W takim przypadku powinieneś stworzyć własne zasady zapobiegania nadużyciom.
Istnieją w zasadzie dwa sposoby:
W przypadku nr 1 twój program Java wykonuje to, co robi sudo, i powinieneś wdrożyć własny zestaw reguł, aby chronić przed nadużyciami.
Istnieją programy inne niż sudo do zrobienia # 2. Jeden przykład można znaleźć na https://code.google.com/archive/p/exec-wrapper/downloads
Ten przydatny skrypt powłoki tworzy program C w celu uruchomienia innej komendy (zwykle skryptu). Następnie kompilujesz program C do pliku binarnego i zaznaczasz ten setuid root, a tak naprawdę może on być setuid dla dowolnego użytkownika. (tryb: 4555 i właściciel: root)
Dopóki korzystasz z systemu plików, który na to pozwala, uruchomienie programu binarnego spowoduje uruchomienie skonfigurowanej komendy jako identyfikatora użytkownika, który jest właścicielem samego programu binarnego.
źródło