<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://doc.ycharbi.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ycharbi</id>
	<title>Wiki doc - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://doc.ycharbi.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ycharbi"/>
	<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php/Sp%C3%A9cial:Contributions/Ycharbi"/>
	<updated>2026-05-19T07:20:32Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Busybox&amp;diff=1566</id>
		<title>Busybox</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Busybox&amp;diff=1566"/>
		<updated>2026-05-09T21:25:14Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : /* Via les sources */ Ajout d&amp;#039;une méthode pour compiler depuis un noyau &amp;gt;=6.8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
[https://fr.wikipedia.org/wiki/BusyBox Busybox] est un exécutable regroupant une multitude d&#039;utilitaires généralement disponibles via [https://fr.wikipedia.org/wiki/GNU_Core_Utilities GNU Core Utilities]. Il a l&#039;avantage de ne prendre que très peu de place et peut être utilisé pour faire des [[Busybox_init|systèmes embarqués très simples]].&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Via le gestionnaire de paquet==&lt;br /&gt;
 apt install busybox&lt;br /&gt;
&lt;br /&gt;
==Via les sources==&lt;br /&gt;
Le paquet &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;build-essential&amp;lt;/code&amp;gt; est nécessaire pour utiliser la commande &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;make&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{info|Depuis Linux 6.8, la compilation tombe en échec pour cause de macro &amp;lt;code&amp;gt;TCA_CQB_MAX&amp;lt;/code&amp;gt; non définie. Le problème est [https://forum.beagleboard.org/t/errors-during-busybox-compilation/38969/6 connu] et est contournable en désactivant la fonction  &amp;lt;code&amp;gt;CONFIG_TC&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;.config&amp;lt;/code&amp;gt; des sources après avoir fait la commande &amp;lt;code&amp;gt;make defconfig&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2&lt;br /&gt;
tar xf busybox-1.36.1.tar.bz2&lt;br /&gt;
cd busybox-1.36.1/&lt;br /&gt;
make defconfig&lt;br /&gt;
# sed -i &#039;s/CONFIG_TC=y/CONFIG_TC=n/g&#039; .config&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note : le code source est également disponible dans [https://{{SERVERNAME}}/fichiers/système/applications/busybox/busybox-1.36.1.tar.bz2 nos fichiers].&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il est possible d&#039;embarquer les dépendances nécessaires au fonctionnement de l&#039;ensemble directement dans le binaire via la commande de compilation &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;make LDFLAGS=&amp;quot;--static&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; (ce dernier sera par conséquent plus lourd). Ceci est utile lorsque &#039;&#039;Busybox&#039;&#039; est intégré à un système dépourvu des bibliothèques en question.}}&lt;br /&gt;
&lt;br /&gt;
Un exécutable &#039;&#039;busybox&#039;&#039; a été créé dans le répertoire courant.&lt;br /&gt;
&lt;br /&gt;
La commande &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;make defconfig&amp;lt;/code&amp;gt; permet de créer le fichier de configuration pour &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;make&amp;lt;/code&amp;gt; (&#039;&#039;.config&#039;&#039;). Les commandes de pré-configurations possibles sont :&lt;br /&gt;
* &#039;&#039;&#039;make defconfig&#039;&#039;&#039; : Créé la configuration la plus saine possible. Ça active la plupart des fonctionnalités sans quelques outils de débogage ainsi que les outils nécessitants des modifications du système comme les noms de périphériques &#039;&#039;selinux&#039;&#039; ou &#039;&#039;devfs&#039;&#039;. Utiliser cette option si vous voulez démarrer depuis un &#039;&#039;Busybox&#039;&#039; complet pour, par la suite, écrémer les fonctionnalités pour en avoir un plus petit.&lt;br /&gt;
* &#039;&#039;&#039;make allnoconfig&#039;&#039;&#039; : Désactive tout. Cela crée une petite version de &#039;&#039;Busybox&#039;&#039; qui ne fait rien. Commencez ici si vous savez exactement ce que vous voulez et que vous souhaitez sélectionner uniquement ces fonctionnalités.&lt;br /&gt;
* &#039;&#039;&#039;make menuconfig&#039;&#039;&#039; : Modifie interactivement le fichier &#039;&#039;.config&#039;&#039; via une interface de menu à plusieurs niveaux. Utilisez-le après l&#039;un des deux précédents.&lt;br /&gt;
Les autres options sont :&lt;br /&gt;
* &#039;&#039;&#039;make oldconfig&#039;&#039;&#039; : Mettre à jour un vieux fichier &#039;&#039;.config&#039;&#039; pour une nouvelle version de &#039;&#039;Busybox&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;make allyesconfig&#039;&#039;&#039; : Sélectionnez absolument tout. Cela crée une version statiquement liée de &#039;&#039;Busybox&#039;&#039; remplie de code de débogage, avec des dépendances sur &#039;&#039;selinux&#039;&#039;, en utilisant des noms de &#039;&#039;devfs&#039;&#039;... Cela s&#039;assure que tout est compilé. Que le résultat fasse quelque chose d&#039;utile ou non est une question ouverte.&lt;br /&gt;
* &#039;&#039;&#039;make randconfig&#039;&#039;&#039; : Créer une configuration aléatoire à des fins de tests.&lt;br /&gt;
&lt;br /&gt;
=Socket réseau en utilisateur standard=&lt;br /&gt;
Par défaut, un système &#039;&#039;Linux&#039;&#039; n&#039;autorise la création et la gestion d&#039;un socket réseau que par l&#039;utilisateur &#039;&#039;root&#039;&#039;. Il peut être pratique de permettre certains exécutables à le faire via un utilisateur standard (c&#039;est chiant d&#039;avoir à taper le mot de passe &#039;&#039;root&#039;&#039; tout le temps). Pour ce faire, nous utiliserons les [[Linux capabilities]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autorisation de redirection réseau&#039;&#039;&#039;&lt;br /&gt;
 setcap CAP_NET_BIND_SERVICE=+eip /bin/busybox&lt;br /&gt;
&lt;br /&gt;
{{Astuce|On peut voir cette autorisation avec la commande &amp;lt;code&amp;gt;getcap /bin/busybox&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Les utilisateurs standards peuvent désormais utiliser le serveur &#039;&#039;HTTP&#039;&#039; ou autres intégré à &#039;&#039;Busybox&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://superuser.com/questions/710253/allow-non-root-process-to-bind-to-port-80-and-443/892391&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
Nous allons partir du principe que l&#039;emplacement de notre binaire &#039;&#039;busybox&#039;&#039; se trouve dans notre variable d&#039;environnement &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;$PATH&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lister les programmes disponibles dans notre Busybox&#039;&#039;&#039;&lt;br /&gt;
 busybox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Afficher le manuel des outils contenus dans Busybox&#039;&#039;&#039;&lt;br /&gt;
 man busybox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Avec un &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;/&amp;lt;/code&amp;gt; suivi du nom de la commande + &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;entrer&amp;lt;/code&amp;gt; + &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;n&amp;lt;/code&amp;gt; on tombe directement sur le manuel de l&#039;outil désiré.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Serveur WEB==&lt;br /&gt;
&#039;&#039;&#039;Utiliser le serveur WEB intégré&#039;&#039;&#039;&lt;br /&gt;
 busybox httpd -f -v -h /tmp/foo/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Le serveur httpd ne liste pas les fichiers, il faut entrer une URL complète comme pour le TFTP. Cependant, il redirige automatiquement sur un index.html si présent.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-f&#039;&#039;&#039; : Ne rend pas la main. Ça permet de fermer le serveur web avec un &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;ctrl+c&amp;lt;/code&amp;gt; au lieu de ce faire chier avec les commandes &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;ps&amp;lt;/code&amp;gt; et &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;kill&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;-v&#039;&#039;&#039; : affiche les IP des clients se connectant et le message renvoyé par le serveur&lt;br /&gt;
* &#039;&#039;&#039;-h&#039;&#039;&#039; : Spécifie le répertoire de travail du serveur. Si ce paramètre n&#039;est pas renseigné, le répertoire courant est utilisé&lt;br /&gt;
&lt;br /&gt;
==Serveur DHCP==&lt;br /&gt;
&#039;&#039;&#039;Créer le fichiers du processus&#039;&#039;&#039;&lt;br /&gt;
 touch /tmp/udhcpd.pid&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Créer le fichier contenant les baux DHCP&#039;&#039;&#039;&lt;br /&gt;
 touch /tmp/udhcpd.leases&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Créer un fichier de configuration&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt; /tmp/udhcpd.conf &amp;lt;&amp;lt; _EOF_&lt;br /&gt;
# Plage d&#039;adresse attribuable&lt;br /&gt;
start 192.168.0.1 # Par défaut: 192.168.0.20&lt;br /&gt;
end 192.168.0.253 # Par défaut: 192.168.0.254&lt;br /&gt;
&lt;br /&gt;
# Interface réseau d&#039;écoute&lt;br /&gt;
interface eth1 # Par défaut: eth0&lt;br /&gt;
&lt;br /&gt;
# Nombre maximum de baux &lt;br /&gt;
max_leases 253 # Par défaut: 254&lt;br /&gt;
&lt;br /&gt;
# Stocker le temps restant pour chaque bail dans le fichier des baux&lt;br /&gt;
# C&#039;est utile sur les systèmes embarqués ne pouvant garder l&#039;heure après un redémarrage&lt;br /&gt;
# Si cette valeur est définie à &amp;quot;no&amp;quot;, l&#039;heure de fin de bail sera stocker dans le fichier&lt;br /&gt;
# des baux au lieu du temps restant avant expiration&lt;br /&gt;
&lt;br /&gt;
#remaining yes # Par défaut: yes&lt;br /&gt;
&lt;br /&gt;
# Localisation du fichier des baux&lt;br /&gt;
lease_file /tmp/udhcpd.leases&lt;br /&gt;
&lt;br /&gt;
# Localisation du fichier processus&lt;br /&gt;
pidfile /tmp/udhcpd.pid # Par défaut: /var/run/udhcpd.pid&lt;br /&gt;
&lt;br /&gt;
# Les options suivantes sont pour le PXE&lt;br /&gt;
#siaddr 192.168.0.22 # Par défaut: 0.0.0.0&lt;br /&gt;
#sname zorak # Par défaut: (none)&lt;br /&gt;
#boot_file /var/nfs_root # Par défaut: (none)&lt;br /&gt;
&lt;br /&gt;
# Options DHCP&lt;br /&gt;
# Elles peuvent être spécifiées via le mot clé &amp;quot;option&amp;quot; ou &amp;quot;opt&amp;quot; qui est un alias.&lt;br /&gt;
# La seule options définie par défaut est &amp;quot;lease&amp;quot; pour définir la durée des baux&lt;br /&gt;
opt dns 192.168.170.171 80.67.169.12&lt;br /&gt;
option subnet 255.255.255.0&lt;br /&gt;
opt router 192.168.0.254&lt;br /&gt;
#opt wins 192.168.10.10 # Ajoute un serveur WINS&lt;br /&gt;
#option dns 129.219.13.81 # Ajoute un autre DNS aux 2 autres ci-dessus&lt;br /&gt;
option domain local&lt;br /&gt;
option lease 864000 # 10 jours en secondes&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez adapter les adresses et nom d&#039;interface avec les commande suivante en remplaçant &#039;&#039;toto&#039;&#039; par la donnée appropriée:&lt;br /&gt;
 sed -i &#039;s/192\.168\.0\./192\.168\.toto./g&#039; /tmp/udhcpd.conf&lt;br /&gt;
 sed -i &#039;s/eth1/toto/g&#039; /tmp/udhcpd.conf&lt;br /&gt;
&lt;br /&gt;
Paramètres possibles :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Paramètre !! Effet !! Valeur par défaut&lt;br /&gt;
|-&lt;br /&gt;
| Paramètre 1 || Il fait ça || yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Liste exhaustive des options supportés. Voir le fichier source &#039;&#039;options.c&#039;&#039; :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Option !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| toto || titi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exécuter le serveur DHCP&#039;&#039;&#039;&lt;br /&gt;
 busybox udhcpd -fv /tmp/udhcpd.conf&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-f&#039;&#039;&#039; : Ne rend pas la main. Ça permet de fermer le serveur DHCP avec un &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;ctrl+c&amp;lt;/code&amp;gt; au lieu de ce faire chier avec les commandes &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;ps&amp;lt;/code&amp;gt; et &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;kill&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;-v&#039;&#039;&#039; : affiche les requêtes &#039;&#039;ACK&#039;&#039; et &#039;&#039;OFFER&#039;&#039; entre le serveur et les clients (on voit l&#039;IP attribué de ce fait)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sources de la section&#039;&#039;&#039;&lt;br /&gt;
* Page officielle de udhcpd: https://udhcp.busybox.net/&lt;br /&gt;
* Fichier de configuration exemple: https://udhcp.busybox.net/udhcpd.conf&lt;br /&gt;
&lt;br /&gt;
==NTP==&lt;br /&gt;
===Serveur NTP===&lt;br /&gt;
Définir l&#039;horloge système depuis une source réseau&lt;br /&gt;
 busybox ntpd -d -n -I eth0 -l -p 0.debian.pool.ntp.org&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-d&#039;&#039;&#039; : mode verbeux&lt;br /&gt;
* &#039;&#039;&#039;-n&#039;&#039;&#039; : ne pas démoniser (ne pas exécuter en arrière plan)&lt;br /&gt;
* &#039;&#039;&#039;-I&#039;&#039;&#039; : écouter sur l&#039;interface spécifiée pour les requêtes clientes&lt;br /&gt;
* &#039;&#039;&#039;-l&#039;&#039;&#039; : ouvre le socket &#039;&#039;UDP&#039;&#039; sur le port 123 pour les requêtes clientes&lt;br /&gt;
* &#039;&#039;&#039;-p&#039;&#039;&#039; : serveur de référence sur lequel se synchronise notre serveur&lt;br /&gt;
&lt;br /&gt;
==TFTP==&lt;br /&gt;
===Client TFTP===&lt;br /&gt;
Télécharger un fichier via &#039;&#039;TFTP&#039;&#039;&lt;br /&gt;
 busybox tftp -r toto.txt 192.168.100.2 -g&lt;br /&gt;
&lt;br /&gt;
Téléverser un fichier via &#039;&#039;TFTP&#039;&#039;&lt;br /&gt;
 busybox tftp -l toto.txt 192.168.100.2 -p&lt;br /&gt;
&lt;br /&gt;
===Serveur TFTP===&lt;br /&gt;
Le serveur &#039;&#039;TFTP&#039;&#039; est rarement embarqué dans le &#039;&#039;Busybox&#039;&#039; des distributions &#039;&#039;Linux&#039;&#039;. Dans ce cas, il faudra le compilé soit même (testé avec la version 1.36.1).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Busybox tftpd&#039;&#039; a besoin de s&#039;appuyer sur un programme (lui même présent dans &#039;&#039;Busybox&#039;&#039;) d&#039;ouverture de socket réseau : &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;udpsvd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 /tmp/busybox-1.36.1/busybox udpsvd -vE 0.0.0.0 69 /tmp/busybox-1.36.1/busybox tftpd -c /tmp/tftp/&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-r&#039;&#039;&#039; : lecture seule&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; : téléversements autorisés&lt;br /&gt;
* &#039;&#039;&#039;-u&#039;&#039;&#039; : rendre l&#039;utilisateur passé en paramètre propriétaire des fichiers téléversés&lt;br /&gt;
* &#039;&#039;&#039;-l&#039;&#039;&#039; : journaliser dans &#039;&#039;Syslog&#039;&#039; en plus du &#039;&#039;Stdout&#039;&#039; (non fonctionnel d&#039;après mes tests)&lt;br /&gt;
&lt;br /&gt;
==Netcat==&lt;br /&gt;
Les commandes [[netcat]] sont identique à la version &#039;&#039;APT&#039;&#039; (avec quelques options en moins).&lt;br /&gt;
 busybox nc -l -p 2323&lt;br /&gt;
&lt;br /&gt;
 busybox nc ipserver 2323&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Envoyer un [https://tutorials.technology/tutorials/How-to-transfer-files-over-the-network-using-Netcat.html fichier]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sur le serveur :&lt;br /&gt;
 busybox nc -l -p 9999 &amp;gt; /tmp/titi.dat&lt;br /&gt;
&lt;br /&gt;
Sur le client :&lt;br /&gt;
 busybox nc 192.168.0.1 9999 &amp;lt; /tmp/titi/titi.dat&lt;br /&gt;
&lt;br /&gt;
==Terminal série==&lt;br /&gt;
On peut remplacer l&#039;usage de [[Minicom]] par &#039;&#039;Busybox&#039;&#039; avec l&#039;outil embarqué &#039;&#039;Microcom&#039;&#039;.&lt;br /&gt;
 busybox microcom -s 9600 /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Pour quitter &#039;&#039;Microcom&#039;&#039;, faites la séquence d&#039;échappement &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;ctrl+x&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* https://busybox.net/FAQ.html#configure&lt;br /&gt;
* https://busybox.net/downloads/BusyBox.html&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Gnome_3&amp;diff=1565</id>
		<title>Gnome 3</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Gnome_3&amp;diff=1565"/>
		<updated>2026-04-04T08:47:08Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Changer l&amp;#039;écran principal de GDM3&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:environnements_bureau]]&lt;br /&gt;
&lt;br /&gt;
=Installation Gnome=&lt;br /&gt;
==Linux Debian==&lt;br /&gt;
===Méthode de l&#039;installeur Debian===&lt;br /&gt;
 # apt install tasksel&lt;br /&gt;
 # tasksel install gnome-desktop --new-install&lt;br /&gt;
&lt;br /&gt;
===Méthode manuelle===&lt;br /&gt;
====Installation minimale====&lt;br /&gt;
 # apt install gnome-core gdm3&lt;br /&gt;
&lt;br /&gt;
====Installation avec applicatif de base====&lt;br /&gt;
 # apt install gnome-shell gdm3&lt;br /&gt;
&lt;br /&gt;
==Linux CentOS==&lt;br /&gt;
On peut installer GNOME 3 sous CentOS comme trouvé dans cette [https://unix.stackexchange.com/questions/181503/how-to-install-desktop-environments-on-centos-7 source] selon la méthode suivante:&lt;br /&gt;
 yum -y groups install &amp;quot;GNOME Desktop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 startx&lt;br /&gt;
&lt;br /&gt;
Je n&#039;ai pas explorer l&#039;usage d&#039;un gestionnaire de session comme GDM. Il serai intéressant de s&#039;en occuper plus tard (il semblerai qu&#039;une solution soit décrite dans le lien source donné plus haut).&lt;br /&gt;
&lt;br /&gt;
=Mises à jours automatiques=&lt;br /&gt;
Par défaut, les mises à jours automatiques sont activé et il n&#039;existe pas d&#039;options dans l&#039;interface graphique pour les configurer. La commande suivante suivie d&#039;un drapeau booléen permet d&#039;interagir avec.&lt;br /&gt;
&lt;br /&gt;
==Désactiver les mises à jours automatiques==&lt;br /&gt;
 $ gsettings set org.gnome.software download-updates false&lt;br /&gt;
&#039;&#039;Note : ne fonctionne pas contrairement à la méthode suivante.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 systemctl disable apt-daily-upgrade.timer&lt;br /&gt;
 systemctl disable apt-daily.timer&lt;br /&gt;
 systemctl stop apt-daily-upgrade.timer&lt;br /&gt;
 systemctl stop apt-daily.timer&lt;br /&gt;
&lt;br /&gt;
==Réactiver les mises à jours automatiques==&lt;br /&gt;
 $ gsettings set org.gnome.software download-updates true&lt;br /&gt;
&#039;&#039;Note : ne fonctionne pas contrairement à la méthode suivante.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 systemctl enable apt-daily-upgrade.timer&lt;br /&gt;
 systemctl enable apt-daily.timer&lt;br /&gt;
 systemctl start apt-daily-upgrade.timer&lt;br /&gt;
 systemctl start apt-daily.timer&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
 * https://www.jbnet.fr/systeme/linux/gnome-desactiver-la-rechercher-automatique-de-mises-a-jour.html&lt;br /&gt;
&lt;br /&gt;
=Ajouter une application au démarrage=&lt;br /&gt;
Sur Gnome 3, pour ajouter une application au démarrage nous avons 2 options :&lt;br /&gt;
&lt;br /&gt;
==Via l&#039;outil de personnalisation Gnome==&lt;br /&gt;
L&#039;application ce nomme : &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gnome-tweak-tool&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans l&#039;onglet &amp;quot;Applications au démarrage&amp;quot;, ajouter l&#039;application voulu.&lt;br /&gt;
&lt;br /&gt;
==Via fichier==&lt;br /&gt;
Toutes les applications au démarrage déclarer dans l&#039;outil de personnalisation Gnome sont dans des fichiers dans  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.config/autostart/&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons donc modifier les fichiers si nous voulons ajouter une option a notre application.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 # vim ~/.config/autostart/empathy.desktop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Exec=empathy -h #Ouverture en mode minimiser&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Modifier l&#039;apparence de Gnome=&lt;br /&gt;
L&#039;apparence de Gnome 3 a été totalement réalisé en CSS. Il suffit donc de modifier le fichier CSS pour donner a notre interface l&#039;apparence voulu.&lt;br /&gt;
&lt;br /&gt;
 # vim /usr/share/gnome-shell/theme/gnome-shell.css&lt;br /&gt;
&lt;br /&gt;
==Changer la couleur de la barre du haut==&lt;br /&gt;
&lt;br /&gt;
Modifier :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Panel */&lt;br /&gt;
#panel {&lt;br /&gt;
    background-color: black;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 1.86em;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Panel */&lt;br /&gt;
#panel {&lt;br /&gt;
    background-color: rgba(0,0,0,0.8); /*Couleur noire avec une opacité de 80%*/&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 1.86em;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement du fond d&#039;écran=&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.background picture-uri &#039;file:///home/toto/Images/monfonddécran.jpg&#039;&lt;br /&gt;
gsettings set org.gnome.desktop.background picture-options &#039;zoom&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement du pack d&#039;icône=&lt;br /&gt;
Nous pouvons personnaliser le pack d&#039;icône par défaut.Si un nouvelle utilisateur est créé, ce pack d&#039;icône sera sélectionné.&lt;br /&gt;
Pour l’exemple nous allons utiliser le pack d&#039;icône &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;papirus&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous débutons en installant &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;papirus&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;apt install papirus-icon-theme&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.interface icon-theme &#039;Papirus&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajout des boutons maximiser et minimiser dans la barre de titre des fenêtres=&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.wm.preferences button-layout &#039;appmenu:minimize,maximize,close&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement de fenêtres=&lt;br /&gt;
Le fonctionnement par défaut du &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;alt+tab&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; n&#039;est pas pratique lorsque l&#039;on a plusieurs fenêtres d&#039;une même application ouverte. Pour corriger cela il faut ajouter un raccourci clavier dans les &#039;&#039;&#039;Paramètres &amp;gt; raccourcis clavier &amp;gt; Changer de fenêtre &amp;gt; Alt+Tabulation&#039;&#039;&#039;, ce qui remplacera le comportement par défaut.&lt;br /&gt;
&lt;br /&gt;
Afin de permettre un changement de fenêtres [https://linuxiac.com/alt-tab-to-switch-only-on-current-workspace-in-gnome-shell/ entre les bureaux] virtuels, il faut définir la valeur suivante à &#039;&#039;false&#039;&#039;&lt;br /&gt;
 gsettings set org.gnome.shell.window-switcher current-workspace-only false&lt;br /&gt;
&lt;br /&gt;
=Montage USB=&lt;br /&gt;
==Désactivation du montage automatique USB==&lt;br /&gt;
Sous Gnome, l&#039;insertion d&#039;une clé ou d&#039;un disque dur USB a pour effet de déclencher son montage automatique, ce qui peut s&#039;avérer dérangeant lorsque ladite insertion a pour but de servir à la création d&#039;un liveCD ou tout simplement pour le partitionnement (le disque étant monté, ça peut foutre une merde monstre).&lt;br /&gt;
&lt;br /&gt;
===Méthode CLI===&lt;br /&gt;
Il faut simplement taper cette commande dans un terminal (root ou non, cela n&#039;a pas d&#039;importance)&lt;br /&gt;
 gsettings set org.gnome.desktop.media-handling automount false&lt;br /&gt;
&lt;br /&gt;
===Méthode graphique===&lt;br /&gt;
Cette méthode n&#039;a aucun intérêt au vu de la simplicité/rapidité de la méthode CLI (mais nous avons parfois des masochistes parmi nous...), voici tout de même la façon de s&#039;y prendre :&lt;br /&gt;
* Installation de l&#039;utilitaire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;dconf-editor&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Aller dans &#039;&#039;&#039;org &amp;gt; gnome &amp;gt; desktop &amp;gt; media-handling &amp;gt; &#039;&#039;décochez les cases en rapport avec l{{&#039;}}automount&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Ré-activation du montage automatique==&lt;br /&gt;
===Méthode CLI===&lt;br /&gt;
De même que pour la désactivation (seul la valeur booléenne change)&lt;br /&gt;
 gsettings set org.gnome.desktop.media-handling automount true&lt;br /&gt;
&lt;br /&gt;
===Méthode graphique===&lt;br /&gt;
Dans dconf-editor :&lt;br /&gt;
* Installation de l&#039;utilitaire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;dconf-editor&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Aller dans &#039;&#039;&#039;org &amp;gt; gnome &amp;gt; desktop &amp;gt; media-handling &amp;gt; &#039;&#039;cochez les cases en rapport avec l{{&#039;}}automount&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://askubuntu.com/questions/89244/how-to-disable-automount-in-nautiluss-preferences#102601&lt;br /&gt;
&lt;br /&gt;
=Montage réseau=&lt;br /&gt;
Il est possible de monter des partage réseau via différent protocoles au travers du module [https://fr.wikipedia.org/wiki/GVFS GVFS] accessible par &#039;&#039;Nautilus&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Bien souvent, un partage réseau exige une identification et le système enregistre ces informations tant que votre session ([https://fr.wikipedia.org/wiki/GNOME_Display_Manager GDM]) est ouverte. Le fait de démonter le partage ne vide alors pas ces informations d&#039;identification (un accès ultérieur se ferra sans redemander ces données). Il est cependant parfois souhaitable de se déconnecter d&#039;un partage pour utiliser un autre compte distant. Pour se faire, il faut vider le cache de &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gnome-keyring-daemon&amp;lt;/syntaxhighlight&amp;gt; :&lt;br /&gt;
 gnome-keyring-daemon -r&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://askubuntu.com/questions/611612/how-to-make-nautilus-forget-smb-session-passwords-without-logging-out&lt;br /&gt;
&lt;br /&gt;
=Redémarrer le Shell=&lt;br /&gt;
Dans certain cas de plantages un redémarrage de Gnome Shell peut s&#039;avérer utile. Si l&#039;interface n&#039;est pas gelée, il est possible via la combinaison de touches &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;alt&amp;gt;&amp;lt;F2&amp;gt;-&amp;lt;r&amp;gt;&amp;lt;entrer&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; d&#039;effectuer cette opération (uniquement sous &#039;&#039;X11&#039;&#039;). Mais si c&#039;est le cas, ouvrez un shell bash (vrai shell - pas terminal) avec &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;ctrl&amp;gt;&amp;lt;alt&amp;gt;&amp;lt;F3&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; avec l&#039;utilisateur de la session qui a planté et entrez ces deux commandes :&lt;br /&gt;
 export DISPLAY=:0.0&lt;br /&gt;
 gnome-shell -r&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Le rechargement de Gnome-shell n’entraîne pas la perte de vos fenêtres.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://coderwall.com/p/qpv9oq/restart-gnome-shell-from-the-console&lt;br /&gt;
&lt;br /&gt;
=Clavier tactile=&lt;br /&gt;
L&#039;environnement de bureau comporte un clavier tactile s&#039;affichant normalement à l&#039;écran lorsque le tactile est utilisé. Cette fonctionnalité n&#039;est pas désactivable dans les paramètres et ne fonctionne pas (s&#039;affiche intempestivement et n’apparaît pas quand on en a besoin). Vu que l&#039;on se passerait bien de ce genre de merde, on va justement s&#039;en passer avec la commande suivante :&lt;br /&gt;
 gsettings set org.gnome.desktop.a11y.applications screen-keyboard-enabled false&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note : le drapeau &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;true&amp;lt;/syntaxhighlight&amp;gt; revient en arrière.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://askubuntu.com/questions/1285653/enable-disable-on-screen-keyboard-using-command-line&lt;br /&gt;
&lt;br /&gt;
=Modifier les paramètres par défaut de Gnome=&lt;br /&gt;
Dans les manipulations précédentes nous utilisons la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt; pour changer des paramètres au niveau de l&#039;utilisateur. Nous pouvons également modifier les paramètres par défaut.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devons créer le fichier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/dconf/profile/user&amp;lt;/syntaxhighlight&amp;gt; :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt;&amp;gt; /etc/dconf/profile/user&lt;br /&gt;
user-db:user&lt;br /&gt;
system-db:local&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user-db:user&amp;lt;/syntaxhighlight&amp;gt; : Sélectionne la bases de données de configuration en écriture, ici &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user-db&amp;lt;/syntaxhighlight&amp;gt; veux dire qui va chercher la configuration dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.config/dconf&amp;lt;/syntaxhighlight&amp;gt; et &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user&amp;lt;/syntaxhighlight&amp;gt; recherche le fichier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user&amp;lt;/syntaxhighlight&amp;gt; ou le dossier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user.d&amp;lt;/syntaxhighlight&amp;gt; dans arborescence défini précédemment.&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;system-db:local&amp;lt;/syntaxhighlight&amp;gt; : Sélectionne la bases de données de configuration en lecture seule, ici &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;system-db&amp;lt;/syntaxhighlight&amp;gt; veux dire qui va chercher la configuration dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/dconf/db/&amp;lt;/syntaxhighlight&amp;gt; et &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;local&amp;lt;/syntaxhighlight&amp;gt; recherche le fichier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;local&amp;lt;/syntaxhighlight&amp;gt; ou le dossier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;local.d&amp;lt;/syntaxhighlight&amp;gt; dans arborescence défini précédemment.&lt;br /&gt;
&lt;br /&gt;
Il faut donc créer le dossier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/dconf/db/local.d&amp;lt;/syntaxhighlight&amp;gt; pour placer notre configuration par défaut dedans :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p /etc/dconf/db/local.d/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici un exemple le fichier de configuration :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt;&amp;gt; /etc/dconf/db/local.d/00-personnalisation&lt;br /&gt;
# Modification du fond d&#039;écran&lt;br /&gt;
[org/gnome/desktop/background]&lt;br /&gt;
picture-uri=&#039;file:///usr/local/share/backgrounds/fondecran.jpg&#039;&lt;br /&gt;
picture-options=&#039;zoom&#039;&lt;br /&gt;
&lt;br /&gt;
# Modification du pack d&#039;icône&lt;br /&gt;
[org/gnome/desktop/interface]&lt;br /&gt;
icon-theme=&#039;Papirus&#039;&lt;br /&gt;
&lt;br /&gt;
# Ajout des boutons maximiser et minimiser dans la barre de titre des fenêtres&lt;br /&gt;
[org/gnome/desktop/wm/preferences]&lt;br /&gt;
button-layout=&#039;appmenu:minimize,maximize,close&#039;&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour prendre en compte ces configurations, il faut lancer cette commande :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dconf update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la création d&#039;un nouvelle utilisateur, la bases de données de configuration &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user-db:user&amp;lt;/syntaxhighlight&amp;gt; étant inexistant, il ce rabat sur la bases de données de configuration &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;system-db:local&amp;lt;/syntaxhighlight&amp;gt; (celle qu&#039;on a modifié). L&#039;utilisateur a donc un fond d&#039;écran personnalisé, le pack d&#039;icône &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;papirus&amp;lt;/syntaxhighlight&amp;gt; et les boutons maximiser et minimiser dans la barre de titre des fenêtres.&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://help.gnome.org/admin/system-admin-guide/stable/desktop-background.html.en&lt;br /&gt;
* https://help.gnome.org/admin/system-admin-guide/stable/dconf-profiles.html.en&lt;br /&gt;
&lt;br /&gt;
=Changer l&#039;écran principal de GDM3=&lt;br /&gt;
Dans une configuration multi écrans, le gestionnaire de session par défaut de Gnome &amp;lt;code&amp;gt;GDM3&amp;lt;/code&amp;gt; prend habituellement un malin plaisir à utiliser l&#039;écran secondaire pour afficher la zone de saisie du mot de passe. Ceci est très pénible et handicapant lorsque le deuxième écran est éteint et que l&#039;on ne compte pas s&#039;en servir pour cette session.&lt;br /&gt;
&lt;br /&gt;
Afin d&#039;utiliser l&#039;écran principal configuré dans Gnome pour GDM (à ce demander pourquoi ça n&#039;est pas le comportement par défaut...), il faut copier la configuration de disposition d&#039;affichage de l&#039;un vers l&#039;autre (en root).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Après GNOME 49 :&#039;&#039;&#039;&lt;br /&gt;
 cp ~UTILISATEUR/.config/monitors.xml /var/lib/gdm3/seat0/config/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Avant GNOME 49 :&#039;&#039;&#039;&lt;br /&gt;
 cp ~UTILISATEUR/.config/monitors.xml /var/lib/gdm3/.config/&lt;br /&gt;
&lt;br /&gt;
Il faut fermer la session pour que la modification prenne effet.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://ubuntuhandbook.org/index.php/2022/11/login-screen-external-monitor-ubuntu/&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Firefox&amp;diff=1564</id>
		<title>Firefox</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Firefox&amp;diff=1564"/>
		<updated>2026-02-21T12:04:10Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Désactiver les groupes d&amp;#039;onglets&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:navigateurs web]]&lt;br /&gt;
&lt;br /&gt;
=Activer la gestion du tactile=&lt;br /&gt;
Comme beaucoup de fonctions dans Firefox, la gestion des écrans tactile n&#039;est pas activée par défaut dans nombre d’environnements (c&#039;est le cas de Debian). Pour l&#039;activer, il faut définir une variable d&#039;environnement et activer l&#039;option dans la section dédiée de Firefox.&lt;br /&gt;
&lt;br /&gt;
==Définir la variable d&#039;environnement==&lt;br /&gt;
 echo &#039;MOZ_USE_XINPUT2=1&#039; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
&lt;br /&gt;
La modification prend effet au redémarrage. Il est possible de lancer Firefox avec la définition de cette variable manuellement via le terminal en attendant: &amp;lt;code&amp;gt;MOZ_USE_XINPUT2=1 firefox&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Activation de l&#039;option dans Firefox==&lt;br /&gt;
&lt;br /&gt;
Il faut se rendre dans &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt; et mettre le paramètre &#039;&#039;&#039;dom.w3c_touch_events.enabled&#039;&#039;&#039; à &#039;&#039;&#039;1&#039;&#039;&#039;. La modification est active instantanément. Vous pouvez profiter du défilement, de la sélection et du zoom au doigt.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://support.mozilla.org/es/questions/1091627&lt;br /&gt;
&lt;br /&gt;
=Désactiver la redirection HTTPS automatique=&lt;br /&gt;
Par défaut, le navigateur redirige automatiquement les requêtes &#039;&#039;HTTP&#039;&#039; vers &#039;&#039;HTTPS&#039;&#039; lorsque la première requête en clair n&#039;a pas fonctionnée. Bien que cela puisse sembler être une bonne idée au premier abord, les fonctionnalités automatiques son bien souvent un miroir aux alouettes et lorsque le fameux cache ultra casse couille de &#039;&#039;Firefox&#039;&#039; entre la danse, il est parfois impossible d&#039;accéder à un site uniquement servi en &#039;&#039;HTTP&#039;&#039; si ce dernier était indisponible lors de la première requête (test interne par exemple).&lt;br /&gt;
&lt;br /&gt;
Pour désactiver ce comportement, il faut passer le [https://support.mozilla.org/en-US/questions/1019210 paramètre] &amp;lt;code&amp;gt;browser.urlbar.autoFill&amp;lt;/code&amp;gt; de &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Utiliser Wayland=&lt;br /&gt;
Il est possible d&#039;utiliser &#039;&#039;Firefox&#039;&#039; avec [[Wayland]] en définissant la [https://www.reddit.com/r/firefox/comments/c8itj2/enabling_wayland_on_linux/ variable d&#039;environnement] &amp;lt;code&amp;gt;MOZ_ENABLE_WAYLAND=1&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;/etc/environment&amp;lt;/code&amp;gt;. Un redémarrage du programme est nécessaire et il faut s&#039;assurer que la variable est bien définie lors de son lancement (le plus simple est de redémarrer le système).&lt;br /&gt;
&lt;br /&gt;
=Désactiver le détachement d&#039;un onglet=&lt;br /&gt;
Une fonctionne ultra casse couilles avec Firefox c&#039;est bien le [https://www.askvg.com/firefox-tip-disable-tabs-drag-n-drop-feature-to-move-to-new-window/ glisser/déposer d&#039;un onglet] qui en fait une nouvelle fenêtre. Juste insupportable. Pour désactiver cette merde, il faut passer la valeur &amp;lt;code&amp;gt;browser.tabs.allowTabDetach&amp;lt;/code&amp;gt; à &#039;&#039;&#039;false&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Restaurer la fenêtre de téléchargement=&lt;br /&gt;
Avec Firefox 98 (et comme avec chaque nouvelle version), une fonctionnalité indispensable a été supprimée : la possibilité d&#039;ouvrir un fichier sans l&#039;enregistrer quelque part sur le disque (il va simplement dans le &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;). Pour restaurer ce comportement, il faut passer la valeur &amp;lt;code&amp;gt;browser.download.improvements_to_download_panel&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Forcer l&#039;usage du presse papier=&lt;br /&gt;
Certains sites &#039;&#039;WEB&#039;&#039; se croient malins en interdisant l&#039;utilisation du copier/coller dans les formulaires (réinitialisation de mots de passe par exemple). Cette pratique, en plus d&#039;être une atteinte à notre liberté d&#039;utiliser nos outils informatiques comme nous l&#039;entendons, nous empêche de gérer nos [[Génération de mots de passe|mots de passe]] à notre guise (la meilleur clé est celle que vous ne connaissez pas et donc que vous ne pouvez pas taper dans un champ de formulaire...). Comme souvent, sous couvert de sécurité, le résultat est l&#039;exact opposé. Aux développeurs &#039;&#039;WEB&#039;&#039; : laissez-nous gérer nos outils informatiques comme nous l&#039;entendons, nous sommes bien plus à même de savoir ce qui est bon pour nous que vous !&lt;br /&gt;
&lt;br /&gt;
Pour dire à &#039;&#039;Firefox&#039;&#039; de ne pas respecter le &#039;&#039;Javascript&#039;&#039; qui lui dit d&#039;adopter un comportement aussi débile, il faut passer la [https://www.howtogeek.com/251807/how-to-enable-pasting-text-on-sites-that-block-it/ valeur] &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;dom.event.clipboardevents.enabled&amp;lt;/code&amp;gt; à &#039;&#039;&#039;false&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez alors de nouveau de vous prendre pour un [https://fr.wikipedia.org/wiki/Pasteur_(christianisme) pasteur] en usant de &#039;&#039;copy/paste&#039;&#039; !&lt;br /&gt;
&lt;br /&gt;
{{attention|La désactivation de cette fonction empêche le [https://github.com/element-hq/element-web/issues/25695 collage de textes] dans le champ de discutions de [[Matrix_synapse#Client_WEB_Element|element-web]] (un &amp;lt;code&amp;gt;ctrl+v&amp;lt;/code&amp;gt; n&#039;a donc plus aucun effet).}}&lt;br /&gt;
&lt;br /&gt;
=Désactiver le rafraîchissement automatique=&lt;br /&gt;
Certains sites non respectueux de leurs utilisateurs (les sites de presse en tête), utilisent du &#039;&#039;Javascript&#039;&#039; pour rafraîchir automatiquement les pages de leur site (probablement pour générer du revenu avec la publicité).&lt;br /&gt;
Cette pratique, outre le fait de consommer de la bande passante et du &#039;&#039;CPU&#039;&#039; (donc de l&#039;électricité), engendre un comportement non désiré et inattendu de l&#039;utilisateur (seul maître légitime de son ordinateur).&lt;br /&gt;
&lt;br /&gt;
Pour faire cesser ça, il faut initier la clé &amp;lt;code&amp;gt;accessibility.blockautorefresh&amp;lt;/code&amp;gt; à &#039;&#039;true&#039;&#039; dans &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Désactiver la géolocalisation=&lt;br /&gt;
Certains sites envoient une requête au navigateur afin de demander d&#039;activer la géolocalisation. Cela se matérialise dans &#039;&#039;Firefox&#039;&#039; par un popup au niveau de la barre d&#039;adresse qui masque une partie du site (pénible). Calqué sur le modèle de celui demandant d&#039;enregistrer un mot de passe, celui-ci n&#039;est pas désactivable dans les paramètres (cela doit être trop difficile à coder pour &#039;&#039;Mozilla&#039;&#039;...). Cela se fait donc via les habituels paramètres avancés de &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;, en [https://whatismyipaddress.com/enabling-and-disabling-geolocation-on-your-browser#h-firefox passant] &amp;lt;code&amp;gt;geo.enabled&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Désactiver précédent et suivant au trackpad=&lt;br /&gt;
Autre réelle mauvaise idée de ce navigateur, la fonctionnalité précédent et suivant via des gestes latéraux avec un trackpad. Mise à part réaliser des actions involontaires pouvant êtres, au mieux, ultra désagréables en rechargeant les pages et au pire, dangereusement catastrophique en fonction des cas (quitter une page avant la fin d&#039;une opération est rarement sans conséquence dans le traitement...), il m&#039;apparaît de l&#039;ordre du bon sens de désactiver cette aberration qui n&#039;aurait jamais dû voir le jour.&lt;br /&gt;
&lt;br /&gt;
Via &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;, [https://superuser.com/questions/1270620/how-do-i-disable-option-swipe-navigating-history-forward-and-back-in-firefox#answer-1850606 vider les champs] &amp;lt;code&amp;gt;browser.gesture.swipe.left&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;browser.gesture.swipe.right&amp;lt;/code&amp;gt; (le bouton de réinitialisation permet de restaurer les valeurs par défaut si vous avez l&#039;idée saugrenue de vouloir revenir en arrière).&lt;br /&gt;
&lt;br /&gt;
=Désactiver les groupes d&#039;onglets=&lt;br /&gt;
La dernière fonction casse couille de Firefox en date : les groupes d&#039;onglets.&lt;br /&gt;
&lt;br /&gt;
Vous aviez l&#039;habitude de déplacer des onglets dans votre navigateur ? Maintenant il se placent systématiquement dans un groupe constitué de l&#039;onglet déplacé et de celui se trouvant à côté de lui... À part faire chier, je ne comprends pas l&#039;objectif...&lt;br /&gt;
&lt;br /&gt;
Pour désactiver cette merde, utiliser le paramètre [https://www.askvg.com/tip-how-to-enable-or-disable-tab-groups-in-mozilla-firefox/ suivant] :&lt;br /&gt;
 browser.tabs.groups.enabled&lt;br /&gt;
&lt;br /&gt;
Libération !&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Matrix_synapse&amp;diff=1563</id>
		<title>Matrix synapse</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Matrix_synapse&amp;diff=1563"/>
		<updated>2025-11-22T12:10:28Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Déplacement de la section sur la réinitialisation du mot de passe d&amp;#039;un utilisateur et ajout d&amp;#039;une section pour en désactiver un&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Service_communication]]&lt;br /&gt;
&lt;br /&gt;
{{chantier}}&lt;br /&gt;
&lt;br /&gt;
{{info|Matrix Synapse n&#039;est plus présent dans les dépôts &#039;&#039;backports&#039;&#039; de &#039;&#039;Debian&#039;&#039;. Il n&#039;est actuellement plus que dans la branche &#039;&#039;testing&#039;&#039; donc il n&#039;est pas impossible qu&#039;il se retrouve dans la future stable à l&#039;été 2027 (bien que c&#039;était déjà le cas pour &#039;&#039;Debian 11&#039;&#039; et que cela ne se soit jamais produit...). J&#039;actualiserai probablement cette documentation si ça se stabilise un jour... En attendant, une méthode d&#039;installation via [https://gist.github.com/hafizamirch/9a5f57c9df9d955f5825c160aa8dd0f9 Python venv] est possible.}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/matrix-org/synapse/ Synapse] est une implémentation serveur libre (licence &#039;&#039;Apache 2.0&#039;&#039;) du protocole [https://fr.wikipedia.org/wiki/Matrix_(protocole) Matrix] écrit en &#039;&#039;Python&#039;&#039;. Le projet, initié en 2014, est maintenu par la fondation [https://matrix.org Matrix.org] et passe en version stable (&#039;&#039;1.0.0&#039;&#039;) en 2019. Il est disponible dans les dépôts &#039;&#039;Bullseye-Backports&#039;&#039; et &#039;&#039;Testing&#039;&#039; de &#039;&#039;Debian&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il permet la communication électronique textuelle, orale et vidéo entre plusieurs interlocuteurs au travers de réseaux &#039;&#039;IP&#039;&#039;. Il propose en outre la possibilité d&#039;envoyer des fichiers et de partager les écrans des correspondants. Une attention toute particulière est porté sur la sécurité des échanges avec un système de chiffrement de bout en bout obligatoire, tant entre clients (pair à pair) que lors de transactions avec le serveur (client/serveur).&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire de permettre la communication vers les ports suivants :&lt;br /&gt;
* Fédération &#039;&#039;Synapse&#039;&#039; : 8448 &#039;&#039;TCP&#039;&#039;&lt;br /&gt;
* &#039;&#039;TURN&#039;&#039; : 3478 &#039;&#039;TCP/UDP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Service Synapse=&lt;br /&gt;
==Installation==&lt;br /&gt;
Ajout des dépôts &#039;&#039;Backports&#039;&#039; pour &#039;&#039;Debian 11&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://ftp2.fr.debian.org/debian bullseye-backports main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install --no-install-recommends -t bullseye-backports matrix-synapse&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réponse aux questions n&#039;a pas d&#039;importance car les fichiers de configuration seront re-générés plus loin.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Le domaine utilisé pour l&#039;exemple est le suivant&lt;br /&gt;
 export DNS_SYNAPSE=synapse.exemple.fr&lt;br /&gt;
&lt;br /&gt;
Génération des fichiers configuration et de la clé de signature&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
synapse_generate_config --server-name ${DNS_SYNAPSE} --config-dir /etc/matrix-synapse --data-dir /etc/matrix-synapse/ --report-stats no --generate-secrets -o /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
synapse_generate_log_config -o /etc/matrix-synapse/${DNS_SYNAPSE}.log.config&lt;br /&gt;
synapse_generate_signing_key -o /etc/matrix-synapse/${DNS_SYNAPSE}.signing.key&lt;br /&gt;
&lt;br /&gt;
echo &#039;report_stats: false&#039; &amp;gt; /etc/matrix-synapse/conf.d/report_stats.yaml&lt;br /&gt;
echo &amp;quot;server_name: \&amp;quot;${DNS_SYNAPSE}\&amp;quot;&amp;quot; &amp;gt; /etc/matrix-synapse/conf.d/server_name.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Écouter les requêtes clientes sur toutes les adresses &#039;&#039;IP&#039;&#039; du serveur&lt;br /&gt;
 sed -i &amp;quot;s/bind_addresses: \[.*\]/bind_addresses: [&#039;0.0.0.0&#039;]/g&amp;quot; /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
 systemctl restart matrix-synapse.service&lt;br /&gt;
&lt;br /&gt;
Vous devriez voir un port 8008 &#039;&#039;TCP&#039;&#039; en écoute avec un &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;ss -ltn&amp;lt;/syntaxhighlight&amp;gt;. Celui-ci permet aux outils d&#039;administrations d&#039;utiliser les &#039;&#039;API&#039;&#039; de &#039;&#039;Synapse&#039;&#039; pour interagir avec lui.&lt;br /&gt;
&lt;br /&gt;
==Gestion des utilisateurs==&lt;br /&gt;
Actuellement, seule la création d&#039;un utilisateur est possible avec les outils fournis. Leur suppression ou modification (ou même leur listage) n&#039;est pas supporté (oui c&#039;est aberrant). Ce sujet est traité dans ce [https://github.com/matrix-org/synapse/issues/1707 ticket].&lt;br /&gt;
&lt;br /&gt;
La syntaxe d&#039;un utilisateurs dans les différents clients &#039;&#039;Matrix&#039;&#039; est &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;@michel:synapse.exemple.fr&amp;lt;/syntaxhighlight&amp;gt;. Ceci est utile pour en ajouter comme contact depuis un logiciel client (pourquoi faire simple ?).&lt;br /&gt;
&lt;br /&gt;
===Création d&#039;un utilisateur===&lt;br /&gt;
 synapse_register_new_matrix_user http://127.0.0.1:8008 -c /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
&lt;br /&gt;
===Réinitialisation de mot de passe===&lt;br /&gt;
Aussi étrange que cela puisse parraitre, il n&#039;existe pas de fonction pour réinitialiser le mot de passe d&#039;un utilisateur (incroyable) ! Les développeurs de cette solution doivent ignorer que ces derniers perdent régulièrement leur mot de passe et qu&#039;il s&#039;agit donc d&#039;une fonctionnalité indispensable en production.&lt;br /&gt;
Heureusement, la structure de l&#039;authentification étant très simple, il est triviale de réaliser cette opération [https://paritoshbh.me/blog/reset-user-password-synapse-matrix-homeserver soit-même] dans la base de données après génération d&#039;un mot de passe haché .&lt;br /&gt;
&lt;br /&gt;
 # Génération du mot de passe haché&lt;br /&gt;
 su - matrix-synapse -s /bin/sh -c &#039;python3 /usr/libexec/matrix-synapse/hash_password -c /etc/matrix-synapse/homeserver.yaml&#039;&lt;br /&gt;
 # connexion à la base de donnée de Synapse&lt;br /&gt;
 su - matrix-synapse -s /bin/sh -c &#039;sqlite3 /etc/matrix-synapse/homeserver.db&#039;&lt;br /&gt;
&lt;br /&gt;
Après avoir identifié l&#039;utilisateur dont le mot de passe doit être réinitialisé (&amp;quot;michel&amp;quot; pour l&#039;exemple), utiliser le hachi généré pour remplacer l&#039;ancien&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM users;&lt;br /&gt;
UPDATE users SET password_hash=&#039;$2b$12$OkrnSR1hOCj0xjb7mDnvf.OXVQ0P/EU8u4lUpMuU5YepvHXpv3sxm&#039; WHERE name=&#039;@michel:synapse.exemple.fr&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le changement est instantané.&lt;br /&gt;
&lt;br /&gt;
===Désactivation d&#039;un compte===&lt;br /&gt;
Pour désactiver un utilisateur, il faut se connecter à la base de données en suivant les explications précedemment données et en utilisant une requête &#039;&#039;SQL&#039;&#039; sous cette forme :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE users SET deactivated=1 WHERE name=&#039;@michel:synapse.exemple.fr&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le booléen de désactivation est alors définit pour notre compte utilisateur.&lt;br /&gt;
&lt;br /&gt;
===Source de la section===&lt;br /&gt;
* https://matrix-org.github.io/synapse/latest/setup/installation.html&lt;br /&gt;
&lt;br /&gt;
=Service TURN=&lt;br /&gt;
Dans la mesure où le vrai monde est peuplé de &#039;&#039;NAT&#039;&#039; à profusion et qu&#039;aucun protocole de communication en temps réel ne sais gérer cette situation correctement (la raison m&#039;échappe toujours...), il est indispensable d&#039;employer un service mitigeant cette contrainte. Ceci est le rôle des protocoles [https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT TURN]/[https://en.wikipedia.org/wiki/STUN STUN] implémenté dans le logiciel [https://github.com/coturn/coturn Coturn].&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Le paquet est disponible dans les dépôts &#039;&#039;Sable&#039;&#039;&lt;br /&gt;
 apt install --no-install-recommends coturn&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Les informations spécifiques à l&#039;instance de cette documentations seront les suivantes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export DNS_COTURN=turn.exemple.fr&lt;br /&gt;
export SECRET_COTURN=$(cat /dev/urandom | tr -dc &#039;a-zA-Z0-9&#039; | fold -w 64 | head -n 1)&lt;br /&gt;
export IP_EXTERNE=$(wget -qO - ifconfig.co)&lt;br /&gt;
export IP_INTERNE=192.168.0.100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration du service se composera comme suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt; /etc/turnserver.conf&lt;br /&gt;
use-auth-secret&lt;br /&gt;
static-auth-secret=${SECRET_COTURN}&lt;br /&gt;
realm=${DNS_COTURN}&lt;br /&gt;
&lt;br /&gt;
# Le trafic VoIP est entièrement UDP. Il n&#039;y a aucune raison de laisser les utilisateurs se connecter à des points d&#039;extrémité TCP arbitraires via le relais&lt;br /&gt;
no-tcp-relay&lt;br /&gt;
&lt;br /&gt;
# Ne laissez pas le relais essayer de se connecter à des plages d&#039;adresses IP privées au sein de votre réseau (s&#039;il y en a)&lt;br /&gt;
# Étant donné que le serveur tournant est probablement derrière votre pare-feu, n&#039;oubliez pas d&#039;inclure également toutes les adresses IP publiques privilégiées&lt;br /&gt;
denied-peer-ip=10.0.0.0-10.255.255.255&lt;br /&gt;
denied-peer-ip=192.168.0.0-192.168.255.255&lt;br /&gt;
denied-peer-ip=172.16.0.0-172.31.255.255&lt;br /&gt;
&lt;br /&gt;
# À recommandé, blocage de pairs locaux supplémentaires, afin de limiter l&#039;accès externe aux services internes&lt;br /&gt;
# https://www.rtcsec.com/article/slack-webrtc-turn-compromise-and-bug-bounty/#how-to-fix-an-open-turn-relay-to-address-this-vulnerability&lt;br /&gt;
no-multicast-peers&lt;br /&gt;
denied-peer-ip=0.0.0.0-0.255.255.255&lt;br /&gt;
denied-peer-ip=100.64.0.0-100.127.255.255&lt;br /&gt;
denied-peer-ip=127.0.0.0-127.255.255.255&lt;br /&gt;
denied-peer-ip=169.254.0.0-169.254.255.255&lt;br /&gt;
denied-peer-ip=192.0.0.0-192.0.0.255&lt;br /&gt;
denied-peer-ip=192.0.2.0-192.0.2.255&lt;br /&gt;
denied-peer-ip=192.88.99.0-192.88.99.255&lt;br /&gt;
denied-peer-ip=198.18.0.0-198.19.255.255&lt;br /&gt;
denied-peer-ip=198.51.100.0-198.51.100.255&lt;br /&gt;
denied-peer-ip=203.0.113.0-203.0.113.255&lt;br /&gt;
denied-peer-ip=240.0.0.0-255.255.255.255&lt;br /&gt;
&lt;br /&gt;
# Cas particulier : le serveur TURN lui-même pour que les flux client-&amp;gt;TURN-&amp;gt;TURN-&amp;gt;client fonctionnent&lt;br /&gt;
# Il doit s&#039;agir de l&#039;une des adresses IP d&#039;écoute du serveur TURN&lt;br /&gt;
allowed-peer-ip=${IP_INTERNE}&lt;br /&gt;
&lt;br /&gt;
# Examinez si vous souhaitez limiter le quota de flux relayés par utilisateur (ou total) pour éviter les risques de DoS&lt;br /&gt;
user-quota=12 # 4 flux par appel vidéo, donc 12 flux = 3 appels relayés simultanés par utilisateur&lt;br /&gt;
total-quota=1200&lt;br /&gt;
&lt;br /&gt;
# Certificats TLS, y compris les certificats intermédiaires&lt;br /&gt;
# Pour les certificats Let&#039;s Encrypt, utilisez &#039;fullchain.pem&#039; ici&lt;br /&gt;
cert=/srv/tls/corturn.pem&lt;br /&gt;
&lt;br /&gt;
# Fichier TLS de clé privée&lt;br /&gt;
pkey=/srv/tls/corturn.key&lt;br /&gt;
&lt;br /&gt;
# Assurez-vous que les lignes de configuration qui désactivent TLS/DTLS sont commentées ou supprimées.&lt;br /&gt;
#no-tls&lt;br /&gt;
#no-dtls&lt;br /&gt;
&lt;br /&gt;
external-ip=${IP_EXTERNE}&lt;br /&gt;
listening-ip=${IP_INTERNE}&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Support du TLS===&lt;br /&gt;
Créer le répertoire d&#039;accueil des éléments de chiffrement&lt;br /&gt;
 mkdir /srv/tls&lt;br /&gt;
&lt;br /&gt;
Ces éléments peuvent être issus d&#039;une autorité de certification publique comme [[Letsencrypt|Letsencrypt]] (mettre la clé et le certificat &#039;&#039;&#039;chaînés&#039;&#039;&#039;) ou privée, via [[Openssl|OpenSSL]] par exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R root:root /srv/tls&lt;br /&gt;
chmod 500 /srv/tls&lt;br /&gt;
chmod 400 /srv/tls/*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
 systemctl restart coturn.service&lt;br /&gt;
&lt;br /&gt;
Le service écoute sur le port 3478 &#039;&#039;TCP/UDP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est à présent possible de configurer &#039;&#039;Synapse&#039;&#039; afin qu&#039;il informe les clients d&#039;utiliser notre service &#039;&#039;TURN&#039;&#039; lors de l&#039;établissement des communications pair à pair entre eux.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt;&amp;gt; /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
&lt;br /&gt;
turn_uris: [ &amp;quot;turn:${DNS_COTURN}?transport=udp&amp;quot;, &amp;quot;turn:${DNS_COTURN}?transport=tcp&amp;quot; ]&lt;br /&gt;
turn_shared_secret: &amp;quot;${SECRET_COTURN}&amp;quot;&lt;br /&gt;
turn_user_lifetime: 86400000&lt;br /&gt;
turn_allow_guests: True&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 systemctl restart matrix-synapse.service&lt;br /&gt;
&lt;br /&gt;
==Enregistrement DNS==&lt;br /&gt;
Cette section est totalement facultative et n&#039;apporte rien. Il existe peut-être une configuration de &#039;&#039;Synapse&#039;&#039; permettant de trouver automatiquement le serveur &#039;&#039;TURN&#039;&#039; via &#039;&#039;DNS&#039;&#039;...&lt;br /&gt;
&lt;br /&gt;
Enregistrements &#039;&#039;DNS SRV&#039;&#039; (à ajouter dans la configuration de votre zone)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
_stun._udp 10800 IN SRV 0 5 3478 exemple.fr.&lt;br /&gt;
_turn._udp 10800 IN SRV 0 5 3478 exemple.fr.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de requêter le serveur de noms sur ces champs précis via les commandes suivantes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dig +short _stun._udp._tcp 10800 IN SRV 0 5 3478 exemple.fr.&lt;br /&gt;
dig +short _turn._udp._tcp 10800 IN SRV 0 5 3478 exemple.fr.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test de fonctionnement==&lt;br /&gt;
Voici une [https://nextcloud-talk.readthedocs.io/en/latest/TURN/#6-testing-the-turn-server méthode] permettant de tester le fonctionnement du service en ligne de commande. Elle peut aider à deceler des problèmes simplement.&lt;br /&gt;
 turnutils_uclient -p 3478 -W &amp;lt;CLÉ_SERVEUR_TURN&amp;gt; -v -y turn.exemple.fr&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://matrix-org.github.io/synapse/latest/setup/turn/coturn.html&lt;br /&gt;
&lt;br /&gt;
=Client WEB Element=&lt;br /&gt;
[https://github.com/vector-im/element-web Element] est un client WEB pour &#039;&#039;Matrix&#039;&#039;. Anciennement connu sous le nom de &#039;&#039;Riot&#039;&#039;, il existe aussi sous forme d&#039;application &#039;&#039;IOS&#039;&#039; et &#039;&#039;Android&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
N&#039;étant pas dans les dépôts &#039;&#039;Debian&#039;&#039;, nous utiliserons la version &#039;&#039;Git&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install --no-install-recommends apache2&lt;br /&gt;
&lt;br /&gt;
wget https://github.com/vector-im/element-web/releases/download/v1.10.14/element-v1.10.14.tar.gz -P /tmp&lt;br /&gt;
&lt;br /&gt;
tar xf /tmp/element-v1.10.14.tar.gz -C /var/www/&lt;br /&gt;
ln -s /var/www/element-v1.10.14/ /var/www/element&lt;br /&gt;
chown -R www-data: /var/www/element*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
L&#039;hôte virtuel d{{&#039;}}&#039;&#039;Apache&#039;&#039; doit pointer vers le programme&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt; /etc/apache2/sites-available/element.conf&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerAdmin webmaster@localhost&lt;br /&gt;
    DocumentRoot /var/www/element&lt;br /&gt;
    ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
    CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Désactivation de l&#039;hôte virtuel par défaut et activation du nouveau&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
a2dissite 000-default.conf&lt;br /&gt;
a2ensite element.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le domaine utilisé sera le suivant&lt;br /&gt;
 export DNS_ELEMENT=element.exemple.fr&lt;br /&gt;
&lt;br /&gt;
La configuration de notre instance sera celle-ci&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt; /var/www/element/config.json&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;default_server_config&amp;quot;: {&lt;br /&gt;
        &amp;quot;m.homeserver&amp;quot;: {&lt;br /&gt;
            &amp;quot;base_url&amp;quot;: &amp;quot;https://${DNS_SYNAPSE}&amp;quot;,&lt;br /&gt;
            &amp;quot;server_name&amp;quot;: &amp;quot;${DNS_SYNAPSE}&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;m.identity_server&amp;quot;: {&lt;br /&gt;
            &amp;quot;base_url&amp;quot;: &amp;quot;https://vector.im&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;disable_custom_urls&amp;quot;: false,&lt;br /&gt;
    &amp;quot;disable_guests&amp;quot;: false,&lt;br /&gt;
    &amp;quot;disable_login_language_selector&amp;quot;: false,&lt;br /&gt;
    &amp;quot;disable_3pid_login&amp;quot;: false,&lt;br /&gt;
    &amp;quot;brand&amp;quot;: &amp;quot;Element&amp;quot;,&lt;br /&gt;
    &amp;quot;bug_report_endpoint_url&amp;quot;: &amp;quot;https://element.io/bugreports/submit&amp;quot;,&lt;br /&gt;
    &amp;quot;uisi_autorageshake_app&amp;quot;: &amp;quot;element-auto-uisi&amp;quot;,&lt;br /&gt;
    &amp;quot;default_country_code&amp;quot;: &amp;quot;FR&amp;quot;,&lt;br /&gt;
    &amp;quot;show_labs_settings&amp;quot;: false,&lt;br /&gt;
    &amp;quot;features&amp;quot;: { },&lt;br /&gt;
    &amp;quot;default_federate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;default_theme&amp;quot;: &amp;quot;light&amp;quot;,&lt;br /&gt;
    &amp;quot;enable_presence_by_hs_url&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://matrix.org&amp;quot;: false,&lt;br /&gt;
        &amp;quot;https://matrix-client.matrix.org&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;setting_defaults&amp;quot;: {&lt;br /&gt;
        &amp;quot;breadcrumbs&amp;quot;: true&lt;br /&gt;
    },&lt;br /&gt;
   &amp;quot;features&amp;quot;: {&lt;br /&gt;
      &amp;quot;feature_you_want_to_turn_on&amp;quot;: true,&lt;br /&gt;
      &amp;quot;feature_you_want_to_keep_off&amp;quot;: false&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer &#039;&#039;Apache&#039;&#039;&lt;br /&gt;
 systemctl restart apache2.service&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
* https://github.com/vector-im/element-web/tree/develop/docs&lt;br /&gt;
&lt;br /&gt;
=Fédération=&lt;br /&gt;
Un des atouts de cette solution est la décentralisation. En effet, il est possible d&#039;interconnecter plusieurs serveurs afin de permettre la communication d&#039;utilisateurs enregistrés sur des instances différentes. Ces interconnexions doivent êtres explicitement spécifiées dans la configuration de &#039;&#039;Synapse&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le domaine du serveur distant sera le suivant&lt;br /&gt;
 export DNS_SRV_DISTANT_SYNAPSE=synapse.toto.fr&lt;br /&gt;
&lt;br /&gt;
Ajout de celui-ci dans la configuration de &#039;&#039;Synapse&#039;&#039; (ceci doit être fait des deux côtés)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sed -i &amp;quot;s/^trusted_key_servers:/trusted_key_servers:\n  - server_name: \&amp;quot;${DNS_SRV_DISTANT_SYNAPSE}\&amp;quot;/g&amp;quot; /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
sed -i &amp;quot;s/^#federation_domain_whitelist:/federation_domain_whitelist:\n  - ${DNS_SRV_DISTANT_SYNAPSE}/g&amp;quot; /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 systemctl restart matrix-synapse.service&lt;br /&gt;
&lt;br /&gt;
=Cas d&#039;une connexion mandaté=&lt;br /&gt;
Dans la mesure où il est courant qu&#039;un serveur ne soit jamais relié directement à Internet (comprendre par la qu&#039;il ne dispose pas d&#039;IP publique), le cas d&#039;un [[:Category:Reverse_proxy|mandataire inverse]] officiant entre les clients du &#039;&#039;WAN&#039;&#039; et le serveur &#039;&#039;Element&#039;&#039; du &#039;&#039;LAN&#039;&#039; est le plus probable. Ce point complique la transparence des échanges entre les machines et doit être géré au niveau de cet intermédiaire. Deux services ont étés testés en production avec succès. Leur configuration est donnée ci-après.&lt;br /&gt;
&lt;br /&gt;
==Traefik==&lt;br /&gt;
Ajout d&#039;un point d&#039;entrer dans Traefik pour le port 8448&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt;&amp;gt; /etc/traefik/config/vhosts/matrix.toml&lt;br /&gt;
[http]&lt;br /&gt;
  [http.routers]&lt;br /&gt;
     [http.routers.synapse]&lt;br /&gt;
      entryPoints = [&amp;quot;websecure&amp;quot;]&lt;br /&gt;
      rule = &amp;quot;Host(\`${DNS_SYNAPSE}\`)&amp;quot;&lt;br /&gt;
      service = &amp;quot;synapse&amp;quot;&lt;br /&gt;
      [http.routers.synapse.tls]&lt;br /&gt;
        certResolver = &amp;quot;myresolver&amp;quot;&lt;br /&gt;
&lt;br /&gt;
     [http.routers.element]&lt;br /&gt;
      entryPoints = [&amp;quot;websecure&amp;quot;]&lt;br /&gt;
      rule = &amp;quot;Host(\`${DNS_ELEMENT}\`)&amp;quot;&lt;br /&gt;
      service = &amp;quot;element&amp;quot;&lt;br /&gt;
      [http.routers.element.tls]&lt;br /&gt;
        certResolver = &amp;quot;myresolver&amp;quot;&lt;br /&gt;
&lt;br /&gt;
     [http.routers.synapsefed]&lt;br /&gt;
      entryPoints = [&amp;quot;synapsefed&amp;quot;]&lt;br /&gt;
      rule = &amp;quot;Host(\`${DNS_SYNAPSE}\`)&amp;quot;&lt;br /&gt;
      service = &amp;quot;synapse&amp;quot;&lt;br /&gt;
      [http.routers.synapsefed.tls]&lt;br /&gt;
        certResolver = &amp;quot;myresolver&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [http.services]&lt;br /&gt;
    [http.services.synapse.loadBalancer]&lt;br /&gt;
      [[http.services.synapse.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://${IP_INTERNE}:8008&amp;quot;&lt;br /&gt;
    [http.services.element.loadBalancer]&lt;br /&gt;
      [[http.services.element.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://${IP_INTERNE}:80&amp;quot;&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HAProxy==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt;&amp;gt; /etc/haproxy/haproxy.cfg&lt;br /&gt;
frontend matrix-federation&lt;br /&gt;
    bind *:8448,[::]:8448 ssl crt /etc/haproxy/tls/ alpn h2,http/1.1&lt;br /&gt;
    http-request set-header X-Forwarded-Proto https if { ssl_fc }&lt;br /&gt;
    http-request set-header X-Forwarded-Proto http if !{ ssl_fc }&lt;br /&gt;
    http-request set-header X-Forwarded-For %[src]&lt;br /&gt;
    default_backend synapse&lt;br /&gt;
&lt;br /&gt;
frontend https&lt;br /&gt;
    http-response add-header X-Frame-Options SAMEORIGIN&lt;br /&gt;
&lt;br /&gt;
    bind :443 ssl crt /etc/haproxy/tls/ alpn h2,http/1.1&lt;br /&gt;
&lt;br /&gt;
    acl host_synapse hdr(host) -i synapse.exemple.fr&lt;br /&gt;
&lt;br /&gt;
    use_backend synapse if host_synapse&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;backend synapse&lt;br /&gt;
    option forwardfor except 127.0.0.1&lt;br /&gt;
    option http-server-close&lt;br /&gt;
    server synapse 192.168.170.178:8008 check maxconn 32&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Débogage=&lt;br /&gt;
La configuration de &#039;&#039;Synapse&#039;&#039; est quelque peu imbuvable et les problèmes, difficiles à corriger. Il est possible de s&#039;appuyer sur les journaux du service afin de cibler l&#039;origine des disfonctionnements.&lt;br /&gt;
 tail -f /var/log/matrix-synapse/homeserver.log&lt;br /&gt;
&lt;br /&gt;
Un outil permettant de determiner les caractéristiques du serveur est disponible à l&#039;adresse https://federationtester.matrix.org/. Il peut s&#039;avérer d&#039;une aide précisieuse (surtout le rapport &#039;&#039;Json&#039;&#039;).&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Web_station_-_synology&amp;diff=1562</id>
		<title>Web station - synology</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Web_station_-_synology&amp;diff=1562"/>
		<updated>2025-11-20T16:46:37Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : /* Listage de fichiers */ Ajout de l&amp;#039;option permettant d&amp;#039;afficher la taille humainement lisible des fichiers listés&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Synology]]&lt;br /&gt;
&lt;br /&gt;
[https://www.synology.com/fr-fr/dsm/packages/WebStation Web Station] est une application additionnelle pour [https://www.synology.com/fr-fr/dsm DSM] [https://fr.wikipedia.org/wiki/Synology Synology] disponible dans le gestionnaire de paquets du système. Il permet d&#039;installer et de configurer les serveurs &#039;&#039;WEB&#039;&#039; [[Apache2]] et &#039;&#039;Nginx&#039;&#039; (ce dernier est fourni par défaut) sur le [https://fr.wikipedia.org/wiki/Serveur_de_stockage_en_r%C3%A9seau NAS].&lt;br /&gt;
&lt;br /&gt;
=Listage de fichiers=&lt;br /&gt;
Bien que complètement aberrant, l&#039;outil ne permet pas de lister les fichiers (&#039;&#039;Directory Listing&#039;&#039;) d&#039;un hôte virtuel. Cette fonctionnalité, devant de préférence être désactivée lors de l&#039;hébergement de pages &#039;&#039;WEB&#039;&#039; pour des raisons de sécurité, peut être l&#039;objet de la mise en œuvre de certains sites destinés au partage de fichiers. L’absence de cette fonctionnalité est donc particulièrement handicapante, d&#039;autant plus que le serveur renvoie une erreur &amp;lt;code&amp;gt;403&amp;lt;/code&amp;gt; sans plus d&#039;explications, même dans les journaux (bo courage pour en trouver l&#039;origine donc)...&lt;br /&gt;
&lt;br /&gt;
Dans la mesure où aucune option de l&#039;interface &#039;&#039;WEB&#039;&#039; ne permet son activation et où, malgré l&#039;apparente bonne idée de la chose, la modification directe des fichiers d&#039;hôtes virtuels de Nginx ne peut se couronner de succès car réinitialisés au démarrage du service, cette section va montrer le cheminement pour tout de même parvenir à une configuration fonctionnelle (&#039;&#039;DSM 7.2.2-72806 Update 2&#039;&#039; pour l&#039;exemple).&lt;br /&gt;
&lt;br /&gt;
{{info|Il est nécessaire de se connecter en [[Openssh|SSH]] avec l&#039;utilisateur &#039;&#039;root&#039;&#039; pour effectuer ce qui va suivre.}}&lt;br /&gt;
&lt;br /&gt;
Chaque hôte virtuel, intitulés &amp;quot;Portail Web&amp;quot;, créé dans l&#039;application &#039;&#039;Web Station&#039;&#039; ajoute un ensemble de fichiers de configurations portant des noms indevinables à l&#039;avance côté serveur à l&#039;emplacement &amp;lt;code&amp;gt;/usr/local/etc/nginx/sites-enabled/&amp;lt;/code&amp;gt; et ayant pour lien symbolique &amp;lt;code&amp;gt;/etc/nginx/sites-enabled&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ce qui va nous intéresser dans ces fichiers, ce sont les inclusions d&#039;autres configuration car en suivant une chaîne imbriquée, nous allons trouver un endroit pour y mettre le notre de façon persistante (les étapes seront à reproduire pour chaque site).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Afficher la dernière ligne de l&#039;hôte virtuel &amp;quot;toto&amp;quot;&lt;br /&gt;
tail /usr/local/etc/nginx/sites-enabled/webservice_portal_033b9685-e292-4d50-a85a-a495479c6096&lt;br /&gt;
# La ligne qui nous intéresse&lt;br /&gt;
# est la suivante : include conf.d/.service.033b9685-e292-4d50-a85a-a495479c6096.45457345-2f5c-449e-8a97-d1fe7f228ffe.conf*;&lt;br /&gt;
&lt;br /&gt;
# Afficher ce fichier pour voir ce qu&#039;il inclus&lt;br /&gt;
tail /etc/nginx/conf.d/.service.033b9685-e292-4d50-a85a-a495479c6096.45457345-2f5c-449e-8a97-d1fe7f228ffe.conf&lt;br /&gt;
# La dernière ligne nous renvoi l&#039;emplacement d&#039;une&lt;br /&gt;
# configuration statique : include /usr/local/etc/nginx/conf.d/45457345-2f5c-449e-8a97-d1fe7f228ffe/user.conf*;&lt;br /&gt;
&lt;br /&gt;
# Le répertoire de destination n&#039;existant pas, il faut le créer&lt;br /&gt;
mkdir /usr/local/etc/nginx/conf.d/45457345-2f5c-449e-8a97-d1fe7f228ffe/&lt;br /&gt;
&lt;br /&gt;
# Ajouter la configuration persistante permettant le listage des fichiers&lt;br /&gt;
echo -e &amp;quot;autoindex on;\nautoindex_exact_size off;&amp;quot; &amp;gt; /usr/local/etc/nginx/conf.d/45457345-2f5c-449e-8a97-d1fe7f228ffe/user.conf&lt;br /&gt;
&lt;br /&gt;
# Redémarrer le service&lt;br /&gt;
systemctl restart nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le listage des fichiers du site via la directive &amp;lt;code&amp;gt;autoindex on;&amp;lt;/code&amp;gt; du module [https://nginx.org/en/docs/http/ngx_http_autoindex_module.html ngx_http_autoindex_module] de &#039;&#039;Nginx&#039;&#039; est désormais fonctionnel et persistant aux redémarrages.&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Ipxe&amp;diff=1561</id>
		<title>Ipxe</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Ipxe&amp;diff=1561"/>
		<updated>2025-11-11T10:40:04Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Changement d&amp;#039;adresse du dépôt Git du projet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:pxe]]&lt;br /&gt;
[https://ipxe.org/start IPXE] est une &#039;&#039;ROM&#039;&#039; contenant un micrologiciel permettant d&#039;amorcer un système depuis le réseau (comme celui intégré aux cartes mères). Sa particularité réside dans le fait qu&#039;il ne se limite pas à une utilisation basique du protocole &#039;&#039;PXE&#039;&#039; mais va beaucoup plus loin. Il est notamment possible d&#039;amorcer un système via &#039;&#039;HTTP/HTTPS&#039;&#039;, &#039;&#039;FTP&#039;&#039;, &#039;&#039;SLAM&#039;&#039;, &#039;&#039;NFS&#039;&#039; et &#039;&#039;ISCSI&#039;&#039; en plus du &#039;&#039;TFTP/TFTP-Multicast&#039;&#039; traditionnel. Il est également capable d’exécuter des scripts et on peut le personnaliser avant sa compilation pour intégrer plus ou moins de fonctionnalité en fonction des besoins.&lt;br /&gt;
&lt;br /&gt;
Une image IPXE pré-compilée est disponible sur le [http://ipxe.org site officiel] à [http://boot.ipxe.org/ipxe.iso cette adresse]. Nous allons détailler les étapes de compilation manuelles. Il est à noter que l&#039;usage de l&#039;outil en ligne ([https://github.com/xbgmsharp/ipxe-buildweb/ auto-hébergeable]) https://rom-o-matic.eu/ permet une compilation à distance en cliquant sur les éléments que l&#039;on veut intégrer à notre image.&lt;br /&gt;
&lt;br /&gt;
=Compilation=&lt;br /&gt;
&#039;&#039;&#039;Installation des dépendances&#039;&#039;&#039;&lt;br /&gt;
 apt install git make gcc perl binutils liblzma-dev genisoimage&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Téléchargement des sources&#039;&#039;&#039;&lt;br /&gt;
 git clone https://github.com/ipxe/ipxe.git&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Édition du fichier de configuration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;outil &#039;&#039;make&#039;&#039; lit le fichier de configuration &amp;lt;code&amp;gt;./src/config/general.h&amp;lt;/code&amp;gt; pour déterminer les modules à intégrer à la compilation.&lt;br /&gt;
&lt;br /&gt;
Tout les paramètres à prendre en compte doivent être précédés par un croisillon (&amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;). Les modules à définir doivent êtres passés en paramètre à &amp;lt;code&amp;gt;define&amp;lt;/code&amp;gt; et ceux qui ne doivent pas l&#039;être, à &amp;lt;code&amp;gt;undefine&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Aussi, voici ce que nous avons pour la gestion de l{{&#039;}}&#039;&#039;IPv6&#039;&#039;, du &#039;&#039;NFS&#039;&#039; et de l{{&#039;}}&#039;&#039;ISCSI&#039;&#039; (fichier partiel, j&#039;ai juste mis ce que j&#039;ai modifié en remplaçant les autres lignes par &amp;lt;code&amp;gt;...&amp;lt;/code&amp;gt;) :&lt;br /&gt;
&lt;br /&gt;
 cd ./ipxe/src/&lt;br /&gt;
 vim config/general.h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
#define NET_PROTO_IPV6          /* IPv6 protocol */&lt;br /&gt;
...&lt;br /&gt;
#define DOWNLOAD_PROTO_NFS&lt;br /&gt;
...&lt;br /&gt;
#define SANBOOT_PROTO_ISCSI&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 make -j 9&lt;br /&gt;
&lt;br /&gt;
Un fichier &amp;lt;code&amp;gt;bin/ipxe.iso&amp;lt;/code&amp;gt; a été créé. Nous y trouvons également d&#039;autre fichiers tel que des &#039;&#039;ROM&#039;&#039; pour cartes réseau et un noyau Linux &#039;&#039;iPXE&#039;&#039; (&#039;&#039;ipxe.lkrn&#039;&#039;) permettant l&#039;amorçage par le réseau via &#039;&#039;pxelinux&#039;&#039; (nous utilisons ce dernier dans notre documentation sur l&#039;[[Installation Windows via PXE|Installation de Windows via PXE]]).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Multi-plateforme&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour compiler l&#039;outil sur les plateformes &#039;&#039;UEFI&#039;&#039; (32 et 64 bits) et &#039;&#039;Bios&#039;&#039; pour amorçage &#039;&#039;PXE&#039;&#039;, les commandes suivantes peuvent êtres utilisées :&lt;br /&gt;
 make bin-x86_64-efi/ipxe.efi -j 9&lt;br /&gt;
 make bin-i386-efi/ipxe.efi -j 9&lt;br /&gt;
 make bin-i386-pcbios/ipxe.pxe -j 9&lt;br /&gt;
&lt;br /&gt;
Les binaires d&#039;amorçage sont disponibles aux noms indiqués dans les commandes pour leur plateforme respective. La liste supportés est disponible sur la page de [https://ipxe.org/appnote/buildtargets documentation] du projet.&lt;br /&gt;
&lt;br /&gt;
=Test=&lt;br /&gt;
Dés à présent, l&#039;ISO généré peut être utilisé dans un média amorçable, un [[serveur PXE]] ou testé via [[Qemu]] comme suit :&lt;br /&gt;
 qemu-system-x86_64 -m 1024 -vga qxl -fda /tmp/ipxe/src/bin/ipxe.iso -tftp /tmp/pxe -bootp lpxelinux.0 -boot n -net user -net nic,model=e1000,macaddr=00:11:22:33:44:55 -net tap,ifname=qtap0 -netdev tap,id=t0,ifname=vnet0,script=no,downscript=no -device e1000,netdev=t0 --enable-kvm -cpu host -smp cores=2,threads=1,sockets=1&lt;br /&gt;
&lt;br /&gt;
J&#039;ai copié les fichiers nécessaires au démarrage &#039;&#039;PXE&#039;&#039; de mon serveur dans le &amp;lt;code&amp;gt;/tmp/pxe&amp;lt;/code&amp;gt; (créé pour l&#039;occasion) de mon hôte. L&#039;interface réseau &#039;&#039;&#039;vnet0&#039;&#039;&#039; se créée toute seule sur l&#039;hôte et permet une communication paire à paire avec la machine virtuelle (c&#039;est avec ce lien que l&#039;amorçage s&#039;effectue). La deuxième interface permet à la &#039;&#039;MV&#039;&#039; de sortir sur le &#039;&#039;WAN&#039;&#039; si un routage est effectué dans votre réseau ou si vous utilisez du &#039;&#039;NAT&#039;&#039; comme ceci :&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
 ip a a 172.16.1.1/24 dev vnet0&lt;br /&gt;
 ip l set vnet0 up&lt;br /&gt;
&lt;br /&gt;
Ne pas oublié le serveur &#039;&#039;HTTP&#039;&#039; sur l&#039;hôte (un [[Busybox#Serveur_WEB|busybox httpd]] fait très bien l&#039;affaire) :&lt;br /&gt;
 busybox httpd -fvv -h /tmp/pxe/&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* http://ipxe.org/download&lt;br /&gt;
* https://blog.widodh.nl/2015/11/pxe-boot-over-ipv6-with-ipxe/&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Tcpdump&amp;diff=1560</id>
		<title>Tcpdump</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Tcpdump&amp;diff=1560"/>
		<updated>2025-07-19T18:52:09Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Capturer le trafic nspawn&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Analyseur de trames]]&lt;br /&gt;
=Capturer du trafic=&lt;br /&gt;
==Exemple d&#039;utilisation==&lt;br /&gt;
 tcpdump -n -vv -X -i any port not 22 and src 192.168.1.45 and tcp&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-n&#039;&#039;&#039; : ne pas résoudre les nom &#039;&#039;DNS&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;-vv&#039;&#039;&#039; : décode l&#039;ensemble du protocole&lt;br /&gt;
* &#039;&#039;&#039;-X&#039;&#039;&#039; : affiche le résultat comme un éditeur hexadécimal&lt;br /&gt;
* &#039;&#039;&#039;-i any&#039;&#039;&#039; : écouter sur toute les interfaces&lt;br /&gt;
* &#039;&#039;&#039;port not 22&#039;&#039;&#039; : exclure les paquets venants du port 22 de la capture&lt;br /&gt;
* &#039;&#039;&#039;and&#039;&#039;&#039; : concaténation de règles. Le paramètre &#039;&#039;&#039;or&#039;&#039;&#039; peut également être utilisé&lt;br /&gt;
* &#039;&#039;&#039;src @IP&#039;&#039;&#039; : n&#039;affiche que les paquet en provenance de cette &#039;&#039;IP&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;tcp&#039;&#039;&#039; : n&#039;affiche que les paquets &#039;&#039;TCP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Le mot clé de certains protocoles n&#039;est pas forcement évident. Afin de filtrer l{{&#039;}}&#039;&#039;ARP&#039;&#039; et le &#039;&#039;Spanning Tree&#039;&#039;, le filtre [https://stackoverflow.com/a/68834223 suivant] peut être utilisé :&lt;br /&gt;
 not arp and not llc&lt;br /&gt;
&lt;br /&gt;
==Enregistrer la capture dans un fichier==&lt;br /&gt;
 tcpdump -n -i any src 192.168.1.45 -w /tmp/capture.pcap&lt;br /&gt;
&lt;br /&gt;
Paramètre :&lt;br /&gt;
* &#039;&#039;&#039;-w&#039;&#039;&#039; : Enregistre le résultat de la capture dans un fichier.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Le fichier peut ensuite être lut par [[Wireshark]].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{info|La capture peut être limité en nombre de paquets avec l&#039;option &#039;&#039;&#039;-c&#039;&#039;&#039; ou en taille avec &#039;&#039;&#039;-C&#039;&#039;&#039; (unité en Mo).}}&lt;br /&gt;
&lt;br /&gt;
==Privilège de capture==&lt;br /&gt;
Par défaut, un utilisateur standard ne peut capturer le trafic d&#039;une interface réseau. Pour y remédier, il convient de suivre les étapes suivantes :&lt;br /&gt;
&lt;br /&gt;
Création d&#039;un groupe &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;pcap&amp;lt;/syntaxhighlight&amp;gt; et enrôlement de notre utilisateur dedans&lt;br /&gt;
 groupadd pcap&lt;br /&gt;
 usermod -a -G pcap VOTRE_UTILISATEUR&lt;br /&gt;
&lt;br /&gt;
Changement du propriétaire du binaire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;tcpdump&amp;lt;/syntaxhighlight&amp;gt; au nouveau groupe&lt;br /&gt;
 chgrp pcap /usr/sbin/tcpdump&lt;br /&gt;
 chmod 750 /usr/sbin/tcpdump&lt;br /&gt;
 dpkg-statoverride --add root pcap 750 /usr/sbin/pcap&lt;br /&gt;
&lt;br /&gt;
Attribution des capacités noyau adéquates au binaire&lt;br /&gt;
 setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump&lt;br /&gt;
&lt;br /&gt;
===Source de la section===&lt;br /&gt;
* https://www.linuxtutorial.co.uk/tcpdump-eth0-you-dont-have-permission-to-capture-on-that-device/&lt;br /&gt;
&lt;br /&gt;
=Capturer le trafic nspawn=&lt;br /&gt;
Il est parfois bien utile de capturer le trafic de l&#039;espace de noms d&#039;un conteneur [[Conteneurs - systemd|NSPawn]]. Pour ce faire, il faut identifier le &#039;&#039;PID&#039;&#039; d&#039;un processus exécuté dans le conteur et exécuter &#039;&#039;tcpdump&#039;&#039; dans son espace de noms en utilisant cet identifiant comme point d&#039;entrée :&lt;br /&gt;
&lt;br /&gt;
# Trouver un &#039;&#039;PID&#039;&#039; exécuté dans l&#039;espace de noms désiré : &amp;lt;code&amp;gt;ps -eo pid,args,machine | grep nom_conteneur&amp;lt;/code&amp;gt;&lt;br /&gt;
# Exécuter un &#039;&#039;tcpdump&#039;&#039; dedans : &amp;lt;code&amp;gt;nsenter -t $PID -n tcpdump -ni any&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{astuce|Cette astuce fonctionne pour n&#039;importe quelle commande.}}&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
* https://www.tcpdump.org/tcpdump_man.html&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Unified_kernel_image&amp;diff=1559</id>
		<title>Unified kernel image</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Unified_kernel_image&amp;diff=1559"/>
		<updated>2025-04-29T11:12:09Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Extraction&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Noyau_linux]]&lt;br /&gt;
&lt;br /&gt;
Une Image Noyau Unifiée (INU) ou &#039;&#039;Unified Kernel Image&#039;&#039; (&#039;&#039;UKI&#039;&#039;) est la combinaison d&#039;un programme de démarrage &#039;&#039;UEFI&#039;&#039;, d&#039;une image noyau &#039;&#039;Linux&#039;&#039;, d&#039;un &#039;&#039;initrd&#039;&#039; ainsi que d&#039;autres ressources optionnelles dans un seul fichier &#039;&#039;UEFI [https://fr.wikipedia.org/wiki/Portable_Executable PE]&#039;&#039;. Il peut alors être invoqué directement par :&lt;br /&gt;
* le micrologiciel &#039;&#039;UEFI&#039;&#039; : utile notamment dans certains environnements d&#039;informatique en nuage ou confidentiels&lt;br /&gt;
* un chargeur de démarrage : généralement utile pour permettre plusieurs versions de noyau avec une sélection interactive ou automatique de la version dans laquelle démarrer ([[Systemd-boot]] ou [[Grub]] permettent cela)&lt;br /&gt;
&lt;br /&gt;
L&#039;amorçage de cette image unifiée est permise par le &#039;&#039;stub&#039;&#039;, programme logé dans celle-ci et pouvant être interprété par l{{&#039;}}&#039;&#039;UEFI&#039;&#039;. Il constitue donc la partie exécutable initiale de l&#039;image combinée et charge par la suite d&#039;autres ressources à partir du reste de l{{&#039;}}&#039;&#039;INU&#039;&#039;, en particulier le noyau et l{{&#039;}}&#039;&#039;initrd&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
La [https://uapi-group.org/specifications/specs/unified_kernel_image/ spécification officielle] définit le format et les composants (obligatoires et optionnels) des &#039;&#039;UKI&#039;&#039; qui sont fournis en tant que sections &#039;&#039;PE/COFF&#039;&#039; de l&#039;exécutable.&lt;br /&gt;
&lt;br /&gt;
L&#039;intérêt principal de cette approche est qu&#039;elle permet de mieux sécuriser le démarrage d&#039;un système en exposant un unique binaire (&#039;&#039;UEFI PE&#039;&#039;) en clair sur le disque d&#039;amorçage (&#039;&#039;EFI System Partition&#039;&#039; - &#039;&#039;ESP&#039;&#039;) au lieu d&#039;une multitude de fichiers pouvant être modifiés par le premier pirate venu. Cet exécutable pourra alors être signé par &#039;&#039;Secure Boot&#039;&#039; et permettre, entre-autre, le déchiffrement de la racine en s&#039;assurant de l’absence de sa propre altération (enregistreur de frappes par exemple).&lt;br /&gt;
&lt;br /&gt;
=Image Noyau Unifiée=&lt;br /&gt;
==Installation des outils==&lt;br /&gt;
La génération d&#039;une &#039;&#039;INU&#039;&#039; nécessite quelques outils. Le projet &#039;&#039;Systemd&#039;&#039; met à disposition un programme &#039;&#039;Python&#039;&#039; nommé &amp;lt;code&amp;gt;Ukify&amp;lt;/code&amp;gt; à partir de la version 253 de l{{&#039;}}&#039;&#039;init&#039;&#039;. Il est logé à l&#039;emplacement &amp;lt;code&amp;gt;/usr/lib/systemd/ukify&amp;lt;/code&amp;gt; mais nécessite la bibliothèque &amp;lt;code&amp;gt;python3-pefile&amp;lt;/code&amp;gt; et ses dépendances pour fonctionner. L&#039;approche exposé dans ce document visant la frugalité (&#039;&#039;Ukify&#039;&#039; apporte surtout une configuration épurée mais l&#039;aspect fonctionnel est identique), le strict nécessaire sera installé.&lt;br /&gt;
 apt install --no-install-recommends systemd-boot-efi binutils gawk sbsigntool&lt;br /&gt;
&lt;br /&gt;
Détails des paquets installés :&lt;br /&gt;
* &#039;&#039;&#039;systemd-boot-efi&#039;&#039;&#039; : fournit le &#039;&#039;stub &amp;lt;code&amp;gt;/usr/lib/systemd/boot/efi/linuxx64.efi.stub&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;binutils&#039;&#039;&#039; : fournit le programme de construction du binaire &#039;&#039;PE&#039;&#039; &amp;lt;code&amp;gt;objdump&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;gawk&#039;&#039;&#039; : fournit la version &#039;&#039;GNU&#039;&#039; de l&#039;interpréteur de langage &#039;&#039;AWK&#039;&#039; afin de ne pas avoir l&#039;erreur de fonction non définie &amp;lt;code&amp;gt;function strtonum never defined&amp;lt;/code&amp;gt; du &amp;lt;code&amp;gt;awk&amp;lt;/code&amp;gt; de base&lt;br /&gt;
* &#039;&#039;&#039;sbsigntool&#039;&#039;&#039; : permet de signer l{{&#039;}}&#039;&#039;UKI&#039;&#039; en vu d&#039;une validation &#039;&#039;Secure Boot&#039;&#039; (optionnel)&lt;br /&gt;
&lt;br /&gt;
==Script de génération==&lt;br /&gt;
La génération d&#039;une &#039;&#039;UKI&#039;&#039; nécessitant la concaténation d&#039;une multitude d&#039;éléments, il n&#039;est pas envisageable de renseigner l&#039;ensemble des paramètres manuellement. Je vous propose un script permettant la création d&#039;une image ainsi que sa rotation sur trois versions différentes (l&#039;une écrase la précédente à chaque nouvelle exécution). &lt;br /&gt;
 vim /mnt/usr/local/sbin/gen-uki&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Récupération de la version du noyau en cours d&#039;utilisation&lt;br /&gt;
version_noyau=&amp;quot;${1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Chemin vers l&#039;initrd de travail&lt;br /&gt;
chemin_initrd=&amp;quot;${2}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Chemin vers le noyau de travail&lt;br /&gt;
chemin_noyau=&amp;quot;/boot/vmlinuz-${version_noyau}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Définition des variables du script&lt;br /&gt;
chemin_lsb=&amp;quot;/usr/lib/os-release&amp;quot;&lt;br /&gt;
chemin_stub=&amp;quot;/usr/lib/systemd/boot/efi/linuxx64.efi.stub&amp;quot;&lt;br /&gt;
chemin_cmdline=&amp;quot;/etc/kernel/cmdline&amp;quot;&lt;br /&gt;
chemin_splash=&amp;quot;/dev/null&amp;quot;&lt;br /&gt;
nom_uki1=&amp;quot;1-debian.efi&amp;quot;&lt;br /&gt;
nom_uki2=&amp;quot;2-debian.efi&amp;quot;&lt;br /&gt;
nom_uki3=&amp;quot;3-debian.efi&amp;quot;&lt;br /&gt;
chemin_base=&amp;quot;/boot/efi/EFI/Linux/&amp;quot;&lt;br /&gt;
chemin_dst_uki=&amp;quot;${chemin_base}/${nom_uki1}&amp;quot;&lt;br /&gt;
chemin_sb_clef=&amp;quot;/usr/local/lib/secureboot/mok/MOK.priv&amp;quot;&lt;br /&gt;
chemin_sb_cert=&amp;quot;/usr/local/lib/secureboot/mok/MOK.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Création de l&#039;arborescence des UKI&lt;br /&gt;
mkdir -p &amp;quot;${chemin_base}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Préparation de l&#039;UKI&lt;br /&gt;
align=&amp;quot;$(objdump -p ${chemin_stub} | awk &#039;{ if ($1 == &amp;quot;SectionAlignment&amp;quot;){print $2} }&#039;)&amp;quot;&lt;br /&gt;
align=$((16#$align))&lt;br /&gt;
osrel_offs=&amp;quot;$(objdump -h &amp;quot;${chemin_stub}&amp;quot; | awk &#039;NF==7 {size=strtonum(&amp;quot;0x&amp;quot;$3); offset=strtonum(&amp;quot;0x&amp;quot;$4)} END {print size + offset}&#039;)&amp;quot;&lt;br /&gt;
osrel_offs=$((osrel_offs + &amp;quot;$align&amp;quot; - osrel_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
cmdline_offs=$((osrel_offs + $(stat -Lc%s &amp;quot;${chemin_lsb}&amp;quot;)))&lt;br /&gt;
cmdline_offs=$((cmdline_offs + &amp;quot;$align&amp;quot; - cmdline_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
splash_offs=$((cmdline_offs + $(stat -Lc%s &amp;quot;${chemin_cmdline}&amp;quot;)))&lt;br /&gt;
splash_offs=$((splash_offs + &amp;quot;$align&amp;quot; - splash_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
initrd_offs=$((splash_offs + $(stat -Lc%s &amp;quot;${chemin_splash}&amp;quot;)))&lt;br /&gt;
initrd_offs=$((initrd_offs + &amp;quot;$align&amp;quot; - initrd_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
linux_offs=$((initrd_offs + $(stat -Lc%s &amp;quot;${chemin_initrd}&amp;quot;)))&lt;br /&gt;
linux_offs=$((linux_offs + &amp;quot;$align&amp;quot; - linux_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Roulement, si elle existe et n&#039;est pas vide, de l&#039;UKI 2 en 3&lt;br /&gt;
if [[ -s &amp;quot;${chemin_base}${nom_uki2}&amp;quot; ]]; then&lt;br /&gt;
	echo &amp;quot;Copie de l&#039;UKI 2 en 3...&amp;quot;&lt;br /&gt;
	cp -v &amp;quot;${chemin_base}${nom_uki2}&amp;quot; &amp;quot;${chemin_base}${nom_uki3}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Roulement, si elle existe et n&#039;est pas vide, de l&#039;UKI 1 en 2&lt;br /&gt;
if [[ -s &amp;quot;${chemin_dst_uki}&amp;quot; ]]; then&lt;br /&gt;
	echo &amp;quot;Copie de l&#039;UKI 1 en 2...&amp;quot;&lt;br /&gt;
	cp -v &amp;quot;${chemin_dst_uki}&amp;quot; &amp;quot;${chemin_base}${nom_uki2}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Génération de l&#039;image noyau combinée (UKI) numéro 1...&amp;quot;&lt;br /&gt;
objcopy \&lt;br /&gt;
    --add-section .osrel=&amp;quot;${chemin_lsb}&amp;quot; --change-section-vma .osrel=$(printf 0x%x $osrel_offs) \&lt;br /&gt;
    --add-section .cmdline=&amp;quot;${chemin_cmdline}&amp;quot; --change-section-vma .cmdline=$(printf 0x%x $cmdline_offs) \&lt;br /&gt;
    --add-section .splash=&amp;quot;${chemin_splash}&amp;quot; --change-section-vma .splash=$(printf 0x%x $splash_offs) \&lt;br /&gt;
    --add-section .initrd=&amp;quot;${chemin_initrd}&amp;quot; --change-section-vma .initrd=$(printf 0x%x $initrd_offs) \&lt;br /&gt;
    --add-section .linux=&amp;quot;${chemin_noyau}&amp;quot; --change-section-vma .linux=$(printf 0x%x $linux_offs) \&lt;br /&gt;
    &amp;quot;${chemin_stub}&amp;quot; &amp;quot;${chemin_dst_uki}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Signature de l&#039;UKI pour la vérification Secure Boot seulement si la clé et son certificat son présents&lt;br /&gt;
if [[ -r &amp;quot;${chemin_sb_clef}&amp;quot; &amp;amp;&amp;amp; -r &amp;quot;${chemin_sb_cert}&amp;quot; ]]; then&lt;br /&gt;
	sbsign --key &amp;quot;${chemin_sb_clef}&amp;quot; --cert &amp;quot;${chemin_sb_cert}&amp;quot; --output &amp;quot;${chemin_dst_uki}&amp;quot; &amp;quot;${chemin_dst_uki}&amp;quot;&lt;br /&gt;
	sbverify --cert &amp;quot;${chemin_sb_cert}&amp;quot; &amp;quot;${chemin_dst_uki}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les [[Paramètres linux|paramètres]] du noyau (de la variable &amp;lt;code&amp;gt;$chemin_cmdline&amp;lt;/code&amp;gt;) doivent contenir les informations sur votre système de fichier racine afin que &#039;&#039;Linux&#039;&#039; puisse l&#039;amorcer. Vous pouvez vous appuyer sur l&#039;exemple ci-dessous qui comprend une partition chiffrée contenant un sous-volume &#039;&#039;BTRFS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;root=UUID=${uuid_racine} cryptdevice=UUID=${uuid_luks} ro rootflags=subvol=@rootfs console=tty0 console=ttyS0,115200n8&amp;quot; &amp;gt; /mnt/etc/kernel/cmdline&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pensez bien entendu à remplacer les variables par vos propres valeurs...&lt;br /&gt;
&lt;br /&gt;
Vous pouvez également vous appuyer sur le &amp;lt;code&amp;gt;/proc/cmdline&amp;lt;/code&amp;gt; pour visualiser les paramètres utilisés par votre propre système afin de vous en inspirer. La liste des paramètres possible est visualisable dans la [https://www.kernel.org/doc/html/v6.5/admin-guide/kernel-parameters.html documentation] du noyau.&lt;br /&gt;
&lt;br /&gt;
 chmod u+x /usr/local/sbin/gen-uki&lt;br /&gt;
&lt;br /&gt;
==Automatisation==&lt;br /&gt;
Le script ainsi créé peut être lancé manuellement mais il est préférable qu&#039;il soit appelé à chaque mise à jour de noyau ou d{{&#039;}}&#039;&#039;initrd&#039;&#039; afin de garantir un démarrage sur la dernière version disponible. Cette dépendance se créée en l&#039;exposant dans le répertoire de post-construction de l{{&#039;}}&#039;&#039;initrd&#039;&#039; (&amp;lt;code&amp;gt;/etc/initramfs/post-update.d/&amp;lt;/code&amp;gt;). Il n&#039;est pas souhaitable (voir balise &amp;quot;info&amp;quot; ci-après) de spécifier d&#039;actions dans &amp;lt;code&amp;gt;/etc/kernel/postinst.d/&amp;lt;/code&amp;gt; puisque une installation ou une mise à jour du noyau exécute systématiquement une reconstruction de  l{{&#039;}}&#039;&#039;initrd&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{info|Nous ne voulons pas générer un &#039;&#039;UKI&#039;&#039; depuis la phase post-installation du noyau pour deux raisons :&lt;br /&gt;
* le paramètre &amp;lt;code&amp;gt;$2&amp;lt;/code&amp;gt; envoyé au script est égale au chemin absolut du nouveau noyau et non de l{{&#039;}}&#039;&#039;initrd&#039;&#039;. Cela a pour effet de générer un &#039;&#039;UKI&#039;&#039; contenant deux fois le noyau et aucune fois l{{&#039;}}&#039;&#039;initrd&#039;&#039; (corrompu de fait)&lt;br /&gt;
* dans la mesure où &amp;lt;code&amp;gt;dpkg&amp;lt;/code&amp;gt; exécute à la fois les scripts des répertoires &amp;lt;code&amp;gt;/etc/initramfs/post-update.d/&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/etc/kernel/postinst.d/&amp;lt;/code&amp;gt;, deux roulements d{{&#039;}}&#039;&#039;UKI&#039;&#039; (dont un corrompu) s&#039;effectuerait, ce qui n&#039;a aucun sens et n&#039;est clairement pas souhaitable car deux images sur trois sont alors issues de la même mise à jour}}&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /etc/initramfs/post-update.d&lt;br /&gt;
 ln -s /usr/local/sbin/gen-uki /etc/initramfs/post-update.d/zz-gen-uki&lt;br /&gt;
 chmod u+x /etc/initramfs/post-update.d/zz-gen-uki&lt;br /&gt;
&lt;br /&gt;
{{info|Le répertoire &amp;lt;code&amp;gt;/etc/initramfs/post-update.d&amp;lt;/code&amp;gt; n&#039;est pas créé par défaut dans &#039;&#039;GNU/Linux Debian&#039;&#039; mais est bien parcouru lors de la génération d&#039;une nouvelle archive d{{&#039;}}&#039;&#039;init&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Création des entrées de démarrage==&lt;br /&gt;
Dans l&#039;optique d&#039;optimiser au mieux le démarrage de notre machine, nous n&#039;utiliserons aucun chargeur d&#039;amorçage. Nous créerons alors des entrées de démarrage dans notre  &#039;&#039;UEFI&#039;&#039; pointant directement sur nos &#039;&#039;UKI&#039;&#039; (son menu nous permettra de sélectionner la version à lancer). Pour se faire, il est possible de passer par l&#039;interface de celui-ci (lorsque l&#039;option est disponible) ou via l&#039;outil [[Efibootmgr]] (universel). Voici un exemple pour les trois générées par le script (il est possible de créer les entrées avant les images) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disque_systeme=/dev/nvme0n1&lt;br /&gt;
&lt;br /&gt;
efibootmgr -c -d &amp;quot;${disque_systeme}&amp;quot; -p 1 -l &#039;\EFI\Linux\1-debian.efi&#039; -L &amp;quot;Debian UKI 1&amp;quot;&lt;br /&gt;
efibootmgr -c -d &amp;quot;${disque_systeme}&amp;quot; -p 1 -l &#039;\EFI\Linux\2-debian.efi&#039; -L &amp;quot;Debian UKI 2&amp;quot;&lt;br /&gt;
efibootmgr -c -d &amp;quot;${disque_systeme}&amp;quot; -p 1 -l &#039;\EFI\Linux\3-debian.efi&#039; -L &amp;quot;Debian UKI 3&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, dans le cas malencontreux où une mise à jour de noyau ou une reconstruction d{{&#039;}}&#039;&#039;initrd&#039;&#039; occasionne une impossibilité à démarrer, les versions précédentes de votre image vous permettront de vous en sortir.&lt;br /&gt;
&lt;br /&gt;
==Extraction==&lt;br /&gt;
Il peut être utile d&#039;[https://discourse.ubuntu.com/t/how-to-inspect-kernel-efi-uki-universal-kernel-image-binary/38266 extraire] un élément particulier contenu dans une &#039;&#039;UKI&#039;&#039;.&lt;br /&gt;
# lister les sections du fichier : &amp;lt;code&amp;gt;objdump -h /boot/efi/EFI/Linux/1-debian.efi&amp;lt;/code&amp;gt;&lt;br /&gt;
# extraire un élément (exemple pour le noyau et l{{&#039;}}&#039;&#039;initrd&#039;&#039;) :&lt;br /&gt;
## &amp;lt;code&amp;gt;objcopy -O binary -j.linux /boot/efi/EFI/Linux/1-debian.efi /tmp/vmlinuz&amp;lt;/code&amp;gt;&lt;br /&gt;
## &amp;lt;code&amp;gt;objcopy -O binary -j.initrd /boot/efi/EFI/Linux/1-debian.efi /tmp/initrd&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://uapi-group.org/specifications/specs/unified_kernel_image/&lt;br /&gt;
* https://0pointer.de/blog/brave-new-trusted-boot-world.html&lt;br /&gt;
* https://wiki.debian.org/EFIStub#Setting_up_a_Unified_Kernel_Image&lt;br /&gt;
&lt;br /&gt;
=Secure Boot=&lt;br /&gt;
&lt;br /&gt;
{{info|Cette section est facultative.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Secure Boot&#039;&#039; ([https://uefi.org/sites/default/files/resources/UEFI_Spec_2_3_1.pdf chapitre 27] des spécification &#039;&#039;UEFI&#039;&#039;) est une fonctionnalité apparue avec la version 2.3.1 de l{{&#039;}}&#039;&#039;UEFI&#039;&#039; permettant de borner l&#039;amorçage aux seuls systèmes dont la signature cryptographique est reconnue par sa base interne. Son intérêt principal est d&#039;empêcher l&#039;exécution de code ayant été ajouté à l{{&#039;}}&#039;&#039;UEFI PE&#039;&#039; à l&#039;insu de l&#039;administrateur de la machine mais il peut également servir, entre-autre, à empêcher tout autre système (amorçage &#039;&#039;USB&#039;&#039; par exemple) de démarrer.&lt;br /&gt;
&lt;br /&gt;
Afin que cette fonction ai un sens, il est préférable de n&#039;autoriser que vos propres clés. Ceci n&#039;est malheureusement pas possible sur la plupart des &#039;&#039;PC&#039;&#039; du marcher. En effet, les &#039;&#039;UEFI&#039;&#039; des machines grand publique embarquent celles de &#039;&#039;Microsoft&#039;&#039; pour le démarrage de &#039;&#039;Windows&#039;&#039; (obligatoire pour bénéficier de la certification idoine) et elles ne proposent pas (dans toutes celles que j&#039;ai vu) de fonction pour gérer la base interne de clés (elles ne proposent bien souvent même pas d&#039;administrer les entrées de démarrage...). Il est peut-être possible de contourner cette limitation avec l&#039;outil &amp;lt;code&amp;gt;mokutil&amp;lt;/code&amp;gt; mais je n&#039;ai pas creusé cette piste... La problématique des clés &#039;&#039;Microsoft&#039;&#039; est bien entendu que leur présence rend caduc l&#039;exclusivité de la validité de vos signatures. Qui peut utiliser leur clé ? L&#039;administration de ce paramètre semble donc réservée aux ordinateurs professionnels (les &#039;&#039;DELL XPS&#039;&#039; le permettent) et aux plateformes serveurs.&lt;br /&gt;
&lt;br /&gt;
Il convient en outre de s&#039;assurer qu&#039;aucun accès physique non autorisé à la machine n&#039;a lieu car les gros malins qui ont rédigés les spécifications de l{{&#039;}}&#039;&#039;UEFI&#039;&#039; n&#039;ont pas crus bon d&#039;imposer le stockage de sa configuration en mémoire morte... L&#039;utilisation d&#039;une mémoire vive maintenue par une pile comme sur l&#039;antique &#039;&#039;BIOS&#039;&#039; ayant retenu leur préférence, le débranchement de cette dernière engendrera une réinitialisation complète des paramètres et de la base de clés &#039;&#039;Secure Boot&#039;&#039; (permettant ainsi l&#039;introduction de toute forme de charges utiles au démarrage). Ceci aura donc pour effet de ruiner la mince barrière de sécurité que nous venons de mettre en place...&lt;br /&gt;
&lt;br /&gt;
Enfin, un mot de passe d&#039;accès aux paramètres de l{{&#039;}}&#039;&#039;UEFI&#039;&#039; reste tout de même une pratique à suivre afin de vous assurer qu&#039;aucune injection de clé non autorisée n&#039;ai lieu. Dans le cas d&#039;une réinitialisation par débranchement de la pile, vous saurez au moins qu&#039;une action physique a été opérée sur la machine et pourrez entreprendre les mesures qui s&#039;imposent (à commencer par ne surtout pas taper votre phrase de passe [[Cryptsetup|LUKS]] !). Vous pourrez par la suite vérifier la signature de votre &#039;&#039;UKI&#039;&#039; via un autre système pour s&#039;assurer de son intégrité (pensez également à vérifier la présence d&#039;enregistreurs de frappes [https://www.youtube.com/watch?v=AMzv6ymmUcw matériels]).&lt;br /&gt;
&lt;br /&gt;
==Glossaire==&lt;br /&gt;
La base de clés de &#039;&#039;Secure Boot&#039;&#039; comporte cinq [https://www.malekal.com/quest-ce-que-secure-boot-protection-pc-uefi-comment-ca-marche/ sections] :&lt;br /&gt;
* &#039;&#039;&#039;MOK&#039;&#039;&#039; (&#039;&#039;Machine Owner Key&#039;&#039;) : base de données contenant les clés de l&#039;utilisateur - inutile pour cette procédure&lt;br /&gt;
* &#039;&#039;&#039;PK&#039;&#039;&#039; (&#039;&#039;Plateform Key&#039;&#039;) : base de données contenant les clés de la machine - utile pour cette procédure&lt;br /&gt;
* &#039;&#039;&#039;DB&#039;&#039;&#039; (&#039;&#039;Data Base&#039;&#039;) : base de données des clés autorisées (liste blanche) - utile pour cette procédure&lt;br /&gt;
* &#039;&#039;&#039;KEK&#039;&#039;&#039; (&#039;&#039;Key Exchange Keys&#039;&#039;) : aucune idée - inutile pour cette procédure&lt;br /&gt;
* &#039;&#039;&#039;DBX&#039;&#039;&#039; : (&#039;&#039;Data Base&#039;&#039; &amp;lt;introuvable dans les specs mais probablement &#039;&#039;Exclusion&#039;&#039;&amp;gt;)  : base de données des clés interdites (liste noire) - inutile pour cette procédure&lt;br /&gt;
&lt;br /&gt;
==Génération de clés==&lt;br /&gt;
Création du répertoire de travail&lt;br /&gt;
 mkdir -p /usr/local/lib/secureboot/mok&lt;br /&gt;
&lt;br /&gt;
Génération d&#039;une clé privée &#039;&#039;RSA&#039;&#039; 4096 bits (le maximum possible avec &#039;&#039;Shim&#039;&#039; - que nous n&#039;utilisons pas - est, aux dernières nouvelles ([https://wiki.debian.org/SecureBoot#Generating_a_new_key 21/06/2022]) 2048 bits) et d&#039;un certificat public associé&lt;br /&gt;
 openssl req -nodes -new -x509 -newkey rsa:4096 -keyout /usr/local/lib/secureboot/mok/MOK.priv -outform DER -out /usr/local/lib/secureboot/mok/MOK.der -days 36500 -subj &amp;quot;/CN=Mon Nom/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Conversion du certificat en &#039;&#039;PEM&#039;&#039; afin d&#039;être utilisable par &amp;lt;code&amp;gt;sbsign&amp;lt;/code&amp;gt;&lt;br /&gt;
 openssl x509 -inform der -in /usr/local/lib/secureboot/mok/MOK.der -out /usr/local/lib/secureboot/mok/MOK.pem&lt;br /&gt;
&lt;br /&gt;
Empêcher la lecture de ces fichiers par un autre utilisateur que root&lt;br /&gt;
 chmod 400 /usr/local/lib/secureboot/mok/{MOK.priv,MOK.der,MOK.pem}&lt;br /&gt;
&lt;br /&gt;
Les étapes qui suivent sont réalisées automatiquement par le script créé plus haut et sont notées à titre indicatif.&lt;br /&gt;
&lt;br /&gt;
Le certificat au format &#039;&#039;PEM&#039;&#039; est utilisé par les commandes du paquet &amp;lt;code&amp;gt;sbsigntool&amp;lt;/code&amp;gt; alors que la &#039;&#039;DER&#039;&#039; est utilisée par les &#039;&#039;UEFI&#039;&#039; (pourquoi utiliser le même format hein ?). il doit être renseignée deux fois dans les menus de gestion des clés de votre carte mère :&lt;br /&gt;
* une fois dans &#039;&#039;Plateform Key&#039;&#039; (&#039;&#039;PK&#039;&#039;)&lt;br /&gt;
* l&#039;autre dans &#039;&#039;DB&#039;&#039; (&#039;&#039;Authorized Signatures&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Le certificat &#039;&#039;DER&#039;&#039; doit être accessible à l{{&#039;}}&#039;&#039;UEFI&#039;&#039; pour injection. Vous pouvez le mettre dans toute partition &#039;&#039;FAT&#039;&#039; comme votre &#039;&#039;ESP&#039;&#039; &amp;lt;code&amp;gt;/boot/efi/EFI/&amp;lt;/code&amp;gt; ou sur une clé &#039;&#039;USB&#039;&#039; afin de l&#039;y sélectionner depuis le menu dédié (peut être supprimé à l&#039;issue).&lt;br /&gt;
&lt;br /&gt;
==Signature de l&#039;image==&lt;br /&gt;
Dans la commande qui suit, la signature de l&#039;image va réécrir par dessus l&#039;originale (sa somme de contrôle va changer). Ce comportement est volontaire mais peut être changé en modifiant la valeur de &amp;lt;code&amp;gt;--output&amp;lt;/code&amp;gt;&lt;br /&gt;
 sbsign --key /usr/local/lib/secureboot/mok/MOK.priv --cert /usr/local/lib/secureboot/mok/MOK.pem --output /boot/efi/EFI/Linux/1-debian.efi /boot/efi/EFI/Linux/1-debian.efi&lt;br /&gt;
&lt;br /&gt;
Vérification de la signature&lt;br /&gt;
 sbverify --cert /usr/local/lib/secureboot/mok/MOK.pem /boot/efi/EFI/Linux/1-debian.efi&lt;br /&gt;
&lt;br /&gt;
Une fois &#039;&#039;Secure Boot&#039;&#039; activé et votre système démarré, vous pouvez vérifier l&#039;effectivité de cette fonctionnalité via la commande suivante du paquet &amp;lt;code&amp;gt;mokutil&amp;lt;/code&amp;gt;&lt;br /&gt;
 mokutil --sb-state&lt;br /&gt;
&lt;br /&gt;
{{astuce|La signature d&#039;un module noyau complilé par vous même peut se faire via la commande suivante (exemple pour le pilote &amp;lt;code&amp;gt;ixgbe&amp;lt;/code&amp;gt;) : &amp;lt;code&amp;gt;/usr/lib/linux-kbuild-6.1/scripts/sign-file sha512 /usr/local/lib/secureboot/mok/MOK.{priv,der} /lib/modules/6.1.0-17-amd64/updates/drivers/net/ethernet/intel/ixgbe/ixgbe.ko /tmp/ixgbe.ko&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://uefi.org/specifications&lt;br /&gt;
* https://wiki.debian.org/SecureBoot#Generating_a_new_key&lt;br /&gt;
* https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Shell_bash&amp;diff=1558</id>
		<title>Shell bash</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Shell_bash&amp;diff=1558"/>
		<updated>2025-04-29T11:04:08Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout d&amp;#039;un descriptif pour le fichier .inputrc + ajout de deux sections + suppression de la balise source obsolète + ajout de sources&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:shell]]&lt;br /&gt;
Le &#039;&#039;shell Bash&#039;&#039; est l&#039;interpréteur de commandes par défaut de la plupart des distributions Linux. Il peut être personnalisé en modifiant son apparence ou en lui activant des paramètres.&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
==bashrc==&lt;br /&gt;
Le &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;.bashrc&amp;lt;/source&amp;gt; est un fichier qui contient des commandes à exécuter au moment de la connexion d&#039;un utilisateur. Il en existe 2 types :&lt;br /&gt;
* Un générique pour tout les utilisateurs : &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/bash.bashrc&amp;lt;/source&amp;gt;&lt;br /&gt;
* Un local pour chaque utilisateurs en particulier : &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.bashrc&amp;lt;/source&amp;gt;&lt;br /&gt;
Pour que les modifications prennent effet, il faut recharger le fichier après modification soit en relançant le shell, soit en exécutant le fichier comme s&#039;il s’agissait d&#039;une commande &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;. .bashrc&amp;lt;/source&amp;gt; ou bien en utilisant la commande &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;source ~/.bashrc&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Auto complétion===&lt;br /&gt;
Le paquet &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;bash-completion&amp;lt;/source&amp;gt; offre la possibilité de compléter les commandes bash à l&#039;aide de la tabulation. Il faut entrer les quelques lignes suivantes dans l&#039;un des fichiers de configuration de bash pour que cela prenne effet.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if ! shopt -oq posix; then&lt;br /&gt;
  if [ -f /usr/share/bash-completion/bash_completion ]; then&lt;br /&gt;
    . /usr/share/bash-completion/bash_completion&lt;br /&gt;
  elif [ -f /etc/bash_completion ]; then&lt;br /&gt;
    . /etc/bash_completion&lt;br /&gt;
  fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Personnalisation du prompt===&lt;br /&gt;
==inputrc==&lt;br /&gt;
Le [https://ss64.com/bash/syntax-inputrc.html fichier] &amp;lt;code&amp;gt;~/.inputrc&amp;lt;/code&amp;gt; contient la configuration de [https://tiswww.case.edu/php/chet/readline/rltop.html GNU Readline] qui procure une personnalisation de l&#039;interface utilisateur en ligne de commande pour de nombreux programmes interactifs tel que &#039;&#039;Bash et &#039;&#039;Python&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Insensibilité à la casse===&lt;br /&gt;
Rendre insensible l&#039;auto complétion du &#039;&#039;shell Bash&#039;&#039; à la casse (très utile quand on tape vite au clavier et que le système écrit &#039;&#039;/Etc&#039;&#039; au lieu de &#039;&#039;/etc&#039;&#039; et dit &amp;lt;code&amp;gt;Aucun fichier ou dossier de ce type&amp;lt;/code&amp;gt;)&lt;br /&gt;
 vim ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
Ajouter cette ligne :&lt;br /&gt;
 set completion-ignore-case On&lt;br /&gt;
&lt;br /&gt;
===Désactiver display all possibilities===&lt;br /&gt;
Lorsque l&#039;auto complétion détecte un nombre d&#039;items supérieur ou égal à 100, un prompt demandant confirmation pour l&#039;affichage des possibilités s&#039;affiche et exige une réponse (&amp;lt;code&amp;gt;Display all N possibilities? (y or n)&amp;lt;/code&amp;gt;). Pour désactiver ce comportement, les valeurs [https://superuser.com/questions/601992/how-can-i-disable-that-display-all-possibilities-and-more-stuff-in-bash suivantes] doivent êtres définies dans le fichier &amp;lt;code&amp;gt;~/.inputrc&amp;lt;/code&amp;gt;&lt;br /&gt;
 set completion-query-items 0&lt;br /&gt;
 set page-completions off&lt;br /&gt;
&lt;br /&gt;
===Coloration de l&#039;auto complétion===&lt;br /&gt;
Par défaut, l’appui double sur &amp;lt;code&amp;gt;&amp;lt;tab&amp;gt;&amp;lt;/code&amp;gt; affiche les possibilités en monochrome. Il est possible d&#039;utiliser les couleurs définies dans la variables d&#039;environnement &amp;lt;code&amp;gt;$LS_COLORS&amp;lt;/code&amp;gt; en ajoutant le paramètre suivant à la configuration&lt;br /&gt;
 set colored-stats On&lt;br /&gt;
&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* http://askubuntu.com/questions/87061/can-i-make-tab-auto-completion-case-insensitive-in-the-terminal&lt;br /&gt;
* https://www.topbug.net/blog/2017/07/31/inputrc-for-humans/&lt;br /&gt;
* https://ss64.com/bash/syntax-inputrc.html&lt;br /&gt;
&lt;br /&gt;
=Redirections=&lt;br /&gt;
==Rediriger plusieurs lignes==&lt;br /&gt;
Pour ce faire nous utiliserons un EOF (End Of File). Il faut précéder et succéder une chaîne de caractère quelconque par des traits de soulignement afin de marquer le début et la fin de notre bloque de texte (à la manière du &#039;&#039;motd&#039;&#039; Cisco).&lt;br /&gt;
&lt;br /&gt;
===Dans un fichier===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ycharbi@XPS13:/tmp$ cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt; foo.txt&lt;br /&gt;
&amp;gt; Écrire et&lt;br /&gt;
&amp;gt; terminer par le&lt;br /&gt;
&amp;gt; même symbole&lt;br /&gt;
&amp;gt; _EOF_&lt;br /&gt;
ycharbi@XPS13:/tmp$ cat foo.txt &lt;br /&gt;
Écrire et&lt;br /&gt;
terminer par le&lt;br /&gt;
même symbole&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dans le shell===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ycharbi@XPS13:/tmp$ cat &amp;lt;&amp;lt; _EOF_&lt;br /&gt;
&amp;gt; Écrire et&lt;br /&gt;
&amp;gt; terminer par le&lt;br /&gt;
&amp;gt; même symbole&lt;br /&gt;
&amp;gt; _EOF_&lt;br /&gt;
Écrire et&lt;br /&gt;
terminer par le&lt;br /&gt;
même symbole&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Astuce|Le fait de mettre des quottes au mot clé de fin de fichier (&#039;&#039;_EOF_&#039;&#039; dans l&#039;exemple, mais pourrai être &#039;&#039;toto&#039;&#039;) permet de désactiver l&#039;interprétation &#039;&#039;Bash&#039;&#039;. Si vous ne les mettez pas, le &#039;&#039;shell&#039;&#039; interprétera le code que vous entrerez (les variables notamment). À vous de voir ce que vous voulez faire. Ceci est expliqué dans ce [http://tldp.org/LDP/abs/html/here-docs.html chapitre] du guide de programmation &#039;&#039;Bash&#039;&#039; avancé repris par ce [https://stackoverflow.com/questions/2953081/how-can-i-write-a-heredoc-to-a-file-in-bash-script commentaire].}}&lt;br /&gt;
&lt;br /&gt;
===Source de la section===&lt;br /&gt;
* https://www.bggofurther.com/fr/2017/10/write-multiple-lines-to-file-in-bash-script/&lt;br /&gt;
&lt;br /&gt;
=Arguments=&lt;br /&gt;
Voici une liste d&#039;astuces pour récupérer des arguments tapés en &#039;&#039;bash&#039;&#039;:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument !! Signification&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;Échap&amp;gt; + _&amp;lt;/source&amp;gt; || Colle le dernier argument passé à la dernière commande tapée&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;!$&amp;lt;/source&amp;gt; || Équivaut, au moment d&#039;envoyer la commande, au dernier argument passé à la dernière commande tapée&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;!:$&amp;lt;/source&amp;gt; || Équivaut, au moment d&#039;envoyer la commande, à l’énième argument passé à la dernière commande tapée (remplacer le &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;$&amp;lt;/source&amp;gt; par le numéro de l&#039;argument)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;!!&amp;lt;/source&amp;gt; || Équivaut, au moment d&#039;envoyer la commande, à tout les arguments de la dernière commande tapée&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;^toto^titi&amp;lt;/source&amp;gt; || Permet de remplacer &#039;&#039;toto&#039;&#039; par &#039;&#039;titi&#039;&#039; dans la commande précédente (à entrer seul, sans commande ni argument). Un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ls /etc&amp;lt;/source&amp;gt; suivi d&#039;un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;^/etc^/&amp;lt;/source&amp;gt; donnera un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ls /&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;~+&amp;lt;/source&amp;gt; || Donne le répertoire courant (est identique à &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;$(pwd)&amp;lt;/source&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;ctrl&amp;gt; + alt + e&amp;lt;/source&amp;gt; || Déroule la véritable signification d&#039;un alias. Par exemple, si je tape &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ls&amp;lt;/source&amp;gt; suivi de ce raccourci clavier, j&#039;obtiens &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ls --color&amp;lt;/source&amp;gt; qui est définit comme alias dans mon &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;.bashrc&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;$_&amp;lt;/source&amp;gt; || Correspond au dernier paramètre de la dernière commande exécuté. La différence avec les motifs présentés plus haut est qu&#039;il utilisable même lors d&#039;un enchaînement de commande comme par [https://www.blog-libre.org/2020/04/17/une-presentation-de-systemd-nspawn/ exemple] &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;mkdir -p ~/tmp/conteneur &amp;amp;&amp;amp; cd $_&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Restriction=&lt;br /&gt;
Il est possible de restreindre l&#039;usage du &#039;&#039;shell&#039;&#039; pour un utilisateur en exécutant &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;bash&amp;lt;/syntaxhighlight&amp;gt;  avec l&#039;option &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;-r&amp;lt;/syntaxhighlight&amp;gt; ou en utilisant &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/usr/bin/rbash&amp;lt;/syntaxhighlight&amp;gt; (résultat identique).&lt;br /&gt;
&lt;br /&gt;
L&#039;interpréteur ainsi restreint permet de créer un environnement plus contrôlé qu&#039;un interpréteur standard. Il se comporte de même façon que &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;bash&amp;lt;/syntaxhighlight&amp;gt; à la différence des actions suivantes qui sont interdites ou non effectuées :&lt;br /&gt;
* changer de répertoire avec &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;cd&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* créer ou détruire les valeurs de &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;SHELL&amp;lt;/syntaxhighlight&amp;gt;, &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;PATH&amp;lt;/syntaxhighlight&amp;gt;, &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;HISTFILE&amp;lt;/syntaxhighlight&amp;gt;, &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;ENV&amp;lt;/syntaxhighlight&amp;gt; ou &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;BASH_ENV&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* indiquer des noms de commandes contenant un &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* indiquer un nom de fichier contenant un &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/&amp;lt;/syntaxhighlight&amp;gt; comme argument de la commande interne &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;.&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* indiquer un nom de fichier contenant une barre oblique (&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/&amp;lt;/syntaxhighlight&amp;gt;) comme argument de la  commande interne &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;history&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* indiquer  un  nom de fichier contenant une barre oblique comme argument de l&#039;option &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;-p&amp;lt;/syntaxhighlight&amp;gt; de la commande interne &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;hash&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* importer une définition de fonction dans l&#039;environnement au démarrage&lt;br /&gt;
* analyser les valeurs de &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;SHELLOPTS&amp;lt;/syntaxhighlight&amp;gt; de l&#039;environnement d&#039;interpréteur au démarrage&lt;br /&gt;
* rediriger la sortie en utilisant les opérateurs de redirection &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;, &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;gt;|&amp;lt;/syntaxhighlight&amp;gt;, &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;, &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;gt;&amp;amp;&amp;lt;/syntaxhighlight&amp;gt;, &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;amp;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; et &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;gt;&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* utiliser la commande interne &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;exec&amp;lt;/syntaxhighlight&amp;gt; pour remplacer l&#039;interpréteur par une autre commande&lt;br /&gt;
* ajouter ou supprimer des commandes internes avec les options &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;-f&amp;lt;/syntaxhighlight&amp;gt; et &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;-d&amp;lt;/syntaxhighlight&amp;gt; de la commande interne &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;enable&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* utiliser la commande interne &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;enable&amp;lt;/syntaxhighlight&amp;gt; pour activer les commandes internes de l&#039;interpréteur désactivées&lt;br /&gt;
* indiquer l&#039;option &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;-p&amp;lt;/syntaxhighlight&amp;gt; à la commande interne commande&lt;br /&gt;
* supprimer le mode restreint avec &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;set +r&amp;lt;/syntaxhighlight&amp;gt; ou &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;set +o restricted&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ces restrictions sont mises en place après la lecture de tous les fichiers d’initialisation.&lt;br /&gt;
&lt;br /&gt;
De fait, il est possible d&#039;utiliser &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;rbash&amp;lt;/syntaxhighlight&amp;gt; comme shell de connexion pour un utilisateur donné (exemple pour &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/passwd&amp;lt;/syntaxhighlight&amp;gt;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csv&amp;quot;&amp;gt;&lt;br /&gt;
www-data:x:33:33:www-data:/var/www:/usr/bin/rbash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* http://linuxfr.org/users/postroutine/journaux/bash-et-les-raccourcis-claviers&lt;br /&gt;
* https://askubuntu.com/questions/70750/how-to-get-bash-to-stop-escaping-during-tab-completion&lt;br /&gt;
* https://bugzilla.redhat.com/show_bug.cgi?id=679696&lt;br /&gt;
* https://www.gnu.org/software/bash/manual/html_node/The-Restricted-Shell.html#The-Restricted-Shell&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Gestion_du_r%C3%A9seau_-_windows&amp;diff=1557</id>
		<title>Gestion du réseau - windows</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Gestion_du_r%C3%A9seau_-_windows&amp;diff=1557"/>
		<updated>2025-03-20T21:29:04Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Gestion des interfaces réseau&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:réseau windows]]&lt;br /&gt;
&lt;br /&gt;
=Gestion des interfaces réseau=&lt;br /&gt;
==Configuration des interfaces==&lt;br /&gt;
La commande [https://learn.microsoft.com/fr-fr/windows-server/networking/technologies/netsh/netsh-contexts netsh] permet de réaliser de multiples opérations sur les interfaces réseau&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;powershell&amp;quot;&amp;gt;&lt;br /&gt;
# Afficher la configuration des interfaces réseau (et leur nom)&lt;br /&gt;
netsh interface ipv4 show config&lt;br /&gt;
&lt;br /&gt;
# Afficher les statistiques TCP&lt;br /&gt;
netsh int tcp show global&lt;br /&gt;
&lt;br /&gt;
# Configurer une IP DHCP&lt;br /&gt;
netsh interface ipv4 set address name=&amp;quot;NomDeLInterface&amp;quot; dhcp&lt;br /&gt;
&lt;br /&gt;
# Configurer une IP statique&lt;br /&gt;
netsh interface ipv4 set address name=&amp;quot;NomDeLInterface&amp;quot; static 192.168.1.100 255.255.255.0 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
# Configurer un DNS&lt;br /&gt;
netsh interface ipv4 set dns name=&amp;quot;NomDeLInterface&amp;quot; static 8.8.8.8&lt;br /&gt;
&lt;br /&gt;
# Configurer un second DNS&lt;br /&gt;
netsh interface ipv4 add dns name=&amp;quot;NomDeLInterface&amp;quot; 9.9.9.9 index=2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* Manuel :&lt;br /&gt;
** https://learn.microsoft.com/fr-fr/windows-server/networking/technologies/netsh/netsh-contexts&lt;br /&gt;
** https://learn.microsoft.com/fr-fr/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc754516(v=ws.10)&lt;br /&gt;
** https://learn.microsoft.com/fr-fr/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc770948(v=ws.10)&lt;br /&gt;
* https://stackoverflow.com/questions/18620173/how-can-i-set-change-dns-using-the-command-prompt-at-windows-8#answer-28262761&lt;br /&gt;
* https://www.malekal.com/commande-netsh-windows-exemples-utilisation/&lt;br /&gt;
&lt;br /&gt;
==Réinitialiser les interfaces==&lt;br /&gt;
Pour [https://support.microsoft.com/fr-fr/topic/comment-faire-pour-r%C3%A9initialiser-le-protocole-tcp-ip-%C3%A0-l-aide-de-l-utilitaire-netshell-d954430c-9b11-43f0-6081-0fc9235a8b4a réinitialiser] la configuration d&#039;une interface réseau, la commande privilégiée suivante peut être utilisée&lt;br /&gt;
 netsh int ip reset&lt;br /&gt;
&lt;br /&gt;
Un redémarrage est nécessaire (bah oui, on est sous &#039;&#039;Windows&#039;&#039;...).&lt;br /&gt;
&lt;br /&gt;
==Correction de problèmes==&lt;br /&gt;
===Winsock===&lt;br /&gt;
Le service &amp;lt;code&amp;gt;Winsock&amp;lt;/code&amp;gt; (couche d{{&#039;}}&#039;&#039;API&#039;&#039; permettant à une application de manipuler la pile &#039;&#039;TCP/IP&#039;&#039; de &#039;&#039;Windows&#039;&#039;) peut également avoir besoin d&#039;être redémarrer lorsque des problèmes se font sentir. Cela se fait via la commande privilégiée suivante&lt;br /&gt;
 netsh winsock reset&lt;br /&gt;
&lt;br /&gt;
===Adresse APIPA en mode IP statique===&lt;br /&gt;
Il peut arriver que malgré qu&#039;une interface réseau soit configurée en &#039;&#039;IP&#039;&#039; statique, une adresse principale en [https://fr.wikipedia.org/wiki/Automatic_Private_Internet_Protocol_Addressing APIPA] soit attribuée par le système et que notre &#039;&#039;IP&#039;&#039; entrée manuellement soit indiquée comme &amp;quot;dupliquée&amp;quot; par un &amp;lt;code&amp;gt;ipconfig&amp;lt;/code&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
Ceci est dû à la fonction &amp;quot;d{{&#039;}}&#039;&#039;ARP&#039;&#039; gratuit&amp;quot; de &#039;&#039;Windows&#039;&#039; qui permet au système de détecter s&#039;il y a un conflit d&#039;adresse &#039;&#039;IP&#039;&#039; sur le &#039;&#039;LAN&#039;&#039;. Bien qu&#039;il soit plus judicieux de régler cette duplication d&#039;adressage (une adresse &#039;&#039;IP&#039;&#039; doit être unique dans un réseau), il est possible de [https://community.spiceworks.com/t/static-ip-devices-receiving-169-address-after-reboot/278702/26 désactiver] cette fonction pour forcer la configuration :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;regedit&amp;lt;/code&amp;gt; &amp;gt; &amp;lt;code&amp;gt;[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]&amp;lt;/code&amp;gt; &amp;gt; créer un nouveau &#039;&#039;32-bit DWORD&#039;&#039; nommé &amp;lt;code&amp;gt;ArpRetryCount&amp;lt;/code&amp;gt; &amp;gt; valeur &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; &amp;gt; redémarrer&lt;br /&gt;
&lt;br /&gt;
=Gérer la table de routage=&lt;br /&gt;
==Lister les routes==&lt;br /&gt;
 route print&lt;br /&gt;
&lt;br /&gt;
==Ajouter une route==&lt;br /&gt;
 route ADD 192.168.35.0 MASK 255.255.255.0 192.168.0.2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note : le paramètre &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;-p&amp;lt;/syntaxhighlight&amp;gt; permet un ajout persistant au démarrage de la machine.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Supprimer une route==&lt;br /&gt;
 route DELETE 192.168.35.0 MASK 255.255.255.0 192.168.0.2&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://www.howtogeek.com/howto/windows/adding-a-tcpip-route-to-the-windows-routing-table/&lt;br /&gt;
&lt;br /&gt;
=Modification du MTU=&lt;br /&gt;
==MTU en dessous de 1500 octets==&lt;br /&gt;
===Afficher le MTU des interfaces===&lt;br /&gt;
 netsh interface ipv4 show subinterfaces&lt;br /&gt;
&lt;br /&gt;
===Modifier le MTU d&#039;une interface temporairement===&lt;br /&gt;
 netsh interface ipv4 set subinterface &amp;quot;Ethernet 2&amp;quot; mtu=1484&lt;br /&gt;
&lt;br /&gt;
===Modifier le MTU d&#039;une interface définitivement===&lt;br /&gt;
 netsh interface ipv4 set subinterface &amp;quot;Ethernet 2&amp;quot; mtu=1484 store=persistent&lt;br /&gt;
&lt;br /&gt;
==Trames géantes==&lt;br /&gt;
===Activer les trames géantes===&lt;br /&gt;
Aller dans le &#039;&#039;&#039;&#039;&#039;Centre Réseau et partage&#039;&#039;&#039;&#039;&#039; et cliquer sur le nom de l&#039;interface réseau. Faire &#039;&#039;&#039;&#039;&#039;propriétés&#039;&#039; &amp;gt; &#039;&#039;Configurer&#039;&#039; &amp;gt; &#039;&#039;Avancer&#039;&#039; &amp;gt; &#039;&#039;Trame jumbo&#039;&#039; &amp;gt; et définir la valeur souhaité (mon réseau permet des trames de 9 ko)&#039;&#039;&#039;. Il faut ensuite redémarrer la machine pour prendre en compte la modification.&lt;br /&gt;
&lt;br /&gt;
===Test des trames géantes===&lt;br /&gt;
Il est possible de vérifier le fonctionnement de ce changement via un ping géant:&lt;br /&gt;
 ping 192.168.10.1 -f -l 9000&lt;br /&gt;
&lt;br /&gt;
==Sources la section==&lt;br /&gt;
* https://answers.microsoft.com/fr-fr/windows/forum/windows_8-networking/modifier-le-mtu-sous-windows-8/e7e76cf4-0fea-458f-8781-7b73a93bef0e&lt;br /&gt;
* https://www.it-connect.fr/jumbo-frame-sous-windows-pourquoi-comment/&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Firefox&amp;diff=1556</id>
		<title>Firefox</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Firefox&amp;diff=1556"/>
		<updated>2025-02-15T15:37:58Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Désactiver la redirection HTTPS automatique&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:navigateurs web]]&lt;br /&gt;
&lt;br /&gt;
=Activer la gestion du tactile=&lt;br /&gt;
Comme beaucoup de fonctions dans Firefox, la gestion des écrans tactile n&#039;est pas activée par défaut dans nombre d’environnements (c&#039;est le cas de Debian). Pour l&#039;activer, il faut définir une variable d&#039;environnement et activer l&#039;option dans la section dédiée de Firefox.&lt;br /&gt;
&lt;br /&gt;
==Définir la variable d&#039;environnement==&lt;br /&gt;
 echo &#039;MOZ_USE_XINPUT2=1&#039; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
&lt;br /&gt;
La modification prend effet au redémarrage. Il est possible de lancer Firefox avec la définition de cette variable manuellement via le terminal en attendant: &amp;lt;code&amp;gt;MOZ_USE_XINPUT2=1 firefox&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Activation de l&#039;option dans Firefox==&lt;br /&gt;
&lt;br /&gt;
Il faut se rendre dans &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt; et mettre le paramètre &#039;&#039;&#039;dom.w3c_touch_events.enabled&#039;&#039;&#039; à &#039;&#039;&#039;1&#039;&#039;&#039;. La modification est active instantanément. Vous pouvez profiter du défilement, de la sélection et du zoom au doigt.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://support.mozilla.org/es/questions/1091627&lt;br /&gt;
&lt;br /&gt;
=Désactiver la redirection HTTPS automatique=&lt;br /&gt;
Par défaut, le navigateur redirige automatiquement les requêtes &#039;&#039;HTTP&#039;&#039; vers &#039;&#039;HTTPS&#039;&#039; lorsque la première requête en clair n&#039;a pas fonctionnée. Bien que cela puisse sembler être une bonne idée au premier abord, les fonctionnalités automatiques son bien souvent un miroir aux alouettes et lorsque le fameux cache ultra casse couille de &#039;&#039;Firefox&#039;&#039; entre la danse, il est parfois impossible d&#039;accéder à un site uniquement servi en &#039;&#039;HTTP&#039;&#039; si ce dernier était indisponible lors de la première requête (test interne par exemple).&lt;br /&gt;
&lt;br /&gt;
Pour désactiver ce comportement, il faut passer le [https://support.mozilla.org/en-US/questions/1019210 paramètre] &amp;lt;code&amp;gt;browser.urlbar.autoFill&amp;lt;/code&amp;gt; de &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Utiliser Wayland=&lt;br /&gt;
Il est possible d&#039;utiliser &#039;&#039;Firefox&#039;&#039; avec [[Wayland]] en définissant la [https://www.reddit.com/r/firefox/comments/c8itj2/enabling_wayland_on_linux/ variable d&#039;environnement] &amp;lt;code&amp;gt;MOZ_ENABLE_WAYLAND=1&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;/etc/environment&amp;lt;/code&amp;gt;. Un redémarrage du programme est nécessaire et il faut s&#039;assurer que la variable est bien définie lors de son lancement (le plus simple est de redémarrer le système).&lt;br /&gt;
&lt;br /&gt;
=Désactiver le détachement d&#039;un onglet=&lt;br /&gt;
Une fonctionne ultra casse couilles avec Firefox c&#039;est bien le [https://www.askvg.com/firefox-tip-disable-tabs-drag-n-drop-feature-to-move-to-new-window/ glisser/déposer d&#039;un onglet] qui en fait une nouvelle fenêtre. Juste insupportable. Pour désactiver cette merde, il faut passer la valeur &amp;lt;code&amp;gt;browser.tabs.allowTabDetach&amp;lt;/code&amp;gt; à &#039;&#039;&#039;false&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Restaurer la fenêtre de téléchargement=&lt;br /&gt;
Avec Firefox 98 (et comme avec chaque nouvelle version), une fonctionnalité indispensable a été supprimée : la possibilité d&#039;ouvrir un fichier sans l&#039;enregistrer quelque part sur le disque (il va simplement dans le &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;). Pour restaurer ce comportement, il faut passer la valeur &amp;lt;code&amp;gt;browser.download.improvements_to_download_panel&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Forcer l&#039;usage du presse papier=&lt;br /&gt;
Certains sites &#039;&#039;WEB&#039;&#039; se croient malins en interdisant l&#039;utilisation du copier/coller dans les formulaires (réinitialisation de mots de passe par exemple). Cette pratique, en plus d&#039;être une atteinte à notre liberté d&#039;utiliser nos outils informatiques comme nous l&#039;entendons, nous empêche de gérer nos [[Génération de mots de passe|mots de passe]] à notre guise (la meilleur clé est celle que vous ne connaissez pas et donc que vous ne pouvez pas taper dans un champ de formulaire...). Comme souvent, sous couvert de sécurité, le résultat est l&#039;exact opposé. Aux développeurs &#039;&#039;WEB&#039;&#039; : laissez-nous gérer nos outils informatiques comme nous l&#039;entendons, nous sommes bien plus à même de savoir ce qui est bon pour nous que vous !&lt;br /&gt;
&lt;br /&gt;
Pour dire à &#039;&#039;Firefox&#039;&#039; de ne pas respecter le &#039;&#039;Javascript&#039;&#039; qui lui dit d&#039;adopter un comportement aussi débile, il faut passer la [https://www.howtogeek.com/251807/how-to-enable-pasting-text-on-sites-that-block-it/ valeur] &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;dom.event.clipboardevents.enabled&amp;lt;/code&amp;gt; à &#039;&#039;&#039;false&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez alors de nouveau de vous prendre pour un [https://fr.wikipedia.org/wiki/Pasteur_(christianisme) pasteur] en usant de &#039;&#039;copy/paste&#039;&#039; !&lt;br /&gt;
&lt;br /&gt;
{{attention|La désactivation de cette fonction empêche le [https://github.com/element-hq/element-web/issues/25695 collage de textes] dans le champ de discutions de [[Matrix_synapse#Client_WEB_Element|element-web]] (un &amp;lt;code&amp;gt;ctrl+v&amp;lt;/code&amp;gt; n&#039;a donc plus aucun effet).}}&lt;br /&gt;
&lt;br /&gt;
=Désactiver le rafraîchissement automatique=&lt;br /&gt;
Certains sites non respectueux de leurs utilisateurs (les sites de presse en tête), utilisent du &#039;&#039;Javascript&#039;&#039; pour rafraîchir automatiquement les pages de leur site (probablement pour générer du revenu avec la publicité).&lt;br /&gt;
Cette pratique, outre le fait de consommer de la bande passante et du &#039;&#039;CPU&#039;&#039; (donc de l&#039;électricité), engendre un comportement non désiré et inattendu de l&#039;utilisateur (seul maître légitime de son ordinateur).&lt;br /&gt;
&lt;br /&gt;
Pour faire cesser ça, il faut initier la clé &amp;lt;code&amp;gt;accessibility.blockautorefresh&amp;lt;/code&amp;gt; à &#039;&#039;true&#039;&#039; dans &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Désactiver la géolocalisation=&lt;br /&gt;
Certains sites envoient une requête au navigateur afin de demander d&#039;activer la géolocalisation. Cela se matérialise dans &#039;&#039;Firefox&#039;&#039; par un popup au niveau de la barre d&#039;adresse qui masque une partie du site (pénible). Calqué sur le modèle de celui demandant d&#039;enregistrer un mot de passe, celui-ci n&#039;est pas désactivable dans les paramètres (cela doit être trop difficile à coder pour &#039;&#039;Mozilla&#039;&#039;...). Cela se fait donc via les habituels paramètres avancés de &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;, en [https://whatismyipaddress.com/enabling-and-disabling-geolocation-on-your-browser#h-firefox passant] &amp;lt;code&amp;gt;geo.enabled&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Désactiver précédent et suivant au trackpad=&lt;br /&gt;
Autre réelle mauvaise idée de ce navigateur, la fonctionnalité précédent et suivant via des gestes latéraux avec un trackpad. Mise à part réaliser des actions involontaires pouvant êtres, au mieux, ultra désagréables en rechargeant les pages et au pire, dangereusement catastrophique en fonction des cas (quitter une page avant la fin d&#039;une opération est rarement sans conséquence dans le traitement...), il m&#039;apparaît de l&#039;ordre du bon sens de désactiver cette aberration qui n&#039;aurait jamais dû voir le jour.&lt;br /&gt;
&lt;br /&gt;
Via &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;, [https://superuser.com/questions/1270620/how-do-i-disable-option-swipe-navigating-history-forward-and-back-in-firefox#answer-1850606 vider les champs] &amp;lt;code&amp;gt;browser.gesture.swipe.left&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;browser.gesture.swipe.right&amp;lt;/code&amp;gt; (le bouton de réinitialisation permet de restaurer les valeurs par défaut si vous avez l&#039;idée saugrenue de vouloir revenir en arrière).&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Qbittorrent&amp;diff=1555</id>
		<title>Qbittorrent</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Qbittorrent&amp;diff=1555"/>
		<updated>2025-02-15T15:03:03Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Correction de fautes + changement de certaines balises + ordonnancement de la page en sections + ajout d&amp;#039;une section &amp;quot;Script post téléchargement&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Outils de téléchargements]]&lt;br /&gt;
&lt;br /&gt;
[https://www.qbittorrent.org/ Qbittorrent] est un client [https://fr.wikipedia.org/wiki/BitTorrent Bittorrent] libre multi-plateforme sur [https://fr.wikipedia.org/wiki/FreeBSD FreeBSD], [https://fr.wikipedia.org/wiki/Linux Linux], [https://fr.wikipedia.org/wiki/MacOS MacOS], [https://fr.wikipedia.org/wiki/OS/2 OS/2] et [https://fr.wikipedia.org/wiki/Microsoft_Windows Windows]. Basé sur le cadriciel [https://www.qt.io/ QT], il dispose d&#039;un démon, d&#039;une interface graphique optionnelle, et d&#039;une interface &#039;&#039;WEB&#039;&#039; installable dans le cas d&#039;une nécessité d&#039;accès distant. Il est léger et très simple à mettre en œuvre dans un usage serveur.&lt;br /&gt;
&lt;br /&gt;
=Usage serveur=&lt;br /&gt;
Ce logiciel peut être utilisé dans le cadre d&#039;un service de téléchargement &#039;&#039;Bittorrent&#039;&#039; hébergé sur un serveur ([https://fr.wikipedia.org/wiki/Seedbox seedbox]). Dans ce cas, une interface graphique n&#039;est pas requise et il est souhaitable de passer par &#039;&#039;HTTP&#039;&#039; pour l&#039;interaction avec lui.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
Installation via le paquet disponible dans la distribution &#039;&#039;GNU/Linux Debian 11&#039;&#039;&lt;br /&gt;
 apt install --no-install-recommends qbittorrent-nox&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;un utilisateur pour lancer le service&lt;br /&gt;
 adduser --system --group qbittorrent-nox&lt;br /&gt;
&lt;br /&gt;
Création du service&lt;br /&gt;
 mkdir -p /usr/local/etc/systemd/system/&lt;br /&gt;
 vim /usr/local/etc/systemd/system/qbittorrent-nox.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
User=qbittorrent-nox&lt;br /&gt;
Group=qbittorrent-nox&lt;br /&gt;
UMask=007&lt;br /&gt;
ExecStart=/usr/bin/qbittorrent-nox -d --webui-port=8080&lt;br /&gt;
Restart=always&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/local/etc/systemd/system/qbittorrent-nox.service /etc/systemd/system/&lt;br /&gt;
&lt;br /&gt;
Activation du service et démarrage du programme&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
 systemctl enable qbittorrent-nox&lt;br /&gt;
 systemctl start qbittorrent-nox&lt;br /&gt;
 systemctl status qbittorrent-nox&lt;br /&gt;
&lt;br /&gt;
Une chiée de port a par la suite été ouvert et c&#039;est par le &#039;&#039;TCP/8080&#039;&#039; que l&#039;on prendre en main l&#039;outil.&lt;br /&gt;
&lt;br /&gt;
{{info|L&#039;identifiant par défaut est &amp;lt;code&amp;gt;admin&amp;lt;/code&amp;gt; avec comme mot de passe &amp;lt;code&amp;gt;adminadmin&amp;lt;/code&amp;gt;. Il est bien évidemment destiné à être changé par vos soins.}}&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://www.linuxcapable.com/install-qbittorrent-on-debian-linux/&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
La configuration du logiciel se trouve dans le fichier &amp;lt;code&amp;gt;~/.config/qBittorrent/qBittorrent.conf&amp;lt;/code&amp;gt;. En l&#039;absence de modification de celle-ci, ce dernier est presque vide et les valeurs par défaut sont chargées de façon transparente au démarrage. Ce n&#039;est qu&#039;à la modification d&#039;une option qu&#039;il se remplira des valeurs de chaque onglet des paramètres.&lt;br /&gt;
&lt;br /&gt;
==Journalisation==&lt;br /&gt;
Vous pouvez [https://github.com/qbittorrent/qBittorrent/issues/6033#issuecomment-266416355 journaliser] les événements du logiciel avec les paramètres suivants :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Application]&lt;br /&gt;
FileLogger\Enabled=true&lt;br /&gt;
FileLogger\Age=6&lt;br /&gt;
FileLogger\DeleteOld=true&lt;br /&gt;
FileLogger\Backup=true&lt;br /&gt;
FileLogger\AgeType=1&lt;br /&gt;
FileLogger\Path=/chemin/du/fichier/de/journal/&lt;br /&gt;
FileLogger\MaxSize=10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Où :&lt;br /&gt;
* &#039;&#039;&#039;FileLogger\Backup=&#039;&#039;&#039; : sauvegarde du fichier de journal lorsque celui-ci est plus grand que la limite définie dans &amp;lt;code&amp;gt;FileLogger\MaxSize= x&amp;lt;/code&amp;gt; (mégaoctet)&lt;br /&gt;
* &#039;&#039;&#039;FileLogger\DeleteOld=&#039;&#039;&#039; : supprime le journal (roulement) après la valeur de &amp;lt;code&amp;gt;FileLogger\Age= 6&amp;lt;/code&amp;gt; où  &amp;lt;code&amp;gt;FileLogger\AgeType= x&amp;lt;/code&amp;gt; dont &#039;&#039;x&#039;&#039; peut être &#039;&#039;0=jours&#039;&#039;; &#039;&#039;1=mois&#039;&#039;; &#039;&#039;2=années&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Script post téléchargement==&lt;br /&gt;
Il est possible de faire exécuter un script par le démon à la fin d&#039;un téléchargement. Ceci peut être utile pour, par exemple, [https://github.com/qbittorrent/qBittorrent/issues/8016 permettre la lecture] des fichiers par un autre compte de service les rendant disponible via un protocole de partage sur réseau &#039;&#039;TCP/IP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt; /usr/local/bin/post-fini.sh&lt;br /&gt;
#/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Changement des permissions par défaut des fichiers téléchargés&lt;br /&gt;
find &amp;quot;$1&amp;quot; -type f -exec chmod 644 -- {} +&lt;br /&gt;
find &amp;quot;$1&amp;quot; -type d -exec chmod 755 -- {} +&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod +x /usr/local/bin/post-fini.sh&lt;br /&gt;
&lt;br /&gt;
Ce fichier exécutable est alors à spécifier dans la configuration de &#039;&#039;Qbittorrent&#039;&#039; au menu &amp;lt;code&amp;gt;Option&amp;lt;/code&amp;gt; (icône de roue crantée) &amp;gt; &amp;lt;code&amp;gt;Téléchargements&amp;lt;/code&amp;gt; &amp;gt; &amp;lt;code&amp;gt;Lancer un programme externe à la fin d&#039;un téléchargement&amp;lt;/code&amp;gt; &amp;gt; entrer dans le champ de texte &amp;lt;code&amp;gt;/bin/bash /usr/local/bin/post-fini.sh &amp;quot;%F&amp;quot;&amp;lt;/code&amp;gt; et sauvegarder.&lt;br /&gt;
&lt;br /&gt;
Cette opération a pour effet d&#039;ajouter la section suivante à la configuration du démon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[AutoRun]&lt;br /&gt;
enabled=true&lt;br /&gt;
program=/bin/bash /usr/local/bin/post-fini.sh \&amp;quot;%F\&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Compilation_de_paquets_de_la_distribution_debian&amp;diff=1554</id>
		<title>Compilation de paquets de la distribution debian</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Compilation_de_paquets_de_la_distribution_debian&amp;diff=1554"/>
		<updated>2025-02-15T14:18:02Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:compilation  Sous &amp;#039;&amp;#039;GNU/Linux Debian&amp;#039;&amp;#039;, il est possible de compiler et empaqueter un programme via les sources mises à disposition par ses [https://debian-handbook.info/browse/fr-FR/stable/sect.becoming-package-maintainer.html mainteneurs] dans les dépôts APT officiels. Cette méthode permet de générer un fichier &amp;#039;&amp;#039;.deb&amp;#039;&amp;#039; utilisant les mêmes options que le paquet proposé de base dans la distribution (ceci s&amp;#039;inscrit dans la d... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:compilation]]&lt;br /&gt;
&lt;br /&gt;
Sous &#039;&#039;GNU/Linux Debian&#039;&#039;, il est possible de compiler et empaqueter un programme via les sources mises à disposition par ses [https://debian-handbook.info/browse/fr-FR/stable/sect.becoming-package-maintainer.html mainteneurs] dans les dépôts [[:Category:apt|APT]] officiels. Cette méthode permet de générer un fichier &#039;&#039;.deb&#039;&#039; utilisant les mêmes options que le paquet proposé de base dans la distribution (ceci s&#039;inscrit dans la démarche [https://wiki.debian.org/ReproducibleBuilds ReproducibleBuilds] du projet). Il est alors possible d&#039;y apporter ses propres modifications, appliquer des patchs ou utiliser des options de compilations différentes avant génération du paquet.&lt;br /&gt;
&lt;br /&gt;
De plus et contrairement à la méthode traditionnelle du &amp;lt;code&amp;gt;./configure&amp;lt;/code&amp;gt; ; &amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt; puis &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;, le procédé présenté dans cette documentation rend trivial l&#039;installation des dépendances permettant la compilation complète du code sans devoir le faire, fort péniblement, de façon empirique et après s&#039;être tapé une foultitude d&#039;erreurs par itération de compilation (quand on y arrive, ce qui n&#039;est même pas joué d&#039;avance...). Enfin, la phase de compilation et d&#039;empaquetage se réalise d&#039;elle même et sans erreur (comme c&#039;est agréable). Il en résulte un certain nombre de fichiers &#039;&#039;.deb&#039;&#039; permettant l&#039;installation du programme.&lt;br /&gt;
&lt;br /&gt;
Ajout de la branche contenant les sources des paquets &#039;&#039;Debian Bookworm&#039;&#039; à la [[Sources.list|liste d&#039;APT]]&lt;br /&gt;
 echo &amp;quot;deb-src http://ftp2.fr.debian.org/debian bookworm main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
Mise à jour du catalogue &#039;&#039;APT&#039;&#039;&lt;br /&gt;
 apt update&lt;br /&gt;
&lt;br /&gt;
Téléchargement des dépendances nécessaires à la compilation du binaire et à la construction de son paquet ([[Ffmpeg|ffmpeg]] pour l&#039;exemple)&lt;br /&gt;
 apt build-dep ffmpeg&lt;br /&gt;
&lt;br /&gt;
Création du répertoire de travail&lt;br /&gt;
 mkdir /usr/local/src/ffmpeg &amp;amp;&amp;amp; cd /usr/local/src/ffmpeg&lt;br /&gt;
&lt;br /&gt;
Téléchargement des fichiers sources et de construction&lt;br /&gt;
 apt source ffmpeg&lt;br /&gt;
&lt;br /&gt;
Déplacement dans le répertoire des sources du programme&lt;br /&gt;
 cd ffmpeg-5.1.6&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il est possible de modifier les options de compilation dans le script du mainteneur pour la construction du paquet &amp;lt;code&amp;gt;./debian/rules&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Compilation et empaquetage du programme&lt;br /&gt;
 dpkg-buildpackage -us -uc -b&lt;br /&gt;
&lt;br /&gt;
Installation sur la machine cible. Les dépendances du paquet seront téléchargées sur le dépôt distant ou devront elles-aussi être compilés puis empaquetées de la même manière&lt;br /&gt;
 apt install ../ffmpeg_5.1.6-0+deb12u1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
Test du programme&lt;br /&gt;
 ffmpeg -protocols&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* https://www.debian.org/doc/&lt;br /&gt;
* https://www.debian.org/doc/manuals/maint-guide/&lt;br /&gt;
** dont : https://www.debian.org/doc/manuals/maint-guide/build.fr.html&lt;br /&gt;
* hiérarchie des commandes : https://www.debian.org/doc/manuals/maint-guide/build.fr.html#hierarchy&lt;br /&gt;
* https://manpages.debian.org/unstable/dpkg-dev/dpkg-buildpackage.1.en.html&lt;br /&gt;
* https://manpages.debian.org/unstable/debhelper/dh_auto_configure.1.en.html&lt;br /&gt;
* https://wiki.debian.org/ReproducibleBuilds&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Compilation_linux&amp;diff=1553</id>
		<title>Compilation linux</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Compilation_linux&amp;diff=1553"/>
		<updated>2025-02-15T13:23:18Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la catégorie &amp;quot;Compilation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:noyau_linux]]&lt;br /&gt;
[[Category:debian]]&lt;br /&gt;
[[Category:compilation]]&lt;br /&gt;
Ce document traite de la compilation d&#039;un noyau Linux.&lt;br /&gt;
{{attention|La compilation prend plusieurs heures (environs 2h30 sur mon core i7 960). Ne commencez pas l&#039;opération si vous allez vous coucher et que votre PC fait un bruit d&#039;avion à coté de votre lit (ça sent le vécu)...}}&lt;br /&gt;
La compilation d&#039;un noyau se fait en passant des paramètres sous forme de variables dans un fichier de configuration nommé &#039;&#039;.config&#039;&#039;.&lt;br /&gt;
=Compilation Linux Debian=&lt;br /&gt;
==Depuis une configuration existante==&lt;br /&gt;
===Préparation===&lt;br /&gt;
&#039;&#039;&#039;Téléchargement des sources de Linux&#039;&#039;&#039;&lt;br /&gt;
 wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.13.tar.xz&lt;br /&gt;
&#039;&#039;Note : Vous trouverez les sources de la version du noyau que vous désirez sur le site [http://kernel.org officiel du noyau].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Décompression des sources&#039;&#039;&#039;&lt;br /&gt;
 tar xf linux-4.13.tar.xz &amp;amp;&amp;amp; cd linux-4.13/&lt;br /&gt;
&#039;&#039;&#039;Installation des dépendances&#039;&#039;&#039;&lt;br /&gt;
 apt install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential&lt;br /&gt;
&#039;&#039;Note : le paquet kernel-package n&#039;est pas disponible dans Stretch. Utilisez une autre branche pour l&#039;installation&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nettoyage de l&#039;archive&#039;&#039;&#039;&lt;br /&gt;
 make clean &amp;amp;&amp;amp; make mrproper&lt;br /&gt;
Explications:&lt;br /&gt;
* &#039;&#039;&#039;make clean&#039;&#039;&#039; : Supprime la plupart des fichiers générés (nécessaires à la compilation mais non utilises à l&#039;issue) mais garde la config&#039;.&lt;br /&gt;
* &#039;&#039;&#039;make mproper&#039;&#039;&#039; : Supprime tous les fichiers générés précédemment ainsi que la config et des fichiers de sauvegarde (purge totalement l&#039;archive - mproper = Mr Propre).&lt;br /&gt;
===Configuration===&lt;br /&gt;
&#039;&#039;&#039;Importation des paramètres du noyau actuel&#039;&#039;&#039;&lt;br /&gt;
 cp /boot/config-`uname -r` .config&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prise en compte du fichier de configuration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note : Cette partie est peu être inutile, vérifier&#039;&#039;.&lt;br /&gt;
 make menuconfig&lt;br /&gt;
Allez sur &#039;&#039;Load&#039;&#039; et importer le &#039;&#039;.config&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nettoyer les fichiers de compilation&#039;&#039;&#039;&lt;br /&gt;
 make-kpkg clean&lt;br /&gt;
&lt;br /&gt;
===Compilation===&lt;br /&gt;
&#039;&#039;&#039;Compiler le noyau&#039;&#039;&#039;&lt;br /&gt;
 fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers&lt;br /&gt;
{{info|Cette opération va générer deux fichier &#039;&#039;.deb&#039;&#039;:&lt;br /&gt;
* linux-headers-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb&lt;br /&gt;
* linux-image-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb&lt;br /&gt;
Leur installation avec un &#039;&#039;dpkg -i&#039;&#039; créera le fichier &#039;&#039;/boot/initrd.img-4.13.0-custom&#039;&#039; et &#039;&#039;/boot/vmlinuz-4.13.0-custom&#039;&#039;.}}&lt;br /&gt;
===Installation===&lt;br /&gt;
&#039;&#039;&#039;Depuis une installation sur une mémoire morte&#039;&#039;&#039;&lt;br /&gt;
 dpkg -i linux-headers-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb linux-image-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb&lt;br /&gt;
&#039;&#039;Note : les fichiers &#039;&#039;&#039;/boot/initrd.img-4.13.0-custom&#039;&#039;&#039; et &#039;&#039;&#039;/boot/vmlinuz-4.13.0-custom&#039;&#039;&#039; sont désormais présents dans &#039;&#039;&#039;/boot&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Depuis un squashfs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
L&#039;installation de ces paquets utilise l&#039;emplacement &#039;&#039;/lib/live/mount/medium/live&#039;&#039; qui ne contient pas d&#039;espace libre (il y a donc une erreur à l&#039;installation). Pour combler cette lacune, exécuter cette commande:&lt;br /&gt;
&lt;br /&gt;
 mount -t tmpfs -o rw,relatime,size=1G tmpfs /lib/live/mount/medium/ &amp;amp;&amp;amp; mkdir /lib/live/mount/medium/live&lt;br /&gt;
&lt;br /&gt;
On peut désormais installer les paquets sans encombre et récupérer leur résultat dans &#039;&#039;&#039;/boot&#039;&#039;&#039; pour un [[Serveur PXE|amorçage PXE]]&lt;br /&gt;
 dpkg -i linux-headers-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb linux-image-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* Vidéo &#039;&#039;[https://www.youtube.com/watch?v=KRCfkahi2HQ How To Compile a Kernel on Debian Linux]&#039;&#039;&lt;br /&gt;
* https://linuxfr.org/users/gogo/journaux/kernel-make-mrproper-et-make-clean&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Compilation&amp;diff=1552</id>
		<title>Catégorie:Compilation</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Compilation&amp;diff=1552"/>
		<updated>2025-02-15T13:10:00Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:linux En informatique, la [https://doc.ubuntu-fr.org/tutoriel/compilation compilation] (d&amp;#039;un logiciel ou d&amp;#039;une bibliothèque) est une procédure par laquelle un code source (format compréhensible par un humain, type ASCII) est transformé en code binaire, un langage compréhensible par un ordinateur, dans le but d&amp;#039;être exécuté. Un logiciel est alors compilé afin de pouvoir être lancé par l&amp;#039;utilisateur.  Sous &amp;#039;&amp;#039;GNU/Linux&amp;#039;&amp;#039;, ce procéder permet... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
En informatique, la [https://doc.ubuntu-fr.org/tutoriel/compilation compilation] (d&#039;un logiciel ou d&#039;une bibliothèque) est une procédure par laquelle un code source (format compréhensible par un humain, type ASCII) est transformé en code binaire, un langage compréhensible par un ordinateur, dans le but d&#039;être exécuté. Un logiciel est alors compilé afin de pouvoir être lancé par l&#039;utilisateur.&lt;br /&gt;
&lt;br /&gt;
Sous &#039;&#039;GNU/Linux&#039;&#039;, ce procéder permet de construire des composant exploitable par le système en fonction de l&#039;architecture processeur ciblée. Le code source de l&#039;écrasante majorité de ceux-ci étant disponible et utilisable sous les termes d&#039;une [https://fr.wikipedia.org/wiki/Licence_libre licence d&#039;exploitation libre], il n&#039;est pas rare de recourir à cette pratique pour tester, patcher ou contribuer à un projet à destination de cet environnement.&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Ffmpeg&amp;diff=1551</id>
		<title>Ffmpeg</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Ffmpeg&amp;diff=1551"/>
		<updated>2025-02-13T18:42:49Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : /* Convertir un fichier */ Ajout d&amp;#039;une explication pour gérer une erreur rencontrée lorsqu&amp;#039;un conteneur média contient un flux non compatible pour la conversion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
[https://fr.wikipedia.org/wiki/FFmpeg FFmpeg] est une collection de logiciels libres destinés au traitement de flux audio ou vidéo (enregistrement, lecture ou conversion d&#039;un format à un autre). Cette bibliothèque est utilisée par de nombreux autres logiciels ou services comme &#039;&#039;VLC&#039;&#039;, &#039;&#039;iTunes&#039;&#039; ou &#039;&#039;YouTube&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Développé sur &#039;&#039;GNU/Linux&#039;&#039;, &#039;&#039;FFmpeg&#039;&#039; peut être compilé sur la plupart des systèmes d&#039;exploitation, y compris [[:Category:Windows|Windows]]. Le projet est distribué sous licence libre, [https://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_GNU GPL] 2+ ou [https://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_limit%C3%A9e_GNU LGPL] 2.1+ en fonction des options de compilation du projet.&lt;br /&gt;
&lt;br /&gt;
=Extraire le son=&lt;br /&gt;
Voici comment [http://www.loopsbeats.com/convert/extract-audio-with-ffmpeg.html extraire le son] d&#039;une vidéo &#039;&#039;mp4&#039;&#039; en &#039;&#039;mp3&#039;&#039; :&lt;br /&gt;
 ffmpeg -i toto.mp4 -vn -ar 44100 -ac 2 -ab 192 -f mp3 toto.mp3&lt;br /&gt;
&lt;br /&gt;
=Extraire la jaquette=&lt;br /&gt;
Les fichiers audios embarquent souvent une image (communément la jaquette de l&#039;album). Voici comment la [https://unix.stackexchange.com/questions/41287/how-to-extract-album-cover-image-from-mp3-file récupérer] :&lt;br /&gt;
 ffmpeg -i fichier.mp3 -an -c:v copy fichier.jpg&lt;br /&gt;
&lt;br /&gt;
=Couper un extrait=&lt;br /&gt;
Il est possible de [https://superuser.com/questions/138331/using-ffmpeg-to-cut-up-video#704118 découper un morceau] de fichier avec ceci :&lt;br /&gt;
 ffmpeg -ss 00:00:53 -i Pas\ de\ manières-5hjNP5dNNs4.m4a -t 00:00:11 -c copy Ta_cherie.m4a&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
* &#039;&#039;&#039;-ss&#039;&#039;&#039; : début de la découpe&lt;br /&gt;
* &#039;&#039;&#039;-i&#039;&#039;&#039; : fichier source&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; : temps à garder à partir de &#039;&#039;&#039;-ss&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; : action à effectuer&lt;br /&gt;
&lt;br /&gt;
Il est aussi possible de préciser le nombre de trames à conserver à partir d&#039;un temps donnée (plus précis) :&lt;br /&gt;
 ffmpeg -y -ss 00:01:28 -i Toto.mp4 -c:v libx264 -c:a aac -frames:v 100 /tmp/titi.mp4&lt;br /&gt;
&lt;br /&gt;
Paramètres différents :&lt;br /&gt;
* &#039;&#039;&#039;-c:v libx264&#039;&#039;&#039; : codec vidéo de transcodage (facultatif)&lt;br /&gt;
* &#039;&#039;&#039;-c:a aac&#039;&#039;&#039; : codec audio de transcodage (facultatif)&lt;br /&gt;
* &#039;&#039;&#039;-frames:v 100&#039;&#039;&#039; : garder 100 trames (le &amp;quot;v&amp;quot; peut être remplacé par un &amp;quot;a&amp;quot; en cas de fichier uniquement audio)&lt;br /&gt;
&lt;br /&gt;
Dans le cas d&#039;une vidéo comportant [https://stackoverflow.com/questions/60445661/ffmpeg-how-do-i-choose-the-correct-audio-track plusieurs] pistes audios, il est possible de sélectionner la désirée de la manière suivante :&lt;br /&gt;
 ffmpeg -y -ss 00:27:26 -i Toto.mp4 -c:v libx264 -c:a aac -frames:v 530 -map 0:v:0 -map 0:a:2 /tmp/titi.mp4.mp4&lt;br /&gt;
&lt;br /&gt;
Paramètres différents :&lt;br /&gt;
* &#039;&#039;&#039;-map 0:v:0&#039;&#039;&#039; : première piste vidéo&lt;br /&gt;
* &#039;&#039;&#039;-map 0:a:2&#039;&#039;&#039; : troisième piste audio&lt;br /&gt;
&lt;br /&gt;
=Convertir un fichier=&lt;br /&gt;
Pour [https://fr.wikihow.com/utiliser-FFmpeg convertir un fichier] dans un autre format :&lt;br /&gt;
 ffmpeg -i Ni_flic_ni_pd.ogg Ni_flic_ni_pd.mp3&lt;br /&gt;
&lt;br /&gt;
L&#039;outil détecte automatiquement le format du fichier voulu en lisant l&#039;extension de destination.&lt;br /&gt;
&lt;br /&gt;
Il peut arriver qu&#039;une [https://stackoverflow.com/questions/57541354/could-not-find-tag-for-codec-h264-in-stream-0-mp4 erreur] similaire à &amp;lt;code&amp;gt;Could not find tag for codec h264 in stream #1&amp;lt;/code&amp;gt; survienne sur certains fichiers. C&#039;est le cas par exemple d&#039;un son au format &amp;lt;code&amp;gt;mp3&amp;lt;/code&amp;gt; contenant une jaquette au format &amp;lt;code&amp;gt;jpeg&amp;lt;/code&amp;gt; (ce qui n&#039;est pas toujours le cas et explique l&#039;apparition apparemment aléatoire de ce problème en fonction du fichier). Le &amp;lt;code&amp;gt;#1&amp;lt;/code&amp;gt; indique que le &amp;quot;flux&amp;quot; numéro 1 (le comptage commence à 0 donc il s&#039;agit du deuxième), ici une image &#039;&#039;jpeg&#039;&#039;, ne peux être convertie dans le format de destination (cela m&#039;arrive souvent lors de la conversion d&#039;un &#039;&#039;mp3&#039;&#039; en &#039;&#039;m4a&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Pour corriger cela, il faut tout d&#039;abord identifier le flux que vous voulez convertir via la commande suivante (le retour indiquera les flux présents dans le conteneur sous forme de sections numérotées précédées d&#039;un croisillon)&lt;br /&gt;
 ffmpeg -i Ten_perds_ton_latin.mp3&lt;br /&gt;
&lt;br /&gt;
Pour, une fois identifié, venir sélectionner spécifiquement ce (ou ces, en le spécifiant plusieurs fois) flux via le paramètre &amp;lt;code&amp;gt;-map&amp;lt;/code&amp;gt; suivit de son numéro (j&#039;ai ajouté des paramètres pour la conversion en &#039;&#039;aac&#039;&#039; pour l&#039;exemple)&lt;br /&gt;
 ffmpeg -y -i Ten_perds_ton_latin.mp3 -map 0:0 -c:a aac -b:a 128k Ten_perds_ton_latin.m4a&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;ajouter d&#039;autres paramètres afin de préciser des [https://trac.ffmpeg.org/wiki/Encode/H.264 caractéristiques d&#039;encodage]. [https://emirchouchane.com/h264-ffmpeg/ Par exemple], pour une conversion vidéo en &#039;&#039;h264&#039;&#039; :&lt;br /&gt;
 ffmpeg -i vidéo.m4v -c:v libx264 -crf 23 vidéo.mp4&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
* &#039;&#039;&#039;-c:v libx264&#039;&#039;&#039; : sélection du codec (&#039;&#039;-c&#039;&#039;) vidéo (&#039;&#039;:v&#039;&#039;) h264 (&#039;&#039;libx264&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;-crf 23&#039;&#039;&#039; : facteur de taux constant (&#039;&#039;Constant Rate Factor&#039;&#039;) à 23. Permet de définir le débit binaire de la vidéo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://{{SERVERNAME}}/fichiers/multim%c3%a9dia/conversion/ffmpeg/%c3%89chelle_Constant_Rate_Factor.svg&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre exemple avec une conversion en [https://trac.ffmpeg.org/wiki/Encode/H.265 h265] :&lt;br /&gt;
 ffmpeg -i vidéo.mp4 -c:v libx265 -crf 26 -preset fast -c:a eac3 -b:a 640k /tmp/vidéo.mp4&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;-c:v libx265&#039;&#039;&#039; : codec vidéo en &#039;&#039;h265&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;-preset fast&#039;&#039;&#039; : vitesse d&#039;encodage et profile de compression (énumérés [https://trac.ffmpeg.org/wiki/Encode/H.265#ConstantRateFactorCRF ici])&lt;br /&gt;
* &#039;&#039;&#039;-c:a eac3&#039;&#039;&#039; : codec audio en &#039;&#039;eac3&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;-b:a 640k&#039;&#039;&#039; : débit binaire du flux audio&lt;br /&gt;
&lt;br /&gt;
=Redimensionner une vidéo=&lt;br /&gt;
Outre le codec à utiliser et le &#039;&#039;CRF&#039;&#039; à modifier, il est possible d&#039;alléger une vidéo en réduisant ses dimensions. Les différentes techniques combinées peuvent permettre d&#039;arriver à envoyer péniblement une vidéo par [https://fr.wikipedia.org/wiki/Multimedia_Messaging_Service MMS]...&lt;br /&gt;
 ffmpeg -y -i /tmp/a.mp4 -crf 33 -vf &amp;quot;scale=iw/2:ih/2&amp;quot; /tmp/b.mp4&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
* &#039;&#039;&#039;-y&#039;&#039;&#039; : écrase la destination sans demander de confirmation&lt;br /&gt;
* &#039;&#039;&#039;-i&#039;&#039;&#039; : fichier source&lt;br /&gt;
* &#039;&#039;&#039;-crf 33&#039;&#039;&#039; : forte compression (destructrice) de la vidéo&lt;br /&gt;
* &#039;&#039;&#039;-vf &amp;quot;scale=iw/2:ih/2&amp;quot;&#039;&#039;&#039; : réduction par deux des dimensions de la vidéo&lt;br /&gt;
&lt;br /&gt;
=Rotation d&#039;une vidéo=&lt;br /&gt;
Il n&#039;est pas rare de tomber sur une vidéo capturée via un téléphone en mode portrait du fait d&#039;un utilisateur ayant commencé la prise de vue dans cette orientation et s’étant rendu compte, après coup, qu&#039;il fallait tourner la caméra pour avoir un bon rendu... Il est possible de corriger cela via une [https://www.baeldung.com/linux/ffmpeg-rotate-video rotation] avec le paramètre &amp;lt;code&amp;gt;transpose=0&amp;lt;/code&amp;gt; où &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; correspond à l&#039;orientation à appliquer d&#039;après la liste suivante :&lt;br /&gt;
* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; : sens inverse des aiguilles d&#039;une montre et inversion verticale (par défaut)&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; : sens des aiguilles d&#039;une montre&lt;br /&gt;
* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; : sens inverse des aiguilles d&#039;une montre&lt;br /&gt;
* &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; : sens des aiguilles d&#039;une montre et inversion verticale&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
 ffmpeg -i VID_20240415_150506.mp4 -vf &amp;quot;transpose=2&amp;quot; VID_20240415_150506_r2.mp4&lt;br /&gt;
&lt;br /&gt;
=Fusionner une bande vidéo et une bande son=&lt;br /&gt;
Il est possible de [https://qastack.fr/superuser/277642/how-to-merge-audio-and-video-file-in-ffmpeg regrouper] dans un même fichier multimédia ([https://fr.wikipedia.org/wiki/Format_conteneur conteneur]) une bande vidéo et une bande son. Un cas typique est le téléchargement d&#039;une vidéo sur le site [https://crowdbunker.com crowdbunker.com] via les fichiers &amp;lt;code&amp;gt;.m3u&amp;lt;/code&amp;gt; capturés dans le trafic réseau. La vidéo est découplé du son (deux téléchargements séparés) et c&#039;est le lecteur vidéo &#039;&#039;WEB&#039;&#039; qui se charge de lire les deux en même temps. Pour fusionner les deux après téléchargement en local, la commande suivante peut être utilisée :&lt;br /&gt;
 ffmpeg -i Vidéo_source.mp4 -i Audio_source.mp4 -c:v copy -c:a aac -strict experimental Vidéo_et_audio_destination.mp4&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Astuces_-_systemd&amp;diff=1550</id>
		<title>Astuces - systemd</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Astuces_-_systemd&amp;diff=1550"/>
		<updated>2025-01-04T14:59:16Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Systèmes de fichiers&amp;quot; + remplacement des balises &amp;quot;source&amp;quot; obsolètes + correction d&amp;#039;une faute&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:systemd]]&lt;br /&gt;
&lt;br /&gt;
=Redémarrer dans l&#039;UEFI=&lt;br /&gt;
Il est possible de redémarrer la machine directement dans le menu de configuration de l{{&#039;}}&#039;&#039;UEFI&#039;&#039; via la commande suivante :&lt;br /&gt;
 systemctl reboot --firmware-setup&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://superuser.com/questions/519718/linux-on-uefi-how-to-reboot-to-the-uefi-setup-screen-like-windows-8-can?noredirect=1&lt;br /&gt;
&lt;br /&gt;
=Modification d&#039;un service=&lt;br /&gt;
==Temps d&#039;attente spécifique==&lt;br /&gt;
Un truck ultra pète couille avec &#039;&#039;Systemd&#039;&#039; c&#039;est le temps définit à l&#039;attente de finalisation d&#039;une tâche. Un exemple que vous avez sûrement déjà rencontré : Avec &#039;&#039;Ubuntu&#039;&#039; (vu dernièrement avec la &#039;&#039;16.04&#039;&#039;) si vous allumez la machine sans connecter le câble réseau vous avez l&#039;obligation d&#039;attendre au démarrage 5min03 avant de pouvoir utiliser la machine !!! Mais pourquoi avoir développé ça bon sang ? Ils ne testent pas leur système ? Ils ne se rendent pas compte que c&#039;est inutilisable ? On va régler ça avec la bidouille suivante qui consiste à passer de 5min d&#039;attente à 5 secondes, c&#039;est déjà plus supportable.&lt;br /&gt;
&lt;br /&gt;
 vim /etc/systemd/system/network-online.target.wants/networking.service&lt;br /&gt;
&lt;br /&gt;
Changez la valeur &amp;lt;code&amp;gt;TimeoutStartSec=5min&amp;lt;/code&amp;gt; en :&lt;br /&gt;
&lt;br /&gt;
 TimeoutStartSec=5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: l&#039;unité par défaut est la seconde.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Rechargez la configuration de &#039;&#039;Systemd&#039;&#039; (ou redémarrez le système)&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==Temps d&#039;attente générique==&lt;br /&gt;
Il est possible d’interagir avec le temps d&#039;attente de démarrage et d&#039;arrêt par défaut d&#039;un service (au cas où celui-ci n&#039;est pas renseigné dans son fichier) en spécifiant les valeurs suivantes dans la configuration globale &amp;lt;code&amp;gt;/etc/systemd/system.conf&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
 DefaultTimeoutStartSec=5s&lt;br /&gt;
 DefaultTimeoutStopSec=5s&lt;br /&gt;
&lt;br /&gt;
Rechargez la configuration de &#039;&#039;Systemd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==Gestionnaire utilisateur==&lt;br /&gt;
Un service mystérieux ralenti considérablement l&#039;extinction de certain &#039;&#039;Debian Stretch&#039;&#039; avec comme message &#039;&#039;&#039;a job is running for user manager debian&#039;&#039;&#039;. Encore un truck à la con. Il convient d&#039;installer (pour je ne sais quelle raison) le service &amp;lt;code&amp;gt;watchdog&amp;lt;/code&amp;gt; pour régler ça (pourquoi c&#039;est pas installé de base si ça permet de régler le problème ?).&lt;br /&gt;
&lt;br /&gt;
 apt install watchdog&lt;br /&gt;
 systemctl enable watchdog&lt;br /&gt;
 systemctl start watchdog&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://ubuntuforums.org/printthread.php?t=2323253&amp;amp;pp=10&amp;amp;page=1&lt;br /&gt;
* https://unix.stackexchange.com/questions/230986/a-stop-job-is-running-on-shutdown#284488&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;un script de démarrage=&lt;br /&gt;
==Simple==&lt;br /&gt;
Cette section va expliquer comment faire un service &#039;&#039;Systemd&#039;&#039; qui exécute un script au démarrage du système.&lt;br /&gt;
&lt;br /&gt;
{{info|Ce logiciel étant un peu con, on ne peut pas simplement lui demander d&#039;effectuer une commande, il faut obligatoirement passer par un script, même pour une seul et simple commande...}}&lt;br /&gt;
&lt;br /&gt;
===Création du script du service===&lt;br /&gt;
Pour l&#039;exemple, je vais ajouter une règle [[Iptables]] pour faire du &#039;&#039;NAT&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 vim /usr/bin/nat.sh&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
iptables -F -t nat&lt;br /&gt;
iptables -t nat -A POSTROUTING -s 173.16.0.0/24 -o eth0 -j MASQUERADE&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Donner les droits d’exécution&lt;br /&gt;
&lt;br /&gt;
 chmod +x /usr/bin/nat.sh&lt;br /&gt;
&lt;br /&gt;
===Création du service Systemd===&lt;br /&gt;
&lt;br /&gt;
 vim /etc/systemd/system/nat.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=/usr/bin/nat.sh&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Recharger la configuration de &#039;&#039;Systemd&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
Activer le service au démarrage&lt;br /&gt;
&lt;br /&gt;
 systemctl enable nat.service&lt;br /&gt;
&lt;br /&gt;
Démarrer le service (ceci a pour effet de lancer le script)&lt;br /&gt;
&lt;br /&gt;
 systemctl start nat.service&lt;br /&gt;
&lt;br /&gt;
Désactiver le service au démarrage&lt;br /&gt;
&lt;br /&gt;
 systemctl disable nat.service&lt;br /&gt;
&lt;br /&gt;
===Source de la section===&lt;br /&gt;
* https://linuxconfig.org/how-to-automatically-execute-shell-script-at-startup-boot-on-systemd-linux&lt;br /&gt;
&lt;br /&gt;
==Invite au démarrage==&lt;br /&gt;
Cette section va expliquer comment faire un écran posant des questions et exécutant des actions en fonction des réponses au démarrage de la machine (utile si vous faite votre propre distribution &#039;&#039;Linux&#039;&#039;).&lt;br /&gt;
Je m&#039;en suis servis afin de modéliser un système au démarrage d&#039;un &#039;&#039;PXE squashfs&#039;&#039; en fonction de l&#039;usage prévu par la personne qui démarre.&lt;br /&gt;
&lt;br /&gt;
===Création du script du service===&lt;br /&gt;
&lt;br /&gt;
 vim /usr/bin/modelisation&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
# Ce script permet de modéliser une machine démarrant en PXE sur un squashfs afin de gagner du temps lors de phases de tests. Il était prévu de le charger via le réseau mais systemd oblige, je n&#039;ai pas eu le choix de le mettre local (quelle merde ce truck...)&lt;br /&gt;
 &lt;br /&gt;
# On passe sur le TTY2&lt;br /&gt;
chvt 2&lt;br /&gt;
&lt;br /&gt;
# Définition des variables&lt;br /&gt;
noyaux=/boot/&lt;br /&gt;
aptupdate=&amp;quot;debconf-apt-progress -- apt update&amp;quot;&lt;br /&gt;
aptinstall=&amp;quot;debconf-apt-progress -- apt install -y&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Création de fichiers vides visant à berner la détection du noyaux des paquets lors de leur installation (nécessaire pour l&#039;installation de certains paquets qui exigent que le noyau soit dans /boot alors que ça n&#039;a aucune importance)&lt;br /&gt;
mkdir $noyaux&lt;br /&gt;
touch $noyaux/vmlinuz-2 $noyaux/initrd.img-2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
dialog --title &amp;quot;Modélisation système&amp;quot; --yesno &amp;quot;Voulez-vous installer un modèle d&#039;utilisation ?&amp;quot; 5 51&lt;br /&gt;
&lt;br /&gt;
if [ $? -eq 0 ]&lt;br /&gt;
then&lt;br /&gt;
	#On passe à l&#039;invite suivante&lt;br /&gt;
	true&lt;br /&gt;
elif [ $? -eq 1 ]&lt;br /&gt;
then&lt;br /&gt;
	#On repasse sur le TTY1&lt;br /&gt;
	chvt 1&lt;br /&gt;
	#On sort du programme&lt;br /&gt;
	exit 0;&lt;br /&gt;
else&lt;br /&gt;
	#On repasse sur le TTY1&lt;br /&gt;
	chvt 1&lt;br /&gt;
	exit 1;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
exec 3&amp;gt;&amp;amp;1;&lt;br /&gt;
choixmodele=$(dialog --menu &amp;quot;Choisir un modèle à installer :&amp;quot; 20 40 3 1 Serveur\ IPSec 2 Serveur\ IPSec\ avec\ wireshark 3 Système\ de\ base 2&amp;gt;&amp;amp;1 1&amp;gt;&amp;amp;3);&lt;br /&gt;
exec 3&amp;gt;&amp;amp;-;&lt;br /&gt;
&lt;br /&gt;
if [ $choixmodele -eq 1 ]&lt;br /&gt;
then&lt;br /&gt;
	echo &amp;quot;wireshark-common wireshark-common/install-setuid boolean true&amp;quot; | debconf-set-selections;&lt;br /&gt;
	$aptinstall strongswan strongswan-pki openvswitch-switch;&lt;br /&gt;
elif [ $choixmodele -eq 2 ]&lt;br /&gt;
then&lt;br /&gt;
	echo &amp;quot;wireshark-common wireshark-common/install-setuid boolean true&amp;quot; | debconf-set-selections;&lt;br /&gt;
	echo &amp;quot;strongswan-starter strongswan/runlevel_changes select&amp;quot; | debconf-set-selections&lt;br /&gt;
	$aptupdate&lt;br /&gt;
	$aptinstall strongswan strongswan-pki openvswitch-switch xorg blackbox wireshark;&lt;br /&gt;
elif [ $choixmodele -eq 3 ]&lt;br /&gt;
then&lt;br /&gt;
	# On repasse sur le TTY1&lt;br /&gt;
	chvt 1&lt;br /&gt;
	exit 0;&lt;br /&gt;
else&lt;br /&gt;
	# On repasse sur le TTY1&lt;br /&gt;
	chvt 1&lt;br /&gt;
	exit 1;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# On repasse sur le TTY1&lt;br /&gt;
chvt 1&lt;br /&gt;
 &lt;br /&gt;
# On sort avec le code 0 (tout est bon)&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Création du service Systemd===&lt;br /&gt;
&lt;br /&gt;
 vim /etc/systemd/system/usage.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Modélisation d&#039;un squashfs&lt;br /&gt;
After=getty@tty2.service&lt;br /&gt;
 &lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/bin/modelisation&lt;br /&gt;
StandardInput=tty&lt;br /&gt;
TTYPath=/dev/tty2&lt;br /&gt;
TTYReset=yes&lt;br /&gt;
TTYVHangup=yes&lt;br /&gt;
 &lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=default.target&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explications : On crée un script [https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type= oneshot] avec pour script de démarrage &#039;&#039;/usr/bin/modélisation&#039;&#039; (les accents ne sont pas pris en charge). On demande à &#039;&#039;Systemd&#039;&#039; d’exécuter ce script dans le &#039;&#039;TTY2&#039;&#039; (on fait ça car sinon le système crache des entrées de journal pendant que l&#039;on répond aux questions) et de nettoyer la console lorsqu&#039;il est terminé.&lt;br /&gt;
&lt;br /&gt;
===Activation du service au démarrage===&lt;br /&gt;
On active le service au démarrage de la machine avec la commande suivante&lt;br /&gt;
&lt;br /&gt;
 systemctl enable modelisation.service&lt;br /&gt;
&lt;br /&gt;
Si vous voulez modifier le script vous devrez recharger la configuration de &#039;&#039;Systemd&#039;&#039; après les changements avec celle-ci&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
Pour supprimer le service au démarrage on utilise cette commande&lt;br /&gt;
&lt;br /&gt;
 systemctl disable modelisation.service&lt;br /&gt;
&lt;br /&gt;
Lors de l&#039;execution du script (pendant qu&#039;il pose des questions), un &amp;lt;code&amp;gt;systemctl status modelisation.service&amp;lt;/code&amp;gt; affichera&lt;br /&gt;
&lt;br /&gt;
 ● modelisation.service - Modélisation d&#039;un squashfs&lt;br /&gt;
    Loaded: loaded (/etc/systemd/system/modelisation.service; enabled; vendor preset: enabled)&lt;br /&gt;
    Active: activating (start) since Wed 2017-08-16 15:19:20 CEST; 6s ago&lt;br /&gt;
  Main PID: 387 (modelisation)&lt;br /&gt;
     Tasks: 2 (limit: 4915)&lt;br /&gt;
    CGroup: /system.slice/modelisation.service&lt;br /&gt;
            ├─387 /bin/bash /usr/bin/modelisation&lt;br /&gt;
            └─394 dialog --title Mod lisation syst me --yesno Voulez-vous installer un mod le d&#039;utilisation ? 5 51&lt;br /&gt;
&lt;br /&gt;
Lorsqu&#039;il sera terminé. la commande affichera&lt;br /&gt;
&lt;br /&gt;
 ● modelisation.service - Modélisation d&#039;un squashfs&lt;br /&gt;
    Loaded: loaded (/etc/systemd/system/modelisation.service; enabled; vendor preset: enabled)&lt;br /&gt;
    Active: inactive (dead)&lt;br /&gt;
 &lt;br /&gt;
 août 16 15:12:32 systemd systemd[1]: Starting Modélisation d&#039;un squashfs...&lt;br /&gt;
 août 16 15:12:34 systemd systemd[1]: Started Modélisation d&#039;un squashfs.&lt;br /&gt;
&lt;br /&gt;
Après un redémarrage, il n&#039;y a plus qu&#039;a répondre à vos propres questions.&lt;br /&gt;
&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* https://mespotesgeek.fr/fr/execution-dun-script-interactif-au-boot-avec-systemd/&lt;br /&gt;
* http://www.linuxjournal.com/article/2807&lt;br /&gt;
* https://askubuntu.com/questions/491509/how-to-get-dialog-box-input-directed-to-a-variable#704616&lt;br /&gt;
&lt;br /&gt;
=Systèmes de fichiers=&lt;br /&gt;
==Montages automatiques==&lt;br /&gt;
&#039;&#039;Systemd&#039;&#039; Gère certains montages lui même sans passer par le fichier &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; (géré lui même par [https://www.freedesktop.org/software/systemd/man/latest/systemd-remount-fs.service.html systemd-remount-fs.service]). C&#039;est le cas notamment de &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt; monté en &#039;&#039;tmpfs&#039;&#039; sur les systèmes récents. Trois méthodes sont décrites pour désactiver ou modifier ces montages lorsque cela est possible :&lt;br /&gt;
# désactiver l&#039;unité de point de montage associée (&amp;lt;code&amp;gt;unité.mount&amp;lt;/code&amp;gt;). Pour &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;, il est possible de faire &amp;lt;code&amp;gt;systemctl mask tmp.mount&amp;lt;/code&amp;gt;&lt;br /&gt;
# monter un système de fichiers différent au dessus du point de montage en utilisant &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;&lt;br /&gt;
# ajouter une entrée dans &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt; pour modifier les propriétés du montage actuel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Concernant le point numéro un, de plus amples informations sur les trois niveaux de désactivation d&#039;un service &#039;&#039;Systemd&#039;&#039; sont consultables [https://0pointer.de/blog/projects/three-levels-of-off.html ici].&lt;br /&gt;
&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems/&lt;br /&gt;
* https://systemd.io/API_FILE_SYSTEMS/&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Kms_-_windows&amp;diff=1549</id>
		<title>Kms - windows</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Kms_-_windows&amp;diff=1549"/>
		<updated>2024-12-23T19:07:03Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout d&amp;#039;un mot manquant + corrections typographiques + ajout d&amp;#039;une mention sur une alternative&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:licences_windows]]&lt;br /&gt;
&lt;br /&gt;
[https://learn.microsoft.com/fr-fr/windows/deployment/volume-activation/volume-activation-windows Key Management Services] (&#039;&#039;KMS&#039;&#039;), est une méthode d&#039;activation de la licence &#039;&#039;Windows&#039;&#039; via un serveur externe. Cette approche est généralement utilisée dans un parc d&#039;entreprise comportant un nombre conséquent de machines afin d&#039;automatiser la gestion de leur activation en volume ([https://learn.microsoft.com/fr-fr/windows-server/get-started/kms-client-activation-keys système d&#039;exploitation] et suite bureautique [https://github.com/MicrosoftDocs/OfficeDocs-DeployOffice/blob/public/office/volume-license-activation/gvlks.md Microsoft Office]).&lt;br /&gt;
&lt;br /&gt;
Ce service fonctionne via le protocole éponyme en échangeant des messages &#039;&#039;Distributed Computing Environment / Remote Procedure Calls&#039;&#039; ([https://en.wikipedia.org/wiki/DCE/RPC DCE/RPC]) sur le port &#039;&#039;TCP/1688&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Intérêt=&lt;br /&gt;
Dans la mesure où les logiciels de &#039;&#039;Microsoft&#039;&#039; nous sont malheureusement imposés dans nos sociétés Occidentales, l&#039;idée de vouloir cracker les licences, ne serais-ce que par principe, est totalement légitime. Il est toutefois important de comprendre que l&#039;exécution d&#039;un crack peut avoir des conséquences en terme de sécurité. En effet, à moins d&#039;un audit poussé par [https://fr.wikipedia.org/wiki/R%C3%A9tro-ing%C3%A9nierie ingénierie inverse] du code machine composant le binaire de crackage, quel élément garanti l’innocuité de cette pratique ?&lt;br /&gt;
&lt;br /&gt;
Le piratage par exécution de code arbitraire sur une machine comporte donc toujours un risque et si nous pouvions avoir une activation de licence, sans le risque associé au lancement d&#039;un crack, nous aurions alors le beur et l&#039;argent du beur. C&#039;est justement ce que cette documentation aborde : l&#039;utilisation de méthodes officielles pour contourner l&#039;activation des systèmes &#039;&#039;Windows&#039;&#039; clients et serveurs ainsi que les suites &#039;&#039;Office&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Prés-requis=&lt;br /&gt;
L&#039;éditeur précise que pour utiliser &#039;&#039;KMS&#039;&#039;, il faut disposer d’un hôte &#039;&#039;KMS&#039;&#039; disponible sur le réseau local (en réalité, il peut être hébergé sur n&#039;importe quel réseau &#039;&#039;IP&#039;&#039;). Les ordinateurs qui s’activent avec celui-ci doivent avoir une clé de produit spécifique appelée clé de licence en volume générique (&#039;&#039;Generic Volume License Key - GVLK&#039;&#039;) &#039;&#039;Microsoft&#039;&#039;. Les ordinateurs qui exécutent des éditions de licence en volume de &#039;&#039;Windows Server&#039;&#039; et client sont, par défaut, des clients &#039;&#039;KMS&#039;&#039; qui ne nécessitent pas de configuration supplémentaire, car la clé &#039;&#039;GVLK&#039;&#039; appropriée est déjà présente.&lt;br /&gt;
&lt;br /&gt;
Il existe toutefois des scénarios où ajouter la clé &#039;&#039;GVLK&#039;&#039; à l’ordinateur que l&#039;on souhaite activer par hôte &#039;&#039;KMS&#039;&#039; est nécessaire :&lt;br /&gt;
&lt;br /&gt;
* conversion d’un ordinateur à l’aide d’une clé d’activation multiple (&#039;&#039;MAK&#039;&#039;)&lt;br /&gt;
* conversion d’une licence de vente au détail de &#039;&#039;Windows&#039;&#039; en client &#039;&#039;KMS&#039;&#039;&lt;br /&gt;
* si l’ordinateur était auparavant un hôte &#039;&#039;KMS&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous aurons donc un serveur en local afin de desservir une multitude de clients.&lt;br /&gt;
&lt;br /&gt;
=Serveur=&lt;br /&gt;
Il est possible pour cette partie de configurer un hôte &#039;&#039;KMS&#039;&#039; via la [https://learn.microsoft.com/fr-fr/windows-server/get-started/kms-create-host solution officielle] de &#039;&#039;Microsoft&#039;&#039; sur &#039;&#039;Windows Server&#039;&#039; ou bien de passer par une implémentation libre sous &#039;&#039;Linux&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Vlmcsd==&lt;br /&gt;
[https://github.com/Wind4/vlmcsd Vlmcsd] est une implémentation libre écrite en langage &#039;&#039;C&#039;&#039; pleinement compatible avec les versions 4, 5 et 6 du protocole &#039;&#039;KMS&#039;&#039; destinée à remplacer le serveur propriétaire assumant ce rôle. On peut donc imaginer de l&#039;héberger dans un [[:Category:Conteneurisation|conteneur]] &#039;&#039;GNU/Linux&#039;&#039; afin de desservir un réseau de clients exploitant le célèbre [https://www.gnu.org/proprietary/malware-microsoft.html maliciel Américain].&lt;br /&gt;
&lt;br /&gt;
Réalisation sous &#039;&#039;Debian 12&#039;&#039;. Une archive du dépôt &#039;&#039;git&#039;&#039; utilisée dans la procédure est disponible dans [https://{{SERVERNAME}}/fichiers/windows/licences/kms/20241223-vlmcsd.tar.gz nos fichiers].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Installation des outils pour la récupération et la compilation du logiciel&lt;br /&gt;
apt update &amp;amp;&amp;amp; apt install -y git build-essential&lt;br /&gt;
&lt;br /&gt;
# Récupération du code&lt;br /&gt;
cd /tmp&lt;br /&gt;
git clone https://github.com/Wind4/vlmcsd.git&lt;br /&gt;
&lt;br /&gt;
# Compilation&lt;br /&gt;
cd vlmcsd/&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
# Mise à disposition du binaire&lt;br /&gt;
mkdir /opt/vlmcsd&lt;br /&gt;
cp -v bin/vlmcsd /opt/vlmcsd&lt;br /&gt;
&lt;br /&gt;
# Création d&#039;un service Systemd&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt; /usr/lib/systemd/system/kms.service&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=KMS Service.&lt;br /&gt;
After=network-online.target firewalld.service&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
PIDFile=/var/run/kms.pid&lt;br /&gt;
ExecStart=/opt/vlmcsd/vlmcsd -p /var/run/kms.pid&lt;br /&gt;
ExecReload=/bin/kill -s HUP ${MAINPID}&lt;br /&gt;
ExecStop=/bin/kill -s TERM ${MAINPID}&lt;br /&gt;
Restart=always&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
_EOF_&lt;br /&gt;
&lt;br /&gt;
# Activation du service&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl start kms.service&lt;br /&gt;
systemctl status --no-pager kms.service&lt;br /&gt;
systemctl enable kms.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{attention|En cas de mise en production, il est recommandé de mieux cloisonner le service &#039;&#039;Systemd&#039;&#039; en commençant par créer un utilisateur système spécifique et d&#039;exécuter le programme par son intermédiaire.}}&lt;br /&gt;
&lt;br /&gt;
L&#039;outil [https://github.com/SystemRage/py-kms Py-kms] est une [https://loumy.ch/doku.php?id=py-kms alternative] écrite en Python.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://averainy.com/post/create-kms-service-in-linux/&lt;br /&gt;
&lt;br /&gt;
=Client=&lt;br /&gt;
Une clé de licence en volume générique (&#039;&#039;Generic Volume License Key - GVLK&#039;&#039;) spécifique à l&#039;édition du produit doit être présente sur le poste. Elle sont disponibles sur la [https://learn.microsoft.com/fr-fr/windows-server/get-started/kms-client-activation-keys#generic-volume-license-keys page officielle] de l&#039;éditeur.&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
===Activation===&lt;br /&gt;
Pour activer le système d&#039;exploitation (exemple avec [https://logiciels.ycharbi.fr/Windows/OS/Bureau/Windows_11/LTSC/Entreprise/24H2/ Windows 11 enterprise LTSC]) via notre serveur, les quelques commandes suivantes suffisent :&lt;br /&gt;
 slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43&lt;br /&gt;
 slmgr /skms &amp;lt;IP_SERVEUR&amp;gt;&lt;br /&gt;
 slmgr /ato&lt;br /&gt;
&lt;br /&gt;
{{info|La première commande prépare la clé ; la deuxième spécifie le serveur &#039;&#039;KMS&#039;&#039; et la troisième lui envoi la requête d&#039;enregistrement. Ceci génère un total de 5 paquets &#039;&#039;DCE/RPC&#039;&#039; sur le port &#039;&#039;TCP/1688&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
La licence du client est ainsi activée.&lt;br /&gt;
&lt;br /&gt;
===Liste des GVLK===&lt;br /&gt;
Dans les tableaux ci-dessous, vous trouverez les clés &#039;&#039;GVLK&#039;&#039; pour chaque version et édition de &#039;&#039;Windows&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Windows Server LTSC====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows Server 2025&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2025 Standard || TVRH6-WHNXV-R9WG3-9XRFY-MY832&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2025 Datacenter || D764K-2NDRG-47T6Q-P8T8W-YP6DF&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2025 Datacenter : Azure Edition || XGN3F-F394H-FD2MY-PP6FD-8MCRC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows Server 2022&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2022 Standard || VDYBN-27WPP-V4HQT-9VMD4-VMK7H&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2022 Datacenter || WX4NM-KYWYW-QJJR4-XV3QB-6VM33&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2022 Datacenter : Azure Edition || NTBV8-9K7Q8-V27C6-M2BTV-KHMXV&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows Server 2019&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2019 Standard || N69G4-B89J2-4G8F4-WWYCC-J464C&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2019 Datacenter || WMDGN-G9PQG-XVVXX-R3X43-63DFG&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2019 Essentials || WVDHN-86M7X-466P6-VHXV7-YY726&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows Server 2016&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2016 Standard || WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2016 Datacenter || CB7KF-BWN84-R7R2Y-793K2-8XDDG&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2016 Essentials || JCKRF-N37P4-C2D82-9YXRT-4M63B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Canal semi-annuel de Windows Server====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Versions 20H2, 2004, 1909, 1903 et 1809&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server Standard || N2KJX-J94YW-TQVFB-DG9YT-724CC&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server Datacenter || 6NMRW-2C8FM-D24W7-TQWMY-CWH2D&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Windows 10 et Windows 11====&lt;br /&gt;
Les clés sont les mêmes pour les deux générations de système. Seule l&#039;édition compte.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows 10/11&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel || W269N-WFGWX-YVC9B-4J6C9-T83GX&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel N || MH37W-N47XK-V7XM9-C7227-GCQG9&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel pour les Stations de travail || NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel pour les Stations de travail N || 9FNHH-K3HBT-3W4TD-6383H-6XYWF&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel Éducation || 6TP4R-GNPTD-KYYHQ-7B7DP-J447Y&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel Éducation N || YVWGF-BXNMC-HTQYQ-CPQ99-66QFC&lt;br /&gt;
|-&lt;br /&gt;
| Éducation || NW6C2-QMPVW-D7KKK-3GKT6-VCFB2&lt;br /&gt;
|-&lt;br /&gt;
| Éducation N || 2WH4N-8QGBV-H22JP-CT43Q-MDWWJ&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise || NPPR9-FWDCX-D2C8J-H872K-2YT43&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise N || DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise G || YYVX9-NTFWV-6MDM3-9PT4T-4M68B&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise G N || 44RPN-FTY23-9VTTB-MP9BX-T84FV&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Windows Entreprise LTSC et LTSB====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Versions LTSC 2019, 2021 et 2024&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise || M7XTQ-FN8P6-TTKYV-9D4CC-J462D&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise N || 92NFX-8DJQP-P6BBQ-THF9C-7CG2H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ IoT LTSC&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| IoT Entreprise || KBN8V-HFGQ4-MGXVD-347P6-PDQGT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows 10 LTSB 2016&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise || DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise N || QFFDN-GRT3P-VKWWX-X7T3R-8B639&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows 10 LTSB 2015&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise || WNMTR-4C88C-JK8YV-HQ7T2-76DF9&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise N || 2F77B-TNFGY-69QQF-B8YKP-D69TJ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Des versions antérieures sont disponibles sur le site officiel en source de la section en cas de besoins spécifiques.&lt;br /&gt;
&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* https://learn.microsoft.com/fr-fr/windows-server/get-started/kms-client-activation-keys&lt;br /&gt;
* https://wind4.github.io/vlmcsd/&lt;br /&gt;
* https://msguides.com/windows-11&lt;br /&gt;
&lt;br /&gt;
==Office==&lt;br /&gt;
Toutes les versions sous licence en volume d{{&#039;}}&#039;&#039;Office&#039;&#039;, y compris &#039;&#039;Project&#039;&#039; et &#039;&#039;Visio&#039;&#039;, ont une &#039;&#039;GVLK&#039;&#039; préinstallée. Celles-ci prennent en charge à la fois le service de gestion des clés (&#039;&#039;KMS&#039;&#039;) et l’activation basée sur &#039;&#039;Active Directory&#039;&#039;. Il ne reste alors plus qu&#039;à installez et activez une seule clé hôte &#039;&#039;KMS&#039;&#039; pour activer toutes les versions sous licence en volume d{{&#039;}}&#039;&#039;Office&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Activation===&lt;br /&gt;
La méthode pour la suite bureautique du même constructeur est similaire à celle du système l’hébergeant (exemple avec [https://logiciels.ycharbi.fr/Windows/Logiciel/Office/Office_2016/ Office 2016]).&lt;br /&gt;
 cd C:\Program Files\Microsoft Office\Office16&lt;br /&gt;
 cscript ospp.vbs /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99 &lt;br /&gt;
 cscript ospp.vbs /sethst:&amp;lt;IP_SERVEUR&amp;gt;&lt;br /&gt;
 cscript ospp.vbs /act&lt;br /&gt;
&lt;br /&gt;
{{astuce|J&#039;ignore la raison pour laquelle chaque composant de la suite dispose d&#039;une clé lui étant propre. Dans des conditions réelles, l&#039;installation du pack complet est systématique donc il suffit de renseigner la clé de l&#039;édition (premières lignes des tableaux) choisie pour faire une pierre tous coups (oui j&#039;ai inventé cette locution et alors ?).}}&lt;br /&gt;
&lt;br /&gt;
===Liste des GVLK===&lt;br /&gt;
Voici la liste des &#039;&#039;GVLK&#039;&#039; pour les différentes versions et éditions de &#039;&#039;Microsoft Office&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Office LTSC 2024====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Produit !! GVLK&lt;br /&gt;
|-&lt;br /&gt;
| Office LTSC Professionnel Plus 2024 || XJ2XN-FW8RK-P4HMP-DKDBV-GCVGB&lt;br /&gt;
|-&lt;br /&gt;
| Office LTSC Standard 2024 || V28N4-JG22K-W66P8-VTMGK-H6HGR&lt;br /&gt;
|-&lt;br /&gt;
| Project Professionnel 2024 || FQQ23-N4YCY-73HQ3-FM9WC-76HF4&lt;br /&gt;
|-&lt;br /&gt;
| Project Standard 2024 || PD3TT-NTHQQ-VC7CY-MFXK3-G87F8&lt;br /&gt;
|-&lt;br /&gt;
| Visio LTSC Professional 2024 || B7TN8-FJ8V3-7QYCP-HQPMV-YY89G&lt;br /&gt;
|-&lt;br /&gt;
| Visio LTSC Standard 2024 || JMMVY-XFNQC-KK4HK-9H7R3-WQQTV&lt;br /&gt;
|-&lt;br /&gt;
| Access LTSC 2024 || 82FTR-NCHR7-W3944-MGRHM-JMCWD&lt;br /&gt;
|-&lt;br /&gt;
| Excel LTSC 2024 || F4DYN-89BP2-WQTWJ-GR8YC-CKGJG&lt;br /&gt;
|-&lt;br /&gt;
| Outlook LTSC 2024 || D2F8D-N3Q3B-J28PV-X27HD-RJWB9&lt;br /&gt;
|-&lt;br /&gt;
| PowerPoint LTSC 2024 || CW94N-K6GJH-9CTXY-MG2VC-FYCWP&lt;br /&gt;
|-&lt;br /&gt;
| Skype Entreprise LTSC 2024 || 4NKHF-9HBQF-Q3B6C-7YV34-F64P3&lt;br /&gt;
|-&lt;br /&gt;
| Word LTSC 2024 || MQ84N-7VYDM-FXV7C-6K7CC-VFW9J&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Office LTSC 2021====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Produit !! GVLK&lt;br /&gt;
|-&lt;br /&gt;
| Office LTSC Professionnel Plus 2021 || FXYTK-NJJ8C-GB6DW-3DYQT-6F7TH&lt;br /&gt;
|-&lt;br /&gt;
| Office LTSC Standard 2021 || KDX7X-BNVR8-TXXGX-4Q7Y8-78VT3&lt;br /&gt;
|-&lt;br /&gt;
| Project Professionnel 2021 || FTNWT-C6WBT-8HMGF-K9PRX-QV9H8&lt;br /&gt;
|-&lt;br /&gt;
| Project Standard 2021 || J2JDC-NJCYY-9RGQ4-YXWMH-T3D4T&lt;br /&gt;
|-&lt;br /&gt;
| Visio LTSC Professionnel 2021 || KNH8D-FGHT4-T8RK3-CTDYJ-K2HT4&lt;br /&gt;
|-&lt;br /&gt;
| Visio LTSC Standard 2021 || MJVNY-BYWPY-CWV6J-2RKRT-4M8QG&lt;br /&gt;
|-&lt;br /&gt;
| Access LTSC 2021 || WM8YG-YNGDD-4JHDC-PG3F4-FC4T4&lt;br /&gt;
|-&lt;br /&gt;
| Excel LTSC 2021 || NWG3X-87C9K-TC7YY-BC2G7-G6RVC&lt;br /&gt;
|-&lt;br /&gt;
| Outlook LTSC 2021 || C9FM6-3N72F-HFJXB-TM3V9-T86R9&lt;br /&gt;
|-&lt;br /&gt;
| PowerPoint LTSC 2021 || TY7XF-NFRBR-KJ44C-G83KF-GX27K&lt;br /&gt;
|-&lt;br /&gt;
| Publisher LTSC 2021 || 2MW9D-N4BXM-9VBPG-Q7W6M-KFBGQ&lt;br /&gt;
|-&lt;br /&gt;
| Skype Entreprise LTSC 2021 || HWCXN-K3WBT-WJBKY-R8BD9-XK29P&lt;br /&gt;
|-&lt;br /&gt;
| Word LTSC 2021 || TN8H9-M34D3-Y64V9-TR72V-X79KV&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Office LTSC 2019====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Produit !! GVLK&lt;br /&gt;
|-&lt;br /&gt;
| Office Professionnel Plus 2019 || NMMKJ-6RK4F-KMJVX-8D9MJ-6MWKP&lt;br /&gt;
|-&lt;br /&gt;
| Office Standard 2019 || 6NWWJ-YQWMR-QKGCB-6TMB3-9D9HK&lt;br /&gt;
|-&lt;br /&gt;
| Project Professionnel 2019 || B4NPR-3FKK7-T2MBV-FRQ4W-PKD2B&lt;br /&gt;
|-&lt;br /&gt;
| Project Standard 2019 || C4F7P-NCP8C-6CQPT-MQHV9-JXD2M&lt;br /&gt;
|-&lt;br /&gt;
| Visio Professionnel 2019 || 9BGNQ-K37YR-RQHF2-38RQ3-7VCBB&lt;br /&gt;
|-&lt;br /&gt;
| Visio Standard 2019 || 7TQNQ-K3YQQ-3PFH7-CCPPM-X4VQ2&lt;br /&gt;
|-&lt;br /&gt;
| Access 2019 || 9N9PT-27V4Y-VJ2PD-YXFMF-YTFQT&lt;br /&gt;
|-&lt;br /&gt;
| Excel 2019 || TMJWT-YYNMB-3BKTF-644FC-RVXBD&lt;br /&gt;
|-&lt;br /&gt;
| Outlook 2019 || 7HD7K-N4PVK-BHBCQ-YWQRW-XW4VK&lt;br /&gt;
|-&lt;br /&gt;
| PowerPoint 2019 || RRNCX-C64HY-W2MM7-MCH9G-TJHMQ&lt;br /&gt;
|-&lt;br /&gt;
| Publisher 2019 || G2KWX-3NW6P-PY93R-JXK2T-C9Y9V&lt;br /&gt;
|-&lt;br /&gt;
| Skype Entreprise 2019 || NCJ33-JHBBY-HTK98-MYCV8-HMKHJ&lt;br /&gt;
|-&lt;br /&gt;
| Word 2019 || PBX3G-NWMT6-Q7XBW-PYJGG-WXD33&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Office LTSC 2016====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Produit !! GVLK&lt;br /&gt;
|-&lt;br /&gt;
| Office Professionnel Plus 2016 || XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99&lt;br /&gt;
|-&lt;br /&gt;
| Office Standard 2016 || JNRGM-WHDWX-FJJG3-K47QV-DRTFM&lt;br /&gt;
|-&lt;br /&gt;
| Project Professionnel 2016 || YG9NW-3K39V-2T3HJ-93F3Q-G83KT&lt;br /&gt;
|-&lt;br /&gt;
| Project Standard 2016 || GNFHQ-F6YQM-KQDGJ-327XX-KQBVC&lt;br /&gt;
|-&lt;br /&gt;
| Visio Professionnel 2016 || PD3PC-RHNGV-FXJ29-8JK7D-RJRJK&lt;br /&gt;
|-&lt;br /&gt;
| Visio Standard 2016 || 7WHWN-4T7MP-G96JF-G33KR-W8GF4&lt;br /&gt;
|-&lt;br /&gt;
| Access 2016 || GNH9Y-D2J4T-FJHGG-QRVH7-QPFDW&lt;br /&gt;
|-&lt;br /&gt;
| Excel 2016 || 9C2PK-NWTVB-JMPW8-BFT28-7FTBF&lt;br /&gt;
|-&lt;br /&gt;
| OneNote 2016 || DR92N-9HTF2-97XKM-XW2WJ-XW3J6&lt;br /&gt;
|-&lt;br /&gt;
| Outlook 2016 || R69KK-NTPKF-7M3Q4-QYBHW-6MT9B&lt;br /&gt;
|-&lt;br /&gt;
| PowerPoint 2016 || J7MQP-HNJ4Y-WJ7YM-PFYGF-BY6C6&lt;br /&gt;
|-&lt;br /&gt;
| Publisher 2016 || F47MM-N3XJP-TQXJ9-BP99D-8K837&lt;br /&gt;
|-&lt;br /&gt;
| Skype Entreprise 2016 || 869NQ-FJ69K-466HW-QYCP2-DDBV6&lt;br /&gt;
|-&lt;br /&gt;
| Word 2016 || WXY84-JN2Q9-RBCCQ-3Q3J3-3PFJ6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* https://learn.microsoft.com/fr-fr/office/volume-license-activation/gvlks&lt;br /&gt;
* https://msguides.com/office-2021&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Kms_-_windows&amp;diff=1548</id>
		<title>Kms - windows</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Kms_-_windows&amp;diff=1548"/>
		<updated>2024-12-23T17:19:33Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:licences_windows  [https://learn.microsoft.com/fr-fr/windows/deployment/volume-activation/volume-activation-windows Key Management Services] (&amp;#039;&amp;#039;KMS&amp;#039;&amp;#039;), est une méthode d&amp;#039;activation de la licence &amp;#039;&amp;#039;Windows&amp;#039;&amp;#039; via un serveur externe. Cette approche est généralement utilisée dans un parc d&amp;#039;entreprise comportant un nombre conséquent de machines afin d&amp;#039;automatiser la gestion de leur activation en volume ([https://learn.microsoft.com/fr-fr/windows-serv... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:licences_windows]]&lt;br /&gt;
&lt;br /&gt;
[https://learn.microsoft.com/fr-fr/windows/deployment/volume-activation/volume-activation-windows Key Management Services] (&#039;&#039;KMS&#039;&#039;), est une méthode d&#039;activation de la licence &#039;&#039;Windows&#039;&#039; via un serveur externe. Cette approche est généralement utilisée dans un parc d&#039;entreprise comportant un nombre conséquent de machines afin d&#039;automatiser la gestion de leur activation en volume ([https://learn.microsoft.com/fr-fr/windows-server/get-started/kms-client-activation-keys système d&#039;exploitation] et suite bureautique [https://github.com/MicrosoftDocs/OfficeDocs-DeployOffice/blob/public/office/volume-license-activation/gvlks.md Microsoft Office]).&lt;br /&gt;
&lt;br /&gt;
Ce service fonctionne via le protocole éponyme en échangeant des messages &#039;&#039;Distributed Computing Environment / Remote Procedure Calls&#039;&#039; ([https://en.wikipedia.org/wiki/DCE/RPC DCE/RPC]) sur le port &#039;&#039;TCP/1688&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Intérêt=&lt;br /&gt;
Dans la mesure où les logiciels de &#039;&#039;Microsoft&#039;&#039; nous sont malheureusement imposés dans nos sociétés Occidentales, l&#039;idée de vouloir cracker les licences, ne serais-ce que par principe, est totalement légitime. Il est toutefois important de comprendre que l&#039;exécution d&#039;un crack peut avoir des conséquences en terme de sécurité. En effet, à moins d&#039;un audit poussé par [https://fr.wikipedia.org/wiki/R%C3%A9tro-ing%C3%A9nierie ingénierie inverse] du code machine composant le binaire de crackage, quel élément garanti l’innocuité de cette pratique ?&lt;br /&gt;
&lt;br /&gt;
Le piratage par exécution de code arbitraire sur une machine comporte donc toujours un risque et si nous pouvions avoir une activation de licence, sans le risque associé au lancement d&#039;un crack, nous aurions alors le beur et l&#039;argent du beur. C&#039;est justement ce que cette documentation aborde : l&#039;utilisation de méthodes officielles pour contourner l&#039;activation des systèmes &#039;&#039;Windows&#039;&#039; clients et serveurs ainsi que les suites &#039;&#039;Office&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Prés-requis=&lt;br /&gt;
L&#039;éditeur précise que pour utiliser &#039;&#039;KMS&#039;&#039;, il faut disposer d’un hôte &#039;&#039;KMS&#039;&#039; disponible sur le réseau local (en réalité, il peut être hébergé sur n&#039;importe quel réseau &#039;&#039;IP&#039;&#039;). Les ordinateurs qui s’activent avec celui-ci doivent avoir une clé de produit spécifique appelée clé de licence en volume générique (&#039;&#039;Generic Volume License Key - GVLK&#039;&#039;) &#039;&#039;Microsoft&#039;&#039;. Les ordinateurs qui exécutent des éditions de licence en volume de &#039;&#039;Windows Server&#039;&#039; et client sont, par défaut, des clients &#039;&#039;KMS&#039;&#039; qui ne nécessitent pas de configuration supplémentaire, car la clé &#039;&#039;GVLK&#039;&#039; appropriée est déjà présente.&lt;br /&gt;
&lt;br /&gt;
Il existe toutefois des scénarios où ajouter la clé &#039;&#039;GVLK&#039;&#039; à l’ordinateur que l&#039;on souhaite activer par hôte &#039;&#039;KMS&#039;&#039; est nécessaire :&lt;br /&gt;
&lt;br /&gt;
* conversion d’un ordinateur à l’aide d’une clé d’activation multiple (&#039;&#039;MAK&#039;&#039;)&lt;br /&gt;
* conversion d’une licence de vente au détail de &#039;&#039;Windows&#039;&#039; en client &#039;&#039;KMS&#039;&#039;&lt;br /&gt;
* si l’ordinateur était auparavant un hôte &#039;&#039;KMS&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Nous aurons donc un serveur en local afin de desservir une multitude de clients.&lt;br /&gt;
&lt;br /&gt;
=Serveur=&lt;br /&gt;
Il est possible pour cette partie de configurer un hôte &#039;&#039;KMS&#039;&#039; via la [https://learn.microsoft.com/fr-fr/windows-server/get-started/kms-create-host solution officielle] de &#039;&#039;Microsoft&#039;&#039; sur &#039;&#039;Windows Server&#039;&#039; ou bien de passer par une implémentation libre sous &#039;&#039;Linux&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Vlmcsd==&lt;br /&gt;
[https://github.com/Wind4/vlmcsd Vlmcsd] est une implémentation libre écrite en langage &#039;&#039;C&#039;&#039; pleinement compatible avec les versions 4, 5 et 6 du protocole &#039;&#039;KMS&#039;&#039; destinée à remplacer le serveur propriétaire assumant ce rôle. On peut donc imaginer de l&#039;héberger dans un [[:Category:Conteneurisation|conteneur]] &#039;&#039;GNU/Linux&#039;&#039; afin de desservir un réseau de clients exploitant le célèbre [https://www.gnu.org/proprietary/malware-microsoft.html maliciel Américain].&lt;br /&gt;
&lt;br /&gt;
Réalisation sous &#039;&#039;Debian 12&#039;&#039;. Une archive du dépôt &#039;&#039;git&#039;&#039; utilisée dans la procédure est disponible [https://{{SERVERNAME}}/fichiers/windows/licences/kms/20241223-vlmcsd.tar.gz nos fichiers].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Installation des outils pour la récupération et la compilation du logiciel&lt;br /&gt;
apt update &amp;amp;&amp;amp; apt install -y git build-essential&lt;br /&gt;
&lt;br /&gt;
# Récupération du code&lt;br /&gt;
cd /tmp&lt;br /&gt;
git clone https://github.com/Wind4/vlmcsd.git&lt;br /&gt;
&lt;br /&gt;
# Compilation&lt;br /&gt;
cd vlmcsd/&lt;br /&gt;
make&lt;br /&gt;
&lt;br /&gt;
# Mise à disposition du binaire&lt;br /&gt;
mkdir /opt/vlmcsd&lt;br /&gt;
cp -v bin/vlmcsd /opt/vlmcsd&lt;br /&gt;
&lt;br /&gt;
# Création d&#039;un service Systemd&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt; /usr/lib/systemd/system/kms.service&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=KMS Service.&lt;br /&gt;
After=network-online.target firewalld.service&lt;br /&gt;
Wants=network-online.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=forking&lt;br /&gt;
PIDFile=/var/run/kms.pid&lt;br /&gt;
ExecStart=/opt/vlmcsd/vlmcsd -p /var/run/kms.pid&lt;br /&gt;
ExecReload=/bin/kill -s HUP ${MAINPID}&lt;br /&gt;
ExecStop=/bin/kill -s TERM ${MAINPID}&lt;br /&gt;
Restart=always&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
_EOF_&lt;br /&gt;
&lt;br /&gt;
# Activation du service&lt;br /&gt;
systemctl daemon-reload&lt;br /&gt;
systemctl start kms.service&lt;br /&gt;
systemctl status --no-pager kms.service&lt;br /&gt;
systemctl enable kms.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{attention|En cas de mise en production, il est recommandé de mieux cloisonner le service &#039;&#039;Systemd&#039;&#039; en commençant par créer un utilisateur système spécifique et d&#039;exécuter le programme par son intermédiaire.}}&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://averainy.com/post/create-kms-service-in-linux/&lt;br /&gt;
&lt;br /&gt;
=Client=&lt;br /&gt;
Une clé de licence en volume générique (&#039;&#039;Generic Volume License Key - GVLK&#039;&#039;) spécifique à l&#039;édition du produit doit être présente sur le poste. Elle sont disponibles sur la [https://learn.microsoft.com/fr-fr/windows-server/get-started/kms-client-activation-keys#generic-volume-license-keys page officielle] de l&#039;éditeur.&lt;br /&gt;
&lt;br /&gt;
==Windows==&lt;br /&gt;
===Activation===&lt;br /&gt;
Pour activer le système d&#039;exploitation (exemple avec [https://logiciels.ycharbi.fr/Windows/OS/Bureau/Windows_11/LTSC/Entreprise/24H2/ Windows 11 enterprise LTSC]) via notre serveur, les quelques commandes suivantes suffisent :&lt;br /&gt;
 slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43&lt;br /&gt;
 slmgr /skms &amp;lt;IP_SERVEUR&amp;gt;&lt;br /&gt;
 slmgr /ato&lt;br /&gt;
&lt;br /&gt;
{{info|La première commande prépare la clé ; la deuxième spécifie le serveur &#039;&#039;KMS&#039;&#039; et la troisième lui envoi la requête d&#039;enregistrement. Ceci génère un total de 5 paquets DCE/RPC sur le port TCP/1688.}}&lt;br /&gt;
&lt;br /&gt;
La licence du client est ainsi activée.&lt;br /&gt;
&lt;br /&gt;
===Liste des GVLK===&lt;br /&gt;
Dans les tableaux ci-dessous, vous trouverez les clés GVLK pour chaque version et édition de Windows.&lt;br /&gt;
&lt;br /&gt;
====Windows Server LTSC====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows Server 2025&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2025 Standard || TVRH6-WHNXV-R9WG3-9XRFY-MY832&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2025 Datacenter || D764K-2NDRG-47T6Q-P8T8W-YP6DF&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2025 Datacenter : Azure Edition || XGN3F-F394H-FD2MY-PP6FD-8MCRC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows Server 2022&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2022 Standard || VDYBN-27WPP-V4HQT-9VMD4-VMK7H&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2022 Datacenter || WX4NM-KYWYW-QJJR4-XV3QB-6VM33&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2022 Datacenter : Azure Edition || NTBV8-9K7Q8-V27C6-M2BTV-KHMXV&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows Server 2019&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2019 Standard || N69G4-B89J2-4G8F4-WWYCC-J464C&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2019 Datacenter || WMDGN-G9PQG-XVVXX-R3X43-63DFG&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2019 Essentials || WVDHN-86M7X-466P6-VHXV7-YY726&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows Server 2016&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2016 Standard || WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2016 Datacenter || CB7KF-BWN84-R7R2Y-793K2-8XDDG&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server 2016 Essentials || JCKRF-N37P4-C2D82-9YXRT-4M63B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Canal semi-annuel de Windows Server====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Versions 20H2, 2004, 1909, 1903 et 1809&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server Standard || N2KJX-J94YW-TQVFB-DG9YT-724CC&lt;br /&gt;
|-&lt;br /&gt;
| Windows Server Datacenter || 6NMRW-2C8FM-D24W7-TQWMY-CWH2D&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Windows 10 et Windows 11====&lt;br /&gt;
Les clés sont les mêmes pour les deux générations de système. Seule l&#039;édition compte.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows 10/11&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel || W269N-WFGWX-YVC9B-4J6C9-T83GX&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel N || MH37W-N47XK-V7XM9-C7227-GCQG9&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel pour les Stations de travail || NRG8B-VKK3Q-CXVCJ-9G2XF-6Q84J&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel pour les Stations de travail N || 9FNHH-K3HBT-3W4TD-6383H-6XYWF&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel Éducation || 6TP4R-GNPTD-KYYHQ-7B7DP-J447Y&lt;br /&gt;
|-&lt;br /&gt;
| Professionnel Éducation N || YVWGF-BXNMC-HTQYQ-CPQ99-66QFC&lt;br /&gt;
|-&lt;br /&gt;
| Éducation || NW6C2-QMPVW-D7KKK-3GKT6-VCFB2&lt;br /&gt;
|-&lt;br /&gt;
| Éducation N || 2WH4N-8QGBV-H22JP-CT43Q-MDWWJ&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise || NPPR9-FWDCX-D2C8J-H872K-2YT43&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise N || DPH2V-TTNVB-4X9Q3-TJR4H-KHJW4&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise G || YYVX9-NTFWV-6MDM3-9PT4T-4M68B&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise G N || 44RPN-FTY23-9VTTB-MP9BX-T84FV&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Windows Entreprise LTSC et LTSB====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Versions LTSC 2019, 2021 et 2024&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise || M7XTQ-FN8P6-TTKYV-9D4CC-J462D&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise N || 92NFX-8DJQP-P6BBQ-THF9C-7CG2H&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ IoT LTSC&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| IoT Entreprise || KBN8V-HFGQ4-MGXVD-347P6-PDQGT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows 10 LTSB 2016&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise || DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJ&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise N || QFFDN-GRT3P-VKWWX-X7T3R-8B639&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Windows 10 LTSB 2015&lt;br /&gt;
|-&lt;br /&gt;
! Édition du système d’exploitation !! Clé de produit du client KMS&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise || WNMTR-4C88C-JK8YV-HQ7T2-76DF9&lt;br /&gt;
|-&lt;br /&gt;
| Entreprise N || 2F77B-TNFGY-69QQF-B8YKP-D69TJ&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Des versions antérieures sont disponibles sur le site officiel en source de la section en cas de besoins spécifiques.&lt;br /&gt;
&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* https://learn.microsoft.com/fr-fr/windows-server/get-started/kms-client-activation-keys&lt;br /&gt;
* https://wind4.github.io/vlmcsd/&lt;br /&gt;
* https://msguides.com/windows-11&lt;br /&gt;
&lt;br /&gt;
==Office==&lt;br /&gt;
Toutes les versions sous licence en volume d{{&#039;}}&#039;&#039;Office&#039;&#039;, y compris &#039;&#039;Project&#039;&#039; et &#039;&#039;Visio&#039;&#039;, ont une &#039;&#039;GVLK&#039;&#039; préinstallée. Celles-ci prennent en charge à la fois le service de gestion des clés (&#039;&#039;KMS&#039;&#039;) et l’activation basée sur &#039;&#039;Active Directory&#039;&#039;. Il ne reste alors plus qu&#039;à installez et activez une seule clé hôte &#039;&#039;KMS&#039;&#039; pour activer toutes les versions sous licence en volume d’Office.&lt;br /&gt;
&lt;br /&gt;
===Activation===&lt;br /&gt;
La méthode pour la suite bureautique du même constructeur est similaire à celle du système l’hébergeant (exemple avec [https://logiciels.ycharbi.fr/Windows/Logiciel/Office/Office_2016/ Office 2016]).&lt;br /&gt;
 cd C:\Program Files\Microsoft Office\Office16&lt;br /&gt;
 cscript ospp.vbs /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99 &lt;br /&gt;
 cscript ospp.vbs /sethst:&amp;lt;IP_SERVEUR&amp;gt;&lt;br /&gt;
 cscript ospp.vbs /act&lt;br /&gt;
&lt;br /&gt;
{{astuce|J&#039;ignore la raison pour laquelle chaque composant de la suite dispose d&#039;une clé lui étant propre. Dans des conditions réelles, l&#039;installation du pack complet est systématique donc il suffit de renseigner la clé de l&#039;édition (premières lignes des tableaux) choisie pour faire une pierre tous coups (oui j&#039;ai inventé cette locution et alors ?).}}&lt;br /&gt;
&lt;br /&gt;
===Liste des GVLK===&lt;br /&gt;
Voici la liste des &#039;&#039;GVLK&#039;&#039; pour les différentes versions et éditions de &#039;&#039;Microsoft Office&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====Office LTSC 2024====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Produit !! GVLK&lt;br /&gt;
|-&lt;br /&gt;
| Office LTSC Professionnel Plus 2024 || XJ2XN-FW8RK-P4HMP-DKDBV-GCVGB&lt;br /&gt;
|-&lt;br /&gt;
| Office LTSC Standard 2024 || V28N4-JG22K-W66P8-VTMGK-H6HGR&lt;br /&gt;
|-&lt;br /&gt;
| Project Professionnel 2024 || FQQ23-N4YCY-73HQ3-FM9WC-76HF4&lt;br /&gt;
|-&lt;br /&gt;
| Project Standard 2024 || PD3TT-NTHQQ-VC7CY-MFXK3-G87F8&lt;br /&gt;
|-&lt;br /&gt;
| Visio LTSC Professional 2024 || B7TN8-FJ8V3-7QYCP-HQPMV-YY89G&lt;br /&gt;
|-&lt;br /&gt;
| Visio LTSC Standard 2024 || JMMVY-XFNQC-KK4HK-9H7R3-WQQTV&lt;br /&gt;
|-&lt;br /&gt;
| Access LTSC 2024 || 82FTR-NCHR7-W3944-MGRHM-JMCWD&lt;br /&gt;
|-&lt;br /&gt;
| Excel LTSC 2024 || F4DYN-89BP2-WQTWJ-GR8YC-CKGJG&lt;br /&gt;
|-&lt;br /&gt;
| Outlook LTSC 2024 || D2F8D-N3Q3B-J28PV-X27HD-RJWB9&lt;br /&gt;
|-&lt;br /&gt;
| PowerPoint LTSC 2024 || CW94N-K6GJH-9CTXY-MG2VC-FYCWP&lt;br /&gt;
|-&lt;br /&gt;
| Skype Entreprise LTSC 2024 || 4NKHF-9HBQF-Q3B6C-7YV34-F64P3&lt;br /&gt;
|-&lt;br /&gt;
| Word LTSC 2024 || MQ84N-7VYDM-FXV7C-6K7CC-VFW9J&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Office LTSC 2021====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Produit !! GVLK&lt;br /&gt;
|-&lt;br /&gt;
| Office LTSC Professionnel Plus 2021 || FXYTK-NJJ8C-GB6DW-3DYQT-6F7TH&lt;br /&gt;
|-&lt;br /&gt;
| Office LTSC Standard 2021 || KDX7X-BNVR8-TXXGX-4Q7Y8-78VT3&lt;br /&gt;
|-&lt;br /&gt;
| Project Professionnel 2021 || FTNWT-C6WBT-8HMGF-K9PRX-QV9H8&lt;br /&gt;
|-&lt;br /&gt;
| Project Standard 2021 || J2JDC-NJCYY-9RGQ4-YXWMH-T3D4T&lt;br /&gt;
|-&lt;br /&gt;
| Visio LTSC Professionnel 2021 || KNH8D-FGHT4-T8RK3-CTDYJ-K2HT4&lt;br /&gt;
|-&lt;br /&gt;
| Visio LTSC Standard 2021 || MJVNY-BYWPY-CWV6J-2RKRT-4M8QG&lt;br /&gt;
|-&lt;br /&gt;
| Access LTSC 2021 || WM8YG-YNGDD-4JHDC-PG3F4-FC4T4&lt;br /&gt;
|-&lt;br /&gt;
| Excel LTSC 2021 || NWG3X-87C9K-TC7YY-BC2G7-G6RVC&lt;br /&gt;
|-&lt;br /&gt;
| Outlook LTSC 2021 || C9FM6-3N72F-HFJXB-TM3V9-T86R9&lt;br /&gt;
|-&lt;br /&gt;
| PowerPoint LTSC 2021 || TY7XF-NFRBR-KJ44C-G83KF-GX27K&lt;br /&gt;
|-&lt;br /&gt;
| Publisher LTSC 2021 || 2MW9D-N4BXM-9VBPG-Q7W6M-KFBGQ&lt;br /&gt;
|-&lt;br /&gt;
| Skype Entreprise LTSC 2021 || HWCXN-K3WBT-WJBKY-R8BD9-XK29P&lt;br /&gt;
|-&lt;br /&gt;
| Word LTSC 2021 || TN8H9-M34D3-Y64V9-TR72V-X79KV&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Office LTSC 2019====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Produit !! GVLK&lt;br /&gt;
|-&lt;br /&gt;
| Office Professionnel Plus 2019 || NMMKJ-6RK4F-KMJVX-8D9MJ-6MWKP&lt;br /&gt;
|-&lt;br /&gt;
| Office Standard 2019 || 6NWWJ-YQWMR-QKGCB-6TMB3-9D9HK&lt;br /&gt;
|-&lt;br /&gt;
| Project Professionnel 2019 || B4NPR-3FKK7-T2MBV-FRQ4W-PKD2B&lt;br /&gt;
|-&lt;br /&gt;
| Project Standard 2019 || C4F7P-NCP8C-6CQPT-MQHV9-JXD2M&lt;br /&gt;
|-&lt;br /&gt;
| Visio Professionnel 2019 || 9BGNQ-K37YR-RQHF2-38RQ3-7VCBB&lt;br /&gt;
|-&lt;br /&gt;
| Visio Standard 2019 || 7TQNQ-K3YQQ-3PFH7-CCPPM-X4VQ2&lt;br /&gt;
|-&lt;br /&gt;
| Access 2019 || 9N9PT-27V4Y-VJ2PD-YXFMF-YTFQT&lt;br /&gt;
|-&lt;br /&gt;
| Excel 2019 || TMJWT-YYNMB-3BKTF-644FC-RVXBD&lt;br /&gt;
|-&lt;br /&gt;
| Outlook 2019 || 7HD7K-N4PVK-BHBCQ-YWQRW-XW4VK&lt;br /&gt;
|-&lt;br /&gt;
| PowerPoint 2019 || RRNCX-C64HY-W2MM7-MCH9G-TJHMQ&lt;br /&gt;
|-&lt;br /&gt;
| Publisher 2019 || G2KWX-3NW6P-PY93R-JXK2T-C9Y9V&lt;br /&gt;
|-&lt;br /&gt;
| Skype Entreprise 2019 || NCJ33-JHBBY-HTK98-MYCV8-HMKHJ&lt;br /&gt;
|-&lt;br /&gt;
| Word 2019 || PBX3G-NWMT6-Q7XBW-PYJGG-WXD33&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Office LTSC 2016====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Produit !! GVLK&lt;br /&gt;
|-&lt;br /&gt;
| Office Professionnel Plus 2016 || XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99&lt;br /&gt;
|-&lt;br /&gt;
| Office Standard 2016 || JNRGM-WHDWX-FJJG3-K47QV-DRTFM&lt;br /&gt;
|-&lt;br /&gt;
| Project Professionnel 2016 || YG9NW-3K39V-2T3HJ-93F3Q-G83KT&lt;br /&gt;
|-&lt;br /&gt;
| Project Standard 2016 || GNFHQ-F6YQM-KQDGJ-327XX-KQBVC&lt;br /&gt;
|-&lt;br /&gt;
| Visio Professionnel 2016 || PD3PC-RHNGV-FXJ29-8JK7D-RJRJK&lt;br /&gt;
|-&lt;br /&gt;
| Visio Standard 2016 || 7WHWN-4T7MP-G96JF-G33KR-W8GF4&lt;br /&gt;
|-&lt;br /&gt;
| Access 2016 || GNH9Y-D2J4T-FJHGG-QRVH7-QPFDW&lt;br /&gt;
|-&lt;br /&gt;
| Excel 2016 || 9C2PK-NWTVB-JMPW8-BFT28-7FTBF&lt;br /&gt;
|-&lt;br /&gt;
| OneNote 2016 || DR92N-9HTF2-97XKM-XW2WJ-XW3J6&lt;br /&gt;
|-&lt;br /&gt;
| Outlook 2016 || R69KK-NTPKF-7M3Q4-QYBHW-6MT9B&lt;br /&gt;
|-&lt;br /&gt;
| PowerPoint 2016 || J7MQP-HNJ4Y-WJ7YM-PFYGF-BY6C6&lt;br /&gt;
|-&lt;br /&gt;
| Publisher 2016 || F47MM-N3XJP-TQXJ9-BP99D-8K837&lt;br /&gt;
|-&lt;br /&gt;
| Skype Entreprise 2016 || 869NQ-FJ69K-466HW-QYCP2-DDBV6&lt;br /&gt;
|-&lt;br /&gt;
| Word 2016 || WXY84-JN2Q9-RBCCQ-3Q3J3-3PFJ6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* https://learn.microsoft.com/fr-fr/office/volume-license-activation/gvlks&lt;br /&gt;
* https://msguides.com/office-2021&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Licences_windows&amp;diff=1547</id>
		<title>Catégorie:Licences windows</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Licences_windows&amp;diff=1547"/>
		<updated>2024-12-23T17:17:13Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:Windows  [https://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows] est une famille de systèmes d&amp;#039;exploitations propriétaires soumis à licences payantes Différentes méthodes d&amp;#039;activation existent, à savoir : * &amp;#039;&amp;#039;&amp;#039;activation par Internet&amp;#039;&amp;#039;&amp;#039; : méthode courante pour les utilisateurs individuels, où une clé de produit est saisie et le système se connecte à Internet pour valider l&amp;#039;activation * &amp;#039;&amp;#039;&amp;#039;activation par téléphone&amp;#039;&amp;#039;&amp;#039; : permet... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Windows]]&lt;br /&gt;
&lt;br /&gt;
[https://fr.wikipedia.org/wiki/Microsoft_Windows Microsoft Windows] est une famille de systèmes d&#039;exploitations propriétaires soumis à licences payantes&lt;br /&gt;
Différentes méthodes d&#039;activation existent, à savoir :&lt;br /&gt;
* &#039;&#039;&#039;activation par Internet&#039;&#039;&#039; : méthode courante pour les utilisateurs individuels, où une clé de produit est saisie et le système se connecte à Internet pour valider l&#039;activation&lt;br /&gt;
* &#039;&#039;&#039;activation par téléphone&#039;&#039;&#039; : permet d&#039;activer &#039;&#039;Windows&#039;&#039; en contactant un centre d&#039;activation de Microsoft si l&#039;activation par Internet n&#039;est pas possible&lt;br /&gt;
* &#039;&#039;&#039;activation &#039;&#039;KMS&#039;&#039; (&#039;&#039;Key Management Service&#039;&#039;)&#039;&#039;&#039; : utilisée principalement par les entreprises pour activer plusieurs installations de &#039;&#039;Windows&#039;&#039; sur un réseau local via un serveur &#039;&#039;KMS&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;activation &#039;&#039;MAK&#039;&#039; (&#039;&#039;Multiple Activation Key&#039;&#039;)&#039;&#039;&#039; : permet d&#039;activer un nombre fixe de copies de &#039;&#039;Windows&#039;&#039; avec une clé &#039;&#039;MAK&#039;&#039;, chaque activation étant enregistrée auprès des serveurs de &#039;&#039;Microsoft&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;activation par volume&#039;&#039;&#039; : destinée aux organisations qui achètent des licences en volume, permettant d&#039;activer plusieurs copies de &#039;&#039;Windows&#039;&#039; avec une seule clé de produit&lt;br /&gt;
* &#039;&#039;&#039;activation numérique&#039;&#039;&#039; : introduite avec &#039;&#039;Windows 10&#039;&#039; et versions ultérieures, permettant d&#039;activer le système sans clé de produit, en liant l&#039;activation à un compte &#039;&#039;Microsoft&#039;&#039; ou au matériel&lt;br /&gt;
* &#039;&#039;&#039;activation &#039;&#039;OEM&#039;&#039; (&#039;&#039;Original Equipment Manufacturer&#039;&#039;)&#039;&#039;&#039; : clé intégrée au matériel pour les ordinateurs préinstallés avec &#039;&#039;Windows&#039;&#039;, généralement liée à l&#039;ordinateur sur lequel le système est installé&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Web_station_-_synology&amp;diff=1546</id>
		<title>Web station - synology</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Web_station_-_synology&amp;diff=1546"/>
		<updated>2024-12-18T23:15:16Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:Synology  [https://www.synology.com/fr-fr/dsm/packages/WebStation Web Station] est une application additionnelle pour [https://www.synology.com/fr-fr/dsm DSM] [https://fr.wikipedia.org/wiki/Synology Synology] disponible dans le gestionnaire de paquets du système. Il permet d&amp;#039;installer et de configurer les serveurs &amp;#039;&amp;#039;WEB&amp;#039;&amp;#039; Apache2 et &amp;#039;&amp;#039;Nginx&amp;#039;&amp;#039; (ce dernier est fourni par défaut) sur le [https://fr.wikipedia.org/wiki/Serveur_de_stockage_en_r%C3%A9... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Synology]]&lt;br /&gt;
&lt;br /&gt;
[https://www.synology.com/fr-fr/dsm/packages/WebStation Web Station] est une application additionnelle pour [https://www.synology.com/fr-fr/dsm DSM] [https://fr.wikipedia.org/wiki/Synology Synology] disponible dans le gestionnaire de paquets du système. Il permet d&#039;installer et de configurer les serveurs &#039;&#039;WEB&#039;&#039; [[Apache2]] et &#039;&#039;Nginx&#039;&#039; (ce dernier est fourni par défaut) sur le [https://fr.wikipedia.org/wiki/Serveur_de_stockage_en_r%C3%A9seau NAS].&lt;br /&gt;
&lt;br /&gt;
=Listage de fichiers=&lt;br /&gt;
Bien que complètement aberrant, l&#039;outil ne permet pas de lister les fichiers (&#039;&#039;Directory Listing&#039;&#039;) d&#039;un hôte virtuel. Cette fonctionnalité, devant de préférence être désactivée lors de l&#039;hébergement de pages &#039;&#039;WEB&#039;&#039; pour des raisons de sécurité, peut être l&#039;objet de la mise en œuvre de certains sites destinés au partage de fichiers. L’absence de cette fonctionnalité est donc particulièrement handicapante, d&#039;autant plus que le serveur renvoie une erreur &amp;lt;code&amp;gt;403&amp;lt;/code&amp;gt; sans plus d&#039;explications, même dans les journaux (bo courage pour en trouver l&#039;origine donc)...&lt;br /&gt;
&lt;br /&gt;
Dans la mesure où aucune option de l&#039;interface &#039;&#039;WEB&#039;&#039; ne permet son activation et où, malgré l&#039;apparente bonne idée de la chose, la modification directe des fichiers d&#039;hôtes virtuels de Nginx ne peut se couronner de succès car réinitialisés au démarrage du service, cette section va montrer le cheminement pour tout de même parvenir à une configuration fonctionnelle (&#039;&#039;DSM 7.2.2-72806 Update 2&#039;&#039; pour l&#039;exemple).&lt;br /&gt;
&lt;br /&gt;
{{info|Il est nécessaire de se connecter en [[Openssh|SSH]] avec l&#039;utilisateur &#039;&#039;root&#039;&#039; pour effectuer ce qui va suivre.}}&lt;br /&gt;
&lt;br /&gt;
Chaque hôte virtuel, intitulés &amp;quot;Portail Web&amp;quot;, créé dans l&#039;application &#039;&#039;Web Station&#039;&#039; ajoute un ensemble de fichiers de configurations portant des noms indevinables à l&#039;avance côté serveur à l&#039;emplacement &amp;lt;code&amp;gt;/usr/local/etc/nginx/sites-enabled/&amp;lt;/code&amp;gt; et ayant pour lien symbolique &amp;lt;code&amp;gt;/etc/nginx/sites-enabled&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ce qui va nous intéresser dans ces fichiers, ce sont les inclusions d&#039;autres configuration car en suivant une chaîne imbriquée, nous allons trouver un endroit pour y mettre le notre de façon persistante (les étapes seront à reproduire pour chaque site).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Afficher la dernière ligne de l&#039;hôte virtuel &amp;quot;toto&amp;quot;&lt;br /&gt;
tail /usr/local/etc/nginx/sites-enabled/webservice_portal_033b9685-e292-4d50-a85a-a495479c6096&lt;br /&gt;
# La ligne qui nous intéresse&lt;br /&gt;
# est la suivante : include conf.d/.service.033b9685-e292-4d50-a85a-a495479c6096.45457345-2f5c-449e-8a97-d1fe7f228ffe.conf*;&lt;br /&gt;
&lt;br /&gt;
# Afficher ce fichier pour voir ce qu&#039;il inclus&lt;br /&gt;
tail /etc/nginx/conf.d/.service.033b9685-e292-4d50-a85a-a495479c6096.45457345-2f5c-449e-8a97-d1fe7f228ffe.conf&lt;br /&gt;
# La dernière ligne nous renvoi l&#039;emplacement d&#039;une&lt;br /&gt;
# configuration statique : include /usr/local/etc/nginx/conf.d/45457345-2f5c-449e-8a97-d1fe7f228ffe/user.conf*;&lt;br /&gt;
&lt;br /&gt;
# Le répertoire de destination n&#039;existant pas, il faut le créer&lt;br /&gt;
mkdir /usr/local/etc/nginx/conf.d/45457345-2f5c-449e-8a97-d1fe7f228ffe/&lt;br /&gt;
&lt;br /&gt;
# Ajouter la configuration persistante permettant le listage des fichiers&lt;br /&gt;
echo &#039;autoindex on;&#039; &amp;gt; /usr/local/etc/nginx/conf.d/45457345-2f5c-449e-8a97-d1fe7f228ffe/user.conf&lt;br /&gt;
&lt;br /&gt;
# Redémarrer le service&lt;br /&gt;
systemctl restart nginx&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le listage des fichiers du site via la directive &amp;lt;code&amp;gt;autoindex on;&amp;lt;/code&amp;gt; du module [https://nginx.org/en/docs/http/ngx_http_autoindex_module.html ngx_http_autoindex_module] de &#039;&#039;Nginx&#039;&#039; est désormais fonctionnel et persistant aux redémarrages.&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Synology&amp;diff=1545</id>
		<title>Catégorie:Synology</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Synology&amp;diff=1545"/>
		<updated>2024-12-18T23:09:57Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:Serveur_de stockage_réseau  [https://www.synology.com/fr-fr Synology Inc.] est une entreprise taïwanaise fondée en avril 2000 et spécialisée dans les serveurs [https://fr.wikipedia.org/wiki/Serveur_de_stockage_en_r%C3%A9seau Network Attached Storage] (&amp;#039;&amp;#039;NAS&amp;#039;&amp;#039;). »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Serveur_de stockage_réseau]]&lt;br /&gt;
&lt;br /&gt;
[https://www.synology.com/fr-fr Synology Inc.] est une entreprise taïwanaise fondée en avril 2000 et spécialisée dans les serveurs [https://fr.wikipedia.org/wiki/Serveur_de_stockage_en_r%C3%A9seau Network Attached Storage] (&#039;&#039;NAS&#039;&#039;).&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Serveur_de_stockage_r%C3%A9seau&amp;diff=1544</id>
		<title>Catégorie:Serveur de stockage réseau</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Serveur_de_stockage_r%C3%A9seau&amp;diff=1544"/>
		<updated>2024-12-18T23:09:16Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:Matériels »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Matériels]]&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Packet_tracer&amp;diff=1543</id>
		<title>Packet tracer</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Packet_tracer&amp;diff=1543"/>
		<updated>2024-12-07T18:09:58Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : /* Utilisation sans compte */ Ajout d&amp;#039;une méthode pour Linux Debian ainsi qu&amp;#039;un lien vers le binaire du logiciel pour cette plateforme&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Cisco]]&lt;br /&gt;
&lt;br /&gt;
[https://www.netacad.com/cisco-packet-tracer Packet Tracer] est un simulateur de matériel réseau de la marque &#039;&#039;Cisco&#039;&#039; (routeurs, commutateurs, contrôleur Wifi...) conçu et distribué par [https://fr.wikipedia.org/wiki/Cisco_Systems Cisco Systems] moyennant vos données personnelles (téléchargeable uniquement avec un compte). Il est utilisé dans les certifications de l&#039;entreprise et est souvent mis en œuvre lors de travaux pratiques dans un contexte d&#039;apprentissage.&lt;br /&gt;
&lt;br /&gt;
=Utilisation sans compte=&lt;br /&gt;
Au file des versions, l&#039;outil s&#039;est vu, comme beaucoup de [https://fr.wikipedia.org/wiki/Logiciel_propri%C3%A9taire logiciels propriétaires], adjoindre des limitations dans son utilisation. Sur les versions récentes, il faut notamment un compte &#039;&#039;Cisco&#039;&#039; pour pouvoir enregistrer plus de 3 fois un projet en cours avec un compte &amp;quot;invité&amp;quot; faisant patienter 15 secondes à l&#039;ouverture du logiciel...&lt;br /&gt;
&lt;br /&gt;
Pour le moment ([https://logiciels.ycharbi.fr/Cisco/SOFTWARE/Packet_tracer/8.X/CiscoPacketTracer822_64bit_setup_signed.exe version 8.2.2] au 04/12/2024), il est encore possible d&#039;utiliser le bouton &#039;&#039;Guest&#039;&#039; qui permet de profiter du programme sans compte mais sans garanties sur la pérennité de cette option (j&#039;ai d&#039;ailleurs déjà rencontré un cas où ce mode n&#039;existait pas lors d&#039;une formation ainsi que sur le paquet [https://logiciels.ycharbi.fr/Cisco/SOFTWARE/Packet_tracer/8.X/CiscoPacketTracer822_amd64_signed.deb Linux Debian]...).&lt;br /&gt;
&lt;br /&gt;
Il est heureusement encore facile de contourner (jusqu&#039;à quand ?) ce [https://fr.wikipedia.org/wiki/Gestion_des_droits_num%C3%A9riques DRM] en coupant l&#039;accès à Internet lors de l&#039;ouverture du logiciel. Bien que fonctionnelle, cette façon de procéder est tout de même contraignante car il est tout à fait possible qu&#039;une coupure de réseau ne soit pas envisageable sur le poste de travail (téléchargement en cours par exemple).&lt;br /&gt;
&lt;br /&gt;
==Règle de trafic sortant==&lt;br /&gt;
===Pour Windows===&lt;br /&gt;
La procédure suivante décrit l&#039;ajout d&#039;une règle de pare-feu pour le trafic sortant sous &#039;&#039;Windows 10&#039;&#039; afin de bloquer spécifiquement l&#039;usage du réseau pour l&#039;exécutable de &#039;&#039;Packet Tracer 8.2.2&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ouvrir la console &amp;lt;code&amp;gt;Pare-feu Windows Defender avec fonction avancées de sécurité&amp;lt;/code&amp;gt; via le &amp;quot;menu démarrer&amp;quot; (tant qu&#039;il existe encore...) ou exécuter directement &amp;lt;code&amp;gt;wf.msc&amp;lt;/code&amp;gt; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Règles de trafic sortant&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;nouvelle règle&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Programme&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Suivant&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Au programme ayant pour chemin d&#039;accès&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &amp;lt;code&amp;gt;%ProgramFiles%\Cisco Packet Tracer 8.2.2\bin\PacketTracer.exe&amp;lt;/code&amp;gt; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Bloquer la connexion&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; laisser cocher les 3 règles : &#039;&#039;Domaine&#039;&#039; ; &#039;&#039;Privé&#039;&#039; et &#039;&#039;Public&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Nom&#039;&#039; : &amp;lt;code&amp;gt;Packet Tracer 8.2.2&amp;lt;/code&amp;gt; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Terminer&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le programme peut alors être ouvert sans compte ni aucun bridage.&lt;br /&gt;
&lt;br /&gt;
===Pour Linux Debian===&lt;br /&gt;
Une méthode similaire à celle préconisée pour [[Appimage#Cloisonnement|Appimage]] peut être utilisée pour parvenir à un contournement du &#039;&#039;DRM&#039;&#039; via le programme de cloisonnement &amp;lt;code&amp;gt;firejail&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Installation du paquet&lt;br /&gt;
apt install --no-install-recommends firejail&lt;br /&gt;
&lt;br /&gt;
# Exécution de Packet Tracer en environnement cloisonné temporaire&lt;br /&gt;
firejail --quiet --noprofile --nonewprivs --net=none --private=$(mktemp -d --suffix=-pkt) --private-dev --caps.drop=all --seccomp /usr/local/bin/packettracer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L&#039;environnement de simulation n&#039;aura ni accès au réseau, ni à votre répertoire personnel et sera de plus restreint en permissions (il pourra aller pourrir librement son répertoire temporaire dans le &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;...).&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cgroup2&amp;diff=1542</id>
		<title>Cgroup2</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cgroup2&amp;diff=1542"/>
		<updated>2024-12-04T22:16:39Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:Pseudo_systèmes_de_fichiers  {{chantier}}  [https://fr.wikipedia.org/wiki/Cgroups Cgroups] (&amp;#039;&amp;#039;control groups&amp;#039;&amp;#039;) est une fonctionnalité du [https://fr.wikipedia.org/wiki/Noyau_Linux noyau Linux] pour limiter, compter et isoler l&amp;#039;utilisation des ressources (processeur, mémoire, utilisation disque, RDMA, [https://www.man7.org/linux/man-pages/man7/cgroups.7.html#CGROUPS_VERSION_2 etc]...).   Il est issus d&amp;#039;un travail initié par des ingénieurs de [ht... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Pseudo_systèmes_de_fichiers]]&lt;br /&gt;
&lt;br /&gt;
{{chantier}}&lt;br /&gt;
&lt;br /&gt;
[https://fr.wikipedia.org/wiki/Cgroups Cgroups] (&#039;&#039;control groups&#039;&#039;) est une fonctionnalité du [https://fr.wikipedia.org/wiki/Noyau_Linux noyau Linux] pour limiter, compter et isoler l&#039;utilisation des ressources (processeur, mémoire, utilisation disque, RDMA, [https://www.man7.org/linux/man-pages/man7/cgroups.7.html#CGROUPS_VERSION_2 etc]...). &lt;br /&gt;
&lt;br /&gt;
Il est issus d&#039;un travail initié par des ingénieurs de [https://fr.wikipedia.org/wiki/Google Google] en 2006 et intégré à la version 2.6.24 du noyau. La version 1 étant dépréciée (mais encore présente dans la branche principale de &#039;&#039;Linux&#039;&#039;), seule son évolution, &#039;&#039;Cgroups2&#039;&#039;, sera traité.&lt;br /&gt;
&lt;br /&gt;
Le principe général de cette technologie présentée comme un [[:Category:Pseudo_systèmes_de_fichiers|pseudo système de fichiers]] monté par défaut dans &amp;lt;code&amp;gt;/sys/fs/cgroup/&amp;lt;/code&amp;gt; est, de façon arbitraire, de créer des groupes de processus qui se verront tous appliquer des limitations communes. Il est ainsi possible de mitiger les risques de dénis de services occasionnés par un programme un peu trop gourmand en ressources. Son usage est de fait très plébiscité dans les environnements [[:Category:Conteneurisation|conteneurisés]].&lt;br /&gt;
&lt;br /&gt;
=Limitation des ressources=&lt;br /&gt;
&#039;&#039;Cgroups2&#039;&#039; permet de limiter les ressources systèmes suivantes :&lt;br /&gt;
* &#039;&#039;&#039;cpu&#039;&#039;&#039; (depuis &#039;&#039;Linux&#039;&#039; 4.15) : limitation de l&#039;usage processeur&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;cpuset&#039;&#039;&#039; (depuis &#039;&#039;Linux&#039;&#039; 5.0) : permet de faire fonctionner les processus sur des nœuds [https://fr.wikipedia.org/wiki/Non_uniform_memory_access NUMA] et des processeurs spécifiques (plateformes matérielles multi socket)&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;freezer&#039;&#039;&#039; (depuis &#039;&#039;Linux&#039;&#039; 5.2) : permet de geler et de reprendre les processus du groupe&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;hugetlb&#039;&#039;&#039; (depuis &#039;&#039;Linux&#039;&#039; 5.6) : limite l&#039;utilisation des grandes pages mémoires ([https://www.kernel.org/doc/html/latest/admin-guide/mm/hugetlbpage.html huge pages])&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;io&#039;&#039;&#039; (depuis &#039;&#039;Linux&#039;&#039; 4.5) : limite l&#039;utilisation des entrées/sorties sur les [[:Category:Périphériques bloc|périphériques de type bloc]] spécifiés dans le groupe&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;memory&#039;&#039;&#039; (depuis &#039;&#039;Linux&#039;&#039; 4.5) : limite l&#039;utilisation de la mémoire (&#039;&#039;RAM&#039;&#039;) des processus ; du noyau et de la &#039;&#039;SWAP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;perf_event&#039;&#039;&#039; (depuis &#039;&#039;Linux&#039;&#039; 4.11) : permet la supervision des performances ([https://www.kernel.org/doc/html/latest/arch/arm64/perf.html perf]) des processus du groupe&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;pids&#039;&#039;&#039; (depuis &#039;&#039;Linux&#039;&#039; 4.5) : limite le nombre de processus (&#039;&#039;PID&#039;&#039;) pouvant être créés dans le groupe&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;rdma&#039;&#039;&#039; (depuis &#039;&#039;Linux&#039;&#039; 4.11) : permet de limiter l&#039;usage du [https://en.wikipedia.org/wiki/Remote_direct_memory_access RDMA] et de l&#039;[https://fr.wikipedia.org/wiki/Bus_InfiniBand Infiniband] dans le groupe&lt;br /&gt;
&lt;br /&gt;
Leur portage depuis la [https://www.man7.org/linux/man-pages/man7/cgroups.7.html#CGROUPS_VERSION_1 version 1] est progressif. Les nouvelles versions du noyau sont donc susceptibles d&#039;en supporter d&#039;avantage.&lt;br /&gt;
&lt;br /&gt;
Tous les processus nouvellement créés s&#039;ajoutent dans le groupe racine (&#039;&#039;cgroup&#039;&#039; par défaut) via la liste &amp;lt;code&amp;gt;/sys/fs/cgroup/cgroup.procs&amp;lt;/code&amp;gt; qui ne comporte aucune limitation.&lt;br /&gt;
Pour limiter un ou plusieurs processus, il faut alors créer un groupe dédié aux limitations que nous voulons leur appliquer.&lt;br /&gt;
&lt;br /&gt;
{{info|Il est à noter qu&#039;un &#039;&#039;PID&#039;&#039; ne peut appartenir qu&#039;à un seul &#039;&#039;cgroup&#039;&#039; à la fois. Cette notion est importante pour la suite.}}&lt;br /&gt;
&lt;br /&gt;
Un groupe se créé par l&#039;ajout d&#039;un répertoire dans la racine du point de montage :&lt;br /&gt;
 mkdir /sys/fs/cgroup/toto&lt;br /&gt;
&lt;br /&gt;
Dès la création, son contenu est automatiquement peuplé des fichiers de configuration du groupe. Pour appliquer une limitation à ce dernier, il suffit donc d&#039;inscrire une valeur dans le fichier correspondant à celle-ci.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;annuler, il suffit de supprimer son répertoire&lt;br /&gt;
 rmdir /sys/fs/cgroup/toto/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note : La suppression d&#039;un cgroup n&#039;est possible que si aucun processus ne lui est affecté.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Limitation CPU==&lt;br /&gt;
===Attribution manuelle===&lt;br /&gt;
Pour limiter l&#039;usage du processeur à 50% d&#039;un cœur, il est possible d&#039;inscrire des limites de temps (en microsecondes) dans le fichier &amp;lt;code&amp;gt;cpu.max&amp;lt;/code&amp;gt; :&lt;br /&gt;
 echo &amp;quot;50000 100000&amp;quot; &amp;gt; /sys/fs/cgroup/toto/cpu.max&lt;br /&gt;
&lt;br /&gt;
Description :&lt;br /&gt;
* &#039;&#039;&#039;50000&#039;&#039;&#039; : limite de temps &#039;&#039;CPU&#039;&#039; en microsecondes que le &#039;&#039;cgroup&#039;&#039; peut utiliser dans une période donnée. Dans cet exemple, cela signifie que le groupe &amp;lt;code&amp;gt;toto&amp;lt;/code&amp;gt; peut utiliser jusqu&#039;à 50 000 microsecondes (soit 50 millisecondes) de temps processeur&lt;br /&gt;
* &#039;&#039;&#039;100000&#039;&#039;&#039; : période de temps en microsecondes sur laquelle la limite est appliquée. Dans cet exemple, cela signifie que la période est de 100 000 microsecondes (soit 100 millisecondes).&lt;br /&gt;
&lt;br /&gt;
Donc le &#039;&#039;cgroup&#039;&#039; peut utiliser jusqu&#039;à 50 millisecondes de temps &#039;&#039;CPU&#039;&#039; dans une période de 100 millisecondes. S&#039;il dépasse cette limite, il sera restreint dans son utilisation du processeur jusqu&#039;à la fin de la période. 100% équivaut à la charge d&#039;un cœur, une valeur supérieure en concernera donc plusieurs.&lt;br /&gt;
&lt;br /&gt;
{{info|Pour rappel, la limite est globale au groupe. Tous les &#039;&#039;PID&#039;&#039; en faisant parti consommeront donc au maximum un total de 50% du CPU sur un seul cœur.}}&lt;br /&gt;
&lt;br /&gt;
Le programme utilisé pour tester notre bridage sera &amp;lt;code&amp;gt;stress&amp;lt;/code&amp;gt;, un outil de charge processeur disponible dans les dépôts &#039;&#039;Debian&#039;&#039;. Nous allons l&#039;utiliser pour charger un cœur à 100% :&lt;br /&gt;
 stress -c 1&lt;br /&gt;
&lt;br /&gt;
Pour rappel, tout nouveau processus appartient par défaut (nous verrons plus loin commun influencer ce critère) au &#039;&#039;cgroup&#039;&#039; racine, il faut donc récupérer son &#039;&#039;PID&#039;&#039; afin de l&#039;ajouter dans la liste de processus &amp;lt;code&amp;gt;/sys/fs/cgroup/toto/cgroup.procs&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Récupération du PID (ici 1355)&lt;br /&gt;
ps -aux | grep stress&lt;br /&gt;
&lt;br /&gt;
# Ajout du processus au cgroup toto&lt;br /&gt;
echo &amp;quot;1355&amp;quot; &amp;gt; /sys/fs/cgroup/toto/cgroup.procs&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note : L&#039;usage du cœur sollicité a été réduit instantanément de moitié.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pour retirer le processus du &#039;&#039;cgroup&#039;&#039;, il convient de le replacer dans la racine&lt;br /&gt;
 echo &amp;quot;1355&amp;quot; &amp;gt; /sys/fs/cgroup/cgroup.procs&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note : Le cœur est reparti à 100%.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Attribution à l&#039;exécution===&lt;br /&gt;
La méthode exposée déroule un procédé manuel et asynchrone : le processus est d&#039;abord créé dans le &#039;&#039;cgroup&#039;&#039; racine pour être déplacé après coup dans un groupe spécifique. Bien que cela puisse s&#039;avérer utile pour limiter un programme déjà en cours d&#039;exécution, il n&#039;est pas envisageable de réaliser ces opérations manuellement à chaque lancement (d&#039;autant plus que le PID change à chaque occurrence).&lt;br /&gt;
&lt;br /&gt;
La commande &amp;lt;code&amp;gt;cgexec&amp;lt;/code&amp;gt; du paquet &amp;lt;code&amp;gt;cgroup-tools&amp;lt;/code&amp;gt; permet d&#039;effectuer ces opérations automatiquement au lancement d&#039;un programme (tous les &#039;&#039;PID&#039;&#039; fils sont concernés). Le &#039;&#039;cgroup&#039;&#039; doit toutefois être créé au préalable.&lt;br /&gt;
 cgexec -g cpu:/toto stress -c 1&lt;br /&gt;
&lt;br /&gt;
===Attribution de service===&lt;br /&gt;
[[:Category:Systemd|Systemd]] permet d&#039;exécuter des processus dans un &#039;&#039;cgroup&#039;&#039; via les options [https://www.freedesktop.org/software/systemd/man/latest/systemd.resource-control.html#Options systemd.resource-control] des unités  &amp;lt;code&amp;gt;slice.slice&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scope.scope&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;service.service&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;socket.socket&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mount.mount&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;swap.swap&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
À faire...&lt;br /&gt;
&lt;br /&gt;
===Persistance===&lt;br /&gt;
Comme tout pseudo système de fichier, &#039;&#039;cgroup2&#039;&#039; est volatile et ne survivra pas à un redémarrage. Une persistance peut être configurée via les fichiers (non existants par défaut) &amp;lt;code&amp;gt;/etc/cgconfig.conf&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/etc/cgconfig.conf.d/*.conf&amp;lt;/code&amp;gt; du paquet &amp;lt;code&amp;gt;cgroup-tools&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Comme il est bientôt minuit et que comme à l&#039;accoutumé, les outils simples en lignes commandes, ont des fichiers de configurations de l&#039;espace (pourquoi ne reprennent-ils pas simplement les commandes qui fonctionnent comme &amp;lt;code&amp;gt;iptables-persistent&amp;lt;/code&amp;gt; ?), je ne vais pas me coucher à 5 heure du matin juste pour tenter de convertir 3 pauvres lignes de commande en une série de galères longues comme le bras et complexe comme le cerveau torturé des développeurs de ce merdier. Cherchez par vous même et je documenterai peut-être ça un jour...&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* https://www.man7.org/linux/man-pages/man7/cgroups.7.html#CGROUPS_VERSION_2&lt;br /&gt;
* https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v2.html&lt;br /&gt;
* https://wiki.archlinux.org/title/Cgroups&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Packet_tracer&amp;diff=1541</id>
		<title>Packet tracer</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Packet_tracer&amp;diff=1541"/>
		<updated>2024-12-04T18:16:03Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:Cisco  [https://www.netacad.com/cisco-packet-tracer Packet Tracer] est un simulateur de matériel réseau de la marque &amp;#039;&amp;#039;Cisco&amp;#039;&amp;#039; (routeurs, commutateurs, contrôleur Wifi...) conçu et distribué par [https://fr.wikipedia.org/wiki/Cisco_Systems Cisco Systems] moyennant vos données personnelles (téléchargeable uniquement avec un compte). Il est utilisé dans les certifications de l&amp;#039;entreprise et est souvent mis en œuvre lors de travaux pratiques d... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Cisco]]&lt;br /&gt;
&lt;br /&gt;
[https://www.netacad.com/cisco-packet-tracer Packet Tracer] est un simulateur de matériel réseau de la marque &#039;&#039;Cisco&#039;&#039; (routeurs, commutateurs, contrôleur Wifi...) conçu et distribué par [https://fr.wikipedia.org/wiki/Cisco_Systems Cisco Systems] moyennant vos données personnelles (téléchargeable uniquement avec un compte). Il est utilisé dans les certifications de l&#039;entreprise et est souvent mis en œuvre lors de travaux pratiques dans un contexte d&#039;apprentissage.&lt;br /&gt;
&lt;br /&gt;
=Utilisation sans compte=&lt;br /&gt;
Au file des versions, l&#039;outil s&#039;est vu, comme beaucoup de [https://fr.wikipedia.org/wiki/Logiciel_propri%C3%A9taire logiciels propriétaires], adjoindre des limitations dans son utilisation. Sur les versions récentes, il faut notamment un compte &#039;&#039;Cisco&#039;&#039; pour pouvoir enregistrer plus de 3 fois un projet en cours avec un compte &amp;quot;invité&amp;quot; faisant patienter 15 secondes à l&#039;ouverture du logiciel...&lt;br /&gt;
&lt;br /&gt;
Pour le moment ([https://logiciels.ycharbi.fr/Cisco/SOFTWARE/Packet_tracer/CiscoPacketTracer822_64bit_setup_signed.exe version 8.2.2] au 04/12/2024), il est encore possible d&#039;utiliser le bouton &#039;&#039;Guest&#039;&#039; qui permet de profiter du programme sans compte mais sans garanties sur la pérennité de cette option (j&#039;ai d&#039;ailleurs déjà rencontré un cas où ce mode n&#039;existait pas lors d&#039;une formation...).&lt;br /&gt;
&lt;br /&gt;
Il est heureusement encore facile de contourner (jusqu&#039;à quand ?) ce [https://fr.wikipedia.org/wiki/Gestion_des_droits_num%C3%A9riques DRM] en coupant l&#039;accès à Internet lors de l&#039;ouverture du logiciel. Bien que fonctionnelle, cette façon de procéder est tout de même contraignante car il est tout à fait possible qu&#039;une coupure de réseau ne soit pas envisageable sur le poste de travail (téléchargement en cours par exemple).&lt;br /&gt;
&lt;br /&gt;
==Règle de trafic sortant==&lt;br /&gt;
La procédure suivante décrit l&#039;ajout d&#039;une règle de pare-feu pour le trafic sortant sous &#039;&#039;Windows 10&#039;&#039; afin de bloquer spécifiquement l&#039;usage du réseau pour l&#039;exécutable de &#039;&#039;Packet Tracer 8.2.2&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ouvrir la console &amp;lt;code&amp;gt;Pare-feu Windows Defender avec fonction avancées de sécurité&amp;lt;/code&amp;gt; via le &amp;quot;menu démarrer&amp;quot; (tant qu&#039;il existe encore...) ou exécuter directement &amp;lt;code&amp;gt;wf.msc&amp;lt;/code&amp;gt; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Règles de trafic sortant&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;nouvelle règle&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Programme&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Suivant&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Au programme ayant pour chemin d&#039;accès&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &amp;lt;code&amp;gt;%ProgramFiles%\Cisco Packet Tracer 8.2.2\bin\PacketTracer.exe&amp;lt;/code&amp;gt; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Bloquer la connexion&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; laisser cocher les 3 règles : &#039;&#039;Domaine&#039;&#039; ; &#039;&#039;Privé&#039;&#039; et &#039;&#039;Public&#039;&#039; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Nom&#039;&#039; : &amp;lt;code&amp;gt;Packet Tracer 8.2.2&amp;lt;/code&amp;gt; &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; &#039;&#039;Terminer&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le programme peut alors être ouvert sans compte ni aucun bridage.&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Gns3&amp;diff=1540</id>
		<title>Gns3</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Gns3&amp;diff=1540"/>
		<updated>2024-10-12T13:56:33Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : /* Utilisation des Ios On Unix (IOU) */ Ajout d&amp;#039;un script de génération de clés de licence pour Python3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:réseaux_linux]]&lt;br /&gt;
[https://github.com/GNS3/gns3-gui GNS3] est un logiciel de simulation réseau. il peut simuler des matériels de l&#039;équipementier &#039;&#039;Cisco&#039;&#039; en exploitant de vrais &#039;&#039;IOS&#039;&#039; ; exploiter &#039;&#039;qemu&#039;&#039; au travers du cadriciel &#039;&#039;libvirt&#039;&#039; pour émuler des équipements ; utiliser &#039;&#039;Docker&#039;&#039; ; intégrer des &#039;&#039;IOS&#039;&#039; tournant directement sous &#039;&#039;Linux&#039;&#039; afin d&#039;ajouter des commutateurs de niveau 3 et plus encore. Nous nous trouvons donc avec des équipements virtuels qui réagissent comme des équipement physiques et qui, après avoir été reliés au monde réel par l&#039;intermédiaire d&#039;un pont sur la carte réseau de l&#039;hôte, peuvent communiquer avec leurs pairs physiques de la même manière que de vrai équipements.&lt;br /&gt;
&lt;br /&gt;
{{info|Testé avec la version 2.0 sortie le 02/05/2017}}&lt;br /&gt;
&lt;br /&gt;
=Téléchargement=&lt;br /&gt;
Partie obsolète. Passez par [https://github.com/GNS3/gns3-gui GitHub].&lt;br /&gt;
&#039;&#039;GNS3&#039;&#039; fait partie de ces logiciels casses couilles qui nécessitent un compte pour être téléchargé. Comme je ne supporte pas cette pratique (d&#039;autant plus que ça se dit &amp;quot;logiciel libre&amp;quot; - pas très libre comme façon de faire), j&#039;ai donc recensé les liens &#039;&#039;SourceForge&#039;&#039; du projet (c&#039;est surtout utile si vous voulez le compiler vous-même ou si vous utilisez Mac OS X ou Windows). Pour les distributions Linux, vous trouverez la plupart du temps un binaire dans les dépôts.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Linux :&#039;&#039;&#039; https://sourceforge.net/projects/gns-3/files/Nightly%20Builds/2018-02-28/2.2/GNS3-2.2.0dev1.source.zip/download&lt;br /&gt;
* &#039;&#039;&#039;Mac :&#039;&#039;&#039; https://sourceforge.net/projects/gns-3/files/Releases/v2.1.3/GNS3-2.1.3.dmg/download&lt;br /&gt;
* &#039;&#039;&#039;Windows :&#039;&#039;&#039; https://sourceforge.net/projects/gns-3/files/Releases/v2.1.3/GNS3-2.1.3-all-in-one.exe/download&lt;br /&gt;
Dépôt du projet :&lt;br /&gt;
* https://sourceforge.net/projects/gns-3/files&lt;br /&gt;
* https://sourceforge.net/projects/gns-3/files/Nightly%20Builds/2018-02-28&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{info|Mise à jour du 23/08/2024 : depuis &#039;&#039;Debian 12&#039;&#039;, &#039;&#039;&#039;seule&#039;&#039;&#039; la [[#Méthode_python3_PIP|méthode Python3 PIP]] est supporté via le paramètre d&#039;installation &amp;lt;code&amp;gt;--break-system-packages&amp;lt;/code&amp;gt;. La section dédiée a été actualisée en conséquence. Veuillez noter également que l&#039;installation ne fonctionne plus sur &#039;&#039;Debian Sid&#039;&#039; à cette même date. La procédure va donc logiquement probablement changer pour la version 13... Un ticket sur la confection d&#039;un paquet portable est ouvert sur le dépôt [https://github.com/GNS3/gns3-gui/issues/2911 GitHub] du projet sans grande avancée à ce stade. Cela pourrait régler le problème épineux de l&#039;installation et des mises à jours de cet outil à terme.}}&lt;br /&gt;
&lt;br /&gt;
Le paquet &#039;&#039;telnet&#039;&#039; sera également utile pour la connexion aux équipements virtuels&lt;br /&gt;
 apt install telnet&lt;br /&gt;
&lt;br /&gt;
==Méthode python3 PIP==&lt;br /&gt;
GNS3 est installable depuis le gestionnaire de paquet de &#039;&#039;Python3&#039;&#039;. Cette méthode est la seule fonctionnelle sous &#039;&#039;Debian 12&#039;&#039; en 2024 :&lt;br /&gt;
 apt install python3-pip&lt;br /&gt;
 apt install python3-pyqt5.qtsvg python3-pyqt5.qtwebsockets&lt;br /&gt;
&lt;br /&gt;
 pip3 install --break-system-packages -U gns3-gui gns3-server PyQt5-sip PyQt5 aiohttp&lt;br /&gt;
&lt;br /&gt;
 wget https://doc.ycharbi.fr/fichiers/réseaux/gns3/ubridge -P /usr/bin/&lt;br /&gt;
 chmod 777 /usr/bin/ubridge&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note : le binaire de ubridge est celui des dépôts Debian Sid au 17/02/2019.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{info|Depuis la version 2.2.5 sortie le 9 janvier 2020, la suite est automatique. Vous pouvez vous arrêter là pour la méthode &#039;&#039;python3 PIP&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Télécharger l&#039;icône de l&#039;application :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://doc.ycharbi.fr/fichiers/réseaux/gns3/images/gns3.png -P /usr/share/icons/hicolor/48x48/apps/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et créer le lanceur :&lt;br /&gt;
 vim /usr/share/applications/gns3.desktop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Version=1.0&lt;br /&gt;
Type=Application&lt;br /&gt;
Terminal=false&lt;br /&gt;
Exec=gns3 %f&lt;br /&gt;
Name=GNS3&lt;br /&gt;
Comment=GNS3 Graphical Network Simulator&lt;br /&gt;
Icon=/usr/share/icons/hicolor/48x48/apps/gns3.png&lt;br /&gt;
Categories=Education;Network;&lt;br /&gt;
MimeType=application/x-gns3;application/x-gns3a;application/x-gns3project;&lt;br /&gt;
Keywords=simulator;network;netsim;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour :&lt;br /&gt;
 pip3 install --break-system-packages -U sip gns3-gui gns3-server PyQt5-sip PyQt5 aiohttp&lt;br /&gt;
&lt;br /&gt;
{{info|Si une des dépendances pose problème (c&#039;était le cas pour &#039;&#039;pyqt5&#039;&#039; en version 5.14.1 vers fin 2019 - début 2020), il est possible d&#039;en installer une version spécifique en la précisant ainsi : &amp;lt;code&amp;gt;pyqt5{{=}}{{=}}5.14.0&amp;lt;/code&amp;gt;. Le paquet a depuis changé de casse dans son nom comme vous pouvez le constater dans la ligne ce-dessus... Cet écosystème est insupportable. Il faut faire une veille constante, ce qui rend chaque mises à jours risquées et le maintient d&#039;une documentation fonctionnelle impossible.}}&lt;br /&gt;
&lt;br /&gt;
==Méthode APT==&lt;br /&gt;
Méthode obsolète. Utilisez la [[#Méthode_python3_PIP|méthode Python3 PIP]].&lt;br /&gt;
&lt;br /&gt;
La version de &#039;&#039;GNS3&#039;&#039; disponible dans les dépôts &#039;&#039;Debian&#039;&#039; est affligeante, il s&#039;agit d&#039;une très ancienne version (elle ne permet même pas de supprimer les câbles que l&#039;on connectes aux équipements...), nous allons donc ajouter le dépôt du projet pour être à jour.&lt;br /&gt;
&lt;br /&gt;
Depuis une installation via &#039;&#039;debootstrap&#039;&#039;, le paquet &amp;lt;code&amp;gt;dirmngr&amp;lt;/code&amp;gt; est absent et est nécessaire à l&#039;importation des clés &#039;&#039;GPG&#039;&#039;. Il faut l&#039;installer&lt;br /&gt;
 apt install dirmngr&lt;br /&gt;
&lt;br /&gt;
{{info|Sous Debian Stretch, la dépendance &#039;&#039;libvirt-bin&#039;&#039; ne peut être satisfaite car il s&#039;agit d&#039;un paquet de transition qui s&#039;est vu découpé en deux paquets nommés &#039;&#039;libvirt-daemon-system&#039;&#039; et &#039;&#039;libvirt-clients&#039;&#039; (voir [https://lists.debian.org/debian-user/2016/11/msg00518.html ici]). Le problème c&#039;est que sans un paquet qui s&#039;appel &#039;&#039;libvirt-bin&#039;&#039;, GNS3 est impossible à installer (et c&#039;est pas faute d&#039;avoir essayé, merci le gestionnaire de paquet &#039;&#039;apt&#039;&#039; qui sait se comporter comme une grosse merde quand il le faut). J&#039;ai donc mis au point deux solution pour palier au problème. L&#039;une exploite &#039;&#039;apt&#039;&#039; et une bidouille avec son &#039;&#039;sources.list&#039;&#039;, l&#039;autre utilise directement &#039;&#039;dpkg&#039;&#039; pour contourner le problème. Je conseil vivement d&#039;utiliser la solution &#039;&#039;apt&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Comme nous l&#039;avons vu, le paquet &#039;&#039;libvirt-bin&#039;&#039; n&#039;est pas disponible dans les dépôts &#039;&#039;Stretch&#039;&#039; suite à un changement programmé de stratégies de ses mainteneurs. Cependant il est présent dans ceux de Debian Jessie puisque il en été au stade de transition à ce moment là. &#039;&#039;Jessie&#039;&#039; n&#039;étant pas très différent de &#039;&#039;Stretch&#039;&#039;, il n&#039;y a pas de risques de stabilité en confondant ce paquet avec les autres. Nous allons donc combiner les dépôts de &#039;&#039;Jessie&#039;&#039; avec ceux de &#039;&#039;Stretch&#039;&#039; pour avoir ce qu&#039;il nous faut. Pas de panique, &#039;&#039;apt&#039;&#039; n&#039;étant pas si mal fait, il prendra toujours les paquets avec un numéros de version plus récent. Ce qui garanti que Seul les paquets absents de &#039;&#039;Stretch&#039;&#039; seront piochés dans &#039;&#039;Jessie&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ajouter les dépôts de &#039;&#039;GNS3&#039;&#039; et &#039;&#039;Debian Jessie&#039;&#039; dans &#039;&#039;Stretch&#039;&#039;&lt;br /&gt;
 echo -e &#039;#GNS3\ndeb http://ppa.launchpad.net/gns3/ppa/ubuntu xenial main\n#Debian jessie (pour avoir le paquet libvirt-bin)\ndeb http://ftp.fr.debian.org/debian jessie main&#039; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
{{attention|Avec &#039;&#039;Debian sid/buster&#039;&#039;, il faut remplacer la branche &#039;&#039;&#039;xenial&#039;&#039;&#039; du dépôt &#039;&#039;&#039;http://ppa.launchpad.net/gns3/ppa/ubuntu&#039;&#039;&#039; par &#039;&#039;&#039;bionic&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Ajout de la clé &#039;&#039;GPG&#039;&#039; des dépôts &#039;&#039;GNS3&#039;&#039;&lt;br /&gt;
 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F88F6D313016330404F710FC9A2FD067A2E3EF7B&lt;br /&gt;
&lt;br /&gt;
Mise à jour de la base &#039;&#039;apt&#039;&#039;&lt;br /&gt;
 apt update&lt;br /&gt;
&lt;br /&gt;
Installation de &#039;&#039;GNS3&#039;&#039;&lt;br /&gt;
 apt install gns3-gui&lt;br /&gt;
&lt;br /&gt;
Attribution des droits à l&#039;outil &#039;&#039;ubridge&#039;&#039;&lt;br /&gt;
 chmod 777 /usr/bin/ubridge&lt;br /&gt;
 setcap cap_net_admin,cap_net_raw=ep /usr/bin/ubridge&lt;br /&gt;
&lt;br /&gt;
==Méthode DPKG==&lt;br /&gt;
Cette méthode a été testé avec &#039;&#039;GNS3 1.5.3&#039;&#039;. Elle est fonctionnelle mais en plus de sa lourdeur, elle ne permet pas une monté en version simple. Elle reste toutefois plus abordable que la compilation depuis les sources et a été documenté car je me suis bien fait chier pour la pondre quand j&#039;en avais besoin.&lt;br /&gt;
&lt;br /&gt;
Installation des dépendances de &#039;&#039;gns3-gui&#039;&#039; (j&#039;ai enlevé &#039;&#039;gns3-server&#039;&#039; qui réclame &#039;&#039;libvirt-bin&#039;&#039; qui n&#039;existe pas)&lt;br /&gt;
 apt install python3 python3-pyqt5 python3-pyqt5.qtsvg wireshark vinagre libc6 libexpat1 zlib1g&lt;br /&gt;
&lt;br /&gt;
Installation des dépendances de &#039;&#039;gns3-server&#039;&#039; (j&#039;ai enlevé &#039;&#039;libvirt-bin&#039;&#039; qui n&#039;existe pas)&lt;br /&gt;
 apt install python3 vpcs qemu-system-x86 qemu-system-arm qemu-kvm cpulimit x11vnc xvfb libc6 libexpat1 zlib1g&lt;br /&gt;
&lt;br /&gt;
Téléchargement des dépendances non disponibles dans les dépôts &#039;&#039;Debian&#039;&#039;&lt;br /&gt;
 wget http://ppa.launchpad.net/gns3/ppa/ubuntu/pool/main/d/dynamips/dynamips_0.2.16-1~xenial1_amd64.deb http://ppa.launchpad.net/gns3/ppa/ubuntu/pool/main/u/ubridge/ubridge_0.9.11-1~yakkety_amd64.deb&lt;br /&gt;
&lt;br /&gt;
Installation manuelle des dépendances non disponibles dans les dépôts Debian (dépôt &#039;&#039;GNS3&#039;&#039;) pour &#039;&#039;gns3-server&#039;&#039;&lt;br /&gt;
 dpkg -i dynamips_0.2.16-1~xenial1_amd64.deb ubridge_0.9.11-1~xenial_amd64.deb&lt;br /&gt;
&lt;br /&gt;
Installation de &#039;&#039;gns3-server&#039;&#039; sans &#039;&#039;libvirt-bin&#039;&#039;&lt;br /&gt;
 dpkg -i --ignore-depends=libvirt-bin gns3-server_1.5.4~xenial1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
Installation de &#039;&#039;gns3-gui&#039;&#039;&lt;br /&gt;
 dpkg -i gns3-gui_1.5.3~xenial5_amd64.deb&lt;br /&gt;
&lt;br /&gt;
À ce stade nous avons &#039;&#039;GNS3&#039;&#039; d&#039;installé. Ne criez pas victoire trop vite car &#039;&#039;libvirt-bin&#039;&#039;, bien que nous ayant bien fiat chier reste un élément indispensable pour émuler les équipements. Il va donc falloir l&#039;installer si on veut bénéficier de l’intérêt de ce logiciel. Pour se faire, soit vous optez pour l&#039;installation des dépendances de &#039;&#039;libvirt-bin&#039;&#039; ainsi que lui même à la main, soit vous le récupérez depuis les dépôts &#039;&#039;Jessie&#039;&#039; comme avec la méthode &#039;&#039;apt&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{astuce|Les dépendances des &#039;&#039;.deb&#039;&#039; se trouvent avec la commande &amp;lt;code&amp;gt;dpkg-deb --info nom.deb&amp;lt;/code&amp;gt;. Lorsque &#039;&#039;apt&#039;&#039; ne veut plus rien savoir et qu&#039;il casse les couille on nettoie tout avec la commande &amp;lt;code&amp;gt;apt --fix-broken install&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Attribution des droits à l&#039;outil &#039;&#039;ubridge&#039;&#039;&lt;br /&gt;
 chmod 777 /usr/bin/ubridge&lt;br /&gt;
 setcap cap_net_admin,cap_net_raw=ep /usr/bin/ubridge&lt;br /&gt;
&lt;br /&gt;
==Ajout d&#039;un IOS Cisco==&lt;br /&gt;
Les &#039;&#039;IOS Cisco&#039;&#039; sont disponibles dans [https://{{SERVERNAME}}/fichiers/réseaux/cisco/ios/ nos fichiers]. Il sont à ajouter dans les modèles de routeur (vous trouverez, ce n&#039;est pas très compliqué).&lt;br /&gt;
&lt;br /&gt;
=Lien avec le monde physique=&lt;br /&gt;
Faire son réseau virtuel est intéressant mais pouvoir exploiter ses atouts avec de vrais équipements, c&#039;est encore mieux. Ainsi ont peut considérer sont PC hôte comme une baie avec plein d&#039;équipement que l&#039;on relie au réseau externe. Les possibilités sont infinies...&lt;br /&gt;
&lt;br /&gt;
Pour se faire, il faut créer une interface de lien local &#039;&#039;tap&#039;&#039; et lui assigner une adresse &#039;&#039;IP&#039;&#039;. On ajoutera ensuite un &amp;quot;cloud&amp;quot; dans &#039;&#039;GNS3&#039;&#039; (équipement avec l&#039;icône de nuage) et on le configurera pour ajouter cette interface dans l&#039;onglet &#039;&#039;NIO TAP&#039;&#039;. Il faut rentrer le nom de l&#039;interface dans le champ prévu à cet effet : &#039;&#039;tap0&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{info|Avec &#039;&#039;GNS3 2.0&#039;&#039;, l&#039;étape avec l&#039;onglet n&#039;est plus nécessaire car le nuage ajoute automatiquement les interfaces qu&#039;il trouve sur l&#039;hôte.}}&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Nouvelle méthode===&lt;br /&gt;
De nos jours, tout peut se faire via la commande &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt; du paquet &amp;lt;code&amp;gt;iproute2&amp;lt;/code&amp;gt; comme expliqué [https://www.baturin.org/docs/iproute2/ ici].&lt;br /&gt;
 ip tuntap add dev tap0 mode tap user toto&lt;br /&gt;
 ip address add 10.200.200.1/30 dev tap0&lt;br /&gt;
 ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
===Ancienne méthode===&lt;br /&gt;
Installation des dépendances&lt;br /&gt;
 apt install uml-utilities&lt;br /&gt;
&lt;br /&gt;
Création de l&#039;interface &#039;&#039;tap0&#039;&#039; et attribution d&#039;une adresse &#039;&#039;IP&#039;&#039;&lt;br /&gt;
 tunctl -t tap0&lt;br /&gt;
 ip a a 10.200.200.1/30 dev tap0&lt;br /&gt;
 # ou via ifconfig du paquet net-tools&lt;br /&gt;
 # ifconfig tap0 10.200.200.1 netmask 255.255.255.252&lt;br /&gt;
&lt;br /&gt;
==Problèmes==&lt;br /&gt;
Cette étape aussi simple qu&#039;il puisse y paraître peut générer des erreurs bloquantes. Un message disant quand le chemin de &#039;&#039;ubridge&#039;&#039; n&#039;est pas valide ou qu&#039;il n&#039;est pas installé peut survenir. C&#039;est un problème de permission (Tapez &amp;lt;code&amp;gt;ub+&amp;lt;tab&amp;gt;&amp;lt;/code&amp;gt; dans un terminal connecté avec l&#039;utilisateur qui doit exécuter &#039;&#039;GNS3&#039;&#039;, si &#039;&#039;Bash&#039;&#039; n&#039;auto-complète pas en &#039;&#039;ubridge&#039;&#039;, c&#039;est que &amp;lt;code&amp;gt;/usr/bin/ubridge&amp;lt;/code&amp;gt; n&#039;a pas les bons droits. Sinon c&#039;est que c&#039;est un problème inconnu (ce qui ne serait pas surprenant vu comment c&#039;est une galère à installer).&lt;br /&gt;
&lt;br /&gt;
Pour régler ça. Faire ceci :&lt;br /&gt;
 chown yohan:ubridge /usr/bin/ubridge&lt;br /&gt;
 setcap cap_net_admin,cap_net_raw=ep /usr/bin/ubridge&lt;br /&gt;
&lt;br /&gt;
Ce problème peut également survenir après une mise à jour de &#039;&#039;GNS3&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Utilisation des Ios On Unix (IOU)=&lt;br /&gt;
&#039;&#039;IOS on UNIX&#039;&#039; est un &#039;&#039;IOS&#039;&#039; qui tourne comme un programme sur une distribution &#039;&#039;Linux&#039;&#039; (ça aurai donc dû s&#039;appeler &#039;&#039;IOL&#039;&#039;, on est d&#039;accord...). L’intérêt de cette solution est quelle permet de s&#039;affranchir de la principale lacune de &#039;&#039;GNS3&#039;&#039; : l&#039;impossibilité d&#039;utiliser des commutateurs. Les &#039;&#039;IOU&#039;&#039; permettent également d&#039;utiliser un grand nombre de fonctions réservées au haut de gamme des chez &#039;&#039;Cisco&#039;&#039;. Sous &#039;&#039;Windows&#039;&#039;, &#039;&#039;GNS3&#039;&#039; utilise [[qemu]] pour émuler une distribution &#039;&#039;Linux&#039;&#039; afin de faire tourner &#039;&#039;IOU&#039;&#039;, ce qui en diminue très grandement l&#039;intérêt (en même temps qu&#039;elle idée d&#039;utiliser &#039;&#039;Windows&#039;&#039;...).&lt;br /&gt;
&lt;br /&gt;
Autre chose : Je n&#039;ai pas réussi à déterminer si l&#039;utilisation des &#039;&#039;IOU&#039;&#039; représentait une violation de licence car comme à son habitude, &#039;&#039;Cisco&#039;&#039; pratique l’obscurantisme sur les détails et personne ne semble se soucier de ce sujet...&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;IOU&#039;&#039; sont des programmes 32 bits (sans commentaires...), on est donc obligé d&#039;ajouter une dépendance &#039;&#039;i386&#039;&#039; dans notre chère distribution &#039;&#039;amd64&#039;&#039;.&lt;br /&gt;
 dpkg --add-architecture i386&lt;br /&gt;
&lt;br /&gt;
 apt update&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Attention si vous utilisez ma documentation sur [[apt-mirror]] et que des erreurs 404 s&#039;affichent dû au fait que vous n&#039;avez pas l&#039;ensemble des dépôts &#039;&#039;i386&#039;&#039; en local (même si c&#039;est des dépôts qui n&#039;ont rien avoir avec la choucroute), je vous recommande de changer de serveur &#039;&#039;DNS&#039;&#039; dans &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; le temps de l&#039;installation sinon vous allez tourner en rond avec des erreurs de dépendance APT bien casse couille (c&#039;est du vécu) sans comprendre la raison de toute cette merde.&#039;&#039;&lt;br /&gt;
 apt install libssl1.1:i386&lt;br /&gt;
&lt;br /&gt;
Il faut désormais créer un lien symbolique pour que ce balo d{{&#039;}}&#039;&#039;IOU&#039;&#039; la trouve (bah oui, c&#039;est trop compliqué de pointer sur la bonne librairie hein, on va laisser l&#039;utilisateur faire le travail à la place des dev de &#039;&#039;Cisco&#039;&#039; tien)&lt;br /&gt;
 ln -s /usr/lib/i386-linux-gnu/libcrypto.so.1.1 /usr/lib/libcrypto.so.4&lt;br /&gt;
&lt;br /&gt;
Pour que &#039;&#039;IOU&#039;&#039; fonctionne, il faut une licence, que l&#039;on va devoir générer. Mais avant toute chose il faut faire pointer notre interface de lien local sur notre nom d&#039;hôte ainsi qu&#039;un nom de domaine de chez &#039;&#039;Cisco&#039;&#039; (probablement un mécanisme de vérification de licence). Dans mon exemple, mon nom d&#039;hôte est &#039;&#039;debian&#039;&#039;, adaptez à votre cas.&lt;br /&gt;
 echo &amp;quot;debian&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
 hostname debian&lt;br /&gt;
 echo -e &amp;quot;127.0.0.1 debian\n127.0.0.1 xml.cisco.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
{{attention|La suite de cette procédure doit être exécuté en utilisateur standard.}}&lt;br /&gt;
&lt;br /&gt;
Téléchargez le script de génération de licence pour &#039;&#039;Python2&#039;&#039; (obsolète) :&lt;br /&gt;
 wget https://doc.ycharbi.fr/fichiers/r%c3%a9seaux/cisco/iou/CiscoKeyGen.py&lt;br /&gt;
&lt;br /&gt;
Pour [https://timigate.com/2021/10/cisco-iou-l2-keygen-license-for-gns3.html Python3] ([http://www.ipvanquish.com/download/CiscoIOUKeygen3f.py actuel]) :&lt;br /&gt;
 wget https://doc.ycharbi.fr/fichiers/r%c3%a9seaux/cisco/iou/CiscoIOUKeygen3f.py&lt;br /&gt;
&lt;br /&gt;
Générez la licence&lt;br /&gt;
 python2 CiscoKeyGen.py || python3 CiscoIOUKeygen3f.py&lt;br /&gt;
&lt;br /&gt;
Copiez la section suivante dans &amp;lt;code&amp;gt;~/.iourc&amp;lt;/code&amp;gt; (celle du script hein, pas la mienne, sinon ça va pas marcher gros bêta)&lt;br /&gt;
 [license]                                                                               &lt;br /&gt;
 debian = b0acc48944f31bd4;&lt;br /&gt;
&lt;br /&gt;
Créez le répertoire d&#039;accueil des &#039;&#039;IOU&#039;&#039;&lt;br /&gt;
 mkdir -p ~/GNS3/images/IOU/&lt;br /&gt;
&lt;br /&gt;
Téléchargez des &#039;&#039;IOU&#039;&#039; (avec la commande suivante ou [https://{{SERVERNAME}}/fichiers/r%c3%a9seaux/cisco/iou/ ici])&lt;br /&gt;
 wget https://doc.ycharbi.fr/fichiers/r%c3%a9seaux/cisco/iou/i86bi-linux-l2-adventerprisek9-15.1a.bin https://doc.ycharbi.fr/fichiers/r%c3%a9seaux/cisco/iou/i86bi-linux-l3-adventerprisek9-15.2.4M1.bin -P ~/GNS3/images/IOU/&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;IOU&#039;&#039; étant des programmes, il faut leur donner les droits d&#039;exécution&lt;br /&gt;
 chmod +x ~/GNS3/images/IOU/*.bin&lt;br /&gt;
&lt;br /&gt;
La suite ce passe sous &#039;&#039;GNS3&#039;&#039; :&lt;br /&gt;
# Ajouter la licence dans GNS3 &amp;lt;code&amp;gt;Edit &amp;gt; Préférences &amp;gt; IOS on UNIX &amp;gt; Edit | Aller chercher ~/.iourc &amp;gt; Apply&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ensuite, ajouter un modèle IOU dans GNS3 &amp;lt;code&amp;gt;Edit &amp;gt; Préférences &amp;gt; IOS on UNIX &amp;gt; IOU Device &amp;gt; New&amp;lt;/code&amp;gt;&lt;br /&gt;
# Profitez d&#039;un truck qui déchire pour vos archis !&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* &#039;&#039;&#039;Principale :&#039;&#039;&#039; Principale : https://nlabweb.wordpress.com/2016/04/06/running-cisco-switches-on-gns3/#more-147&lt;br /&gt;
* &#039;&#039;&#039;Problème de libcrypto.so.4 :&#039;&#039;&#039; https://www.youtube.com/watch?v=chcHuF3nEoQ&lt;br /&gt;
* &#039;&#039;&#039;CiscoKeyGen :&#039;&#039;&#039; https://gist.github.com/paalfe/8edd82f780c650ae2b4a/archive/bd7b6b8a81c338359e6de4ff0ed0def9f7dc9146.zip&lt;br /&gt;
* &#039;&#039;&#039;Images IOU :&#039;&#039;&#039; https://drive.google.com/file/d/0B8tSmsEbVQs-bjVXY3VqMFJrc1E/view&lt;br /&gt;
&lt;br /&gt;
==À creuser==&lt;br /&gt;
Se passer de &#039;&#039;GNS3&#039;&#039; pour les &#039;&#039;IOU&#039;&#039; : https://myhowtosandprojects.blogspot.fr/2013/08/installing-and-running-iou-checking_10.html&lt;br /&gt;
&lt;br /&gt;
=Utilisation de Docker=&lt;br /&gt;
[[Docker]] est une solution de conteneurisation. Il permettra de créer des serveurs et des postes clients virtuelles ainsi que faire des analyses réseaux au sein de l&#039;infra virtuelle. Docker n&#039;est malheureusement pas dans les dépôts Debian. Il faut donc ajouter le dépôt officiel à la main.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Pour l&#039;installation de &#039;&#039;Docker&#039;&#039;, ce référer à la page suivante : [[Docker#Installation|Installation de Docker]].&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Ajout de l&#039;utilisateur se servant de &#039;&#039;GNS3&#039;&#039; au groupe &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt; (sinon l&#039;application ne pourra pas se connecter au démon &#039;&#039;docker&#039;&#039; pour interagir avec les conteneurs)&lt;br /&gt;
 usermod -aG docker &amp;lt;VOTRE_UTILISATEUR_DE_GNS3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je n&#039;ai pas trouver comment appliquer ces changements autrement qu&#039;en redémarrant, navré&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
Téléchargement d&#039;un conteneur &#039;&#039;Kalilinux&#039;&#039; (en &#039;&#039;root&#039;&#039;)&lt;br /&gt;
 docker pull gns3/kalilinux&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il y a un bon nombre de conteneurs téléchargeables dans le [https://hub.docker.com/r/gns3/ dépôt Docker du projet GNS3]. Je vous conseils d&#039;aller y faire un tour.}}&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant ajouter le conteneur à &#039;&#039;GNS3&#039;&#039; en tant que modèle. Pour se faire il faut aller dans les paramètres, dans la section dédié à &#039;&#039;Docker&#039;&#039; et faire du clickodrôme jusqu&#039;à l&#039;ajout de notre conteneur (le 3ème lien des sources montre la procédure officielle si vraiment vous êtes en galère).&lt;br /&gt;
&lt;br /&gt;
==Problèmes==&lt;br /&gt;
Tout comme &#039;&#039;ubridge&#039;&#039;, &#039;&#039;Docker&#039;&#039; peut ne pas fonctionner pour cause de permission. Si la commande &amp;lt;code&amp;gt;docker ps&amp;lt;/code&amp;gt; renvoi une erreur de permission en tant que utilisateur utilisant &#039;&#039;GNS3&#039;&#039;, c&#039;est qu&#039;il n&#039;appartient pas au groupe &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
J&#039;ai également eu l&#039;erreur &amp;lt;code&amp;gt;Docker has returned an error: 304 b&amp;lt;/code&amp;gt; avec &#039;&#039;GNS3 1.5.3&#039;&#039;. Je n&#039;ai pas eu le temps de résoudre cette erreur qui a été corrigé avec la mise à jour 2.0 de &#039;&#039;GNS3&#039;&#039; et je n&#039;ai pas de piste de résolution (ça semble être le problème de merde bien chiant à régler avec aucune aide sur Internet). Dieu vous garde si vous la rencontrez...&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
* https://store.docker.com/editions/community/docker-ce-server-debian?tab=description&lt;br /&gt;
* http://stackoverflow.com/questions/21871479/docker-cant-connect-to-docker-daemon&lt;br /&gt;
* https://docs.gns3.com/1KGkv1Vm5EgeDusk1qS1svacpuQ1ZUQSVK3XqJ01WKGc/index.html&lt;br /&gt;
* https://hub.docker.com/r/gns3/kalilinux/&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* http://docs.gns3.com/1QXVIihk7dsOL7Xr7Bmz4zRzTsJ02wklfImGuHwTlaA4/&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Installation_msix_-_windows&amp;diff=1539</id>
		<title>Installation msix - windows</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Installation_msix_-_windows&amp;diff=1539"/>
		<updated>2024-09-25T18:25:05Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:windows  Il peut arriver que certaines personnes/entités n&amp;#039;ayant aucun sens de respect et d&amp;#039;hygiène numérique vous imposes un jour (par de la [https://www.youtube.com/watch?v=WWbdJBoPthU coercition douce]) d&amp;#039;installer une application en provenance du [https://www.microsoft.com/fr-WF/store/ Windows Store]. Dans ce type de cas, comme vous n&amp;#039;êtes pas suicidaire, vous aurez pris soin d&amp;#039;utiliser un PC dédié avec un [https://learn.microsoft.com/en-us... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:windows]]&lt;br /&gt;
&lt;br /&gt;
Il peut arriver que certaines personnes/entités n&#039;ayant aucun sens de respect et d&#039;hygiène numérique vous imposes un jour (par de la [https://www.youtube.com/watch?v=WWbdJBoPthU coercition douce]) d&#039;installer une application en provenance du [https://www.microsoft.com/fr-WF/store/ Windows Store]. Dans ce type de cas, comme vous n&#039;êtes pas suicidaire, vous aurez pris soin d&#039;utiliser un PC dédié avec un [https://learn.microsoft.com/en-us/windows/whats-new/ltsc/overview Windows LTSC] installé spécifiquement pour l&#039;usage. Seulement voilà, reste l&#039;épineux problème du compte &#039;&#039;Microsoft&#039;&#039; pour pouvoir installer ladite application depuis le magasin dédié.&lt;br /&gt;
&lt;br /&gt;
Premièrement, le &#039;&#039;Windows Store&#039;&#039; n&#039;est fort heureusement pas présent sur la branche &#039;&#039;LTSC&#039;&#039; (c&#039;est en partie pour cela qu&#039;on l&#039;utilise d&#039;ailleurs), deuxièmement, avoir un compte &#039;&#039;Microsoft&#039;&#039; et le lié à &#039;&#039;Windows&#039;&#039; est complètement inconscient au vu de la masse d&#039;informations de télémétrie que cette opération active (faites un [[Wireshark]] si vous souhaitez vous faire peur).&lt;br /&gt;
&lt;br /&gt;
Pour contourner cela, nous allons passer par &#039;&#039;Powershell&#039;&#039; afin d&#039;installer le logiciel empaqueté dans ce qui est appelé un &#039;&#039;MSIXBundle&#039;&#039; via une extension &amp;lt;code&amp;gt;.msix&amp;lt;/code&amp;gt;. La difficulté sera probablement de vous procurer ce paquet. Dans mon exemple, le logiciel d’[https://fr.wikipedia.org/wiki/R%C3%A9v%C3%A9lations_d&#039;Edward_Snowden espionnage industriel] &#039;&#039;Microsoft Teams&#039;&#039; sera utilisé et est récupérable via une [https://learn.microsoft.com/en-us/microsoftteams/new-teams-bulk-install-client#option-1b-download-and-install-new-teams-using-an-offline-installer page Microsoft] non mise en avant (la page trouvable facilement demande un [https://www.microsoft.com/fr-fr/microsoft-teams/compare-microsoft-teams-home-options compte Microsoft] bien évidemment...).&lt;br /&gt;
&lt;br /&gt;
Une fois récupéré, le fichier peut être installé par simple commande via une invite &#039;&#039;Powershell&#039;&#039; en administrateur :&lt;br /&gt;
 Add-AppxPackage -Path C:\Users\toto\Downloads\MSTeams-x64.msix&lt;br /&gt;
&lt;br /&gt;
Les informations du paquet installé se récupèrent ainsi :&lt;br /&gt;
 Get-AppxPackage -Name &amp;quot;MSTeams&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pour le désinstaller :&lt;br /&gt;
 Get-AppxPackage -AllUsers | Where-Object { $_.Name -like &amp;quot;*MSTeams*&amp;quot; } | Remove-AppxPackage&lt;br /&gt;
&lt;br /&gt;
Enfin, n&#039;oubliez pas que tout ce que vous dites via cet outil passe par les serveurs de &#039;&#039;Microsoft&#039;&#039;, dites-en donc le moins possible et restez vague...&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* https://www.thewindowsclub.com/how-to-install-msixbundle-using-powershell&lt;br /&gt;
* Manuel officiel :&lt;br /&gt;
** https://learn.microsoft.com/en-us/powershell/module/appx/add-appxpackage?view=windowsserver2022-ps&lt;br /&gt;
** https://learn.microsoft.com/en-us/powershell/module/appx/get-appxpackage?view=windowsserver2022-ps&lt;br /&gt;
** https://learn.microsoft.com/en-us/powershell/module/appx/remove-appxpackage?view=windowsserver2022-ps&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Busybox&amp;diff=1538</id>
		<title>Busybox</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Busybox&amp;diff=1538"/>
		<updated>2024-09-07T19:11:30Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : /* Socket réseau en utilisateur standard */ Correction d&amp;#039;un résidu d&amp;#039;ancienne balise de syntaxe qui causait un problème d&amp;#039;affichage avec le modèle &amp;quot;Astuce&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
[https://fr.wikipedia.org/wiki/BusyBox Busybox] est un exécutable regroupant une multitude d&#039;utilitaires généralement disponibles via [https://fr.wikipedia.org/wiki/GNU_Core_Utilities GNU Core Utilities]. Il a l&#039;avantage de ne prendre que très peu de place et peut être utilisé pour faire des [[Busybox_init|systèmes embarqués très simples]].&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Via le gestionnaire de paquet==&lt;br /&gt;
 apt install busybox&lt;br /&gt;
&lt;br /&gt;
==Via les sources==&lt;br /&gt;
Le paquet &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;build-essential&amp;lt;/code&amp;gt; est nécessaire pour utiliser la commande &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;make&amp;lt;/code&amp;gt;.&lt;br /&gt;
 wget https://busybox.net/downloads/busybox-1.36.1.tar.bz2&lt;br /&gt;
 tar xf busybox-1.36.1.tar.bz2&lt;br /&gt;
 cd busybox-1.36.1/&lt;br /&gt;
 make defconfig&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Note : le code source est également disponible dans [https://{{SERVERNAME}}/fichiers/système/applications/busybox/busybox-1.36.1.tar.bz2 nos fichiers].&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il est possible d&#039;embarquer les dépendances nécessaires au fonctionnement de l&#039;ensemble directement dans le binaire via la commande de compilation &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;make LDFLAGS=&amp;quot;--static&amp;quot;&amp;lt;/syntaxhighlight&amp;gt; (ce dernier sera par conséquent plus lourd). Ceci est utile lorsque &#039;&#039;Busybox&#039;&#039; est intégré à un système dépourvu des bibliothèques en question.}}&lt;br /&gt;
&lt;br /&gt;
Un exécutable &#039;&#039;busybox&#039;&#039; a été créé dans le répertoire courant.&lt;br /&gt;
&lt;br /&gt;
La commande &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;make defconfig&amp;lt;/code&amp;gt; permet de créer le fichier de configuration pour &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;make&amp;lt;/code&amp;gt; (&#039;&#039;.config&#039;&#039;). Les commandes de pré-configurations possibles sont :&lt;br /&gt;
* &#039;&#039;&#039;make defconfig&#039;&#039;&#039; : Créé la configuration la plus saine possible. Ça active la plupart des fonctionnalités sans quelques outils de débogage ainsi que les outils nécessitants des modifications du système comme les noms de périphériques &#039;&#039;selinux&#039;&#039; ou &#039;&#039;devfs&#039;&#039;. Utiliser cette option si vous voulez démarrer depuis un &#039;&#039;Busybox&#039;&#039; complet pour, par la suite, écrémer les fonctionnalités pour en avoir un plus petit.&lt;br /&gt;
* &#039;&#039;&#039;make allnoconfig&#039;&#039;&#039; : Désactive tout. Cela crée une petite version de &#039;&#039;Busybox&#039;&#039; qui ne fait rien. Commencez ici si vous savez exactement ce que vous voulez et que vous souhaitez sélectionner uniquement ces fonctionnalités.&lt;br /&gt;
* &#039;&#039;&#039;make menuconfig&#039;&#039;&#039; : Modifie interactivement le fichier &#039;&#039;.config&#039;&#039; via une interface de menu à plusieurs niveaux. Utilisez-le après l&#039;un des deux précédents.&lt;br /&gt;
Les autres options sont :&lt;br /&gt;
* &#039;&#039;&#039;make oldconfig&#039;&#039;&#039; : Mettre à jour un vieux fichier &#039;&#039;.config&#039;&#039; pour une nouvelle version de &#039;&#039;Busybox&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;make allyesconfig&#039;&#039;&#039; : Sélectionnez absolument tout. Cela crée une version statiquement liée de &#039;&#039;Busybox&#039;&#039; remplie de code de débogage, avec des dépendances sur &#039;&#039;selinux&#039;&#039;, en utilisant des noms de &#039;&#039;devfs&#039;&#039;... Cela s&#039;assure que tout est compilé. Que le résultat fasse quelque chose d&#039;utile ou non est une question ouverte.&lt;br /&gt;
* &#039;&#039;&#039;make randconfig&#039;&#039;&#039; : Créer une configuration aléatoire à des fins de tests.&lt;br /&gt;
&lt;br /&gt;
=Socket réseau en utilisateur standard=&lt;br /&gt;
Par défaut, un système &#039;&#039;Linux&#039;&#039; n&#039;autorise la création et la gestion d&#039;un socket réseau que par l&#039;utilisateur &#039;&#039;root&#039;&#039;. Il peut être pratique de permettre certains exécutables à le faire via un utilisateur standard (c&#039;est chiant d&#039;avoir à taper le mot de passe &#039;&#039;root&#039;&#039; tout le temps). Pour ce faire, nous utiliserons les [[Linux capabilities]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Autorisation de redirection réseau&#039;&#039;&#039;&lt;br /&gt;
 setcap CAP_NET_BIND_SERVICE=+eip /bin/busybox&lt;br /&gt;
&lt;br /&gt;
{{Astuce|On peut voir cette autorisation avec la commande &amp;lt;code&amp;gt;getcap /bin/busybox&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Les utilisateurs standards peuvent désormais utiliser le serveur &#039;&#039;HTTP&#039;&#039; ou autres intégré à &#039;&#039;Busybox&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://superuser.com/questions/710253/allow-non-root-process-to-bind-to-port-80-and-443/892391&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
Nous allons partir du principe que l&#039;emplacement de notre binaire &#039;&#039;busybox&#039;&#039; se trouve dans notre variable d&#039;environnement &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;$PATH&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lister les programmes disponibles dans notre Busybox&#039;&#039;&#039;&lt;br /&gt;
 busybox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Afficher le manuel des outils contenus dans Busybox&#039;&#039;&#039;&lt;br /&gt;
 man busybox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Avec un &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;/&amp;lt;/code&amp;gt; suivi du nom de la commande + &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;entrer&amp;lt;/code&amp;gt; + &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;n&amp;lt;/code&amp;gt; on tombe directement sur le manuel de l&#039;outil désiré.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Serveur WEB==&lt;br /&gt;
&#039;&#039;&#039;Utiliser le serveur WEB intégré&#039;&#039;&#039;&lt;br /&gt;
 busybox httpd -f -v -h /tmp/foo/&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Le serveur httpd ne liste pas les fichiers, il faut entrer une URL complète comme pour le TFTP. Cependant, il redirige automatiquement sur un index.html si présent.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-f&#039;&#039;&#039; : Ne rend pas la main. Ça permet de fermer le serveur web avec un &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;ctrl+c&amp;lt;/code&amp;gt; au lieu de ce faire chier avec les commandes &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;ps&amp;lt;/code&amp;gt; et &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;kill&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;-v&#039;&#039;&#039; : affiche les IP des clients se connectant et le message renvoyé par le serveur&lt;br /&gt;
* &#039;&#039;&#039;-h&#039;&#039;&#039; : Spécifie le répertoire de travail du serveur. Si ce paramètre n&#039;est pas renseigné, le répertoire courant est utilisé&lt;br /&gt;
&lt;br /&gt;
==Serveur DHCP==&lt;br /&gt;
&#039;&#039;&#039;Créer le fichiers du processus&#039;&#039;&#039;&lt;br /&gt;
 touch /tmp/udhcpd.pid&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Créer le fichier contenant les baux DHCP&#039;&#039;&#039;&lt;br /&gt;
 touch /tmp/udhcpd.leases&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Créer un fichier de configuration&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt; /tmp/udhcpd.conf &amp;lt;&amp;lt; _EOF_&lt;br /&gt;
# Plage d&#039;adresse attribuable&lt;br /&gt;
start 192.168.0.1 # Par défaut: 192.168.0.20&lt;br /&gt;
end 192.168.0.253 # Par défaut: 192.168.0.254&lt;br /&gt;
&lt;br /&gt;
# Interface réseau d&#039;écoute&lt;br /&gt;
interface eth1 # Par défaut: eth0&lt;br /&gt;
&lt;br /&gt;
# Nombre maximum de baux &lt;br /&gt;
max_leases 253 # Par défaut: 254&lt;br /&gt;
&lt;br /&gt;
# Stocker le temps restant pour chaque bail dans le fichier des baux&lt;br /&gt;
# C&#039;est utile sur les systèmes embarqués ne pouvant garder l&#039;heure après un redémarrage&lt;br /&gt;
# Si cette valeur est définie à &amp;quot;no&amp;quot;, l&#039;heure de fin de bail sera stocker dans le fichier&lt;br /&gt;
# des baux au lieu du temps restant avant expiration&lt;br /&gt;
&lt;br /&gt;
#remaining yes # Par défaut: yes&lt;br /&gt;
&lt;br /&gt;
# Localisation du fichier des baux&lt;br /&gt;
lease_file /tmp/udhcpd.leases&lt;br /&gt;
&lt;br /&gt;
# Localisation du fichier processus&lt;br /&gt;
pidfile /tmp/udhcpd.pid # Par défaut: /var/run/udhcpd.pid&lt;br /&gt;
&lt;br /&gt;
# Les options suivantes sont pour le PXE&lt;br /&gt;
#siaddr 192.168.0.22 # Par défaut: 0.0.0.0&lt;br /&gt;
#sname zorak # Par défaut: (none)&lt;br /&gt;
#boot_file /var/nfs_root # Par défaut: (none)&lt;br /&gt;
&lt;br /&gt;
# Options DHCP&lt;br /&gt;
# Elles peuvent être spécifiées via le mot clé &amp;quot;option&amp;quot; ou &amp;quot;opt&amp;quot; qui est un alias.&lt;br /&gt;
# La seule options définie par défaut est &amp;quot;lease&amp;quot; pour définir la durée des baux&lt;br /&gt;
opt dns 192.168.170.171 80.67.169.12&lt;br /&gt;
option subnet 255.255.255.0&lt;br /&gt;
opt router 192.168.0.254&lt;br /&gt;
#opt wins 192.168.10.10 # Ajoute un serveur WINS&lt;br /&gt;
#option dns 129.219.13.81 # Ajoute un autre DNS aux 2 autres ci-dessus&lt;br /&gt;
option domain local&lt;br /&gt;
option lease 864000 # 10 jours en secondes&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez adapter les adresses et nom d&#039;interface avec les commande suivante en remplaçant &#039;&#039;toto&#039;&#039; par la donnée appropriée:&lt;br /&gt;
 sed -i &#039;s/192\.168\.0\./192\.168\.toto./g&#039; /tmp/udhcpd.conf&lt;br /&gt;
 sed -i &#039;s/eth1/toto/g&#039; /tmp/udhcpd.conf&lt;br /&gt;
&lt;br /&gt;
Paramètres possibles :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Paramètre !! Effet !! Valeur par défaut&lt;br /&gt;
|-&lt;br /&gt;
| Paramètre 1 || Il fait ça || yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Liste exhaustive des options supportés. Voir le fichier source &#039;&#039;options.c&#039;&#039; :&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Option !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| toto || titi&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exécuter le serveur DHCP&#039;&#039;&#039;&lt;br /&gt;
 busybox udhcpd -fv /tmp/udhcpd.conf&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-f&#039;&#039;&#039; : Ne rend pas la main. Ça permet de fermer le serveur DHCP avec un &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;ctrl+c&amp;lt;/code&amp;gt; au lieu de ce faire chier avec les commandes &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;ps&amp;lt;/code&amp;gt; et &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;kill&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;-v&#039;&#039;&#039; : affiche les requêtes &#039;&#039;ACK&#039;&#039; et &#039;&#039;OFFER&#039;&#039; entre le serveur et les clients (on voit l&#039;IP attribué de ce fait)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Sources de la section&#039;&#039;&#039;&lt;br /&gt;
* Page officielle de udhcpd: https://udhcp.busybox.net/&lt;br /&gt;
* Fichier de configuration exemple: https://udhcp.busybox.net/udhcpd.conf&lt;br /&gt;
&lt;br /&gt;
==NTP==&lt;br /&gt;
===Serveur NTP===&lt;br /&gt;
Définir l&#039;horloge système depuis une source réseau&lt;br /&gt;
 busybox ntpd -d -n -I eth0 -l -p 0.debian.pool.ntp.org&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-d&#039;&#039;&#039; : mode verbeux&lt;br /&gt;
* &#039;&#039;&#039;-n&#039;&#039;&#039; : ne pas démoniser (ne pas exécuter en arrière plan)&lt;br /&gt;
* &#039;&#039;&#039;-I&#039;&#039;&#039; : écouter sur l&#039;interface spécifiée pour les requêtes clientes&lt;br /&gt;
* &#039;&#039;&#039;-l&#039;&#039;&#039; : ouvre le socket &#039;&#039;UDP&#039;&#039; sur le port 123 pour les requêtes clientes&lt;br /&gt;
* &#039;&#039;&#039;-p&#039;&#039;&#039; : serveur de référence sur lequel se synchronise notre serveur&lt;br /&gt;
&lt;br /&gt;
==TFTP==&lt;br /&gt;
===Client TFTP===&lt;br /&gt;
Télécharger un fichier via &#039;&#039;TFTP&#039;&#039;&lt;br /&gt;
 busybox tftp -r toto.txt 192.168.100.2 -g&lt;br /&gt;
&lt;br /&gt;
Téléverser un fichier via &#039;&#039;TFTP&#039;&#039;&lt;br /&gt;
 busybox tftp -l toto.txt 192.168.100.2 -p&lt;br /&gt;
&lt;br /&gt;
===Serveur TFTP===&lt;br /&gt;
Le serveur &#039;&#039;TFTP&#039;&#039; est rarement embarqué dans le &#039;&#039;Busybox&#039;&#039; des distributions &#039;&#039;Linux&#039;&#039;. Dans ce cas, il faudra le compilé soit même (testé avec la version 1.36.1).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Busybox tftpd&#039;&#039; a besoin de s&#039;appuyer sur un programme (lui même présent dans &#039;&#039;Busybox&#039;&#039;) d&#039;ouverture de socket réseau : &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;udpsvd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 /tmp/busybox-1.36.1/busybox udpsvd -vE 0.0.0.0 69 /tmp/busybox-1.36.1/busybox tftpd -c /tmp/tftp/&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-r&#039;&#039;&#039; : lecture seule&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; : téléversements autorisés&lt;br /&gt;
* &#039;&#039;&#039;-u&#039;&#039;&#039; : rendre l&#039;utilisateur passé en paramètre propriétaire des fichiers téléversés&lt;br /&gt;
* &#039;&#039;&#039;-l&#039;&#039;&#039; : journaliser dans &#039;&#039;Syslog&#039;&#039; en plus du &#039;&#039;Stdout&#039;&#039; (non fonctionnel d&#039;après mes tests)&lt;br /&gt;
&lt;br /&gt;
==Netcat==&lt;br /&gt;
Les commandes [[netcat]] sont identique à la version &#039;&#039;APT&#039;&#039; (avec quelques options en moins).&lt;br /&gt;
 busybox nc -l -p 2323&lt;br /&gt;
&lt;br /&gt;
 busybox nc ipserver 2323&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Envoyer un [https://tutorials.technology/tutorials/How-to-transfer-files-over-the-network-using-Netcat.html fichier]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Sur le serveur :&lt;br /&gt;
 busybox nc -l -p 9999 &amp;gt; /tmp/titi.dat&lt;br /&gt;
&lt;br /&gt;
Sur le client :&lt;br /&gt;
 busybox nc 192.168.0.1 9999 &amp;lt; /tmp/titi/titi.dat&lt;br /&gt;
&lt;br /&gt;
==Terminal série==&lt;br /&gt;
On peut remplacer l&#039;usage de [[Minicom]] par &#039;&#039;Busybox&#039;&#039; avec l&#039;outil embarqué &#039;&#039;Microcom&#039;&#039;.&lt;br /&gt;
 busybox microcom -s 9600 /dev/ttyUSB0&lt;br /&gt;
&lt;br /&gt;
Pour quitter &#039;&#039;Microcom&#039;&#039;, faites la séquence d&#039;échappement &amp;lt;code lang=&amp;quot;bash&amp;quot; inline&amp;gt;ctrl+x&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* https://busybox.net/FAQ.html#configure&lt;br /&gt;
* https://busybox.net/downloads/BusyBox.html&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Proftpd&amp;diff=1537</id>
		<title>Proftpd</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Proftpd&amp;diff=1537"/>
		<updated>2024-09-01T20:51:37Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : /* SFTP */ Correction d&amp;#039;une faute de français&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Service_partage]]&lt;br /&gt;
&lt;br /&gt;
[http://proftpd.org/ ProFTPd] est un logiciel permettant de monter un serveur de fichiers basé sur les protocoles &#039;&#039;FTP&#039;&#039; ; &#039;&#039;FTPS&#039;&#039; et [[Sftp-server|SFTP]]. Il a la particularité d&#039;utiliser des fichiers de configuration proches de ceux d&#039;[[Apache2]].&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
Référence dans son domaine, il est probablement disponible dans les dépôts de la distribution &#039;&#039;Linux&#039;&#039; que vous utilisez. Pour &#039;&#039;Debian 12&#039;&#039;, la commande suivante permet d&#039;installer le paquet&lt;br /&gt;
 apt install --no-install-recommends proftpd proftpd-mod-crypto&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ProFTPd&#039;&#039; supporte un grand nombre de modules. Le paquet &amp;lt;code&amp;gt;proftpd-mod-crypto&amp;lt;/code&amp;gt; permet d&#039;utiliser &#039;&#039;FTP&#039;&#039; sur &#039;&#039;TLS&#039;&#039;, aussi appelé &#039;&#039;FTPS&#039;&#039; ainsi que &#039;&#039;SFTP&#039;&#039;, le protocole de transfert de fichiers sur [[Openssh|SSH]].&lt;br /&gt;
&lt;br /&gt;
==SFTP==&lt;br /&gt;
De nos jours, l&#039;utilisation des protocoles &#039;&#039;FTP&#039;&#039; et sont pendant chiffré, &#039;&#039;FTPS&#039;&#039;, est dépréciée. Les raisons principales de cette tendance, malgré les qualités indéniables de ces derniers sont principalement dû à l&#039;explosion des &#039;&#039;NAT/PAT&#039;&#039; sur les réseaux &#039;&#039;WAN&#039;&#039; ainsi que la systématisation des règles de pare-feux. &#039;&#039;FTP&#039;&#039; est en effet un vieux protocole imaginé à une époque où il était normal (allez savoir pourquoi) d&#039;utiliser une multitude de ports pour réaliser une action simple. Aussi, le port 20/&#039;&#039;TCP&#039;&#039; était utilisé pour les données alors que le 21/&#039;&#039;TCP&#039;&#039; servait pour transmettre les commandes. La version chiffrée quant à elle utilisait carrément des plages de ports au dessus de 1024 en plus de ceux mentionnés, rendant toute tentative de filtrage fin veine et occasionnait des problèmes de fiabilité avec certaines passerelles &#039;&#039;NAT&#039;&#039; (que je n&#039;ai pour ma part jamais rencontré).&lt;br /&gt;
&lt;br /&gt;
Cependant, la vacance occasionnée par la dépréciation de ces protocoles n&#039;a jamais été réellement comblée. [[Apache2#Partage_WebDAV|WebDAV]] n&#039;est pas très fiable dans ces implémentations (surtout sous [[Windows_net_use#Usages_concrets|Windows]]) et est plus que casse pied à configurer côté serveur (y&#039;a toujours un truc qui va pas) ; &#039;&#039;HTTP&#039;&#039; seul ne permet pas le transfert de répertoires, [[Samba]] et [[Nfs|NFS]] ne sont pas fait pour du &#039;&#039;WAN&#039;&#039; en plus de proposer une sécurité (surtout pour ce dernier) très discutable, &#039;&#039;ISCSI&#039;&#039; ne fonctionne qu&#039;en mode bloc ; [[Sftp-server|SFTP]] embarqué dans un serveur &#039;&#039;SSH&#039;&#039; utilise traditionnellement des utilisateurs &#039;&#039;POSIX&#039;&#039;, ce qui oblige à porter une attention toute particulière au durcissement de la configuration en plus de permettre des répercutions catastrophiques en cas de faille (un utilisateur destiné au transfert de fichiers peut, en fin de compte, se connecter au serveur...) ; etc... Aucun remplaçant potentiel n&#039;a donc su prendre la relève avec la légèreté et les fonctionnalités du protocole de transfert de fichiers (&#039;&#039;File Transfer Protocol&#039;&#039;) traditionnel :&lt;br /&gt;
* installation et utilisation simple&lt;br /&gt;
* utilisateurs virtuels avec base de données de multiple types allant du fichier plain à la base [[MariaDB - Gestion utilisateurs|SQL]] en passant par l&#039;annuaire [[Ldap|LDAP]]&lt;br /&gt;
* emprisonnement des comptes utilisateurs dans un répertoire (&#039;&#039;chroot&#039;&#039;)&lt;br /&gt;
* pas de &#039;&#039;shell&#039;&#039;&lt;br /&gt;
* gestion des droits&lt;br /&gt;
* reprise de téléchargements partiels&lt;br /&gt;
* performances maximales&lt;br /&gt;
* support très large&lt;br /&gt;
&lt;br /&gt;
L&#039;implémentation de &#039;&#039;SFTP&#039;&#039; proposée par &#039;&#039;ProFTPd&#039;&#039; s&#039;avère alors particulièrement intéressante car elle est décorrélée de tout serveur &#039;&#039;SSH&#039;&#039; et permet l&#039;utilisation de comptes virtuels emprisonnés sans utilisation de &#039;&#039;shell&#039;&#039;, réduisant ainsi drastiquement la surface d&#039;attaque. De plus, ce logiciel est reconnu comme apportant un soin prononcé à la sécurité et est éprouvé depuis plusieurs décennies. Il permettra donc de proposer un service quasiment similaire tout en apportant la confidentialité exigée par l&#039;époque...&lt;br /&gt;
&lt;br /&gt;
===Configuration du service===&lt;br /&gt;
En mode &#039;&#039;SFTP&#039;&#039; uniquement&lt;br /&gt;
 mv /etc/proftpd/proftpd.conf /etc/proftpdproftpd.conf.ori&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt; /etc/proftpd/proftpd.conf&lt;br /&gt;
# Chargement du module SFTP&lt;br /&gt;
LoadModule mod_sftp.c&lt;br /&gt;
&lt;br /&gt;
# Désactiver le service FTPS&lt;br /&gt;
&amp;lt;IfModule mod_tls.c&amp;gt;&lt;br /&gt;
	TLSEngine off&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Activer SFTP&lt;br /&gt;
&amp;lt;IfModule mod_sftp.c&amp;gt;&lt;br /&gt;
	SFTPEngine on&lt;br /&gt;
	Port 2222&lt;br /&gt;
	# Pièger l&#039;utilisateur (chroot) dans son répertoire personnel&lt;br /&gt;
	DefaultRoot ~&lt;br /&gt;
	# Journalisation&lt;br /&gt;
	SFTPLog /var/log/proftpd/sftp.log&lt;br /&gt;
	SyslogLevel info&lt;br /&gt;
	TransferLog /var/log/proftpd/xferlog&lt;br /&gt;
	SystemLog /var/log/proftpd/proftpd.log&lt;br /&gt;
	# UseLastlog on&lt;br /&gt;
&lt;br /&gt;
	SFTPHostKey /etc/proftpd/ssh_host_ed25519_key&lt;br /&gt;
&lt;br /&gt;
	# Méthode d&#039;authentification&lt;br /&gt;
	SFTPAuthMethods publickey&lt;br /&gt;
	SFTPAuthorizedUserKeys file:/etc/proftpd/authorized_keys/%u&lt;br /&gt;
	RequireValidShell off&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Utiliser les utilisateurs virtuels&lt;br /&gt;
&amp;lt;IfModule mod_auth.c&amp;gt;&lt;br /&gt;
	AuthOrder mod_auth_file.c&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Base des utilisateurs virtuels&lt;br /&gt;
&amp;lt;IfModule mod_auth_file.c&amp;gt;&lt;br /&gt;
	AuthUserFile /etc/proftpd/ftpd.passwd&lt;br /&gt;
	AuthGroupFile /etc/proftpd/ftpd.group&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Limiter l&#039;accès aux utilisateurs virtuels&lt;br /&gt;
&amp;lt;Limit LOGIN&amp;gt;&lt;br /&gt;
	AllowUser toto&lt;br /&gt;
	DenyAll&lt;br /&gt;
&amp;lt;/Limit&amp;gt;&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{astuce|La configuration proposée impose l&#039;usage de clés &#039;&#039;SSH&#039;&#039; pour la connexion des clients. Pour permettre l&#039;utilisation des mots de passes en cas d&#039;absence de clé, le mot &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; peut être ajouté à la suite après un espace dans le paramètre correspondant de la façon suivante : &amp;lt;code&amp;gt;SFTPAuthMethods publickey password&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
L&#039;outil &#039;&#039;&#039;exige&#039;&#039;&#039; que le nom d&#039;hôte redirige obligatoirement sur son adresse &#039;&#039;IP&#039;&#039; (il doit probablement utiliser cette information pour la création du socket &#039;&#039;TCP&#039;&#039;). Définissez cette donnée en l&#039;adaptant à votre configuration :&lt;br /&gt;
 echo -e &amp;quot;10.0.0.100\t${HOSTNAME}&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
===Éléments secrets===&lt;br /&gt;
Génération d&#039;une clé &#039;&#039;SSH&#039;&#039; serveur&lt;br /&gt;
 ssh-keygen -t ed25519 -f /etc/proftpd/ssh_host_ed25519_key -N &amp;quot;&amp;quot;&lt;br /&gt;
 chmod 600 /etc/proftpd/ssh_host_ed25519_key&lt;br /&gt;
&lt;br /&gt;
Utilisation des clés &#039;&#039;SSH&#039;&#039; pour les clients&lt;br /&gt;
 mkdir /etc/proftpd/authorized_keys&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Proftpd&#039;&#039; utilise volontairement un format de clé &#039;&#039;SSH&#039;&#039; différent d&#039;[[Openssh|OpenSSH]] pour éviter les conflits avec ce dernier. Il a ainsi choisit la forme décrite dans la [https://www.rfc-editor.org/rfc/rfc4716 RFC 4716]. Il est possible de convertir une clé existante sans altération de l&#039;originale (par retour sur &#039;&#039;stdout&#039;&#039;) via la commande suivante sur le client&lt;br /&gt;
 ssh-keygen -e -f ~/.ssh/id_ed25519.pub&lt;br /&gt;
&lt;br /&gt;
Le résultat est à mettre dans le fichier de clés portant le nom de votre utilisateur ([http://www.proftpd.org/docs/contrib/mod_sftp.html#SFTPAuthorizedUserKeys directive] &amp;lt;code&amp;gt;SFTPAuthorizedUserKeys file:/etc/proftpd/authorized_keys/%u&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Exemple avec l&#039;utilisateur &#039;&#039;toto&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt;&amp;gt; /etc/proftpd/authorized_keys/toto&lt;br /&gt;
---- BEGIN SSH2 PUBLIC KEY ----&lt;br /&gt;
VOTRE&lt;br /&gt;
CLÉ PUBLIQUE&lt;br /&gt;
AU FORMAT&lt;br /&gt;
RFC 4716&lt;br /&gt;
---- END SSH2 PUBLIC KEY ----&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est bien entendu possible de chaîner plusieurs clés dans ce même fichier. Il y aura donc autant de sections &#039;&#039;BEGIN/END&#039;&#039; que de clés.&lt;br /&gt;
&lt;br /&gt;
 chmod 600 /etc/proftpd/authorized_keys/toto&lt;br /&gt;
&lt;br /&gt;
===Utilisateurs virtuels===&lt;br /&gt;
Création du répertoire personnel de l&#039;utilisateur virtuel&lt;br /&gt;
 mkdir -p /var/lib/proftpd/toto&lt;br /&gt;
 chown 2000:2000 /var/lib/proftpd/toto&lt;br /&gt;
&lt;br /&gt;
Création dudit utilisateur&lt;br /&gt;
 ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --uid=2000 --gid 2000 --home=/var/lib/proftpd/toto --shell=/bin/false --sha256 --name=toto&lt;br /&gt;
 ftpasswd --group --file=/etc/proftpd/ftpd.group --gid=2000 --member=toto --name=Moi&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il est possible de remplacer le mot de passe haché par un &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; ou tout autre caractère ne correspondant pas à un mot de passe haché dans le fichier &amp;lt;code&amp;gt;passwd&amp;lt;/code&amp;gt; afin de désactiver le mot de passe. L&#039;option &amp;lt;code&amp;gt;-l&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;--lock&amp;lt;/code&amp;gt; peut également être passée à la [http://www.proftpd.org/docs/contrib/ftpasswd.html commande] de création de l&#039;utilisateur (concatène ce caractère au mot haché). Seule les connexions par clé &#039;&#039;SSH&#039;&#039; seront alors autorisées.}}&lt;br /&gt;
&lt;br /&gt;
===Test et application===&lt;br /&gt;
Il est possible de tester la configuration avec la commande suivante&lt;br /&gt;
 proftpd -t -d 10&lt;br /&gt;
&lt;br /&gt;
Le paramètre &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; permet d&#039;augmenter le niveau de verbosité du journal sur la sortie standard (de 0 à 10). Il est également possible d&#039;augmenter le niveau de journalisation en conduite en passant la valeur &amp;lt;code&amp;gt;debug&amp;lt;/code&amp;gt; à la directive &amp;lt;code&amp;gt;SyslogLevel&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service pour prendre en compte les modifications (inutile pour la création ou le changement de mot de passe d&#039;un utilisateur)&lt;br /&gt;
 systemctl restart proftpd.service&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais utiliser un client &#039;&#039;SFTP&#039;&#039; pour vérifier le bon fonctionnement.&lt;br /&gt;
&lt;br /&gt;
Exemple avec celui d{{&#039;}}&#039;&#039;OpenSSH&#039;&#039; :&lt;br /&gt;
 sftp -oPort=2222 toto@10.0.0.100&lt;br /&gt;
ou&lt;br /&gt;
 sftp -P 2222 toto@10.0.0.100&lt;br /&gt;
&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* http://www.proftpd.org/docs/directives/&lt;br /&gt;
* https://linux.die.net/man/8/proftpd&lt;br /&gt;
* https://fr.linux-console.net/?p=5239&lt;br /&gt;
* https://blog.victor-hery.com/2019/03/installer-sftp-proftpd.html&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Proftpd&amp;diff=1536</id>
		<title>Proftpd</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Proftpd&amp;diff=1536"/>
		<updated>2024-09-01T20:47:06Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:Service_partage  [http://proftpd.org/ ProFTPd] est un logiciel permettant de monter un serveur de fichiers basé sur les protocoles &amp;#039;&amp;#039;FTP&amp;#039;&amp;#039; ; &amp;#039;&amp;#039;FTPS&amp;#039;&amp;#039; et SFTP. Il a la particularité d&amp;#039;utiliser des fichiers de configuration proches de ceux d&amp;#039;Apache2.  =Installation= Référence dans son domaine, il est probablement disponible dans les dépôts de la distribution &amp;#039;&amp;#039;Linux&amp;#039;&amp;#039; que vous utilisez. Pour &amp;#039;&amp;#039;Debian 12&amp;#039;&amp;#039;, la commande suivante... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Service_partage]]&lt;br /&gt;
&lt;br /&gt;
[http://proftpd.org/ ProFTPd] est un logiciel permettant de monter un serveur de fichiers basé sur les protocoles &#039;&#039;FTP&#039;&#039; ; &#039;&#039;FTPS&#039;&#039; et [[Sftp-server|SFTP]]. Il a la particularité d&#039;utiliser des fichiers de configuration proches de ceux d&#039;[[Apache2]].&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
Référence dans son domaine, il est probablement disponible dans les dépôts de la distribution &#039;&#039;Linux&#039;&#039; que vous utilisez. Pour &#039;&#039;Debian 12&#039;&#039;, la commande suivante permet d&#039;installer le paquet&lt;br /&gt;
 apt install --no-install-recommends proftpd proftpd-mod-crypto&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;ProFTPd&#039;&#039; supporte un grand nombre de modules. Le paquet &amp;lt;code&amp;gt;proftpd-mod-crypto&amp;lt;/code&amp;gt; permet d&#039;utiliser &#039;&#039;FTP&#039;&#039; sur &#039;&#039;TLS&#039;&#039;, aussi appelé &#039;&#039;FTPS&#039;&#039; ainsi que &#039;&#039;SFTP&#039;&#039;, le protocole de transfert de fichiers sur [[Openssh|SSH]].&lt;br /&gt;
&lt;br /&gt;
==SFTP==&lt;br /&gt;
De nos jours, l&#039;utilisation des protocoles &#039;&#039;FTP&#039;&#039; et sont pendant chiffré, &#039;&#039;FTPS&#039;&#039;, est dépréciée. Les raisons principales de cette tendance, malgré les qualités indéniables de ces derniers est principalement dû à l&#039;explosion des &#039;&#039;NAT/PAT&#039;&#039; sur les réseaux &#039;&#039;WAN&#039;&#039; ainsi que la systématisation des règles de pare-feux. &#039;&#039;FTP&#039;&#039; est en effet un vieux protocole imaginé à une époque où il était normal (allez savoir pourquoi) d&#039;utiliser une multitude de ports pour réaliser une action simple. Aussi, le port 20/&#039;&#039;TCP&#039;&#039; était utilisé pour les données alors que le 21/&#039;&#039;TCP&#039;&#039; servait pour transmettre les commandes. La version chiffrée quant à elle utilisait carrément des plages de ports au dessus de 1024 en plus de ceux mentionnés, rendant toute tentative de filtrage fin veine et occasionnait des problèmes de fiabilité avec certaines passerelles &#039;&#039;NAT&#039;&#039; (que je n&#039;ai pour ma part jamais rencontré).&lt;br /&gt;
&lt;br /&gt;
Cependant, la vacance occasionnée par la dépréciation de ces protocoles n&#039;a jamais été réellement comblée. [[Apache2#Partage_WebDAV|WebDAV]] n&#039;est pas très fiable dans ces implémentations (surtout sous [[Windows_net_use#Usages_concrets|Windows]]) et est plus que casse pied à configurer côté serveur (y&#039;a toujours un truc qui va pas) ; &#039;&#039;HTTP&#039;&#039; seul ne permet pas le transfert de répertoires, [[Samba]] et [[Nfs|NFS]] ne sont pas fait pour du &#039;&#039;WAN&#039;&#039; en plus de proposer une sécurité (surtout pour ce dernier) très discutable, &#039;&#039;ISCSI&#039;&#039; ne fonctionne qu&#039;en mode bloc ; [[Sftp-server|SFTP]] embarqué dans un serveur &#039;&#039;SSH&#039;&#039; utilise traditionnellement des utilisateurs &#039;&#039;POSIX&#039;&#039;, ce qui oblige à porter une attention toute particulière au durcissement de la configuration en plus de permettre des répercutions catastrophiques en cas de faille (un utilisateur destiné au transfert de fichiers peut, en fin de compte, se connecter au serveur...) ; etc... Aucun remplaçant potentiel n&#039;a donc su prendre la relève avec la légèreté et les fonctionnalités du protocole de transfert de fichiers (&#039;&#039;File Transfer Protocol&#039;&#039;) traditionnel :&lt;br /&gt;
* installation et utilisation simple&lt;br /&gt;
* utilisateurs virtuels avec base de données de multiple types allant du fichier plain à la base [[MariaDB - Gestion utilisateurs|SQL]] en passant par l&#039;annuaire [[Ldap|LDAP]]&lt;br /&gt;
* emprisonnement des comptes utilisateurs dans un répertoire (&#039;&#039;chroot&#039;&#039;)&lt;br /&gt;
* pas de &#039;&#039;shell&#039;&#039;&lt;br /&gt;
* gestion des droits&lt;br /&gt;
* reprise de téléchargements partiels&lt;br /&gt;
* performances maximales&lt;br /&gt;
* support très large&lt;br /&gt;
&lt;br /&gt;
L&#039;implémentation de &#039;&#039;SFTP&#039;&#039; proposée par &#039;&#039;ProFTPd&#039;&#039; s&#039;avère alors particulièrement intéressante car elle est décorrélée de tout serveur &#039;&#039;SSH&#039;&#039; et permet l&#039;utilisation de comptes virtuels emprisonnés sans utilisation de &#039;&#039;shell&#039;&#039;, réduisant ainsi drastiquement la surface d&#039;attaque. De plus, ce logiciel est reconnu comme apportant un soin prononcé à la sécurité et est éprouvé depuis plusieurs décennies. Il permettra donc de proposer un service quasiment similaire tout en apportant la confidentialité exigée par l&#039;époque...&lt;br /&gt;
&lt;br /&gt;
===Configuration du service===&lt;br /&gt;
En mode &#039;&#039;SFTP&#039;&#039; uniquement&lt;br /&gt;
 mv /etc/proftpd/proftpd.conf /etc/proftpdproftpd.conf.ori&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt; /etc/proftpd/proftpd.conf&lt;br /&gt;
# Chargement du module SFTP&lt;br /&gt;
LoadModule mod_sftp.c&lt;br /&gt;
&lt;br /&gt;
# Désactiver le service FTPS&lt;br /&gt;
&amp;lt;IfModule mod_tls.c&amp;gt;&lt;br /&gt;
	TLSEngine off&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Activer SFTP&lt;br /&gt;
&amp;lt;IfModule mod_sftp.c&amp;gt;&lt;br /&gt;
	SFTPEngine on&lt;br /&gt;
	Port 2222&lt;br /&gt;
	# Pièger l&#039;utilisateur (chroot) dans son répertoire personnel&lt;br /&gt;
	DefaultRoot ~&lt;br /&gt;
	# Journalisation&lt;br /&gt;
	SFTPLog /var/log/proftpd/sftp.log&lt;br /&gt;
	SyslogLevel info&lt;br /&gt;
	TransferLog /var/log/proftpd/xferlog&lt;br /&gt;
	SystemLog /var/log/proftpd/proftpd.log&lt;br /&gt;
	# UseLastlog on&lt;br /&gt;
&lt;br /&gt;
	SFTPHostKey /etc/proftpd/ssh_host_ed25519_key&lt;br /&gt;
&lt;br /&gt;
	# Méthode d&#039;authentification&lt;br /&gt;
	SFTPAuthMethods publickey&lt;br /&gt;
	SFTPAuthorizedUserKeys file:/etc/proftpd/authorized_keys/%u&lt;br /&gt;
	RequireValidShell off&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Utiliser les utilisateurs virtuels&lt;br /&gt;
&amp;lt;IfModule mod_auth.c&amp;gt;&lt;br /&gt;
	AuthOrder mod_auth_file.c&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Base des utilisateurs virtuels&lt;br /&gt;
&amp;lt;IfModule mod_auth_file.c&amp;gt;&lt;br /&gt;
	AuthUserFile /etc/proftpd/ftpd.passwd&lt;br /&gt;
	AuthGroupFile /etc/proftpd/ftpd.group&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Limiter l&#039;accès aux utilisateurs virtuels&lt;br /&gt;
&amp;lt;Limit LOGIN&amp;gt;&lt;br /&gt;
	AllowUser toto&lt;br /&gt;
	DenyAll&lt;br /&gt;
&amp;lt;/Limit&amp;gt;&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{astuce|La configuration proposée impose l&#039;usage de clés &#039;&#039;SSH&#039;&#039; pour la connexion des clients. Pour permettre l&#039;utilisation des mots de passes en cas d&#039;absence de clé, le mot &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; peut être ajouté à la suite après un espace dans le paramètre correspondant de la façon suivante : &amp;lt;code&amp;gt;SFTPAuthMethods publickey password&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
L&#039;outil &#039;&#039;&#039;exige&#039;&#039;&#039; que le nom d&#039;hôte redirige obligatoirement sur son adresse &#039;&#039;IP&#039;&#039; (il doit probablement utiliser cette information pour la création du socket &#039;&#039;TCP&#039;&#039;). Définissez cette donnée en l&#039;adaptant à votre configuration :&lt;br /&gt;
 echo -e &amp;quot;10.0.0.100\t${HOSTNAME}&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
===Éléments secrets===&lt;br /&gt;
Génération d&#039;une clé &#039;&#039;SSH&#039;&#039; serveur&lt;br /&gt;
 ssh-keygen -t ed25519 -f /etc/proftpd/ssh_host_ed25519_key -N &amp;quot;&amp;quot;&lt;br /&gt;
 chmod 600 /etc/proftpd/ssh_host_ed25519_key&lt;br /&gt;
&lt;br /&gt;
Utilisation des clés &#039;&#039;SSH&#039;&#039; pour les clients&lt;br /&gt;
 mkdir /etc/proftpd/authorized_keys&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Proftpd&#039;&#039; utilise volontairement un format de clé &#039;&#039;SSH&#039;&#039; différent d&#039;[[Openssh|OpenSSH]] pour éviter les conflits avec ce dernier. Il a ainsi choisit la forme décrite dans la [https://www.rfc-editor.org/rfc/rfc4716 RFC 4716]. Il est possible de convertir une clé existante sans altération de l&#039;originale (par retour sur &#039;&#039;stdout&#039;&#039;) via la commande suivante sur le client&lt;br /&gt;
 ssh-keygen -e -f ~/.ssh/id_ed25519.pub&lt;br /&gt;
&lt;br /&gt;
Le résultat est à mettre dans le fichier de clés portant le nom de votre utilisateur ([http://www.proftpd.org/docs/contrib/mod_sftp.html#SFTPAuthorizedUserKeys directive] &amp;lt;code&amp;gt;SFTPAuthorizedUserKeys file:/etc/proftpd/authorized_keys/%u&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Exemple avec l&#039;utilisateur &#039;&#039;toto&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt;&amp;gt; /etc/proftpd/authorized_keys/toto&lt;br /&gt;
---- BEGIN SSH2 PUBLIC KEY ----&lt;br /&gt;
VOTRE&lt;br /&gt;
CLÉ PUBLIQUE&lt;br /&gt;
AU FORMAT&lt;br /&gt;
RFC 4716&lt;br /&gt;
---- END SSH2 PUBLIC KEY ----&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est bien entendu possible de chaîner plusieurs clés dans ce même fichier. Il y aura donc autant de sections &#039;&#039;BEGIN/END&#039;&#039; que de clés.&lt;br /&gt;
&lt;br /&gt;
 chmod 600 /etc/proftpd/authorized_keys/toto&lt;br /&gt;
&lt;br /&gt;
===Utilisateurs virtuels===&lt;br /&gt;
Création du répertoire personnel de l&#039;utilisateur virtuel&lt;br /&gt;
 mkdir -p /var/lib/proftpd/toto&lt;br /&gt;
 chown 2000:2000 /var/lib/proftpd/toto&lt;br /&gt;
&lt;br /&gt;
Création dudit utilisateur&lt;br /&gt;
 ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --uid=2000 --gid 2000 --home=/var/lib/proftpd/toto --shell=/bin/false --sha256 --name=toto&lt;br /&gt;
 ftpasswd --group --file=/etc/proftpd/ftpd.group --gid=2000 --member=toto --name=Moi&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il est possible de remplacer le mot de passe haché par un &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt; ou tout autre caractère ne correspondant pas à un mot de passe haché dans le fichier &amp;lt;code&amp;gt;passwd&amp;lt;/code&amp;gt; afin de désactiver le mot de passe. L&#039;option &amp;lt;code&amp;gt;-l&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;--lock&amp;lt;/code&amp;gt; peut également être passée à la [http://www.proftpd.org/docs/contrib/ftpasswd.html commande] de création de l&#039;utilisateur (concatène ce caractère au mot haché). Seule les connexions par clé &#039;&#039;SSH&#039;&#039; seront alors autorisées.}}&lt;br /&gt;
&lt;br /&gt;
===Test et application===&lt;br /&gt;
Il est possible de tester la configuration avec la commande suivante&lt;br /&gt;
 proftpd -t -d 10&lt;br /&gt;
&lt;br /&gt;
Le paramètre &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; permet d&#039;augmenter le niveau de verbosité du journal sur la sortie standard (de 0 à 10). Il est également possible d&#039;augmenter le niveau de journalisation en conduite en passant la valeur &amp;lt;code&amp;gt;debug&amp;lt;/code&amp;gt; à la directive &amp;lt;code&amp;gt;SyslogLevel&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service pour prendre en compte les modifications (inutile pour la création ou le changement de mot de passe d&#039;un utilisateur)&lt;br /&gt;
 systemctl restart proftpd.service&lt;br /&gt;
&lt;br /&gt;
Vous pouvez désormais utiliser un client &#039;&#039;SFTP&#039;&#039; pour vérifier le bon fonctionnement.&lt;br /&gt;
&lt;br /&gt;
Exemple avec celui d{{&#039;}}&#039;&#039;OpenSSH&#039;&#039; :&lt;br /&gt;
 sftp -oPort=2222 toto@10.0.0.100&lt;br /&gt;
ou&lt;br /&gt;
 sftp -P 2222 toto@10.0.0.100&lt;br /&gt;
&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* http://www.proftpd.org/docs/directives/&lt;br /&gt;
* https://linux.die.net/man/8/proftpd&lt;br /&gt;
* https://fr.linux-console.net/?p=5239&lt;br /&gt;
* https://blog.victor-hery.com/2019/03/installer-sftp-proftpd.html&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Openssh&amp;diff=1535</id>
		<title>Openssh</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Openssh&amp;diff=1535"/>
		<updated>2024-08-26T17:01:40Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de deux précision concernant les clés publiques + emplacement des balises &amp;quot;syntaxhighlight inline&amp;quot; par &amp;quot;code&amp;quot; pour optimisation + remplacement d&amp;#039;un lien mort + corrections typographiques + correction d&amp;#039;une balise de coloration syntaxique&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:service_ssh]]&lt;br /&gt;
[[Category:shell]]&lt;br /&gt;
&lt;br /&gt;
=Authentification par clef SSH=&lt;br /&gt;
Au lieu de s&#039;authentifier par mot de passe, les utilisateurs peuvent s&#039;authentifier grâce à la cryptographie asymétrique et son couple de clefs privée/publique, comme le fait le serveur &#039;&#039;SSH&#039;&#039; auprès du client &#039;&#039;SSH&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Générer ses clefs==&lt;br /&gt;
Pour générer un couple de clefs, tapez sur le client :&lt;br /&gt;
 ssh-keygen -t ed25519&lt;br /&gt;
&lt;br /&gt;
ou avec plus de paramètres :&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -a 100 -t ed25519 -f ~/.ssh/id_ed25519&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-a&#039;&#039;&#039; : nombre d&#039;itérations de la [https://fr.wikipedia.org/wiki/Fonction_de_d%C3%A9rivation_de_cl%C3%A9 fonction de dérivation de clé]. Permet de rendre la clé plus résistante aux attaques par force brut. La valeur par défaut est définie à 16&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; : type de clé. La taille d&#039;une clé &#039;&#039;ed25519&#039;&#039; est fixée dans le code d{{&#039;}}&#039;&#039;OpenSSH&#039;&#039;. Le paramètre &amp;lt;code&amp;gt;-b&amp;lt;/code&amp;gt; permet de la spécifier pour les autres formats&lt;br /&gt;
* &#039;&#039;&#039;-f&#039;&#039;&#039; : fichier de destination&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, il faut envoyer le fichier &#039;&#039;&#039;~/.ssh/id_ed25519.pub&#039;&#039;&#039; du client sur le serveur, tapez sur le client :&lt;br /&gt;
 scp /home/user/.ssh/id_ed25519.pub UTILISATEUR@SERVEUR:/home/user/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
ou&lt;br /&gt;
&lt;br /&gt;
 ssh-copy-id -i ~/.ssh/id_ed25519.pub UTILISATEUR@SERVEUR&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: le même paramètre &amp;lt;code&amp;gt;-i&amp;lt;/code&amp;gt; peut être utilisé avec la commande &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; afin de spécifier la clé à utiliser si plusieurs sont présentes.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{astuce|Pour [https://www.phcomp.co.uk/Tutorials/Unix-And-Linux/ssh-check-server-fingerprint.html vérifier l&#039;empreinte] d&#039;une clef, il faut utiliser la [https://linux.die.net/man/1/ssh-keygen commande] &amp;lt;code&amp;gt;ssh-keygen -lf /chemin/de/la/clef&amp;lt;/code&amp;gt;. Le hachis résultant est à comparer avec celui de la clef qui est présenté lors de la première connexion à un serveur (les deux doivent bien sûr être identiques). L&#039;algorithme par défaut est le &#039;&#039;SHA256&#039;&#039;. Pour modifier ce paramètre, il est possible d&#039;utiliser le paramètre &amp;lt;code&amp;gt;-E &amp;lt;algo_hash&amp;gt;&amp;lt;/code&amp;gt;. Exemple : &amp;lt;code&amp;gt;ssh-keygen -lE md5 -f ~/.ssh/id_ed25519&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
En cas de suppression accidentelle de la clé publique, il est possible de la régénérer (à l&#039;identique) à partir de la clé privée&lt;br /&gt;
 ssh-keygen -yf ~/.ssh/id_ed25519&lt;br /&gt;
&lt;br /&gt;
==Restreindre l&#039;usage d&#039;une clef==&lt;br /&gt;
Il est possible de limiter le périmètre d&#039;usage d&#039;une clef &#039;&#039;SSH&#039;&#039; via quelques paramètres dans le fichier &#039;&#039;authorized_keys&#039;&#039; du client. Il est ainsi possible de permettre la connexion d&#039;un client avec une clef spécifique seulement depuis une liste d&#039;&#039;&#039;IP&#039;&#039; tout en forçant une commande précise. Par exemple:&lt;br /&gt;
 vim ~/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
from=&amp;quot;192.168.1.4,192.168.1.10&amp;quot;,command=&amp;quot;ls -al --color /&amp;quot; ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKWbjAEe0X+NFr0WjEgdJ2vKAIYwYSW6WkJvP2Zg/M4q root@toto&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le client n&#039;effectuera alors automatiquement la commande définie par le paramètre &#039;&#039;command&#039;&#039; avant que la connexion ne se ferme d&#039;elle même. De plus, la clef ne sera utilisable que depuis les adresses &#039;&#039;IP&#039;&#039; listés.&lt;br /&gt;
&lt;br /&gt;
===Sources de la section===&lt;br /&gt;
* https://stackoverflow.com/questions/402615/how-to-restrict-ssh-users-to-a-predefined-set-of-commands-after-login&lt;br /&gt;
* https://www.linuxjournal.com/article/8257&lt;br /&gt;
* http://man.openbsd.org/OpenBSD-current/man5/sshd_config.5#ForceCommand&lt;br /&gt;
&lt;br /&gt;
==Déactiver l&#039;authentification par mot de passe==&lt;br /&gt;
Si nous voulons déactiver l&#039;accès par mot de passe, il faut ajouter la ligne suivante au fichier &#039;&#039;&#039;/etc/ssh/sshd_config&#039;&#039;&#039; :&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#808080&amp;quot;&amp;gt;[...]&amp;lt;/span&amp;gt;&lt;br /&gt;
 PasswordAuthentication no&lt;br /&gt;
&lt;br /&gt;
Vous pouvez vous référer à la section traitant du fichier de configuration d{{&#039;}}&#039;&#039;OpenSSH&#039;&#039; [[#Fichier sshd_config|plus bas]].&lt;br /&gt;
&lt;br /&gt;
=Déactiver known hosts de SSH=&lt;br /&gt;
==Problème==&lt;br /&gt;
Lors d&#039;une exécution d&#039;un script contenant du &#039;&#039;SSH&#039;&#039;, et lorsque vous avez changé une de vos machines sur la quelle vous vous connectez, ssh demande une intervention humaine :&lt;br /&gt;
&lt;br /&gt;
 The authenticity of host &#039;192.168.1.2 (192.168.1.2)&#039; can&#039;t be established.&lt;br /&gt;
 ECDSA key fingerprint is XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX.&lt;br /&gt;
 Are you sure you want to continue connecting (yes/no)?&lt;br /&gt;
&lt;br /&gt;
Lorsque vous avez change l&#039;ordinateur en gardant la même &#039;&#039;IP&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;br /&gt;
 @       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @&lt;br /&gt;
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;br /&gt;
 The RSA host key for foo-bar.net has changed,&lt;br /&gt;
 and the key for the corresponding IP address 127.0.0.1&lt;br /&gt;
 is unchanged. This could either mean that&lt;br /&gt;
 DNS SPOOFING is happening or the IP address for the host&lt;br /&gt;
 and its host key have changed at the same time.&lt;br /&gt;
 Offending key for IP in /home/user/.ssh/known_hosts:6&lt;br /&gt;
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;br /&gt;
 @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @&lt;br /&gt;
 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&lt;br /&gt;
 IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!&lt;br /&gt;
&lt;br /&gt;
Le problème avec cette intervention est que le script n&#039;avance pas sans vous.&lt;br /&gt;
Pour ma part, j&#039;ai un script qui se lance lors d&#039;une coupure électrique, sans mon intervention mon script qui permet l&#039;extinction de mes machines virtuelles ne se termine pas... c&#039;est pas cool.&lt;br /&gt;
&lt;br /&gt;
==Résolution==&lt;br /&gt;
Voici une solution que j&#039;ai trouvé : il faut passer des paramètres à notre commande &#039;&#039;SSH&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
 ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.1.2&lt;br /&gt;
&lt;br /&gt;
{{attention|Ceci désactive la vérification de la somme de contrôle des clés &#039;&#039;SSH&#039;&#039;. Ne faîtes ceci que si vous savez ce que vous faîtes car cela rend votre connexion plus sensible à des attaques [https://fr.wikipedia.org/wiki/Attaque_de_l&#039;homme_du_milieu de l&#039;homme du milieu].}}&lt;br /&gt;
&lt;br /&gt;
=Séquences d&#039;échappement=&lt;br /&gt;
Parfois lors de la perte d&#039;une session &#039;&#039;SSH&#039;&#039; (problème de connexion ou bug coté serveur) le SHELL ne renvoi pas de &#039;&#039;broken pipe&#039;&#039;, ce qui fait que l&#039;on se retrouve avec un terminal bloqué (hyper casse couille) et la seule façon de s&#039;en sortir est d&#039;user de la commande &amp;lt;code&amp;gt;kill&amp;lt;/code&amp;gt;. La seule ? Pas tout à fait.&lt;br /&gt;
&lt;br /&gt;
Il existe un truc qui déchire et qu&#039;on ne trouve nul par (c&#039;est toujours les meilleurs choses les mieux gardées) : les séquences d&#039;échappement.&lt;br /&gt;
&lt;br /&gt;
Ces séquences permettent d&#039;interagir avec le SHELL se trouvant en dessous de la session &#039;&#039;SSH&#039;&#039; via le client &#039;&#039;OpenSSH&#039;&#039; lui même. Ainsi, on peu demander à ce cher client de tuer lui même la session au lieu de devoir le faire à sa place quand rien ne va plus (sympa non ?).&lt;br /&gt;
&lt;br /&gt;
==Liste==&lt;br /&gt;
Voici la liste exhaustive de ces merveilles (à précéder par la touche &amp;lt;code&amp;gt;&amp;lt;Entrer&amp;gt;&amp;lt;/code&amp;gt;) :&lt;br /&gt;
* &#039;&#039;&#039;~.&#039;&#039;&#039; : Termine la connexion (et toute les sessions multiplexées)&lt;br /&gt;
* &#039;&#039;&#039;~B&#039;&#039;&#039; : Envoi un &#039;&#039;BREAK&#039;&#039; au système distant&lt;br /&gt;
* &#039;&#039;&#039;~C&#039;&#039;&#039; : Ouvre un prompt &#039;&#039;ssh&#039;&#039; (la commande &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt; permet de lister ce que l&#039;on peut y faire)&lt;br /&gt;
* &#039;&#039;&#039;~R&#039;&#039;&#039; : Renégocie la clé de session (SSH version 2 uniquement)&lt;br /&gt;
* &#039;&#039;&#039;~V/v&#039;&#039;&#039; : Augmente/diminue le degré de verbosity (LogLevel)&lt;br /&gt;
* &#039;&#039;&#039;~^Z&#039;&#039;&#039; : Met &#039;&#039;SSH&#039;&#039; en pause&lt;br /&gt;
* &#039;&#039;&#039;~#&#039;&#039;&#039; : Liste toute les connexions redirigées&lt;br /&gt;
* &#039;&#039;&#039;~&amp;amp;&#039;&#039;&#039; : Quitte la session &#039;&#039;SSH&#039;&#039; sans la fermer. On ne peut pas revenir dessus, ça ne sert donc complètement à rien (je ne vois pas pourquoi quelqu&#039;un à développer ça ?!)&lt;br /&gt;
*  &#039;&#039;&#039;~?&#039;&#039;&#039; : Écrit cette liste en anglais avec le vrai texte&lt;br /&gt;
* &#039;&#039;&#039;~~&#039;&#039;&#039; : Dans le cas ou le tild (&#039;&#039;~&#039;&#039;) entre en conflit avec quelque chose, il est possible de le taper 2 fois avant une séquence d&#039;échappement pour l&#039;envoyer.&lt;br /&gt;
&lt;br /&gt;
{{info|Ceci ne fonctionne que lorsque le &#039;&#039;shell&#039;&#039; ne nous donne pas la main. Vous pouvez tester sur une page de &amp;lt;code&amp;gt;man&amp;lt;/code&amp;gt; pour tester par exemple.}}&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://askubuntu.com/questions/29942/how-can-i-break-out-of-ssh-when-it-locks&lt;br /&gt;
* https://lonesysadmin.net/2011/11/08/ssh-escape-sequences-aka-kill-dead-ssh-sessions/amp/&lt;br /&gt;
&lt;br /&gt;
=Absence de broken pipe après un redémarrage=&lt;br /&gt;
Sur une &#039;&#039;Debian 8&#039;&#039; (&#039;&#039;Jessie&#039;&#039;), le fait de redémarrer une machine alors que l&#039;on est connecté en &#039;&#039;SSH&#039;&#039; sur celle-ci ne renvoi pas de &#039;&#039;broken pipe&#039;&#039; (la session n&#039;est pas clôturée à l&#039;extinction). Ceci est très énervant car on se retrouve avec un terminal bloqué sur un prompt inactif et l&#039;arrivé du fameux &#039;&#039;broken pipe&#039;&#039; se fait, dans le meilleur des cas, attendre une bonne minute, dans le pire, pour toujours... Pour régler cette merde il suffit d&#039;installer la librairie &#039;&#039;Systemd&#039;&#039; qui gère se comportement et de redémarrer la machine.&lt;br /&gt;
 apt install libpam-systemd&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
=Tunnel SSH=&lt;br /&gt;
Faire un tunnel &#039;&#039;SSH&#039;&#039; :&lt;br /&gt;
 ssh -L 5232:localhost:5232 root@192.168.180.32&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-L&#039;&#039;&#039; : Rediriger un flux &#039;&#039;TCP&#039;&#039; ou un socket UNIX sur le client local&lt;br /&gt;
* &#039;&#039;&#039;Format&#039;&#039;&#039; : &#039;&#039;&amp;lt;port local que l&#039;on utilisera sur notre machine&amp;gt;&#039;&#039;&#039;&#039;&#039;:&#039;&#039;&#039;&#039;&#039;&amp;lt;adresse de l&#039;hôte distant&amp;gt;&#039;&#039;&#039;&#039;&#039;:&#039;&#039;&#039;&#039;&#039;&amp;lt;port du service distant&amp;gt;&#039;&#039;&lt;br /&gt;
Ceci mérite une explication pour être clair. Parfois, on installe un programme ([http://radicale.org Radicale] pour mon exemple) qui écoute exclusivement sur son localhost (127.0.0.1) via le port 5232. Quand le serveur n&#039;a pas d&#039;interface graphique (ce qui est normalement le cas si on est pas &#039;&#039;Windobien&#039;&#039;), on a pas de navigateur internet. Il peut être utile d&#039;accéder quand même à l&#039;interface d&#039;admin du service (en fait on en a absolument besoin). Il faut donc rediriger le trafic du localhost de l&#039;hôte distant sur notre machine pour l&#039;administration. On prend donc le trafic localhost:5232 du serveur et on le balance sur le localhost:5232 de notre PC local d&#039;admin.&lt;br /&gt;
&lt;br /&gt;
=Relai SSH=&lt;br /&gt;
Dans le cas d&#039;une machine accessible seulement depuis une autre (cas d&#039;un PC derrière un routeur &#039;&#039;NAT&#039;&#039; par exemple) embarquant un serveur &#039;&#039;SSH&#039;&#039;, il est possible de l&#039;utiliser comme &#039;&#039;Proxy SSH&#039;&#039; afin de joindre celle-ci. Ceci m&#039;est utile pour administrer des machines virtuelles opérants dans un &#039;&#039;VLAN NATté&#039;&#039; par l&#039;hyperviseur avec ma [[#Authentification_par_clef_SSH|clé SSH]]. Pour ce faire, depuis le client:&lt;br /&gt;
 ssh -J titi@relai toto@destination&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://tuxicoman.jesuislibre.net/2017/02/connexion-ssh-a-travers-un-ordinateur-relai-avec-proxyjump.html&lt;br /&gt;
&lt;br /&gt;
=SSH inversé=&lt;br /&gt;
Il est possible de se connecter au client ayant initié une session &#039;&#039;SSH&#039;&#039; via la création d&#039;un socket spécifique. Cette technique se nomme le &#039;&#039;reverse SSH&#039;&#039;. Cela peut-être utile dans le cas d&#039;un dépannage ou pour transférer des fichiers à une machine ne disposant pas d&#039;un accès publique à Internet (cas d&#039;un &#039;&#039;NAT&#039;&#039; par exemple). Cette méthode permet alors la prise en main d&#039;un client sans redirection de port au niveau de son accès &#039;&#039;WAN&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Depuis le client vers le dépanneur :&lt;br /&gt;
 ssh -NR 12345:localhost:22 utilisateur-dépanneur@ip-dépanneur&lt;br /&gt;
&lt;br /&gt;
Paramètres :&lt;br /&gt;
* &#039;&#039;&#039;-N&#039;&#039;&#039; : n&#039;exécute ni aucune commande ni aucun shell. Cela permet de n&#039;utiliser la session &#039;&#039;SSH&#039;&#039; que pour ouvrir un socket distant et non pour administrer la destination. Dans notre cas, la session sert juste à créer le socket sur lequel nous allons nous connecter&lt;br /&gt;
* &#039;&#039;&#039;-R&#039;&#039;&#039; : redirige le socket local vers le socket distant. C&#039;est ce paramètre qui permettra au dépanneur de se connecter au client via un socket local créé pour l&#039;occasion&lt;br /&gt;
* &#039;&#039;&#039;12345:localhost:22&#039;&#039;&#039; : socket-sur-dépanneur:adresse-d&#039;écoute-du-socket:socket-à-rediriger-vers-12345&lt;br /&gt;
&lt;br /&gt;
Depuis le dépanneur vers le client en passant par le socket redirigé :&lt;br /&gt;
 ssh -p 12345 utilisateur-client@localhost&lt;br /&gt;
&lt;br /&gt;
Il est aussi possible d&#039;y transférer des fichiers :&lt;br /&gt;
 scp -P 12345 /chemin/fichier/dépanneur utilisateur-client@localhost:/destination/fichier/pour/le/client&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://doc.ubuntu-fr.org/tutoriel/reverse_ssh#connexion_directe&lt;br /&gt;
&lt;br /&gt;
=Agent SSH=&lt;br /&gt;
Le serveur &#039;&#039;OpenSSH&#039;&#039; embarque un agent capable d&#039;enregistrer le mot de passe de vos clés &#039;&#039;SSH&#039;&#039;. Vous pouvez donc initier des connexion sans avoir à renseigner cette information à chaque fois.&lt;br /&gt;
&lt;br /&gt;
Initialiser l&#039;agent pour le [[Shell bash|shell]] courant&lt;br /&gt;
 eval &amp;quot;$(ssh-agent -s)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Enregistrer le mot de passe de votre clé&lt;br /&gt;
 ssh-add /root/.ssh/id_ed25519&lt;br /&gt;
&lt;br /&gt;
{{Info|Utilisée sans argument, la commande &amp;lt;code&amp;gt;ssh-add&amp;lt;/code&amp;gt; va chercher les clés dans le répertoire personnel de votre utilisateur local courant.}}&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://rabexc.org/posts/using-ssh-agent&lt;br /&gt;
* https://mytrashcode.com/open-connection-authentication-agent&lt;br /&gt;
&lt;br /&gt;
=Fichier sshd_config=&lt;br /&gt;
Voici quelques paramètres qu&#039;il peut être utile d&#039;appliquer sur un serveur &#039;&#039;SSH&#039;&#039; (&amp;lt;code&amp;gt;/etc/ssh/sshd_config&amp;lt;/code&amp;gt;) :&lt;br /&gt;
&lt;br /&gt;
==Généralités==&lt;br /&gt;
 PermitRootLogin no&lt;br /&gt;
 PasswordAuthentication no&lt;br /&gt;
 &lt;br /&gt;
 AllowUsers toto sauvegardes&lt;br /&gt;
 ClientAliveInterval 1800&lt;br /&gt;
 &lt;br /&gt;
 UseDNS no&lt;br /&gt;
&lt;br /&gt;
Description des paramètres :&lt;br /&gt;
* &#039;&#039;&#039;PermitRootLogin&#039;&#039;&#039; &#039;&#039;{no|yes|prohibit-password}&#039;&#039; : définit si l&#039;utilisateur &#039;&#039;root&#039;&#039; peut se connecter. La directive &#039;&#039;&#039;prohibit-password&#039;&#039;&#039; permet de n&#039;autoriser que l&#039;utilisation de [[#Authentification par clef SSH|clés SSH]] avec ce dernier&lt;br /&gt;
* &#039;&#039;&#039;PasswordAuthentication&#039;&#039;&#039; &#039;&#039;{no|yes}&#039;&#039; : définit si la connexion par mot de passe est autorisé pour tous les utilisateurs (&#039;&#039;root&#039;&#039; à part) ou si seulement les clés SSH sont permises&lt;br /&gt;
* &#039;&#039;&#039;AllowUsers&#039;&#039;&#039; : liste blanche des utilisateurs autorisés à ce connecter&lt;br /&gt;
* &#039;&#039;&#039;ClientAliveInterval&#039;&#039;&#039; : si le paramètre est définit, &#039;&#039;OpenSSH&#039;&#039; compte le temps (en secondes) depuis le dernier paquet reçu du client et envoi une demande de réponse à celui-ci. Couplé au paramètre &#039;&#039;&#039;ClientAliveCountMax&#039;&#039;&#039; (valeur par défaut à &#039;&#039;3&#039;&#039;), le serveur fermera automatiquement la session en cas de non réponse prolongée de ce dernier (nombre de fois compté depuis la dernière réponse). Ceci n&#039;est utile que si la connexion entre les deux paires est interrompu (plus de réseau)&lt;br /&gt;
* &#039;&#039;&#039;UseDNS&#039;&#039;&#039; &#039;&#039;{no|yes}&#039;&#039; : définit si &#039;&#039;OpenSSH&#039;&#039; doit résoudre les noms de domaine. Ce paramètre, non content d&#039;être inutile, ralenti CONSIDÉRABLEMENT l&#039;établissement de la connexion dans le cas ou le serveur &#039;&#039;DNS&#039;&#039; est injoignable (fréquent dans des &#039;&#039;LAB&#039;&#039; de tests)&lt;br /&gt;
&lt;br /&gt;
==Chiffrement==&lt;br /&gt;
N&#039;utiliser que des [https://cipherlist.eu/ chiffrements sérieux] :&lt;br /&gt;
 KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256&lt;br /&gt;
 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr&lt;br /&gt;
 MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com&lt;br /&gt;
&lt;br /&gt;
Je vous conseil également d&#039;utiliser que des clés &#039;&#039;RSA&#039;&#039; et &#039;&#039;ed25519&#039;&#039; en commentant les lignes &amp;lt;code&amp;gt;HostKey /etc/ssh/ssh_host_dsa_key&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;HostKey /etc/ssh/ssh_host_ecdsa_key&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vérifiez également que la version de &#039;&#039;SSH&#039;&#039; utilisée est la 2 via le paramètre &amp;lt;code&amp;gt;Protocol 2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
N&#039;oubliez pas de recharger le service :&lt;br /&gt;
 systemctl reload ssh&lt;br /&gt;
&lt;br /&gt;
=Fichier ssh_config=&lt;br /&gt;
Le client &#039;&#039;SSH&#039;&#039; peut aussi être configuré par utilisateur du système. Il sera alors possible de définir des paramètres personnalisés en fonction de celui se connectant à une machine. Le fichier est à créer dans le répertoire personnel de chaque utilisateur le nécessitant (&amp;lt;code&amp;gt;~/.ssh/config&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Pour utiliser une clé spécifique pour la connexion à une machine :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Host nomMachine&lt;br /&gt;
	Hostname	fc00:0:0:1::2&lt;br /&gt;
	User		root&lt;br /&gt;
	Port		22&lt;br /&gt;
	IdentityFile	~/.ssh/id_ed25519-sauv&lt;br /&gt;
	IdentitiesOnly	yes&lt;br /&gt;
	IgnoreUnknown	UseKeychain,AddKeysToAgent&lt;br /&gt;
	AddKeysToAgent	yes&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Description des paramètres :&lt;br /&gt;
* &#039;&#039;&#039;Host nomMachine&#039;&#039;&#039; : Ouvre une section concernant un hôte en particulier. La valeur &#039;&#039;nomMachine&#039;&#039; vient créer un nom d&#039;hôte utilisable par &#039;&#039;OpenSSH&#039;&#039; au même titre que si l&#039;on avait rentré une ligne dans le fichier &#039;&#039;hosts&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Hostname&#039;&#039;&#039; : adresse de la machine distante&lt;br /&gt;
* &#039;&#039;&#039;User&#039;&#039;&#039; : utilisateur de la machine distante&lt;br /&gt;
* &#039;&#039;&#039;Port&#039;&#039;&#039; : port &#039;&#039;SSH&#039;&#039; de la machine distante&lt;br /&gt;
* &#039;&#039;&#039;IdentityFile&#039;&#039;&#039; : clé &#039;&#039;SSH&#039;&#039; à utiliser (par défaut, seul les noms de clés par défaut sont recherchés)&lt;br /&gt;
* &#039;&#039;&#039;IdentitiesOnly&#039;&#039;&#039; : n&#039;utilise que la clé spécifiée dans le paramètre précédent. Si omis, le client &#039;&#039;SSH&#039;&#039; va tester une connexion distante avec toute les clés qu&#039;il trouvera (occasionnant autant d&#039;échec de connexion sur la machine distante)&lt;br /&gt;
* &#039;&#039;&#039;IgnoreUnknown&#039;&#039;&#039; : permet d&#039;ignorer les paramètres inexistants. Les deux valeurs sont des paramètres faisant la même chose mais sur deux systèmes différents. La première est pour MacOSX et la deuxième pour Linux. Cela permet de faire des copier/coller de configuration sans réfléchir&lt;br /&gt;
* &#039;&#039;&#039;AddKeysToAgent&#039;&#039;&#039; : si la clé &#039;&#039;SSH&#039;&#039; utilisée contient une phrase de passe, elle ne sera demandée que la première fois et stockée dans l&#039;agent &#039;&#039;SSH&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://www.man7.org/linux/man-pages/man5/ssh_config.5.html&lt;br /&gt;
* https://computingforgeeks.com/managing-ssh-connections-on-linux-unix-using-ssh-config-file/&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Gns3&amp;diff=1534</id>
		<title>Gns3</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Gns3&amp;diff=1534"/>
		<updated>2024-08-23T21:00:58Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Correction d&amp;#039;une faute dans le nom de la catégorie &amp;quot;Méthode pyhton3 PIP&amp;quot; + actualisation de cette méthode d&amp;#039;installation + réorganisation de l&amp;#039;ordre des méthodes d&amp;#039;installation + remplacement des balises &amp;quot;sources&amp;quot; obsolètes + corrections typographiques + déplacement d&amp;#039;une partie de l&amp;#039;introduction de la section &amp;quot;Installation&amp;quot; dans la sous-section &amp;quot;Méthode APT&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:réseaux_linux]]&lt;br /&gt;
[https://github.com/GNS3/gns3-gui GNS3] est un logiciel de simulation réseau. il peut simuler des matériels de l&#039;équipementier &#039;&#039;Cisco&#039;&#039; en exploitant de vrais &#039;&#039;IOS&#039;&#039; ; exploiter &#039;&#039;qemu&#039;&#039; au travers du cadriciel &#039;&#039;libvirt&#039;&#039; pour émuler des équipements ; utiliser &#039;&#039;Docker&#039;&#039; ; intégrer des &#039;&#039;IOS&#039;&#039; tournant directement sous &#039;&#039;Linux&#039;&#039; afin d&#039;ajouter des commutateurs de niveau 3 et plus encore. Nous nous trouvons donc avec des équipements virtuels qui réagissent comme des équipement physiques et qui, après avoir été reliés au monde réel par l&#039;intermédiaire d&#039;un pont sur la carte réseau de l&#039;hôte, peuvent communiquer avec leurs pairs physiques de la même manière que de vrai équipements.&lt;br /&gt;
&lt;br /&gt;
{{info|Testé avec la version 2.0 sortie le 02/05/2017}}&lt;br /&gt;
&lt;br /&gt;
=Téléchargement=&lt;br /&gt;
Partie obsolète. Passez par [https://github.com/GNS3/gns3-gui GitHub].&lt;br /&gt;
&#039;&#039;GNS3&#039;&#039; fait partie de ces logiciels casses couilles qui nécessitent un compte pour être téléchargé. Comme je ne supporte pas cette pratique (d&#039;autant plus que ça se dit &amp;quot;logiciel libre&amp;quot; - pas très libre comme façon de faire), j&#039;ai donc recensé les liens &#039;&#039;SourceForge&#039;&#039; du projet (c&#039;est surtout utile si vous voulez le compiler vous-même ou si vous utilisez Mac OS X ou Windows). Pour les distributions Linux, vous trouverez la plupart du temps un binaire dans les dépôts.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Linux :&#039;&#039;&#039; https://sourceforge.net/projects/gns-3/files/Nightly%20Builds/2018-02-28/2.2/GNS3-2.2.0dev1.source.zip/download&lt;br /&gt;
* &#039;&#039;&#039;Mac :&#039;&#039;&#039; https://sourceforge.net/projects/gns-3/files/Releases/v2.1.3/GNS3-2.1.3.dmg/download&lt;br /&gt;
* &#039;&#039;&#039;Windows :&#039;&#039;&#039; https://sourceforge.net/projects/gns-3/files/Releases/v2.1.3/GNS3-2.1.3-all-in-one.exe/download&lt;br /&gt;
Dépôt du projet :&lt;br /&gt;
* https://sourceforge.net/projects/gns-3/files&lt;br /&gt;
* https://sourceforge.net/projects/gns-3/files/Nightly%20Builds/2018-02-28&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
{{info|Mise à jour du 23/08/2024 : depuis &#039;&#039;Debian 12&#039;&#039;, &#039;&#039;&#039;seule&#039;&#039;&#039; la [[#Méthode_python3_PIP|méthode Python3 PIP]] est supporté via le paramètre d&#039;installation &amp;lt;code&amp;gt;--break-system-packages&amp;lt;/code&amp;gt;. La section dédiée a été actualisée en conséquence. Veuillez noter également que l&#039;installation ne fonctionne plus sur &#039;&#039;Debian Sid&#039;&#039; à cette même date. La procédure va donc logiquement probablement changer pour la version 13... Un ticket sur la confection d&#039;un paquet portable est ouvert sur le dépôt [https://github.com/GNS3/gns3-gui/issues/2911 GitHub] du projet sans grande avancée à ce stade. Cela pourrait régler le problème épineux de l&#039;installation et des mises à jours de cet outil à terme.}}&lt;br /&gt;
&lt;br /&gt;
Le paquet &#039;&#039;telnet&#039;&#039; sera également utile pour la connexion aux équipements virtuels&lt;br /&gt;
 apt install telnet&lt;br /&gt;
&lt;br /&gt;
==Méthode python3 PIP==&lt;br /&gt;
GNS3 est installable depuis le gestionnaire de paquet de &#039;&#039;Python3&#039;&#039;. Cette méthode est la seule fonctionnelle sous &#039;&#039;Debian 12&#039;&#039; en 2024 :&lt;br /&gt;
 apt install python3-pip&lt;br /&gt;
 apt install python3-pyqt5.qtsvg python3-pyqt5.qtwebsockets&lt;br /&gt;
&lt;br /&gt;
 pip3 install --break-system-packages -U gns3-gui gns3-server PyQt5-sip PyQt5 aiohttp&lt;br /&gt;
&lt;br /&gt;
 wget https://doc.ycharbi.fr/fichiers/réseaux/gns3/ubridge -P /usr/bin/&lt;br /&gt;
 chmod 777 /usr/bin/ubridge&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note : le binaire de ubridge est celui des dépôts Debian Sid au 17/02/2019.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{info|Depuis la version 2.2.5 sortie le 9 janvier 2020, la suite est automatique. Vous pouvez vous arrêter là pour la méthode &#039;&#039;python3 PIP&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Télécharger l&#039;icône de l&#039;application :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
wget https://doc.ycharbi.fr/fichiers/réseaux/gns3/images/gns3.png -P /usr/share/icons/hicolor/48x48/apps/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et créer le lanceur :&lt;br /&gt;
 vim /usr/share/applications/gns3.desktop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Desktop Entry]&lt;br /&gt;
Version=1.0&lt;br /&gt;
Type=Application&lt;br /&gt;
Terminal=false&lt;br /&gt;
Exec=gns3 %f&lt;br /&gt;
Name=GNS3&lt;br /&gt;
Comment=GNS3 Graphical Network Simulator&lt;br /&gt;
Icon=/usr/share/icons/hicolor/48x48/apps/gns3.png&lt;br /&gt;
Categories=Education;Network;&lt;br /&gt;
MimeType=application/x-gns3;application/x-gns3a;application/x-gns3project;&lt;br /&gt;
Keywords=simulator;network;netsim;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour mettre à jour :&lt;br /&gt;
 pip3 install --break-system-packages -U sip gns3-gui gns3-server PyQt5-sip PyQt5 aiohttp&lt;br /&gt;
&lt;br /&gt;
{{info|Si une des dépendances pose problème (c&#039;était le cas pour &#039;&#039;pyqt5&#039;&#039; en version 5.14.1 vers fin 2019 - début 2020), il est possible d&#039;en installer une version spécifique en la précisant ainsi : &amp;lt;code&amp;gt;pyqt5{{=}}{{=}}5.14.0&amp;lt;/code&amp;gt;. Le paquet a depuis changé de casse dans son nom comme vous pouvez le constater dans la ligne ce-dessus... Cet écosystème est insupportable. Il faut faire une veille constante, ce qui rend chaque mises à jours risquées et le maintient d&#039;une documentation fonctionnelle impossible.}}&lt;br /&gt;
&lt;br /&gt;
==Méthode APT==&lt;br /&gt;
Méthode obsolète. Utilisez la [[#Méthode_python3_PIP|méthode Python3 PIP]].&lt;br /&gt;
&lt;br /&gt;
La version de &#039;&#039;GNS3&#039;&#039; disponible dans les dépôts &#039;&#039;Debian&#039;&#039; est affligeante, il s&#039;agit d&#039;une très ancienne version (elle ne permet même pas de supprimer les câbles que l&#039;on connectes aux équipements...), nous allons donc ajouter le dépôt du projet pour être à jour.&lt;br /&gt;
&lt;br /&gt;
Depuis une installation via &#039;&#039;debootstrap&#039;&#039;, le paquet &amp;lt;code&amp;gt;dirmngr&amp;lt;/code&amp;gt; est absent et est nécessaire à l&#039;importation des clés &#039;&#039;GPG&#039;&#039;. Il faut l&#039;installer&lt;br /&gt;
 apt install dirmngr&lt;br /&gt;
&lt;br /&gt;
{{info|Sous Debian Stretch, la dépendance &#039;&#039;libvirt-bin&#039;&#039; ne peut être satisfaite car il s&#039;agit d&#039;un paquet de transition qui s&#039;est vu découpé en deux paquets nommés &#039;&#039;libvirt-daemon-system&#039;&#039; et &#039;&#039;libvirt-clients&#039;&#039; (voir [https://lists.debian.org/debian-user/2016/11/msg00518.html ici]). Le problème c&#039;est que sans un paquet qui s&#039;appel &#039;&#039;libvirt-bin&#039;&#039;, GNS3 est impossible à installer (et c&#039;est pas faute d&#039;avoir essayé, merci le gestionnaire de paquet &#039;&#039;apt&#039;&#039; qui sait se comporter comme une grosse merde quand il le faut). J&#039;ai donc mis au point deux solution pour palier au problème. L&#039;une exploite &#039;&#039;apt&#039;&#039; et une bidouille avec son &#039;&#039;sources.list&#039;&#039;, l&#039;autre utilise directement &#039;&#039;dpkg&#039;&#039; pour contourner le problème. Je conseil vivement d&#039;utiliser la solution &#039;&#039;apt&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Comme nous l&#039;avons vu, le paquet &#039;&#039;libvirt-bin&#039;&#039; n&#039;est pas disponible dans les dépôts &#039;&#039;Stretch&#039;&#039; suite à un changement programmé de stratégies de ses mainteneurs. Cependant il est présent dans ceux de Debian Jessie puisque il en été au stade de transition à ce moment là. &#039;&#039;Jessie&#039;&#039; n&#039;étant pas très différent de &#039;&#039;Stretch&#039;&#039;, il n&#039;y a pas de risques de stabilité en confondant ce paquet avec les autres. Nous allons donc combiner les dépôts de &#039;&#039;Jessie&#039;&#039; avec ceux de &#039;&#039;Stretch&#039;&#039; pour avoir ce qu&#039;il nous faut. Pas de panique, &#039;&#039;apt&#039;&#039; n&#039;étant pas si mal fait, il prendra toujours les paquets avec un numéros de version plus récent. Ce qui garanti que Seul les paquets absents de &#039;&#039;Stretch&#039;&#039; seront piochés dans &#039;&#039;Jessie&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Ajouter les dépôts de &#039;&#039;GNS3&#039;&#039; et &#039;&#039;Debian Jessie&#039;&#039; dans &#039;&#039;Stretch&#039;&#039;&lt;br /&gt;
 echo -e &#039;#GNS3\ndeb http://ppa.launchpad.net/gns3/ppa/ubuntu xenial main\n#Debian jessie (pour avoir le paquet libvirt-bin)\ndeb http://ftp.fr.debian.org/debian jessie main&#039; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
&lt;br /&gt;
{{attention|Avec &#039;&#039;Debian sid/buster&#039;&#039;, il faut remplacer la branche &#039;&#039;&#039;xenial&#039;&#039;&#039; du dépôt &#039;&#039;&#039;http://ppa.launchpad.net/gns3/ppa/ubuntu&#039;&#039;&#039; par &#039;&#039;&#039;bionic&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Ajout de la clé &#039;&#039;GPG&#039;&#039; des dépôts &#039;&#039;GNS3&#039;&#039;&lt;br /&gt;
 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F88F6D313016330404F710FC9A2FD067A2E3EF7B&lt;br /&gt;
&lt;br /&gt;
Mise à jour de la base &#039;&#039;apt&#039;&#039;&lt;br /&gt;
 apt update&lt;br /&gt;
&lt;br /&gt;
Installation de &#039;&#039;GNS3&#039;&#039;&lt;br /&gt;
 apt install gns3-gui&lt;br /&gt;
&lt;br /&gt;
Attribution des droits à l&#039;outil &#039;&#039;ubridge&#039;&#039;&lt;br /&gt;
 chmod 777 /usr/bin/ubridge&lt;br /&gt;
 setcap cap_net_admin,cap_net_raw=ep /usr/bin/ubridge&lt;br /&gt;
&lt;br /&gt;
==Méthode DPKG==&lt;br /&gt;
Cette méthode a été testé avec &#039;&#039;GNS3 1.5.3&#039;&#039;. Elle est fonctionnelle mais en plus de sa lourdeur, elle ne permet pas une monté en version simple. Elle reste toutefois plus abordable que la compilation depuis les sources et a été documenté car je me suis bien fait chier pour la pondre quand j&#039;en avais besoin.&lt;br /&gt;
&lt;br /&gt;
Installation des dépendances de &#039;&#039;gns3-gui&#039;&#039; (j&#039;ai enlevé &#039;&#039;gns3-server&#039;&#039; qui réclame &#039;&#039;libvirt-bin&#039;&#039; qui n&#039;existe pas)&lt;br /&gt;
 apt install python3 python3-pyqt5 python3-pyqt5.qtsvg wireshark vinagre libc6 libexpat1 zlib1g&lt;br /&gt;
&lt;br /&gt;
Installation des dépendances de &#039;&#039;gns3-server&#039;&#039; (j&#039;ai enlevé &#039;&#039;libvirt-bin&#039;&#039; qui n&#039;existe pas)&lt;br /&gt;
 apt install python3 vpcs qemu-system-x86 qemu-system-arm qemu-kvm cpulimit x11vnc xvfb libc6 libexpat1 zlib1g&lt;br /&gt;
&lt;br /&gt;
Téléchargement des dépendances non disponibles dans les dépôts &#039;&#039;Debian&#039;&#039;&lt;br /&gt;
 wget http://ppa.launchpad.net/gns3/ppa/ubuntu/pool/main/d/dynamips/dynamips_0.2.16-1~xenial1_amd64.deb http://ppa.launchpad.net/gns3/ppa/ubuntu/pool/main/u/ubridge/ubridge_0.9.11-1~yakkety_amd64.deb&lt;br /&gt;
&lt;br /&gt;
Installation manuelle des dépendances non disponibles dans les dépôts Debian (dépôt &#039;&#039;GNS3&#039;&#039;) pour &#039;&#039;gns3-server&#039;&#039;&lt;br /&gt;
 dpkg -i dynamips_0.2.16-1~xenial1_amd64.deb ubridge_0.9.11-1~xenial_amd64.deb&lt;br /&gt;
&lt;br /&gt;
Installation de &#039;&#039;gns3-server&#039;&#039; sans &#039;&#039;libvirt-bin&#039;&#039;&lt;br /&gt;
 dpkg -i --ignore-depends=libvirt-bin gns3-server_1.5.4~xenial1_amd64.deb&lt;br /&gt;
&lt;br /&gt;
Installation de &#039;&#039;gns3-gui&#039;&#039;&lt;br /&gt;
 dpkg -i gns3-gui_1.5.3~xenial5_amd64.deb&lt;br /&gt;
&lt;br /&gt;
À ce stade nous avons &#039;&#039;GNS3&#039;&#039; d&#039;installé. Ne criez pas victoire trop vite car &#039;&#039;libvirt-bin&#039;&#039;, bien que nous ayant bien fiat chier reste un élément indispensable pour émuler les équipements. Il va donc falloir l&#039;installer si on veut bénéficier de l’intérêt de ce logiciel. Pour se faire, soit vous optez pour l&#039;installation des dépendances de &#039;&#039;libvirt-bin&#039;&#039; ainsi que lui même à la main, soit vous le récupérez depuis les dépôts &#039;&#039;Jessie&#039;&#039; comme avec la méthode &#039;&#039;apt&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{astuce|Les dépendances des &#039;&#039;.deb&#039;&#039; se trouvent avec la commande &amp;lt;code&amp;gt;dpkg-deb --info nom.deb&amp;lt;/code&amp;gt;. Lorsque &#039;&#039;apt&#039;&#039; ne veut plus rien savoir et qu&#039;il casse les couille on nettoie tout avec la commande &amp;lt;code&amp;gt;apt --fix-broken install&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Attribution des droits à l&#039;outil &#039;&#039;ubridge&#039;&#039;&lt;br /&gt;
 chmod 777 /usr/bin/ubridge&lt;br /&gt;
 setcap cap_net_admin,cap_net_raw=ep /usr/bin/ubridge&lt;br /&gt;
&lt;br /&gt;
==Ajout d&#039;un IOS Cisco==&lt;br /&gt;
Les &#039;&#039;IOS Cisco&#039;&#039; sont disponibles dans [https://{{SERVERNAME}}/fichiers/réseaux/cisco/ios/ nos fichiers]. Il sont à ajouter dans les modèles de routeur (vous trouverez, ce n&#039;est pas très compliqué).&lt;br /&gt;
&lt;br /&gt;
=Lien avec le monde physique=&lt;br /&gt;
Faire son réseau virtuel est intéressant mais pouvoir exploiter ses atouts avec de vrais équipements, c&#039;est encore mieux. Ainsi ont peut considérer sont PC hôte comme une baie avec plein d&#039;équipement que l&#039;on relie au réseau externe. Les possibilités sont infinies...&lt;br /&gt;
&lt;br /&gt;
Pour se faire, il faut créer une interface de lien local &#039;&#039;tap&#039;&#039; et lui assigner une adresse &#039;&#039;IP&#039;&#039;. On ajoutera ensuite un &amp;quot;cloud&amp;quot; dans &#039;&#039;GNS3&#039;&#039; (équipement avec l&#039;icône de nuage) et on le configurera pour ajouter cette interface dans l&#039;onglet &#039;&#039;NIO TAP&#039;&#039;. Il faut rentrer le nom de l&#039;interface dans le champ prévu à cet effet : &#039;&#039;tap0&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{info|Avec &#039;&#039;GNS3 2.0&#039;&#039;, l&#039;étape avec l&#039;onglet n&#039;est plus nécessaire car le nuage ajoute automatiquement les interfaces qu&#039;il trouve sur l&#039;hôte.}}&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
===Nouvelle méthode===&lt;br /&gt;
De nos jours, tout peut se faire via la commande &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt; du paquet &amp;lt;code&amp;gt;iproute2&amp;lt;/code&amp;gt; comme expliqué [https://www.baturin.org/docs/iproute2/ ici].&lt;br /&gt;
 ip tuntap add dev tap0 mode tap user toto&lt;br /&gt;
 ip address add 10.200.200.1/30 dev tap0&lt;br /&gt;
 ip link set tap0 up&lt;br /&gt;
&lt;br /&gt;
===Ancienne méthode===&lt;br /&gt;
Installation des dépendances&lt;br /&gt;
 apt install uml-utilities&lt;br /&gt;
&lt;br /&gt;
Création de l&#039;interface &#039;&#039;tap0&#039;&#039; et attribution d&#039;une adresse &#039;&#039;IP&#039;&#039;&lt;br /&gt;
 tunctl -t tap0&lt;br /&gt;
 ip a a 10.200.200.1/30 dev tap0&lt;br /&gt;
 # ou via ifconfig du paquet net-tools&lt;br /&gt;
 # ifconfig tap0 10.200.200.1 netmask 255.255.255.252&lt;br /&gt;
&lt;br /&gt;
==Problèmes==&lt;br /&gt;
Cette étape aussi simple qu&#039;il puisse y paraître peut générer des erreurs bloquantes. Un message disant quand le chemin de &#039;&#039;ubridge&#039;&#039; n&#039;est pas valide ou qu&#039;il n&#039;est pas installé peut survenir. C&#039;est un problème de permission (Tapez &amp;lt;code&amp;gt;ub+&amp;lt;tab&amp;gt;&amp;lt;/code&amp;gt; dans un terminal connecté avec l&#039;utilisateur qui doit exécuter &#039;&#039;GNS3&#039;&#039;, si &#039;&#039;Bash&#039;&#039; n&#039;auto-complète pas en &#039;&#039;ubridge&#039;&#039;, c&#039;est que &amp;lt;code&amp;gt;/usr/bin/ubridge&amp;lt;/code&amp;gt; n&#039;a pas les bons droits. Sinon c&#039;est que c&#039;est un problème inconnu (ce qui ne serait pas surprenant vu comment c&#039;est une galère à installer).&lt;br /&gt;
&lt;br /&gt;
Pour régler ça. Faire ceci :&lt;br /&gt;
 chown yohan:ubridge /usr/bin/ubridge&lt;br /&gt;
 setcap cap_net_admin,cap_net_raw=ep /usr/bin/ubridge&lt;br /&gt;
&lt;br /&gt;
Ce problème peut également survenir après une mise à jour de &#039;&#039;GNS3&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Utilisation des Ios On Unix (IOU)=&lt;br /&gt;
&#039;&#039;IOS on UNIX&#039;&#039; est un &#039;&#039;IOS&#039;&#039; qui tourne comme un programme sur une distribution &#039;&#039;Linux&#039;&#039; (ça aurai donc dû s&#039;appeler &#039;&#039;IOL&#039;&#039;, on est d&#039;accord...). L’intérêt de cette solution est quelle permet de s&#039;affranchir de la principale lacune de &#039;&#039;GNS3&#039;&#039; : l&#039;impossibilité d&#039;utiliser des commutateurs. Les &#039;&#039;IOU&#039;&#039; permettent également d&#039;utiliser un grand nombre de fonctions réservées au haut de gamme des chez &#039;&#039;Cisco&#039;&#039;. Sous &#039;&#039;Windows&#039;&#039;, &#039;&#039;GNS3&#039;&#039; utilise [[qemu]] pour émuler une distribution &#039;&#039;Linux&#039;&#039; afin de faire tourner &#039;&#039;IOU&#039;&#039;, ce qui en diminue très grandement l&#039;intérêt (en même temps qu&#039;elle idée d&#039;utiliser &#039;&#039;Windows&#039;&#039;...).&lt;br /&gt;
&lt;br /&gt;
Autre chose : Je n&#039;ai pas réussi à déterminer si l&#039;utilisation des &#039;&#039;IOU&#039;&#039; représentait une violation de licence car comme à son habitude, &#039;&#039;Cisco&#039;&#039; pratique l’obscurantisme sur les détails et personne ne semble se soucier de ce sujet...&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;IOU&#039;&#039; sont des programmes 32 bits (sans commentaires...), on est donc obligé d&#039;ajouter une dépendance &#039;&#039;i386&#039;&#039; dans notre chère distribution &#039;&#039;amd64&#039;&#039;.&lt;br /&gt;
 dpkg --add-architecture i386&lt;br /&gt;
&lt;br /&gt;
 apt update&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Attention si vous utilisez ma documentation sur [[apt-mirror]] et que des erreurs 404 s&#039;affichent dû au fait que vous n&#039;avez pas l&#039;ensemble des dépôts &#039;&#039;i386&#039;&#039; en local (même si c&#039;est des dépôts qui n&#039;ont rien avoir avec la choucroute), je vous recommande de changer de serveur &#039;&#039;DNS&#039;&#039; dans &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; le temps de l&#039;installation sinon vous allez tourner en rond avec des erreurs de dépendance APT bien casse couille (c&#039;est du vécu) sans comprendre la raison de toute cette merde.&#039;&#039;&lt;br /&gt;
 apt install libssl1.1:i386&lt;br /&gt;
&lt;br /&gt;
Il faut désormais créer un lien symbolique pour que ce balo d{{&#039;}}&#039;&#039;IOU&#039;&#039; la trouve (bah oui, c&#039;est trop compliqué de pointer sur la bonne librairie hein, on va laisser l&#039;utilisateur faire le travail à la place des dev de &#039;&#039;Cisco&#039;&#039; tien)&lt;br /&gt;
 ln -s /usr/lib/i386-linux-gnu/libcrypto.so.1.1 /usr/lib/libcrypto.so.4&lt;br /&gt;
&lt;br /&gt;
Pour que &#039;&#039;IOU&#039;&#039; fonctionne, il faut une licence, que l&#039;on va devoir générer. Mais avant toute chose il faut faire pointer notre interface de lien local sur notre nom d&#039;hôte ainsi qu&#039;un nom de domaine de chez &#039;&#039;Cisco&#039;&#039; (probablement un mécanisme de vérification de licence). Dans mon exemple, mon nom d&#039;hôte est &#039;&#039;debian&#039;&#039;, adaptez à votre cas.&lt;br /&gt;
 echo &amp;quot;debian&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
 hostname debian&lt;br /&gt;
 echo -e &amp;quot;127.0.0.1 debian\n127.0.0.1 xml.cisco.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
{{attention|La suite de cette procédure doit être exécuté en utilisateur standard.}}&lt;br /&gt;
&lt;br /&gt;
Téléchargez le script de génération de licence&lt;br /&gt;
 wget https://doc.ycharbi.fr/fichiers/r%c3%a9seaux/cisco/iou/CiscoKeyGen.py&lt;br /&gt;
&lt;br /&gt;
Générez la licence (veillez à bien utiliser python 2 et non 3)&lt;br /&gt;
 python2.7 CiscoKeyGen.py&lt;br /&gt;
&lt;br /&gt;
Copiez la section suivante dans &amp;lt;code&amp;gt;~/.iourc&amp;lt;/code&amp;gt; (celle du script hein, pas la mienne, sinon ça va pas marcher gros bêta)&lt;br /&gt;
 [license]                                                                               &lt;br /&gt;
 debian = b0acc48944f31bd4;&lt;br /&gt;
&lt;br /&gt;
Créez le répertoire d&#039;accueil des &#039;&#039;IOU&#039;&#039;&lt;br /&gt;
 mkdir -p ~/GNS3/images/IOU/&lt;br /&gt;
&lt;br /&gt;
Téléchargez des &#039;&#039;IOU&#039;&#039; (avec la commande suivante ou [https://{{SERVERNAME}}/fichiers/r%c3%a9seaux/cisco/iou/ ici])&lt;br /&gt;
 wget https://doc.ycharbi.fr/fichiers/r%c3%a9seaux/cisco/iou/i86bi-linux-l2-adventerprisek9-15.1a.bin https://doc.ycharbi.fr/fichiers/r%c3%a9seaux/cisco/iou/i86bi-linux-l3-adventerprisek9-15.2.4M1.bin -P ~/GNS3/images/IOU/&lt;br /&gt;
&lt;br /&gt;
Les &#039;&#039;IOU&#039;&#039; étant des programmes, il faut leur donner les droits d&#039;exécution&lt;br /&gt;
 chmod +x ~/GNS3/images/IOU/*.bin&lt;br /&gt;
&lt;br /&gt;
La suite ce passe sous &#039;&#039;GNS3&#039;&#039; :&lt;br /&gt;
# Ajouter la licence dans GNS3 &amp;lt;code&amp;gt;Edit &amp;gt; Préférences &amp;gt; IOS on UNIX &amp;gt; Edit | Aller chercher ~/.iourc &amp;gt; Apply&amp;lt;/code&amp;gt;&lt;br /&gt;
# Ensuite, ajouter un modèle IOU dans GNS3 &amp;lt;code&amp;gt;Edit &amp;gt; Préférences &amp;gt; IOS on UNIX &amp;gt; IOU Device &amp;gt; New&amp;lt;/code&amp;gt;&lt;br /&gt;
# Profitez d&#039;un truck qui déchire pour vos archis !&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* &#039;&#039;&#039;Principale :&#039;&#039;&#039; Principale : https://nlabweb.wordpress.com/2016/04/06/running-cisco-switches-on-gns3/#more-147&lt;br /&gt;
* &#039;&#039;&#039;Problème de libcrypto.so.4 :&#039;&#039;&#039; https://www.youtube.com/watch?v=chcHuF3nEoQ&lt;br /&gt;
* &#039;&#039;&#039;CiscoKeyGen :&#039;&#039;&#039; https://gist.github.com/paalfe/8edd82f780c650ae2b4a/archive/bd7b6b8a81c338359e6de4ff0ed0def9f7dc9146.zip&lt;br /&gt;
* &#039;&#039;&#039;Images IOU :&#039;&#039;&#039; https://drive.google.com/file/d/0B8tSmsEbVQs-bjVXY3VqMFJrc1E/view&lt;br /&gt;
&lt;br /&gt;
==À creuser==&lt;br /&gt;
Se passer de &#039;&#039;GNS3&#039;&#039; pour les &#039;&#039;IOU&#039;&#039; : https://myhowtosandprojects.blogspot.fr/2013/08/installing-and-running-iou-checking_10.html&lt;br /&gt;
&lt;br /&gt;
=Utilisation de Docker=&lt;br /&gt;
[[Docker]] est une solution de conteneurisation. Il permettra de créer des serveurs et des postes clients virtuelles ainsi que faire des analyses réseaux au sein de l&#039;infra virtuelle. Docker n&#039;est malheureusement pas dans les dépôts Debian. Il faut donc ajouter le dépôt officiel à la main.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Pour l&#039;installation de &#039;&#039;Docker&#039;&#039;, ce référer à la page suivante : [[Docker#Installation|Installation de Docker]].&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Ajout de l&#039;utilisateur se servant de &#039;&#039;GNS3&#039;&#039; au groupe &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt; (sinon l&#039;application ne pourra pas se connecter au démon &#039;&#039;docker&#039;&#039; pour interagir avec les conteneurs)&lt;br /&gt;
 usermod -aG docker &amp;lt;VOTRE_UTILISATEUR_DE_GNS3&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je n&#039;ai pas trouver comment appliquer ces changements autrement qu&#039;en redémarrant, navré&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
Téléchargement d&#039;un conteneur &#039;&#039;Kalilinux&#039;&#039; (en &#039;&#039;root&#039;&#039;)&lt;br /&gt;
 docker pull gns3/kalilinux&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il y a un bon nombre de conteneurs téléchargeables dans le [https://hub.docker.com/r/gns3/ dépôt Docker du projet GNS3]. Je vous conseils d&#039;aller y faire un tour.}}&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant ajouter le conteneur à &#039;&#039;GNS3&#039;&#039; en tant que modèle. Pour se faire il faut aller dans les paramètres, dans la section dédié à &#039;&#039;Docker&#039;&#039; et faire du clickodrôme jusqu&#039;à l&#039;ajout de notre conteneur (le 3ème lien des sources montre la procédure officielle si vraiment vous êtes en galère).&lt;br /&gt;
&lt;br /&gt;
==Problèmes==&lt;br /&gt;
Tout comme &#039;&#039;ubridge&#039;&#039;, &#039;&#039;Docker&#039;&#039; peut ne pas fonctionner pour cause de permission. Si la commande &amp;lt;code&amp;gt;docker ps&amp;lt;/code&amp;gt; renvoi une erreur de permission en tant que utilisateur utilisant &#039;&#039;GNS3&#039;&#039;, c&#039;est qu&#039;il n&#039;appartient pas au groupe &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
J&#039;ai également eu l&#039;erreur &amp;lt;code&amp;gt;Docker has returned an error: 304 b&amp;lt;/code&amp;gt; avec &#039;&#039;GNS3 1.5.3&#039;&#039;. Je n&#039;ai pas eu le temps de résoudre cette erreur qui a été corrigé avec la mise à jour 2.0 de &#039;&#039;GNS3&#039;&#039; et je n&#039;ai pas de piste de résolution (ça semble être le problème de merde bien chiant à régler avec aucune aide sur Internet). Dieu vous garde si vous la rencontrez...&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
* https://store.docker.com/editions/community/docker-ce-server-debian?tab=description&lt;br /&gt;
* http://stackoverflow.com/questions/21871479/docker-cant-connect-to-docker-daemon&lt;br /&gt;
* https://docs.gns3.com/1KGkv1Vm5EgeDusk1qS1svacpuQ1ZUQSVK3XqJ01WKGc/index.html&lt;br /&gt;
* https://hub.docker.com/r/gns3/kalilinux/&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* http://docs.gns3.com/1QXVIihk7dsOL7Xr7Bmz4zRzTsJ02wklfImGuHwTlaA4/&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Mitmproxy&amp;diff=1533</id>
		<title>Mitmproxy</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Mitmproxy&amp;diff=1533"/>
		<updated>2024-08-15T15:42:16Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Corrections de fautes de français + légère mise en forme + ajout de la section &amp;quot;Sources&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services_mandataire]]&lt;br /&gt;
&lt;br /&gt;
[https://mitmproxy.org/ Mitmproxy] est un mandataire (&#039;&#039;proxy&#039;&#039;) destiné au débogage, tests, notamment de pénétrations ainsi qu&#039;aux évaluations des mesures de protections d&#039;un système d&#039;information.&lt;br /&gt;
Il est extrêmement utile pour comprendre le fonctionnement d&#039;un programme officiant au travers de sessions &#039;&#039;HTTPS&#039;&#039; puisqu&#039;il permet de réunir les éléments nécessaires à l&#039;inspection des trames chiffrées par &#039;&#039;TLS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il peut, en outre, servir à espionner la navigation &#039;&#039;HTTPS&#039;&#039; des utilisateurs d&#039;un réseau à accès limité (obligeant l&#039;accès au &#039;&#039;WAN&#039;&#039; par l&#039;intermédiaire d&#039;un mandataire). À l&#039;issue de la lecture de ce document, vous devriez être sensibilisé à ne jamais réaliser d&#039;opérations personnelles sur ce genre de réseau (connexion à un &#039;&#039;Webmail&#039;&#039; ou à tout portail nécessitant un identifiant personnel par exemple).&lt;br /&gt;
&lt;br /&gt;
Cette documentation explique brièvement comment se servir de l&#039;outil pour enregistrer les clés de sessions &#039;&#039;TLS&#039;&#039; et présente un cas pratique avec le déchiffrement d&#039;un &amp;lt;code&amp;gt;docker pull&amp;lt;/code&amp;gt;. Les trames capturées via [[Tcpdump]] pourront alors être examinées par un outil graphique comme [[Wireshark]].&lt;br /&gt;
&lt;br /&gt;
=Mise en œuvre=&lt;br /&gt;
==Installation==&lt;br /&gt;
Installation de l&#039;outil&lt;br /&gt;
 apt install --no-install-recommends mitmproxy&lt;br /&gt;
&lt;br /&gt;
Le fait de lancer &amp;lt;code&amp;gt;mitmproxy&amp;lt;/code&amp;gt; créé automatiquement le répertoire &amp;lt;code&amp;gt;~/.mitmproxy&amp;lt;/code&amp;gt; contenant les éléments secrets utilisés dans une transaction &#039;&#039;TLS&#039;&#039;. Il est alors possible d&#039;importer le certificat serveur dans la base local du client à espionner ou générer son propre certificat via [[openssl|OpenSSL]].&lt;br /&gt;
&lt;br /&gt;
Afin d&#039;agrémenter la démonstration, la seconde solution sera utilisée. Outre l&#039;aspect didactique, générer votre propre certificat est indispensable lorsque l&#039;interception concerne la communication d&#039;une application exigeante en terme de vérification (ce pourquoi [[Docker]] est utilisé en guise d&#039;exemple). Il est en effet nécessaire dans ce cas d&#039;ajouter des noms alternatifs dans la section &amp;lt;code&amp;gt;subjectAltName&amp;lt;/code&amp;gt; du [https://fr.wikipedia.org/wiki/X.509 certificat X.509] afin de spécifier les adresses signées par celui-ci.&lt;br /&gt;
&lt;br /&gt;
==Configuration des clés==&lt;br /&gt;
Création du répertoire d&#039;accueil des éléments secrets&lt;br /&gt;
 mkdir -p ~/.mitmproxy/certs&lt;br /&gt;
&lt;br /&gt;
Génération desdits éléments&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# Génération de la clé privée de l&#039;autorité de certification (AC)&lt;br /&gt;
openssl genrsa -out ~/.mitmproxy/certs/ca.key 2048&lt;br /&gt;
# Génération du couple de clés du serveur mandataire&lt;br /&gt;
openssl req -new -x509 -days 365 -key ~/.mitmproxy/certs/ca.key -subj &amp;quot;/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=Acme Root CA&amp;quot; -out ~/.mitmproxy/certs/ca.crt&lt;br /&gt;
# Création d&#039;un fichier de demande de certificat auprès de l&#039;AC&lt;br /&gt;
openssl req -newkey rsa:2048 -nodes -keyout ~/.mitmproxy/certs/serveur.key -subj &amp;quot;/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=*&amp;quot; -out ~/.mitmproxy/certs/serveur.csr&lt;br /&gt;
# Génération d&#039;un certificat signé par l&#039;AC et intégrant la liste des domaines à certifier&lt;br /&gt;
openssl x509 -req -extfile &amp;lt;(printf &amp;quot;subjectAltName=DNS:*.ycharbi.fr,DNS:*.docker.io,DNS:*.cloudflare.docker.com,IP:127.0.0.1&amp;quot;) -days 365 -in ~/.mitmproxy/certs/serveur.csr -CA ~/.mitmproxy/certs/ca.crt -CAkey ~/.mitmproxy/certs/ca.key -CAcreateserial -out ~/.mitmproxy/certs/serveur.crt&lt;br /&gt;
&lt;br /&gt;
# Chaînage du certificat avec la clé associée pour mitmproxy&lt;br /&gt;
cat ~/.mitmproxy/certs/serveur.crt ~/.mitmproxy/certs/serveur.key &amp;gt; ~/.mitmproxy/certs/cert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le point d&#039;intérêt principal de ces opérations et qui devra être personnalisé en fonction du cas à traiter est la sous-commande &amp;lt;code&amp;gt;printf &amp;quot;subjectAltName=DNS:*.ycharbi.fr,DNS:*.docker.io,DNS:*.cloudflare.docker.com,IP:127.0.0.1&amp;quot;&amp;lt;/code&amp;gt; présente à la ligne numéro 8. Utilisez les domaines que vous voulez voir validé par &#039;&#039;TLS&#039;&#039; lors de la poignée de main entre une application cliente et votre mandataire.&lt;br /&gt;
&lt;br /&gt;
==Tests de fonctionnement==&lt;br /&gt;
Afin de tester notre préparation, nous pouvons lancer &amp;lt;code&amp;gt;mitmproxy&amp;lt;/code&amp;gt; de la façon suivante :&lt;br /&gt;
 SSLKEYLOGFILE=&amp;quot;/tmp/clés_tls_mitm.txt&amp;quot; mitmproxy --certs *=~/.mitmproxy/certs/cert.pem&lt;br /&gt;
&lt;br /&gt;
où :&lt;br /&gt;
* &#039;&#039;&#039;SSLKEYLOGFILE= &#039;&#039;&#039; : emplacement du fichier contenant les clés négociées lors des différentes sessions &#039;&#039;TLS&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;--certs *= &#039;&#039;&#039; : emplacement du certificat chaîné serveur pour signer le domaine spécifié dans la commande (ici &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; pour tout les domaines). Il peut y avoir plusieurs fois ce paramètre pour mettre autant de certificats que de domaines au besoin&lt;br /&gt;
&lt;br /&gt;
Les clients &#039;&#039;HTTP&#039;&#039; communs peuvent êtres utilisés pour tester le fonctionnement de la solution&lt;br /&gt;
 curl --proxy 127.0.0.1:8080 --cacert ~/.mitmproxy/certs/cert.pem https://doc.ycharbi.fr/index.php/Mitmproxy&lt;br /&gt;
 wget -e https_proxy=127.0.0.1:8080 --ca-certificate ~/.mitmproxy/certs/cert.pem https://doc.ycharbi.fr/index.php/Mitmproxy&lt;br /&gt;
&lt;br /&gt;
L&#039;exploitation du fichier de clés est expliqué dans le cas pratique de la section suivante.&lt;br /&gt;
&lt;br /&gt;
=Cas pratique=&lt;br /&gt;
Comme énoncé en introduction, nous allons utiliser notre outil pour analyser les requêtes effectuées par un &amp;lt;code&amp;gt;docker pull&amp;lt;/code&amp;gt;. Cet outil étant particulièrement chiant avec &#039;&#039;HTTPS&#039;&#039; (comme la majorité des applications écrites en &#039;&#039;Golang&#039;&#039;), la mise en œuvre de notre capture représente un bon exercice.&lt;br /&gt;
&lt;br /&gt;
Pour que cela fonctionne, il faut :&lt;br /&gt;
* un certificat avec les bons domaines renseignés dans le champ &amp;lt;code&amp;gt;subjectAltName&amp;lt;/code&amp;gt; (fait dans l&#039;étape préparatoire)&lt;br /&gt;
* ajouter ce certificat dans la configuration du registre d&#039;image &#039;&#039;Docker&#039;&#039; dont l&#039;adresse sera remplacée par celle de notre mandataire (la commande de tirage de l&#039;image reste identique)&lt;br /&gt;
* configurer &#039;&#039;Docker&#039;&#039; pour utiliser notre mandataire&lt;br /&gt;
* ajouter ce même certificat dans la base interne du système client&lt;br /&gt;
* rafraîchir la configuration de &#039;&#039;Systemd&#039;&#039; et relancer le démon &#039;&#039;Docker&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Installation des paquets==&lt;br /&gt;
Installation de &#039;&#039;Docker&#039;&#039; et de &#039;&#039;Tcpdump&#039;&#039;&lt;br /&gt;
 apt install --no-install-recommends docker.io tcpdump&lt;br /&gt;
&lt;br /&gt;
Le premier servira d&#039;application &#039;&#039;TLS&#039;&#039; cliente et le second capturera le trafic chiffré. Celui-ci sera par la suite déchiffré par &#039;&#039;Wireshark&#039;&#039; à l&#039;aide des clés enregistrées par &#039;&#039;Mitmproxy&#039;&#039; pendant la communication.&lt;br /&gt;
&lt;br /&gt;
==Configuration de l&#039;environnement==&lt;br /&gt;
Ajout du certificat du mandataire comme celui d&#039;un registre d&#039;images&lt;br /&gt;
 mkdir -p /etc/docker/certs.d/127.0.0.1:8080&lt;br /&gt;
 cp ~/.mitmproxy/certs/serveur.crt /etc/docker/certs.d/127.0.0.1:8080/ca.crt&lt;br /&gt;
&lt;br /&gt;
Configuration du mandataire pour les requêtes au dépôt distant&lt;br /&gt;
 mkdir -p /etc/systemd/system/docker.service.d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt; /etc/systemd/system/docker.service.d/http-proxy.conf&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;HTTPS_PROXY=https://127.0.0.1:8080&amp;quot;&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout du certificat dans la base interne du système&lt;br /&gt;
 cp ~/.mitmproxy/certs/serveur.crt /usr/local/share/ca-certificates/&lt;br /&gt;
 update-ca-certificates&lt;br /&gt;
&lt;br /&gt;
Rechargement de la configuration de &#039;&#039;Systemd&#039;&#039; et du démon &#039;&#039;Docker&#039;&#039;&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
 systemctl restart docker.service&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il est possible d&#039;afficher les variables d&#039;environnements passées à l&#039;exécutable de &#039;&#039;Docker&#039;&#039; par le service &#039;&#039;Systemd&#039;&#039; via la commande &amp;lt;code&amp;gt;systemctl show --property{{=}}Environment docker&amp;lt;/code&amp;gt; afin de valider la bonne prise en compte de notre paramètre. Un &amp;lt;code&amp;gt;docker search alpine&amp;lt;/code&amp;gt; vous indiquera rapidement si votre installation est correcte. En cas de fonctionnement, le mandataire affichera la session et la commande renverra son résultat habituel. En cas d&#039;erreur, une indication sur l&#039;origine du problème rencontré par le client sera renvoyée dans la console.}}&lt;br /&gt;
&lt;br /&gt;
==Tests de fonctionnement==&lt;br /&gt;
Nous aurons besoin de trois consoles pour réaliser les opérations qui vont suivre. Un multiplexeur de terminal comme [https://github.com/tmux/tmux/wiki Tmux] peut s&#039;avérer bien utile dans de pareils circonstances. La commande &amp;lt;code&amp;gt;tmux new -A -s toto&amp;lt;/code&amp;gt; peut être utilisée pour initier un tel environnement (totalement facultatif).&lt;br /&gt;
&lt;br /&gt;
===Première console===&lt;br /&gt;
Exécuter le mandataire&lt;br /&gt;
 SSLKEYLOGFILE=&amp;quot;/tmp/clés_tls_mitm.txt&amp;quot; mitmproxy --certs *=~/.mitmproxy/certs/cert.pem&lt;br /&gt;
&lt;br /&gt;
===Deuxième console===&lt;br /&gt;
Exécuter l&#039;enregistreur de trames&lt;br /&gt;
 tcpdump -ni any -w /tmp/tls.pcap port not 22&lt;br /&gt;
&lt;br /&gt;
===Troisième console===&lt;br /&gt;
Tirer une image du registre distant&lt;br /&gt;
 docker pull alpine&lt;br /&gt;
&lt;br /&gt;
Si tout est bon, votre image a été récupérée par &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tcpdump&amp;lt;/code&amp;gt; a enregistré l&#039;échange chiffré et &amp;lt;code&amp;gt;mitmproxy&amp;lt;/code&amp;gt; a journalisé les sessions en plus d&#039;avoir enregistré les clés &#039;&#039;TLS&#039;&#039; de celles-ci. Il ne reste plus qu&#039;à quitter les programmes des deux premières consoles pour en envoyer les fichiers de capture et de clés à une machine graphique possédant &amp;lt;code&amp;gt;wireshark&amp;lt;/code&amp;gt; pour déchiffrement et analyse.&lt;br /&gt;
 scp /tmp/tls.pcap /tmp/clés_tls_mitm.txt ycharbi@\[2001:db8::1\]:/tmp/&lt;br /&gt;
&lt;br /&gt;
===Sur la machine graphique===&lt;br /&gt;
Ouvrir le fichier de capture &amp;lt;code&amp;gt;/tmp/tls.pcap&amp;lt;/code&amp;gt; avec &#039;&#039;Wireshark&#039;&#039; et ajouter le fichier de clés &amp;lt;code&amp;gt;/tmp/clés_tls_mitm.txt&amp;lt;/code&amp;gt; dans les paramètres du protocole &#039;&#039;TLS&#039;&#039; : &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; inline&amp;gt;&amp;lt;ctrl&amp;gt;+&amp;lt;maj&amp;gt;+&amp;lt;p&amp;gt; &amp;gt; Protocols &amp;gt; TLS &amp;gt; (Pre)-Master-Sercret log filename &amp;gt; Parcourir... &amp;gt; /tmp/clés_tls_mitm.txt &amp;gt; OK&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Les paquets &#039;&#039;TLS&#039;&#039; se déchiffrent instantanément, laissant apparaître les paquets &#039;&#039;HTTP&#039;&#039; qu&#039;ils masquaient. Vous pouvez ainsi observer les &#039;&#039;URL&#039;&#039; que le client &#039;&#039;Docker&#039;&#039; requêtes pour récupérer ses images.&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* https://docs.mitmproxy.org/stable/&lt;br /&gt;
** https://docs.mitmproxy.org/stable/howto-wireshark-tls/&lt;br /&gt;
** https://docs.mitmproxy.org/stable/concepts-options/&lt;br /&gt;
* https://medium.com/@ifeanyiigili/how-to-setup-a-private-docker-registry-with-a-self-sign-certificate-43a7407a1613&lt;br /&gt;
* https://betterprogramming.pub/deploy-a-docker-registry-using-tls-and-htpasswd-56dd57a1215a&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Mitmproxy&amp;diff=1532</id>
		<title>Mitmproxy</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Mitmproxy&amp;diff=1532"/>
		<updated>2024-08-15T15:20:21Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Page créée avec « Category:Services_mandataire  [https://mitmproxy.org/ Mitmproxy] est un mandataire (&amp;#039;&amp;#039;proxy&amp;#039;&amp;#039;) destiné au débogage, tests, notamment de pénétrations ainsi qu&amp;#039;aux évaluation des mesures de protections d&amp;#039;un système d&amp;#039;information. Il est extrêmement utile pour comprendre le fonctionnement d&amp;#039;un programme officiant au travers de sessions &amp;#039;&amp;#039;HTTPS&amp;#039;&amp;#039; puisqu&amp;#039;il permet de réunir les éléments nécessaires à l&amp;#039;inspection des trames chiffrées par &amp;#039;&amp;#039;TLS&amp;#039;&amp;#039;.  Il... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services_mandataire]]&lt;br /&gt;
&lt;br /&gt;
[https://mitmproxy.org/ Mitmproxy] est un mandataire (&#039;&#039;proxy&#039;&#039;) destiné au débogage, tests, notamment de pénétrations ainsi qu&#039;aux évaluation des mesures de protections d&#039;un système d&#039;information.&lt;br /&gt;
Il est extrêmement utile pour comprendre le fonctionnement d&#039;un programme officiant au travers de sessions &#039;&#039;HTTPS&#039;&#039; puisqu&#039;il permet de réunir les éléments nécessaires à l&#039;inspection des trames chiffrées par &#039;&#039;TLS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il peut, en outre, servir à espionner la navigation &#039;&#039;HTTPS&#039;&#039; des utilisateurs d&#039;un réseau limité (obligeant l&#039;accès au &#039;&#039;WAN&#039;&#039; par l&#039;intermédiaire d&#039;un mandataire). À l&#039;issue de la lecture de ce document, vous devriez être sensibilisé à ne jamais réaliser d&#039;opérations personnelles sur ce genre de réseau (connexion à un &#039;&#039;Webmail&#039;&#039; ou à tout portail nécessitant un identifiant personnel par exemple).&lt;br /&gt;
&lt;br /&gt;
Cette documentation explique brièvement comment se servir de l&#039;outil pour enregistrer les clés de sessions &#039;&#039;TLS&#039;&#039; et présente un cas pratique avec le déchiffrement d&#039;un &amp;lt;code&amp;gt;docker pull&amp;lt;/code&amp;gt;. Les trames capturées via [[Tcpdump]] pourront alors être examinées par un outil graphique comme [[Wireshark]].&lt;br /&gt;
&lt;br /&gt;
=Mise en œuvre=&lt;br /&gt;
==Installation==&lt;br /&gt;
Installation de l&#039;outil&lt;br /&gt;
 apt install --no-install-recommends mitmproxy&lt;br /&gt;
&lt;br /&gt;
Le fait de lancer &amp;lt;code&amp;gt;mitmproxy&amp;lt;/code&amp;gt; créé automatiquement le répertoire &amp;lt;code&amp;gt;~/.mitmproxy&amp;lt;/code&amp;gt; contenant les éléments secrets utilisés dans une transaction &#039;&#039;TLS&#039;&#039;. Il est alors possible d&#039;importer le certificat serveur dans la base local du client à espionner ou générer son propre certificat via [[openssl|OpenSSL]]. Afin d&#039;agrémenter la démonstration, la seconde solution sera utilisée. Outre l&#039;aspect didactique, générer votre propre certificat est indispensable lorsque l&#039;interception de la communication d&#039;une application exigeante en terme de vérification est utilisée (ce pourquoi [[Docker]] est utilisé en guise d&#039;exemple). Il est en effet nécessaire dans ce cas d&#039;ajouter des noms alternatifs dans la section &amp;lt;code&amp;gt;subjectAltName&amp;lt;/code&amp;gt; du [https://fr.wikipedia.org/wiki/X.509 certificat X.509] afin de spécifier les adresses signées par celui-ci.&lt;br /&gt;
&lt;br /&gt;
==Configuration des clés==&lt;br /&gt;
Création du répertoire d&#039;accueil des éléments secrets&lt;br /&gt;
 mkdir -p ~/.mitmproxy/certs&lt;br /&gt;
&lt;br /&gt;
Génération desdits éléments&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
# Génération de la clé privée de l&#039;autorité de certification (AC)&lt;br /&gt;
openssl genrsa -out ~/.mitmproxy/certs/ca.key 2048&lt;br /&gt;
# Génération du couple de clés du serveur mandataire&lt;br /&gt;
openssl req -new -x509 -days 365 -key ~/.mitmproxy/certs/ca.key -subj &amp;quot;/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=Acme Root CA&amp;quot; -out ~/.mitmproxy/certs/ca.crt&lt;br /&gt;
# Création d&#039;un fichier de demande de certificat auprès de l&#039;AC&lt;br /&gt;
openssl req -newkey rsa:2048 -nodes -keyout ~/.mitmproxy/certs/serveur.key -subj &amp;quot;/C=CN/ST=GD/L=SZ/O=Acme, Inc./CN=*&amp;quot; -out ~/.mitmproxy/certs/serveur.csr&lt;br /&gt;
# Génération d&#039;un certificat signé par l&#039;AC et intégrant la liste des domaines à certifier&lt;br /&gt;
openssl x509 -req -extfile &amp;lt;(printf &amp;quot;subjectAltName=DNS:*.ycharbi.fr,DNS:*.docker.io,DNS:*.cloudflare.docker.com,IP:127.0.0.1&amp;quot;) -days 365 -in ~/.mitmproxy/certs/serveur.csr -CA ~/.mitmproxy/certs/ca.crt -CAkey ~/.mitmproxy/certs/ca.key -CAcreateserial -out ~/.mitmproxy/certs/serveur.crt&lt;br /&gt;
&lt;br /&gt;
# Chaînage du certificat avec la clé associée pour mitmproxy&lt;br /&gt;
cat ~/.mitmproxy/certs/serveur.crt ~/.mitmproxy/certs/serveur.key &amp;gt; ~/.mitmproxy/certs/cert.pem&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le point d&#039;intérêt principal de ces opérations et qui devra être personnalisé en fonction du cas à traiter est la sous commande &amp;lt;code&amp;gt;printf &amp;quot;subjectAltName=DNS:*.ycharbi.fr,DNS:*.docker.io,DNS:*.cloudflare.docker.com,IP:127.0.0.1&amp;quot;&amp;lt;/code&amp;gt; présente à la ligne numéro 8. Utilisez les domaines que vous voulez voir validé par &#039;&#039;TLS&#039;&#039; lors de la poignée de main entre une application cliente et votre mandataire.&lt;br /&gt;
&lt;br /&gt;
==Tests de fonctionnement==&lt;br /&gt;
Afin de tester notre préparation, nous pouvons lancer &amp;lt;code&amp;gt;mitmproxy&amp;lt;/code&amp;gt; de la façon suivante :&lt;br /&gt;
 SSLKEYLOGFILE=&amp;quot;/tmp/clés_tls_mitm.txt&amp;quot; mitmproxy --certs *=~/.mitmproxy/certs/cert.pem&lt;br /&gt;
&lt;br /&gt;
où :&lt;br /&gt;
* &#039;&#039;&#039;SSLKEYLOGFILE= &#039;&#039;&#039; : emplacement du fichier contenant les clés négociées lors des différentes sessions &#039;&#039;TLS&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;--certs *= &#039;&#039;&#039; : emplacement du certificat chaîné serveur pour signer le domaine spécifié dans la commande (ici &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; pour tout les domaines). Il peut y avoir plusieurs fois ce paramètre pour mettre autant de certificat que de domaines au besoin&lt;br /&gt;
&lt;br /&gt;
Les clients &#039;&#039;HTTP&#039;&#039; communs peuvent êtres utilisés pour tester le fonctionnement de la solution&lt;br /&gt;
 curl --proxy 127.0.0.1:8080 --cacert ~/.mitmproxy/certs/cert.pem https://doc.ycharbi.fr/index.php/Mitmproxy&lt;br /&gt;
 wget -e https_proxy=127.0.0.1:8080 --ca-certificate ~/.mitmproxy/certs/cert.pem https://doc.ycharbi.fr/index.php/Mitmproxy&lt;br /&gt;
&lt;br /&gt;
L&#039;exploitation du fichier de clés est expliqué dans le cas pratique de la section suivante.&lt;br /&gt;
&lt;br /&gt;
=Cas pratique=&lt;br /&gt;
Comme énoncé en introduction, nous allons utiliser notre outil pour analyser les requêtes effectuées par un &amp;lt;code&amp;gt;docker pull&amp;lt;/code&amp;gt;. Cet outil étant particulièrement chiant avec &#039;&#039;HTTPS&#039;&#039; (comme la majorité des applications écrites en &#039;&#039;Golang&#039;&#039;), la mise en œuvre de notre capture représente un bon exercice.&lt;br /&gt;
&lt;br /&gt;
Pour que cela fonctionne, il faut :&lt;br /&gt;
* un certificat avec les bons domaines renseignés dans le champ &amp;lt;code&amp;gt;subjectAltName&amp;lt;/code&amp;gt; (fait dans l&#039;étape préparatoire)&lt;br /&gt;
* ajouter ce certificat dans la configuration du registre d&#039;image Docker dont l&#039;adresse sera remplacée par celle de notre mandataire (la commande de tirage de l&#039;image reste identique)&lt;br /&gt;
* configurer &#039;&#039;Docker&#039;&#039; pour utiliser notre mandataire&lt;br /&gt;
* ajouter ce même certificat dans la base interne du système client&lt;br /&gt;
* mettre à jour la configuration de &#039;&#039;Systemd&#039;&#039; et relancer le démon &#039;&#039;Docker&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Installation des paquets==&lt;br /&gt;
Installation de &#039;&#039;Docker&#039;&#039; et de &#039;&#039;Tcpdump&#039;&#039;&lt;br /&gt;
 apt install --no-install-recommends docker.io tcpdump&lt;br /&gt;
&lt;br /&gt;
Le premier servira d&#039;application &#039;&#039;TLS&#039;&#039; cliente, le second, capturera le trafic chiffré. Celui-ci sera par la suite déchiffré par &#039;&#039;Wireshark&#039;&#039; à l&#039;aide des clés enregistrées par &#039;&#039;Mitmproxy&#039;&#039; pendant la communication.&lt;br /&gt;
&lt;br /&gt;
==Configuration de l&#039;environnement==&lt;br /&gt;
Ajout du certificat du mandataire comme celui d&#039;un registre d&#039;images&lt;br /&gt;
 mkdir -p /etc/docker/certs.d/127.0.0.1:8080&lt;br /&gt;
 cp ~/.mitmproxy/certs/serveur.crt /etc/docker/certs.d/127.0.0.1:8080/ca.crt&lt;br /&gt;
&lt;br /&gt;
Configuration du mandataire pour les requêtes au dépôt distant&lt;br /&gt;
 mkdir -p /etc/systemd/system/docker.service.d&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt; /etc/systemd/system/docker.service.d/http-proxy.conf&lt;br /&gt;
[Service]&lt;br /&gt;
Environment=&amp;quot;HTTPS_PROXY=https://127.0.0.1:8080&amp;quot;&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajout du certificat dans la base interne du système&lt;br /&gt;
 cp ~/.mitmproxy/certs/serveur.crt /usr/local/share/ca-certificates/&lt;br /&gt;
 update-ca-certificates&lt;br /&gt;
&lt;br /&gt;
Rechargement de la configuration de &#039;&#039;Systemd&#039;&#039; et du démon &#039;&#039;Docker&#039;&#039;&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
 systemctl restart docker.service&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il est possible d&#039;afficher les variables d&#039;environnements passées à l&#039;exécutable de &#039;&#039;Docker&#039;&#039; par le service &#039;&#039;Systemd&#039;&#039; via la commande &amp;lt;code&amp;gt;systemctl show --property{{=}}Environment docker&amp;lt;/code&amp;gt; afin de valider la bonne prise en compte de notre paramètre. Un &amp;lt;code&amp;gt;docker search alpine&amp;lt;/code&amp;gt; vous indiquera rapidement si votre installation est correcte. En cas de fonctionnement, le mandataire affichera la session et la commande renverra son résultat habituel. En cas d&#039;erreur, une indication sur l&#039;origine du problème rencontré par le client sera renvoyée dans la console.}}&lt;br /&gt;
&lt;br /&gt;
==Tests de fonctionnement==&lt;br /&gt;
Nous aurons besoin de trois consoles pour réaliser les opérations qui vont suivre. Un multiplexeur de terminal comme [https://github.com/tmux/tmux/wiki Tmux] peut s&#039;avérer bien utile dans de pareils circonstances. La commande &amp;lt;code&amp;gt;tmux new -A -s toto&amp;lt;/code&amp;gt; peut être utilisée pour initier un tel environnement (totalement facultatif).&lt;br /&gt;
&lt;br /&gt;
===Première console===&lt;br /&gt;
Exécuter le mandataire&lt;br /&gt;
 SSLKEYLOGFILE=&amp;quot;/tmp/clés_tls_mitm.txt&amp;quot; mitmproxy --certs *=~/.mitmproxy/certs/cert.pem&lt;br /&gt;
&lt;br /&gt;
===Deuxième console===&lt;br /&gt;
Exécuté l&#039;enregistreur de trames&lt;br /&gt;
 tcpdump -ni any -w /tmp/tls.pcap port not 22&lt;br /&gt;
&lt;br /&gt;
===Troisième console===&lt;br /&gt;
Tirer une image du registre distant&lt;br /&gt;
 docker pull alpine&lt;br /&gt;
&lt;br /&gt;
Si tout est bon, votre image a été récupérée par &amp;lt;code&amp;gt;docker&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tcpdump&amp;lt;/code&amp;gt; a enregistré l&#039;échange chiffré et &amp;lt;code&amp;gt;mitmproxy&amp;lt;/code&amp;gt; a journalisé les sessions en plus d&#039;avoir enregistré les clés de sessions &#039;&#039;TLS&#039;&#039;. Il ne reste plus qu&#039;à quitter les programmes des deux premières consoles pour en envoyer les fichiers de capture et de clés à une machine graphique possédant &amp;lt;code&amp;gt;wireshark&amp;lt;/code&amp;gt; pour déchiffrement et analyse.&lt;br /&gt;
 scp /tmp/tls.pcap /tmp/clés_tls_mitm.txt ycharbi@\[2001:db8::1\]:/tmp/&lt;br /&gt;
&lt;br /&gt;
===Sur la machine graphique===&lt;br /&gt;
Ouvrir le fichier de capture &amp;lt;code&amp;gt;/tmp/tls.pcap&amp;lt;/code&amp;gt; avec &#039;&#039;Wireshark&#039;&#039; et ajouter le fichier de clés &amp;lt;code&amp;gt;/tmp/clés_tls_mitm.txt&amp;lt;/code&amp;gt; dans les paramètres du protocole &#039;&#039;TLS&#039;&#039; : &amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; inline&amp;gt;&amp;lt;ctrl&amp;gt;+&amp;lt;maj&amp;gt;+&amp;lt;p&amp;gt; &amp;gt; Protocols &amp;gt; TLS &amp;gt; (Pre)-Master-Sercret log filename &amp;gt; Parcourir... &amp;gt; /tmp/clés_tls_mitm.txt &amp;gt; OK&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Les paquets &#039;&#039;TLS&#039;&#039; se déchiffrent instantanément, laissant apparaître les paquets &#039;&#039;HTTP&#039;&#039; qu&#039;ils masquaient. Vous pouvez ainsi observer les &#039;&#039;URL&#039;&#039; que le client &#039;&#039;Docker&#039;&#039; requêtes pour récupérer ses images.&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Samba&amp;diff=1531</id>
		<title>Samba</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Samba&amp;diff=1531"/>
		<updated>2024-08-14T13:28:05Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Correction du paramètre de suppression d&amp;#039;un utilisateur + ajout des paramètres de désactivation et d&amp;#039;activation d&amp;#039;un utilisateur + changement de la commande de création d&amp;#039;un utilisateur pour réaliser d&amp;#039;une traite les opérations de la section &amp;quot;Interdiction d’accès&amp;quot; + suppression de la section &amp;quot;Interdiction d’accès&amp;quot; devenue inutile&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Service partage]]&lt;br /&gt;
&lt;br /&gt;
Samba est une implémentation libre des protocoles SMB/CIFS de Microsoft. Il est utilisé pour mettre à disposition des ressources sur un réseau local et il comprend l&#039;usage d&#039;une [https://fr.wikipedia.org/wiki/Samba_(informatique)#Fonctionnalit%C3%A9s dizaine de services ainsi que d&#039;une douzaine de protocoles]. Il permet entre autre les usages suivants:&lt;br /&gt;
* Partage de fichiers&lt;br /&gt;
* Partage d&#039;imprimantes&lt;br /&gt;
* Service Active Directory comprenant une version modifiée de:&lt;br /&gt;
** Kerberos&lt;br /&gt;
** LDAP&lt;br /&gt;
* NetBIOS sur TCP/IP (NBT)&lt;br /&gt;
* Protocole d&#039;appel distant DCE/RPC, MSRPC&lt;br /&gt;
* Serveur WINS aussi appelé NetBIOS Naming Service (NBNS)&lt;br /&gt;
* Les protocoles d&#039;un domaine NT:&lt;br /&gt;
** L&#039;ouverture d&#039;une session NT&lt;br /&gt;
** Une base de données Security Account Manager (SAM)&lt;br /&gt;
** Un service Local Security Authority (LSA)&lt;br /&gt;
** Un service d&#039;impression (Spoolss)&lt;br /&gt;
** NTLM&lt;br /&gt;
&lt;br /&gt;
Le gros plus de cette solution étant sont extrême interopérabilité tant de plateformes que de régions linguistiques puisque géré par les systèmes Linux, BSD, Mac OS X et Windows avec un support des encodages UTF-8.&lt;br /&gt;
&lt;br /&gt;
Ce projet est rendu possible par un accord d&#039;[https://www.samba.org/samba/PFIF/ information technique] signé par Microsoft le 20 décembre 2007 faisant suite à un procès perdu contre l&#039;Union européenne.&lt;br /&gt;
&lt;br /&gt;
{{info|Cette documentation se base sur une Linux Debian 9.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ports utilisés:&#039;&#039;&#039;&lt;br /&gt;
* 137 udp&lt;br /&gt;
* 138 udp&lt;br /&gt;
* 138 tcp&lt;br /&gt;
* 139 tcp&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
 apt install samba &lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
Nous allons partir d&#039;un fichier vierge. Il faut donc renommer l&#039;ancien pour ne pas qu&#039;il soit utilisé&lt;br /&gt;
 mv /etc/samba/smb.conf /etc/samba/smb.conf.old&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Création d&#039;un nouveau fichier&#039;&#039;&#039;&lt;br /&gt;
 vim /etc/samba/smb.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[global]&lt;br /&gt;
server string = SAMBA-YCHARBI&lt;br /&gt;
workgroup = LAB&lt;br /&gt;
netbios name = SAMBA-YCHARBI&lt;br /&gt;
public = yes&lt;br /&gt;
encrypt passwords = true&lt;br /&gt;
guest ok = yes&lt;br /&gt;
map to guest = Bad User&lt;br /&gt;
dos charset = CP850&lt;br /&gt;
unix charset = UTF8&lt;br /&gt;
unix extensions = no&lt;br /&gt;
time server = yes&lt;br /&gt;
log file = /var/log/samba/log.%m&lt;br /&gt;
log level = 2&lt;br /&gt;
#Valeur en KB&lt;br /&gt;
max log size = 500&lt;br /&gt;
#force user = nobody&lt;br /&gt;
#force group = nogroup&lt;br /&gt;
server min protocol = SMB3&lt;br /&gt;
min protocol = SMB3&lt;br /&gt;
&lt;br /&gt;
name resolve order = lmhosts wins bcast host&lt;br /&gt;
&lt;br /&gt;
[Musiques]&lt;br /&gt;
path = /home/toto/Musiques&lt;br /&gt;
public = yes&lt;br /&gt;
read only = yes&lt;br /&gt;
writeable = no&lt;br /&gt;
browseable = yes&lt;br /&gt;
valid users = toto, titi, nobody&lt;br /&gt;
comment = Mes musiques&lt;br /&gt;
&lt;br /&gt;
[Documentation]&lt;br /&gt;
path = /home/toto/Documentation&lt;br /&gt;
public = no&lt;br /&gt;
read only = yes&lt;br /&gt;
writeable = no&lt;br /&gt;
browseable = yes&lt;br /&gt;
valid users = toto&lt;br /&gt;
#force user = toto&lt;br /&gt;
#force group = toto&lt;br /&gt;
comment = Ma documentation&lt;br /&gt;
&lt;br /&gt;
[Programmation]&lt;br /&gt;
path = /home/toto/Programmation&lt;br /&gt;
public = no&lt;br /&gt;
read only = yes&lt;br /&gt;
writeable = no&lt;br /&gt;
browseable = yes&lt;br /&gt;
valid users = toto&lt;br /&gt;
comment = Mes programmes&lt;br /&gt;
&lt;br /&gt;
[Vidéos]&lt;br /&gt;
path = /home/toto/Vidéos&lt;br /&gt;
public = yes&lt;br /&gt;
read only = yes&lt;br /&gt;
writeable = no&lt;br /&gt;
browseable = yes&lt;br /&gt;
valid users = toto, titi, nobody&lt;br /&gt;
comment = Mes vidéos&lt;br /&gt;
&lt;br /&gt;
[Logiciels]&lt;br /&gt;
path = /home/toto/Logiciels&lt;br /&gt;
public = yes&lt;br /&gt;
read only = no&lt;br /&gt;
writeable = yes&lt;br /&gt;
browseable = yes&lt;br /&gt;
valid users = toto, titi, nobody&lt;br /&gt;
comment = Mes logiciels&lt;br /&gt;
&lt;br /&gt;
[Partage]&lt;br /&gt;
path = /home/toto/Partage&lt;br /&gt;
public = yes&lt;br /&gt;
read only = no&lt;br /&gt;
writeable = yes&lt;br /&gt;
browseable = yes&lt;br /&gt;
valid users = toto, titi, nobody&lt;br /&gt;
comment = Partage commun&lt;br /&gt;
#create mask = 0777&lt;br /&gt;
#force user = nobody&lt;br /&gt;
#force group = nogroup&lt;br /&gt;
&lt;br /&gt;
[Windows]&lt;br /&gt;
path = /home/toto/Windows&lt;br /&gt;
public = yes&lt;br /&gt;
read only = yes&lt;br /&gt;
writeable = no&lt;br /&gt;
browseable = yes&lt;br /&gt;
valid users = toto, nobody&lt;br /&gt;
comment = Installation de Windows&lt;br /&gt;
&lt;br /&gt;
[Titi]&lt;br /&gt;
path = /home/titi&lt;br /&gt;
public = no&lt;br /&gt;
read only = no&lt;br /&gt;
writeable = yes&lt;br /&gt;
browseable = yes&lt;br /&gt;
valid users = titi&lt;br /&gt;
comment = Fichiers de Titi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme nous pouvons le constater, un partage est défini par une section commençant par son nom entre crochets. Les accents sont supportés (pour le montage dans fstab, il faut utiliser [[fstab#Accents_dans_le_fstab|la syntaxe décrite dans le document dédié]]) et il est possible de définir des paramètres personnalisés à chacun d&#039;eux.&lt;br /&gt;
&lt;br /&gt;
{{Attention|Il faut bien penser à créer les répertoires des partages pour que le démon puisse s&#039;exécuter correctement.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Redémarrer le démon&#039;&#039;&#039;&lt;br /&gt;
 systemctl restart smbd.service&lt;br /&gt;
&lt;br /&gt;
=Création d&#039;un utilisateur=&lt;br /&gt;
Pour qu&#039;un utilisateur puisse accéder aux partages, il faut qu&#039;il existe au préalable en tant qu&#039;utilisateur POSIX &#039;&#039;&#039;et&#039;&#039;&#039; SAMBA. Nous désactiverons la possibilité de connexion POSIX et définirons un mot de passe dédié aux seuls utilisateurs SAMBA (afin qu&#039;une connexion sur le shell du serveur soit impossible par ce biais). Enfin, il faudra gérer les droits d&#039;accès aux fichiers du serveur.&lt;br /&gt;
&lt;br /&gt;
==Utilisateur POSIX==&lt;br /&gt;
Rappel, les fichiers gérants les utilisateurs utilisent un formatage sous forme de [https://fr.wikipedia.org/wiki/Champ_Gecos champ GECOS]. Je ne vais pas revenir sur la compréhension de ce formatage proche du CSV.&lt;br /&gt;
&lt;br /&gt;
===Création POSIX===&lt;br /&gt;
&#039;&#039;&#039;Création de l&#039;utilisateur &amp;quot;toto&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
 useradd -m -d /home/toto -s /bin/false -c &amp;quot;Utilisateur Samba toto&amp;quot; toto&lt;br /&gt;
&lt;br /&gt;
Cette commande créée l&#039;utilisateur &amp;lt;code&amp;gt;toto&amp;lt;/code&amp;gt;, son répertoire personnel, lui attribue un &#039;&#039;shell&#039;&#039; non utilisable pour une connexion interactive et précise une description pour l&#039;administrateur.&lt;br /&gt;
&lt;br /&gt;
==Utilisateur SAMBA==&lt;br /&gt;
&#039;&#039;&#039;Création de l&#039;utilisateur&#039;&#039;&#039;&lt;br /&gt;
 smbpasswd -a toto&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Suppression d&#039;un utilisateur&#039;&#039;&#039;&lt;br /&gt;
 smbpasswd -x toto&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Désactivation d&#039;un utilisateur&#039;&#039;&#039;&lt;br /&gt;
 smbpasswd -d toto&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Activation d&#039;un utilisateur&#039;&#039;&#039;&lt;br /&gt;
 smbpasswd -e toto&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Aide sur la commande&#039;&#039;&#039;&lt;br /&gt;
 smbpasswd -h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: on peut aussi ce référer au [https://www.samba.org/samba/docs/current/man-html/smbpasswd.8.html manuel de la commande].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lister les utilisateurs&#039;&#039;&#039;&lt;br /&gt;
 pdbedit -L -v&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: le &#039;&#039;&#039;-L&#039;&#039;&#039; permet de lister et le &#039;&#039;&#039;-v&#039;&#039;&#039; affiche des détails. Source [https://superuser.com/questions/271034/list-samba-users ici].&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Droits POSIX=&lt;br /&gt;
Le truck le plus chiant avec Samba est la gestion des [[Gestion_des_droits_linux|droits d’accès aux fichiers]]. En effet, sous les système basé sur les concepts UNIX, un utilisateur est propriétaire des fichiers qu&#039;il crée et le UMASK du système de fichiers définit les autres droits à appliquer à celui-ci. Le problème que cela pose dans le cadre d&#039;un partage commun entre plusieurs utilisateurs est que tout ce qui est créé par quelqu&#039;un est en lecture seule pour les autres (vachement pratique...). Une solution que j&#039;aime bien pour palier au problème est l&#039;utilisation des [[Gestion_des_droits_linux#Droits_.C3.A9tendus|ACL Linux]].&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation du paquet&#039;&#039;&#039;&lt;br /&gt;
 apt install acl&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Gestion des droits d&#039;un répertoire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Par exemple, pour permettre l&#039;accès en lecture/écriture aux utilisateurs &#039;&#039;toto&#039;&#039; et &#039;&#039;titi&#039;&#039; sur les fichiers qu&#039;ils créent entre eux. j&#039;utilise ceci sur le répertoire &amp;quot;Partage&amp;quot;:&lt;br /&gt;
 setfacl -Rm d:u:toto:rwx,d:u:titi:rwx,d:u:nobody:rwx,d:g:toto:rwx,d:g:titi:rwx,d:g:nogroup:rwx,d:o:rwx /home/toto/Partage/&lt;br /&gt;
&lt;br /&gt;
=Montage des volume=&lt;br /&gt;
==Ligne de commande==&lt;br /&gt;
===Sous Debian===&lt;br /&gt;
====mount====&lt;br /&gt;
&#039;&#039;&#039;Installation du paquet&#039;&#039;&#039;&lt;br /&gt;
 apt install cifs-utils&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: ce paquet se nommait anciennement &amp;quot;smbfs&amp;quot; et le système de fichier à préciser avec &amp;quot;mount&amp;quot; portait le même nom.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Montage du partage&#039;&#039;&#039;&lt;br /&gt;
 mount -t cifs -o username=&amp;quot;anonymous&amp;quot;,password=&amp;quot;anonymous&amp;quot; //192.168.170.178/Logiciel /mnt/&lt;br /&gt;
&lt;br /&gt;
Ici, la connexion s&#039;effectue en anonyme (un alias de &#039;&#039;&#039;-o username&#039;&#039;&#039; et &#039;&#039;&#039;password&#039;&#039;&#039; est &#039;&#039;&#039;-o guest&#039;&#039;&#039;), il suffit bien entendu de remplacer ceci par les bons identifiants de connexion lorsque nécessaire.&lt;br /&gt;
&lt;br /&gt;
Le volume se monte avec les droit de l&#039;utilisateur ayant attaché ce volume (si renseigné dans le &#039;&#039;fstab&#039;&#039;, ce sera &#039;&#039;root&#039;&#039;). Pour octroyé les droits du volume à un utilisateur particulier, il faut préciser son UID et son GID dans la commande. Ici, notre utilisateur POSIX &#039;&#039;toto&#039;&#039; possède l&#039;UID 1000 et appartient au GID 1000 (on le voit dans les fichiers &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/passwd&amp;lt;/source&amp;gt; et &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/shadow&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On peut par exemple monter le volume &#039;&#039;Partage&#039;&#039; en tant qu&#039;utilisateur &#039;&#039;toto&#039;&#039; avec les droits de &#039;&#039;titi&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
 mount -t cifs -o username=&amp;quot;toto&amp;quot;,password=&amp;quot;SonMotDePasse&amp;quot;,uid=1001,gid=1001 //192.168.170.178/Partage&lt;br /&gt;
&lt;br /&gt;
====fstab====&lt;br /&gt;
Le [[Fstab#Samba|fichier de montage automatique au démarrage]] n&#039;est pas en reste puisque les partages Samba peuvent également en faire partie. Une syntaxe particulière doit être utilisée pour les noms de partages comportant des accents.&lt;br /&gt;
&lt;br /&gt;
===Sous Windows===&lt;br /&gt;
[[Windows net use|Voir ici]].&lt;br /&gt;
&lt;br /&gt;
==Interface graphique==&lt;br /&gt;
Avec une interface graphique à base de [[Gnome 3|GNOME]], le paquet gérant de manière générale les système de fichiers (et plus particulièrement SMB dans notre cas) dans &#039;&#039;Nautilus&#039;&#039; se nomme &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;gvfs-backends&amp;lt;/source&amp;gt;. Il suffit donc de l&#039;installer pour pouvoir les monter.&lt;br /&gt;
 apt install gvfs-backends&lt;br /&gt;
&lt;br /&gt;
Pour monter un répertoire Samba via &#039;&#039;Nautilus&#039;&#039; (alias &amp;quot;fichiers&amp;quot;), &#039;&#039;Caja&#039;&#039; ou autre fork, il faut taper dans la barre d&#039;URL (généralement accessible via un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;ctrl&amp;gt;+&amp;lt;l&amp;gt;&amp;lt;/source&amp;gt;, un chemin comme celui-ci: &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;smb://192.168.170.178/Partage&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Les identifiants de connexion seront demandés à l&#039;issue.&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* http://www.linux-france.org/prj/edu/archinet/systeme/ch25s08.html&lt;br /&gt;
* https://www.samba.org/samba/docs/&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Unified_kernel_image&amp;diff=1530</id>
		<title>Unified kernel image</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Unified_kernel_image&amp;diff=1530"/>
		<updated>2024-08-11T17:01:57Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : /* Image Noyau Unifiée */ Suppression du support de la génération d&amp;#039;un UKI par le script post installation du noyau. Ceci engendrait un UKI contenant deux fois le noyau au lieu d&amp;#039;une fois celui-ci et une fois l&amp;#039;initrd. Après réflexion, aucun cas de figure ne justifie le maintient de la génération d&amp;#039;un UKI dans le cas de figure imaginé à l&amp;#039;origine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Noyau_linux]]&lt;br /&gt;
&lt;br /&gt;
Une Image Noyau Unifiée (INU) ou &#039;&#039;Unified Kernel Image&#039;&#039; (&#039;&#039;UKI&#039;&#039;) est la combinaison d&#039;un programme de démarrage &#039;&#039;UEFI&#039;&#039;, d&#039;une image noyau &#039;&#039;Linux&#039;&#039;, d&#039;un &#039;&#039;initrd&#039;&#039; ainsi que d&#039;autres ressources optionnelles dans un seul fichier &#039;&#039;UEFI [https://fr.wikipedia.org/wiki/Portable_Executable PE]&#039;&#039;. Il peut alors être invoqué directement par :&lt;br /&gt;
* le micrologiciel &#039;&#039;UEFI&#039;&#039; : utile notamment dans certains environnements d&#039;informatique en nuage ou confidentiels&lt;br /&gt;
* un chargeur de démarrage : généralement utile pour permettre plusieurs versions de noyau avec une sélection interactive ou automatique de la version dans laquelle démarrer ([[Systemd-boot]] ou [[Grub]] permettent cela)&lt;br /&gt;
&lt;br /&gt;
L&#039;amorçage de cette image unifiée est permise par le &#039;&#039;stub&#039;&#039;, programme logé dans celle-ci et pouvant être interprété par l{{&#039;}}&#039;&#039;UEFI&#039;&#039;. Il constitue donc la partie exécutable initiale de l&#039;image combinée et charge par la suite d&#039;autres ressources à partir du reste de l{{&#039;}}&#039;&#039;INU&#039;&#039;, en particulier le noyau et l{{&#039;}}&#039;&#039;initrd&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
La [https://uapi-group.org/specifications/specs/unified_kernel_image/ spécification officielle] définit le format et les composants (obligatoires et optionnels) des &#039;&#039;UKI&#039;&#039; qui sont fournis en tant que sections &#039;&#039;PE/COFF&#039;&#039; de l&#039;exécutable.&lt;br /&gt;
&lt;br /&gt;
L&#039;intérêt principal de cette approche est qu&#039;elle permet de mieux sécuriser le démarrage d&#039;un système en exposant un unique binaire (&#039;&#039;UEFI PE&#039;&#039;) en clair sur le disque d&#039;amorçage (&#039;&#039;EFI System Partition&#039;&#039; - &#039;&#039;ESP&#039;&#039;) au lieu d&#039;une multitude de fichiers pouvant être modifiés par le premier pirate venu. Cet exécutable pourra alors être signé par &#039;&#039;Secure Boot&#039;&#039; et permettre, entre-autre, le déchiffrement de la racine en s&#039;assurant de l’absence de sa propre altération (enregistreur de frappes par exemple).&lt;br /&gt;
&lt;br /&gt;
=Image Noyau Unifiée=&lt;br /&gt;
==Installation des outils==&lt;br /&gt;
La génération d&#039;une &#039;&#039;INU&#039;&#039; nécessite quelques outils. Le projet &#039;&#039;Systemd&#039;&#039; met à disposition un programme &#039;&#039;Python&#039;&#039; nommé &amp;lt;code&amp;gt;Ukify&amp;lt;/code&amp;gt; à partir de la version 253 de l{{&#039;}}&#039;&#039;init&#039;&#039;. Il est logé à l&#039;emplacement &amp;lt;code&amp;gt;/usr/lib/systemd/ukify&amp;lt;/code&amp;gt; mais nécessite la bibliothèque &amp;lt;code&amp;gt;python3-pefile&amp;lt;/code&amp;gt; et ses dépendances pour fonctionner. L&#039;approche exposé dans ce document visant la frugalité (&#039;&#039;Ukify&#039;&#039; apporte surtout une configuration épurée mais l&#039;aspect fonctionnel est identique), le strict nécessaire sera installé.&lt;br /&gt;
 apt install --no-install-recommends systemd-boot-efi binutils gawk sbsigntool&lt;br /&gt;
&lt;br /&gt;
Détails des paquets installés :&lt;br /&gt;
* &#039;&#039;&#039;systemd-boot-efi&#039;&#039;&#039; : fournit le &#039;&#039;stub &amp;lt;code&amp;gt;/usr/lib/systemd/boot/efi/linuxx64.efi.stub&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;binutils&#039;&#039;&#039; : fournit le programme de construction du binaire &#039;&#039;PE&#039;&#039; &amp;lt;code&amp;gt;objdump&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;gawk&#039;&#039;&#039; : fournit la version &#039;&#039;GNU&#039;&#039; de l&#039;interpréteur de langage &#039;&#039;AWK&#039;&#039; afin de ne pas avoir l&#039;erreur de fonction non définie &amp;lt;code&amp;gt;function strtonum never defined&amp;lt;/code&amp;gt; du &amp;lt;code&amp;gt;awk&amp;lt;/code&amp;gt; de base&lt;br /&gt;
* &#039;&#039;&#039;sbsigntool&#039;&#039;&#039; : permet de signer l{{&#039;}}&#039;&#039;UKI&#039;&#039; en vu d&#039;une validation &#039;&#039;Secure Boot&#039;&#039; (optionnel)&lt;br /&gt;
&lt;br /&gt;
==Script de génération==&lt;br /&gt;
La génération d&#039;une &#039;&#039;UKI&#039;&#039; nécessitant la concaténation d&#039;une multitude d&#039;éléments, il n&#039;est pas envisageable de renseigner l&#039;ensemble des paramètres manuellement. Je vous propose un script permettant la création d&#039;une image ainsi que sa rotation sur trois versions différentes (l&#039;une écrase la précédente à chaque nouvelle exécution). &lt;br /&gt;
 vim /mnt/usr/local/sbin/gen-uki&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# Récupération de la version du noyau en cours d&#039;utilisation&lt;br /&gt;
version_noyau=&amp;quot;${1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Chemin vers l&#039;initrd de travail&lt;br /&gt;
chemin_initrd=&amp;quot;${2}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Chemin vers le noyau de travail&lt;br /&gt;
chemin_noyau=&amp;quot;/boot/vmlinuz-${version_noyau}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Définition des variables du script&lt;br /&gt;
chemin_lsb=&amp;quot;/usr/lib/os-release&amp;quot;&lt;br /&gt;
chemin_stub=&amp;quot;/usr/lib/systemd/boot/efi/linuxx64.efi.stub&amp;quot;&lt;br /&gt;
chemin_cmdline=&amp;quot;/etc/kernel/cmdline&amp;quot;&lt;br /&gt;
chemin_splash=&amp;quot;/dev/null&amp;quot;&lt;br /&gt;
nom_uki1=&amp;quot;1-debian.efi&amp;quot;&lt;br /&gt;
nom_uki2=&amp;quot;2-debian.efi&amp;quot;&lt;br /&gt;
nom_uki3=&amp;quot;3-debian.efi&amp;quot;&lt;br /&gt;
chemin_base=&amp;quot;/boot/efi/EFI/Linux/&amp;quot;&lt;br /&gt;
chemin_dst_uki=&amp;quot;${chemin_base}/${nom_uki1}&amp;quot;&lt;br /&gt;
chemin_sb_clef=&amp;quot;/usr/local/lib/secureboot/mok/MOK.priv&amp;quot;&lt;br /&gt;
chemin_sb_cert=&amp;quot;/usr/local/lib/secureboot/mok/MOK.pem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Création de l&#039;arborescence des UKI&lt;br /&gt;
mkdir -p &amp;quot;${chemin_base}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Préparation de l&#039;UKI&lt;br /&gt;
align=&amp;quot;$(objdump -p ${chemin_stub} | awk &#039;{ if ($1 == &amp;quot;SectionAlignment&amp;quot;){print $2} }&#039;)&amp;quot;&lt;br /&gt;
align=$((16#$align))&lt;br /&gt;
osrel_offs=&amp;quot;$(objdump -h &amp;quot;${chemin_stub}&amp;quot; | awk &#039;NF==7 {size=strtonum(&amp;quot;0x&amp;quot;$3); offset=strtonum(&amp;quot;0x&amp;quot;$4)} END {print size + offset}&#039;)&amp;quot;&lt;br /&gt;
osrel_offs=$((osrel_offs + &amp;quot;$align&amp;quot; - osrel_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
cmdline_offs=$((osrel_offs + $(stat -Lc%s &amp;quot;${chemin_lsb}&amp;quot;)))&lt;br /&gt;
cmdline_offs=$((cmdline_offs + &amp;quot;$align&amp;quot; - cmdline_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
splash_offs=$((cmdline_offs + $(stat -Lc%s &amp;quot;${chemin_cmdline}&amp;quot;)))&lt;br /&gt;
splash_offs=$((splash_offs + &amp;quot;$align&amp;quot; - splash_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
initrd_offs=$((splash_offs + $(stat -Lc%s &amp;quot;${chemin_splash}&amp;quot;)))&lt;br /&gt;
initrd_offs=$((initrd_offs + &amp;quot;$align&amp;quot; - initrd_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
linux_offs=$((initrd_offs + $(stat -Lc%s &amp;quot;${chemin_initrd}&amp;quot;)))&lt;br /&gt;
linux_offs=$((linux_offs + &amp;quot;$align&amp;quot; - linux_offs % &amp;quot;$align&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Roulement, si elle existe et n&#039;est pas vide, de l&#039;UKI 2 en 3&lt;br /&gt;
if [[ -s &amp;quot;${chemin_base}${nom_uki2}&amp;quot; ]]; then&lt;br /&gt;
	echo &amp;quot;Copie de l&#039;UKI 2 en 3...&amp;quot;&lt;br /&gt;
	cp -v &amp;quot;${chemin_base}${nom_uki2}&amp;quot; &amp;quot;${chemin_base}${nom_uki3}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Roulement, si elle existe et n&#039;est pas vide, de l&#039;UKI 1 en 2&lt;br /&gt;
if [[ -s &amp;quot;${chemin_dst_uki}&amp;quot; ]]; then&lt;br /&gt;
	echo &amp;quot;Copie de l&#039;UKI 1 en 2...&amp;quot;&lt;br /&gt;
	cp -v &amp;quot;${chemin_dst_uki}&amp;quot; &amp;quot;${chemin_base}${nom_uki2}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Génération de l&#039;image noyau combinée (UKI) numéro 1...&amp;quot;&lt;br /&gt;
objcopy \&lt;br /&gt;
    --add-section .osrel=&amp;quot;${chemin_lsb}&amp;quot; --change-section-vma .osrel=$(printf 0x%x $osrel_offs) \&lt;br /&gt;
    --add-section .cmdline=&amp;quot;${chemin_cmdline}&amp;quot; --change-section-vma .cmdline=$(printf 0x%x $cmdline_offs) \&lt;br /&gt;
    --add-section .splash=&amp;quot;${chemin_splash}&amp;quot; --change-section-vma .splash=$(printf 0x%x $splash_offs) \&lt;br /&gt;
    --add-section .initrd=&amp;quot;${chemin_initrd}&amp;quot; --change-section-vma .initrd=$(printf 0x%x $initrd_offs) \&lt;br /&gt;
    --add-section .linux=&amp;quot;${chemin_noyau}&amp;quot; --change-section-vma .linux=$(printf 0x%x $linux_offs) \&lt;br /&gt;
    &amp;quot;${chemin_stub}&amp;quot; &amp;quot;${chemin_dst_uki}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Signature de l&#039;UKI pour la vérification Secure Boot seulement si la clé et son certificat son présents&lt;br /&gt;
if [[ -r &amp;quot;${chemin_sb_clef}&amp;quot; &amp;amp;&amp;amp; -r &amp;quot;${chemin_sb_cert}&amp;quot; ]]; then&lt;br /&gt;
	sbsign --key &amp;quot;${chemin_sb_clef}&amp;quot; --cert &amp;quot;${chemin_sb_cert}&amp;quot; --output &amp;quot;${chemin_dst_uki}&amp;quot; &amp;quot;${chemin_dst_uki}&amp;quot;&lt;br /&gt;
	sbverify --cert &amp;quot;${chemin_sb_cert}&amp;quot; &amp;quot;${chemin_dst_uki}&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les [[Paramètres linux|paramètres]] du noyau (de la variable &amp;lt;code&amp;gt;$chemin_cmdline&amp;lt;/code&amp;gt;) doivent contenir les informations sur votre système de fichier racine afin que &#039;&#039;Linux&#039;&#039; puisse l&#039;amorcer. Vous pouvez vous appuyer sur l&#039;exemple ci-dessous qui comprend une partition chiffrée contenant un sous-volume &#039;&#039;BTRFS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;root=UUID=${uuid_racine} cryptdevice=UUID=${uuid_luks} ro rootflags=subvol=@rootfs console=tty0 console=ttyS0,115200n8&amp;quot; &amp;gt; /mnt/etc/kernel/cmdline&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pensez bien entendu à remplacer les variables par vos propres valeurs...&lt;br /&gt;
&lt;br /&gt;
Vous pouvez également vous appuyer sur le &amp;lt;code&amp;gt;/proc/cmdline&amp;lt;/code&amp;gt; pour visualiser les paramètres utilisés par votre propre système afin de vous en inspirer. La liste des paramètres possible est visualisable dans la [https://www.kernel.org/doc/html/v6.5/admin-guide/kernel-parameters.html documentation] du noyau.&lt;br /&gt;
&lt;br /&gt;
 chmod u+x /usr/local/sbin/gen-uki&lt;br /&gt;
&lt;br /&gt;
==Automatisation==&lt;br /&gt;
Le script ainsi créé peut être lancé manuellement mais il est préférable qu&#039;il soit appelé à chaque mise à jour de noyau ou d{{&#039;}}&#039;&#039;initrd&#039;&#039; afin de garantir un démarrage sur la dernière version disponible. Cette dépendance se créée en l&#039;exposant dans le répertoire de post-construction de l{{&#039;}}&#039;&#039;initrd&#039;&#039; (&amp;lt;code&amp;gt;/etc/initramfs/post-update.d/&amp;lt;/code&amp;gt;). Il n&#039;est pas souhaitable (voir balise &amp;quot;info&amp;quot; ci-après) de spécifier d&#039;actions dans &amp;lt;code&amp;gt;/etc/kernel/postinst.d/&amp;lt;/code&amp;gt; puisque une installation ou une mise à jour du noyau exécute systématiquement une reconstruction de  l{{&#039;}}&#039;&#039;initrd&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{{info|Nous ne voulons pas générer un &#039;&#039;UKI&#039;&#039; depuis la phase post-installation du noyau pour deux raisons :&lt;br /&gt;
* le paramètre &amp;lt;code&amp;gt;$2&amp;lt;/code&amp;gt; envoyé au script est égale au chemin absolut du nouveau noyau et non de l{{&#039;}}&#039;&#039;initrd&#039;&#039;. Cela a pour effet de générer un &#039;&#039;UKI&#039;&#039; contenant deux fois le noyau et aucune fois l{{&#039;}}&#039;&#039;initrd&#039;&#039; (corrompu de fait)&lt;br /&gt;
* dans la mesure où &amp;lt;code&amp;gt;dpkg&amp;lt;/code&amp;gt; exécute à la fois les scripts des répertoires &amp;lt;code&amp;gt;/etc/initramfs/post-update.d/&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;/etc/kernel/postinst.d/&amp;lt;/code&amp;gt;, deux roulements d{{&#039;}}&#039;&#039;UKI&#039;&#039; (dont un corrompu) s&#039;effectuerait, ce qui n&#039;a aucun sens et n&#039;est clairement pas souhaitable car deux images sur trois sont alors issues de la même mise à jour}}&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /etc/initramfs/post-update.d&lt;br /&gt;
 ln -s /usr/local/sbin/gen-uki /etc/initramfs/post-update.d/zz-gen-uki&lt;br /&gt;
 chmod u+x /etc/initramfs/post-update.d/zz-gen-uki&lt;br /&gt;
&lt;br /&gt;
{{info|Le répertoire &amp;lt;code&amp;gt;/etc/initramfs/post-update.d&amp;lt;/code&amp;gt; n&#039;est pas créé par défaut dans &#039;&#039;GNU/Linux Debian&#039;&#039; mais est bien parcouru lors de la génération d&#039;une nouvelle archive d{{&#039;}}&#039;&#039;init&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==Création des entrées de démarrage==&lt;br /&gt;
Dans l&#039;optique d&#039;optimiser au mieux le démarrage de notre machine, nous n&#039;utiliserons aucun chargeur d&#039;amorçage. Nous créerons alors des entrées de démarrage dans notre  &#039;&#039;UEFI&#039;&#039; pointant directement sur nos &#039;&#039;UKI&#039;&#039; (son menu nous permettra de sélectionner la version à lancer). Pour se faire, il est possible de passer par l&#039;interface de celui-ci (lorsque l&#039;option est disponible) ou via l&#039;outil [[Efibootmgr]] (universel). Voici un exemple pour les trois générées par le script (il est possible de créer les entrées avant les images) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
disque_systeme=/dev/nvme0n1&lt;br /&gt;
&lt;br /&gt;
efibootmgr -c -d &amp;quot;${disque_systeme}&amp;quot; -p 1 -l &#039;\EFI\Linux\1-debian.efi&#039; -L &amp;quot;Debian UKI 1&amp;quot;&lt;br /&gt;
efibootmgr -c -d &amp;quot;${disque_systeme}&amp;quot; -p 1 -l &#039;\EFI\Linux\2-debian.efi&#039; -L &amp;quot;Debian UKI 2&amp;quot;&lt;br /&gt;
efibootmgr -c -d &amp;quot;${disque_systeme}&amp;quot; -p 1 -l &#039;\EFI\Linux\3-debian.efi&#039; -L &amp;quot;Debian UKI 3&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ainsi, dans le cas malencontreux où une mise à jour de noyau ou une reconstruction d{{&#039;}}&#039;&#039;initrd&#039;&#039; occasionne une impossibilité à démarrer, les versions précédentes de votre image vous permettront de vous en sortir.&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://uapi-group.org/specifications/specs/unified_kernel_image/&lt;br /&gt;
* https://0pointer.de/blog/brave-new-trusted-boot-world.html&lt;br /&gt;
* https://wiki.debian.org/EFIStub#Setting_up_a_Unified_Kernel_Image&lt;br /&gt;
&lt;br /&gt;
=Secure Boot=&lt;br /&gt;
&lt;br /&gt;
{{info|Cette section est facultative.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Secure Boot&#039;&#039; ([https://uefi.org/sites/default/files/resources/UEFI_Spec_2_3_1.pdf chapitre 27] des spécification &#039;&#039;UEFI&#039;&#039;) est une fonctionnalité apparue avec la version 2.3.1 de l{{&#039;}}&#039;&#039;UEFI&#039;&#039; permettant de borner l&#039;amorçage aux seuls systèmes dont la signature cryptographique est reconnue par sa base interne. Son intérêt principal est d&#039;empêcher l&#039;exécution de code ayant été ajouté à l{{&#039;}}&#039;&#039;UEFI PE&#039;&#039; à l&#039;insu de l&#039;administrateur de la machine mais il peut également servir, entre-autre, à empêcher tout autre système (amorçage &#039;&#039;USB&#039;&#039; par exemple) de démarrer.&lt;br /&gt;
&lt;br /&gt;
Afin que cette fonction ai un sens, il est préférable de n&#039;autoriser que vos propres clés. Ceci n&#039;est malheureusement pas possible sur la plupart des &#039;&#039;PC&#039;&#039; du marcher. En effet, les &#039;&#039;UEFI&#039;&#039; des machines grand publique embarquent celles de &#039;&#039;Microsoft&#039;&#039; pour le démarrage de &#039;&#039;Windows&#039;&#039; (obligatoire pour bénéficier de la certification idoine) et elles ne proposent pas (dans toutes celles que j&#039;ai vu) de fonction pour gérer la base interne de clés (elles ne proposent bien souvent même pas d&#039;administrer les entrées de démarrage...). Il est peut-être possible de contourner cette limitation avec l&#039;outil &amp;lt;code&amp;gt;mokutil&amp;lt;/code&amp;gt; mais je n&#039;ai pas creusé cette piste... La problématique des clés &#039;&#039;Microsoft&#039;&#039; est bien entendu que leur présence rend caduc l&#039;exclusivité de la validité de vos signatures. Qui peut utiliser leur clé ? L&#039;administration de ce paramètre semble donc réservée aux ordinateurs professionnels (les &#039;&#039;DELL XPS&#039;&#039; le permettent) et aux plateformes serveurs.&lt;br /&gt;
&lt;br /&gt;
Il convient en outre de s&#039;assurer qu&#039;aucun accès physique non autorisé à la machine n&#039;a lieu car les gros malins qui ont rédigés les spécifications de l{{&#039;}}&#039;&#039;UEFI&#039;&#039; n&#039;ont pas crus bon d&#039;imposer le stockage de sa configuration en mémoire morte... L&#039;utilisation d&#039;une mémoire vive maintenue par une pile comme sur l&#039;antique &#039;&#039;BIOS&#039;&#039; ayant retenu leur préférence, le débranchement de cette dernière engendrera une réinitialisation complète des paramètres et de la base de clés &#039;&#039;Secure Boot&#039;&#039; (permettant ainsi l&#039;introduction de toute forme de charges utiles au démarrage). Ceci aura donc pour effet de ruiner la mince barrière de sécurité que nous venons de mettre en place...&lt;br /&gt;
&lt;br /&gt;
Enfin, un mot de passe d&#039;accès aux paramètres de l{{&#039;}}&#039;&#039;UEFI&#039;&#039; reste tout de même une pratique à suivre afin de vous assurer qu&#039;aucune injection de clé non autorisée n&#039;ai lieu. Dans le cas d&#039;une réinitialisation par débranchement de la pile, vous saurez au moins qu&#039;une action physique a été opérée sur la machine et pourrez entreprendre les mesures qui s&#039;imposent (à commencer par ne surtout pas taper votre phrase de passe [[Cryptsetup|LUKS]] !). Vous pourrez par la suite vérifier la signature de votre &#039;&#039;UKI&#039;&#039; via un autre système pour s&#039;assurer de son intégrité (pensez également à vérifier la présence d&#039;enregistreurs de frappes [https://www.youtube.com/watch?v=AMzv6ymmUcw matériels]).&lt;br /&gt;
&lt;br /&gt;
==Glossaire==&lt;br /&gt;
La base de clés de &#039;&#039;Secure Boot&#039;&#039; comporte cinq [https://www.malekal.com/quest-ce-que-secure-boot-protection-pc-uefi-comment-ca-marche/ sections] :&lt;br /&gt;
* &#039;&#039;&#039;MOK&#039;&#039;&#039; (&#039;&#039;Machine Owner Key&#039;&#039;) : base de données contenant les clés de l&#039;utilisateur - inutile pour cette procédure&lt;br /&gt;
* &#039;&#039;&#039;PK&#039;&#039;&#039; (&#039;&#039;Plateform Key&#039;&#039;) : base de données contenant les clés de la machine - utile pour cette procédure&lt;br /&gt;
* &#039;&#039;&#039;DB&#039;&#039;&#039; (&#039;&#039;Data Base&#039;&#039;) : base de données des clés autorisées (liste blanche) - utile pour cette procédure&lt;br /&gt;
* &#039;&#039;&#039;KEK&#039;&#039;&#039; (&#039;&#039;Key Exchange Keys&#039;&#039;) : aucune idée - inutile pour cette procédure&lt;br /&gt;
* &#039;&#039;&#039;DBX&#039;&#039;&#039; : (&#039;&#039;Data Base&#039;&#039; &amp;lt;introuvable dans les specs mais probablement &#039;&#039;Exclusion&#039;&#039;&amp;gt;)  : base de données des clés interdites (liste noire) - inutile pour cette procédure&lt;br /&gt;
&lt;br /&gt;
==Génération de clés==&lt;br /&gt;
Création du répertoire de travail&lt;br /&gt;
 mkdir -p /usr/local/lib/secureboot/mok&lt;br /&gt;
&lt;br /&gt;
Génération d&#039;une clé privée &#039;&#039;RSA&#039;&#039; 4096 bits (le maximum possible avec &#039;&#039;Shim&#039;&#039; - que nous n&#039;utilisons pas - est, aux dernières nouvelles ([https://wiki.debian.org/SecureBoot#Generating_a_new_key 21/06/2022]) 2048 bits) et d&#039;un certificat public associé&lt;br /&gt;
 openssl req -nodes -new -x509 -newkey rsa:4096 -keyout /usr/local/lib/secureboot/mok/MOK.priv -outform DER -out /usr/local/lib/secureboot/mok/MOK.der -days 36500 -subj &amp;quot;/CN=Mon Nom/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Conversion du certificat en &#039;&#039;PEM&#039;&#039; afin d&#039;être utilisable par &amp;lt;code&amp;gt;sbsign&amp;lt;/code&amp;gt;&lt;br /&gt;
 openssl x509 -inform der -in /usr/local/lib/secureboot/mok/MOK.der -out /usr/local/lib/secureboot/mok/MOK.pem&lt;br /&gt;
&lt;br /&gt;
Empêcher la lecture de ces fichiers par un autre utilisateur que root&lt;br /&gt;
 chmod 400 /usr/local/lib/secureboot/mok/{MOK.priv,MOK.der,MOK.pem}&lt;br /&gt;
&lt;br /&gt;
Les étapes qui suivent sont réalisées automatiquement par le script créé plus haut et sont notées à titre indicatif.&lt;br /&gt;
&lt;br /&gt;
Le certificat au format &#039;&#039;PEM&#039;&#039; est utilisé par les commandes du paquet &amp;lt;code&amp;gt;sbsigntool&amp;lt;/code&amp;gt; alors que la &#039;&#039;DER&#039;&#039; est utilisée par les &#039;&#039;UEFI&#039;&#039; (pourquoi utiliser le même format hein ?). il doit être renseignée deux fois dans les menus de gestion des clés de votre carte mère :&lt;br /&gt;
* une fois dans &#039;&#039;Plateform Key&#039;&#039; (&#039;&#039;PK&#039;&#039;)&lt;br /&gt;
* l&#039;autre dans &#039;&#039;DB&#039;&#039; (&#039;&#039;Authorized Signatures&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Le certificat &#039;&#039;DER&#039;&#039; doit être accessible à l{{&#039;}}&#039;&#039;UEFI&#039;&#039; pour injection. Vous pouvez le mettre dans toute partition &#039;&#039;FAT&#039;&#039; comme votre &#039;&#039;ESP&#039;&#039; &amp;lt;code&amp;gt;/boot/efi/EFI/&amp;lt;/code&amp;gt; ou sur une clé &#039;&#039;USB&#039;&#039; afin de l&#039;y sélectionner depuis le menu dédié (peut être supprimé à l&#039;issue).&lt;br /&gt;
&lt;br /&gt;
==Signature de l&#039;image==&lt;br /&gt;
Dans la commande qui suit, la signature de l&#039;image va réécrir par dessus l&#039;originale (sa somme de contrôle va changer). Ce comportement est volontaire mais peut être changé en modifiant la valeur de &amp;lt;code&amp;gt;--output&amp;lt;/code&amp;gt;&lt;br /&gt;
 sbsign --key /usr/local/lib/secureboot/mok/MOK.priv --cert /usr/local/lib/secureboot/mok/MOK.pem --output /boot/efi/EFI/Linux/1-debian.efi /boot/efi/EFI/Linux/1-debian.efi&lt;br /&gt;
&lt;br /&gt;
Vérification de la signature&lt;br /&gt;
 sbverify --cert /usr/local/lib/secureboot/mok/MOK.pem /boot/efi/EFI/Linux/1-debian.efi&lt;br /&gt;
&lt;br /&gt;
Une fois &#039;&#039;Secure Boot&#039;&#039; activé et votre système démarré, vous pouvez vérifier l&#039;effectivité de cette fonctionnalité via la commande suivante du paquet &amp;lt;code&amp;gt;mokutil&amp;lt;/code&amp;gt;&lt;br /&gt;
 mokutil --sb-state&lt;br /&gt;
&lt;br /&gt;
{{astuce|La signature d&#039;un module noyau complilé par vous même peut se faire via la commande suivante (exemple pour le pilote &amp;lt;code&amp;gt;ixgbe&amp;lt;/code&amp;gt;) : &amp;lt;code&amp;gt;/usr/lib/linux-kbuild-6.1/scripts/sign-file sha512 /usr/local/lib/secureboot/mok/MOK.{priv,der} /lib/modules/6.1.0-17-amd64/updates/drivers/net/ethernet/intel/ixgbe/ixgbe.ko /tmp/ixgbe.ko&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://uefi.org/specifications&lt;br /&gt;
* https://wiki.debian.org/SecureBoot#Generating_a_new_key&lt;br /&gt;
* https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-secure-boot-key-creation-and-management-guidance?view=windows-11&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Firefox&amp;diff=1529</id>
		<title>Firefox</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Firefox&amp;diff=1529"/>
		<updated>2024-08-01T20:23:35Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Désactiver précédent et suivant au trackpad&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:navigateurs web]]&lt;br /&gt;
&lt;br /&gt;
=Activer la gestion du tactile=&lt;br /&gt;
Comme beaucoup de fonctions dans Firefox, la gestion des écrans tactile n&#039;est pas activée par défaut dans nombre d’environnements (c&#039;est le cas de Debian). Pour l&#039;activer, il faut définir une variable d&#039;environnement et activer l&#039;option dans la section dédiée de Firefox.&lt;br /&gt;
&lt;br /&gt;
==Définir la variable d&#039;environnement==&lt;br /&gt;
 echo &#039;MOZ_USE_XINPUT2=1&#039; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
&lt;br /&gt;
La modification prend effet au redémarrage. Il est possible de lancer Firefox avec la définition de cette variable manuellement via le terminal en attendant: &amp;lt;code&amp;gt;MOZ_USE_XINPUT2=1 firefox&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Activation de l&#039;option dans Firefox==&lt;br /&gt;
&lt;br /&gt;
Il faut se rendre dans &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt; et mettre le paramètre &#039;&#039;&#039;dom.w3c_touch_events.enabled&#039;&#039;&#039; à &#039;&#039;&#039;1&#039;&#039;&#039;. La modification est active instantanément. Vous pouvez profiter du défilement, de la sélection et du zoom au doigt.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://support.mozilla.org/es/questions/1091627&lt;br /&gt;
&lt;br /&gt;
=Utiliser Wayland=&lt;br /&gt;
Il est possible d&#039;utiliser &#039;&#039;Firefox&#039;&#039; avec [[Wayland]] en définissant la [https://www.reddit.com/r/firefox/comments/c8itj2/enabling_wayland_on_linux/ variable d&#039;environnement] &amp;lt;code&amp;gt;MOZ_ENABLE_WAYLAND=1&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;/etc/environment&amp;lt;/code&amp;gt;. Un redémarrage du programme est nécessaire et il faut s&#039;assurer que la variable est bien définie lors de son lancement (le plus simple est de redémarrer le système).&lt;br /&gt;
&lt;br /&gt;
=Désactiver le détachement d&#039;un onglet=&lt;br /&gt;
Une fonctionne ultra casse couilles avec Firefox c&#039;est bien le [https://www.askvg.com/firefox-tip-disable-tabs-drag-n-drop-feature-to-move-to-new-window/ glisser/déposer d&#039;un onglet] qui en fait une nouvelle fenêtre. Juste insupportable. Pour désactiver cette merde, il faut passer la valeur &amp;lt;code&amp;gt;browser.tabs.allowTabDetach&amp;lt;/code&amp;gt; à &#039;&#039;&#039;false&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Restaurer la fenêtre de téléchargement=&lt;br /&gt;
Avec Firefox 98 (et comme avec chaque nouvelle version), une fonctionnalité indispensable a été supprimée : la possibilité d&#039;ouvrir un fichier sans l&#039;enregistrer quelque part sur le disque (il va simplement dans le &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;). Pour restaurer ce comportement, il faut passer la valeur &amp;lt;code&amp;gt;browser.download.improvements_to_download_panel&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Forcer l&#039;usage du presse papier=&lt;br /&gt;
Certains sites &#039;&#039;WEB&#039;&#039; se croient malins en interdisant l&#039;utilisation du copier/coller dans les formulaires (réinitialisation de mots de passe par exemple). Cette pratique, en plus d&#039;être une atteinte à notre liberté d&#039;utiliser nos outils informatiques comme nous l&#039;entendons, nous empêche de gérer nos [[Génération de mots de passe|mots de passe]] à notre guise (la meilleur clé est celle que vous ne connaissez pas et donc que vous ne pouvez pas taper dans un champ de formulaire...). Comme souvent, sous couvert de sécurité, le résultat est l&#039;exact opposé. Aux développeurs &#039;&#039;WEB&#039;&#039; : laissez-nous gérer nos outils informatiques comme nous l&#039;entendons, nous sommes bien plus à même de savoir ce qui est bon pour nous que vous !&lt;br /&gt;
&lt;br /&gt;
Pour dire à &#039;&#039;Firefox&#039;&#039; de ne pas respecter le &#039;&#039;Javascript&#039;&#039; qui lui dit d&#039;adopter un comportement aussi débile, il faut passer la [https://www.howtogeek.com/251807/how-to-enable-pasting-text-on-sites-that-block-it/ valeur] &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;dom.event.clipboardevents.enabled&amp;lt;/code&amp;gt; à &#039;&#039;&#039;false&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez alors de nouveau de vous prendre pour un [https://fr.wikipedia.org/wiki/Pasteur_(christianisme) pasteur] en usant de &#039;&#039;copy/paste&#039;&#039; !&lt;br /&gt;
&lt;br /&gt;
{{attention|La désactivation de cette fonction empêche le [https://github.com/element-hq/element-web/issues/25695 collage de textes] dans le champ de discutions de [[Matrix_synapse#Client_WEB_Element|element-web]] (un &amp;lt;code&amp;gt;ctrl+v&amp;lt;/code&amp;gt; n&#039;a donc plus aucun effet).}}&lt;br /&gt;
&lt;br /&gt;
=Désactiver le rafraîchissement automatique=&lt;br /&gt;
Certains sites non respectueux de leurs utilisateurs (les sites de presse en tête), utilisent du &#039;&#039;Javascript&#039;&#039; pour rafraîchir automatiquement les pages de leur site (probablement pour générer du revenu avec la publicité).&lt;br /&gt;
Cette pratique, outre le fait de consommer de la bande passante et du &#039;&#039;CPU&#039;&#039; (donc de l&#039;électricité), engendre un comportement non désiré et inattendu de l&#039;utilisateur (seul maître légitime de son ordinateur).&lt;br /&gt;
&lt;br /&gt;
Pour faire cesser ça, il faut initier la clé &amp;lt;code&amp;gt;accessibility.blockautorefresh&amp;lt;/code&amp;gt; à &#039;&#039;true&#039;&#039; dans &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Désactiver la géolocalisation=&lt;br /&gt;
Certains sites envoient une requête au navigateur afin de demander d&#039;activer la géolocalisation. Cela se matérialise dans &#039;&#039;Firefox&#039;&#039; par un popup au niveau de la barre d&#039;adresse qui masque une partie du site (pénible). Calqué sur le modèle de celui demandant d&#039;enregistrer un mot de passe, celui-ci n&#039;est pas désactivable dans les paramètres (cela doit être trop difficile à coder pour &#039;&#039;Mozilla&#039;&#039;...). Cela se fait donc via les habituels paramètres avancés de &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;, en [https://whatismyipaddress.com/enabling-and-disabling-geolocation-on-your-browser#h-firefox passant] &amp;lt;code&amp;gt;geo.enabled&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Désactiver précédent et suivant au trackpad=&lt;br /&gt;
Autre réelle mauvaise idée de ce navigateur, la fonctionnalité précédent et suivant via des gestes latéraux avec un trackpad. Mise à part réaliser des actions involontaires pouvant êtres, au mieux, ultra désagréables en rechargeant les pages et au pire, dangereusement catastrophique en fonction des cas (quitter une page avant la fin d&#039;une opération est rarement sans conséquence dans le traitement...), il m&#039;apparaît de l&#039;ordre du bon sens de désactiver cette aberration qui n&#039;aurait jamais dû voir le jour.&lt;br /&gt;
&lt;br /&gt;
Via &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;, [https://superuser.com/questions/1270620/how-do-i-disable-option-swipe-navigating-history-forward-and-back-in-firefox#answer-1850606 vider les champs] &amp;lt;code&amp;gt;browser.gesture.swipe.left&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;browser.gesture.swipe.right&amp;lt;/code&amp;gt; (le bouton de réinitialisation permet de restaurer les valeurs par défaut si vous avez l&#039;idée saugrenue de vouloir revenir en arrière).&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Sysfs&amp;diff=1528</id>
		<title>Sysfs</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Sysfs&amp;diff=1528"/>
		<updated>2024-07-07T18:09:13Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Interroger les sondes de température&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Pseudo systèmes de fichiers]]&lt;br /&gt;
&lt;br /&gt;
=Savoir si on a démarré en UEFI=&lt;br /&gt;
Un système ayant démarré en &#039;&#039;UEFI&#039;&#039; permet une interaction avec celui-ci via un ensemble de variables accessibles dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/sys&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
On vérifiera donc le type de micro-logiciel nous ayant permis de démarrer via la commande suivante :&lt;br /&gt;
 ls /sys/firmware/efi/efivars/&lt;br /&gt;
&lt;br /&gt;
Bien sûr, le retour de cette commande n&#039;est pas bon si nous sommes en &#039;&#039;BIOS&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://unix.stackexchange.com/questions/148356/how-to-know-if-im-booting-using-uefi&lt;br /&gt;
&lt;br /&gt;
=Ajuster la luminosité de l&#039;écran=&lt;br /&gt;
Afficher la luminosité actuelle&lt;br /&gt;
 cat /sys/class/backlight/intel_backlight/brightness&lt;br /&gt;
&lt;br /&gt;
La modifier&lt;br /&gt;
 echo 500 &amp;gt; /sys/class/backlight/intel_backlight/brightness&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://unix.stackexchange.com/questions/192853/how-to-set-the-monitor-brightness-gracefully-at-boot-time&lt;br /&gt;
&lt;br /&gt;
=Interroger les sondes de température=&lt;br /&gt;
Il est possible d&#039;afficher la température mesurée par les sondes de votre machine sans installer d&#039;[https://phoenixnap.com/kb/linux-cpu-temp#ftoc-heading-5 outils tiers]. Ces informations sont contenues dans les fichiers de la section &amp;lt;code&amp;gt;thermal&amp;lt;/code&amp;gt; de &amp;lt;code&amp;gt;sysfs&amp;lt;/code&amp;gt;.&lt;br /&gt;
 cat /sys/class/thermal/thermal_zone*/temp | column -s $&#039;\t&#039; -t | sed &#039;s/\(.\)..$/.\1°C/&#039;&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Letsencrypt&amp;diff=1527</id>
		<title>Letsencrypt</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Letsencrypt&amp;diff=1527"/>
		<updated>2024-07-07T17:53:47Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : /* Automatisation de la tâche */ Correction du service appelé par le minuteur afin qu&amp;#039;il dépende de lui&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:X.509]]&lt;br /&gt;
&lt;br /&gt;
[https://fr.wikipedia.org/wiki/Let%27s_Encrypt Letsencrypt] est une [https://fr.wikipedia.org/wiki/Autorit%C3%A9_de_certification autorité de certification] lancée le 3 décembre 2015 (Bêta Version Publique). Elle permet de générer des certificats [[:Category:X.509|X.509]] gratuitement et sans limite de nombre.&lt;br /&gt;
&lt;br /&gt;
C&#039;est un service fourni par l{{&#039;}}&#039;&#039;Internet Security Research Group&#039;&#039; (&#039;&#039;ISRG&#039;&#039;). Les mécènes principaux sont l{{&#039;}}&#039;&#039;Electronic Frontier Foundation&#039;&#039; (&#039;&#039;EFF&#039;&#039;), la Fondation &#039;&#039;Mozilla&#039;&#039;, &#039;&#039;Akamai&#039;&#039;, &#039;&#039;Cisco Systems&#039;&#039; , &#039;&#039;PlanetHoster&#039;&#039; et &#039;&#039;OVH&#039;&#039;. D&#039;autres partenaires, tels que l&#039;autorité de certification &#039;&#039;IdenTrust&#039;&#039;, l&#039;Université du Michigan (&#039;&#039;U-M&#039;&#039;), la &#039;&#039;Stanford Law School&#039;&#039;, la Fondation &#039;&#039;Linux&#039;&#039;, l&#039;entreprise &#039;&#039;Free10&#039;&#039;, ainsi que &#039;&#039;Stephen Kent&#039;&#039; de &#039;&#039;Raytheon / BBN Technologies&#039;&#039; et &#039;&#039;Alex Polvi&#039;&#039; de &#039;&#039;CoreOS&#039;&#039; sont également impliqués dans le projet. Bref c&#039;est un truc sérieux et cela représente tout de même 51,21% des certificats &#039;&#039;TLS&#039;&#039; en avril 2018 d&#039;après &#039;&#039;NetTrack&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
L{{&#039;}}autorité de certification se base sur le protocole &#039;&#039;Automatic Certificate Management Environment&#039;&#039; (&#039;&#039;ACME&#039;&#039; ou &amp;quot;environnement de gestion automatique de certificat&amp;quot;) permettant l{{&#039;}}automatisation des échanges entre les autorités de certification et les administrateurs de serveurs, rendant ainsi possible le déploiement automatisé d’une infrastructure à clé publique à très bas coût. Plusieurs implémentations de ce protocole existent.&lt;br /&gt;
&lt;br /&gt;
=ACME.sh=&lt;br /&gt;
[https://github.com/acmesh-official/acme.sh ACME.sh] est une implémentation libre (&#039;&#039;GPL v3.0&#039;&#039;) du protocole idoine écrite en [[Script bash|langage Shell]]. Elle a le gros avantage d&#039;être très légère en déploiement et en usage. Cet outil fonctionne avec un seul script (ses dépendances se trouvent dans le répertoire livré avec) et s&#039;utilise en une seule commande sans rien installer.&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
Téléchargement de l&#039;outil&lt;br /&gt;
 export VERSION_ACME=&amp;quot;3.0.4&amp;quot;&lt;br /&gt;
 wget https://github.com/acmesh-official/acme.sh/archive/refs/tags/&amp;quot;${VERSION_ACME}&amp;quot;.tar.gz -qO - | tar -xvz -C /tmp/ &amp;amp;&amp;amp; cp -av /tmp/acme.sh-&amp;quot;${VERSION_ACME}&amp;quot; /opt/&lt;br /&gt;
 ln -vs /opt/acme.sh-&amp;quot;${VERSION_ACME}&amp;quot; /opt/acme.sh&lt;br /&gt;
&lt;br /&gt;
Afin de ne pas nécessiter d&#039;intervention manuelle, il est possible de créer une clé &#039;&#039;API&#039;&#039; auprès de nombreux [https://github.com/acmesh-official/acme.sh/wiki/dnsapi registres DNS]. Celle-ci permet au logiciel d&#039;ajouter automatiquement un champ &#039;&#039;TXT&#039;&#039; servant à authentifier la légitimité de la requête.&lt;br /&gt;
&lt;br /&gt;
Génération d&#039;un certificat simple&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
GANDI_LIVEDNS_KEY=&amp;quot;INSEREZ_VOTRE_CLEF_API&amp;quot; /opt/acme.sh/acme.sh --issue --server letsencrypt --keylength ec-384 -d test.ycharbi.fr --dns dns_gandi_livedns --force&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{info|Un répertoire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.acme.sh/&amp;lt;/syntaxhighlight&amp;gt; est automatiquement créé et contiendra l&#039;ensemble des certificats et clés gérés. Pensez à y faire un ménage régulier car les certificats générés ne sont valides que 3 mois. La régénération d&#039;un certificat pour un même &#039;&#039;FQDN&#039;&#039; remplace le précédent.}}&lt;br /&gt;
&lt;br /&gt;
Vous pouvez afficher le contenu de vos certificats (notamment la validité) via la commande&lt;br /&gt;
 openssl x509 -noout -text -in ~/.acme.sh/test.ycharbi.fr_ecc/fullchain.cer&lt;br /&gt;
&lt;br /&gt;
==Automatisation==&lt;br /&gt;
Dans la mesure où les certificats ont une validité de 3 mois et au vu de l’importance de les maintenir à jour, il est recommandé d&#039;automatiser leur renouvellement. Voici un script permettant de générer un certificat valide pour tous les sous-domaines (joker) de &#039;&#039;ycharbi.fr&#039;&#039;. Le résultat est mis, tant en forme qu&#039;à disposition de [[Haproxy|HAProxy]] avant un rechargement de son service.&lt;br /&gt;
&lt;br /&gt;
{{attention|La méthode pour renseigner la clé &#039;&#039;API&#039;&#039; peut varier d&#039;un registre à un autre. référez-vous à la [https://github.com/acmesh-official/acme.sh/wiki/dnsapi documentation] pour adapter le script à votre fournisseur. L&#039;exemple ci-dessous est valide pour les &#039;&#039;DNS&#039;&#039; de [https://gandi.net Gandi].}}&lt;br /&gt;
&lt;br /&gt;
===Script de génération===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt; /usr/local/sbin/genX509.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
CLEF_API_DNS=&amp;quot;INSEREZ_VOTRE_CLEF_API&amp;quot;&lt;br /&gt;
DOMAINE=&amp;quot;ycharbi.fr&amp;quot;&lt;br /&gt;
CHEMIN_DST=&amp;quot;/root/letsencrypt/&amp;quot;&lt;br /&gt;
HAPROXY_TLS_DST=&amp;quot;/etc/haproxy/tls/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
mkdir -p /&amp;quot;${CHEMIN_DST}&amp;quot;/&amp;quot;${DOMAINE}&amp;quot;/&lt;br /&gt;
&lt;br /&gt;
GANDI_LIVEDNS_KEY=&amp;quot;${CLEF_API_DNS}&amp;quot; /opt/acme.sh/acme.sh --issue --server letsencrypt --keylength ec-384 -d &amp;quot;*.${DOMAINE}&amp;quot; --dns dns_gandi_livedns --cert-file /root/letsencrypt/&amp;quot;${DOMAINE}&amp;quot;/&amp;quot;${DOMAINE}&amp;quot;.crt --key-file /&amp;quot;${CHEMIN_DST}&amp;quot;/&amp;quot;${DOMAINE}&amp;quot;/&amp;quot;${DOMAINE}&amp;quot;.key --fullchain-file /&amp;quot;${CHEMIN_DST}&amp;quot;/&amp;quot;${DOMAINE}&amp;quot;/&amp;quot;${DOMAINE}&amp;quot;-full.crt --force --reloadcmd &amp;quot;cat /&amp;quot;${CHEMIN_DST}&amp;quot;/&amp;quot;${DOMAINE}&amp;quot;/&amp;quot;${DOMAINE}&amp;quot;-full.crt /&amp;quot;${CHEMIN_DST}&amp;quot;/&amp;quot;${DOMAINE}&amp;quot;/&amp;quot;${DOMAINE}&amp;quot;.key &amp;gt; /&amp;quot;${HAPROXY_TLS_DST}&amp;quot;/&amp;quot;${DOMAINE}&amp;quot;.pem &amp;amp;&amp;amp; systemctl reload haproxy.service&amp;quot;&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 chmod +x /usr/local/sbin/genX509.sh&lt;br /&gt;
&lt;br /&gt;
{{info|En précisant la destination des fichiers à générer, ceux-ci se trouveront à la fois dans le répertoire voulu ainsi que dans le &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.acme.sh/&amp;lt;/syntaxhighlight&amp;gt; de d&#039;habitude.}}&lt;br /&gt;
&lt;br /&gt;
===Automatisation de la tâche===&lt;br /&gt;
Afin d&#039;exécuter le script automatiquement, divers outils peuvent êtres utilisés comme [[Cron]] ou les [[Minuteur - systemd|minuteurs Systemd]]. Je recommande cette dernière solution pour des raisons de fiabilité et de facilité de supervision.&lt;br /&gt;
&lt;br /&gt;
  mkdir -p /usr/local/etc/systemd/system&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt; /usr/local/etc/systemd/system/genX509.service&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Génération du certificat joker pour les sous-domaines d&#039;ycharbi.fr&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=genX509.sh&lt;br /&gt;
RemainAfterExit=no&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt; /usr/local/etc/systemd/system/genX509.timer&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Exécution mensuelle de la génération du certificat joker pour les sous-domaines d&#039;ycharbi.fr&lt;br /&gt;
&lt;br /&gt;
[Timer]&lt;br /&gt;
OnCalendar=monthly&lt;br /&gt;
Persistent=true&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=timers.target&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/local/etc/systemd/system/genX509.service /etc/systemd/system/&lt;br /&gt;
 ln -s /usr/local/etc/systemd/system/genX509.timer /etc/systemd/system/&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
 systemctl enable genX509.timer&lt;br /&gt;
 systemctl start genX509.timer&lt;br /&gt;
&lt;br /&gt;
Les informations sur la prochaine exécution sont visualisables avec la commande&lt;br /&gt;
 systemctl status genX509.timer&lt;br /&gt;
&lt;br /&gt;
=Certbot=&lt;br /&gt;
Cette section traite de l&#039;outil historique bien trop lourd à mon goût. Je ne l&#039;utilise plus car il impose trop de contraintes et peut être remplacé sans difficultés par plus simple. Ne sera abordé que la génération de certificats sans la partie automatisation.&lt;br /&gt;
&lt;br /&gt;
==Génération de certificats==&lt;br /&gt;
Il existe différents modes de génération de certificats. Voici ceux que j&#039;utilise avec l&#039;outil &#039;&#039;certbot&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Mode autonome===&lt;br /&gt;
Ce mode permet de récupérer un certificat signé directement sur une machine proposant un service WEB (les commande seront à effectuées sur la machine répondant au domaine).&lt;br /&gt;
&lt;br /&gt;
{{attention|Cette méthode installe tout un tas de bordel sur la machine dont un serveur [[Apache]]. Pour ma part, je lance une machine dédiée (un [[Squashfs]] dans mon cas), qui se chargera de la génération des certificats que je récupèrent et transferts sur la machine de destination (opération lourde destinée principalement à des tests).}}&lt;br /&gt;
&lt;br /&gt;
====Installation====&lt;br /&gt;
 apt install python-certbot-apache&lt;br /&gt;
&lt;br /&gt;
====Génération====&lt;br /&gt;
Il faut que le domaine à signé dirige les requêtes vers l&#039;adresse IP de la machine &#039;&#039;certbot&#039;&#039; sinon l&#039;erreur 503 renvoyé par celui-ci et interrompra la procédure.&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il est possible d&#039;automatiser le remplissage du nom de domaine lié au certificat à générer si le paramètre &amp;quot;ServerName domaine.ycharbi.fr&amp;quot;  est ajouté dans un vHost. La procédure de création d&#039;un vHost HTTPS par &#039;&#039;certbot&#039;&#039; sera donc automatique (sinon il demande de taper le numéro correspondant au vHost affiché dans la liste qu&#039;il a généré en regardant dans le répertoire &#039;&#039;sites-availables&#039;&#039;).}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Génération de certificat pour tube.ycharbi.fr&#039;&#039;&#039;&lt;br /&gt;
 certbot --authenticator standalone --installer apache -d tube.ycharbi.fr --pre-hook &amp;quot;service apache2 stop&amp;quot; --post-hook &amp;quot;service apache2 start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{{info|Il va demander une adresse e-mail qui servira à prévenir de l&#039;expiration imminente du certificat.}}&lt;br /&gt;
&lt;br /&gt;
Le résultat est stocké dans ces emplacements:&lt;br /&gt;
* &#039;&#039;&#039;Clé publique/certificat:&#039;&#039;&#039; /etc/letsencrypt/live/tube.ycharbi.fr/fullchain.pem&lt;br /&gt;
* &#039;&#039;&#039;Clé privé:&#039;&#039;&#039; /etc/letsencrypt/live/tube.ycharbi.fr/privkey.pem&lt;br /&gt;
&lt;br /&gt;
Il est bien sûr possible d&#039;en faire un certificat chaîné pour certaines applications comme [[Haproxy]] par exemple:&lt;br /&gt;
 cat /etc/letsencrypt/live/tube.ycharbi.fr/fullchain.pem /etc/letsencrypt/live/tube.ycharbi.fr/privkey.pem &amp;gt; /etc/ssl/tube.ycharbi.fr.pem&lt;br /&gt;
&lt;br /&gt;
====Source de la section====&lt;br /&gt;
* https://community.letsencrypt.org/t/solution-client-with-the-currently-selected-authenticator-does-not-support-any-combination-of-challenges-that-will-satisfy-the-ca/49983&lt;br /&gt;
&lt;br /&gt;
===Mode manuel===&lt;br /&gt;
Cette méthode permet de générer des certificat joker (&#039;&#039;wildcard&#039;&#039;). Selon moi, elle est beaucoup plus propre et n&#039;installe pas tout un tas de paquets sur la machine. Elle peut être utilisée depuis une machine qui n&#039;héberge aucun services (je l&#039;utilise personnellement depuis mon proxy inverse). &lt;br /&gt;
&lt;br /&gt;
====Installation====&lt;br /&gt;
 apt install certbot&lt;br /&gt;
&lt;br /&gt;
====Génération====&lt;br /&gt;
 certbot certonly --rsa-key-size 4096 --server https://acme-v02.api.letsencrypt.org/directory --manual -d &#039;*.ycharbi.fr&#039;&lt;br /&gt;
&lt;br /&gt;
Il va poser une chiée de question et donner le nom et la valeur d&#039;un champ TXT DNS à entrer dans la zone du domaine à signé (il s&#039;agit d&#039;une clé d&#039;authentification pour le protocole ACMEv2). Une fois ce champ renseigné et appliqué dans la zone DNS, faire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;entrer&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; au prompte pour récupérer le certificat ainsi que sa clef privée (disponibles dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/letsencrypt/archive/ycharbi.fr&amp;lt;/syntaxhighlight&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
====Sources de la section====&lt;br /&gt;
* https://blog.blaisot.org/letsencrypt-wildcard-part1.html&lt;br /&gt;
* https://wiki.dureuil.info/doku.php/linux:cert-ssl-letsencrypt-wildcard-api-gandi-livedns&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Firefox&amp;diff=1526</id>
		<title>Firefox</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Firefox&amp;diff=1526"/>
		<updated>2024-07-07T08:01:58Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Désactiver la géolocalisation&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:navigateurs web]]&lt;br /&gt;
&lt;br /&gt;
=Activer la gestion du tactile=&lt;br /&gt;
Comme beaucoup de fonctions dans Firefox, la gestion des écrans tactile n&#039;est pas activée par défaut dans nombre d’environnements (c&#039;est le cas de Debian). Pour l&#039;activer, il faut définir une variable d&#039;environnement et activer l&#039;option dans la section dédiée de Firefox.&lt;br /&gt;
&lt;br /&gt;
==Définir la variable d&#039;environnement==&lt;br /&gt;
 echo &#039;MOZ_USE_XINPUT2=1&#039; &amp;gt;&amp;gt; /etc/environment&lt;br /&gt;
&lt;br /&gt;
La modification prend effet au redémarrage. Il est possible de lancer Firefox avec la définition de cette variable manuellement via le terminal en attendant: &amp;lt;code&amp;gt;MOZ_USE_XINPUT2=1 firefox&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Activation de l&#039;option dans Firefox==&lt;br /&gt;
&lt;br /&gt;
Il faut se rendre dans &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt; et mettre le paramètre &#039;&#039;&#039;dom.w3c_touch_events.enabled&#039;&#039;&#039; à &#039;&#039;&#039;1&#039;&#039;&#039;. La modification est active instantanément. Vous pouvez profiter du défilement, de la sélection et du zoom au doigt.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://support.mozilla.org/es/questions/1091627&lt;br /&gt;
&lt;br /&gt;
=Utiliser Wayland=&lt;br /&gt;
Il est possible d&#039;utiliser &#039;&#039;Firefox&#039;&#039; avec [[Wayland]] en définissant la [https://www.reddit.com/r/firefox/comments/c8itj2/enabling_wayland_on_linux/ variable d&#039;environnement] &amp;lt;code&amp;gt;MOZ_ENABLE_WAYLAND=1&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;/etc/environment&amp;lt;/code&amp;gt;. Un redémarrage du programme est nécessaire et il faut s&#039;assurer que la variable est bien définie lors de son lancement (le plus simple est de redémarrer le système).&lt;br /&gt;
&lt;br /&gt;
=Désactiver le détachement d&#039;un onglet=&lt;br /&gt;
Une fonctionne ultra casse couilles avec Firefox c&#039;est bien le [https://www.askvg.com/firefox-tip-disable-tabs-drag-n-drop-feature-to-move-to-new-window/ glisser/déposer d&#039;un onglet] qui en fait une nouvelle fenêtre. Juste insupportable. Pour désactiver cette merde, il faut passer la valeur &amp;lt;code&amp;gt;browser.tabs.allowTabDetach&amp;lt;/code&amp;gt; à &#039;&#039;&#039;false&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=Restaurer la fenêtre de téléchargement=&lt;br /&gt;
Avec Firefox 98 (et comme avec chaque nouvelle version), une fonctionnalité indispensable a été supprimée : la possibilité d&#039;ouvrir un fichier sans l&#039;enregistrer quelque part sur le disque (il va simplement dans le &amp;lt;code&amp;gt;/tmp&amp;lt;/code&amp;gt;). Pour restaurer ce comportement, il faut passer la valeur &amp;lt;code&amp;gt;browser.download.improvements_to_download_panel&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt; dans le &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Forcer l&#039;usage du presse papier=&lt;br /&gt;
Certains sites &#039;&#039;WEB&#039;&#039; se croient malins en interdisant l&#039;utilisation du copier/coller dans les formulaires (réinitialisation de mots de passe par exemple). Cette pratique, en plus d&#039;être une atteinte à notre liberté d&#039;utiliser nos outils informatiques comme nous l&#039;entendons, nous empêche de gérer nos [[Génération de mots de passe|mots de passe]] à notre guise (la meilleur clé est celle que vous ne connaissez pas et donc que vous ne pouvez pas taper dans un champ de formulaire...). Comme souvent, sous couvert de sécurité, le résultat est l&#039;exact opposé. Aux développeurs &#039;&#039;WEB&#039;&#039; : laissez-nous gérer nos outils informatiques comme nous l&#039;entendons, nous sommes bien plus à même de savoir ce qui est bon pour nous que vous !&lt;br /&gt;
&lt;br /&gt;
Pour dire à &#039;&#039;Firefox&#039;&#039; de ne pas respecter le &#039;&#039;Javascript&#039;&#039; qui lui dit d&#039;adopter un comportement aussi débile, il faut passer la [https://www.howtogeek.com/251807/how-to-enable-pasting-text-on-sites-that-block-it/ valeur] &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;dom.event.clipboardevents.enabled&amp;lt;/code&amp;gt; à &#039;&#039;&#039;false&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez alors de nouveau de vous prendre pour un [https://fr.wikipedia.org/wiki/Pasteur_(christianisme) pasteur] en usant de &#039;&#039;copy/paste&#039;&#039; !&lt;br /&gt;
&lt;br /&gt;
{{attention|La désactivation de cette fonction empêche le [https://github.com/element-hq/element-web/issues/25695 collage de textes] dans le champ de discutions de [[Matrix_synapse#Client_WEB_Element|element-web]] (un &amp;lt;code&amp;gt;ctrl+v&amp;lt;/code&amp;gt; n&#039;a donc plus aucun effet).}}&lt;br /&gt;
&lt;br /&gt;
=Désactiver le rafraîchissement automatique=&lt;br /&gt;
Certains sites non respectueux de leurs utilisateurs (les sites de presse en tête), utilisent du &#039;&#039;Javascript&#039;&#039; pour rafraîchir automatiquement les pages de leur site (probablement pour générer du revenu avec la publicité).&lt;br /&gt;
Cette pratique, outre le fait de consommer de la bande passante et du &#039;&#039;CPU&#039;&#039; (donc de l&#039;électricité), engendre un comportement non désiré et inattendu de l&#039;utilisateur (seul maître légitime de son ordinateur).&lt;br /&gt;
&lt;br /&gt;
Pour faire cesser ça, il faut initier la clé &amp;lt;code&amp;gt;accessibility.blockautorefresh&amp;lt;/code&amp;gt; à &#039;&#039;true&#039;&#039; dans &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Désactiver la géolocalisation=&lt;br /&gt;
Certains sites envoient une requête au navigateur afin de demander d&#039;activer la géolocalisation. Cela se matérialise dans &#039;&#039;Firefox&#039;&#039; par un popup au niveau de la barre d&#039;adresse qui masque une partie du site (pénible). Calqué sur le modèle de celui demandant d&#039;enregistrer un mot de passe, celui-ci n&#039;est pas désactivable dans les paramètres (cela doit être trop difficile à coder pour &#039;&#039;Mozilla&#039;&#039;...). Cela se fait donc via les habituels paramètres avancés de &amp;lt;code&amp;gt;about:config&amp;lt;/code&amp;gt;, en [https://whatismyipaddress.com/enabling-and-disabling-geolocation-on-your-browser#h-firefox passant] &amp;lt;code&amp;gt;geo.enabled&amp;lt;/code&amp;gt; à &amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Lacp_-_cisco&amp;diff=1525</id>
		<title>Lacp - cisco</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Lacp_-_cisco&amp;diff=1525"/>
		<updated>2024-05-18T11:25:07Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : /* Configuration */ Ajout d&amp;#039;une précision dans le cas d&amp;#039;une erreurs de protocole&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:cisco]]&lt;br /&gt;
[https://fr.wikipedia.org/wiki/IEEE_802.3ad IEEE 802.3ad] (&#039;&#039;Link Aggregation Control Protocol&#039;&#039; ou &#039;&#039;LACP&#039;&#039;) est un protocole de niveau 2 du modèle &#039;&#039;OSI&#039;&#039; qui permet de grouper plusieurs ports physiques en une seule voie logique.&lt;br /&gt;
&lt;br /&gt;
Nous allons donc utiliser 2 interfaces sur un commutateur Cisco 2960 pour en faire une logique afin de bénéficier d&#039;une plus grande bande passante (uniquement dans le cas d&#039;accès concurrents et en fonction de la configuration des serveurs) ainsi que de la résilience de panne.&lt;br /&gt;
&lt;br /&gt;
{{attention|Cette technique ne permet pas d&#039;avoir un tuyau égale à la somme des bandes passantes des liens qui le compose. Le &#039;&#039;LACP&#039;&#039; permet de répartir les transferts sur les interfaces qui en font parti. Un seul client ne pourra alors pas bénéficier de plus de la capacité d&#039;un lien mais plusieurs clients pourront chacun utiliser la bande passante d&#039;une interface et donc ne pas se saturer l&#039;un l&#039;autre. ce caractéristique est personnalisable à la marge en fonction de l’algorithme de hachage utilisé par la machine émettant le trafic (voir [https://www.kernel.org/doc/html/latest/networking/bonding.html xmit_hash_policy] sous les ponts &#039;&#039;Linux&#039;&#039; et en particulier &#039;&#039;layer3+4&#039;&#039;).}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
conf t&lt;br /&gt;
# Création de l&#039;interface d&#039;agrégat&lt;br /&gt;
interface port-channel 1&lt;br /&gt;
# Sur certains commutateurs de niveau 3, il faut préciser que l&#039;on va faire du niveau 2&lt;br /&gt;
switchport&lt;br /&gt;
# Il est possible de préciser que l&#039;interface est en trunk mais cela est facultatif. Seul la configuration des interfaces membres importe&lt;br /&gt;
&lt;br /&gt;
# Configuration des interfaces membres de l&#039;agrégat&lt;br /&gt;
interface range fa 0/1 - 2&lt;br /&gt;
description --- LACP vers Commut2 ---&lt;br /&gt;
switchport mode trunk&lt;br /&gt;
channel-protocol lacp&lt;br /&gt;
channel-group 1 mode active&lt;br /&gt;
&lt;br /&gt;
# Dans le cas de certaines erreurs de protocole, l&#039;agrégat peut se bloquer (un comble)&lt;br /&gt;
# Pour le débloquer automatiquement, la commande suivante peut être utilisée&lt;br /&gt;
errdisable recovery cause channel-misconfig&lt;br /&gt;
# L&#039;intervalle de restauration après erreur peut être définit comme suit&lt;br /&gt;
errdisable recovery interval 60&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
*http://www.cisco.com/c/en/us/td/docs/ios/12_2sb/feature/guide/gigeth.html&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Agr%C3%A9gation_de_liens_-_linux&amp;diff=1524</id>
		<title>Agrégation de liens - linux</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Agr%C3%A9gation_de_liens_-_linux&amp;diff=1524"/>
		<updated>2024-05-18T08:48:15Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout d&amp;#039;une précision sur l&amp;#039;algorithme de hachage du LACP + remplacement de la balise source obsolète&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:iproute2]]&lt;br /&gt;
&lt;br /&gt;
Le noyau &#039;&#039;Linux&#039;&#039; propose de grouper plusieurs interfaces réseau en un agrégat régit par différents modes possibles. L&#039;intérêt est bien souvent de bénéficier d&#039;une haute disponibilité sur un lien mais certains modes peuvent apporter un accroissement de performances lors de cas de figures particuliers.&lt;br /&gt;
&lt;br /&gt;
=Les modes de fonctionnements=&lt;br /&gt;
Les modes proposés, au nombre de 7, sont les suivants:&lt;br /&gt;
* &#039;&#039;&#039;Mode 0 (balance-rr)&#039;&#039;&#039;: Aussi connu sous le nom de &#039;&#039;Round-robin&#039;&#039;, ce mode permet de transmettre et recevoir les paquets séquentiellement un à un par chaque interface. Il en résulte un &#039;&#039;&#039;&#039;&#039;équilibrage de la charge&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Mode 1 (active-backup)&#039;&#039;&#039; : Dans ce mode, une seule interface est active, tandis que toutes les autres sont en état de sauvegarde. Si l&#039;interface active échoue, une de sauvegarde la remplace en tant que seule active dans la liaison. L&#039;adresse de contrôle d&#039;accès au support (&#039;&#039;MAC&#039;&#039;) de l&#039;interface de liaison n&#039;est visible que sur un seul port, ce qui évite toute confusion pour le commutateur. Ce mode offre une &#039;&#039;&#039;&#039;&#039;tolérance aux pannes&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Mode 2 (balance-xor)&#039;&#039;&#039; : L&#039;adresse &#039;&#039;MAC&#039;&#039; source utilise une logique exclusive (ou &#039;&#039;XOR&#039;&#039;) avec l&#039;adresse &#039;&#039;MAC&#039;&#039; de destination. Ce calcul garantit que la même interface esclave est sélectionnée pour chaque adresse &#039;&#039;MAC&#039;&#039; de destination. Ce mode assure la &#039;&#039;&#039;&#039;&#039;tolérance aux pannes&#039;&#039;&#039;&#039;&#039; et l&#039;&#039;&#039;&#039;&#039;&#039;équilibrage de charge&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Mode 3 (broadcast)&#039;&#039;&#039; : Toutes les transmissions sont envoyées à tous les esclaves. Ce mode assure une &#039;&#039;&#039;&#039;&#039;tolérance aux pannes&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Mode 4 (802.3ad)&#039;&#039;&#039; : Ce mode crée des groupes d&#039;agrégation qui partagent les mêmes paramètres de vitesse et de mode de transmission ([Half-]duplex). Il nécessite un commutateur prenant en charge un lien dynamique &#039;&#039;[https://fr.wikipedia.org/wiki/IEEE_802.3ad IEEE 802.3ad]&#039;&#039; (ou &#039;&#039;LACP&#039;&#039;). Le lien qui en résulte permet d&#039;exploiter la bande passante de chaque interface lors d&#039;accès concurrents (cette notion sera abordé un peu [[#plus bas|plus bas]]). Il offre une &#039;&#039;&#039;&#039;&#039;tolérance aux pannes&#039;&#039;&#039;&#039;&#039; et un &#039;&#039;&#039;&#039;&#039;équilibrage de charge&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Mode 5 (balance-tlb)&#039;&#039;&#039; : Ce mode garantit que la répartition du trafic sortant est définie en fonction de la charge sur chaque interface et que l&#039;une d&#039;elle reçoive tout le trafic entrant. Si elle n&#039;en reçoit pas, une autre est alors assignée à ce rôle. Il offre une &#039;&#039;&#039;&#039;&#039;tolérance aux pannes&#039;&#039;&#039;&#039;&#039; et un &#039;&#039;&#039;&#039;&#039;équilibrage de charge&#039;&#039;&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Mode 6 (balance-alb)&#039;&#039;&#039; : Les paquets reçus sont équilibrés par la négociation du protocole de résolution d&#039;adresse (&#039;&#039;ARP&#039;&#039;). Il offre une &#039;&#039;&#039;&#039;&#039;tolérance aux pannes&#039;&#039;&#039;&#039;&#039; et un &#039;&#039;&#039;&#039;&#039;équilibrage de charge&#039;&#039;&#039;&#039;&#039; (ceci n&#039;est pris en charge que dans les environnements &#039;&#039;x86&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Quel que soit le mode choisi, les commandes utilisées seront les mêmes. Il faudra simplement spécifier ce choix par son numéro ou le mot clé qui y est associé (écrit entre parenthèses dans la liste ci-dessus).&lt;br /&gt;
&lt;br /&gt;
Vous l&#039;avez probablement remarqué mais le rôle de chacun d&#039;entre eux est plutôt redondant. Honnêtement je n&#039;ai jamais vu autre chose que le mode 4 en condition réelles et je me demande bien à quoi servent les autres. Je pense qu&#039;historiquement ils étaient là avant l&#039;invention du &#039;&#039;LACP&#039;&#039; et qu&#039;ils ont permis (par de sacrés bidouilles) de répondre à un besoin maintenant normé. Leur existence actuelle est probablement dû à un désir de conservation de méthodes ingénieuses qui ont fait leurs preuves par le passer.&lt;br /&gt;
&lt;br /&gt;
{{info|Dans le cas du mode 4 (&#039;&#039;LACP&#039;&#039;), il est également possible de préciser l’algorithme de hachage utilisé par la liaison (voir [https://www.kernel.org/doc/html/latest/networking/bonding.html xmit_hash_policy]. Ceci permet de spécifier le mode de distribution des trames lors d&#039;accès concurrents par des clients vers plusieurs machines servies par LACP (la politique &#039;&#039;layer3+4&#039;&#039; permet d&#039;utiliser 100% de la bande passante des liens composant le &#039;&#039;LACP&#039;&#039; dans certains cas). La valeur &amp;lt;code&amp;gt;layer2&amp;lt;/code&amp;gt; est définit par défaut.}}&lt;br /&gt;
&lt;br /&gt;
=Configuration d&#039;un agrégat=&lt;br /&gt;
Afin de configurer un agrégat de liens sous un &#039;&#039;Linux&#039;&#039; récent, il faut les outils du paquet &#039;&#039;[[:Category:iproute2|iproute2]]&#039;&#039; installés sur votre machine.&lt;br /&gt;
&lt;br /&gt;
==Exemple avec LACP==&lt;br /&gt;
Je vais présenter les commandes nécessaires à l&#039;établissement d&#039;un agrégat se basant le protocole &#039;&#039;IEEE 802.3ad&#039;&#039;. Comme expliqué dans la documentation de celui-ci pour [[Lacp - cisco|Cisco IOS]], il est important de préciser que cette norme ne permet pas d&#039;avoir un tuyau égale à la somme des bandes passantes des liens qui le compose. Le &#039;&#039;LACP&#039;&#039; permet de répartir les transferts sur les interfaces qui en font parti. Ainsi, un seul client ne pourra pas bénéficier de plus de la capacité d&#039;un lien mais plusieurs clients pourront chacun utiliser la bande passante d&#039;une interface et donc ne pas se saturer l&#039;un l&#039;autre. Ne vous attendez donc pas à avoir du 5gbps (en couplant 5 interfaces gigabits) lors d&#039;un transfert avec un seul PC (relié en 10gbps). Ce n&#039;est pas ce que permet le &#039;&#039;LACP&#039;&#039; (si c&#039;est ce que vous voulez, tournez-vous plutôt vers le [[Multipath TCP]]).&lt;br /&gt;
&lt;br /&gt;
La série de commandes qui suit utilise la notion de filtrage de &#039;&#039;VLAN&#039;&#039; exploité dans [[Vlan - linux|ce document]]. L&#039;&#039;&#039;IEEE 802.3ad&#039;&#039; peut donc tout à fait s&#039;intégrer dans une configuration déjà existante pour peu que vous ayez suffisamment d&#039;interfaces réseau sur votre machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d&#039;un pont gérant le 802.1Q&lt;br /&gt;
ip link add br0 type bridge vlan_filtering 1&lt;br /&gt;
ip link set br0 up&lt;br /&gt;
&lt;br /&gt;
# Création de l&#039;interface d&#039;agrégat&lt;br /&gt;
ip link add bond0 type bond&lt;br /&gt;
ip link set bond0 type bond miimon 100 mode 4&lt;br /&gt;
# Pour préciser la fonction de hachage à utiliser :&lt;br /&gt;
# ip link set bond0 type bond miimon 100 mode 4 xmit_hash_policy layer3+4&lt;br /&gt;
&lt;br /&gt;
# Ajout des interfaces physique à celui-ci&lt;br /&gt;
ip link set eth0 down&lt;br /&gt;
ip link set eth0 master bond0&lt;br /&gt;
ip link set eth1 down&lt;br /&gt;
ip link set eth1 master bond0&lt;br /&gt;
ip link set bond0 up&lt;br /&gt;
&lt;br /&gt;
# Ajout de l&#039;agrégat au pont&lt;br /&gt;
ip link set bond0 master br0&lt;br /&gt;
&lt;br /&gt;
# Suppression du VLAN par défaut&lt;br /&gt;
bridge vlan del dev br0 vid 1 self&lt;br /&gt;
bridge vlan del dev bond0 vid 1 master&lt;br /&gt;
&lt;br /&gt;
# Ajout de VLAN au trunk transporté par l&#039;agrégat&lt;br /&gt;
bridge vlan add dev br0 vid 180 tagged self&lt;br /&gt;
bridge vlan add dev br0 vid 181 tagged self&lt;br /&gt;
bridge vlan add dev bond0 vid 180 tagged master&lt;br /&gt;
bridge vlan add dev bond0 vid 181 tagged master&lt;br /&gt;
&lt;br /&gt;
# Création d&#039;interfaces VLAN (SVI)&lt;br /&gt;
ip link add link br0 name vlan180 type vlan id 180&lt;br /&gt;
ip link set vlan180 up&lt;br /&gt;
ip address add 192.168.180.224/24 dev vlan180&lt;br /&gt;
&lt;br /&gt;
ip link add link br0 name vlan181 type vlan id 181&lt;br /&gt;
ip link set vlan181 up&lt;br /&gt;
ip address add 192.168.181.224/24 dev vlan181&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{astuce|Pour les suppressions et les retraits d&#039;interfaces, il faut utiliser les mots clés &amp;lt;code&amp;gt;del&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;nomaster&amp;lt;/code&amp;gt; à la place de &amp;lt;code&amp;gt;add&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;master&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
{{info|Le paramètre &amp;lt;code&amp;gt;miimon 100&amp;lt;/code&amp;gt; passé à la définition du type de l&#039;interface &amp;lt;code&amp;gt;bond0&amp;lt;/code&amp;gt; permet de spécifier la fréquence de surveillance de la liaison &#039;&#039;[http://jmainy.free.fr/guill.web-/Fea3.html MII]&#039;&#039; (&#039;&#039;Medium Indepedant Interface&#039;&#039;) en millisecondes. Cela détermine la fréquence à laquelle l&#039;état du lien vers chaque esclave est inspecté pour détecter les défaillances de ceux-ci. Une valeur de zéro désactive la surveillance de la liaison &#039;&#039;MII&#039;&#039;. Une valeur de 100 est une valeur standard. Source &#039;&#039;[https://www.linuxquestions.org/questions/linux-networking-3/mode%3D1-miimon%3D100-934723/ ici]&#039;&#039; et &#039;&#039;[https://www.tecmint.com/network-nic-bonding-teaming-in-debian-linux/ là]&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* https://developer.rackspace.com/blog/lacp-bonding-and-linux-configuration/&lt;br /&gt;
* https://access.redhat.com/documentation/fr-fr/red_hat_enterprise_linux/7/html/networking_guide/sec-using_channel_bonding&lt;br /&gt;
* https://developers.redhat.com/blog/2017/09/14/vlan-filter-support-on-bridge/&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Lacp_-_cisco&amp;diff=1523</id>
		<title>Lacp - cisco</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Lacp_-_cisco&amp;diff=1523"/>
		<updated>2024-05-18T08:41:55Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout d&amp;#039;une précision sur l&amp;#039;algorithme de hachage du LACP + remplacement de la balise source obsolète&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:cisco]]&lt;br /&gt;
[https://fr.wikipedia.org/wiki/IEEE_802.3ad IEEE 802.3ad] (&#039;&#039;Link Aggregation Control Protocol&#039;&#039; ou &#039;&#039;LACP&#039;&#039;) est un protocole de niveau 2 du modèle &#039;&#039;OSI&#039;&#039; qui permet de grouper plusieurs ports physiques en une seule voie logique.&lt;br /&gt;
&lt;br /&gt;
Nous allons donc utiliser 2 interfaces sur un commutateur Cisco 2960 pour en faire une logique afin de bénéficier d&#039;une plus grande bande passante (uniquement dans le cas d&#039;accès concurrents et en fonction de la configuration des serveurs) ainsi que de la résilience de panne.&lt;br /&gt;
&lt;br /&gt;
{{attention|Cette technique ne permet pas d&#039;avoir un tuyau égale à la somme des bandes passantes des liens qui le compose. Le &#039;&#039;LACP&#039;&#039; permet de répartir les transferts sur les interfaces qui en font parti. Un seul client ne pourra alors pas bénéficier de plus de la capacité d&#039;un lien mais plusieurs clients pourront chacun utiliser la bande passante d&#039;une interface et donc ne pas se saturer l&#039;un l&#039;autre. ce caractéristique est personnalisable à la marge en fonction de l’algorithme de hachage utilisé par la machine émettant le trafic (voir [https://www.kernel.org/doc/html/latest/networking/bonding.html xmit_hash_policy] sous les ponts &#039;&#039;Linux&#039;&#039; et en particulier &#039;&#039;layer3+4&#039;&#039;).}}&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
conf t&lt;br /&gt;
# Création de l&#039;interface d&#039;agrégat&lt;br /&gt;
interface port-channel 1&lt;br /&gt;
# Sur certains commutateurs de niveau 3, il faut préciser que l&#039;on va faire du niveau 2&lt;br /&gt;
switchport&lt;br /&gt;
# Il est possible de préciser que l&#039;interface est en trunk mais cela est facultatif. Seul la configuration des interfaces membres importe&lt;br /&gt;
&lt;br /&gt;
# Configuration des interfaces membres de l&#039;agrégat&lt;br /&gt;
interface range fa 0/1 - 2&lt;br /&gt;
description --- LACP vers Commut2 ---&lt;br /&gt;
switchport mode trunk&lt;br /&gt;
channel-protocol lacp&lt;br /&gt;
channel-group 1 mode active&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
*http://www.cisco.com/c/en/us/td/docs/ios/12_2sb/feature/guide/gigeth.html&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Ffmpeg&amp;diff=1522</id>
		<title>Ffmpeg</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Ffmpeg&amp;diff=1522"/>
		<updated>2024-05-15T21:36:45Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Rotation d&amp;#039;une vidéo&amp;quot; + remplacement d&amp;#039;une balise &amp;quot;syntaxhighlight inline&amp;quot; par une balise &amp;quot;code&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:linux]]&lt;br /&gt;
[https://fr.wikipedia.org/wiki/FFmpeg FFmpeg] est une collection de logiciels libres destinés au traitement de flux audio ou vidéo (enregistrement, lecture ou conversion d&#039;un format à un autre). Cette bibliothèque est utilisée par de nombreux autres logiciels ou services comme &#039;&#039;VLC&#039;&#039;, &#039;&#039;iTunes&#039;&#039; ou &#039;&#039;YouTube&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Développé sur &#039;&#039;GNU/Linux&#039;&#039;, &#039;&#039;FFmpeg&#039;&#039; peut être compilé sur la plupart des systèmes d&#039;exploitation, y compris [[:Category:Windows|Windows]]. Le projet est distribué sous licence libre, [https://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_GNU GPL] 2+ ou [https://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_limit%C3%A9e_GNU LGPL] 2.1+ en fonction des options de compilation du projet.&lt;br /&gt;
&lt;br /&gt;
=Extraire le son=&lt;br /&gt;
Voici comment [http://www.loopsbeats.com/convert/extract-audio-with-ffmpeg.html extraire le son] d&#039;une vidéo &#039;&#039;mp4&#039;&#039; en &#039;&#039;mp3&#039;&#039; :&lt;br /&gt;
 ffmpeg -i toto.mp4 -vn -ar 44100 -ac 2 -ab 192 -f mp3 toto.mp3&lt;br /&gt;
&lt;br /&gt;
=Extraire la jaquette=&lt;br /&gt;
Les fichiers audios embarquent souvent une image (communément la jaquette de l&#039;album). Voici comment la [https://unix.stackexchange.com/questions/41287/how-to-extract-album-cover-image-from-mp3-file récupérer] :&lt;br /&gt;
 ffmpeg -i fichier.mp3 -an -c:v copy fichier.jpg&lt;br /&gt;
&lt;br /&gt;
=Couper un extrait=&lt;br /&gt;
Il est possible de [https://superuser.com/questions/138331/using-ffmpeg-to-cut-up-video#704118 découper un morceau] de fichier avec ceci :&lt;br /&gt;
 ffmpeg -ss 00:00:53 -i Pas\ de\ manières-5hjNP5dNNs4.m4a -t 00:00:11 -c copy Ta_cherie.m4a&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
* &#039;&#039;&#039;-ss&#039;&#039;&#039; : début de la découpe&lt;br /&gt;
* &#039;&#039;&#039;-i&#039;&#039;&#039; : fichier source&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; : temps à garder à partir de &#039;&#039;&#039;-ss&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; : action à effectuer&lt;br /&gt;
&lt;br /&gt;
Il est aussi possible de préciser le nombre de trames à conserver à partir d&#039;un temps donnée (plus précis) :&lt;br /&gt;
 ffmpeg -y -ss 00:01:28 -i Toto.mp4 -c:v libx264 -c:a aac -frames:v 100 /tmp/titi.mp4&lt;br /&gt;
&lt;br /&gt;
Paramètres différents :&lt;br /&gt;
* &#039;&#039;&#039;-c:v libx264&#039;&#039;&#039; : codec vidéo de transcodage (facultatif)&lt;br /&gt;
* &#039;&#039;&#039;-c:a aac&#039;&#039;&#039; : codec audio de transcodage (facultatif)&lt;br /&gt;
* &#039;&#039;&#039;-frames:v 100&#039;&#039;&#039; : garder 100 trames (le &amp;quot;v&amp;quot; peut être remplacé par un &amp;quot;a&amp;quot; en cas de fichier uniquement audio)&lt;br /&gt;
&lt;br /&gt;
Dans le cas d&#039;une vidéo comportant [https://stackoverflow.com/questions/60445661/ffmpeg-how-do-i-choose-the-correct-audio-track plusieurs] pistes audios, il est possible de sélectionner la désirée de la manière suivante :&lt;br /&gt;
 ffmpeg -y -ss 00:27:26 -i Toto.mp4 -c:v libx264 -c:a aac -frames:v 530 -map 0:v:0 -map 0:a:2 /tmp/titi.mp4.mp4&lt;br /&gt;
&lt;br /&gt;
Paramètres différents :&lt;br /&gt;
* &#039;&#039;&#039;-map 0:v:0&#039;&#039;&#039; : première piste vidéo&lt;br /&gt;
* &#039;&#039;&#039;-map 0:a:2&#039;&#039;&#039; : troisième piste audio&lt;br /&gt;
&lt;br /&gt;
=Convertir un fichier=&lt;br /&gt;
Pour [https://fr.wikihow.com/utiliser-FFmpeg convertir un fichier] dans un autre format :&lt;br /&gt;
 ffmpeg -i Ni_flic_ni_pd.ogg Ni_flic_ni_pd.mp3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Note: L&#039;outil détecte automatiquement le format du fichier voulu en lisant l&#039;extension de destination.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Il est possible d&#039;ajouter des paramètres afin de préciser des [https://trac.ffmpeg.org/wiki/Encode/H.264 caractéristiques d&#039;encodage]. [https://emirchouchane.com/h264-ffmpeg/ Par exemple], pour une conversion vidéo en &#039;&#039;h264&#039;&#039; :&lt;br /&gt;
 ffmpeg -i vidéo.m4v -c:v libx264 -crf 23 vidéo.mp4&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
* &#039;&#039;&#039;-c:v libx264&#039;&#039;&#039; : sélection du codec (&#039;&#039;-c&#039;&#039;) vidéo (&#039;&#039;:v&#039;&#039;) h264 (&#039;&#039;libx264&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;-crf 23&#039;&#039;&#039; : facteur de taux constant (&#039;&#039;Constant Rate Factor&#039;&#039;) à 23. Permet de définir le débit binaire de la vidéo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://{{SERVERNAME}}/fichiers/multim%c3%a9dia/conversion/ffmpeg/%c3%89chelle_Constant_Rate_Factor.svg&amp;quot;&amp;gt;&amp;lt;/img&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre exemple avec une conversion en [https://trac.ffmpeg.org/wiki/Encode/H.265 h265] :&lt;br /&gt;
 ffmpeg -i vidéo.mp4 -c:v libx265 -crf 26 -preset fast -c:a eac3 -b:a 640k /tmp/vidéo.mp4&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;-c:v libx265&#039;&#039;&#039; : codec vidéo en &#039;&#039;h265&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;-preset fast&#039;&#039;&#039; : vitesse d&#039;encodage et profile de compression (énumérés [https://trac.ffmpeg.org/wiki/Encode/H.265#ConstantRateFactorCRF ici])&lt;br /&gt;
* &#039;&#039;&#039;-c:a eac3&#039;&#039;&#039; : codec audio en &#039;&#039;eac3&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;-b:a 640k&#039;&#039;&#039; : débit binaire du flux audio&lt;br /&gt;
&lt;br /&gt;
=Redimensionner une vidéo=&lt;br /&gt;
Outre le codec à utiliser et le &#039;&#039;CRF&#039;&#039; à modifier, il est possible d&#039;alléger une vidéo en réduisant ses dimensions. Les différentes techniques combinées peuvent permettre d&#039;arriver à envoyer péniblement une vidéo par [https://fr.wikipedia.org/wiki/Multimedia_Messaging_Service MMS]...&lt;br /&gt;
 ffmpeg -y -i /tmp/a.mp4 -crf 33 -vf &amp;quot;scale=iw/2:ih/2&amp;quot; /tmp/b.mp4&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
* &#039;&#039;&#039;-y&#039;&#039;&#039; : écrase la destination sans demander de confirmation&lt;br /&gt;
* &#039;&#039;&#039;-i&#039;&#039;&#039; : fichier source&lt;br /&gt;
* &#039;&#039;&#039;-crf 33&#039;&#039;&#039; : forte compression (destructrice) de la vidéo&lt;br /&gt;
* &#039;&#039;&#039;-vf &amp;quot;scale=iw/2:ih/2&amp;quot;&#039;&#039;&#039; : réduction par deux des dimensions de la vidéo&lt;br /&gt;
&lt;br /&gt;
=Rotation d&#039;une vidéo=&lt;br /&gt;
Il n&#039;est pas rare de tomber sur une vidéo capturée via un téléphone en mode portrait du fait d&#039;un utilisateur ayant commencé la prise de vue dans cette orientation et s’étant rendu compte, après coup, qu&#039;il fallait tourner la caméra pour avoir un bon rendu... Il est possible de corriger cela via une [https://www.baeldung.com/linux/ffmpeg-rotate-video rotation] avec le paramètre &amp;lt;code&amp;gt;transpose=0&amp;lt;/code&amp;gt; où &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; correspond à l&#039;orientation à appliquer d&#039;après la liste suivante :&lt;br /&gt;
* &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; : sens inverse des aiguilles d&#039;une montre et inversion verticale (par défaut)&lt;br /&gt;
* &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; : sens des aiguilles d&#039;une montre&lt;br /&gt;
* &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; : sens inverse des aiguilles d&#039;une montre&lt;br /&gt;
* &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; : sens des aiguilles d&#039;une montre et inversion verticale&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
 ffmpeg -i VID_20240415_150506.mp4 -vf &amp;quot;transpose=2&amp;quot; VID_20240415_150506_r2.mp4&lt;br /&gt;
&lt;br /&gt;
=Fusionner une bande vidéo et une bande son=&lt;br /&gt;
Il est possible de [https://qastack.fr/superuser/277642/how-to-merge-audio-and-video-file-in-ffmpeg regrouper] dans un même fichier multimédia ([https://fr.wikipedia.org/wiki/Format_conteneur conteneur]) une bande vidéo et une bande son. Un cas typique est le téléchargement d&#039;une vidéo sur le site [https://crowdbunker.com crowdbunker.com] via les fichiers &amp;lt;code&amp;gt;.m3u&amp;lt;/code&amp;gt; capturés dans le trafic réseau. La vidéo est découplé du son (deux téléchargements séparés) et c&#039;est le lecteur vidéo &#039;&#039;WEB&#039;&#039; qui se charge de lire les deux en même temps. Pour fusionner les deux après téléchargement en local, la commande suivante peut être utilisée :&lt;br /&gt;
 ffmpeg -i Vidéo_source.mp4 -i Audio_source.mp4 -c:v copy -c:a aac -strict experimental Vidéo_et_audio_destination.mp4&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Chrony&amp;diff=1521</id>
		<title>Chrony</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Chrony&amp;diff=1521"/>
		<updated>2024-04-24T15:46:24Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Voir modifs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Service_temps]]&lt;br /&gt;
&lt;br /&gt;
[https://chrony-project.org Chrony] est, comme sont homologue [[Ntp - linux|éponyme]], une implémentation libre du protocole [https://fr.wikipedia.org/wiki/Network_Time_Protocol NTP] (Network Time Protocol). Il peut synchroniser l&#039;horloge système avec d&#039;autres serveurs &#039;&#039;NTP&#039;&#039;, des horloges de référence matériel comme des récepteurs GPS ainsi que manuellement. L&#039;outil embarque un client permettant la synchronisation avec des sources externes ainsi qu&#039;un serveur pouvant accepter les requêtes de temps de clients autorisés.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Chrony&#039;&#039; supporte, depuis la version 4.0, le protocole [https://datatracker.ietf.org/doc/rfc8915/ NTS] (Network Time Security) permettant d&#039;authentifier les serveurs via une couche de sécurité [https://fr.wikipedia.org/wiki/Transport_Layer_Security TLS] (Transport Layer Security).&lt;br /&gt;
&lt;br /&gt;
{{info|La présente documentation est réalisée sous &#039;&#039;GNU/Linux Debian 12&#039;&#039; et &#039;&#039;chrony 4.3-2&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
=Serveur=&lt;br /&gt;
==Installation==&lt;br /&gt;
Installation du service&lt;br /&gt;
 apt install --no-install-recommends chrony&lt;br /&gt;
&lt;br /&gt;
==Configuration de base==&lt;br /&gt;
L&#039;outil se base sur un unique fichier &amp;lt;code&amp;gt;/etc/chrony/chrony.conf&amp;lt;/code&amp;gt; (changeable via un &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;) pouvant être atomisé dans &amp;lt;code&amp;gt;/etc/chrony/conf.d/&amp;lt;/code&amp;gt;. Les directives des serveurs peuvent quand à elle (et elles seules) être atomisées dans &amp;lt;code&amp;gt;/etc/chrony/sources.d/&amp;lt;/code&amp;gt;. Il n&#039;est cependant généralement intéressant d&#039;utiliser cette atomicité que dans des configurations complexes.&lt;br /&gt;
&lt;br /&gt;
Voici le contenu de ce fichier pour une configuration simple en mode serveur pour deux réseaux clients&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Bienvenue dans le fichier de configuration de chrony. Veuillez voir la page de&lt;br /&gt;
# manuel chrony.conf(5) pour plus d&#039;informations sur les directives utilisables.&lt;br /&gt;
&lt;br /&gt;
# Inclure les fichiers de configurations trouvés dans /etc/chrony/conf.d.&lt;br /&gt;
confdir /etc/chrony/conf.d&lt;br /&gt;
&lt;br /&gt;
# Utiliser les serveurs de temps de Debian.&lt;br /&gt;
# Toutes les IP retournées par le DNS seront utilisées dans la plage (pool).&lt;br /&gt;
pool 2.debian.pool.ntp.org iburst&lt;br /&gt;
&lt;br /&gt;
# Utiliser les serveurs de temps fournis par les baux DHCP.&lt;br /&gt;
# sourcedir /run/chrony-dhcp&lt;br /&gt;
&lt;br /&gt;
# Utiliser les serveurs NTP trouvés dans /etc/chrony/sources.d.&lt;br /&gt;
sourcedir /etc/chrony/sources.d&lt;br /&gt;
&lt;br /&gt;
# Cette directive spécifie la localisation du fichier contenant le couple ID/clé&lt;br /&gt;
# pour l&#039;authentification NTP.&lt;br /&gt;
keyfile /etc/chrony/chrony.keys&lt;br /&gt;
&lt;br /&gt;
# Cette directive spécifie le fichier dans lequel chrony va stocker les&lt;br /&gt;
# informations de ratios.&lt;br /&gt;
driftfile /var/lib/chrony/chrony.drift&lt;br /&gt;
&lt;br /&gt;
# Sauvegarder les les clés et cookies du protocole NTS dans /var/lib/chrony.&lt;br /&gt;
ntsdumpdir /var/lib/chrony&lt;br /&gt;
&lt;br /&gt;
# Dé-commenter la ligne suivant pour activer la journalisation.&lt;br /&gt;
# Chaque mot définit un type de données à journaliser. Se référer au manuel.&lt;br /&gt;
#log tracking measurements statistics&lt;br /&gt;
&lt;br /&gt;
# Localisation des fichiers de journaux&lt;br /&gt;
logdir /var/log/chrony&lt;br /&gt;
&lt;br /&gt;
# Arrêter de considérer la source RTC matériel comme fiable au bout du seuil définit.&lt;br /&gt;
maxupdateskew 100.0&lt;br /&gt;
&lt;br /&gt;
# Cette directive active la synchronisation RTC du noyau (toute les 11 minutes).&lt;br /&gt;
# Notez l&#039;incompatibilité de cette option avec la directive &#039;rtcfile&#039;.&lt;br /&gt;
rtcsync&lt;br /&gt;
&lt;br /&gt;
# Ajuster d&#039;une traite l&#039;horloge au lieu de modifier la vitesse du temps pour&lt;br /&gt;
# ajuster le décalage lorsque celui-ci est supérieur à 1 seconde mais&lt;br /&gt;
# seulement pour les 3 premières synchronisations.&lt;br /&gt;
makestep 1 3&lt;br /&gt;
&lt;br /&gt;
# Obtenir le décalage TAI-UTC et les secondes intercalaires à partir de la&lt;br /&gt;
# base de données tz du système. Cette directive doit être commentée lors de&lt;br /&gt;
# l&#039;utilisation de sources de temps qui utilisent des secondes intercalaires.&lt;br /&gt;
leapsectz right/UTC&lt;br /&gt;
&lt;br /&gt;
# Désactiver l&#039;usage de chronyc via IP (port par défaut : UDP/323)&lt;br /&gt;
cmdport 0&lt;br /&gt;
&lt;br /&gt;
# Autoriser les clients NTP des réseaux suivants à se synchroniser au serveur&lt;br /&gt;
allow 192.168.1.0/24&lt;br /&gt;
allow 10.0.2.0/23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les directives &amp;lt;code&amp;gt;allow&amp;lt;/code&amp;gt; sont responsables du comportement en mode serveur de &#039;&#039;Chrony&#039;&#039;. En l&#039;absence de paramètre, tous les clients sont autorisés à requêter le serveur (&#039;&#039;NTP&#039;&#039; publique&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
 systemctl restart chrony.service&lt;br /&gt;
&lt;br /&gt;
Afficher le statut du service pour voir d’éventuelle erreur&lt;br /&gt;
 systemctl status chrony.service&lt;br /&gt;
&lt;br /&gt;
==Authentification==&lt;br /&gt;
Deux modes d&#039;authentification sont pris en charge :&lt;br /&gt;
* authentification &#039;&#039;NTP&#039;&#039; ([https://www.rfc-editor.org/rfc/rfc5906 RFC 5906])&lt;br /&gt;
* NTS ([https://www.rfc-editor.org/info/rfc8915 RFC 8915])&lt;br /&gt;
&lt;br /&gt;
Dans la mesure où le temps n&#039;est pas une donnée confidentielle (les raisons sont assez évidentes...), aucun mécanismes ne permet le chiffrement de son échange. Les méthodes existantes ne permettent que l&#039;authenticité et l&#039;intégrité des paquets transmis.&lt;br /&gt;
&lt;br /&gt;
===Authentification NTP===&lt;br /&gt;
&lt;br /&gt;
L&#039;authentification &#039;&#039;NTP&#039;&#039; est le mécanisme historique assurant l&#039;intégrité des réponses du serveur. Il se base sur une clé hachée via différents algorithmes (&#039;&#039;SHA256&#039;&#039; dans notre exemple mais couramment [http://Ntp%20-%20cisco MD5]) et partagée entre les paires. Chaque clé comporte un identifiant unique et est contenue dans une base (texte plein pour &#039;&#039;Chrony&#039;&#039;) des deux côtés de la communication. Le clients et le serveur doivent donc disposer du même couple identifiant/clé pour que les paquets soient jugés valides.&lt;br /&gt;
&lt;br /&gt;
{{attention|Cela ne fonctionne pas. Il doit y avoir quelque chose d&#039;autre à faire car après altération de la clé, ça se synchronise quand même... Cette méthode n&#039;ayant jamais eu aucun intérêt de toute façon je ne vais pas perdre de temps à la faire fonctionner. Utilisez &#039;&#039;NTS&#039;&#039; si vous voulez de la sécurité. C&#039;est mieux en tout point et bien moins compliqué à mettre en œuvre.}}&lt;br /&gt;
&lt;br /&gt;
Génération de la clé côté serveur&lt;br /&gt;
 chronyc keygen 1 SHA256 256 &amp;gt;&amp;gt; /etc/chrony/chrony.keys&lt;br /&gt;
 systemctl restart chrony.service&lt;br /&gt;
&lt;br /&gt;
Il faut copier la ligne générée dans le même fichier sur le client et préciser la clé à utiliser dans la ligne du serveur du fichier de configuration&lt;br /&gt;
 server nts1.exemple.fr iburst key 1&lt;br /&gt;
&lt;br /&gt;
 systemctl restart chrony.service&lt;br /&gt;
&lt;br /&gt;
===NTS===&lt;br /&gt;
&#039;&#039;NTS&#039;&#039; est un mécanisme normalisé en septembre 2020 permettant d’utiliser &#039;&#039;TLS&#039;&#039; pour assurer l&#039;authentification cryptographique du mode client-serveur du &#039;&#039;NTP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Génération des clés du serveur&lt;br /&gt;
 mkdir /etc/chrony/nts&lt;br /&gt;
 openssl req -x509 -nodes -days 36500 -newkey rsa:4096 -out /etc/chrony/nts/chrony.crt -keyout /etc/chrony/nts/chrony.key -subj &amp;quot;/CN=nts1.exemple.fr/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Le service s&#039;exécutant avec des privilèges restreints, il est important que l&#039;utilisateur l&#039;exécutant est la propriété sur les éléments générés&lt;br /&gt;
 chown _chrony:_chrony /etc/chrony/nts/chrony.*&lt;br /&gt;
&lt;br /&gt;
Il convient enfin d&#039;ajouter les directive demandant au serveur de les utiliser dans la configuration du service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt;&amp;gt; /etc/chrony/chrony.conf &amp;lt;&amp;lt; _EOF_&lt;br /&gt;
&lt;br /&gt;
# Configuration du NTS&lt;br /&gt;
ntsservercert /etc/chrony/nts/chrony.crt&lt;br /&gt;
ntsserverkey /etc/chrony/nts/chrony.key&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 systemctl restart chrony.service&lt;br /&gt;
 systemctl status chrony.service&lt;br /&gt;
&lt;br /&gt;
=Client=&lt;br /&gt;
La configuration du client est très similaire à celle du serveur.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Bienvenue dans le fichier de configuration de chrony. Veuillez voir la page de&lt;br /&gt;
# manuel chrony.conf(5) pour plus d&#039;informations sur les directives utilisables.&lt;br /&gt;
&lt;br /&gt;
# Inclure les fichiers de configurations trouvés dans /etc/chrony/conf.d.&lt;br /&gt;
confdir /etc/chrony/conf.d&lt;br /&gt;
&lt;br /&gt;
# Utiliser le serveur de temps NTS définit dans la section &amp;quot;serveur&amp;quot;.&lt;br /&gt;
# Pour un NTP normal, il faut enlever le paramètre &amp;quot;NTS&amp;quot;.&lt;br /&gt;
# Pour un NTP authentifié, faut utiliser le paramètre &amp;quot;key &amp;lt;id_clé&amp;gt;&amp;quot;&lt;br /&gt;
server nts1.exemple.fr iburst nts&lt;br /&gt;
&lt;br /&gt;
# Utiliser les serveurs de temps fournis par les baux DHCP.&lt;br /&gt;
# sourcedir /run/chrony-dhcp&lt;br /&gt;
&lt;br /&gt;
# Utiliser les serveurs NTP trouvés dans /etc/chrony/sources.d.&lt;br /&gt;
sourcedir /etc/chrony/sources.d&lt;br /&gt;
&lt;br /&gt;
# Cette directive spécifie la localisation du fichier contenant le couple ID/clé&lt;br /&gt;
# pour l&#039;authentification NTP.&lt;br /&gt;
keyfile /etc/chrony/chrony.keys&lt;br /&gt;
&lt;br /&gt;
# Cette directive spécifie le fichier dans lequel chrony va stocker les&lt;br /&gt;
# informations de ratios.&lt;br /&gt;
driftfile /var/lib/chrony/chrony.drift&lt;br /&gt;
&lt;br /&gt;
# Sauvegarder les les clés et cookies du protocole NTS dans /var/lib/chrony.&lt;br /&gt;
ntsdumpdir /var/lib/chrony&lt;br /&gt;
&lt;br /&gt;
# Dé-commenter la ligne suivant pour activer la journalisation.&lt;br /&gt;
#log tracking measurements statistics&lt;br /&gt;
&lt;br /&gt;
# Localisation des fichiers de journaux&lt;br /&gt;
logdir /var/log/chrony&lt;br /&gt;
&lt;br /&gt;
# Arrêter de considérer la source RTC matériel comme fiable au bout du seuil définit.&lt;br /&gt;
maxupdateskew 100.0&lt;br /&gt;
&lt;br /&gt;
# Cette directive active la synchronisation RTC du noyau (toute les 11 minutes).&lt;br /&gt;
# Notez l&#039;incompatibilité de cette option avec la directive &#039;rtcfile&#039;.&lt;br /&gt;
rtcsync&lt;br /&gt;
&lt;br /&gt;
# Ajuster d&#039;une traite l&#039;horloge au lieu de modifier la vitesse du temps pour&lt;br /&gt;
# ajuster le décalage lorsque celui-ci est supérieur à 1 seconde mais&lt;br /&gt;
# seulement pour les 3 premières synchronisations.&lt;br /&gt;
makestep 1 3&lt;br /&gt;
&lt;br /&gt;
# Obtenir le décalage TAI-UTC et les secondes intercalaires à partir de la&lt;br /&gt;
# base de données tz du système. Cette directive doit être commentée lors de&lt;br /&gt;
# l&#039;utilisation de sources de temps qui utilisent des secondes intercalaires.&lt;br /&gt;
leapsectz right/UTC&lt;br /&gt;
&lt;br /&gt;
# Désactiver l&#039;usage de chronyc via IP (port par défaut : UDP/323)&lt;br /&gt;
cmdport 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour le &#039;&#039;NTS&#039;&#039;, dans le cas où votre certificat est auto-généré, il faudra l&#039;ajouter dans la base interne des clients. La méthode sous &#039;&#039;Debian&#039;&#039; est désormais la [https://www.baeldung.com/linux/ca-certificate-management suivante] (sur le client) :&lt;br /&gt;
 cp chrony.crt /usr/local/share/ca-certificates/&lt;br /&gt;
 update-ca-certificates -v&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
 systemctl restart chrony.service&lt;br /&gt;
&lt;br /&gt;
Afficher le statut du service pour voir d’éventuelle erreur&lt;br /&gt;
 systemctl status chrony.service&lt;br /&gt;
&lt;br /&gt;
Afficher les sources NTP&lt;br /&gt;
 chronyc sourcestats&lt;br /&gt;
&lt;br /&gt;
Afficher l&#039;état de la session NTS&lt;br /&gt;
 chronyc authdata&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* Pages de manuelles https://chrony-project.org/documentation.html :&lt;br /&gt;
** https://chrony-project.org/doc/4.4/chrony.conf.html&lt;br /&gt;
** https://chrony-project.org/doc/4.4/chronyd.html&lt;br /&gt;
** https://chrony-project.org/doc/4.4/chronyc.html&lt;br /&gt;
* https://ubuntu.com/server/docs/how-to-serve-the-network-time-protocol-with-chrony&lt;br /&gt;
* https://mpolinowski.github.io/docs/DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/2022-09-29/&lt;br /&gt;
* https://access.redhat.com/documentation/fr-fr/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/using-chrony-to-configure-ntp_configuring-basic-system-settings&lt;br /&gt;
* https://www.it-connect.fr/ntp-la-synchronisation-temporelle-avec-chrony/#V_Securisation_de_chrony&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Chrony&amp;diff=1520</id>
		<title>Chrony</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Chrony&amp;diff=1520"/>
		<updated>2024-04-21T22:31:31Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Écriture d&amp;#039;une première ébauche à compléter plus tard car il est tard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Service_temps]]&lt;br /&gt;
&lt;br /&gt;
{{chantier}}&lt;br /&gt;
&lt;br /&gt;
[https://chrony-project.org Chrony] est, comme sont homologue [[Ntp - linux|éponyme]], une implémentation libre du protocole [https://fr.wikipedia.org/wiki/Network_Time_Protocol NTP] (Network Time Protocol). Il peut synchroniser l&#039;horloge système avec d&#039;autres serveurs &#039;&#039;NTP&#039;&#039;, des horloges de référence matériel comme des récepteurs GPS ainsi que manuellement. L&#039;outil embarque un client permettant la synchronisation avec des sources externes ainsi qu&#039;un serveur pouvant accepter les requêtes de temps de clients autorisés.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Chrony&#039;&#039; supporte, depuis la version 4.0, le protocole [https://datatracker.ietf.org/doc/rfc8915/ NTS] (Network Time Security) permettant d&#039;authentifier les serveurs via une couche de sécurité [https://fr.wikipedia.org/wiki/Transport_Layer_Security TLS] (Transport Layer Security).&lt;br /&gt;
&lt;br /&gt;
{{info|La présente documentation est réalisée sous &#039;&#039;GNU/Linux Debian 12&#039;&#039; et &#039;&#039;chrony 4.3-2&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
=Serveur=&lt;br /&gt;
==Installation==&lt;br /&gt;
Installation du service&lt;br /&gt;
 apt install --no-install-recommends chrony&lt;br /&gt;
&lt;br /&gt;
==Configuration de base==&lt;br /&gt;
L&#039;outil se base sur un unique fichier &amp;lt;code&amp;gt;/etc/chrony/chrony.conf&amp;lt;/code&amp;gt; (changeable via un &amp;lt;code&amp;gt;-f&amp;lt;/code&amp;gt;) pouvant être atomisé dans &amp;lt;code&amp;gt;/etc/chrony/conf.d/&amp;lt;/code&amp;gt;. Les directives des serveurs peuvent quand à elle (et elles seules) être atomisées dans &amp;lt;code&amp;gt;/etc/chrony/sources.d/&amp;lt;/code&amp;gt;. Il n&#039;est cependant généralement intéressant d&#039;utiliser cette atomicité que dans des configurations complexes.&lt;br /&gt;
&lt;br /&gt;
Voici le contenu de ce fichier pour une configuration simple en mode serveur pour deux réseaux clients&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Bienvenu dans le fichier de configuration de chrony. Veuillez voir la page de&lt;br /&gt;
# manuel chrony.conf(5) pour plus d&#039;informations sur les directives utilisables.&lt;br /&gt;
&lt;br /&gt;
# Inclure les fichiers de configurations trouvés dans /etc/chrony/conf.d.&lt;br /&gt;
confdir /etc/chrony/conf.d&lt;br /&gt;
&lt;br /&gt;
# Utiliser les serveurs de temps de Debian.&lt;br /&gt;
# Use Debian vendor zone.&lt;br /&gt;
pool 2.debian.pool.ntp.org iburst&lt;br /&gt;
&lt;br /&gt;
# Utiliser les serveurs de temps fournis par les baux DHCP.&lt;br /&gt;
# sourcedir /run/chrony-dhcp&lt;br /&gt;
&lt;br /&gt;
# Utiliser les serveurs NTP trouvés dans /etc/chrony/sources.d.&lt;br /&gt;
sourcedir /etc/chrony/sources.d&lt;br /&gt;
&lt;br /&gt;
# Cette directive spécifie la localisation du fichier contenant le couple ID/clé&lt;br /&gt;
# pour l&#039;authentification NTP.&lt;br /&gt;
keyfile /etc/chrony/chrony.keys&lt;br /&gt;
&lt;br /&gt;
# Cette directive spécifie le fichier dans lequel chrony va stocker les&lt;br /&gt;
# informations de ratios.&lt;br /&gt;
driftfile /var/lib/chrony/chrony.drift&lt;br /&gt;
&lt;br /&gt;
# Sauvegarder les les clés et cookies du protocole NTS dans /var/lib/chrony.&lt;br /&gt;
ntsdumpdir /var/lib/chrony&lt;br /&gt;
&lt;br /&gt;
# Dé-commenter la ligne suivant pour activer la journalisation.&lt;br /&gt;
#log tracking measurements statistics&lt;br /&gt;
&lt;br /&gt;
# Localisation des fichiers de journaux&lt;br /&gt;
logdir /var/log/chrony&lt;br /&gt;
&lt;br /&gt;
# Arrêter de considérer la source RTC matériel comme fiable au bout du seuil définit.&lt;br /&gt;
maxupdateskew 100.0&lt;br /&gt;
&lt;br /&gt;
# Cette directive active la synchronisation RTC du noyau (toute les 11 minutes).&lt;br /&gt;
# Notez l&#039;incompatibilité de cette option avec la directive &#039;rtcfile&#039;.&lt;br /&gt;
rtcsync&lt;br /&gt;
&lt;br /&gt;
# Ajuster d&#039;une traite l&#039;horloge au lieu de modifier la vitesse du temps pour&lt;br /&gt;
# ajuster le décalage lorsque celui-ci est supérieur à 1 seconde mais&lt;br /&gt;
# seulement pour les 3 premières synchronisations.&lt;br /&gt;
makestep 1 3&lt;br /&gt;
&lt;br /&gt;
# Obtenir le décalage TAI-UTC et les secondes intercalaires à partir de la&lt;br /&gt;
# base de données tz du système. Cette directive doit être commentée lors de&lt;br /&gt;
# l&#039;utilisation de sources de temps qui utilisent des secondes intercalaires.&lt;br /&gt;
leapsectz right/UTC&lt;br /&gt;
&lt;br /&gt;
# Désactiver l&#039;usage de chronyc via IP (port par défaut : UDP/323)&lt;br /&gt;
cmdport 0&lt;br /&gt;
&lt;br /&gt;
# Autoriser les clients NTP des réseaux suivants à se synchroniser au serveur&lt;br /&gt;
allow 192.168.1.0/24&lt;br /&gt;
allow 10.0.2.0/23&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les directives &amp;lt;code&amp;gt;allow&amp;lt;/code&amp;gt; sont responsables du comportement en mode serveur de &#039;&#039;Chrony&#039;&#039;. En l&#039;absence de paramètre, tous les clients sont autorisés à requêter le serveur (&#039;&#039;NTP&#039;&#039; publique&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
==Authentification==&lt;br /&gt;
Deux modes d&#039;authentification sont pris en charge :&lt;br /&gt;
* authentification &#039;&#039;NTP&#039;&#039;&lt;br /&gt;
* NTS&lt;br /&gt;
&lt;br /&gt;
===Authentification NTP===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===NTS===&lt;br /&gt;
&#039;&#039;NTS&#039;&#039; est un mécanisme normalisé en septembre 2020 ([https://www.rfc-editor.org/info/rfc8915 RFC 8915]) permettant d’utiliser &#039;&#039;TLS&#039;&#039; pour assurer l&#039;authentification cryptographique du mode client-serveur du &#039;&#039;NTP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Génération des clés du serveur&lt;br /&gt;
 mkdir /etc/chrony/nts&lt;br /&gt;
 openssl req -x509 -nodes -days 5000 -newkey rsa:4096 -out /etc/chrony/nts/chrony.crt -keyout /etc/chrony/nts/chrony.key -subj &amp;quot;/CN=nts1.exemple.fr/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Le service s&#039;exécutant avec des privilèges restreints, il est important que l&#039;utilisateur l&#039;exécutant est la propriété sur les éléments générés&lt;br /&gt;
 chown _chrony:_chrony /etc/chrony/nts/chrony.*&lt;br /&gt;
&lt;br /&gt;
Il convient enfin d&#039;ajouter les directive demandant au serveur de les utiliser dans la configuration du service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;gt; /etc/chrony/chrony.conf &amp;lt;&amp;lt; _EOF_&lt;br /&gt;
&lt;br /&gt;
# Configuration du NTS&lt;br /&gt;
ntsservercert /etc/chrony/nts/chrony.crt&lt;br /&gt;
ntsserverkey /etc/chrony/nts/chrony.key&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Client=&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* Pages de manuelles https://chrony-project.org/documentation.html :&lt;br /&gt;
** https://chrony-project.org/doc/4.4/chrony.conf.html&lt;br /&gt;
** https://chrony-project.org/doc/4.4/chronyd.html&lt;br /&gt;
** https://chrony-project.org/doc/4.4/chronyc.html&lt;br /&gt;
* https://ubuntu.com/server/docs/how-to-serve-the-network-time-protocol-with-chrony&lt;br /&gt;
* https://mpolinowski.github.io/docs/DevOps/Linux/2022-09-29--build-an-chrony-nts-client-from-source/2022-09-29/&lt;br /&gt;
* https://access.redhat.com/documentation/fr-fr/red_hat_enterprise_linux/9/html/configuring_basic_system_settings/using-chrony-to-configure-ntp_configuring-basic-system-settings&lt;br /&gt;
* https://www.it-connect.fr/ntp-la-synchronisation-temporelle-avec-chrony/#V_Securisation_de_chrony&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cryptsetup&amp;diff=1519</id>
		<title>Cryptsetup</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cryptsetup&amp;diff=1519"/>
		<updated>2024-04-19T23:54:25Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : /* Bitlocker */ Menues corrections de syntaxe et ajout d&amp;#039;un nom type pour le fichier de récupération&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:chiffrement]]&lt;br /&gt;
[[Category:périphériques bloc]]&lt;br /&gt;
&#039;&#039;Cryptsetup&#039;&#039; est l&#039;implémentation du standard &#039;&#039;LUKS&#039;&#039; sur la plupart des distributions &#039;&#039;Linux&#039;&#039;. Il permet de chiffrer des périphériques de type bloc. Dans les distributions &#039;&#039;Debian&#039;&#039;, il est fournit par le paquet &amp;lt;code&amp;gt;cryptsetup&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Mise en œuvre=&lt;br /&gt;
Voici un exemple de mise en œuvre de &#039;&#039;cryptsetup&#039;&#039; décrivant la création, le montage et le démontage d&#039;un volume chiffré.&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il est possible de réaliser un test de performance des différents algorithmes supportés via la commande &amp;lt;code&amp;gt;cryptsetup benchmark&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Chiffrement du disque &#039;&#039;sdc&#039;&#039; dans son intégralité (écrase tout dessus). Taper &#039;&#039;&#039;YES&#039;&#039;&#039; (en majuscule) et entrer le mot de passe de déchiffrement 2 fois&lt;br /&gt;
 cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Ouvrir le volume (ça fait un volume &amp;quot;montable&amp;quot; dans &#039;&#039;/dev/mapper/sdc_crypt&#039;&#039;)&lt;br /&gt;
 cryptsetup luksOpen /dev/sdc sdc_crypt&lt;br /&gt;
&lt;br /&gt;
Créer le système de fichier&lt;br /&gt;
 mkfs.ext4 /dev/mapper/sdc_crypt&lt;br /&gt;
&lt;br /&gt;
Monter le volume&lt;br /&gt;
 mount /dev/mapper/sdc_crypt /mnt&lt;br /&gt;
&lt;br /&gt;
Démonter le volume&lt;br /&gt;
 umount /mnt&lt;br /&gt;
&lt;br /&gt;
Fermer le volume&lt;br /&gt;
 cryptsetup luksClose sdc_crypt&lt;br /&gt;
&lt;br /&gt;
Afficher les détails du volume (type de chiffrement notamment)&lt;br /&gt;
 cryptsetup luksDump /dev/sdc&lt;br /&gt;
&lt;br /&gt;
=Gestion des clef=&lt;br /&gt;
&#039;&#039;Cryptsetup&#039;&#039; n&#039;utilise pas réellement le mot de passe que vous avez fourni pour chiffrer le volume. Il génère lui même une clé qu&#039;il va chiffrer avec l&#039;un des moyens que vous lui fournissez (mot de passe ou fichier de clef). Ceci permet de pouvoir non seulement changer de mot de passe sans re-chiffrer tout le volume (seul la clef maitraisse l&#039;est), mais également d&#039;en avoir plusieurs.&lt;br /&gt;
&lt;br /&gt;
==Changement de clef==&lt;br /&gt;
 cryptsetup luksChangeKey /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Si vous avez plusieurs clefs d&#039;enregistrées, vous pouvez sélectionner le crénau contenant celle à changer en ajoutant le paramètre suivant&lt;br /&gt;
 cryptsetup luksChangeKey /dev/sdc -S 2&lt;br /&gt;
&lt;br /&gt;
Les créneaux sont visualisables avec la commande&lt;br /&gt;
 cryptsetup luksDump /dev/sdc&lt;br /&gt;
&lt;br /&gt;
==Ajout d&#039;une clef==&lt;br /&gt;
 cryptsetup luksAddKey /dev/sdc&lt;br /&gt;
&lt;br /&gt;
==Suppression d&#039;une clef==&lt;br /&gt;
 cryptsetup luksRemoveKey /dev/sdc&lt;br /&gt;
&lt;br /&gt;
==Tester une clef==&lt;br /&gt;
Lorsqu&#039;un volume est en cours d&#039;utilisation, il peut arriver que vous soyez dans le doute concernant la clé utilisée pour le dé-chiffrer. Afin de la tester sans fermer le volume (et donc d&#039;être dans l&#039;incapacité de récupérer les données si vous avez perdu la clef), il est possible de copier la partie &#039;&#039;Luks&#039;&#039; dans un fichier et d&#039;effectuer les tests dessus.&lt;br /&gt;
&lt;br /&gt;
 head -c 128M /dev/sda2 &amp;gt; /tmp/sda2.img&lt;br /&gt;
 cryptsetup luksOpen /tmp/sda2.img testClef&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;utiliser un fichier de clef si vous en avez [[#Déchiffrement_automatique|ajouté-un]] dans votre volume&lt;br /&gt;
 cryptsetup luksOpen /tmp/sda2.img testClef --key-file /root/fichier_clef.luks&lt;br /&gt;
&lt;br /&gt;
Si le volume se déverrouille c&#039;est que vous avez renseigné la bonne clef. Vous pouvez le fermer&lt;br /&gt;
 cryptsetup luksClose testClef&lt;br /&gt;
&lt;br /&gt;
{{astuce|Vous pouvez afficher les algorithmes utilisés pour un volume avec la commande &amp;lt;code&amp;gt;file -sL /tmp/sda2.img&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://www.maketecheasier.com/change-luks-encryption-passphrase/&lt;br /&gt;
* https://unix.stackexchange.com/questions/590849/how-can-i-verify-a-luks-master-key&lt;br /&gt;
* https://www.cyberciti.biz/hardware/cryptsetup-add-enable-luks-disk-encryption-keyfile-linux/&lt;br /&gt;
&lt;br /&gt;
=Fichier crypttab=&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;/etc/crypttab&amp;lt;/code&amp;gt; est aux volumes chiffrés ce qu&#039;est son homologue [[fstab]] aux systèmes de fichiers (il en partage d&#039;ailleurs les mêmes [[fstab#Options de montages|options]]). Il est lu au démarrage par &#039;&#039;Cryptsetup&#039;&#039; afin de déchiffrer les volumes qui y sont renseignés (un par ligne). Si une phrase de passe est demandée, l&#039;utilisateur sera invité à la rentrée, si c&#039;est une clef sous [[#Déchiffrement automatique|forme de fichier]], celui-ci sera exploité depuis l&#039;emplacement précisé dans la ligne.&lt;br /&gt;
&lt;br /&gt;
Une entrée &#039;&#039;crypttab&#039;&#039; comporte 4 champs :&lt;br /&gt;
 &amp;lt;nom_du_volume&amp;gt; &amp;lt;périphérique_bloc&amp;gt; &amp;lt;fichier_de_clef&amp;gt; &amp;lt;options&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;nom_du_volume&amp;gt;&#039;&#039;&#039; : correspond au nom qui sera donnée au volume une fois déchiffré et qui sera disponible dans &amp;lt;code&amp;gt;/dev/mapper/&amp;lt;nom_du_volume&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;périphérique_bloc&amp;gt;&#039;&#039;&#039; : chemin ou &#039;&#039;UUID&#039;&#039; du périphérique à déchiffrer (même syntaxe que pour &#039;&#039;fstab&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;fichier_de_clef&amp;gt;&#039;&#039;&#039; : chemin du fichier de clef. Mettre &#039;&#039;&#039;none&#039;&#039;&#039; si une identification par mot de passe est préférée&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;options&amp;gt;&#039;&#039;&#039; : prends le paramètre obligatoire &#039;&#039;&#039;luks&#039;&#039;&#039; suivit de divers options facultatives identiques au &#039;&#039;fstab&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Déchiffrement automatique=&lt;br /&gt;
Si vous avez plusieurs volumes chiffrés, il est possible d&#039;utiliser des fichiers de clef présent sur le premier pour déchiffrer les autres. Nous allons partir du principe que mon premier disque de démarrage (chiffré) est &#039;&#039;vda&#039;&#039; et que le second est &#039;&#039;vdb&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Création du répertoire de travail&lt;br /&gt;
 mkdir /root/luks&lt;br /&gt;
&lt;br /&gt;
Création du fichier de clé&lt;br /&gt;
 dd if=/dev/urandom of=/root/luks/fichier_clef.luks bs=4096 count=1&lt;br /&gt;
&lt;br /&gt;
Attribution des droits&lt;br /&gt;
 chmod 500 luks/&lt;br /&gt;
 chmod 400 luks/fichier_clef&lt;br /&gt;
&lt;br /&gt;
Un volume &#039;&#039;LUKS&#039;&#039; peut gérer plusieurs &#039;&#039;mots de passes/clefs&#039;&#039;, nous allons donc ajouter celle que nous avons créé à notre deuxième disque&lt;br /&gt;
 cryptsetup luksAddKey /dev/vdb /root/luks/fichier_clef.luks&lt;br /&gt;
&lt;br /&gt;
Récupération de l{{&#039;}}&#039;&#039;UUID&#039;&#039; de &#039;&#039;vdb&#039;&#039;&lt;br /&gt;
 export UUID_LUKS=$(blkid -s UUID -o value /dev/vdb)&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;une entrée dans le fichier de déchiffrement&lt;br /&gt;
 echo &amp;quot;vbd_luks UUID=${UUID_LUKS} /root/luks/fichier_clef.luks luks,discard&amp;quot; &amp;gt;&amp;gt; /etc/crypttab&lt;br /&gt;
&lt;br /&gt;
Le paramètre &amp;lt;code&amp;gt;discard&amp;lt;/code&amp;gt; permet d&#039;autoriser les commandes &#039;&#039;TRIM&#039;&#039; pour les &#039;&#039;SSD&#039;&#039;. Cela n&#039;a pas de sens si vous utilisez des disques durs. Si votre disque est amovible (et donc potentiellement absent lors du démarrage), il peut être judicieux d&#039;ajouter l&#039;option &amp;lt;code&amp;gt;nofail&amp;lt;/code&amp;gt; qui permettra au système de ne pas se bloquer s&#039;il ne trouve pas le périphérique. La commande &amp;lt;code&amp;gt;cryptdisks_start &amp;lt;nom_du_volume&amp;gt;&amp;lt;/code&amp;gt; devra alors être utilisée pour déchiffrer le volume.&lt;br /&gt;
&lt;br /&gt;
{{info|Le fichier &amp;lt;code&amp;gt;/etc/crypttab&amp;lt;/code&amp;gt; va initier un déchiffrement des volumes qui y sont indiqués au démarrage. Si le volume demande un mot de passe, un prompt sera proposé à l&#039;utilisateur (c&#039;est ce que fait la première ligne du fichier pour votre disque principal). Si la méthode d&#039;accès est un fichier de clef, &#039;&#039;Cryptsetup&#039;&#039; va le soumettre au volume et si il correspond à celui de sa bibliothèque, il le déchiffre.}}&lt;br /&gt;
&lt;br /&gt;
À ce stade, le volume se déchiffrera automatiquement au démarrage. Vous pouvez utiliser la [https://serverfault.com/questions/714605/can-cryptsetup-read-mappings-from-etc-crypttab commande] &amp;lt;code&amp;gt;cryptdisks_start vbd_luks&amp;lt;/code&amp;gt; pour parcourir la ligne du fichier &#039;&#039;crypttab&#039;&#039; et en appliquer les directives (c&#039;est ce que fait &#039;&#039;init&#039;&#039; au démarrage) afin de tester votre configuration immédiatement.&lt;br /&gt;
&lt;br /&gt;
Il est également possible d’enchaîner avec un [[fstab|montage automatique]] du système de fichier via le &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Déchiffrer manuellement le volume &#039;&#039;LUKS&#039;&#039;&lt;br /&gt;
 cryptsetup luksOpen /dev/vdb vbd_luks&lt;br /&gt;
&lt;br /&gt;
Formater la partition&lt;br /&gt;
 mkfs.btrfs -n 32K /dev/mapper/vbd_luks&lt;br /&gt;
&lt;br /&gt;
Ajouter une une entrée dans le &#039;&#039;fstab&#039;&#039;&lt;br /&gt;
 echo &amp;quot;/dev/mapper/vbd_luks /mnt btrfs rw,relatime,space_cache,subvolid=5,subvol=/ 0 0&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
Au redémarrage, le volume sera automatiquement déchiffré et monté dans &amp;lt;code&amp;gt;/mnt/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://www.howtoforge.com/automatically-unlock-luks-encrypted-drives-with-a-keyfile&lt;br /&gt;
&lt;br /&gt;
=Bitlocker=&lt;br /&gt;
&#039;&#039;Cryptsetup&#039;&#039; est compatible avec le chiffrement des disques sur les systèmes &#039;&#039;Microsoft Windows&#039;&#039; nommé [https://support.microsoft.com/fr-fr/windows/chiffrement-d-appareils-dans-windows-ad5dcf4b-dbe0-2331-228f-7925c2a3012d Bitlocker].&lt;br /&gt;
&lt;br /&gt;
Lors de la création d&#039;un tel volume sous &#039;&#039;Windows&#039;&#039;, aucune clé de chiffrement n&#039;est demandée à l&#039;utilisateur car le système en génère une et la stock dans le &#039;&#039;TPM&#039;&#039; de l&#039;ordinateur (j&#039;imagine qu&#039;une clé est demandée uniquement si ce composant matériel est absent). Un secret de récupération est alors fourni sous forme de fichier texte (&amp;lt;code&amp;gt;Clé de récupération BitLocker XXXXXXXX-....txt&amp;lt;/code&amp;gt;. Il est très important de garder la clé qu&#039;il contient car c&#039;est cette dernière qui permettra de déverrouiller le disque chiffré via un autre système d&#039;exploitation (&amp;lt;code&amp;gt;/dev/nvme0n1p3&amp;lt;/code&amp;gt; et &#039;&#039;Debian 11&#039;&#039; dans l&#039;exemple suivant).&lt;br /&gt;
&lt;br /&gt;
L&#039;intérêt d&#039;une telle manipulation est évident : être capable de récupérer les données du disque système si &#039;&#039;Windows&#039;&#039; refuse de démarrer.&lt;br /&gt;
&lt;br /&gt;
Déchiffrer le disque&lt;br /&gt;
 cryptsetup open --type=bitlk /dev/nvme0n1p3 disque_windows&lt;br /&gt;
&lt;br /&gt;
Monter le disque&lt;br /&gt;
 mount -o ro /dev/mapper/disque_windows /mnt&lt;br /&gt;
&lt;br /&gt;
Les commandes de démontage de re-verrouillage du disque sont identiques à ce qui a déjà été traité.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://superuser.com/questions/376533/how-to-access-a-bitlocker-encrypted-drive-in-linux&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cryptsetup&amp;diff=1518</id>
		<title>Cryptsetup</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cryptsetup&amp;diff=1518"/>
		<updated>2024-04-19T22:45:22Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Bitlocker&amp;quot; + remplacement des balise &amp;quot;source&amp;quot; obsolètes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:chiffrement]]&lt;br /&gt;
[[Category:périphériques bloc]]&lt;br /&gt;
&#039;&#039;Cryptsetup&#039;&#039; est l&#039;implémentation du standard &#039;&#039;LUKS&#039;&#039; sur la plupart des distributions &#039;&#039;Linux&#039;&#039;. Il permet de chiffrer des périphériques de type bloc. Dans les distributions &#039;&#039;Debian&#039;&#039;, il est fournit par le paquet &amp;lt;code&amp;gt;cryptsetup&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Mise en œuvre=&lt;br /&gt;
Voici un exemple de mise en œuvre de &#039;&#039;cryptsetup&#039;&#039; décrivant la création, le montage et le démontage d&#039;un volume chiffré.&lt;br /&gt;
&lt;br /&gt;
{{astuce|Il est possible de réaliser un test de performance des différents algorithmes supportés via la commande &amp;lt;code&amp;gt;cryptsetup benchmark&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
Chiffrement du disque &#039;&#039;sdc&#039;&#039; dans son intégralité (écrase tout dessus). Taper &#039;&#039;&#039;YES&#039;&#039;&#039; (en majuscule) et entrer le mot de passe de déchiffrement 2 fois&lt;br /&gt;
 cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Ouvrir le volume (ça fait un volume &amp;quot;montable&amp;quot; dans &#039;&#039;/dev/mapper/sdc_crypt&#039;&#039;)&lt;br /&gt;
 cryptsetup luksOpen /dev/sdc sdc_crypt&lt;br /&gt;
&lt;br /&gt;
Créer le système de fichier&lt;br /&gt;
 mkfs.ext4 /dev/mapper/sdc_crypt&lt;br /&gt;
&lt;br /&gt;
Monter le volume&lt;br /&gt;
 mount /dev/mapper/sdc_crypt /mnt&lt;br /&gt;
&lt;br /&gt;
Démonter le volume&lt;br /&gt;
 umount /mnt&lt;br /&gt;
&lt;br /&gt;
Fermer le volume&lt;br /&gt;
 cryptsetup luksClose sdc_crypt&lt;br /&gt;
&lt;br /&gt;
Afficher les détails du volume (type de chiffrement notamment)&lt;br /&gt;
 cryptsetup luksDump /dev/sdc&lt;br /&gt;
&lt;br /&gt;
=Gestion des clef=&lt;br /&gt;
&#039;&#039;Cryptsetup&#039;&#039; n&#039;utilise pas réellement le mot de passe que vous avez fourni pour chiffrer le volume. Il génère lui même une clé qu&#039;il va chiffrer avec l&#039;un des moyens que vous lui fournissez (mot de passe ou fichier de clef). Ceci permet de pouvoir non seulement changer de mot de passe sans re-chiffrer tout le volume (seul la clef maitraisse l&#039;est), mais également d&#039;en avoir plusieurs.&lt;br /&gt;
&lt;br /&gt;
==Changement de clef==&lt;br /&gt;
 cryptsetup luksChangeKey /dev/sdc&lt;br /&gt;
&lt;br /&gt;
Si vous avez plusieurs clefs d&#039;enregistrées, vous pouvez sélectionner le crénau contenant celle à changer en ajoutant le paramètre suivant&lt;br /&gt;
 cryptsetup luksChangeKey /dev/sdc -S 2&lt;br /&gt;
&lt;br /&gt;
Les créneaux sont visualisables avec la commande&lt;br /&gt;
 cryptsetup luksDump /dev/sdc&lt;br /&gt;
&lt;br /&gt;
==Ajout d&#039;une clef==&lt;br /&gt;
 cryptsetup luksAddKey /dev/sdc&lt;br /&gt;
&lt;br /&gt;
==Suppression d&#039;une clef==&lt;br /&gt;
 cryptsetup luksRemoveKey /dev/sdc&lt;br /&gt;
&lt;br /&gt;
==Tester une clef==&lt;br /&gt;
Lorsqu&#039;un volume est en cours d&#039;utilisation, il peut arriver que vous soyez dans le doute concernant la clé utilisée pour le dé-chiffrer. Afin de la tester sans fermer le volume (et donc d&#039;être dans l&#039;incapacité de récupérer les données si vous avez perdu la clef), il est possible de copier la partie &#039;&#039;Luks&#039;&#039; dans un fichier et d&#039;effectuer les tests dessus.&lt;br /&gt;
&lt;br /&gt;
 head -c 128M /dev/sda2 &amp;gt; /tmp/sda2.img&lt;br /&gt;
 cryptsetup luksOpen /tmp/sda2.img testClef&lt;br /&gt;
&lt;br /&gt;
Il est également possible d&#039;utiliser un fichier de clef si vous en avez [[#Déchiffrement_automatique|ajouté-un]] dans votre volume&lt;br /&gt;
 cryptsetup luksOpen /tmp/sda2.img testClef --key-file /root/fichier_clef.luks&lt;br /&gt;
&lt;br /&gt;
Si le volume se déverrouille c&#039;est que vous avez renseigné la bonne clef. Vous pouvez le fermer&lt;br /&gt;
 cryptsetup luksClose testClef&lt;br /&gt;
&lt;br /&gt;
{{astuce|Vous pouvez afficher les algorithmes utilisés pour un volume avec la commande &amp;lt;code&amp;gt;file -sL /tmp/sda2.img&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://www.maketecheasier.com/change-luks-encryption-passphrase/&lt;br /&gt;
* https://unix.stackexchange.com/questions/590849/how-can-i-verify-a-luks-master-key&lt;br /&gt;
* https://www.cyberciti.biz/hardware/cryptsetup-add-enable-luks-disk-encryption-keyfile-linux/&lt;br /&gt;
&lt;br /&gt;
=Fichier crypttab=&lt;br /&gt;
Le fichier &amp;lt;code&amp;gt;/etc/crypttab&amp;lt;/code&amp;gt; est aux volumes chiffrés ce qu&#039;est son homologue [[fstab]] aux systèmes de fichiers (il en partage d&#039;ailleurs les mêmes [[fstab#Options de montages|options]]). Il est lu au démarrage par &#039;&#039;Cryptsetup&#039;&#039; afin de déchiffrer les volumes qui y sont renseignés (un par ligne). Si une phrase de passe est demandée, l&#039;utilisateur sera invité à la rentrée, si c&#039;est une clef sous [[#Déchiffrement automatique|forme de fichier]], celui-ci sera exploité depuis l&#039;emplacement précisé dans la ligne.&lt;br /&gt;
&lt;br /&gt;
Une entrée &#039;&#039;crypttab&#039;&#039; comporte 4 champs :&lt;br /&gt;
 &amp;lt;nom_du_volume&amp;gt; &amp;lt;périphérique_bloc&amp;gt; &amp;lt;fichier_de_clef&amp;gt; &amp;lt;options&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explications :&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;nom_du_volume&amp;gt;&#039;&#039;&#039; : correspond au nom qui sera donnée au volume une fois déchiffré et qui sera disponible dans &amp;lt;code&amp;gt;/dev/mapper/&amp;lt;nom_du_volume&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;périphérique_bloc&amp;gt;&#039;&#039;&#039; : chemin ou &#039;&#039;UUID&#039;&#039; du périphérique à déchiffrer (même syntaxe que pour &#039;&#039;fstab&#039;&#039;)&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;fichier_de_clef&amp;gt;&#039;&#039;&#039; : chemin du fichier de clef. Mettre &#039;&#039;&#039;none&#039;&#039;&#039; si une identification par mot de passe est préférée&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;options&amp;gt;&#039;&#039;&#039; : prends le paramètre obligatoire &#039;&#039;&#039;luks&#039;&#039;&#039; suivit de divers options facultatives identiques au &#039;&#039;fstab&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Déchiffrement automatique=&lt;br /&gt;
Si vous avez plusieurs volumes chiffrés, il est possible d&#039;utiliser des fichiers de clef présent sur le premier pour déchiffrer les autres. Nous allons partir du principe que mon premier disque de démarrage (chiffré) est &#039;&#039;vda&#039;&#039; et que le second est &#039;&#039;vdb&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Création du répertoire de travail&lt;br /&gt;
 mkdir /root/luks&lt;br /&gt;
&lt;br /&gt;
Création du fichier de clé&lt;br /&gt;
 dd if=/dev/urandom of=/root/luks/fichier_clef.luks bs=4096 count=1&lt;br /&gt;
&lt;br /&gt;
Attribution des droits&lt;br /&gt;
 chmod 500 luks/&lt;br /&gt;
 chmod 400 luks/fichier_clef&lt;br /&gt;
&lt;br /&gt;
Un volume &#039;&#039;LUKS&#039;&#039; peut gérer plusieurs &#039;&#039;mots de passes/clefs&#039;&#039;, nous allons donc ajouter celle que nous avons créé à notre deuxième disque&lt;br /&gt;
 cryptsetup luksAddKey /dev/vdb /root/luks/fichier_clef.luks&lt;br /&gt;
&lt;br /&gt;
Récupération de l{{&#039;}}&#039;&#039;UUID&#039;&#039; de &#039;&#039;vdb&#039;&#039;&lt;br /&gt;
 export UUID_LUKS=$(blkid -s UUID -o value /dev/vdb)&lt;br /&gt;
&lt;br /&gt;
Ajout d&#039;une entrée dans le fichier de déchiffrement&lt;br /&gt;
 echo &amp;quot;vbd_luks UUID=${UUID_LUKS} /root/luks/fichier_clef.luks luks,discard&amp;quot; &amp;gt;&amp;gt; /etc/crypttab&lt;br /&gt;
&lt;br /&gt;
Le paramètre &amp;lt;code&amp;gt;discard&amp;lt;/code&amp;gt; permet d&#039;autoriser les commandes &#039;&#039;TRIM&#039;&#039; pour les &#039;&#039;SSD&#039;&#039;. Cela n&#039;a pas de sens si vous utilisez des disques durs. Si votre disque est amovible (et donc potentiellement absent lors du démarrage), il peut être judicieux d&#039;ajouter l&#039;option &amp;lt;code&amp;gt;nofail&amp;lt;/code&amp;gt; qui permettra au système de ne pas se bloquer s&#039;il ne trouve pas le périphérique. La commande &amp;lt;code&amp;gt;cryptdisks_start &amp;lt;nom_du_volume&amp;gt;&amp;lt;/code&amp;gt; devra alors être utilisée pour déchiffrer le volume.&lt;br /&gt;
&lt;br /&gt;
{{info|Le fichier &amp;lt;code&amp;gt;/etc/crypttab&amp;lt;/code&amp;gt; va initier un déchiffrement des volumes qui y sont indiqués au démarrage. Si le volume demande un mot de passe, un prompt sera proposé à l&#039;utilisateur (c&#039;est ce que fait la première ligne du fichier pour votre disque principal). Si la méthode d&#039;accès est un fichier de clef, &#039;&#039;Cryptsetup&#039;&#039; va le soumettre au volume et si il correspond à celui de sa bibliothèque, il le déchiffre.}}&lt;br /&gt;
&lt;br /&gt;
À ce stade, le volume se déchiffrera automatiquement au démarrage. Vous pouvez utiliser la [https://serverfault.com/questions/714605/can-cryptsetup-read-mappings-from-etc-crypttab commande] &amp;lt;code&amp;gt;cryptdisks_start vbd_luks&amp;lt;/code&amp;gt; pour parcourir la ligne du fichier &#039;&#039;crypttab&#039;&#039; et en appliquer les directives (c&#039;est ce que fait &#039;&#039;init&#039;&#039; au démarrage) afin de tester votre configuration immédiatement.&lt;br /&gt;
&lt;br /&gt;
Il est également possible d’enchaîner avec un [[fstab|montage automatique]] du système de fichier via le &amp;lt;code&amp;gt;/etc/fstab&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Déchiffrer manuellement le volume &#039;&#039;LUKS&#039;&#039;&lt;br /&gt;
 cryptsetup luksOpen /dev/vdb vbd_luks&lt;br /&gt;
&lt;br /&gt;
Formater la partition&lt;br /&gt;
 mkfs.btrfs -n 32K /dev/mapper/vbd_luks&lt;br /&gt;
&lt;br /&gt;
Ajouter une une entrée dans le &#039;&#039;fstab&#039;&#039;&lt;br /&gt;
 echo &amp;quot;/dev/mapper/vbd_luks /mnt btrfs rw,relatime,space_cache,subvolid=5,subvol=/ 0 0&amp;quot; &amp;gt;&amp;gt; /etc/fstab&lt;br /&gt;
&lt;br /&gt;
Au redémarrage, le volume sera automatiquement déchiffré et monté dans &amp;lt;code&amp;gt;/mnt/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://www.howtoforge.com/automatically-unlock-luks-encrypted-drives-with-a-keyfile&lt;br /&gt;
&lt;br /&gt;
=Bitlocker=&lt;br /&gt;
&#039;&#039;Cryptsetup&#039;&#039; est compatible avec le chiffrement de disques des systèmes &#039;&#039;Windows&#039;&#039; nommé [https://support.microsoft.com/fr-fr/windows/chiffrement-d-appareils-dans-windows-ad5dcf4b-dbe0-2331-228f-7925c2a3012d Bitlocker].&lt;br /&gt;
&lt;br /&gt;
Lors de la création d&#039;un tel volume sous &#039;&#039;Windows&#039;&#039;, aucune clé de chiffrement n&#039;est demandée à l&#039;utilisateur car le système en génère une et la stock dans le &#039;&#039;TPM&#039;&#039; de l&#039;ordinateur (j&#039;imagine qu&#039;une clé est demandée uniquement si ce composant matériel est absent). Une clé de récupération est alors fournie sous forme de fichier texte. Il est très important de garder la clé qu&#039;il contient car c&#039;est cette dernière qui permettra de déverrouiller le disque chiffré via un autre système d&#039;exploitation (&amp;lt;code&amp;gt;/dev/nvme0n1p3&amp;lt;/code&amp;gt; et &#039;&#039;Debian 11&#039;&#039; dans l&#039;exemple suivant).&lt;br /&gt;
&lt;br /&gt;
L&#039;intérêt d&#039;une telle manipulation est évident : être capable de récupérer les données du disque système si &#039;&#039;Windows&#039;&#039; refuse de démarrer.&lt;br /&gt;
&lt;br /&gt;
Déchiffrer le disque&lt;br /&gt;
 cryptsetup open --type=bitlk /dev/nvme0n1p3 disque_windows&lt;br /&gt;
&lt;br /&gt;
Monter le disque&lt;br /&gt;
 mount -o ro /dev/mapper/disque_windows /mnt&lt;br /&gt;
&lt;br /&gt;
Les commande de démontage de re-verrouillages du disque sont identiques à ce qui a déjà été traité.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://superuser.com/questions/376533/how-to-access-a-bitlocker-encrypted-drive-in-linux&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Matrix_synapse&amp;diff=1517</id>
		<title>Matrix synapse</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Matrix_synapse&amp;diff=1517"/>
		<updated>2024-03-24T11:17:19Z</updated>

		<summary type="html">&lt;p&gt;Ycharbi : Ajout de la section &amp;quot;Réinitialisation de mot de passe&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Service_communication]]&lt;br /&gt;
&lt;br /&gt;
{{chantier}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/matrix-org/synapse/ Synapse] est une implémentation serveur libre (licence &#039;&#039;Apache 2.0&#039;&#039;) du protocole [https://fr.wikipedia.org/wiki/Matrix_(protocole) Matrix] écrit en &#039;&#039;Python&#039;&#039;. Le projet, initié en 2014, est maintenu par la fondation [https://matrix.org Matrix.org] et passe en version stable (&#039;&#039;1.0.0&#039;&#039;) en 2019. Il est disponible dans les dépôts &#039;&#039;Bullseye-Backports&#039;&#039; et &#039;&#039;Testing&#039;&#039; de &#039;&#039;Debian&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il permet la communication électronique textuelle, orale et vidéo entre plusieurs interlocuteurs au travers de réseaux &#039;&#039;IP&#039;&#039;. Il propose en outre la possibilité d&#039;envoyer des fichiers et de partager les écrans des correspondants. Une attention toute particulière est porté sur la sécurité des échanges avec un système de chiffrement de bout en bout obligatoire, tant entre clients (pair à pair) que lors de transactions avec le serveur (client/serveur).&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire de permettre la communication vers les ports suivants :&lt;br /&gt;
* Fédération &#039;&#039;Synapse&#039;&#039; : 8448 &#039;&#039;TCP&#039;&#039;&lt;br /&gt;
* &#039;&#039;TURN&#039;&#039; : 3478 &#039;&#039;TCP/UDP&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Service Synapse=&lt;br /&gt;
==Installation==&lt;br /&gt;
Ajout des dépôts &#039;&#039;Backports&#039;&#039; pour &#039;&#039;Debian 11&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://ftp2.fr.debian.org/debian bullseye-backports main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
apt update&lt;br /&gt;
apt install --no-install-recommends -t bullseye-backports matrix-synapse&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réponse aux questions n&#039;a pas d&#039;importance car les fichiers de configuration seront re-générés plus loin.&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Le domaine utilisé pour l&#039;exemple est le suivant&lt;br /&gt;
 export DNS_SYNAPSE=synapse.exemple.fr&lt;br /&gt;
&lt;br /&gt;
Génération des fichiers configuration et de la clé de signature&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
synapse_generate_config --server-name ${DNS_SYNAPSE} --config-dir /etc/matrix-synapse --data-dir /etc/matrix-synapse/ --report-stats no --generate-secrets -o /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
synapse_generate_log_config -o /etc/matrix-synapse/${DNS_SYNAPSE}.log.config&lt;br /&gt;
synapse_generate_signing_key -o /etc/matrix-synapse/${DNS_SYNAPSE}.signing.key&lt;br /&gt;
&lt;br /&gt;
echo &#039;report_stats: false&#039; &amp;gt; /etc/matrix-synapse/conf.d/report_stats.yaml&lt;br /&gt;
echo &amp;quot;server_name: \&amp;quot;${DNS_SYNAPSE}\&amp;quot;&amp;quot; &amp;gt; /etc/matrix-synapse/conf.d/server_name.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Écouter les requêtes clientes sur toutes les adresses &#039;&#039;IP&#039;&#039; du serveur&lt;br /&gt;
 sed -i &amp;quot;s/bind_addresses: \[.*\]/bind_addresses: [&#039;0.0.0.0&#039;]/g&amp;quot; /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
 systemctl restart matrix-synapse.service&lt;br /&gt;
&lt;br /&gt;
Vous devriez voir un port 8008 &#039;&#039;TCP&#039;&#039; en écoute avec un &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;ss -ltn&amp;lt;/syntaxhighlight&amp;gt;. Celui-ci permet aux outils d&#039;administrations d&#039;utiliser les &#039;&#039;API&#039;&#039; de &#039;&#039;Synapse&#039;&#039; pour interagir avec lui.&lt;br /&gt;
&lt;br /&gt;
==Gestion des utilisateurs==&lt;br /&gt;
Actuellement, seule la création d&#039;un utilisateur est possible avec les outils fournis. Leur suppression ou modification (ou même leur listage) n&#039;est pas supporté (oui c&#039;est aberrant). Ce sujet est traité dans ce [https://github.com/matrix-org/synapse/issues/1707 ticket].&lt;br /&gt;
&lt;br /&gt;
La syntaxe d&#039;un utilisateurs dans les différents clients &#039;&#039;Matrix&#039;&#039; est &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;@michel:synapse.exemple.fr&amp;lt;/syntaxhighlight&amp;gt;. Ceci est utile pour en ajouter comme contact depuis un logiciel client (pourquoi faire simple ?).&lt;br /&gt;
&lt;br /&gt;
===Création d&#039;un utilisateur===&lt;br /&gt;
 synapse_register_new_matrix_user http://127.0.0.1:8008 -c /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
&lt;br /&gt;
===Source de la section===&lt;br /&gt;
* https://matrix-org.github.io/synapse/latest/setup/installation.html&lt;br /&gt;
&lt;br /&gt;
=Service TURN=&lt;br /&gt;
Dans la mesure où le vrai monde est peuplé de &#039;&#039;NAT&#039;&#039; à profusion et qu&#039;aucun protocole de communication en temps réel ne sais gérer cette situation correctement (la raison m&#039;échappe toujours...), il est indispensable d&#039;employer un service mitigeant cette contrainte. Ceci est le rôle des protocoles [https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT TURN]/[https://en.wikipedia.org/wiki/STUN STUN] implémenté dans le logiciel [https://github.com/coturn/coturn Coturn].&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Le paquet est disponible dans les dépôts &#039;&#039;Sable&#039;&#039;&lt;br /&gt;
 apt install --no-install-recommends coturn&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Les informations spécifiques à l&#039;instance de cette documentations seront les suivantes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
export DNS_COTURN=turn.exemple.fr&lt;br /&gt;
export SECRET_COTURN=$(cat /dev/urandom | tr -dc &#039;a-zA-Z0-9&#039; | fold -w 64 | head -n 1)&lt;br /&gt;
export IP_EXTERNE=$(wget -qO - ifconfig.co)&lt;br /&gt;
export IP_INTERNE=192.168.0.100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration du service se composera comme suit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt; /etc/turnserver.conf&lt;br /&gt;
use-auth-secret&lt;br /&gt;
static-auth-secret=${SECRET_COTURN}&lt;br /&gt;
realm=${DNS_COTURN}&lt;br /&gt;
&lt;br /&gt;
# Le trafic VoIP est entièrement UDP. Il n&#039;y a aucune raison de laisser les utilisateurs se connecter à des points d&#039;extrémité TCP arbitraires via le relais&lt;br /&gt;
no-tcp-relay&lt;br /&gt;
&lt;br /&gt;
# Ne laissez pas le relais essayer de se connecter à des plages d&#039;adresses IP privées au sein de votre réseau (s&#039;il y en a)&lt;br /&gt;
# Étant donné que le serveur tournant est probablement derrière votre pare-feu, n&#039;oubliez pas d&#039;inclure également toutes les adresses IP publiques privilégiées&lt;br /&gt;
denied-peer-ip=10.0.0.0-10.255.255.255&lt;br /&gt;
denied-peer-ip=192.168.0.0-192.168.255.255&lt;br /&gt;
denied-peer-ip=172.16.0.0-172.31.255.255&lt;br /&gt;
&lt;br /&gt;
# À recommandé, blocage de pairs locaux supplémentaires, afin de limiter l&#039;accès externe aux services internes&lt;br /&gt;
# https://www.rtcsec.com/article/slack-webrtc-turn-compromise-and-bug-bounty/#how-to-fix-an-open-turn-relay-to-address-this-vulnerability&lt;br /&gt;
no-multicast-peers&lt;br /&gt;
denied-peer-ip=0.0.0.0-0.255.255.255&lt;br /&gt;
denied-peer-ip=100.64.0.0-100.127.255.255&lt;br /&gt;
denied-peer-ip=127.0.0.0-127.255.255.255&lt;br /&gt;
denied-peer-ip=169.254.0.0-169.254.255.255&lt;br /&gt;
denied-peer-ip=192.0.0.0-192.0.0.255&lt;br /&gt;
denied-peer-ip=192.0.2.0-192.0.2.255&lt;br /&gt;
denied-peer-ip=192.88.99.0-192.88.99.255&lt;br /&gt;
denied-peer-ip=198.18.0.0-198.19.255.255&lt;br /&gt;
denied-peer-ip=198.51.100.0-198.51.100.255&lt;br /&gt;
denied-peer-ip=203.0.113.0-203.0.113.255&lt;br /&gt;
denied-peer-ip=240.0.0.0-255.255.255.255&lt;br /&gt;
&lt;br /&gt;
# Cas particulier : le serveur TURN lui-même pour que les flux client-&amp;gt;TURN-&amp;gt;TURN-&amp;gt;client fonctionnent&lt;br /&gt;
# Il doit s&#039;agir de l&#039;une des adresses IP d&#039;écoute du serveur TURN&lt;br /&gt;
allowed-peer-ip=${IP_INTERNE}&lt;br /&gt;
&lt;br /&gt;
# Examinez si vous souhaitez limiter le quota de flux relayés par utilisateur (ou total) pour éviter les risques de DoS&lt;br /&gt;
user-quota=12 # 4 flux par appel vidéo, donc 12 flux = 3 appels relayés simultanés par utilisateur&lt;br /&gt;
total-quota=1200&lt;br /&gt;
&lt;br /&gt;
# Certificats TLS, y compris les certificats intermédiaires&lt;br /&gt;
# Pour les certificats Let&#039;s Encrypt, utilisez &#039;fullchain.pem&#039; ici&lt;br /&gt;
cert=/srv/tls/corturn.pem&lt;br /&gt;
&lt;br /&gt;
# Fichier TLS de clé privée&lt;br /&gt;
pkey=/srv/tls/corturn.key&lt;br /&gt;
&lt;br /&gt;
# Assurez-vous que les lignes de configuration qui désactivent TLS/DTLS sont commentées ou supprimées.&lt;br /&gt;
#no-tls&lt;br /&gt;
#no-dtls&lt;br /&gt;
&lt;br /&gt;
external-ip=${IP_EXTERNE}&lt;br /&gt;
listening-ip=${IP_INTERNE}&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Support du TLS===&lt;br /&gt;
Créer le répertoire d&#039;accueil des éléments de chiffrement&lt;br /&gt;
 mkdir /srv/tls&lt;br /&gt;
&lt;br /&gt;
Ces éléments peuvent être issus d&#039;une autorité de certification publique comme [[Letsencrypt|Letsencrypt]] (mettre la clé et le certificat &#039;&#039;&#039;chaînés&#039;&#039;&#039;) ou privée, via [[Openssl|OpenSSL]] par exemple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chown -R root:root /srv/tls&lt;br /&gt;
chmod 500 /srv/tls&lt;br /&gt;
chmod 400 /srv/tls/*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
 systemctl restart coturn.service&lt;br /&gt;
&lt;br /&gt;
Le service écoute sur le port 3478 &#039;&#039;TCP/UDP&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Il est à présent possible de configurer &#039;&#039;Synapse&#039;&#039; afin qu&#039;il informe les clients d&#039;utiliser notre service &#039;&#039;TURN&#039;&#039; lors de l&#039;établissement des communications pair à pair entre eux.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt;&amp;gt; /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
&lt;br /&gt;
turn_uris: [ &amp;quot;turn:${DNS_COTURN}?transport=udp&amp;quot;, &amp;quot;turn:${DNS_COTURN}?transport=tcp&amp;quot; ]&lt;br /&gt;
turn_shared_secret: &amp;quot;${SECRET_COTURN}&amp;quot;&lt;br /&gt;
turn_user_lifetime: 86400000&lt;br /&gt;
turn_allow_guests: True&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 systemctl restart matrix-synapse.service&lt;br /&gt;
&lt;br /&gt;
==Enregistrement DNS==&lt;br /&gt;
Cette section est totalement facultative et n&#039;apporte rien. Il existe peut-être une configuration de &#039;&#039;Synapse&#039;&#039; permettant de trouver automatiquement le serveur &#039;&#039;TURN&#039;&#039; via &#039;&#039;DNS&#039;&#039;...&lt;br /&gt;
&lt;br /&gt;
Enregistrements &#039;&#039;DNS SRV&#039;&#039; (à ajouter dans la configuration de votre zone)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
_stun._udp 10800 IN SRV 0 5 3478 exemple.fr.&lt;br /&gt;
_turn._udp 10800 IN SRV 0 5 3478 exemple.fr.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il est possible de requêter le serveur de noms sur ces champs précis via les commandes suivantes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dig +short _stun._udp._tcp 10800 IN SRV 0 5 3478 exemple.fr.&lt;br /&gt;
dig +short _turn._udp._tcp 10800 IN SRV 0 5 3478 exemple.fr.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Test de fonctionnement==&lt;br /&gt;
Voici une [https://nextcloud-talk.readthedocs.io/en/latest/TURN/#6-testing-the-turn-server méthode] permettant de tester le fonctionnement du service en ligne de commande. Elle peut aider à deceler des problèmes simplement.&lt;br /&gt;
 turnutils_uclient -p 3478 -W &amp;lt;CLÉ_SERVEUR_TURN&amp;gt; -v -y turn.exemple.fr&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://matrix-org.github.io/synapse/latest/setup/turn/coturn.html&lt;br /&gt;
&lt;br /&gt;
=Client WEB Element=&lt;br /&gt;
[https://github.com/vector-im/element-web Element] est un client WEB pour &#039;&#039;Matrix&#039;&#039;. Anciennement connu sous le nom de &#039;&#039;Riot&#039;&#039;, il existe aussi sous forme d&#039;application &#039;&#039;IOS&#039;&#039; et &#039;&#039;Android&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
N&#039;étant pas dans les dépôts &#039;&#039;Debian&#039;&#039;, nous utiliserons la version &#039;&#039;Git&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt install --no-install-recommends apache2&lt;br /&gt;
&lt;br /&gt;
wget https://github.com/vector-im/element-web/releases/download/v1.10.14/element-v1.10.14.tar.gz -P /tmp&lt;br /&gt;
&lt;br /&gt;
tar xf /tmp/element-v1.10.14.tar.gz -C /var/www/&lt;br /&gt;
ln -s /var/www/element-v1.10.14/ /var/www/element&lt;br /&gt;
chown -R www-data: /var/www/element*&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
L&#039;hôte virtuel d{{&#039;}}&#039;&#039;Apache&#039;&#039; doit pointer vers le programme&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; &#039;_EOF_&#039; &amp;gt; /etc/apache2/sites-available/element.conf&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    ServerAdmin webmaster@localhost&lt;br /&gt;
    DocumentRoot /var/www/element&lt;br /&gt;
    ErrorLog ${APACHE_LOG_DIR}/error.log&lt;br /&gt;
    CustomLog ${APACHE_LOG_DIR}/access.log combined&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Désactivation de l&#039;hôte virtuel par défaut et activation du nouveau&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
a2dissite 000-default.conf&lt;br /&gt;
a2ensite element.conf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le domaine utilisé sera le suivant&lt;br /&gt;
 export DNS_ELEMENT=element.exemple.fr&lt;br /&gt;
&lt;br /&gt;
La configuration de notre instance sera celle-ci&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt; /var/www/element/config.json&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;default_server_config&amp;quot;: {&lt;br /&gt;
        &amp;quot;m.homeserver&amp;quot;: {&lt;br /&gt;
            &amp;quot;base_url&amp;quot;: &amp;quot;https://${DNS_SYNAPSE}&amp;quot;,&lt;br /&gt;
            &amp;quot;server_name&amp;quot;: &amp;quot;${DNS_SYNAPSE}&amp;quot;&lt;br /&gt;
        },&lt;br /&gt;
        &amp;quot;m.identity_server&amp;quot;: {&lt;br /&gt;
            &amp;quot;base_url&amp;quot;: &amp;quot;https://vector.im&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;disable_custom_urls&amp;quot;: false,&lt;br /&gt;
    &amp;quot;disable_guests&amp;quot;: false,&lt;br /&gt;
    &amp;quot;disable_login_language_selector&amp;quot;: false,&lt;br /&gt;
    &amp;quot;disable_3pid_login&amp;quot;: false,&lt;br /&gt;
    &amp;quot;brand&amp;quot;: &amp;quot;Element&amp;quot;,&lt;br /&gt;
    &amp;quot;bug_report_endpoint_url&amp;quot;: &amp;quot;https://element.io/bugreports/submit&amp;quot;,&lt;br /&gt;
    &amp;quot;uisi_autorageshake_app&amp;quot;: &amp;quot;element-auto-uisi&amp;quot;,&lt;br /&gt;
    &amp;quot;default_country_code&amp;quot;: &amp;quot;FR&amp;quot;,&lt;br /&gt;
    &amp;quot;show_labs_settings&amp;quot;: false,&lt;br /&gt;
    &amp;quot;features&amp;quot;: { },&lt;br /&gt;
    &amp;quot;default_federate&amp;quot;: false,&lt;br /&gt;
    &amp;quot;default_theme&amp;quot;: &amp;quot;light&amp;quot;,&lt;br /&gt;
    &amp;quot;enable_presence_by_hs_url&amp;quot;: {&lt;br /&gt;
        &amp;quot;https://matrix.org&amp;quot;: false,&lt;br /&gt;
        &amp;quot;https://matrix-client.matrix.org&amp;quot;: false&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;setting_defaults&amp;quot;: {&lt;br /&gt;
        &amp;quot;breadcrumbs&amp;quot;: true&lt;br /&gt;
    },&lt;br /&gt;
   &amp;quot;features&amp;quot;: {&lt;br /&gt;
      &amp;quot;feature_you_want_to_turn_on&amp;quot;: true,&lt;br /&gt;
      &amp;quot;feature_you_want_to_keep_off&amp;quot;: false&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer &#039;&#039;Apache&#039;&#039;&lt;br /&gt;
 systemctl restart apache2.service&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
* https://github.com/vector-im/element-web/tree/develop/docs&lt;br /&gt;
&lt;br /&gt;
=Fédération=&lt;br /&gt;
Un des atouts de cette solution est la décentralisation. En effet, il est possible d&#039;interconnecter plusieurs serveurs afin de permettre la communication d&#039;utilisateurs enregistrés sur des instances différentes. Ces interconnexions doivent êtres explicitement spécifiées dans la configuration de &#039;&#039;Synapse&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Le domaine du serveur distant sera le suivant&lt;br /&gt;
 export DNS_SRV_DISTANT_SYNAPSE=synapse.toto.fr&lt;br /&gt;
&lt;br /&gt;
Ajout de celui-ci dans la configuration de &#039;&#039;Synapse&#039;&#039; (ceci doit être fait des deux côtés)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sed -i &amp;quot;s/^trusted_key_servers:/trusted_key_servers:\n  - server_name: \&amp;quot;${DNS_SRV_DISTANT_SYNAPSE}\&amp;quot;/g&amp;quot; /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
sed -i &amp;quot;s/^#federation_domain_whitelist:/federation_domain_whitelist:\n  - ${DNS_SRV_DISTANT_SYNAPSE}/g&amp;quot; /etc/matrix-synapse/homeserver.yaml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 systemctl restart matrix-synapse.service&lt;br /&gt;
&lt;br /&gt;
=Cas d&#039;une connexion mandaté=&lt;br /&gt;
Dans la mesure où il est courant qu&#039;un serveur ne soit jamais relié directement à Internet (comprendre par la qu&#039;il ne dispose pas d&#039;IP publique), le cas d&#039;un [[:Category:Reverse_proxy|mandataire inverse]] officiant entre les clients du &#039;&#039;WAN&#039;&#039; et le serveur &#039;&#039;Element&#039;&#039; du &#039;&#039;LAN&#039;&#039; est le plus probable. Ce point complique la transparence des échanges entre les machines et doit être géré au niveau de cet intermédiaire. Deux services ont étés testés en production avec succès. Leur configuration est donnée ci-après.&lt;br /&gt;
&lt;br /&gt;
==Traefik==&lt;br /&gt;
Ajout d&#039;un point d&#039;entrer dans Traefik pour le port 8448&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt;&amp;gt; /etc/traefik/config/vhosts/matrix.toml&lt;br /&gt;
[http]&lt;br /&gt;
  [http.routers]&lt;br /&gt;
     [http.routers.synapse]&lt;br /&gt;
      entryPoints = [&amp;quot;websecure&amp;quot;]&lt;br /&gt;
      rule = &amp;quot;Host(\`${DNS_SYNAPSE}\`)&amp;quot;&lt;br /&gt;
      service = &amp;quot;synapse&amp;quot;&lt;br /&gt;
      [http.routers.synapse.tls]&lt;br /&gt;
        certResolver = &amp;quot;myresolver&amp;quot;&lt;br /&gt;
&lt;br /&gt;
     [http.routers.element]&lt;br /&gt;
      entryPoints = [&amp;quot;websecure&amp;quot;]&lt;br /&gt;
      rule = &amp;quot;Host(\`${DNS_ELEMENT}\`)&amp;quot;&lt;br /&gt;
      service = &amp;quot;element&amp;quot;&lt;br /&gt;
      [http.routers.element.tls]&lt;br /&gt;
        certResolver = &amp;quot;myresolver&amp;quot;&lt;br /&gt;
&lt;br /&gt;
     [http.routers.synapsefed]&lt;br /&gt;
      entryPoints = [&amp;quot;synapsefed&amp;quot;]&lt;br /&gt;
      rule = &amp;quot;Host(\`${DNS_SYNAPSE}\`)&amp;quot;&lt;br /&gt;
      service = &amp;quot;synapse&amp;quot;&lt;br /&gt;
      [http.routers.synapsefed.tls]&lt;br /&gt;
        certResolver = &amp;quot;myresolver&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [http.services]&lt;br /&gt;
    [http.services.synapse.loadBalancer]&lt;br /&gt;
      [[http.services.synapse.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://${IP_INTERNE}:8008&amp;quot;&lt;br /&gt;
    [http.services.element.loadBalancer]&lt;br /&gt;
      [[http.services.element.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://${IP_INTERNE}:80&amp;quot;&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HAProxy==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; _EOF_ &amp;gt;&amp;gt; /etc/haproxy/haproxy.cfg&lt;br /&gt;
frontend matrix-federation&lt;br /&gt;
    bind *:8448,[::]:8448 ssl crt /etc/haproxy/tls/ alpn h2,http/1.1&lt;br /&gt;
    http-request set-header X-Forwarded-Proto https if { ssl_fc }&lt;br /&gt;
    http-request set-header X-Forwarded-Proto http if !{ ssl_fc }&lt;br /&gt;
    http-request set-header X-Forwarded-For %[src]&lt;br /&gt;
    default_backend synapse&lt;br /&gt;
&lt;br /&gt;
frontend https&lt;br /&gt;
    http-response add-header X-Frame-Options SAMEORIGIN&lt;br /&gt;
&lt;br /&gt;
    bind :443 ssl crt /etc/haproxy/tls/ alpn h2,http/1.1&lt;br /&gt;
&lt;br /&gt;
    acl host_synapse hdr(host) -i synapse.exemple.fr&lt;br /&gt;
&lt;br /&gt;
    use_backend synapse if host_synapse&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;backend synapse&lt;br /&gt;
    option forwardfor except 127.0.0.1&lt;br /&gt;
    option http-server-close&lt;br /&gt;
    server synapse 192.168.170.178:8008 check maxconn 32&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Débogage=&lt;br /&gt;
La configuration de &#039;&#039;Synapse&#039;&#039; est quelque peu imbuvable et les problèmes, difficiles à corriger. Il est possible de s&#039;appuyer sur les journaux du service afin de cibler l&#039;origine des disfonctionnements.&lt;br /&gt;
 tail -f /var/log/matrix-synapse/homeserver.log&lt;br /&gt;
&lt;br /&gt;
Un outil permettant de determiner les caractéristiques du serveur est disponible à l&#039;adresse https://federationtester.matrix.org/. Il peut s&#039;avérer d&#039;une aide précisieuse (surtout le rapport &#039;&#039;Json&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
=Réinitialisation de mot de passe=&lt;br /&gt;
Aussi étrange que cela puisse parraitre, il n&#039;existe pas de fonction pour réinitialiser le mot de passe d&#039;un utilisateur (incroyable) ! Les développeurs de cette solution doivent ignorer que ces derniers perdent régulièrement leur mot de passe et qu&#039;il s&#039;agit donc d&#039;une fonctionnalité indispensable en production.&lt;br /&gt;
Heureusement, la structure de l&#039;authentification étant très simple, il est triviale de réaliser cette opération [https://paritoshbh.me/blog/reset-user-password-synapse-matrix-homeserver soit-même] dans la base de données après génération d&#039;un mot de passe haché .&lt;br /&gt;
&lt;br /&gt;
 # Génération du mot de passe haché&lt;br /&gt;
 su - matrix-synapse -s /bin/sh -c &#039;python3 /usr/libexec/matrix-synapse/hash_password -c /etc/matrix-synapse/homeserver.yaml&#039;&lt;br /&gt;
 # connexion à la base de donnée de Synapse&lt;br /&gt;
 su - matrix-synapse -s /bin/sh -c &#039;sqlite3 /etc/matrix-synapse/homeserver.db&#039;&lt;br /&gt;
&lt;br /&gt;
Après avoir identifié l&#039;utilisateur dont le mot de passe doit être réinitialisé (&amp;quot;michel&amp;quot; pour l&#039;exemple), utiliser le hachi généré pour remplacer l&#039;ancien&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
SELECT * FROM users;&lt;br /&gt;
UPDATE users SET password_hash=&#039;$2b$12$OkrnSR1hOCj0xjb7mDnvf.OXVQ0P/EU8u4lUpMuU5YepvHXpv3sxm&#039; WHERE name=&#039;@michel:synapse.exemple.fr&#039;;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le changement est instantané.&lt;/div&gt;</summary>
		<author><name>Ycharbi</name></author>
	</entry>
</feed>