« Keycloak » : différence entre les versions
m ajout du serveur + partie nginx plus lisible |
mAucun résumé des modifications |
||
| (16 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
{{Infobox logiciel | |||
| sous-titre = Service d'authentifiation | |||
| localisation = [[Serveur:computing|Serveur computing]] | |||
| site officiel = https://www.keycloak.org/ | |||
| documentation = https://www.keycloak.org/documentation | |||
| utilisations = [[Nextcloud]], [[Mediawiki]], [[Synapse]], [[Misskey]], [[Forgejo]] | |||
| utilise = [[Nginx]], [[Certbot]], [[Postgresql]], [[Client FreeIPA]] | |||
| image = Icon keycloak.svg | |||
| configuration = <code>/usr/share/keycloak/conf/keycloak.conf</code> | |||
| port = 8127 | |||
| accès = https://auth.linarphy.net | |||
| service = [[Systemd]] | |||
}} | |||
[[Keycloak]] est le service disponible sur l'adresse [https://auth.linarphy.net suivante]. Il gère l'authentification des utilisateurs sur tous les autres services de l'architecture. | [[Keycloak]] est le service disponible sur l'adresse [https://auth.linarphy.net suivante]. Il gère l'authentification des utilisateurs sur tous les autres services de l'architecture. | ||
== Configuration actuelle == | == Configuration actuelle == | ||
Le service [[Nginx]] transfère les pages web du port '''8127''' (géré par Keycloak) vers le port '''443''' (https) sur le domaine <code> | Le service [[Nginx]] transfère les pages web du port '''8127''' (géré par Keycloak) vers le port '''443''' (https) sur le domaine <code>auth.linarphy.net</code> (serveur [[computing]]). Les données sont gérés par [[Postgresql]] via une base de donnée ayant pour nom '''keycloak''' et pour utilisateur '''keycloak'''. Cette instance stocké dans le dossier <code>/usr/share/keycloak/</code> tourne sur la version '''26.0.0''' avec '''openjdk-21.0.2''' (lui-même dans <code>/usr/share/openjdk/21/</code>). | ||
== | == Procédures == | ||
=== Prérequis === | === Installation === | ||
==== Prérequis ==== | |||
* [[Nginx]] | * [[Nginx]] | ||
* [[Postgresql]] | * [[Postgresql]] | ||
* [[Certbot]] | * [[Certbot]] | ||
* [[ | * [[Client FreeIPA]] | ||
==== Fichiers ==== | ==== Fichiers ==== | ||
La première étape consiste au téléchargement du service avec la commande < | La première étape consiste au téléchargement du service avec la commande <syntaxhighlight lang="bash" inline>curl -L https://github.com/keycloak/keycloak/releases/download/26.0.0/keycloak-26.0.0.tar.gz -o keycloak-26.0.0.tar.gz</syntaxhighlight> en tant qu'utilisateur '''root'''. Le lien est récupéré sur la page de [https://www.keycloak.org/downloads téléchargement]. Le fichier '''keycloak-26.0.0.tar.gz''' peut ensuite être extrait avec la commande <syntaxhighlight lang="bash" inline>tar -xf keycloak-26.0.0.tar.gz</syntaxhighlight> en tant qu'utilisateur '''root''' pour ensuite supprimer cette archive: <syntaxhighlight lang="bash" inline>rm keycloak-26.0.0.tar.gz</syntaxhighlight>. | ||
Le dossier peut ensuite être déplacé dans son emplacement final (<code>/usr/share/keycloak/</code>) avec la commande < | Le dossier peut ensuite être déplacé dans son emplacement final (<code>/usr/share/keycloak/</code>) avec la commande <syntaxhighlight lang="bash" inline>mv keycloak-26.0.0 /usr/share/keycloak</syntaxhighlight>(toujours en tant que '''root'''). | ||
==== Java ==== | ==== Java ==== | ||
Télécharger OpenJDK 21 avec la commande < | Télécharger OpenJDK 21 avec la commande <syntaxhighlight lang="bash" inline>curl -L {lien-targz-openjdk-21} -o openjdk-21.tar.gz</syntaxhighlight> en tant que '''root'''. Le lien vers l'archive est disponible [https://jdk.java.net/archive/ ici]. Puis extraire l'archive: <syntaxhighlight lang="bash" inline>tar -xf openjdk-21.tar.gz</syntaxhighlight> et supprimer l'archive téléchargée: <syntaxhighlight lang="bash" inline>rm openjdk-21.tar.gz</syntaxhighlight>. Si le dossier n'existe pas déjà, crée le dossier <code>/usr/share/openjdk/</code> avec la commande <syntaxhighlight lang="bash" inline>mkdir /usr/share/openjdk</syntaxhighlight> puis déplacer le dossier extrait vers son emplacement final: <syntaxhighlight lang="bash" inline>mv jdk-21.0.2 /usr/share/openjdk/21</syntaxhighlight>. | ||
Pour se lier au service '''LDAP''' du [[Freeipa-server|serveur FreeIPA]], il est nécessaire d'ajouter les clefs publics des certificats utilisés pour sécuriser la connexion. L’utilisation de la commande < | Pour se lier au service '''LDAP''' du [[Freeipa-server|serveur FreeIPA]], il est nécessaire d'ajouter les clefs publics des certificats utilisés pour sécuriser la connexion. L’utilisation de la commande <syntaxhighlight lang="bash" inline>/usr/share/openjdk/21/bin/keytool -v -import -file /etc/ipa/ca.crt -alias ipacrt -keystore /usr/share/openjdk/21/lib/security/cacerts</syntaxhighlight> permet d'effectuer cette opération (ajouter la clef public du certificat du serveur au stockage de clef public de l'installation de java qui va être utilisé par Keycloak). | ||
==== Permissions ==== | ==== Permissions ==== | ||
Le service s'exécutera avec un utilisateur particulier (et non '''root''') pour isoler le processus. Il est donc nécessaire de créer l'utilisateur local '''keycloak''' avec la commande < | Le service s'exécutera avec un utilisateur particulier (et non '''root''') pour isoler le processus. Il est donc nécessaire de créer l'utilisateur local '''keycloak''' avec la commande <syntaxhighlight lang="bash" inline>adduser --system --no-create-home --group keycloak</syntaxhighlight> en tant que '''root'''. La commande <syntaxhighlight lang="bash" inline>chown -R keycloak:keycloak /usr/share/keycloak/</syntaxhighlight> pour donner les permissions du dossier à ce nouvel utilisateur. | ||
Keycloak sera accessible via une connexion chiffré (https), et sa configuration nécessite l'accès à la clef privé et public utilisé pour cette connexion (comme [[Nginx]]). Pour protéger ces clefs et ne pas les rendre accessible à d'autres utilisateur que '''keycloak''', un hook (script) sera mis en place pour être exécuté par [[Certbot]]. Il va donc être nécessaire de créer le dossier <code>/usr/share/keycloak/certs</code> via la commande < | Keycloak sera accessible via une connexion chiffré (https), et sa configuration nécessite l'accès à la clef privé et public utilisé pour cette connexion (comme [[Nginx]]). Pour protéger ces clefs et ne pas les rendre accessible à d'autres utilisateur que '''keycloak''', un hook (script) sera mis en place pour être exécuté par [[Certbot]]. Il va donc être nécessaire de créer le dossier <code>/usr/share/keycloak/certs</code> via la commande <syntaxhighlight lang="bash" inline>mkdir /usr/share/keycloak/certs | ||
</syntaxhighlight> en tant que '''root''' (oui oui, pas '''keycloak''' pour le moment, c'est normal), puis de modifier ces permissions avec les commandes <syntaxhighlight lang="bash" inline>chown keycloak:keycloak /usr/share/keycloak/certs</syntaxhighlight> et <syntaxhighlight lang="bash" inline>chmod 500 /usr/share/keycloak/certs</syntaxhighlight>. Créer ensuite le fichier <code>/usr/share/keycloak/certs/hook.sh</code> toujours en tant que '''root''' avec l'éditeur de sont choix contenant le script: | |||
<syntaxhighlight lang="bash" line="1"> | <syntaxhighlight lang="bash" line="1"> | ||
#!/usr/bin/env sh | #!/usr/bin/env sh | ||
| Ligne 50 : | Ligne 65 : | ||
chmod 400 "${KEYCLOAK_CERT_DIR}/fullchain.pem" | chmod 400 "${KEYCLOAK_CERT_DIR}/fullchain.pem" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Exécuter la commande < | Exécuter la commande <syntaxhighlight lang="bash" inline>chmod +x /usr/share/keycloak/hook.sh</syntaxhighlight> pour permettre l'exécution du script. Les permissions de ce fichier ne vont pas être autrement modifié, le script ne sera exécuté que par l'utilisateur '''root'''. | ||
==== Configuration ==== | ==== Configuration ==== | ||
| Ligne 122 : | Ligne 137 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Puis créer un lien symbolique avec la commande < | Puis créer un lien symbolique avec la commande <syntaxhighlight lang="bash" inline> | ||
ln -s /etc/nginx/sites-available/auth.linarphy.net /etc/nginx/sites-enabled/auth.linarphy.net | |||
</syntaxhighlight>et tester la configuration via <syntaxhighlight lang="bash" inline>nginx -t</syntaxhighlight>. Si la configuration est valide, il est nécessaire de recharger le service systemd avec <syntaxhighlight lang="bash" inline>systemctl reload nginx</syntaxhighlight> et mettre en place le chiffrement ssl avec <syntaxhighlight lang="bash" inline>certbot --nginx --domain auth.linarphy.net --deploy-hook=/usr/share/keycloak/certs/hook.sh</syntaxhighlight>. | |||
Vérifier ensuite sur un navigateur l'accès au service sur le protocole https. | Vérifier ensuite sur un navigateur l'accès au service sur le protocole https. | ||
| Ligne 195 : | Ligne 212 : | ||
==== Base de donnée ==== | ==== Base de donnée ==== | ||
En tant qu'utilisateur '''postgres''', lancer la commande < | En tant qu'utilisateur '''postgres''', lancer la commande <syntaxhighlight lang="bash" inline>psql</syntaxhighlight> puis exécuter les commandes suivantes: | ||
* < | * <syntaxhighlight lang="postgresql-console" inline>CREATE DATABASE keycloak;</syntaxhighlight> | ||
* < | * <syntaxhighlight lang="postgresql-console" inline>CREATE USER keycloak WITH ENCRYPTED PASSWORD '{keycloak-postgresql-password}';</syntaxhighlight> | ||
* < | * <syntaxhighlight lang="postgresql-console" inline>GRANT ALL PRIVILEGES ON DATABASE keycloak TO keycloak;</syntaxhighlight> | ||
* < | * <syntaxhighlight lang="postgresql-console" inline>\c keycloak</syntaxhighlight> | ||
* < | * <syntaxhighlight lang="postgresql-console" inline>GRANT ALL ON SCHEMA public TO keycloak;</syntaxhighlight> | ||
* < | * <syntaxhighlight lang="postgresql-console" inline>\q</syntaxhighlight> | ||
==== Systemd ==== | ==== Systemd ==== | ||
Lancer la commande < | Lancer la commande <syntaxhighlight lang="bash" inline>systemctl edit --full --force keycloak.service</syntaxhighlight> pour écrire l'unité systemd suivante avec l'éditeur de votre choix ([[systemd]] utilise la variable d'environnement '''EDITOR'''): | ||
<syntaxhighlight lang="systemd" line="1"> | <syntaxhighlight lang="systemd" line="1"> | ||
[Unit] | [Unit] | ||
| Ligne 229 : | Ligne 246 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Puis | Puis créer un second fichier de configuration supplémentaire avec <syntaxhighlight lang="bash" inline>systemctl edit keycloak.service</syntaxhighlight> et y écrire: | ||
<syntaxhighlight lang="systemd" line="1"> | <syntaxhighlight lang="systemd" line="1"> | ||
| Ligne 236 : | Ligne 253 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Pour mieux organiser la configuration, modifier le nom du fichier de réécriture avec < | Pour mieux organiser la configuration, modifier le nom du fichier de réécriture avec <syntaxhighlight lang="bash" inline>mv /etc/systemd/system/keycloak.service.d/override.conf /etc/systemd/system/keycloak.service.d/env.conf</syntaxhighlight>. | ||
==== Configuration ==== | ==== Configuration ==== | ||
Toute cette étape sera suivie par l'utilisateur '''keycloak''' dans le dossier <code>/usr/share/keycloak/</code>. | Toute cette étape sera suivie par l'utilisateur '''keycloak''' dans le dossier <code>/usr/share/keycloak/</code>. | ||
D'abord, construisez la configuration avec la commande < | D'abord, construisez la configuration avec la commande <syntaxhighlight lang="bash" inline>./bin/kc.sh build</syntaxhighlight> jusqu'à attendre la fin, puis lancer une première fois keycloak avec <syntaxhighlight lang="bash" inline>./bin/kc.sh start</syntaxhighlight>. Une fois que le message ''(main) Installed features: [...]'' s'affiche, appuyer sur '''Ctrl+C''' pour arrêter le programme. | ||
Si tout allait bien, il aurait suffit de définir les variables d'environnement '''KC_BOOTSTRAP_ADMIN_USERNAME''' et '''KC_BOOTSTRAP_ADMIN_PASSWORD''' pour définir respectivement le nom d'utilisateur et le mot de passe de l'administrateur du service, puis de lancer les commandes précédentes. Malheureusement, le monde n'est pas parfait. Du coup il est nécessaire d'effectuer la commande < | Si tout allait bien, il aurait suffit de définir les variables d'environnement '''KC_BOOTSTRAP_ADMIN_USERNAME''' et '''KC_BOOTSTRAP_ADMIN_PASSWORD''' pour définir respectivement le nom d'utilisateur et le mot de passe de l'administrateur du service, puis de lancer les commandes précédentes. Malheureusement, le monde n'est pas parfait. Du coup il est nécessaire d'effectuer la commande <syntaxhighlight lang="bash" inline>./bin/kc.sh bootstrap-admin user</syntaxhighlight> puis de définir le nom d'utilisateur et le mot de passe de l'administrateur. | ||
==== Finalisation ==== | ==== Finalisation ==== | ||
Activer et lancer le service [[systemd]] en exécutant < | Activer et lancer le service [[systemd]] en exécutant <syntaxhighlight lang="bash" inline>systemctl enable keycloak</syntaxhighlight> puis <syntaxhighlight lang="bash" inline>systemctl start keycloak</syntaxhighlight>. | ||
=== Configuration post-installation === | ==== Configuration post-installation ==== | ||
==== Création du realm ==== | ===== Création du realm ===== | ||
Une fois connecté sur le nouveau site, cliquer sur le menu déroulant en haut à gauche ('''Keycloak''' master) et cliquer sur '''Create realm'''. Et définir son nom. C'est ce ''realm'' qui va relier l'authentification de tous les services. | Une fois connecté sur le nouveau site, cliquer sur le menu déroulant en haut à gauche ('''Keycloak''' master) et cliquer sur '''Create realm'''. Et définir son nom. C'est ce ''realm'' qui va relier l'authentification de tous les services. | ||
| Ligne 305 : | Ligne 322 : | ||
|On | |On | ||
|} | |} | ||
=== Mise à jour === | |||
==== Prérequis ==== | |||
Arrêter le service [[systemd]] '''keycloak.service'''. | |||
==== Sauvegarde ==== | |||
Création d'une sauvegarde de la base de donnée [[Postgresql]], avec la procédure de [[Postgresql#Sauvegarde d'une base de donnée|sauvegarde de donnée]] pour la base de donnée '''keycloak'''. | |||
Lire les différents [https://www.keycloak.org/docs/latest/upgrading/index.html#migration-changes guides de migration] entre la version installée et la version la plus récente de Keycloak sur le site officiel, et réaliser les opérations demandées. | |||
==== Téléchargement ==== | |||
Télécharger la nouvelle archive depuis le site officiel de keycloak, sur la [https://www.keycloak.org/downloads page de téléchargement] et réaliser la même procédure qu'à l'[[Keycloak#Fichiers|installation]]. | |||