<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
<title><![CDATA[ ThysTips - Blog IT ]]></title>
<description><![CDATA[ Blog informatique de passionnés ]]></description>
<link>https://thys.tips</link>
<image>
    <url>https://thys.tips/favicon.png</url>
    <title>ThysTips - Blog IT</title>
    <link>https://thys.tips</link>
</image>
<lastBuildDate>mar., 17 mars 2026 07:22:54 +0100</lastBuildDate>
<atom:link href="https://thys.tips" rel="self" type="application/rss+xml"/>
<ttl>60</ttl>

    <item>
        <title><![CDATA[ Installation de Arch Linux ]]></title>
        <description><![CDATA[ Aujourd&#39;hui je dois réinstaller mon système suite quelques problèmes techniques. Je fais chacun de mes installations de Arch Linux avec quelques petites modifications pour explorer de nouvelles divers approches. Nous allons voir ensemble cette l&#39;installation.


Spécifications

 * Système de fichier: BTRFS au dessus de LUKS2 (chiffrement)
 * Gestionnaire ]]></description>
        <link>https://thys.tips/installation-de-arch-linux/</link>
        <guid isPermaLink="false">6701848c07ee5ad958319d08</guid>
        <category><![CDATA[ Linux ]]></category>
        <dc:creator><![CDATA[ ThysTips ]]></dc:creator>
        <pubDate>mar., 26 nov. 2024 21:18:44 +0100</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>Aujourd'hui je dois réinstaller mon système suite quelques problèmes techniques. Je fais chacun de mes installations de Arch Linux avec quelques petites modifications pour explorer de nouvelles divers approches. Nous allons voir ensemble cette l'installation.</p><h2 id="sp%C3%A9cifications">Spécifications</h2><ul><li>Système de fichier: BTRFS au dessus de LUKS2 (chiffrement)</li><li>Gestionnaire de boot: systemd-boot</li><li>Type de démarrage: UEFI</li></ul><h2 id="mat%C3%A9riel">Matériel</h2><p>Comme je réalise régulièrement des installations de différents OS j'utilise un <a href="https://www.iodd.shop/IODD-ST400-USB-30-SSD-externe-crypte-y-compris-SSD?ref=thys.tips" rel="noreferrer">IODD  ST400</a> sur lequel j'ajoute simplement mes fichiers ISO et me permettant de créer des lecteurs CD virtuels via USB.</p><p>En ce qui concerne la machine sur laquelle je fais faire cette installation il s'agit d'un <a href="https://frame.work/fr/fr/products/laptop16-diy-amd-7040?ref=thys.tips">Framework Laptop 16</a>:</p>
<ul>
<li>AMD Ryzen™ 9 7940HS</li>
<li>64Go RAM DDR5</li>
<li>2x2To SSD</li>
<li>Radeon™ RX 7700S</li>
</ul>
<p>Cette installation sera donc pour les processeurs AMD, avec la configuration pour une carte graphique AMD et sur le premier SSD.</p><h2 id="connexion-au-wifi">Connexion au Wifi</h2><p>Afin de vous connecter au wifi nous allons utiliser la <code>iwd</code>.</p><p>Dans un premier temps vous devez récupérer le nom de votre carte réseau, dans mon cas il s'agit de <code>wlan0</code>:</p>
<pre><code class="language-bash"># iwctl station list
</code></pre>
<p>Ensuite vous pouvez vous connecter à votre réseau:</p>
<pre><code class="language-bash"># iwctl station &lt;carte reseau&gt; connect &lt;SSID&gt;
</code></pre>
<h2 id="stockage">Stockage</h2><p>Afin de pouvoir procéder à l'installation nous devons commencer par préparer le disque sur lequel mettre notre système.</p><h3 id="cr%C3%A9ation-des-partitions">Création des partitions</h3>
<p>Vous pouvez identifier ce disque :</p>
<pre><code class="language-bash"># lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
loop0         7:0    0 794.4M  1 loop /run/archiso/airootfs
sda           8:0    1 931.5G  0 disk
└─sda1        8:1    1 931.5G  0 part
sr0          11:0    1   1.1G  0 rom  /run/archiso/bootmnt
nvme0n1     259:4    0   1.9T  0 disk
</code></pre>
<p>Ici mon disque est <code>nvme0n1</code>.</p>
<p>Maintenant que le disque est identifié (assurez-vous qu'il s'agit du bon) nous allons supprimer la table de partition actuellement existente:</p>
<pre><code class="language-bash">sgdisk --zap-all /dev/nvme0n1
</code></pre>
<p>Ensuite nous allons définir notre table de partition enn y incluant des labels. Ayant beaucoup de RAM et un disque SSD je ne vais pas mettre de SWAP sur mon disque. Il n'y aura donc que 2 partitions :</p>
<pre><code class="language-bash">sgdisk --clear --new=1:0:+512MiB --typecode=1:ef00 --change-name=1:EFI --new=2:0:0 --typecode=2:8300 --change-name=2:cryptsystem /dev/nvme0n1
</code></pre>
<p>La première partition sera utilisée pour le boot EFI et la deuxième pour le système.</p>
<p>Nous pouvons vérifier la table de partition :</p>
<pre><code class="language-bash"># fdisk -l /dev/nvme0n1
Disk /dev/nvme0n1: 1.86 TiB, 2048408248320 bytes, 4000797360 sectors
Disk model: WD PC SN740 SDDPTQE-2T00
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 33857BEA-76EC-43B4-AAD5-4743FCF68B43

Device           Start        End    Sectors  Size Type
/dev/nvme0n1p1    2048    1050623    1048576  512M EFI System
/dev/nvme0n1p2 1050624 4000797326 3999746703  1.9T Linux filesystem
</code></pre>
<p>Ensuite procédons à la création de notre partition chiffrée :</p>
<pre><code class="language-bash">cryptsetup luksFormat --type luks2 --align-payload=8192 -s 256 -c aes-xts-plain64 /dev/disk/by-partlabel/cryptsystem
</code></pre>
<p>Puis ouvrir le conteneur chiffré :</p>
<pre><code class="language-bash">cryptsetup open /dev/disk/by-partlabel/cryptsystem system
</code></pre>
<h3 id="cr%C3%A9ation-des-syst%C3%A8me-de-fichiers">Création des système de fichiers</h3>
<p>Nous allons procéder au formatage des partitions, BTRFS pour le partition systèmè et vfat pour la partition EFI.</p>
<h4 id="syst%C3%A8me">Système</h4>
<pre><code class="language-bash">mkfs.btrfs --label system /dev/mapper/system
</code></pre>
<p>Maintenant il faut définir un layout pour BTRFS afin de pouvoir gérer correctement la fonction de snapshots du système de fichier par la suite. Voici mon layout :</p>
<table>
<thead>
<tr>
<th>Sous volume</th>
<th>Point de montage</th>
</tr>
</thead>
<tbody>
<tr>
<td>@</td>
<td>/</td>
</tr>
<tr>
<td>@home</td>
<td>/home</td>
</tr>
<tr>
<td>@root</td>
<td>/root</td>
</tr>
<tr>
<td>@snapshots</td>
<td>/.snapshots</td>
</tr>
<tr>
<td>@opt</td>
<td>/opt</td>
</tr>
<tr>
<td>@srv</td>
<td>/srv</td>
</tr>
<tr>
<td>@tmp</td>
<td>/tmp</td>
</tr>
<tr>
<td>@usr_local</td>
<td>/usr/local</td>
</tr>
<tr>
<td>@var</td>
<td>/var</td>
</tr>
<tr>
<td>@var_log</td>
<td>/var/log</td>
</tr>
<tr>
<td>@var_cache</td>
<td>/var/cache</td>
</tr>
<tr>
<td>@var_tmp</td>
<td>/var/tmp</td>
</tr>
<tr>
<td>@libvirt</td>
<td>/var/lib/libvirt/images</td>
</tr>
</tbody>
</table>
<p>Pour procéder à la création des sous volumes nous allons monter la partition :</p>
<pre><code class="language-bash">mount -t btrfs LABEL=system /mnt
</code></pre>
<p>Et procéder à la création de ces derniers:</p>
<pre><code class="language-bash">btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@root
btrfs subvolume create /mnt/@snapshots
btrfs subvolume create /mnt/@opt
btrfs subvolume create /mnt/@srv
btrfs subvolume create /mnt/@tmp
btrfs subvolume create /mnt/@usr_local
btrfs subvolume create /mnt/@var
btrfs subvolume create /mnt/@var_log
btrfs subvolume create /mnt/@var_cache
btrfs subvolume create /mnt/@var_tmp
btrfs subvolume create /mnt/@libvirt
</code></pre>
<p>Il faut ensuite monter les sous volumes:</p>
<pre><code class="language-bash">mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@ LABEL=system /mnt/
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@home LABEL=system /mnt/home
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@root LABEL=system /mnt/root
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@snapshots LABEL=system /mnt/.snapshots
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@opt LABEL=system /mnt/opt
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@srv LABEL=system /mnt/srv
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@tmp LABEL=system /mnt/tmp
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@usr_local LABEL=system /mnt/usr/local
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@var LABEL=system /mnt/var
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@var_log LABEL=system /mnt/var/log
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@var_cache LABEL=system /mnt/var/cache
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,subvol=@var_tmp LABEL=system /mnt/var/tmp
mount -t btrfs -o defaults,x-mount.mkdir,compress=zstd,ssd,noatime,nodatacow,subvol=@libvirt LABEL=system /mnt/var/lib/libvirt/images
</code></pre>
<p>L'option <code>ssd</code> est à définir uniquement sur les disques SSD. Je désactive également la fonction de <code>Copy-on-Write</code> avec l'option <code>nodatacow</code> pour le répertoire des disques des VMs libvirt.</p>
<h4 id="efi">EFI</h4>
<pre><code class="language-bash"># Formatage de la partition
mkfs.fat -F32 -n EFI /dev/disk/by-partlabel/EFI
# Création du point de montage dans la partition racine
mkdir /mnt/efi
# Montage de la partition
mount LABEL=EFI /mnt/efi
</code></pre>
<h2 id="installation-du-syst%C3%A8me">Installation du système</h2>
<p>Maintenant que l'architecture de notre système est créé nous allons pouvoir installer la base du système et le kernel.</p>
<p>J'utilise la version zen du kernel linux, pour la version standard, vous pouvez remplacer <code>linnux-zen</code> par <code>linux</code>. Si vous avez un processeur Intel et non AMD remplacer également <code>amd-ucode</code> par <code>intel-ucode</code>.</p>
<pre><code class="language-bash">pacstrap /mnt base linux-zen linux-firmware amd-ucode iptables-nft nftables vim
</code></pre>
<p>Je procède à l'installation de nftables lors de cette étape pour être sûr que iptables ne soit pas installé comme dépendant d'un autre paquet.</p>
<p>Ensuite nous allons généré le fichier <code>fstab</code> en utilisant les labels pour les partitions :</p>
<pre><code class="language-bash">genfstab -L -p /mnt &gt;&gt; /mnt/etc/fstab
</code></pre>
<p>Il faut également définir un nom pour notre nouveau système, ici ce sera <code>nowhere</code>.</p>
<pre><code class="language-bash">echo "nowhere" &gt; /etc/hostname
</code></pre>
<p>Il faut également définir le contenu du fichier <code>/etc/hosts</code>, je vais ça en une seule commande mais vous pouvez également éditer le fichier manuellement :</p>
<pre><code class="language-bash">cat &lt;&lt;EOF&gt; /etc/hosts
127.0.0.1       localhost.localdomain  localhost
127.0.1.1       nowhere.nowhere        nowhere

