PnX-SI / gn_module_export

Module GeoNature d'export
GNU General Public License v3.0
7 stars 10 forks source link

[1.5.0 - 1.5.1] BUG permissions lors des téléchargements #191

Closed maximetoma closed 1 year ago

maximetoma commented 1 year ago

Version GeoNature 2.12.3 Exports 1.5.0

Description du bug Erreur retournée : image

Le téléchargement ne veut pas se faire, me donne une erreur 403, avez-vous une idée du problème ? Je suis en admin avec les permissions admin

Logs Aucun log relevable....

camillemonchicourt commented 1 year ago

Y a rien dans les logs de GeoNature ?

gildeluermoz commented 1 year ago

C'est pas un PB de droits sur le répertoire où le fichier d'export est écrit ? Du genre apache n'a pas les droits. S'assurer qu'il y'a bien un Require all granted sur ce répertoire

maximetoma commented 1 year ago

@camillemonchicourt non rien de particulier qui s’inscrit quand je fais la manipulation

@gildeluermoz ci-joint mon fichier geonature.conf, je n'arrive pas à régler le pb et je suis pas très fort en apache :)

geonature.txt

mvergez commented 1 year ago

Salut ! Peut-être aussi voir si le dossier /home/geonatureadmin/geonature/backend/media/exports a les bons droits linux. Pour voir ça : ls -l /home/geonatureadmin/geonature/backend/media et voir à qui appartient le dossier exports et si l'utilisateur linux geonatureadmin a bien les droits. Cela permettra de voir aussi si le fichier d'export est présent :)

lpofredc commented 1 year ago

Bonjour @maximetoma, A minima, il semble y avoir un pb sur la config apache sur les lignes:

    <Location /home/geonatureadmin/geonature/backend/media/exports>
      Require all granted
    </Location>

Location concerne les chemins d'url, dans le cas présent, il s'agirait plutôt de Directory

    <Directory /home/geonatureadmin/geonature/backend/media/exports>
      Require all granted
    </Directory>
lpofredc commented 1 year ago

Par contre, ton fichier semble contenir d'anciennes config geonature.

Ton bloc

    # ========================== CONFIGURATION GEONATURE ==========================
    ServerName sep-geonature.reserves-naturelles.org
    # ServerAlias sep-geonature.reserves-naturelles.org
    DocumentRoot "/home/geonatureadmin/geonature/frontend/dist"

    IncludeOptional /etc/apache2/conf-available/geonature.conf
    IncludeOptional /etc/apache2/conf-available/usershub.conf

    ErrorLog "/var/log/apache2/geonature_error.log"
    CustomLog "/var/log/apache2/geonature_access.log" combined

    <Location /api>
      ProxyPass http://127.0.0.1:8000/api
      ProxyPassReverse  http://127.0.0.1:8000/api
      Require all granted
    </Location>

    <Location /home/geonatureadmin/geonature/backend/media/exports>
      Require all granted
    </Location>

devrait sans doute plutôt ressembler à ça:

# ========================== CONFIGURATION GEONATURE ==========================
    ServerName sep-geonature.reserves-naturelles.org

    IncludeOptional /etc/apache2/conf-available/geonature.conf
    IncludeOptional /etc/apache2/conf-available/taxhub.conf
    IncludeOptional /etc/apache2/conf-available/usershub.conf

    ErrorLog "/var/log/apache2/geonature_error.log"
    CustomLog "/var/log/apache2/geonature_access.log" combined
camillemonchicourt commented 1 year ago

Le vhost de GeoNature a été beaucoup amélioré et simplifié depuis la version 2.8.0. Le fichier geonature.conf doit être comme le template : https://github.com/PnX-SI/GeoNature/blob/master/install/assets/vhost_apache.conf, comme indique @lpofredc.

Comme on voit dans celui-ci, il fait appel et inclut le fichier de configuration généré et renseigné automatiquement : https://github.com/PnX-SI/GeoNature/blob/master/install/assets/geonature_apache.conf

Cela a été rappelé dans le changelog de la 2.12.0 :

Il est fortement conseillé d'utiliser la configuration Apache générée par défaut dans /etc/apache2/conf-available/geonature.conf et de l'inclure dans votre vhost (/etc/apache2/sites-available/geonature.conf et/ou /etc/apache2/sites-available/geonature-le-ssl.conf), en suivant la documentation dédiée

Le changelog de la version 1.4.0 du module Export indique aussi d'enlever la conf spécifique au chemin des fichiers exportés, ce que tu ne sembles pas non plus avoir fait :

Le dossier de stockage des exports a été modifié de geonature/backend/static/exports/ à geonature/backend/media/exports/. La configuration Apache fournie avec GeoNature 2.12 sert directement le dossier media sans passer par gunicorn. Si vous aviez modifié votre configuration spécifiquement pour le module d’export, il est recommandé de retirer cette partie spécifique au profit de la configuration générique de GeoNature.

maximetoma commented 1 year ago

Merci pour vos retours !

J'avais je crois gardé à l'époque la config précédente en adaptant le code, mais je n'ai pas saisi que on pouvait beaucoup le simplifier :)

