Назад | Перейти на главную страницу

Как мне выполнить команду «sudo -i»

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

Если у меня в sudoers:

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 без пароля.

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

 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

Теперь это работает для Боба

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

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

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