« 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). | [[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. |
Version du 14 octobre 2024 à 23:30
Keycloak est le service disponible sur l'adresse suivante. Il gère l'authentification des utilisateurs sur tous les autres services de l'architecture.
Configuration actuelle
Le service Nginx de computing transfère les pages web du port 8127 (géré par Keycloak) vers le port 443 (https) sur le domaine wiki.linarphy.net
. 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 /usr/share/keycloak/
tourne sur la version 26.0.0 avec openjdk-21.0.2 (lui-même dans /usr/share/openjdk/21/
).
Installation
Prérequis
Procédure
Fichiers
La première étape consiste au téléchargement du service avec la commande 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
en tant qu'utilisateur root. Le lien est récupéré sur la page de téléchargement. Le fichier keycloak-26.0.0.tar.gz peut ensuite être extrait avec la commande tar -xf keycloak-26.0.0.tar.gz
en tant qu'utilisateur root pour ensuite supprimer cette archive: rm keycloak-26.0.0.tar.gz
.
Le dossier peut ensuite être déplacé dans son emplacement final (/usr/share/keycloak/
) avec la commande mv keycloak-26.0.0 /usr/share/keycloak
(toujours en tant que root).
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 adduser --system --no-create-home --group keycloak
en tant que root. La commande chown -R keycloak:keycloak /usr/share/keycloak/
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 /usr/share/keycloak/certs
via la commande mkdir /usr/share/keycloak/certs
en tant que root (oui oui, pas keycloak pour le moment, c'est normal), puis de modifier ces permissions avec les commandes chown keycloak:keycloak /usr/share/keycloak/certs
et chmod 500 /usr/share/keycloak/certs
. Créer ensuite le fichier /usr/share/keycloak/certs/hook.sh
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 chmod +x /usr/share/keycloak/hook.sh
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 /etc/nginx/sites-available/auth.linarphy.net
contenant la configuration Nginx suivante:
server { server_name auth.linarphy.net; listen 80; listen [::]:80; }
Puis créer un lien symbolique avec la commande ln -s /etc/nginx/sites-available/auth.linarphy.net /etc/nginx/sites-enabled/auth.linarphy.net
et tester la configuration via nginx -t
. Si la configuration est valide, il est nécessaire de recharger le service systemd avec systemctl reload nginx
et mettre en place le chiffrement ssl avec certbot --nginx --domain auth.linarphy.net --deploy-hook=/usr/share/keycloak/certs/hook.sh
.
Vérifier ensuite sur un navigateur l'accès au service sur le protocole https.