Как запустить Python скрипт с root-правами без ввода пароля?
Есть скрипт на Python, который с помощью subprocess.call() запускает команду из терминала, но для выполнения этой команды требуются root-права и, соответственно, если добавить sudo, запрашивается пароль.
Как выдать root-права без ввода пароля, чтобы скрипт мог выполняться в фоне и вообще не требовал вмешательства пользователя?
Уточню, что требуется запускать sudo без пароля только для скрипта, а не для всей системы.
Фрагмент кода:
def check_updates():
"""
Check updates, return amount of available to update packages.
Otherwise (if no updates available) return 0 (zero).
"""
# Sync local package database with an online mirror
subprocess.call(['sudo','pacman', '-Syy'])
output = subprocess.check_output(['pacman', '-Qqu'])
# Return updates number because each package name ends with "\" character
output = str(output).count('\\')
return output
Добавил это в /etc/sudoers.d/, но не помогло.
alexleet ALL=(root) NOPASSWD: /home/alexleet/projects/update-notifier/update-notifier.py
Скрипт запускаю из консоли так: sudo ./update-notifier
Ответы (1 шт):
Во-первых старайтесь всегда использовать полные пути - хотя бы до того момента, пока не убедитесь, что все работает:
output = subprocess.check_output(['sudo', '/path/to/pacman', '-Qqu'])
Во-вторых в /etc/sudoers должна быть прописана программа, которую вы запускаете с предикатом sudo (NOTE: не забываем о полных путях):
alexleet ALL=(root) NOPASSWD: /path/to/pacman