« Keycloak » : différence entre les versions

Création de la page Keycloak
 
Ajout d'étape d'installation
Ligne 2 : Ligne 2 :


== Configuration actuelle ==
== Configuration actuelle ==
Le service [[Nginx (computing)|Nginx de computing]] transfère les pages web du port '''8127''' (géré par [[Keycloak]]) vers le port '''443''' (https) sur le domaine <code>wiki.linarphy.net</code>. 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>).
Le service [[Nginx (computing)|Nginx de computing]] transfère les pages web du port '''8127''' (géré par [[Keycloak]]) vers le port '''443''' (https) sur le domaine <code>wiki.linarphy.net</code>. 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>).


Ligne 15 : Ligne 16 :


==== Fichiers ====
==== Fichiers ====
La première étape consiste au téléchargement du service avec la commande <code>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</code> 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 <code>tar -xf keycloak-26.0.0.tar.gz</code> en tant qu'utilisateur '''root''' pour ensuite supprimer cette archive: <code>rm keycloak-26.0.0.tar.gz</code>.
La première étape consiste au téléchargement du service avec la commande <code>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</code> 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 <code>tar -xf keycloak-26.0.0.tar.gz</code> en tant qu'utilisateur '''root''' pour ensuite supprimer cette archive: <code>rm keycloak-26.0.0.tar.gz</code>.


Ligne 20 : Ligne 22 :


==== 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 <code>adduser --system --no-create-home --group keycloak</code> en tant que '''root'''. La commande <code>chown -R keycloak:keycloak /usr/share/keycloak/</code> pour donner les permissions du dossier à ce nouvel utilisateur.
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 <code>adduser --system --no-create-home --group keycloak</code> en tant que '''root'''. La commande <code>chown -R keycloak:keycloak /usr/share/keycloak/</code> 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 (computing)]]). 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 <code>mkdir /usr/share/keycloak/certs</code> en tant que '''root''' (oui oui, pas '''keycloak''' pour le moment, c'est normal). Crée 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:
[[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 (computing)]]). 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 <code>mkdir /usr/share/keycloak/certs</code> en tant que '''root''' (oui oui, pas '''keycloak''' pour le moment, c'est normal), puis de modifier ces permissions avec les commandes <code>chown keycloak:keycloak /usr/share/keycloak/certs</code> et <code>chmod 500 /usr/share/keycloak/certs</code>. 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:
 
#!/usr/bin/env sh
# adapted from https://gist.github.com/Sternerson/file-ssl-deploy-hook-L1
KEYCLOAK_CERT_DIR=/usr/share/keycloak/certs
umask 077 # the certificate are not world readable during the copying
cp "${RENEWED_LINEAGE}/privkey.pem" "${KEYCLOAK_CERT_DIR}/privkey.pem"
cp "${RENEWED_LINEAGE}/fullchain.pem" "${KEYCLOAK_CERT_DIR}/fullchain.pem"
chown keycloak:keycloak "${KEYCLOAK_CERT_DIR}/privkey.pem"
chown keycloak:keycloak "${KEYCLOAK_CERT_DIR}/fullchain.pem"
chmod 400 "${KEYCLOAK_CERT_DIR}/privkey.pem"
chmod 400 "${KEYCLOAK_CERT_DIR}/fullchain.pem"
 
Exécuter la commande <code>chmod +x /usr/share/keycloak/hook.sh</code> 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 ====
 
db=postgres
db-username=keycloak
db-password={keycloak-postgresql-password}
db-url=jdbc:postgresql://localhost/keycloak
health-enabled=true
metrics-enabled=true
https-certificate-file=${kc.home.dir}/certs/fullchain.pem
https-certificate-key-file=${kc.home.dir}/certs/privkey.pem
hostname=auth.linarphy.net
proxy-headers=xforwarded
https-port=8127
 
==== Nginx ====
 
Créer le fichier <code>/etc/nginx/sites-available/auth.linarphy.net</code> contenant la configuration [[Nginx (computing)|Nginx]] suivante:
 
server {
  server_name auth.linarphy.net;
  listen 80;
  listen [::]:80;
}
 
Puis créer un lien symbolique avec la commande <code>ln -s /etc/nginx/sites-available/auth.linarphy.net /etc/nginx/sites-enabled/auth.linarphy.net</code> et tester la configuration via <code>nginx -t</code>. Si la configuration est valide, il est nécessaire de recharger le service systemd avec <code>systemctl reload nginx</code> et mettre en place le chiffrement ssl avec <code>certbot --nginx --domain auth.linarphy.net --deploy-hook=/usr/share/keycloak/certs/hook.sh</code>.
 
Vérifier ensuite sur un navigateur l'accès au service sur le protocole https.