Альтернативный способ выполнить команду sudo на запуске

Я пытаюсь записать сценарий для своей системы Ubuntu для спящего режима, каждый раз, когда сумма оставленной батареи (говорят) 5%. Этот сценарий будет работать на запуске.

Я могу добраться, батарея оставила использование

upower -d |grep perc

Затем я хочу использовать

sudo pm-hibernate

каждый раз, когда батарея достигает <= 5%. Но это требует разрешения суперпользователя. И я не ХОЧУ ВВОДИТЬ ПАРОЛЬ СНОВА И СНОВА ПОСЛЕ КАЖДОГО ВХОДА В СИСТЕМУ.

Один путь состоит в том, чтобы использовать, добавляет следующая строка в/etc/sudoers

yourlogin ALL=(ALL) NOPASSWD: command_here 

Но большинство людей рекомендует против этого.

Иначе должен включить пользовательский сценарий запуска /etc/init.d. Но я не уверен, является ли это безопасным выбором.

Кроме того, есть ли какая-либо другая альтернатива, которая была бы лучшей для моей цели?

3
задан 5 February 2015 в 08:17

4 ответа

Проще, чем добавить сценарий в init.d , - это написать конфигурацию Upstart. Я бы предпочел это. Создайте файл .conf в / etc / init (скажем, /etc/init/sleep-on-suspend.conf , содержащий:

description "Automatic suspend"

start on runlevel [2345]
stop on runlevel [016]

exec /path/to/script

Это будет автоматически запускаться при перезагрузке.

Вы даже можете интегрировать сценарий в этот файл. Вместо строки exec используйте:

script
    while sleep 1; do
    upower -d | awk -F'[ %]*' '/perc/ && ($3 < 5) { exit 1 }' || pm-hibernate
    done
end script
3
ответ дан 1 December 2019 в 13:25

Запустите sudo crontab -e -u root и добавьте строку @reboot / path / to / script в конец файла, тогда пользователь root автоматически запустит ваш скрипт как root при входе в систему. И дружеское напоминание о том, что никто, кроме вас и root, не может получить доступ к скрипту, иначе люди могут запускать любую команду как root.

3
ответ дан 1 December 2019 в 13:25

Этот сценарий запускается при запуске.

Если вы действительно имеете в виду это, то вы уже говорите о привилегиях root.

Как выглядит остальная часть вашего сценария? Мы не можем судить о безопасности или ее отсутствии по изолированным командам.

Другой альтернативой было бы запускать ее, скажем, каждые 5 минут из root crontab . Если вы боитесь последствий для безопасности, вы можете создать специального пользователя с ограниченными привилегиями, за исключением управления питанием.

Добавьте это в новый файл:

*/5 * * * * root /usr/local/sbin/hibernate-on-power-low

(где, возможно, root можно заменить на выделенный пользователь, если хотите) и установите его в /etc/cron.d/hibernate-maybe . Очевидно, что сценарий, выполняющий реальную работу, должен быть установлен в / usr / local / sbin / hibernate-on-power-low и должным образом проверен на безопасность и эффективность (возможно, использование прямого интерфейса ядра будет быть более надежным и эффективным, чем grep ) и, очевидно, если вы уже работаете с соответствующими привилегиями, вам не понадобится sudo для запуска pm-hibernate . 11113857]

1
ответ дан 1 December 2019 в 13:25

Другой альтернативой является использование sudo -S (что тоже небезопасно).

-S переключатель sudo ] прочитает пароль из STDIN. Итак, вы можете использовать его так:

echo 'password' | sudo -S <command>
0
ответ дан 1 December 2019 в 13:25

Другие вопросы по тегам:

Похожие вопросы: