Как запустить файл с помощью 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