Скрипт запуска с sudo в Ubuntu 16.10

Мне нужно запустить скрипт и бинарный файл из /usr/bin при запуске с привилегиями sudo/root. Я перепробовал много руководств с этого форума, но ничего не получилось (rc.local а также systemd стиль, выскочка) - может я что то не так делаю. Моя ОС - Ubuntu GNOME 16.10.

Сценарий будет примерно таким

#!/bin/bash
sudo ./usr/bin/myprogram
sudo bash /home/USER/script.bash

И скрипт, и программа являются исполняемыми. Я просто не знаю, как оптимально запустить их с sudo при запуске.

Пожалуйста, будьте нежны. Я новый пользователь.

2 ответа

Решение

Для приложений командной строки, которые не требуют графического интерфейса, достаточно поместить вызов к ним в /etc/rc.local, который уже запускается от имени root, таким образом, не нуждается sudo, Ниже приведен пример моего /etc/rc.local который я использую для запуска двух скриптов мониторинга.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

/home/xieerqi/bin/batmon.sh &
/home/xieerqi/bin/sh/temperature.sh  &
 exit 0

Для приложений с графическим интерфейсом вам потребуется другой подход. Вам нужно будет открыть приложение "Автозагрузка приложений" и добавить следующую команду:

bash -c "sleep 10;gksu /usr/bin/my_vpn_program"

Это дает GUI достаточное время для запуска, 10 секунд, затем откроет диалоговое окно ввода пароля и, если вы правильно введете пароль, запустит вашу команду. По сути, это сценарий мини-bash. Ты можешь использовать pkexec вместо этого, и некоторые могут даже сказать, pkexec рекомендуется вместо gksu,

В качестве альтернативы, если вы не хотите вводить пароль каждый раз, вы можете разрешить своему пользователю запускать эту конкретную команду с привилегиями root без аутентификации. Для этого вам нужно отредактировать /etc/sudoers файл. ВНИМАНИЕ: рекомендуется использовать sudo visudo редактировать файл из терминала. Ниже приведен пример того, как я использую ту же настройку с pm-suspend команда:

# Allow using pm-suspend for my user without password
xieerqi ALL = NOPASSWD: /usr/sbin/pm-suspend

Эта строка должна быть добавлена ​​в конец /etc/sudoers файл и сохранен. Обратите внимание, что вам все еще нужно добавить sudo или же gksu в начале каждой команды, которую вы создали. Таким образом, вам нужно будет использовать тот же bash Команда, которую я показал ранее.

Использовать crontab возможность запустить скрипт после перезагрузки,

Вы можете сделать это, добавив @reboot код в cron

Откройте crontab пользователем root:

$ sudo crontab -e

Добавьте следующую запись внизу:

@reboot /usr/bin/myprogram

Это будет делать то, что вы хотите.

Решение настолько простое, что вы его пропустили.:) Поскольку rc.local запускается пользователем root, sudo в вашем файле совершенно не требуется.

Другими словами, поместите его в rc.local, как вы предложили, но пропустите sudoэто из вашего сценария. Они совершенно не нужны, так как rc.local уже запущен от имени пользователя root.

Надеюсь это поможет!

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