Voici la marche à suivre pour protéger l'application OpenUpload via LemonLDAP, et ainsi profiter du SSO.
Méthode générique
Patcher OpenUpload
La première étape est d'appliquer le patch suivant sur les source d'OpenUpload (patch intégré au rpm disponible sur notre dépôt)
Activer l'authentification Apache
Le patch ci-dessus ajoute le support de l'authentification apache, ainsi qu'un nouveau plugin pour l'authentification (qui utilise l'authentification apache pour valider les login, et un annuaire LDAP pour récupérer les informations des utilisateurs et des groupes). Il faut activer ce plugin en éditant le fichier de conf www/config/inc.php
$CONFIG['auth'] = 'httpldap'; # Which variable contains user login ? $CONFIG['httpldap']['login'] = 'HTTP_AUTH_USER'; # LDAP configuration, same as the standard ldap plugin [...]
Configurer un virtualhost sur apache
Pour simplifier les règles dans LemonLDAP, il est conseillé de désactiver les alias sur le domaine primaire pour OpenUpload (comme pour toutes les applications protégées par LemonLDAP). Il faut donc éditer /etc/httpd/conf.d/openupload.conf (ou équivalent), supprimer la ligne
Alias /openupload /usr/share/openupload/www
, et créer un virtualhost dont la racine (DocumentRoot) est /usr/share/openupload/www. Par exemple:
<Directory /usr/share/openupload/www> Options None Options +Includes AllowOverride Options AddType application/x-httpd-php .php php_admin_value open_basedir /usr/share/openupload:/var/lib/openupload php_admin_flag file_uploads on php_admin_flag magic_quotes Off php_admin_flag magic_quotes_gpc Off php_admin_value upload_max_filesize 800M php_admin_value post_max_size 800M php_admin_value memory_limit 800M php_admin_value max_execution_time 0 php_admin_value upload_tmp_dir /var/lib/openupload/tmp php_admin_value session.save_path /var/lib/openupload/tmp order deny,allow deny from all allow from all #allow from 127.0.0.1 </Directory> # Hote virtuel OpenUpload <VirtualHost 0.0.0.0:80> ServerName upload.domain.tld DocumentRoot /usr/share/openupload/www RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] RewriteRule ^/(.*|$) https://%{HTTP_HOST}/$1 [L,R] </VirtualHost> <VirtualHost 0.0.0.0:443> ServerName upload.domain.tld DocumentRoot /usr/share/openupload/www PerlHeaderParserHandler My::Package ErrorDocument 403 http://auth.domain.tld/?lmError=403 ErrorDocument 500 http://auth.domain.tld/?lmError=500 SSLEngine on RewriteEngine on RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) RewriteRule .* - [F] </VirtualHost>
Sur SME/iPasserelle
Sur SME/iPasserelle, les réglages sont plus simple, puisque les patches sont intégrés au rpms. Il suffit de lancer ces commandes, après avoir installé le paquet smeserver-openupload:
db configuration setprop openupload Authentication LemonLDAP AliasOnPrimary disabled db domains set upload.$(db configuration get DomainName) domain Content Primary DocumentRoot /usr/share/openupload/www Description 'OpenUpload' LemonLDAP enabled Nameservers internet TemplatePath WebAppVirtualHost signal-event domain-create upload.$(db configuration get DomainName) mkdir -p /etc/e-smith/templates-custom/usr/share/openupload/www/config.inc.php cat <<'EOF' > /etc/e-smith/templates-custom/usr/share/openupload/www/config.inc.php/10paths $CONFIG['WWW_SERVER'] = 'http://upload.{"$DomainName";}'; $CONFIG['WWW_ROOT'] = ''; $CONFIG['INSTALL_ROOT'] = '/usr/share/openupload/'; $CONFIG['DATA_PATH'] = '/var/lib/openupload'; EOF signal-event webapps-update
Déclarer le virtualhost dans LemonLDAP
Sur la console d'administration de LemonLDAP, il faut déclarer ce nouveau virtualhost (dans l'exemple ci-dessus: upload.domain.tld), et créer des règles. Plusieurs types de règles sont possible en fonction de ce que vous cherchez à faire
Règles pour accès totalement privé
Si vous voulez qu'OpenUpload soit totalement fermé, et que seules les personnes authentifiées puissent télécharger et envoyer des fichier, alors une seule règle suffit:
- default
- Commentaire:
- Expression: default
- Règle: accept
- logout
- Commentaire: 01logout
- Expression: ^/(?i)(index\.php)?\?(.*)?a(ction)?=logout
- Règle: logout_app
La première règle autorisera l'accès à quiconque a une session valide sur LemponLDAP. Il est bien entendu possible de modifier cette règle, par exemple: $groups =~ /\bupload\b/ n'autoriserait que les membres du groupe upload. La seconde règle interceptera les demande de déconnexion pour renvoyer les utilisateurs authentifiés sur le portail.
Règles pour un accès public
Si vous voulez maintenir l'accès aux téléchargements publique, tout en autorisant uniquement les utilisateurs authentifiés à uploader, il faut plus de règles:
- Protection contre des requêtes contenant deux actions:
- Commentaire: 01deny_double_action
- Expression: (a|action)=.*(a|action)=.*
- Règle: deny
- Autoriser les téléchargements et les suppressions:
- Commentaire: 10unprotect_dl
- Expression: (a|action)=[dgr]
- Règle: unprotect
- Autoriser l'accès aux templates
- Commentaire: 12unprotect_templates
- Expression: ^/templates/
- Règle: unprotect
- Autoriser l'accès au captcha
- Commentaire: 13unprotect_captcha
- Expression: ^/plugins/captcha\.php
- Règle: unprotect
- Autoriser l'accès à l'index (nécessaire pour le téléchargement)
- Commentaire: 14unprotect_index
- Expression: ^/index\.php$
- Règle: unprotect
- Interception du lien de logout
- Commentaire: 20logout
- Expression: (a|action)=logout
- Règle: logout_app
- Redirection du login
- Commentaire: 21login
- Expression: (a|action)=login
- Règle: logout_app http://upload.domain.tld
- Défaut:
- Expression: default
- Règle: $groups =~ \bopenupload\b/ (placez ici la règle que vous voulez pour l'accès à l'application)
Ces règles permettrons aux utilisateurs externes de télécharger les fichiers sans s'authentifier, et n'autorisera que les membres du groupes openupload à se loguer pour envoyer des fichiers. Dans cet exemple, l'application est accessible sur l'URL http://upload.domain.tld/