Вопрос: Как я использую определенную команду «sudo -i»


Мне нужно запустить important_script.sh как с sudo -i без пароля.

Если у меня есть в суде:

apache ALL = (root) NOPASSWD:    /blah/important_script.sh

и запустите «sudo /blah/important_script.sh» Я могу запустить его без пароля.

Однако, если я запустил «sudo -i /blah/important_script.sh», мне нужно ввести пароль для apache.

Если я изменю строку в sudoers, чтобы:

apache ALL = (root) NOPASSWD:ALL

Я могу запустить команду «sudo -i /blah/important_script.sh» без пароля.

Но я хочу иметь возможность запускать только команды /blah/important_script.sh, а не ВСЕ.

Итак, как я установил, что только /blah/important_script.sh можно запустить с помощью sudo -i без пароля.


5
2018-06-05 04:58


Источник


Вы отправили sudo сообщение об ошибке? - Iain
Вы можете просто отказаться -i, - Michael Hampton♦


Ответы:


Когда я пытаюсь это сделать, я получаю сообщение об ошибке, которое дает ключ к проблеме

 Sorry, user bob is not allowed to execute '/bin/bash -c /blah/important_script.sh' as root on host.

Обратите внимание, что нам отказывают в доступе к команде /bin/bash -c... которая отличается от той, которую мы указали в файле sudoers /blah/important_script..., Когда вы сообщаете sudo разрешить пользователю запускать определенную команду, они должны использовать точную командную строку, как указано в sudoers, поэтому нам необходимо соответствующим образом изменить sudoers.

bob   ALL=(root) NOPASSWD: /bin/bash -c /blah/important_script.sh

Это теперь работает для bob

$ sudo -i /bin/bash -c /blah/important_script.sh

Так почему это так? Ну, справочная страница для sudo имеет ответ

-I [команда]   Параметр -i (имитировать начальный логин) запускает оболочку, указанную в записи базы данных пароля целевого пользователя в качестве оболочки входа. Это означает, что файлы ресурсов, зависящие от пользователя, такие как .profile или .login, будут прочитаны оболочкой. Если задана команда, она передается оболочке для выполнения через опцию -c оболочки. Если команда не указана, выполняется интерактивная оболочка ...


8
2018-06-05 06:22



Спасибо за ответ. Для дальнейшего использования «sudo -i / bin / bash -c /blah/important_script.sh» следует заменить на «sudo -i /blah/important_script.sh», поскольку «/ bin / bash -c» будет добавлен « sudo -i " - gilbertasm