::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
EOF
</code></pre>
<h2 id="configuration-du-syst%C3%A8me">Configuration du système</h2>
<h3 id="configuration-basique">Configuration basique</h3>
<p>Dans un premier temps nous devons entrer dans notre nouveau système:</p>
<pre><code class="language-bash">arch-chroot /mnt
</code></pre>
<p>Puis définir la zone temporelle et définir l'heure matériel sur notre machine, pour moi il s'agit de Paris:</p>
<pre><code class="language-bash">ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime
hwclock --systohc
</code></pre>
<p>Cette configuration sera faite pour le français mais vous pouvez adapter <code>fr_FR</code> par la langue de votre choix.</p>
<pre><code class="language-bash">sed -i '/fr_FR.UTF-8 UTF-8/s/^#//g' /etc/locale.gen
locale-gen
echo "LANG=fr_FR.UTF-8" &gt; /etc/locale.conf
</code></pre>
<h3 id="installation-des-paquets-suppl%C3%A9mentaires">Installation des paquets supplémentaires</h3>
<p>Nous allons ensuite ajouter des paquets supplémentaires utiles pour l'installation de notre système.</p>
<pre><code class="language-bash">pacman -Syu networkmanager base-devel efibootmgr btrfs-progs gptfdisk neovim zsh sudo ttf-dejavu sbctl polkit git openssh wget
</code></pre>
<h3 id="pr%C3%A9paration-de-notre-syst%C3%A8me-de-boot">Préparation de notre système de boot</h3>
<p>Pour cette installation j'ai décidé d'utiliser <code>systemd-init</code> à la place de <code>busybox-init</code> notamment pour son meilleur support de plymouth avec le chiffrement complet du disque.</p>
<p>Dans le fichier <code>/etc/mkinitcpio.conf</code> nous allons modifier les variables <code>MODULES</code> pour le support du GPU, <code>BINARIES</code> pour corriger un problème d'affichage avec plymouth et <code>HOOKS</code> pour correspondre à la configuration de notre système en ajoutant le hook BTRFS notamment.</p>
<pre><code class="language-ini">MODULES=(amdgpu)
BINARIES=(setfont)
HOOKS=(base systemd plymouth autodetect microcode modconf kms keyboard sd-vconsole sd-encrypt block btrfs filesystems fsck)
</code></pre>
<p>Ensuite dans le fichier <code>/etc/kernel/cmdline</code> nous allons définir les paramètres de démarrage de notre kernel, notamment pour lui indiquer sur quel partition démarré :</p>
<pre><code>fbcon=nodefer rw rd.luks.allow-discards plymouth.use-simpledrm quiet bgrt_disable root=LABEL=system rootflags=subvol=@root,rw splash vt.global_cursor_default=0
</code></pre>
<p><code>plymouth.use-simpledrm</code> est spécifique à l'utilisation de plymouth avec un GPU AMD qui peut causer des problèmes d'affichage.</p>
<p>Puis comme notre système est chiffré il faut ajouter la configuration nécessaire pour le démarrage dans le fichier <code>/etc/crypttab.initramfs</code> :</p>
<pre><code>system /dev/disk/by-partlabel/cryptsystem none timeout=180
</code></pre>
<p>Pour le support du secure boot nous devons créer les clé de signatures :</p>
<pre><code class="language-bash">sbctl create-keys
</code></pre>
<p>Et généré l'image efi du kernel :</p>
<pre><code class="language-bash">sbctl bundle -k /boot/vmlinuz-linux-zen -f /boot/initramfs-linux-zen.img -s /efi/main.efi
</code></pre>
<blockquote>
<p>Avec le kernel standard de linux la commande n'a pas besoin des chemins comme avec le kernel zen : <code>sbctl bundle -s /efi/main.efi</code></p>
</blockquote>
<p>Ensuite nous ajoutons dans notre UEFI l'entrée pour le boot de notre système :</p>
<pre><code class="language-bash">efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "Arch Linux" --loader 'main.efi' --unicode
</code></pre>
<p>Ici <code>/dev/nvme0n1</code> est le disque sur lequel j'ai fait l'installation et 1 le numéro de partition EFI. C'est informations sont vérifiable avec <code>fdisk -l</code>.</p>
<h3 id="utilisateur">utilisateur</h3>
<p>Nous allons pouvoir ajouter un utilisateur qui nous servira également pour l'installation de la version de developpement de <code>plymouth</code> pour la gestion de l'écran de démarrage.</p>
<p>Dans un premier temps changeons le mot de passe de l'utilisateur <code>root</code>:</p>
<pre><code class="language-bash">passwd
</code></pre>
<p>Puis ajoutons notre utilisateur qui utilisera <code>zsh</code> comme terminal, le nom de ce dernier sera <code>nothing</code> dans mon cas. Nous allons également en profiter pour définir son mot de passe :</p>
<pre><code class="language-bash">useradd -m -G wheel,storage,power,tty,systemd-journal --btrfs-subvolume-home -s /usr/bin/zsh nothing

