Как запустить команду с sudo с определенного пути?

486
Victor Schröder

Я настраиваю некоторую автоматизацию с помощью ботов с дистанционным управлением. Крайне важно, чтобы эти боты имели только права на выполнение определенных команд (я не могу открыть слишком много разрешений sudoersдля разрешения произвольных команд).

Это работает хорошо, я могу настроить несколько команд, которые мне нужны, и обойти ограничение пароля (потому что нет возможности вводить пароли при sudoзагрузке) с помощью NOPASSWDдирективы в sudoersфайле. Но есть проблема. Некоторые сценарии, особенно те, которые написаны в некоторых ... э-э, средах PHP ... ожидаются для запуска из определенного каталога, который считается корнем проекта.

Этот каталог принадлежит другому пользователю www-dataили apacheбольшую часть времени. Хорошо, я могу авторизовать бота для запуска сценария от имени этого пользователя, но не могу найти cdправильный путь в неинтерактивном сеансе, поскольку его невозможно включить cdв sudoersфайл в качестве команды .

Обычно то, что я хотел бы сделать, это что-то вроде cd /var/www/path/to/app && php whatever.php --some args, но я не могу найти способ настроить этот шаблон в sudoersфайле, кажется, это невозможно.

Вы знаете способ обойти это?

0

1 ответ на вопрос

0
nStensen

Единственное, что мне известно, это создание небольшого сценария оболочки, содержащего ваш код, а затем разрешение пользователю / боту выполнить сценарий.

sudo cd /var/www/path/to/app && php whatever.php --some args 

не будет работать, потому что это две команды, а sudo позволяет вам запустить одну. но если вы поместите это в небольшой скрипт (скажем, /var/www/scripts/something/script.sh):

#!/bin/bash cd /var/www/path/to/app && php whatever.php --some args 

Вы можете запустить его с помощью

sudo /var/www/scripts/something/script.sh