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

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

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

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

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

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

4 ответа

Решение

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

Добавьте такую ​​строку:

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

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

Для полноты вы можете добиться аналогичного эффекта, установив бит 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,

Вам нужен тег "NOPASSWD".

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

имя пользователя ALL=NOPASSWD: /bin/echo

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

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

john ALL=NOPASSWD: /usr/sbin/pm-hibernate
Другие вопросы по тегам