passwd nothing
</code></pre>
<p>Libre à vous de modifier les groups auquel appartiendra votre utilisateur cependant dans le cas de mon utilisation quotitienne l'appartenance à ces groupes est nécessaire.</p>
<p>Pour la suite il est nécessaire de donner à notre utilisateur des droits sudo. Une solution commune est d'éditer le <code>/etc/sudoers</code> avec la commande <code>visudo</code> pour décommenter une des lignes donnant ces droits via le groupe <code>wheel</code>.</p>
<p>Ici je vais simplement ajouter une ligne dédié à mon utilisateur :</p>
<pre><code class="language-bash">echo "nothing ALL=(ALL:ALL) ALL" &gt; /etc/sudoers.d/nothing
</code></pre>
<p>Nous allons maintenant prendre l'identité de cet utilisateur  mais avec le shell bash pour éviter la configuration de zsh :</p>
<pre><code class="language-bash">su -s /usr/bin/bash - nothing
</code></pre>
<p>Afin d'installer les paquets AUR d'Arch Linux j'utile <code>yay</code> mais plusieurs autres solution sont possibles comme <code>aura</code>, <code>paru</code> ou l'installation des AUR directement via <code>makepkg</code>.</p>
<pre><code class="language-bash">cd /tmp
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
</code></pre>
<p>Nous pouvons ensuite installer <code>plymouth</code> et si vous le souhaitez <code>mkinitcpio-firmware</code> pour limiter les message d'avertissement de <code>mkinitcpio</code> indiquant des firmwares manquants.</p>
<pre><code class="language-bash">yay -Sy plymouth-git mkinitcpio-firmware
</code></pre>
<p>Nous allons ensuite définir le thème pour notre plymouth :</p>
<pre><code class="language-bash">sudo plymouth-set-default-theme -R spinner
</code></pre>
<blockquote>
<p>Si vous ne savez pas le quel choisir je vous recommande de laisser celui-ci pour le moment et de le changer après le redémarrage de votre système.</p>
</blockquote>
<p>Nous allons regénéré l'image efi :</p>
<pre><code class="language-bash">sudo sbctl generate-bundles -s
</code></pre>
<h2 id="finalisation">Finalisation</h2>
<p>Sortez de votre utilisateur non root et du chroot puis redémarrez le système. Nous continuerons une fois le système démarré.</p>
<pre><code class="language-bash">exit
exit
reboot
</code></pre>
<p>Si tout est bien configuré votre système devrait démarrer et vous demander votre mot de passe pour dévérouiller le disque.</p>
<p>Une fois le système redémarré et connecté avec notre utilisateur nous allons ajouté les clés secure boot dans l'EFI du système.</p>
<p>Si vous avez un dual-boot avec Windows il faudra rajouter l'argument <code>-m</code> à cette commande.</p>
<pre><code class="language-bash">sudo sbctl enroll-keys
</code></pre>
<p>Activons la synchronisation du temps:</p>
<pre><code class="language-bash">sudo timedatectl set-ntp true
</code></pre>
<p>Il faut définir le type de clavier pour vconsole, dans mon il s'agit de <code>us-acentos</code>, vous pouvez obtenir la liste avec la commande <code>localectl list-keymaps</code>:</p>
<pre><code class="language-bash">sudo localectl set-keymap us-acentos
</code></pre>
<h2 id="framework-laptop-16">Framework Laptop 16</h2>
<p>Comme je suis sur un Framework Laptop 16 il y a quelques ajustements conseillés pour ce matériel dans la <a href="https://wiki.archlinux.org/title/Framework_Laptop_16?ref=thys.tips">documentation</a>.</p>
<p>Ici je ne traiterais que les configurations utiles avant la présence d'un environnement graphique.</p>
<h3 id="param%C3%A8tres-wifi">Paramètres Wifi</h3>
<p>Afin d'assurer le bon fonctionnement de la carte Wifi en utilisant les fréquence de notre zone géographique l'installation de la base de donnée des zones géographiques et sa configuration est nécessaire:</p>
<pre><code class="language-bash">sudo pacman -S wireless-regdb
sudo sed -i '/WIRELESS_REGDOM="FR"/s/^#//g' /etc/conf.d/wireless-regdom
echo "country=FR" | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf
</code></pre>
<p>L'application de cette configuration nécessitera un redémarrage.</p>
<h3 id="d%C3%A9sactivation-de-la-sortie-de-veille-par-clavier-ou-touchpad">Désactivation de la sortie de veille par clavier ou touchpad</h3>
<p>Dans certains cas de transport l'écran peut appuyer sur le clavier et sorti l'ordiateur de veille ce qui peut poser problème. Pour que la sortie de veille ne se fasse qu'avec le bouton d'alimentation dans le fichier <code>/etc/udev/rules.d/90-disable-keyboard-wake.rules</code> il faut ajouter le contenu:</p>
<pre><code>ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0012", ATTR{power/wakeup}="disabled"
</code></pre>
<p>Et recharger les règles :</p>
<pre><code class="language-bash">sudo udevadm control --reload
sudo udevadm trigger
</code></pre>
<h3 id="gestion-des-capteurs">Gestion des capteurs</h3>
<p>La récupération des informations provenant des capteurs et souvent faite via <code>lm_sensors</code> cependant la configuration pour les framework.</p>
<p>Nous allons donc ajouter la configuration nécessaire :</p>
<pre><code class="language-bash">sudo pacman -S lm_sensors --needed
sudo curl https://raw.githubusercontent.com/FrameworkComputer/lm-sensors/refs/heads/framework/configs/Framework/Framework16-AMD.conf -o /etc/sensors.d/Framework16-AMD.conf
</code></pre>
<h2 id="personnalisations">Personnalisations</h2><p>La suite de l'installation concerne les personnalisations comme l'environnement de bureau.<br>Je ne détaillerais pas cette partie ici cependant vous trouverez mes dotfiles pour cette partie <a href="https://gitlab.com/thystips/dotfiles?ref=thys.tips" rel="noreferrer">ici</a>.<br>J'ai deux configurations avec Plasma6 ou Sway que je gère avec l'outil <a href="https://www.chezmoi.io/?ref=thys.tips" rel="noreferrer">chezmoi</a>.</p><p>J'espère que cette article vous a été utile, n'hésitez pas à laisser un commentaire.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Déploiement de Zitadel sur Linux ]]></title>
        <description><![CDATA[ J&#39;étais à la recherche d&#39;un SSO assez complet quand je suis tombé sur Zitadel, j&#39;ai donc eu envie de tenter l&#39;expérience.
Je ne suis pas doué pour les présentations donc pour faire court c&#39;est un service d&#39;IAM (Identity ]]></description>
        <link>https://thys.tips/deploiement-de-zitadel-sur-linux-2/</link>
        <guid isPermaLink="false">6647f6d32ad5b5125d57540d</guid>
        <category><![CDATA[ Linux ]]></category>
        <dc:creator><![CDATA[ ThysTips ]]></dc:creator>
        <pubDate>sam., 18 mai 2024 02:32:22 +0200</pubDate>
        <media:content url="https://thys.tips/content/images/2024/05/50c7f6bd-54bc-4878-84cb-9e05af2c782f.png" medium="image"/>
        <content:encoded><![CDATA[ <p>J'étais à la recherche d'un SSO assez complet quand je suis tombé sur <a href="https://zitadel.com/?ref=thys.tips" rel="noreferrer">Zitadel</a>, j'ai donc eu envie de tenter l'expérience.<br>Je ne suis pas doué pour les présentations donc pour faire court c'est un service d'IAM (Identity and Access Management) qui a à première vue toutes les fonctionnalité qu'on pourrait attendre d'un SSO mais en mettant l'accent sur la partie IAM et multi-tenant. De plus comme la majorité des solutions que j'utilise il est open-source.</p><p>Malheureusement après quelques recherches on voit que son déploiement n'est pas très documenté sur machine Linux pour une utilisation supérieur à du simple test mais ne nécessitant pas un cluster pour la gestion de millions d'utilisateurs.</p><hr><p>Passons à la partie amusante en voyant comment déployer cette solution sur une machine Linux.</p><p>Pour cette article j'utilise une VM Ubuntu 22.04 avec 4vCPU, 8Go de RAM et 80 Go de disque avec un utilisateur qui a toutes les permissions avec <code>sudo</code>.</p><p>Nous aurons besoin de mettre en place une base de données <a href="https://www.postgresql.org/?ref=thys.tips" rel="noreferrer">PostgreSQL</a> puis un reverse-proxy pour simplifier la gestion du SSL, j'ai choisi d'utiliser <a href="https://caddyserver.com/?ref=thys.tips" rel="noreferrer">Caddy</a> qui gère déjà mes domaines sur mon infrastructure cependant il est possible d'utiliser <a href="https://nginx.org/en/?ref=thys.tips" rel="noreferrer">Nginx</a> ou encore de passer par <a href="https://www.cloudflare.com/?ref=thys.tips" rel="noreferrer">Cloudflare</a>, les autres solutions sont documentées <a href="https://zitadel.com/docs/self-hosting/manage/reverseproxy/reverse_proxy?ref=thys.tips" rel="noreferrer">ici</a>.<br>Pour la base de données Zitadel recommande l'utilisation de <a href="https://www.cockroachlabs.com/?ref=thys.tips" rel="noreferrer">Cockroach</a> en production mais à nouveau dans cette exemple nous sommes sur une petite production où la mise en place d'un cluster de ce type serait surdimensionné.</p><h2 id="installation-de-postgresql">Installation de PostgreSQL</h2><h3 id="installation">Installation</h3><p>Nous aurons besoin d'une installation basique de PostgreSQL en ajoutant les dépôts officiel via le script présent dans la distribution Ubuntu :</p><figure class="kg-card kg-code-card"><pre><code class="language-shell">sudo apt install -y postgresql-common

sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh</code></pre><figcaption><p><span style="white-space: pre-wrap;">Installation du dépôt et des paquets PostgreSQL</span></p></figcaption></figure><h3 id="configuration">Configuration</h3><p>Nous devons ensuite créer un utilisateur et une base de donnée pour Zitadel :</p><pre><code class="language-bash">sudo -u postgres psql</code></pre><pre><code class="language-sql">CREATE USER zitadel WITH PASSWORD '&lt;mot de passe&gt;';
CREATE DATABASE zitadel;
GRANT CONNECT, CREATE ON DATABASE zitadel TO zitadel;</code></pre><h2 id="installation-de-zitadel">Installation de Zitadel</h2><p>L'installation de Zitadel est une opération manuelle.</p>
<p>Voici un résumé des étapes que nous allons réaliser :</p>
<ol>
<li>Récupérer le binaire de Zitadel</li>
<li>Créer un utilisateur</li>
<li>Créer les répertoires</li>
<li>Définir les permissions sur les répertoires</li>
<li>Créer le service</li>
</ol>
<p>Commençons par la récupération du binaire à partir de la dernière version publiée sur Github :</p><pre><code class="language-bash ">LATEST=$(curl -i https://github.com/zitadel/zitadel/releases/latest | grep location: | cut -d '/' -f 8 | tr -d '\r'); wget -c https://github.com/zitadel/zitadel/releases/download/$LATEST/zitadel-linux-amd64.tar.gz -O - | tar -xz &amp;&amp; sudo mv zitadel-linux-amd64/zitadel /usr/local/bin</code></pre><p>Ici en une ligne nous récupérons la dernière version disponible, nous téléchargeons cette version, la décompressons puis déplaçons le binaire.<br>Sur la <a href="https://zitadel.com/docs/self-hosting/deploy/linux?ref=thys.tips#install-zitadel" rel="noreferrer">documentation officielle</a> vous trouverez une méthode qui prend également en compte l'architecture de la machine.</p><p>Nous créons un utilisateur pour notre outil :</p><pre><code class="language-bash">sudo useradd -r -U -M -d /var/lib/zitadel/ -s /usr/sbin/nologin zitadel</code></pre><p>Nous utilisons plusieurs arguments:</p>
<ul>
<li><code>-r</code> permet d'indiquer quíl s'agit d'un utilisateur système</li>
<li><code>-U</code> pour créer un groupe avec le même nom que l'utilisateur</li>
<li><code>-M</code> pour ne pas créer de répertoire HOME</li>
<li><code>-d</code> pour définir le répertoire à utiliser comme dossier HOME</li>
<li><code>-s</code> pour définir le Shell de connexion de l'utilisateur (ici notre utilisateur n'ayant pas besoin de se connecter au système de façon interactive nous pouvons utiliser <code>/usr/sbin/nologin</code>)</li>
</ul>
<p>Ensuite il faut créer les dossiers qui seront utilisés par Zitadel :</p><pre><code class="language-bash">sudo mkdir -p /var/lib/zitadel /etc/zitadel
tr -dc A-Za-z0-9 &lt;/dev/urandom | head -c 32 | sudo tee /etc/zitadel/zitadel-masterkey
sudo touch /etc/zitadel/config.yaml /etc/default/zitadel
sudo chown -R zitadel:zitadel /var/lib/zitadel
sudo chown -R root:zitadel /etc/zitadel
sudo chown root:root /etc/default/zitadel
sudo chmod 640 /etc/zitadel/config.yaml /etc/default/zitadel /etc/zitadel/zitadel-masterkey</code></pre><p>La deuxième commande permettra de générer la clé de sécurité pour  le chiffrement des données dans Zitadel.</p><p>Nous pouvons ensuite créer le service qui permettra de lancer notre outil :</p><figure class="kg-card kg-code-card"><pre><code class="language-systemd">[Unit]
Description=Zitadel

[Service]
RestartSec=2s
Type=simple
User=zitadel
Group=zitadel
EnvironmentFile=/etc/default/zitadel
WorkingDirectory=/var/lib/zitadel
ExecStart=/usr/local/bin/zitadel start --config /etc/zitadel/config.yaml --masterkeyFile ${MASTERKEYFILE} --tlsMode ${TLSMODE}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target</code></pre><figcaption><p><span style="white-space: pre-wrap;">/etc/systemd/system/zitadel.service</span></p></figcaption></figure><p>Comme certains paramètres en arguments nous allons définir les valeurs associées :</p><figure class="kg-card kg-code-card"><pre><code class="language-ini">USER=zitadel
GROUP=zitadel
HOME=/var/lib/zitadel
TLSMODE=external
MASTERKEYFILE=/etc/zitadel/zitadel-masterkey</code></pre><figcaption><p><span style="white-space: pre-wrap;">/etc/default/zitadel</span></p></figcaption></figure><p>Il faut ensuite recharger le daemon systemd pour appliquer la configuration du service :</p><pre><code class="language-bash">sudo systemctl daemon-reload</code></pre><h2 id="configuration-de-zitadel">Configuration de Zitadel</h2><p>La première configuration consiste à définir les ports d'écoute et la connexion à la base de donnée. Nous allons donc éditer le fichier <code>/etc/zitadel/config.yaml</code>:</p><figure class="kg-card kg-code-card"><pre><code>Port: 8080
ExternalPort: 443
ExternalDomain: &lt;votre domaine&gt;
ExternalSecure: true
TLS:
  Enabled: false
Database:
  postgres:
    Host: localhost
    Port: 5432
    Database: zitadel
    User:
      Username: zitadel
      Password: &lt;mot de passe&gt;
      SSL:
        Mode: disable
</code></pre><figcaption><p><span style="white-space: pre-wrap;">/etc/zitadel/config.yaml</span></p></figcaption></figure><p>Vous trouverez toutes les options de configuration dans la <a href="https://zitadel.com/docs/self-hosting/manage/configure?ref=thys.tips#configuration-files" rel="noreferrer">documentation</a>.</p><p>Nous pouvons maintenant lancer l'initialisation de Zitadel via la commande appropriée :</p><pre><code class="language-bash">sudo -u zitadel -g zitadel zitadel init --config /etc/zitadel/config.yaml zitadel
sudo -u zitadel -g zitadel zitadel setup --config /etc/zitadel/config.yaml --tlsMode external --masterkeyFile /etc/zitadel/zitadel-masterkey --init-projections</code></pre><p>Comme nous avons déjà créer la base de donnée et l'utilisateur associé (afin de ne pas fournir de compte avec des droits élevés sur la base). La première commande permet de vérifier la configuration et de créer le schéma dans la base de données, la deuxième effectue les migrations nécessaire pour peupler cette dernière.</p><p>Cette étape va également configurer le compte administrateur avec les informations suivantes :</p><ul>
<li>Utilisateur: <code>zitadel-admin@&lt;hostname VM&gt;.&lt;domaine Zitadel&gt;</code></li>
<li>Mot de passe: <code>Password1!</code></li>
</ul>
<p>Vous pouvez également utiliser PostgreSQL pour récupérer le nom d'utilisateur :</p><pre><code class="language-bash">sudo -u postgres psql -d zitadel -c '\x' -c 'SELECT user_name FROM auth.users2;'</code></pre><h2 id="installation-du-reverse-proxy">Installation du reverse proxy</h2><p>Comme indiqué plus haut nous allons installer et configurer <code>Caddy</code> qui sera notre reverse proxy. Comme nous avons définir le mode TLS comme <code>external</code> il sera en charge d'ajouter cette couche.</p><p>Un des avantages de <code>Caddy</code> est la génération de certificats automatiquement avec Let's Encrypt.</p><p>Il est disponible depuis les dépôts Ubuntu :</p><pre><code class="language-bash">sudo apt install Caddy</code></pre><p>Nous pouvons ensuite le configurer avec notre domaine pour transmettre les requêtes à Zitadel en grpc. Cette configuration se fait via le fichier <code>/etc/caddy/Caddyfile</code> qu'il faut créer s'il n'existe pas.</p><figure class="kg-card kg-code-card"><pre><code class="language-caddy">zitadel.thystips.net {
	reverse_proxy h2c://127.0.0.1:8080
}</code></pre><figcaption><p><span style="white-space: pre-wrap;">/etc/caddy/Caddyfile</span></p></figcaption></figure><p>Cette configuration est suffisante pour mettre en place le reverse proxy dont nous avons besoin. Caddy utilisera le challenge HTTP01 pour demander un certificat à Let's Encrypt.</p><p>Si cette solution n'est pas adapté pour vous je vous invite à lire la <a href="https://caddyserver.com/docs/caddyfile/directives/tls?ref=thys.tips" rel="noreferrer">documentation</a> de Caddy sur les autres possibilité de configuration du TLS.</p><h2 id="d%C3%A9marrage-de-la-solution">Démarrage de la solution</h2><p>Maintenant nous pouvons lancer les deux services nécessaire pour que notre solution soit accessible :</p><pre><code class="language-bash ">sudo systemctl enable --now zitadel.service caddy.service</code></pre><p>L'interface d'administration est maintenant accessible via : <code>https://&lt;votre domaine&gt;/ui/console</code>, dans mon cas il s'agit donc de <code>https://zitadel.thystips.net</code>.</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/05/image.png" class="kg-image" alt="" loading="lazy" width="893" height="562" srcset="https://thys.tips/content/images/size/w600/2024/05/image.png 600w, https://thys.tips/content/images/2024/05/image.png 893w" sizes="(min-width: 720px) 720px"></figure><p>Une fois connecté vous serrez amené à changer le mot de passe de l'utilisateur et si vous le souhaitez à définir un second facteur d'authentification pour sécurisé votre compte.</p><p>Après avoir jouer avec pendant quelques heures on remarque que l'intégration LDAP n'est pas encore très aboutie au moment où je rédige cet article.<br>Je reste à l’affût de plusieurs issues et discussions à ce sujet sur Github  :</p><ul>
<li><a href="https://github.com/zitadel/zitadel/discussions/6007?ref=thys.tips">Discussion sur le fonctionnement de l'intégration LDAP</a></li>
<li><a href="https://github.com/zitadel/zitadel/issues/7888?ref=thys.tips">Choix du certificats pour le vérifier le LDAPS</a></li>
<li><a href="https://github.com/zitadel/zitadel/issues/6270?ref=thys.tips">Synchronisation des groupes LDAP</a></li>
</ul>
<p>Peut-être que je ferais un autre article pour parler un peu de mon retour d'expérience en détail et faire une présentation de la configuration de l'outil.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Comprendre et mettre en place un serveur Radius sous Windows server ]]></title>
        <description><![CDATA[ Qu’est ce qu’un serveur RADIUS?

RADIUS (Remote Authentication Dial-In User Service) est un protocole client-serveur permettant de centraliser des données d&#39;authentification. Le protocole RADIUS a été inventé et développé en 1991 par la société Livingston enterprise (rachetée par Lucent Technologies), qui fabriquait des serveurs d&#39; ]]></description>
        <link>https://thys.tips/windows-server-radius/</link>
        <guid isPermaLink="false">65841dabbaf3f2daa3472e4e</guid>
        <category><![CDATA[ Système ]]></category>
        <dc:creator><![CDATA[ ThysTips ]]></dc:creator>
        <pubDate>ven., 17 mai 2024 01:06:00 +0200</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <h2 id="qu%E2%80%99est-ce-qu%E2%80%99un-serveur-radius">Qu’est ce qu’un serveur RADIUS?</h2><p>RADIUS (Remote Authentication Dial-In User Service) est un protocole client-serveur permettant de centraliser des données d'authentification. Le protocole RADIUS a été inventé et développé en 1991 par la société Livingston enterprise (rachetée par Lucent Technologies), qui fabriquait des serveurs d'accès au réseau pour du matériel uniquement équipé d'interfaces série; il a fait ultérieurement l'objet d'une normalisation par l'IETF.</p><h2 id="fonctionnement-d%E2%80%99un-radius">Fonctionnement d’un RADIUS</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://thys.tips/content/images/2023/12/Design-sans-titre.png" class="kg-image" alt="Schéma du fonctionnement du protocol radius" loading="lazy" width="455" height="403"><figcaption><span style="white-space: pre-wrap;">Schéma du fonctionnement du protocol radius</span></figcaption></figure><p>Le fonctionnement de RADIUS est basé sur un scénario proche de celui-ci (schéma ci-dessus) :</p><ul><li>Un utilisateur envoie une requête au NAS afin d’autoriser une connexion à distance ;</li><li>Le NAS  achemine la demande au serveur RADIUS ;</li><li>Le serveur RADIUS consulte la base de données d’identification afin de connaître le type de scénario d’identification démandé pour l’utilisateur. Soit le scénario actuel convient, soit une autre méthode d’identification est demandée à l’utilisateur.</li></ul><h2 id="les-%C3%A9tapes-d%E2%80%99installation-d%E2%80%99un-serveur-radius-windows-serveur">Les étapes d’installation d’un serveur RADIUS (Windows serveur)</h2><h3 id="installation-du-serveur-radius">Installation du serveur RADIUS</h3><ul><li>Dans le gestionnaire windows serveur vous allez ajouter un rôle (Add Roles and Features) et dans « Server Roles » selectionnez l’option « Network Policy and Access services »</li><li>Cliquez sur « Add Features »</li><li>Ensuite allez sur « Role service » et cochez « Network Policy Server »</li><li>Et confirmez et cliquez sur « Install »</li></ul><h3 id="int%C3%A9gration-active-directory">Intégration Active Directory</h3><p>Après l’installation du serveur RADIUS vous devez créer un groupe d'utilisateurs autorisés à s'authentifier à l'aide de Radius. Créez le groupe RADIUS-USER (par exemple).</p><h3 id="ajouter-des-p%C3%A9riph%C3%A9riques-clients">Ajouter des périphériques clients</h3><ul><li>Après avoir intégrer un groupe sur le serveur, ouvrez l’application « Network policy Server ».Vous devez autoriser le serveur Radius sur la base de données Active Directory. Clique-droit sur NPS (local) et sélectionnez l’option « register server in Active Directory » ;</li><li>Ensuite il faut configurer les clients RADIUS. Les clients Radius sont des périphériques qui seront autorisés à demander l'authentification du serveur Radius. <strong>Important! Ne confondez pas les clients Radius avec les utilisateurs Radius</strong>. Clique-droit sur le dossier Radius Clients et sélectionnez l'option Nouveau.</li><li>Vous devez définir la configuration suivante:<ul><li>Nom convivial du périphérique.</li><li>Adresse IP du périphérique.</li><li>Secret partagé par périphérique.</li></ul></li></ul><p>Le secret partagé sera utilisé pour autoriser le périphérique à utiliser le serveur Radius.</p><h3 id="configurer-une-strat%C3%A9gie-r%C3%A9seau">Configurer une stratégie réseau</h3><p>Maintenant, vous devez créer une police de réseau pour permettre l'authentification.</p><ul><li>Cliquez avec le bouton droit sur le dossier Stratégies de réseau et sélectionnez l'option Nouveau. Entrez un nom pour la stratégie réseau et cliquez sur le bouton Suivant.</li><li>Cliquez sur le bouton Ajouter une condition. Nous allons permettre aux membres du groupe RADIUS-SERS de s'authentifier.</li><li>Sélectionnez l'option Groupe d'utilisateurs et cliquez sur le bouton Ajouter.</li><li>Cliquez sur le bouton Ajouter des groupes et localisez le groupe RADIUS-USERS.</li><li>Sélectionnez l'option Accès accordé et cliquez sur le bouton Suivant. Cela permettra aux membres du groupe RADIUS-USERS de s'authentifier sur le serveur Radius.</li><li>Je définis la méthode d’authentification Authentification non chiffrée (PAP, SPAP).</li></ul> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Installation de Zammad ]]></title>
        <description><![CDATA[ Nous allons vous présenter l&#39;installation de Zammad dans le cadre déploiement de notre nouvelle plateforme open-source de gestion des demande support. ]]></description>
        <link>https://thys.tips/installation-de-zammad/</link>
        <guid isPermaLink="false">658f0563baf3f2daa3472e64</guid>
        <category><![CDATA[ Linux ]]></category>
        <dc:creator><![CDATA[ ThysTips ]]></dc:creator>
        <pubDate>mer., 03 janv. 2024 15:03:35 +0100</pubDate>
        <media:content url="https://thys.tips/content/images/2023/12/zammad_logo.png" medium="image"/>
        <content:encoded><![CDATA[ <p>Bonne année à tous !</p><p>Aujourd'hui j'ai décidé de mettre en place une nouvelle plateforme pour la gestion des demandes supports avec <a href="https://zammad.org/?ref=thys.tips" rel="noreferrer">Zammad</a>.</p><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">🧑‍💻</div><div class="kg-callout-text">J'ai eu l'occasion de tester plusieurs solutions de support.<br>Parmis les solutions open-source je retiens <a href="https://osticket.com/?ref=thys.tips" rel="noreferrer">osTicket</a>, une solution répondant un besoin simple de gestion de tickets via email ou formulaire avec la présence d'une base de connaissance mais une interface qui n'est plus au goûts du jour.<br>Et en parlant support on ne peut pas passer à côté de <a href="https://zendesk.com/?ref=thys.tips" rel="noreferrer">Zendesk</a> qui est solution très complète mais avec des tarifs très élevés.</div></div><p>Zammad est une solution de gestion des demandes support très complète et disponible en en version commerciale sur <a href="https://zammad.com/?ref=thys.tips">https://zammad.com/</a> ou open-source  <a href="https://zammad.org/?ref=thys.tips">https://zammad.org/</a>.<br>Vous y trouverez toutes les fonctionnalités nécessaires pour une plateforme support mais parmis les raisons de mon coup de coeur nous retrouvons les grandes possibilités d'intégration (LDAP, GPG, S/MINE, Exchange, VoIP, supervision, etc. liste exhaustive <a href="https://admin-docs.zammad.org/en/latest/system/integrations/index.html?ref=thys.tips" rel="noreferrer">ici</a>), la possibilité de recherche dans le contenu des tickets (nécessite Elasticsearch) et la présence de nombreux canaux de communication (interface web, formulaires, mail, chat, sms et plus encore).</p><h2 id="pr%C3%A9requis">Prérequis</h2><p>Pour ce tutoriel nous allons déployer Zammad sur une machine virtuel <strong>Ubuntu 22.04</strong>, l'accès depuis l'extérieur se fera via un reverse proxy <strong>Caddy</strong> hébergé sur une autre machine.</p><p>En terme de spécification Zammad recommande au minimum :<br>- <strong>vCPU</strong> : <strong>2</strong><br>- <strong>RAM</strong> : <strong>4Go</strong> (<strong>+4Go</strong> si vous voulez utiliser Elasticsearch pour les recherches)<br><em>Plus d'information dans la </em><a href="https://docs.zammad.org/en/latest/prerequisites/hardware.html?ref=thys.tips#for-zammad-and-a-database-server-like-postgresql-we-recommend-at-least" rel="noreferrer"><em>documentation</em></a><em>.</em></p><p>Pour ce qui est de l'espace disque Zammad ne donne pas de recommandation comme il s'agit d'un point à définir en fonction de votre utilisation. Ici je vais partir sur <strong>50Go</strong> afin d'avoir un dimensionnement suffisant pour un moment.</p><h2 id="installation">Installation</h2><p>Nous allons maintenant passer à l'installation de notre plateforme.</p><h3 id="d%C3%A9pendances">Dépendances</h3><p>Commençons par l'installation des dépendances :</p><figure class="kg-card kg-code-card"><pre><code class="language-nonum-bash-zammad">sudo apt install apt-transport-https wget curl gnupg</code></pre><figcaption><p><span style="white-space: pre-wrap;">Installation des dépendances</span></p></figcaption></figure><h3 id="memcached">Memcached</h3><p>Pour la gestion du cache de Zammad j'ai choisi d'utiliser <strong>Memcached</strong> qui n'est pas obligatoire. Sans <strong>Memcached</strong> le cache sera stocké dans <code>/opt/zammad/tmp/cache*</code>.</p><pre><code class="language-nonum-bash-zammad">sudo apt install memcached</code></pre><p>Une valeur raisonnable pour la taille du cache est de <strong>1Go </strong>que<strong> </strong>nous pouvons définir en modifiant la configuration de memcached :</p><figure class="kg-card kg-code-card"><pre><code class="language-conf">-m 1024</code></pre><figcaption><p><span style="white-space: pre-wrap;">/etc/memcached.conf</span></p></figcaption></figure><p>Puis activer et redémarrer le service</p><pre><code class="language-nonum-bash-zammad">sudo systemctl enable memcached.service
sudo systemctl restart memcached.service</code></pre><h3 id="installation-delasticsearch">Installation d'Elasticsearch</h3><p>Que vous choisissiez d'utiliser <strong>Elasticsearch</strong> pour les fonctionnalités de recherche ou non sont installation avec le plugin "attachment" est nécessaire car il s'agit d'une dépendance obligatoire de Zammad.</p><p>Pour simplifier notre installation nous allons utiliser la version 7 d'Elasticsearch sur notre machine. Cependant il est également possible d'utiliser la version 8 ou un cluster distant, dans ces cas d'utilisation je vous invite à prendre connaissance de la <a href="https://docs.zammad.org/en/latest/install/elasticsearch.html?ref=thys.tips#step-3-connect-zammad" rel="noreferrer">documentation</a>.</p><figure class="kg-card kg-code-card"><pre><code class="language-nonum-bash-zammad">echo "deb [signed-by=/etc/apt/trusted.gpg.d/elasticsearch.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main"| \
  sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list &gt; /dev/null
curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | \
  gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/elasticsearch.gpg&gt; /dev/null
sudo apt update
sudo apt install elasticsearch
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-attachment</code></pre><figcaption><p><span style="white-space: pre-wrap;">Installation d'Elasticsearch</span></p></figcaption></figure><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">❓</div><div class="kg-callout-text">Si vous ne souhaitez pas utiliser Elasticsearch vous pouvez désactiver le démarrage du service `sudo systemctl disable --now elasticsearch` et <a href="#installation-de-zammad" rel="noreferrer">passer à l'installation de Zammad</a>.</div></div><h4 id="configuration-delasticsearch">Configuration d'Elasticsearch</h4><p>La documentation recommande quelques modification afin de lancer le service afin de permettre un fonctionnement optimal des fonctions de recherche.</p><figure class="kg-card kg-code-card"><pre><code class="language-yml"># Nom du cluster Elasticsearch
cluster.name: zammad
# Stockage des données (valeur définie par défaut)
path.data: /var/lib/elasticsearch
# Stockage des journaux (valeur définie par défaut)
path.logs: /var/log/elasticsearch

# Taille maximum d'indexation d'un ticket (risque de perte de performance au-delà de cette valeur)
http.max_content_length: 400mb
# Autoriser les requêtes de recherche plus complexe (Au dessus de cette valeur l'utilisation des ressources système peut devenir trop intensive)
indices.query.bool.max_clause_count: 2000</code></pre><figcaption><p><i><em class="italic" style="white-space: pre-wrap;">/etc/elasticsearch/elasticsearch.yml</em></i></p></figcaption></figure><p>Nous pouvons maintenant passer démarrer le service Elasticsearch</p><figure class="kg-card kg-code-card"><pre><code class="language-nonum-bash-zammad">sudo systemctl daemon-reload
sudo systemctl enable --now elasticsearch</code></pre><figcaption><p><span style="white-space: pre-wrap;">Lancement du service Elasticsearch</span></p></figcaption></figure><h3 id="d%C3%A9finition-des-locales">Définition des locales</h3><p>Afin d'assurer une bon fonctionnement pour notre langue nous allons définir les données de langage.</p><pre><code class="language-nonum-bash-zammad">sudo apt install locales
sudo locale-gen fr_FR.UTF-8
echo "LANG=fr_FR.UTF-8" | sudo tee /etc/default/locale</code></pre><h3 id="installation-de-zammad">Installation de Zammad</h3><p>L'installation de Zammad se fait directement via un paquet qui est disponible dans le dépôt officiel que nous allons ajouter :</p><figure class="kg-card kg-code-card"><pre><code class="language-nonum-bash-zammad">curl -fsSL https://dl.packager.io/srv/zammad/zammad/key | \
  gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/pkgr-zammad.gpg&gt; /dev/null
echo "deb [signed-by=/etc/apt/trusted.gpg.d/pkgr-zammad.gpg] https://dl.packager.io/srv/deb/zammad/zammad/stable/ubuntu 22.04 main"| \
  sudo tee /etc/apt/sources.list.d/zammad.list &gt; /dev/null
sudo apt update</code></pre><figcaption><p><span style="white-space: pre-wrap;">Ajout du dépôt de Zammad</span></p></figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-nonum-bash-zammad">$ sudo apt install zammad</code></pre><figcaption><p><span style="white-space: pre-wrap;">Installation de Zammad</span></p></figcaption></figure><h2 id="configuration-du-serveur">Configuration du serveur</h2><p>Maintenant nous allons voir quelques étapes de configuration.</p><h3 id="connexion-%C3%A0-elasticsearch">Connexion à Elasticsearch</h3><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">⚠️</div><div class="kg-callout-text">Uniquement si vous avez choisi d'utiliser <b><strong style="white-space: pre-wrap;">Elasticsearch</strong></b>.</div></div><p>Nous allons indiquer à Zammad les informations nécessaires pour la connexion à notre service Elasticsearch :</p><pre><code class="language-nonum-bash-zammad-user-13-41"># Adresse pour se connecter à Elasticsearch
sudo zammad run rails r "Setting.set('es_url', 'http://localhost:9200')"

# Ignore l'indexationn de certains types de fichiers pour préserver les performance
sudo zammad run rails r "Setting.set('es_attachment_ignore',\
  [ '.png', '.jpg', '.jpeg', '.mpeg', '.mpg', '.mov', '.bin', '.exe', '.box', '.mbox' ] )"

# Définition de la taille maximal en MB des fichiers joints à indexer
sudo zammad run rails r "Setting.set('es_attachment_max_size_in_mb', 50)"

# Lancer la recréation de l'index
sudo zammad run rake zammad:searchindex:rebuild
Dropping indexes... done.
Deleting pipeline... done.
Creating indexes... done.
Creating pipeline... done.
Reloading data...
  - Chat::Session...
    done in 0 seconds.
  - Cti::Log...
    done in 0 seconds.
  - Group...
    done in 0 seconds.
  - KnowledgeBase::Answer::Translation...
    done in 0 seconds.
  - KnowledgeBase::Category::Translation...
    done in 0 seconds.
  - KnowledgeBase::Translation...
    done in 0 seconds.
  - Organization...
    done in 0 seconds.
  - StatsStore...
    done in 0 seconds.
  - Ticket::Priority...
    done in 1 seconds.
  - Ticket::State...
    done in 1 seconds.
  - Ticket...
    done in 0 seconds.
  - User...
    done in 0 seconds.</code></pre><h3 id="utilisation-de-memcached-pour-le-cache">Utilisation de Memcached pour le cache</h3><div class="kg-card kg-callout-card kg-callout-card-blue"><div class="kg-callout-emoji">⚠️</div><div class="kg-callout-text">Uniquement si vous avez installé <b><strong style="white-space: pre-wrap;">Memcached</strong></b>.</div></div><p>L'utilisation de <strong>Memcached</strong> se fait simplement en indiquant l'adresse du service. Si ce dernier est installé sur la même machine que Zammad :</p><pre><code class="language-nonum-bash-zammad-user">sudo zammad config:set MEMCACHE_SERVERS=127.0.0.1:11211</code></pre><h3 id="dernier-ajustements">Dernier ajustements</h3><p>Nous devons maintenant définir le nom de domaine qui sera utilisé ainsi que le protocole, dans cet example le nom de domaine sera <code>support.thystips.net</code> et en <strong>HTTPS</strong>. Nous allons ensuite redémarrer le service <strong>Zammad</strong>.</p><pre><code class="language-nonum-bash-zammad-user">sudo zammad config:set ZAMMAD_FQDN=suport.thystips.net
sudo zammad config:set ZAMMAD_HTTP_TYPE=https
sudo systemctl restart zammad</code></pre><h3 id="configuration-du-serveur-web">Configuration du serveur web</h3><p>Nous allons maintenant configurer notre serveur web, Nginx sera utilisé comme serveur web et nous verrons plus types de configurations.</p><p>Je vous laisse choisir uniquement la sous section qui convient à votre besoin :</p><ul><li>Déploiement uniquement pour des tests vous pouvez vous diriger vers la section : <a href="#sans-ssl" rel="noreferrer">Sans SSL</a>.</li><li>Machine hébergeant <strong>Zammad</strong> directement accessible depuis l'extérieur (IP publique ou NAT) : <a href="#service-expos%C3%A9e-publiquement" rel="noreferrer">Service exposée publiquement</a>.</li><li>Utilisation de Caddy comme reverse-proxy : <a href="#sans-ssl" rel="noreferrer">Sans SSL</a> puis <a href="#reverse-proxy-caddy" rel="noreferrer">Reverse proxy Caddy</a>.</li></ul><h4 id="sans-ssl">Sans SSL</h4><p>Pour une utilisation en locale sans SSL nous allons récupérer le fichier d'exemple fourni avec le paquet Zammad.</p><pre><code class="language-nonum-bash-zammad-user">sudo cp /opt/zammad/contrib/nginx/zammad.conf /etc/nginx/sites-available/</code></pre><p>Si <strong>Zammad</strong> est le seul hébergé par Nginx sur cette machine nous pouvons le définir comme site par défaut :</p><figure class="kg-card kg-code-card"><pre><code class="language-nonum-nginx">[...]
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _;
[...]</code></pre><figcaption><p><span style="white-space: pre-wrap;">/etc/nginx/sites-available/zammad.conf</span></p></figcaption></figure><figure class="kg-card kg-code-card"><pre><code class="language-nonum-bash-zammad-user">sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-{available,enabled}/zammad.conf
sudo systemctl restart nginx.service</code></pre><figcaption><p><span style="white-space: pre-wrap;">Suppression de la configuration par défaut et activation de Zammad</span></p></figcaption></figure><p>Zammad est maintenant accessible sans SSL sur le port défini (ici 80) via l'IP de votre machine.</p><h4 id="service-expos%C3%A9e-publiquement">Service exposée publiquement</h4><p>Si votre machine est accessible publiquement et que vous avez un domaine pointant vers cette dernière, par exemple <code>support.thys.tips</code> pour cet exemple.</p><p>Premièrement je vous recommande bien sécuriser votre machine en configurant correctement votre pare-feu (<strong>UFW</strong> sur ubuntu par défaut mais j'ai une préférence pour <strong>firewalld</strong>) et en utilisant une clé SSH pour la connexion à votre machine par exemple.</p><p>Afin de générer les certificats nécessaires nous allons utiliser <strong>certbot </strong>et l'exemple de configuration de<strong> Zammad </strong>sans SSL.</p><p>Les premières étapes sont proches de la section précédente :</p><figure class="kg-card kg-code-card"><pre><code class="language-nonum-bash-zammad-user">sudo cp /opt/zammad/contrib/nginx/zammad.conf /etc/nginx/sites-available/</code></pre><figcaption><p><span style="white-space: pre-wrap;">Récupération de la configuration de Zammad</span></p></figcaption></figure><p>Ensuite vous devez modifier <code>server_name</code> dans le fichier <code>/etc/nginx/sites-available/zammad.conf</code> afin d'y mettre le nom de domaine que vous avez choisi.</p><p>Vous pouvez ensuite activer et recharger la configuration <strong>Nginx </strong>:</p><figure class="kg-card kg-code-card"><pre><code class="language-nonum-bash-zammad-user">sudo ln -s /etc/nginx/sites-{available,enabled}/zammad.conf
sudo systemctl restart nginx.service </code></pre><figcaption><p><span style="white-space: pre-wrap;">Activation de la configuration de Zammad dans Nginx</span></p></figcaption></figure><p>Nous pouvons ensuite passer à la génération des certificats :</p><figure class="kg-card kg-code-card"><pre><code class="language-nonum-bash-zammad-user">sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx --hsts --staple-ocsp -d &lt;votre-domaine&gt;</code></pre><figcaption><p><span style="white-space: pre-wrap;">Génération des certificats avec certbot</span></p></figcaption></figure><p>Vous pouvez indiquer que vous souhaitez la redirection <strong>HTTP</strong> vers <strong>HTTPS</strong>.</p><p><strong>Certbot </strong>se chargera de modifier la configuration pour y inclure le nécessaire pour l'activation du SSL.</p><p>Votre instance de <strong>Zammad</strong> est maintenant accessible depuis : <strong>https://&lt;votre-domaine&gt;</strong>.</p><h4 id="reverse-proxy-caddy">Reverse proxy Caddy</h4><p>Après avoir suivi les instruction de la section <a href="#sans-ssl" rel="noreferrer">Sans SSL</a> nous pouvons configurer Caddy comme reverse proxy.</p><p>Caddy s'installe directement via son paquet :</p><pre><code class="language-nonum-bash-caddy-user">sudo apt install caddy</code></pre><p>La configuration de Caddy se fait dans le fichier `/etc/caddy/Caddyfile`, afin de simplifier la configuration ultérieure de plusieurs domaines j'utilise des blocs que je peux importer :</p><figure class="kg-card kg-code-card"><pre><code class="language-Caddyfile"># Configuration par défaut
{
    # Email pour la génération des certificats
    email &lt;votre-email-pour-letsencrypt&gt;
}

# Définition des paramètres pour obtenir les logs sous forme de fichier
(logging) {
    log {
        output file /var/log/caddy/caddy-{args[0]}.log {
            roll_size 1Mib
            roll_local_time
            roll_keep 24
            roll_keep_for 7d
        }
    }
}

# Définition des entêtes pour la sécurité
(headers) {
    header {
        -server
        Permissions-Policy interest-cohort=()
        Strict-Transport-Security max-age=31536000;
        X-Content-Type-Options nosniff
        X-Frame-Options DENY
        Referrer-Policy no-referrer-when-downgrade
    }
}</code></pre><figcaption><p><span style="white-space: pre-wrap;">/etc/caddy/Caddyfile</span></p></figcaption></figure><p>Ensuite en dessous de cette configuration nous pouvons définir la configuration pour notre service <strong>Zammad</strong> :</p><figure class="kg-card kg-code-card"><pre><code class="language-Caddyfile">&lt;votre-domaine&gt; {
	reverse_proxy http://&lt;ip-de-zammad&gt; {
		header_up X-Real-IP {remote_host}
	}
	encode zstd gzip
	import logging &lt;nom-du-fichier-de-log&gt;
	import headers
}</code></pre><figcaption><p><span style="white-space: pre-wrap;">/etc/caddy/Caddyfile</span></p></figcaption></figure><p>Voici la configuration que j'utilise :</p><figure class="kg-card kg-code-card"><pre><code class="language-Caddyfile">support.thystips.net {
	reverse_proxy http://10.1.70.20 {
		header_up X-Real-IP {remote_host}
	}
	encode zstd gzip
	import logging support
	import headers
}</code></pre><figcaption><p><span style="white-space: pre-wrap;">Ma configuration personnelle</span></p></figcaption></figure><p>Il faut ensuite redémarrer le service associé afin que <strong>Caddy</strong> recharge sa configuration et commence la génération des certificats.</p><p>Vous instance <strong>Zammad</strong> est accessible depuis : <strong>https://&lt;votre-domaine&gt;</strong>.</p><h2 id="premi%C3%A8re-connexion">Première connexion</h2><p>Maintenant que vous avez accès à l'interface de <strong>Zammad</strong> vous devriez avoir la page suivante :</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image.png" class="kg-image" alt="Page de configuration de Zammad" loading="lazy" width="565" height="636"></figure><p>Nous allons pouvons procéder à la configuration de notre solution.</p><p>Commencez par créer votre compte administrateur :</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://thys.tips/content/images/2024/01/image-1.png" class="kg-image" alt="Formulaire de création de compte administrateur Zammad" loading="lazy" width="421" height="455"><figcaption><span style="white-space: pre-wrap;">Création du compte administrateur</span></figcaption></figure><p>Ensuite définir des informations de basiques au sujet de votre organisation :</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-2.png" class="kg-image" alt="Formulaire pour la définition des paramètres de l'organisation" loading="lazy" width="422" height="558"></figure><p>La configuration d'un <strong>SMTP</strong> externe lors de la première configuration a tendance à être en échec, vous pouvez passer cette étape et revenir sur cette configuration par la suite :</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-3.png" class="kg-image" alt="Formulaire configuration serveur SMTP" loading="lazy" width="418" height="619"></figure><p>Je vous recommande également de sauter l'étape suivant et de revenir sur la configuration des canaux de communication par la suite.</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-4.png" class="kg-image" alt="" loading="lazy" width="420" height="305"></figure><h2 id="configuration-de-zammad">Configuration de Zammad</h2><p>Nous pouvons maintenant passer à la configuration granulaire de notre plateforme support pour répondre à nos besoin.</p><p>L'accès aux paramètres se fait via l'icon en forme de roulette en bas à gauche de l'interface. Pensez également à bien valider les modification en appuyant sur le bouton <code>Envoyer</code>.</p><h3 id="nom-de-linstance">Nom de l'instance</h3><p>Nous avons déjà défini le nom de notre organisation pendant la première connexion mais le nom de la plateforme est tout celui par défaut :</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-5.png" class="kg-image" alt="Formulaire de marque" loading="lazy" width="1020" height="887" srcset="https://thys.tips/content/images/size/w600/2024/01/image-5.png 600w, https://thys.tips/content/images/size/w1000/2024/01/image-5.png 1000w, https://thys.tips/content/images/2024/01/image-5.png 1020w" sizes="(min-width: 720px) 720px"></figure><h3 id="groupes">Groupes</h3><p>Vous pouvez créer des groupes pour isoler différents services sur votre plateforme support. Ici j'ai simplement remplacer le groupe <code>Users</code> par un nom que j'ai défini.</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-10.png" class="kg-image" alt="Liste des groupes" loading="lazy" width="632" height="222" srcset="https://thys.tips/content/images/size/w600/2024/01/image-10.png 600w, https://thys.tips/content/images/2024/01/image-10.png 632w"></figure><h3 id="email">Email</h3><p>J'ai conseillé plus haut de sauter la configuration du serveur SMTP, nous allons y revenir maintenant.<br>La première chose à faire et de définir l'adresse qui devra être utilisée pour l'envoi des notifications :</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-9.png" class="kg-image" alt="Formulaire de paramètres des canaux emails" loading="lazy" width="1042" height="481" srcset="https://thys.tips/content/images/size/w600/2024/01/image-9.png 600w, https://thys.tips/content/images/size/w1000/2024/01/image-9.png 1000w, https://thys.tips/content/images/2024/01/image-9.png 1042w" sizes="(min-width: 720px) 720px"></figure><p>Vous pouvez maintenant définir le serveur <strong>SMTP</strong> pour les notifications.</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/Screenshot_2024-01-01-18-51-09_20781.png" class="kg-image" alt="" loading="lazy" width="1581" height="477" srcset="https://thys.tips/content/images/size/w600/2024/01/Screenshot_2024-01-01-18-51-09_20781.png 600w, https://thys.tips/content/images/size/w1000/2024/01/Screenshot_2024-01-01-18-51-09_20781.png 1000w, https://thys.tips/content/images/2024/01/Screenshot_2024-01-01-18-51-09_20781.png 1581w" sizes="(min-width: 720px) 720px"></figure><p>Enfin si vous souhaitez configurer la création de ticket par email vous pouvez définir des comptes et les attacher aux <a href="#groupes" rel="noreferrer">groupes</a> définis plus haut.</p><h3 id="authentification-externe">Authentification externe</h3><p>Il est possible de relier <strong>Zammad</strong> à un serveur <strong>LDAP</strong> afin de récupérer les utilisateurs depuis ce dernier.</p><p>On commence par définir les information pour joindre le serveur LDAP :</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/Screenshot_2024-01-01-19-57-29_28634.png" class="kg-image" alt="Formulaire ajout LDAP (paramètres du serveur)" loading="lazy" width="997" height="648" srcset="https://thys.tips/content/images/size/w600/2024/01/Screenshot_2024-01-01-19-57-29_28634.png 600w, https://thys.tips/content/images/2024/01/Screenshot_2024-01-01-19-57-29_28634.png 997w" sizes="(min-width: 720px) 720px"></figure><p>Puis la définition de l'utilisateur qu'utilisera Zammad pour s'y connecter :</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/Screenshot_2024-01-02-12-49-59_11668.png" class="kg-image" alt="Formulaire ajout LDAP (paramètres de l'utilisateur)" loading="lazy" width="669" height="383" srcset="https://thys.tips/content/images/size/w600/2024/01/Screenshot_2024-01-02-12-49-59_11668.png 600w, https://thys.tips/content/images/2024/01/Screenshot_2024-01-02-12-49-59_11668.png 669w"></figure><p>Nous pouvons ensuite définir les attributs <strong>LDAP</strong> qui seront utilisés dans <strong>Zammad</strong>, cette configuration est adapté pour <strong>OpenLDAP</strong> et <strong>FreeIPA </strong>pour<strong> Active Directory </strong>l'attribut <strong>UID</strong> sera <strong><em>samAccountName</em></strong>. Vous pouvez également lié des groupes <strong>LDAP</strong> à des rôles dans <strong>Zammad</strong> comme ici où j'ai un groupe pour les administrateurs, un pour les agent et un dernier pour les personne ayant accès à la plateforme en tant que client. </p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/Screenshot_2024-01-02-13-01-42_30678.png" class="kg-image" alt="" loading="lazy" width="661" height="895" srcset="https://thys.tips/content/images/size/w600/2024/01/Screenshot_2024-01-02-13-01-42_30678.png 600w, https://thys.tips/content/images/2024/01/Screenshot_2024-01-02-13-01-42_30678.png 661w"></figure><p>Vous aurez ensuite un récapitulatif du nombre d'utilisateurs qui seront importés.</p><h2 id="premier-ticket">Premier ticket</h2><p>La création de ticket peut se faire de plusieurs façon en fonction de votre configuration (interface web, mail, chat, etc.), comme nous avons configurer une boîte mail dans la section <a href="#email" rel="noreferrer">Email</a> nous allons faire un test.</p><p>Voici le mail que je viens d'envoyer sur l'adresse configurée dans <strong>Zammad </strong>:</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-11.png" class="kg-image" alt="Mail envoyé à Zammad" loading="lazy" width="470" height="131"></figure><p>En retour j'ai automatiquement reçu ce mail pour confirmer la création de ma demande :</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-12.png" class="kg-image" alt="Réponse automatique de prise en charge de ma demande" loading="lazy" width="1524" height="246" srcset="https://thys.tips/content/images/size/w600/2024/01/image-12.png 600w, https://thys.tips/content/images/size/w1000/2024/01/image-12.png 1000w, https://thys.tips/content/images/2024/01/image-12.png 1524w" sizes="(min-width: 720px) 720px"></figure><p>Il faudra que je pense à modifier ce message.</p><blockquote>Maintenant allons faire un petit tour sur notre interface et probablement qu'il n'y aura pas de ticket 🥲<br>Si vous avez fait comme moi vous avez le rôle <strong>Admin</strong> mais pas le rôle <strong>Agent</strong> sauf que les tickets sont traités par les agents et non les admins donc on va rectifier ça !</blockquote><p>Afin de se donner les droits d'<strong>Agent</strong> pour traiter les tickets :</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-14.png" class="kg-image" alt="" loading="lazy" width="1297" height="799" srcset="https://thys.tips/content/images/size/w600/2024/01/image-14.png 600w, https://thys.tips/content/images/size/w1000/2024/01/image-14.png 1000w, https://thys.tips/content/images/2024/01/image-14.png 1297w" sizes="(min-width: 720px) 720px"></figure><p>Maintenant allons voir nos nouveaux tickets :</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-15.png" class="kg-image" alt="" loading="lazy" width="861" height="339" srcset="https://thys.tips/content/images/size/w600/2024/01/image-15.png 600w, https://thys.tips/content/images/2024/01/image-15.png 861w" sizes="(min-width: 720px) 720px"></figure><p>Comme vous pouvez le voir nous avons un nouveau ticket.</p><p>Une fois ouvert nous avons accès à une interface assez complète afin de répondre et classifier notre ticket.</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-16.png" class="kg-image" alt="" loading="lazy" width="1632" height="817" srcset="https://thys.tips/content/images/size/w600/2024/01/image-16.png 600w, https://thys.tips/content/images/size/w1000/2024/01/image-16.png 1000w, https://thys.tips/content/images/size/w1600/2024/01/image-16.png 1600w, https://thys.tips/content/images/2024/01/image-16.png 1632w" sizes="(min-width: 720px) 720px"></figure><p>Une fois les modification faites vous pouvez les valider avec le bouton <code>Mise à jour</code> en bas à droite.</p><figure class="kg-card kg-image-card"><img src="https://thys.tips/content/images/2024/01/image-17.png" class="kg-image" alt="" loading="lazy" width="1242" height="827" srcset="https://thys.tips/content/images/size/w600/2024/01/image-17.png 600w, https://thys.tips/content/images/size/w1000/2024/01/image-17.png 1000w, https://thys.tips/content/images/2024/01/image-17.png 1242w" sizes="(min-width: 720px) 720px"></figure><hr><p>J'espère que vous avez trouvez cet article utile !</p><p>N'hésitez pas à laisser un commentaire.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Déverrouiller une partition Linux chiffrée via SSH ]]></title>
        <description><![CDATA[ Lors de l&#39;installation d&#39;un nouveau système il est courant d&#39;avoir une hésitation entre sécurité et simplicité. Nous allons voir ici comment déverrouiller une partition chiffrée avec luks via SSH. ]]></description>
        <link>https://thys.tips/luks-ssh/</link>
        <guid isPermaLink="false">656f714426c50543e8a49a69</guid>
        <category><![CDATA[ Système ]]></category>
        <dc:creator><![CDATA[ ThysTips ]]></dc:creator>
        <pubDate>mar., 05 déc. 2023 22:08:03 +0100</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>Lors de l'installation d'un nouveau système il est courant d'avoir une hésitation entre sécurité et simplicité.<br>
C'est vrai que ce n'est pas très pratique de devoir être devant un serveur lors d'un redémarrage ainsi que les cas où le mappage du clavier reste en anglais US.</p>
<p>Pour cette raison voici un tutoriel pour réaliser cette action en réseau via SSH.</p>
<h2 id="pr%C3%A9requis">Prérequis</h2>
<ul>
<li>Ubuntu (testé sur ubuntu 20.04)</li>
<li>Partition chiffrée</li>
<li>Adresse IP fixe (ou équivalent)</li>
<li>Pair de clés SSH</li>
</ul>
<h2 id="mise-%C3%A0-jour-du-syst%C3%A8me">Mise à jour du système</h2>
<p>Dans un premier temps il faut que le système soit à jour.</p>
<pre><code class="language-nonum-bash-server-root">apt update
apt upgrade -y
</code></pre>
<h2 id="installation-de-dropbear-pour-initramfs">Installation de dropbear pour initramfs</h2>
<p>Dans cette partie nous allons installer une version spécifique du serveur SSH <code>Dropbear</code> avec des fonctionnalités lui permettant de fonctionner dans un environnement <code>initramfs</code> qui est utilisé pendant le démarrage.</p>
<pre><code class="language-nonum-bash-server-root">apt install dropbear-initramfs
</code></pre>
<blockquote>
<p><strong><em>NOTE:</em></strong> À l'installation l'erreur suivante peut s'afficher :</p>
<pre><code>dropbear: WARNING: Invalid authorized_keys file, remote unlocking of cryptroot via SSH won't work!
</code></pre>
<p>Cette erreur sera réglée par la suite.</p>
</blockquote>
<h2 id="configuration-de-dropbear">Configuration de dropbear</h2>
<p>Le fichier de configuration spécifique au paquet <code>dropbear-initramfs</code> est le suivant :<br>
<code>/etc/dropbear-initramfs/config</code>.</p>
<h3 id="changement-du-port-par-d%C3%A9faut">Changement du port par défaut</h3>
<p>Comme l'environnment <code>initramfs</code> ne permet pas l'usage d'un pare-feu il est recommandé de changer le port utilisé par le serveur <code>dropbear</code>.</p>
<p>Par exemple utiliser le port <code>9210</code> il faut ajouter la ligne suivante au fichier de configuration :</p>
<p><code>/etc/dropbear-initramfs/config</code></p>
<pre><code class="language-conf">DROPBEAR_OPTIONS="-p 9210"
</code></pre>
<h4 id="m%C3%A9thode-alternative">Méthode alternative</h4>
<p>Pendant les recherches j'ai vu que certaines personne avait eu des problèmes avec cette configuration. Il semblerait que dans certains cas, mettre la ligne <code>DROPBEAR_OPTION</code> dans le fichier <code>/etc/initramfs-tools/initramfs.conf</code> permettrait de régler le problème.</p>
<h3 id="ajustement">Ajustement</h3>
<p>Pour voir les options toutes disponibles utilisez la commande <code>man dropbear</code>.</p>
<p>Personnellement j'ai choisi d'ajouter les options :</p>
<ul>
<li><code>-s</code> : Désactive la connexion par mot de passe</li>
<li><code>-j</code> : Désactivation du forwarding de port local</li>
<li><code>-k</code> : Désactivation du forwarding de port distant</li>
<li><code>-I 60</code> : Temps avant la coupure de la connexion lorsqu'il n'y a pas de transmission de traffic</li>
</ul>
<p>Résultat nous avons la configuration suivante :</p>
<p><code>/etc/dropbear-initramfs/config</code></p>
<pre><code class="language-conf">DROPBEAR_OPTIONS="-p 9210 -s -j -k -I 60"
</code></pre>
<h2 id="authentification-ssh">Authentification SSH</h2>
<p>Maintenant comme nous avons désactivé la connexion par mot de passe il faut ajouter votre clé publique aux clés ssh autorisées.</p>
<p>Cette clé doit être ajoutée dans le fichier <code>/etc/dropbear-initramfs/authorized_keys</code>, une clé par ligne.</p>
<p>Si vous voulez réduire les privilèges liés à une clé pour n'autorisé que l'action de déchiffrement vous pouvez ajouter les instructions suivantes au début de la ligne:<br>
<code>no-port-forwarding,no-agent-forwarding,no-x11-forwarding,command="/bin/cryptroot-unlock"</code>.</p>
<blockquote>
<p><strong><em>NOTE:</em></strong> Pour rappel, dans le cas d'une clé <code>RSA</code> le vôtre est probablement dans le fichier <code>~/.ssh/id_rsa.pub</code> sur votre machine et non le serveur.<br>
Si vous avez besoin d'en générer une la commande <code>ssh-keygen</code> de votre station de travail a cette fonction.</p>
</blockquote>
<p>Après avoir modifié la configuration de dropbear, il ne faut pas oublier de reconstruire l'envirronement initramfs: <code>update-initramfs -u</code>.</p>
<h2 id="param%C3%A8tres-ip-du-kernel">Paramètres IP du Kernel</h2>
<p>Afin d'avoir une IP fixe lors du démarrage il faut définir les paramètres IP au niveau du kernel.</p>
<h3 id="d%C3%A9finition-dune-ip-statique">Définition d'une IP statique</h3>
<p>Il est possible de définir une IP statique au démarrage en modifiant le paramètre <code>GRUB_CMDLINE_LINUX_DEFAULT</code> du fichier <code>/etc/default/grub</code>.<br>
Pour se faire il faut ajouter l'instruction suivante : <code>ip=&lt;ip&gt;::&lt;ip-passerelle&gt;:&lt;masque&gt;</code>.</p>
<p>Voici un exemple :</p>
<pre><code>GRUB_CMDLINE_LINUX_DEFAULT="maybe-ubiquity ip=192.168.1.2::192.168.1.1:255.255.255.0"
</code></pre>
<p>Ensuite il ne faut pas oublier de mettre à jour la configuration de grub :</p>
<pre><code class="language-nonum-bash-server-root">update-grub
</code></pre>
<h4 id="m%C3%A9thode-alternative">Méthode alternative</h4>
<p>Pour cette étape aussi j'ai pu observer que pour certaines personnes cette méthode ne fonctionne pas correctement, si vous êtes dans cette situation vous pouvez essayer ce qui suit.</p>
<p>À la place de modifier le fichier <code>/etc/default/grub</code>, il est possible d'ajouter la ligne : <code>IP="&lt;ip&gt;::&lt;ip-passerelle&gt;:&lt;masque&gt;::eth0:off"</code> au fichier <code>/etc/initramfs-tools/initramfs.conf</code>.</p>
<blockquote>
<p><strong><em>NOTE:</em></strong>: Le mot clé <code>IP</code> est en majuscule.</p>
</blockquote>
<p>Et ensuite il ne faut pas oublier de reconstruire initramfs avec la commande <code>update-initramfs -u</code>.</p>
<h2 id="connexion">Connexion</h2>
<p>Maintenant faisons un essai en redémarrant la machine :</p>
<pre><code class="language-nonum-bash-server-root">reboot
</code></pre>
<p>Ensuite connectons-nous à la machine :</p>
<pre><code class="language-nonum-bash-remote">ssh -p 9210 root@192.168.127.146
</code></pre>
<p>Enfin il ne reste plus que le déverrouillage de la partition :</p>
<pre><code class="language-nonum-bash-server-root-2-2">cryptroot-unlock
Please unlock disk dm_crypt-0:
</code></pre>
<p>Une fois la connexion automatiquement coupée, la partition est ouverte, le système termine son démarrage et il est maintenant possible de se connecter.</p>
 ]]></content:encoded>
    </item>

</channel>
</rss>