Prochaine révision
|
Révision précédente
|
tuto:webapps:llng:openupload [05/01/2011 14:09] dani créée |
tuto:webapps:llng:openupload [21/09/2013 12:30] (Version actuelle) dani [Règles pour un accès public] |
====== Protection d'OpenUpload par LemonLDAP ====== | |
| |
Voici la marche à suivre pour protéger l'application [[http://openupload.sourceforge.net|OpenUpload]] via LemonLDAP, et ainsi profiter du SSO. | Voici la marche à suivre pour protéger l'application [[http://openupload.sourceforge.net|OpenUpload]] via LemonLDAP, et ainsi profiter du SSO. |
| |
| ====== Méthode générique ====== |
| |
===== Patcher OpenUpload ===== | ===== Patcher OpenUpload ===== |
La première étape est d'appliquer le patch suivant sur les source d'OpenUpload (patch intégré au rpm disponible [[http://repo.firewall-services.com/|sur notre dépôt]]) | La première étape est d'appliquer le patch suivant sur les source d'OpenUpload (patch intégré au rpm disponible [[http://repo.firewall-services.com/|sur notre dépôt]]) |
<hidden Patch pour OpenUpload 0.4.2> | <hidden Patch pour OpenUpload 0.4.2> |
<code diff> | <file diff openupload-0.4.2-httpldap.patch> |
diff -Nur -x '*.orig' -x '*.rej' openupload-0.4.2/lib/main.inc.php mezzanine_patched_openupload-0.4.2/lib/main.inc.php | diff -Nur -x '*.orig' -x '*.rej' openupload-0.4.2/lib/main.inc.php mezzanine_patched_openupload-0.4.2/lib/main.inc.php |
--- openupload-0.4.2/lib/main.inc.php 2010-11-20 11:39:47.000000000 +0100 | --- openupload-0.4.2/lib/main.inc.php 2010-11-20 11:39:47.000000000 +0100 |
+++ mezzanine_patched_openupload-0.4.2/lib/main.inc.php 2011-01-05 13:13:52.000000000 +0100 | +++ mezzanine_patched_openupload-0.4.2/lib/main.inc.php 2011-03-18 09:11:21.000000000 +0100 |
@@ -485,8 +485,14 @@ | @@ -485,8 +485,14 @@ |
$this->db->free(); | $this->db->free(); |
- redirect('?action=login'); | - redirect('?action=login'); |
+ /* Check if HTTP auth is used */ | + /* Check if HTTP auth is used */ |
+ if (($this->config['remote']['trust']=='yes') && | + if (($this->config['auth']=='httpldap') && |
+ isset($_SERVER{$this->config['remote']['header_login']})) { | + isset($_SERVER{$this->config['httpldap']['login']})) { |
+ $this->user->authenticate(); | + $this->user->authenticate(); |
+ } else { | + } else { |
diff -Nur -x '*.orig' -x '*.rej' openupload-0.4.2/lib/modules/auth/httpldap.inc.php mezzanine_patched_openupload-0.4.2/lib/modules/auth/httpldap.inc.php | diff -Nur -x '*.orig' -x '*.rej' openupload-0.4.2/lib/modules/auth/httpldap.inc.php mezzanine_patched_openupload-0.4.2/lib/modules/auth/httpldap.inc.php |
--- openupload-0.4.2/lib/modules/auth/httpldap.inc.php 1970-01-01 01:00:00.000000000 +0100 | --- openupload-0.4.2/lib/modules/auth/httpldap.inc.php 1970-01-01 01:00:00.000000000 +0100 |
+++ mezzanine_patched_openupload-0.4.2/lib/modules/auth/httpldap.inc.php 2011-01-05 13:12:28.000000000 +0100 | +++ mezzanine_patched_openupload-0.4.2/lib/modules/auth/httpldap.inc.php 2011-03-18 09:18:49.000000000 +0100 |
@@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ |
+<?php | +<?php |
+ function init() { | + function init() { |
+ $this->config = app()->config['ldap']; | + $this->config = app()->config['ldap']; |
+ $this->remote = app()->config['remote']; | + $this->http = app()->config['httpldap']; |
+ $this->ufield = isset($this->config['uid'])?$this->config['uid']:'uid'; | + $this->ufield = isset($this->config['uid'])?$this->config['uid']:'uid'; |
+ $this->gfield = isset($this->config['gid'])?$this->config['gid']:'gid'; | + $this->gfield = isset($this->config['gid'])?$this->config['gid']:'gid'; |
+ | + |
+ /* Which HTTP header contains the user login ? */ | + /* Which field contains the user login ? */ |
+ if(empty($this->remote['header_login'])) $this->remote['header_login'] = 'HTTP_AUTH_USER'; | + $this->http['login'] = isset($this->http['login'])?$this->http['login']:'HTTP_AUTH_USER'; |
+ | + |
+ /* cannot add or edit users for now */ | + /* cannot add or edit users for now */ |
+ function authenticate($login,$password) { | + function authenticate($login,$password) { |
+ $result = false; | + $result = false; |
+ if ($_SERVER{$this->remote['header_login']} == $login) | + if ($_SERVER{$this->http['login']} == $login) |
+ $result = true; | + $result = true; |
+ return $result; | + return $result; |
diff -Nur -x '*.orig' -x '*.rej' openupload-0.4.2/lib/user.inc.php mezzanine_patched_openupload-0.4.2/lib/user.inc.php | diff -Nur -x '*.orig' -x '*.rej' openupload-0.4.2/lib/user.inc.php mezzanine_patched_openupload-0.4.2/lib/user.inc.php |
--- openupload-0.4.2/lib/user.inc.php 2010-11-20 11:39:47.000000000 +0100 | --- openupload-0.4.2/lib/user.inc.php 2010-11-20 11:39:47.000000000 +0100 |
+++ mezzanine_patched_openupload-0.4.2/lib/user.inc.php 2011-01-05 13:12:28.000000000 +0100 | +++ mezzanine_patched_openupload-0.4.2/lib/user.inc.php 2011-03-18 09:11:21.000000000 +0100 |
@@ -69,7 +69,12 @@ | @@ -69,7 +69,12 @@ |
return true; | return true; |
// if it's logging in save user and pwd | // if it's logging in save user and pwd |
- if (isset($_POST['username'])) { | - if (isset($_POST['username'])) { |
+ if ((app()->config['remote']['trust']=='yes') && | + if ((app()->config['auth']=='httpldap') && |
+ isset($_SERVER{app()->config['remote']['header_login']})) { | + isset($_SERVER{app()->config['httpldap']['login']})) { |
+ $username = $_SERVER{app()->config['remote']['header_login']}; | + $username = $_SERVER{app()->config['httpldap']['login']}; |
+ $password = $_SERVER{app()->config['remote']['header_login']}; | + $password = $_SERVER{app()->config['httpldap']['login']}; |
+ } | + } |
+ elseif (isset($_POST['username'])) { | + elseif (isset($_POST['username'])) { |
+?> | +?> |
diff -Nur -x '*.orig' -x '*.rej' openupload-0.4.2/www/config.inc.php.example mezzanine_patched_openupload-0.4.2/www/config.inc.php.example | diff -Nur -x '*.orig' -x '*.rej' openupload-0.4.2/www/config.inc.php.example mezzanine_patched_openupload-0.4.2/www/config.inc.php.example |
--- openupload-0.4.2/www/config.inc.php.example 2011-01-05 13:15:06.000000000 +0100 | --- openupload-0.4.2/www/config.inc.php.example 2011-03-18 09:19:02.000000000 +0100 |
+++ mezzanine_patched_openupload-0.4.2/www/config.inc.php.example 2011-01-05 13:12:28.000000000 +0100 | +++ mezzanine_patched_openupload-0.4.2/www/config.inc.php.example 2011-03-18 09:11:21.000000000 +0100 |
@@ -44,6 +44,11 @@ | @@ -44,6 +44,14 @@ |
# $CONFIG['auth'] = 'ldap'; | # $CONFIG['auth'] = 'ldap'; |
$CONFIG['auth'] = 'default'; | $CONFIG['auth'] = 'default'; |
| |
+/* If you trust your web server, you can use it to authenticate users */ | +/************************************************************ |
+$CONFIG['remote']['trust'] = 'no'; | + * HTTP/LDAP detail configuration options * |
+/* This is the HTTP header which contains user login */ | + ************************************************************/ |
+$CONFIG['remote']['header_login'] = 'HTTP_AUTH_USER'; | + |
| +# $CONFIG['auth'] = 'httpldap'; |
| +/* This is the field which contains user login */ |
| +# $CONFIG['httpldap']['login'] = 'HTTP_AUTH_USER'; |
+ | + |
| |
/* TRANSLATION MODULE */ | /* TRANSLATION MODULE */ |
#$CONFIG['translator']='none'; | #$CONFIG['translator']='none'; |
</code> | </file> |
</hidden> | </hidden> |
| |
| |
<code php> | <code php> |
# Should OpenUpload trust apache authentication | |
$CONFIG['remote']['trust'] = 'yes'; | $CONFIG['auth'] = 'httpldap'; |
| |
# Which variable contains user login ? | # Which variable contains user login ? |
$CONFIG['remote']['header_login'] = 'HTTP_AUTH_USER'; | $CONFIG['httpldap']['login'] = 'HTTP_AUTH_USER'; |
| |
# LDAP configuration, same as the standard ldap plugin | # LDAP configuration, same as the standard ldap plugin |
</code> | </code> |
| |
===== Déclarer le virtualhost dans LemonLDAP ===== | ====== 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: |
| |
| <code bash> |
| 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 |
| </code> |
| |
| ====== 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 | 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é ==== | ===== 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: | 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: |
| |
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. | 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 publique ==== | ===== 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: | 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: |
| |
* login | * Protection contre des requêtes contenant deux actions: |
* Commentaire: 01login | * Commentaire: 01deny_double_action |
* Expression: ^/(?i)(index\.php)?\?(.*)?a(ction)?=login | * Expression: (a|action)=.*(a|action)=.* |
* Règle: accept (ou autre règle) | * Règle: deny |
* logout: | * Autoriser les téléchargements et les suppressions: |
* Commentaire: 02logout | * Commentaire: 10unprotect_dl |
* Expression: ^/(?i)(index\.php)?\?(.*)?a(ction)?=logout | * 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 | * Règle: logout_app |
* default | * Redirection du login |
* Commentaire: | * Commentaire: 21login |
| * Expression: (a|action)=login |
| * Règle: logout_app http://upload.domain.tld |
| * Défaut: |
* Expression: default | * Expression: default |
* Règle: unprotect | * 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. | |
| |
| 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/ |
| |
| |