cp: não é possível criar o arquivo regular: permissão negada
On Fevereiro 15, 2021 by admin Estou executando um script PHP no meu servidor Apache e a partir do script preciso copiar alguns arquivos (para executar um script Bash que copia arquivos). Posso copiar para um diretório /tmp
sem problemas, mas quando quero copiar para /tmp/foo
, recebo este erro:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
mesmo que as permissões para o diretório /tmp
e /tmp/foo
estejam definidas com o mesmo valor.
Você sabe qual é o problema?
Comentários
Resposta
/tmp
Diretório tem todas as permissões (leitura / gravação) para todos os usuários. mas se você criou /tmp/foo
por sua própria conta, ele tem permissões apenas para você! se quiser torná-lo gravável para outros usuários (ou programas), altere sua permissão com este comando:
chmod 777 /tmp/foo
Se você tiver quaisquer outros arquivos anteriores a este diretório, adicione o sinalizador -R
ao comando acima.
Atualização: Use este comando para alterar o /tmp/foo
proprietário do seu para o usuário padrão do Apache:
sudo chown www-data:www-data /tmp/foo -R
também verifique a configuração do apache2 para ver qual usuário ele possui para executar os scripts php.
Comentários
- Obrigado pela resposta, mas não funciona. Eu configurei as permissões para / tmp / foo para 777 e ainda recebo o mesmo erro. Quando executo o script como um usuário normal, tudo bem. Mas o problema é quando eu o executo a partir de um script php
- Posso ver seus scripts, por favor !? e você está usando php ou php-fpm? o seu problema é, por padrão, php usando o usuário configurado do Apache para executar scripts, enquanto você cria
/tmp/foo
com sua própria conta! Vou atualizar minha resposta, verifique novamente, por favor. - script php: <? Php shell_exec (" bash /path/to/script.sh)? > e script.sh é #! / bin / bash cp /my/folder/file.txt / tmp / foo
- Como posso descobrir qual usuário o apache usa para executar scripts php? Quando coloco no meu comando php script bash whoami, recebo " apache "
- você pode me fornecer o saída deste comando:
ls -alh /tmp | grep foo
se o diretório tiverfoo
nome.
whoami
ell /tmp
/tmp
é sempre para root por padrão! os resultados dos dois comandos não estão relacionados neste caso, porque/tmp
tem todas as permissões para todos os usuáriostmp
é para root, mas não para/tmp/foo
OP pode estar executando o script como um usuário diferente com/tmp/foo
ao qual pertence.