« Keycloak » : différence entre les versions
m ajout du serveur + partie nginx plus lisible |
Replace some code tags by syntaxhighlight inline |
||
| Ligne 18 : | Ligne 18 : | ||
==== 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 51 : | ||
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 123 : | ||
</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 198 : | ||
==== 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 232 : | ||
</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 239 : | ||
</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 === | ||