В /usr/local/bin
У меня есть следующий сценарий под названием sdown
/usr/local/bin$ cat sdown
#!/bin/bash
if [ $# -lt 1 ];
then
echo "no time set"
else
sudo shutdown -h $1
fi
Разрешений 788: -rwxr-xr-- user user sdown
Дело в том, что если я запускаю скрипт, он запрашивает пароль sudo:
/usr/local/bin$ sdown 13:37
[sudo] password for user:
Чтобы сделать мою жизнь еще лучше, я бы не хотел вводить пароль для выключения компьютера. Я думаю, что есть возможности, которые я мог бы поискать:
shutdown
команда без запроса прав sudo. (файл sudoers или около того ...?)Наверное, первый способ проще, и я могу это сделать на моей частной машине. Однако мне интересно, что, если я попаду в другую ситуацию. Хотя это теоретически, я бы хотел изучить передовой опыт.
Интересно, лучше ли предоставить разрешение для конкретного сценария, который я пишу и, следовательно, знать, что он делает, а что нет, вместо удаления защиты паролем sudo для полной команды (в данном случае shutdown
. Это возможно?
Также в этом сценарии, я полагаю, я должен рассмотреть возможность внедрения кода путем некоторых манипуляций со сценарием. Я думаю, поэтому мне следует изменить владельца и группу на root и просто разрешить выполнение, но не предоставлять доступ для чтения и записи другим пользователям.
(Или только для группы в случае более конкретных решений.) Но как насчет возможности того, что кто-то обменяется полным файлом на некоторые из своих и, следовательно, получит права sudo?
Первое: вы почти наверняка тратите свои усилия.
Прочтите справочную страницу для shutdown
в вашей системе: Аргумент времени является обязательным для каждой реализации, которую я когда-либо видел.
Если вы попытаетесь запустить shutdown -h
без споров о времени он будет кричать на вас:
[mgraziano@monitor ~]$ sudo shutdown -h
Password:
usage: shutdown [-] [-h | -p | -r | -k] [-o [-n]] time [warning-message ...]
Однако, чтобы ответить на ваш вопрос:
Опция 1: Разрешение выполнения команды выключения без запроса прав sudo
Либо явно разрешите завершение работы с NOPASSWD
вариант (читать man sudoers
для информации) или добавьте своего пользователя в группу, которой разрешено завершение работы (обычно operator
).
Вариант 2: Найдите далеко, чтобы предоставить sudo разрешение для скрипта, чтобы я мог вставить sudo туда.
Вы не можете сделать это так, как думаете, потому что sudo
не работает так - разрешения предоставляются пользователям.
Лучшее, что вы могли сделать, это разрешить запуск сценария с помощью sudo
, но это ничего не даст вам по сравнению с вариантом 1 (и, как вы упомянули, откроет вам некоторые возможные дыры в безопасности в вашем скрипте, поскольку вы позволяете ему запускаться от имени пользователя root).