Я хочу, чтобы моя система автоматически включалась каждый день. Поэтому я использую приведенный ниже код в своем скрипте Python, но sudo
запрашивает у меня пароль каждый раз:
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
Как я могу запустить этот скрипт без sudo
запроса пароля каждый раз? [ 114]
Vă rugăm să rețineți: Orice metodă care implică plasarea parolei de autentificare în text simplu , într-o comandă sau într-un fișier, este nesigur și NU trebuie utilizat!
Modul corect de a face acest lucru pentru a configura sudo
astfel încât numai cel specific comanda de care aveți nevoie, adică data ecoului ...> rtc ...
, este tot trebuia să ruleze FĂRĂ să ai nevoie de parolă.
gedit
(sau editorul dvs. preferat) și creați scriptul de ex. pydatertc.sh
data ecou \ '+% s \' -d \ '+ 24 ore \'> / sys / class / rtc / rtc0 / wakealarm
sudo chown root: root /home/username/pydatertc.sh
sudo chmod 700 /home/username/pydatertc.sh
pydatertc.sh
să se execute fără a necesita o parolă sudo visudo
la terminal pentru a deschide permisiunile sudo ( sudoers
) fișier % sudo ALL = (ALL: ALL) ALL
nume de utilizator
este numele dvs. de utilizator:
nume de utilizator ALL = (ALL) NOPASSWD: /home/username/pydatertc.sh
pydatertc.sh
os.system ('sudo /home/username/pydatertc.sh')
Acum scriptul dvs. ar trebui să ruleze fără a necesita o parolă ȘI fără a compromite securitatea contului dvs., a datelor dvs. sau a system!
wakealarm
(nu pentru uz general!): În numai în acest caz specific , deoarece / sys / class / rtc / fișierul rtc0 / wakealarm
controlează doar alarma de trezire pentru sistem și este altfel inofensiv, o altă alternativă pentru a evita parola este fie să dețineți fișierul respectiv cu chown
(dacă sunteți singurul utilizatorul care setează alarma) sau faceți-o scriibilă în toată lumea cu chmod +666
; în acest caz, pur și simplu eliminați sudo
din apelul dvs. Python, lăsând sh -c "...."
intact.
Dacă nu te deranjează ca scriptul să ruleze la o anumită oră din oră (sau în timpul zilei), puneți-l în directorul principal al rădăcinii ( / root
) și rulați scriptul din sistemul crontab ( / etc / crontab
) ca root. Apoi ați câștigat Nu trebuie să vă compromiteți securitatea.
Consultați https://help.ubuntu.com/community/CronHowto pentru a adăuga scriptul la crontab.
Еще одна интересная особенность sudo, которая не упоминалась в отличных ответах выше, - это переменная timestamp_timeout. Это переменная sudo, которую вы можете увеличить, чтобы сэкономить на интерактивном вводе пароля.
Например, в / etc / sudoers (или одном из файлов, включенных в него) вы можете изменить значение по умолчанию:
# only require a password once every 60 minutes
Defaults timestamp_timeout=60
Полное описание от 'man sudoers ':
timestamp_timeout
Количество минут, которое может пройти до того, как sudo запросит снова пароль. По умолчанию 5, установите 0, чтобы всегда запросить пароль.
Конечно, это не может помочь в конкретном случае запуска команды из cron. Но это хорошо, что нужно знать.
Atenție!
Introducerea parolei de conectare în text simplu, într-o comandă sau fișier, este extrem de nesigură și poate compromite datele dvs. private și sistemul dvs. Este foarte recomandat să nu faceți acest lucru niciodată, chiar dacă credeți că sistemul dvs. este „personal” sau într-o „locație sigură”!
Dacă scriptul este doar pentru uz personal și l-ați plasat într-un un loc sigur și nu vă este frică de furtul contului dvs. și așa ceva,atunci iată o soluție simplă:
echo LOGINPASSWD | sudo -S COMMAND HERE
unde LOGINPASSWD este parola dvs. de conectare (exemplu: iloveponies) și COMANDĂ AICI este comanda ta care vine după sudo, cum ar fi sh -c "echo da .. etc
export MY_SUDO_PASS="user_password_here"
Чтобы проверить, работает ли он, введите:
echo $MY_SUDO_PASS
> user_password_here
Чтобы запустить «sudo apt-get update» и принять пароль от переменных среды, которые мы создали ранее:
echo $MY_SUDO_PASS | sudo -S apt-get update
Запуск из python (пример рекурсивного изменения владения каталогом на username_here):
python
>> import subprocess
>> subprocess.call('echo $MY_SUDO_PASS | sudo -S chown -R username_here /home/username_here/folder_to_change_ownership_recursivley', shell=True)
echo $ MY_SUDO_PASS получить пароль -S переключатель, перехватывающий его и передающий пароль sudo