cp: impossible de créer un fichier normal: Autorisation refusée
On février 15, 2021 by admin Jexécute un script PHP sur mon serveur Apache et à partir du script, jai besoin de copier certains fichiers (pour exécuter un script Bash qui copie les fichiers). Je peux copier dans un répertoire /tmp
sans problème, mais lorsque je veux copier vers /tmp/foo
, alors jobtiens cette erreur:
cp: cannot create regular file "/tmp/foo/file.txt": Permission denied
même si les autorisations pour le répertoire /tmp
et /tmp/foo
sont définies à la même valeur.
Savez-vous quel est le problème?
Commentaires
Réponse
/tmp
Annuaire a toutes les autorisations (lecture / écriture) pour tous les utilisateurs. mais si vous avez créé /tmp/foo
par votre propre compte, il a ses permissions rien que pour vous! si vous souhaitez le rendre accessible en écriture pour dautres utilisateurs (ou programmes), modifiez son autorisation avec cette commande:
chmod 777 /tmp/foo
Si vous avez tout autre fichier dans ce répertoire, ajoutez lindicateur -R
à la commande ci-dessus.
Mise à jour: Utilisez cette commande pour changer le propriétaire de /tmp/foo
par lutilisateur par défaut dApache:
sudo chown www-data:www-data /tmp/foo -R
veuillez également vérifier votre configuration apache2 pour voir quel utilisateur il a pour exécuter les scripts php.
Commentaires
- Merci pour la réponse, mais cela ne fonctionne pas. Jai défini les autorisations pour / tmp / foo sur 777 et jobtiens toujours la même erreur. Lorsque jexécute le script en tant quutilisateur normal, tout va bien. Mais le problème est que je lexécute à partir dun script php
- Puis-je voir vos scripts sil vous plaît !? et utilisez-vous php ou php-fpm? votre problème est, par défaut php en utilisant lutilisateur configuré par apache pour exécuter des scripts, alors que vous avez créé
/tmp/foo
par votre propre compte! Je mettrai à jour ma réponse, vérifiez-la à nouveau sil vous plaît. - script php: <? Php shell_exec (" bash /path/to/script.sh)? > et script.sh est #! / bin / bash cp /my/folder/file.txt / tmp / foo
- Comment puis-je trouver quel utilisateur apache utilise pour exécuter des scripts php? Quand je mets à mon script php la commande bash whoami alors jobtiens " apache "
- pouvez-vous me donner le sortie de cette commande:
ls -alh /tmp | grep foo
si le répertoire a un nomfoo
.
whoami
etll /tmp
/tmp
est toujours pour root par défaut! les résultats des deux commandes ne sont pas liés dans ce cas, car/tmp
a toutes les permissions pour tous les utilisateurstmp
est pour root, mais pas pour/tmp/foo
OP peut exécuter le script en tant quutilisateur différent avec/tmp/foo
appartient.