Як запустити команду з sudo з певного шляху?


0

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

Це добре працює, я можу налаштувати кілька потрібних мені команд і обійти обмеження пароля (оскільки немає можливості вводити паролі під час роботи sudo) з NOPASSWDдирективою у sudoersфайлі. Але є проблема. Деякі сценарії, зокрема написані в деяких ... е, PHP-рамках ... очікують, що вони будуть запущені з певного каталогу, що вважається коренем проекту.

Цей каталог належить іншому користувачеві www-dataабо в apacheбільшості випадків. Гаразд, я можу дозволити боту запускати скрипт як цей користувач, але я не можу cdвиправити шлях у неінтерактивній сесії, оскільки це неможливо включити cdяк команду у sudoersфайл.

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

Чи знаєте ви спосіб подолати це?

Відповіді:


0

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

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.