Como executar um comando com sudo de um determinado caminho?

0

Estou configurando alguma automação com bots controlados remotamente. É imperativo que esses bots tenham exatamente as permissões para executar certos comandos (não consigo abrir muito as permissões no sudoers para permitir comandos arbitrários).

Ele funciona bem, eu posso configurar os vários comandos que preciso e contornar a limitação de senha (porque não há oportunidade de digitar senhas quando sudo ing) com a diretiva NOPASSWD no arquivo sudoers . Mas há um problema. Alguns scripts, especialmente aqueles escritos em algumas estruturas PHP, ... esperam ser executados a partir de um determinado diretório, que é considerado a raiz do projeto.

Esse diretório é de propriedade de outro usuário, www-data ou apache na maioria das vezes. Ok, posso autorizar o bot a executar o script como esse usuário, mas não posso cd para o caminho correto em uma sessão não interativa, porque não é possível incluir cd como um comando no sudoers file.

Normalmente, o que eu faço é algo como cd /var/www/path/to/app && php whatever.php --some args , mas não consigo encontrar uma maneira de configurar esse padrão no arquivo sudoers , parece não ser possível.

Você conhece uma maneira de contornar isso?

    
por Victor Schröder 07.02.2017 / 14:12

1 resposta

0

O único trabalho que eu conheço seria criar um pequeno script de shell contendo seu código e permitir que o usuário / bot execute o script.

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

não funcionará porque são dois comandos e o sudo permite que você execute um. mas se você colocar isso em um pequeno script (digamos /var/www/scripts/something/script.sh):

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

Você pode executá-lo usando

sudo /var/www/scripts/something/script.sh
    
por 07.02.2017 / 15:21