Voltar para blog

Como resolver erro mkdir permission denied no phpMyAdmin com diagnóstico de owner e open_basedir

24/02/2025 · 2 min · HestiaCP

Compartilhar

O erro mkdir(): Permission denied no phpMyAdmin normalmente aparece quando o PHP tenta criar diretório temporário e não possui permissão efetiva de escrita. No meu ambiente, a causa não era apenas chmod, mas combinação de owner inconsistente e política de caminho no PHP-FPM.

Sintoma observado

Diagnóstico passo a passo

Descobrir usuário do pool FPM:

ps aux | grep php-fpm

Validar caminho temporário usado pelo PHP:

php -i | grep -E 'upload_tmp_dir|sys_temp_dir|open_basedir'

Validar permissões do diretório:

ls -ld /tmp
ls -ld /var/lib/php/sessions

Correção aplicada

No meu caso, corrigi owner/group do diretório de trabalho e garanti permissão compatível com o usuário de execução:

chown -R www-data:www-data /var/lib/php/sessions
chmod 1733 /var/lib/php/sessions

Se o upload temp estiver customizado para outro caminho, ajuste esse caminho.

Verificação de open_basedir

Mesmo com permissão correta, open_basedir pode bloquear acesso ao diretório. Valide e inclua caminho permitido no pool/site.

Exemplo de ajuste (conceitual):

php_admin_value[open_basedir] = /home/site/web:/tmp:/var/lib/php/sessions

Após alteração:

systemctl restart php8.1-fpm
systemctl reload nginx

Validação final

  1. reabrir phpMyAdmin;
  2. tentar import pequeno e depois arquivo maior;
  3. revisar logs PHP-FPM e webserver para confirmar ausência de novos denies.

Evidências de log que eu coleto no diagnóstico

No PHP-FPM:

journalctl -u php8.1-fpm -n 120 --no-pager | grep -Ei 'mkdir|permission|open_basedir'

No Nginx/Apache:

grep -Ei 'phpmyadmin|permission denied|mkdir' /var/log/nginx/error.log | tail -n 50
grep -Ei 'phpmyadmin|permission denied|mkdir' /var/log/apache2/error.log | tail -n 50

Esses trechos entram no dossiê de incidente para comprovar causa raiz e ação corretiva aplicada.

Casos adicionais que já tratei

Diretório existe, mas com SELinux bloqueando escrita

Quando SELinux está Enforcing, permissões POSIX podem parecer corretas e mesmo assim a operação falha.

Validação:

sestatus
ausearch -m avc -ts recent | tail -n 30

Correção de contexto (exemplo):

semanage fcontext -a -t httpd_sys_rw_content_t '/var/lib/php/sessions(/.*)?'
restorecon -Rv /var/lib/php/sessions

Sessão em partição lotada

Se a partição do temp/sessions está sem espaço ou sem inode, o erro de\nmkdir pode aparecer mascarado.

df -h
df -i

Checklist preventivo

  1. manter upload_tmp_dir explícito em ambiente multi-PHP;
  2. padronizar owner/group de diretórios de sessão;
  3. revisar open_basedir em novos pools/sites;
  4. monitorar logs de FPM após upgrades de painel/PHP.

Conclusão

mkdir permission denied no phpMyAdmin precisa de diagnóstico de execução real do PHP (usuário, diretório e política). Ajustar só chmod 777 mascara o problema e aumenta risco. A correção correta é alinhar owner, permissões e restrição de caminho.

CC BY-NC

Este post está licenciado sob CC BY-NC.

Comentários

Participe da discussão abaixo.