Eu tenho um script bash em / var / www / html / exe. Esta pasta é de propriedade da www-data: www-data
O código PHP chama esse script, sendo executado como www-data. Eu testo usando sudo -u www-data script.sh
sudo tee:
Recebo permissão negada ao tentar escrever um arquivo do script, por exemplo como um teste:
echo 10 | sudo tee tttt
Solicita a senha do sudo www-data. Isso não vai funcionar.
Arquivo Temp:
Eu também tentei escrever um arquivo temporário para a pasta / home / ubuntu, também permissão negada
Nopasswd: Eu também poderia adicionar www-data para não exigir senha no arquivo sudoers. Isso é ruim porque requer uma configuração personalizada extra. A implantação é automatizada e isso aumenta a complexidade do código de implantação.
Shell:
Eu tentei várias combinações de execução em um shell diferente, por exemplo $ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
Estes resultaram na solicitação da senha do sudo www-data, não podem funcionar.
Sudo:
Eu não acho que deveria ter (nem eu quero) executar o shell como sudo. Além disso, este é um serviço e exigiria uma alteração no código que não possuo.
Intervenção manual:
Muitas das respostas que encontrei sugerem coisas como "faça login como root". Não há humanos por perto para fazer isso: o código é construído e implantado automaticamente em vários ambientes.
Solução alternativa do Hacky:
Escreva um cpp exe que grava o arquivo e o chama do script. Eu posso escrever arquivos assim sem problemas. Mas isso parece horrível e adiciona complexidade para construir / implantar.
Depois de ler dezenas de páginas sobre como o Linux lida com permissões e shells, ainda não estou certo de que entendo completamente como shells e subshells interagem com permissões. Eu suspeito que há uma maneira de fazer isso, mas como?