Moje pytanie brzmi: czy możliwe jest wykonanie powyższego polecenia w java bez dokonywania jakichkolwiek zmian w dowolnym miejscu, tj. Przy domyślnych ustawieniach?
sudo -u -S pwd
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:
- wyświetla monit o podanie hasła w celu weryfikacji tożsamości
- podnieść uprawnienia
- następnie opcjonalnie uzyskaj uprawnienia jako inny użytkownik
- loguje sudo do uzyskiwania dostępu lub uruchamiania poleceń
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:
- uruchom java z podwyższonymi uprawnieniami i ostrożnie weź i oddaj potrzebne uprawnienia (zobacz wywołania funkcji setuid () seteuid () C).
- uruchom zewnętrzny program, aby zdobyć podwyższone uprawnienia, kiedy chcesz
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.