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

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

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

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

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

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

1 ответ

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

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
Другие вопросы по тегам