Pages: 1
Bonjour,
Je rencontre un problème avec Piwigo qui concerne l'écriture des logs.
Voici le message d'erreur complet :
Fatal error: Uncaught RuntimeException: The file could not be written to.
Check that appropriate permissions have been set. in Logger.class.php:134
Stack trace:
#0 Logger.class.php(306): Logger->open()
#1 Logger.class.php(295): Logger->write()
#2 Logger.class.php(202): Logger->log()
#3 functions.inc.php(2971): Logger->info()
#4 include/page_tail.php(45): pwg_unique_exec_begins()
#5 about.php(47): include('...')
#6 {main} thrown in include/Logger.class.php on line 134
Le problème est en lien avec SELinux qui est activé et qui empêche l'écriture de logs mais je n'arrive pas à trouver quel est ce fichier de logs en question, dans les fichiers php mentionnés je ne trouve pas cette info.
Je ne peux pas non plus accéder à la partie admin du site à cause de la même erreur.
Seule solution désactiver SELinux mais j'aimerais éviter...
Merci d'avance pour votre aide.
Version de Piwigo: 16.4.0
Version de PHP: 8.5.9
Version de MySQL: 12.3.2-MariaDB
Hors ligne
Bonjour,
Le fichier error_log se trouve à la racine de Piwigo.
Hors ligne
Le message d'erreur (The file could not be written to) associé à SELinux actif est cohérent avec un souci de contexte de sécurité SELinux, distinct des permissions Unix classiques (chmod/chown). Un dossier peut avoir des droits 755/775 corrects tout en étant refusé en écriture par SELinux si son contexte n'est pas le bon.
1. Confirmer que SELinux est bien en cause
sudo ausearch -m avc -ts recent
ou, selon la distribution :
sudo journalctl -t setroubleshoot --since "1 hour ago"
Si ces commandes affichent des lignes "denied" faisant référence à Apache/PHP-FPM et au chemin de _data/logs, la cause est confirmée.
2. Vérifier le contexte actuel du dossier
ls -Zd _data/logs
Le contexte attendu pour un dossier accessible en écriture par le serveur web est généralement httpd_sys_rw_content_t. Si vous voyez autre chose (souvent httpd_sys_content_t, qui est lecture seule), c'est la cause du blocage.
3. Corriger le contexte, de façon persistante
Un simple chcon ne survit pas à un restorecon global ni à une réinstallation de règles SELinux. Mieux vaut déclarer la règle avant d'appliquer :
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/chemin/vers/piwigo/_data(/.*)?" sudo restorecon -Rv /chemin/vers/piwigo/_data
(remplacer /chemin/vers/piwigo par le chemin réel d'installation)
Si la commande semanage n'existe pas, installer le paquet policycoreutils-python-utils (ou équivalent selon la distribution).
4. Vérifier ensuite
Une fois la commande appliquée, retenter l'accès à l'admin Piwigo. Si le souci persiste, il peut aussi concerner d'autres sous-dossiers accessibles en écriture par Piwigo (_data/cache, _data/upload, _data/tmp, galleries/, plugins/, etc.) — la même commande semanage/restorecon peut être répétée en ciblant _data dans son ensemble comme ci-dessus, qui couvre tous ses sous-dossiers.
Éviter de désactiver SELinux entièrement (setenforce 0) : c'est une solution de facilité qui supprime une couche de sécurité importante plutôt que de corriger le contexte concerné.
Dites-moi si les commandes d'audit remontent bien des "denied" sur _data/logs, ça confirmera le diagnostic avant d'aller plus loin.
J'ai ouvert une issue [Github] Piwigo issue #2580 car le problème met en évidence le défaut.
Dernière modification par Gotcha (2026-09-04 21:26:37)
Hors ligne
Merci beaucoup pour vos différents retours.
Je confirme que SELinux est bien en cause, j'ai bien des "denied" avec le retour de la commande
sudo ausearch -m avc -ts recent
Voici le contexte actuel de _data/logs (on voit en effet qu'il n'y a qu'un accès en lecture)
system_u:object_r:httpd_log_t:s0 _data/logs/
Lorsque je tente de changer le contexte de manière persistante, curieusement cela ne semble pas faire effet. Je n'ai pourtant pas de message d'erreur.
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/htdocs/piwigo/_data/(/.*)?" sudo restorecon -Rv /var/www/htdocs/piwigo/_data
En effet en listant le contexte je garde ce que j'avais précédemment :
sudo ls -Zd _data/logs/ system_u:object_r:httpd_log_t:s0 _data/logs/
Je continue de chercher de mon côté, si je trouve une solution, je la publierai ici
Hors ligne
La commande suivante a résolu mon problème :
sudo chcon -R -t httpd_sys_rw_content_t _data/logs
Cette fois-ci cela a bien été mis à jour :
sudo ls -Zd _data/logs/ system_u:object_r:httpd_sys_rw_content_t:s0 _data/logs
Mais un éventuel restorecon me remet les droits précédent.
Avec semanage j'avais testé un -m pour modifier une politique déjà présente sans plus de succès.
Je crains que cela ne soit pas persistent, mais bon dans l'immédiat cela fonctionne : j'ai de nouveau accès à la partie admin.
Encore un grand merci pour l'aide
Hors ligne
Pages: 1