Я хочу, чтобы моя система автоматически включалась каждый день. Поэтому я использую приведенный ниже код в своем скрипте Python, но sudo
каждый раз запрашиваю пароль:
os.system('sudo sh -c "echo date \'+%s\' -d \'+ \
24 hours\' > /sys/class/rtc/rtc0/wakealarm"')
Как я могу запустить этот скрипт, не sudo
спрашивая пароль каждый раз?
Ответы:
Правильный способ сделать это для настройки так
sudo
, чтобы только одна конкретная команда, которая вам нужна, т.е.echo date... > rtc...
разрешена для запуска БЕЗ пароля.Шаг 1. Создайте сценарий оболочки только с этой командой
gedit
(или ваш любимый редактор) и создайте скрипт, напримерpydatertc.sh
Шаг 2. Установите sudo, чтобы разрешить
pydatertc.sh
выполнение без пароляsudo visudo
в терминале, чтобы открытьsudoers
файл sudo permissions ( )%sudo ALL=(ALL:ALL) ALL
username
находится ваше имя пользователя:Шаг 3. Измените ваш скрипт на Python для вызова
pydatertc.sh
Теперь ваш скрипт должен работать без пароля и без ущерба для безопасности вашей учетной записи, ваших данных или вашей системы!
Альтернатива только для
wakealarm
(не для общего использования!):В этом конкретном случае только , поскольку
/sys/class/rtc/rtc0/wakealarm
файл управляет только будильником для системы и в противном случае безвредны, другой альтернативы , чтобы избежать пароля либо взять на себя ответственность этого файла сchown
(если вы только настройки будильника пользователя) или сделайте его доступным для записиchmod +666
; в этом случае просто удалитеsudo
из вашего вызова Python, оставивsh -c "...."
без изменений.источник
sudo
- без пароля. Следовательно, гораздо безопаснее поместить скрипт в каталог, который может изменить только root, например: / usr / sbin или / root . В противном случае это LGTM.Если скрипт предназначен только для личного использования, и вы поместили его в безопасное место, и вы не боитесь, что ваш аккаунт будет украден и тому подобное, вот простое решение:
где LOGINPASSWD - это ваш пароль для входа (пример: iloveponies), а COMMAND HERE - ваша команда, которая следует за sudo, например sh -c "echo da .. etc
источник
Если вы не возражаете против запуска сценария в определенное время в час (или в течение дня), поместите его в домашнюю директорию root (
/root
) и запустите сценарий из системы crontab (/etc/crontab
) от имени пользователя root. Тогда вам не придется ставить под угрозу вашу безопасность.См. Https://help.ubuntu.com/community/CronHowto, чтобы узнать, как добавить скрипт в crontab.
источник
anacron
если это настольный компьютер / ноутбук, который не работает 24x7Еще одна приятная особенность sudo, которая не была упомянута в превосходных ответах выше - это переменная timestamp_timeout. Это переменная sudo, которую вы можете увеличить, чтобы сэкономить на вводе интерактивного пароля.
Например, в / etc / sudoers (или в одном из файлов, включенных в него) вы можете изменить значение по умолчанию:
Полное описание от 'man sudoers':
Конечно, это не может помочь в конкретном случае запуска команды из cron. Но это хорошо, что нужно знать.
источник
Чтобы проверить, работает ли он, введите:
Чтобы запустить «sudo apt-get update» и принять пароль от переменных среды, которые мы создали ранее:
Запуск из python (пример рекурсивного изменения владельца каталога на username_here):
echo $ MY_SUDO_PASS get's password -S switch перехватывает его и передает пароль в sudo
источник