Chcę codziennie włączać system automatycznie. Używam więc poniższego kodu w skrypcie Python, ale sudo
za każdym razem pytam o hasło:
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
Jak mogę uruchomić ten skrypt sudo
za każdym razem bez pytania o hasło?
Odpowiedzi:
Poprawny sposób to zrobić, aby ustawić
sudo
tak, że tylko właściwa komenda jeden trzeba, to znaczyecho date... > rtc...
, może pracować bez konieczności hasło.Krok 1. Utwórz skrypt powłoki za pomocą tego polecenia
gedit
(lub swój ulubiony edytor) i utwórz skrypt nppydatertc.sh
Krok 2. Skonfiguruj sudo, aby umożliwić
pydatertc.sh
wykonywanie bez wymagania hasłasudo visudo
w terminalu, aby otworzyćsudoers
plik uprawnień sudo ( )%sudo ALL=(ALL:ALL) ALL
username
znajduje się nazwa użytkownika:Krok 3. Zmodyfikuj skrypt Pythona, aby zadzwonił
pydatertc.sh
Teraz twój skrypt powinien działać bez konieczności podawania hasła ORAZ bez narażania bezpieczeństwa konta, danych lub systemu!
Alternatywa tylko dla
wakealarm
(nie do ogólnego użytku!):W tym konkretnym przypadku tylko , ponieważ
/sys/class/rtc/rtc0/wakealarm
plik kontroluje tylko alarm budzenia dla systemu i jest inaczej nieszkodliwe, inną alternatywą, aby uniknąć hasło jest albo przejąć na własność tego pliku zchown
(jeśli jesteś tylko ustawienie alarmu przez użytkownika) lub uczyń go światowym do pisaniachmod +666
; w takim przypadku po prostu usuńsudo
z wywołania Python, pozostawiającsh -c "...."
nienaruszone.źródło
sudo
- bez hasła. Dlatego bezpieczniej jest umieścić skrypt w katalogu, który może zmienić tylko root, np .: / usr / sbin lub / root . W przeciwnym razie LGTM.Jeśli skrypt jest przeznaczony wyłącznie do użytku osobistego, a Ty umieściłeś go w bezpiecznym miejscu i nie boisz się, że twoje konto zostanie skradzione, oto proste rozwiązanie:
gdzie LOGINPASSWD to hasło logowania (przykład: iloveponies), a POLECENIE TUTAJ to polecenie pojawiające się po sudo, takie jak sh -c "echo da .. itd.
źródło
Jeśli nie przeszkadza ci skrypt działający o określonej godzinie w ciągu godziny (lub w ciągu dnia), włóż go do katalogu głównego roota (
/root
) i uruchom skrypt z systemowego crontab (/etc/crontab
) jako root. Wtedy nie będziesz musiał narażać bezpieczeństwa.Zobacz https://help.ubuntu.com/community/CronHowto, aby dowiedzieć się, jak dodać skrypt do crontab.
źródło
anacron
jeśli jest to komputer stacjonarny / laptop, który nie działa 24x7Inną pokrewną fajną cechą sudo, o której nie wspomniano w doskonałych odpowiedziach powyżej, jest zmienna „timestamp_timeout”. Jest to zmienna sudo, którą możesz zwiększyć, aby zaoszczędzić na interaktywnym wpisywaniu hasła.
Przykład: w / etc / sudoers (lub jednym z zawartych w nim plików) możesz zmodyfikować wartość domyślną:
Pełny opis z „man sudoers”:
Oczywiście nie może to pomóc w konkretnym przypadku uruchomienia polecenia z crona. Ale dobrze jest być tego świadomym.
źródło
Aby sprawdzić, czy działa, należy:
Aby uruchomić „sudo apt-get update” i zaakceptować hasło ze zmiennych środowiskowych, które wcześniej utworzyliśmy:
Uruchom z python (przykład zmieniając rekurencyjnie własność katalogu na username_here):
echo $ MY_SUDO_PASS pobierz hasło -S przełącznik łapie go i przekazuje hasło do sudo
źródło