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

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

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

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

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

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

Используйте 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