Du coup j'ai d'un côté :

# /etc/apache2/sites-available/geonature.conf
ServerName sep-geonature.reserves-naturelles.org

IncludeOptional /etc/apache2/conf-available/geonature.conf
IncludeOptional /etc/apache2/conf-available/taxhub.conf
IncludeOptional /etc/apache2/conf-available/usershub.conf

ErrorLog "/var/log/apache2/geonature_error.log"
CustomLog "/var/log/apache2/geonature_access.log" combined

et

# /etc/apache2/conf-available/geonature.conf
# Alias: first have precedence, so static & media aliases must be defined before /geonature alias

Alias "/api/media" "/home/geonatureadmin/geonature/backend/media"
<Directory "/home/geonatureadmin/geonature/backend/media">
    Require all granted
    AllowOverride None
    Options -Indexes
</Directory>

Alias "/api/static" "/home/geonatureadmin/geonature/backend/static"
<Directory "/home/geonatureadmin/geonature/backend/static">
    Require all granted
    AllowOverride None
    Options -Indexes
</Directory>

# CUSTOM STATIC FILE
RewriteEngine On
# Define STATIC_FILE environment variable
RewriteRule "^/api/static/(.*)$" - [env=STATIC_FILE:$1,chain]
# Test if custom static file exists (not tested for non static file thanks to previous chain flag)
RewriteCond "/home/geonatureadmin/geonature/custom/%{ENV:STATIC_FILE}" -f
# If so, redirect to custom static file instead of default static file
RewriteRule "^/api/static/(.*)$" "/home/geonatureadmin/geonature/custom/$1" [L]
<Directory "/home/geonatureadmin/geonature/custom">
    Require all granted
    AllowOverride None
    Options -Indexes
</Directory>

AliasMatch "^(.*)$" "/home/geonatureadmin/geonature/frontend/dist$1"
<Directory "/home/geonatureadmin/geonature/frontend/dist">
    Require all granted
</Directory>

<Location "/api">
    ProxyPass http://127.0.0.1:8000/api
    ProxyPassReverse http://127.0.0.1:8000/api
    <IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE application/json
        AddOutputFilterByType DEFLATE application/geo+json
    </IfModule>
</Location>

# Location: last have precedence so next blocks must be located after /api location block
<Location "/api/media">
    ProxyPass !
</Location>
<Location "/api/static">
    ProxyPass !
</Location>

Pour le changelog d'Export, je crois de souvenir que je n'avais rien à modifier (je n'avais rien changé à la config de base)... Ou alors je n'ai pas compris...

@mvergez pour les permissions, j'ai

drwxrwxrwx 4 geonatureadmin geonatureadmin 4096  2 août  16:55 exports

Mais avec toutes ces modifications (en faisant un sudo systemctl reload apache2), j'ai toujours le même soucis...

maximetoma commented 1 year ago

Mon fichier geonature/config/exports_config.toml se résume à

## Nombre de jours après lequel les fichiers exportés sont supprimés automatiquement sur le serveur
nb_days_keep_file = 15
maximetoma commented 1 year ago

[EDIT] En redémarrant le service geonature_worker, les exports publics fonctionnent

Autrement, les exports privés restent avec la même erreur 403 Forbiden

Petite précision, l'erreur se fait après avoir sélectionné le format de fichier, validé la licence et cliquer sur "OK". Le fichier d'export n'est pas généré et le mail n'est pas envoyé

gildeluermoz commented 1 year ago

du coup je ne comprends pas si ton soucis est résolu.

Si ton geonature est en https, penses bien à vérifier que le  IncludeOptional /etc/apache2/conf-available/geonature.conf est présent dans le fichier de conf apache pour le https, par exemple /etc/apache2/sites-available/geonature-le-ssl.conf et pas seulement dans /etc/apache2/sites-available/geonature.conf

maximetoma commented 1 year ago

@gildeluermoz Non j'ai toujours le problème sur mes exports privés L'IncludeOptional est bien dans le fichier geonature-le-ssl.conf

camillemonchicourt commented 1 year ago

OK je viens de tester et de reproduire sur le serveur de DEMO. Quand un export n'est pas PUBLIC et que mon utilisateur est bien associé à l'export, j'ai la même erreur que tu as mentionné :

image

Donc ça semble un bug de la version 1.5.0 du module EXPORT...

Par contre je ne reproduis pas en production sur notre serveur du PNE.

TheoLechemia commented 1 year ago

Fixé par ce commit : https://github.com/PnX-SI/gn_module_export/pull/193/commits/100217734d80e7358f5ced908395b95f7ef3a184 a venir dans la 1.5.1 (et normal que sur notre Prod ça fonctionne, on est déjà sur la branche "hot-fixe 1.5"

maximetoma commented 1 year ago

Un grand merci @TheoLechemia ça fonctionne :D

camillemonchicourt commented 1 year ago

Une partie des soucis était liées au fait que la configuration Apache de cette instance n'avait pas été mis à jour. Une autre partie était un soucis de permissions corrigé dans la 1.5.2.