Mam skrypt, który może działać jako sudo script.sh
lubpkexec script.sh
Byłoby o wiele ładniej z punktu widzenia użytkownika, gdyby skrypt pytał użytkownika o hasło podczas uruchamiania go po nazwie script.sh
.
Jak mogę „osadzić” żądanie do pkexec
lub sudo
uruchomić cały skrypt z uprawnieniami roota?
Zauważ, że uruchamianie wszystkiego za pomocą sudo sh -c
może nie być najlepszym rozwiązaniem, ponieważ mam funkcje w skrypcie.
command-line
bash
scripts
Sergiy Kolodyazhnyy
źródło
źródło
exec
"$@"
rozwinie się do wielu słów, po jednym dla każdego parametru.Jeśli chcesz ładny dialog, spróbuj czegoś takiego. Wyrwałem to prosto z czegoś innego, co napisałem, więc zawiera dodatkowe rzeczy, których możesz nie potrzebować lub chcieć, ale pokazuje to ogólny pomysł:
Używa to whiptail, który możesz zainstalować, jeśli jeszcze go nie masz:
źródło
exec echo [PASSWORD]
! Spowoduje to odrodzenie procesu z hasłem w wierszu poleceń, które każdy użytkownik może zobaczyć. Albo użyj wbudowanego poleceniaecho
(builtin echo
wymuś wbudowaną wersję za pomocą ) lub bashism<<<
(tak :)sudo ... <<< "$pass"
; Sh i inne powłoki mają tutaj Dokumenty dla tych przypadków. Podaj także hasło, jeśli zawiera znaki specjalne.whiptail
polecenia do osobnego skryptu i używać cośSUDO_ASKPASS=/path/to/askpass-with-whiptail.sh sudo -A -p "My password prompt" -- "$0" "$@"
miećsudo
umowę z hasłem niestandardowego szybkiego.Odpowiedź od blade19899 jest rzeczywiście słuszna, jednak można również wywołać
sudo bash
shebang:Oczywistym zastrzeżeniem jest to, że będzie działać tylko tak długo, jak długo skrypt jest wywoływany za pomocą
./script
i zawiedzie, gdy tylko skrypt zostanie wywołany za pomocąbash script
.źródło
bash script
w wierszu polecenia, aby wywołać skrypt. Jeśli skrypt określi coś innego niżbash
w#!
wierszu, wywołanie go za pomocąbash script
zakończy się niepowodzeniem. Gdybym próbował wywołać użycie skryptu Pythonbash script.py
, również by się nie udało.perl script
. Perl, chcąc być naprawdę naprawdę miłym, sprawdza linię shebang, a jeśli nie wywołuje perla, uruchamia odpowiedni program.Wstępuję do poleceń w skrypcie, które wymagają dostępu
sudo
do konta root - jeśli użytkownik nie uzyskał jeszcze uprawnień, skrypt wyświetla monit o podanie hasła.przykład
Ten skrypt może być uruchamiany jako
sudo <scriptname>
lub jako<scriptname>
. W obu przypadkach poprosi o hasło tylko raz.źródło
sudo
25 różnych poleceń nadmiarowych - łatwiej jest wywołać sudo raz. Tutaj jednak powodem, dla którego skrypt wywołuje sudo tylko raz, jest to, że sudo ma czas na 15 minut - polecenia, które trwają dłużej, będą musiały zostać powtórzone. Twoja droga działa po prostu. . . nie tak, jak potrzebuję.Wydaje się, że nikt inny nie zajął się tutaj oczywistym problemem. Umieszczenie
sudo
w skrypcie, który następnie rozpowszechniasz, promuje złe nawyki użytkowników . (Zakładam, że je rozpowszechniasz, ponieważ wspominasz „z punktu widzenia użytkownika”).Prawda jest taka, że istnieją wytyczne dotyczące korzystania z aplikacji i skryptów, które są podobne do zasady bezpieczeństwa w bankowości: Nigdy nie podawaj swoich danych osobowych komuś, kto dzwoni do ciebie i mówi, że dzwoni „z twojego banku” i który istnieje z podobnych powodów.
Reguła dla aplikacji jest następująca:
Nigdy nie wpisuj hasła po wyświetleniu monitu, chyba że masz pewność, co się z nim dzieje. Dotyczy to potrójnie każdego, kto ma
sudo
dostęp.Jeśli wpisujesz hasło, ponieważ działałeś
sudo
w wierszu poleceń, świetnie. Jeśli wpisujesz to, ponieważ uruchomiłeś polecenie SSH, w porządku. Oczywiście, jeśli wpisujesz go podczas logowania do komputera.Jeśli po prostu uruchomisz obcy skrypt lub plik wykonywalny i nieuprzejmie wpiszesz hasło, gdy zostaniesz o to poproszony, nie masz pojęcia, co skrypt z nim robi. Może to być przechowywanie go w pliku tymczasowym w postaci zwykłego tekstu, o ile wiesz, a nawet może nie zostać wyczyszczone po sobie.
Oczywiście istnieją osobne i dodatkowe obawy związane z uruchamianiem nieznanego zestawu komend jako
root
, ale tutaj mówię o utrzymaniu bezpieczeństwa samego hasła . Nawet zakładając, że aplikacja / skrypt nie jest złośliwy, nadal chcesz, aby hasło było obsługiwane bezpiecznie, aby uniemożliwić innym aplikacjom przechwycenie go i złośliwe użycie.Tak więc, moja osobista odpowiedź na to jest najlepsza rzecz, którą mogę umieścić w swoim skrypcie, jeśli potrzebuje uprawnień roota:
źródło
sudo script_name
jest równie podatny na zagrożenia, jest tak samo. Może ten pomysł promuje złe nawyki - nic o tym nie powiem. Ale kluczem jest wiedza o tym, co robi program, i to jest odpowiedzialność użytkownika. To cała idea oprogramowania open source. Jeśli chodzi o mój własny skrypt, to dobrze. . . skrypt jest zwykłym tekstem - użytkownicy mogą go przeczytać, jeśli chcą wiedzieć, co robiZrobiłem to w ten sposób:
źródło