7.5 KiB
Interface Web de gestion LDAP
Nous avons fait le choix de ne pas utiliser FusionDirectory principalement pour des questions de sureté car avec FusionDirectory il est très simple de tout casser. Le services que nous allons utilisé restreint ce que la personne peux casser.
L'interface que nous allons utilisé et une version légèrement modifié de ce projet sous Licence MIT donc réutilisable / modifiable à souhait.
Cette interface permet aussi aux utilisateurs non admin de changer de mot de passe.
Le conteneur
Numéro 115 (Beta)
Interface réseau
- eth0 : vmbr1 / VLAN 30 / IP 10.0.2.15 / GW 10.0.2.254
Le proxy
/root/.gitconfig
[http]
proxy = http://10.0.0.252:3128
[https]
proxy = https://10.0.0.252:3128
/etc/apt/apt.conf.d/01proxy
Acquire::http {
Proxy "http://10.0.0.252:9999";
};
Il vous faut mettre en place le certificat SSL pour LDAP. La démarche et la même que dans la partie LDAP.
Installation
git clone https://github.com/kakwa/ldapcherry
cd ldapcherry
apt-get install python-ldap python-pip
pip install --proxy http://10.0.2.252:3128 cherrypy mako pyyaml
export SYSCONFDIR=/etc
export DATAROOTDIR=/usr/share/
python setup.py install
Configuration
Modification des fichiers de configuration et modification de l'interface web.
/etc/ldapcherry/attributes.yml
cn:
description: "Prénom"
display_name: "Prénom"
type: string
weight: 10
backends:
ldap: cn
sn:
description: "Nom de famille"
display_name: "Nom"
search_displayed: True
weight: 20
type: string
backends:
ldap: sn
given:
description: "Prénom & Nom"
display_name: "Nom d'affichage"
search_displayed: True
type: string
weight: 30
backends:
ldap: displayName
email:
description: "Email"
display_name: "Email"
search_displayed: True
type: email
weight: 40
backends:
ldap: mail
uid:
description: "UID de l'utilisateur"
display_name: "UID"
search_displayed: True
key: True
type: string
weight: 50
backends:
ldap: uid
password:
description: "Mot de passe de l'utilisateur"
display_name: "Mot de passe"
weight: 31
self: True
type: password
backends:
ldap: userPassword
mailaccountactif:
description: "YES ou NO"
display_name: "Mail Actif"
search_displayed: True
weight: 60
type: string
autofill:
function: lcMailActif
args:
- 'YES'
backends:
ldap: mailaccountactif
mailaccountquota:
description: "2147483648 par défaut"
display_name: "Mail Quota"
search_displayed: True
weight: 61
type: string
autofill:
function: lcMailQuota
args:
- '2147483648'
backends:
ldap: mailaccountquota
cloudaccountactif:
description: "YES or NO"
display_name: "Cloud Actif"
search_displayed: True
weight: 70
type: string
autofill:
function: lcCloudActif
args:
- 'YES'
backends:
ldap: cloudaccountactif
cloudaccountquota:
description: "5GB par défaut"
display_name: "Cloud Quota"
search_displayed: True
weight: 71
type: string
autofill:
function: lcCloudQuota
args:
- '5GB'
backends:
ldap: cloudaccountquota
gitaccountactif:
description: "YES or NO"
display_name: "Git Actif"
search_displayed: True
weight: 80
type: string
autofill:
function: lcGitActif
args:
- 'YES'
backends:
ldap: gitaccountactif
/etc/ldapcherry/ldapcherry.ini
[global]
server.socket_host = '10.0.2.15'
server.socket_port = 80
server.thread_pool = 8
request.show_tracebacks = False
log.error_handler = 'syslog'
log.access_handler = 'none'
log.level = 'info'
tools.sessions.on = True
tools.sessions.timeout = 10
[attributes]
attributes.file = '/etc/ldapcherry/attributes.yml'
[roles]
roles.file = '/etc/ldapcherry/roles.yml'
[backends]
ldap.module = 'ldapcherry.backend.backendLdap'
ldap.display_name = 'My Ldap Directory'
ldap.uri = 'ldap://alpha.ldap.sessionkrkn.fr'
ldap.ca = '/etc/ldap/ca_certs.pem'
ldap.starttls = 'on'
ldap.checkcert = 'off'
ldap.binddn = 'cn=admin,dc=krhacken,dc=org'
#ldap.binddn = 'cn=writer,ou=system,dc=krhacken,dc=org'
ldap.password = '8PizMOVqhDwSVChJwNy8Xcb1rPzDEuYbwXdd'
ldap.timeout = 1
ldap.groupdn = 'ou=krhacken,ou=group,dc=krhacken,dc=org'
ldap.userdn = 'ou=krhacken,ou=people,dc=krhacken,dc=org'
ldap.user_filter_tmpl = '(uid=%(username)s)'
ldap.group_filter_tmpl = '(member=uid=%(username)s,ou=krhacken,ou=people,dc=krhacken,dc=org)'
ldap.search_filter_tmpl = '(|(uid=%(searchstring)s*)(sn=%(searchstring)s*))'
ldap.group_attr.member = "%(dn)s"
ldap.dn_user_attr = 'uid'
# Ajouter les classes nécessaire en cas de création de nouveau service
ldap.objectclasses = 'person, organizationalPerson, inetOrgPerson, mailaccountkrhacken, cloudaccountkrhacken gitaccountkrhacken'
[ppolicy]
ppolicy.module = 'ldapcherry.ppolicy.simple'
min_length = 8
min_upper = 1
min_digit = 1
[auth]
auth.mode = 'or'
[resources]
templates.dir = '/usr/share/ldapcherry/templates/'
[/static]
tools.staticdir.on = True
tools.staticdir.dir = '/usr/share/ldapcherry/static/'
/etc/ldapcherry/roles.yml
admin:
display_name: AdminSys
description: Administrateur total de l'annuaire LDAP
LC_admins: True
backends_groups:
ldap:
- cn=adminsys,ou=krhacken,ou=group,dc=krhacken,dc=org
webmestre:
display_name: Webmestre
description: Webmestre des services
LC_admins: True
backends_groups:
ldap:
- cn=webmestre,ou=krhacken,ou=group,dc=krhacken,dc=org
club:
display_name: Membre du Club
description: Membre du Bureau
backends_groups:
ldap:
- cn=krhacken,ou=krhacken,ou=group,dc=krhacken,dc=org
ext:
display_name: Personne extérieure
description: Membre Actif
backends_groups:
ldap:
- cn=ext,ou=krhacken,ou=group,dc=krhacken,dc=org
Interface Web
Placer le contenu du dossier sources dans /usr/share/ldapcherry/
Mise en place
Mise en place de HAProxy et de NGINX pour l'accès à l'interface et mise en place d'un daemon systemd pour le démarrage automatique de l'interface Web.
Dans le conteneur Nginx
/etc/nginx/sites-available/ldapui
server {
listen 80;
server_name ldapui.krhacken.org;
location / {
proxy_pass http://10.0.2.15:80/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
sh ~/deploy-webhost.sh ldapui
Dans le conteneur HAProxy
Obtention du certificat
certbot certonly --webroot -w /home/hasync/letsencrypt-requests/ -d ldapui.krhacken.org
sh ~/install-certs.sh
Daemon Systemd
/etc/systemd/system/ldapui.service
[Unit]
Description=LDAP WebUI
Requires=ldapui.service
After=ldapui.service
[Service]
Restart=always
ExecStart=ldapcherryd -c /etc/ldapcherry/ldapcherry.ini -D -p /etc/ldapcherry/proc.pid
ExecStop=kill -9 `cat /etc/ldapcherry/proc.pid`
[Install]
WantedBy=multi-user.target
systemctl enable ldapui.service
systemctl start ldapui.service
L'interface de gestion LDAP est désormais accessible à l'adresse https://ldapui.sessionkrkn.fr