Как запустить файл с помощью sudo без пароля? [дубликат]

Возможный дубликат:
Как запустить приложение с помощью sudo без пароля ?

Я создал сценарий, который выполняет различные системные задачи, которые я запускаю регулярно, но мне приходится использовать sudo для запуска сценария, несмотря на то, что он принадлежит мне, потому что он выполняет команды с привилегиями root. Как я могу добавить make sudo, чтобы я мог запускать этот файл без необходимости вводить пароль каждый раз, когда я его запускаю?

Я знаю, что есть вопросы относительно запуска команд без пароля, но я не смог найти ни одного вопроса о запуске файла без пароля.

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

Я добавил john ALL = NOPASSWD: /home/john/.script/hibernate.sh в мои / etc / sudoers , но при запуске команды sudo sh / home / john / .script / hibernate.sh он все еще запрашивает мой пароль ...

2
задан 13 April 2017 в 15:24

4 ответа

Вам нужен тег «NOPASSWD».

Используйте visudo и установите что-то вроде этого в конце файла:

username ALL = NOPASSWD: / bin / echo

Замените имя пользователя вашим именем пользователя, а / bin / echo - команда, которую вы хотите выполнить.

0
ответ дан 13 April 2017 в 15:24

Для полноты вы можете добиться аналогичного эффекта, установив бит setuid в разрешениях файла.

Небольшая хитрость заключается в том, что по соображениям безопасности setuid бит в скриптах игнорируется ядром, поэтому вам нужно скомпилировать небольшую программу-обертку в C и использовать ее для вызова вашего скрипта. Сохраните это как runscript.c:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

int main()
{
   setuid( 0 );
   system( "/path/to/script.sh" );

   return 0;
}

, затем скомпилируйте его с помощью

gcc runscript.c -o runscript

и установите бит setuid в исполняемом файле:

sudo chown root:root runscript
sudo chmod 4755 runscript

Это Также важно убедиться, что ваш сценарий доступен для записи только пользователю root, поскольку каждый, кто может изменить сценарий, сможет выполнять произвольные программы:

sudo chown root:root /path/to/script.sh
sudo chmod 0711 /path/to/script.sh

Вот статья, из которой я получил код программы-обертки: setuid для скриптов оболочки .

С точки зрения безопасности оба подхода - один с sudo и один с setuid - довольно плохи, но, вероятно, на домашней машине все будет в порядке. Разница в том, что каждый пользователь в системе сможет выполнить команду setuid, даже не находясь в файле sudoers. Также, очевидно, вам не нужно ставить перед командой префикс sudo.

0
ответ дан 13 April 2017 в 15:24

Используйте visudo для безопасной среды редактирования, чтобы редактировать файл sudoers. Этот скрипт является оберткой вокруг vi, которая также выполняет проверку синтаксиса при сохранении файла и не позволяет перезаписать действительный файл sudoers недействительным.

Добавьте строку, подобную этой:

username ALL= NOPASSWD: /path/to/your/script

«ALL =» имеет некоторую разработку, она указывает, что разрешение предоставляется, когда рассматриваемый пользователь входит в систему из любого места, локально (консоль или терминал) или удаленно (ssh и т. д.).

0
ответ дан 13 April 2017 в 15:24

Вам нужно будет добавить полный путь к программе, которую вы запускаете, в файл sudoers, а не в скрипт. Я предполагаю, что это PM-Hibernate, так:

john ALL=NOPASSWD: /usr/sbin/pm-hibernate
0
ответ дан 13 April 2017 в 15:24

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

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