Возможный дубликат:
Как запустить приложение с помощью sudo без пароля ?
Я создал сценарий, который выполняет различные системные задачи, которые я запускаю регулярно, но мне приходится использовать sudo для запуска сценария, несмотря на то, что он принадлежит мне, потому что он выполняет команды с привилегиями root. Как я могу добавить make sudo, чтобы я мог запускать этот файл без необходимости вводить пароль каждый раз, когда я его запускаю?
Я знаю, что есть вопросы относительно запуска команд без пароля, но я не смог найти ни одного вопроса о запуске файла без пароля.
Я знаю об угрозах безопасности, но я дома за компьютером, которому доверяю.
Я добавил john ALL = NOPASSWD: /home/john/.script/hibernate.sh
в мои / etc / sudoers
, но при запуске команды sudo sh / home / john / .script / hibernate.sh
он все еще запрашивает мой пароль ...
Вам нужен тег «NOPASSWD».
Используйте visudo и установите что-то вроде этого в конце файла:
username ALL = NOPASSWD: / bin / echo
Замените имя пользователя вашим именем пользователя, а / bin / echo - команда, которую вы хотите выполнить.
Для полноты вы можете добиться аналогичного эффекта, установив бит 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
.
Используйте visudo
для безопасной среды редактирования, чтобы редактировать файл sudoers. Этот скрипт является оберткой вокруг vi
, которая также выполняет проверку синтаксиса при сохранении файла и не позволяет перезаписать действительный файл sudoers недействительным.
Добавьте строку, подобную этой:
username ALL= NOPASSWD: /path/to/your/script
«ALL =» имеет некоторую разработку, она указывает, что разрешение предоставляется, когда рассматриваемый пользователь входит в систему из любого места, локально (консоль или терминал) или удаленно (ssh и т. д.).
Вам нужно будет добавить полный путь к программе, которую вы запускаете, в файл sudoers, а не в скрипт. Я предполагаю, что это PM-Hibernate, так:
john ALL=NOPASSWD: /usr/sbin/pm-hibernate