<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wikiold.home.tartarefr.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Didier</id>
	<title>TartareFR - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wikiold.home.tartarefr.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Didier"/>
	<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php/Sp%C3%A9cial:Contributions/Didier"/>
	<updated>2026-07-07T10:59:13Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Datasheet&amp;diff=3156</id>
		<title>Datasheet</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Datasheet&amp;diff=3156"/>
		<updated>2016-09-17T08:14:26Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Services ==&lt;br /&gt;
* [[Datasheet/LVM|LVM]]&lt;br /&gt;
* [[Datasheet/MySQL|MySQL]]&lt;br /&gt;
* [[Datasheet/XtraBackup|XtraBackup]]&lt;br /&gt;
* [[Datasheet/RHCluster|RedHat Cluster]]&lt;br /&gt;
* [[Datasheet/MAJ/Postgresql|Mise à jour de postgresql]]&lt;br /&gt;
* [[Datasheet/MAJ/Gitlab|Mise à jour de Gitlab]]&lt;br /&gt;
* [[Datasheet/FileSystem/XFS|Erreur de réparation après un crash sur XFS]]&lt;br /&gt;
* [[Datasheet/Screen|Screen]]&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
* [[Datasheet/Thunderbird/UseDefaultTemplate|Utilisation d&#039;un modèle par défaut dans Thunderbird]]&lt;br /&gt;
* [[Datasheet/Firefox/AcceptCertificate|Accepter un certificat auto-signé dans Firefox]]&lt;br /&gt;
* [[Datasheet/OpenSSL/CryptFile|Chiffrer/Déchiffrer un fichier]]&lt;br /&gt;
&lt;br /&gt;
== Virtualisation ==&lt;br /&gt;
* [[Datasheet/Docker|Docker]]&lt;br /&gt;
* [[Datasheet/Virsh|Virsh]]&lt;br /&gt;
* [[Datasheet/Libguestfs|Libguestfs]]&lt;br /&gt;
&lt;br /&gt;
== Systemd ==&lt;br /&gt;
* [[Datasheet/Systemd|Systemd]]&lt;br /&gt;
* [[Datasheet/Journalctl|Journalctl]]&lt;br /&gt;
* [[Datasheet/Hostnamectl|Hostnamectl]]&lt;br /&gt;
* [[Datasheet/Localectl|Localectl]]&lt;br /&gt;
* [[Datasheet/Timedatectl|Timedatectl]]&lt;br /&gt;
* [[Datasheet/Firewalld|Firewalld]]&lt;br /&gt;
&lt;br /&gt;
== Gestion des RPM ==&lt;br /&gt;
* [[Datasheet/yum|Yum]]&lt;br /&gt;
* [[Datasheet/Repoquery|Repoquery]]&lt;br /&gt;
* [[Datasheet/PackageCleanup|Package-cleanup]]&lt;br /&gt;
* [[Datasheet/Fedpkg|Fedpkg]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Datasheet/OpenSSL/CryptFile&amp;diff=3155</id>
		<title>Datasheet/OpenSSL/CryptFile</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Datasheet/OpenSSL/CryptFile&amp;diff=3155"/>
		<updated>2016-09-17T08:14:08Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Déchiffrement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Datasheet}}&lt;br /&gt;
= Chiffrement/Déchiffrement de fichier =&lt;br /&gt;
&lt;br /&gt;
== Lister les cyphers disponibles ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
openssl list-cipher-commands&lt;br /&gt;
aes-128-cbc&lt;br /&gt;
aes-128-ecb&lt;br /&gt;
aes-192-cbc&lt;br /&gt;
aes-192-ecb&lt;br /&gt;
aes-256-cbc&lt;br /&gt;
aes-256-ecb&lt;br /&gt;
base64&lt;br /&gt;
bf&lt;br /&gt;
bf-cbc&lt;br /&gt;
bf-cfb&lt;br /&gt;
bf-ecb&lt;br /&gt;
bf-ofb&lt;br /&gt;
camellia-128-cbc&lt;br /&gt;
camellia-128-ecb&lt;br /&gt;
camellia-192-cbc&lt;br /&gt;
camellia-192-ecb&lt;br /&gt;
camellia-256-cbc&lt;br /&gt;
camellia-256-ecb&lt;br /&gt;
cast&lt;br /&gt;
cast-cbc&lt;br /&gt;
cast5-cbc&lt;br /&gt;
cast5-cfb&lt;br /&gt;
cast5-ecb&lt;br /&gt;
cast5-ofb&lt;br /&gt;
des&lt;br /&gt;
des-cbc&lt;br /&gt;
des-cfb&lt;br /&gt;
des-ecb&lt;br /&gt;
des-ede&lt;br /&gt;
des-ede-cbc&lt;br /&gt;
des-ede-cfb&lt;br /&gt;
des-ede-ofb&lt;br /&gt;
des-ede3&lt;br /&gt;
des-ede3-cbc&lt;br /&gt;
des-ede3-cfb&lt;br /&gt;
des-ede3-ofb&lt;br /&gt;
des-ofb&lt;br /&gt;
des3&lt;br /&gt;
desx&lt;br /&gt;
idea&lt;br /&gt;
idea-cbc&lt;br /&gt;
idea-cfb&lt;br /&gt;
idea-ecb&lt;br /&gt;
idea-ofb&lt;br /&gt;
rc2&lt;br /&gt;
rc2-40-cbc&lt;br /&gt;
rc2-64-cbc&lt;br /&gt;
rc2-cbc&lt;br /&gt;
rc2-cfb&lt;br /&gt;
rc2-ecb&lt;br /&gt;
rc2-ofb&lt;br /&gt;
rc4&lt;br /&gt;
rc4-40&lt;br /&gt;
rc5&lt;br /&gt;
rc5-cbc&lt;br /&gt;
rc5-cfb&lt;br /&gt;
rc5-ecb&lt;br /&gt;
rc5-ofb&lt;br /&gt;
seed&lt;br /&gt;
seed-cbc&lt;br /&gt;
seed-cfb&lt;br /&gt;
seed-ecb&lt;br /&gt;
seed-ofb&lt;br /&gt;
zlib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chiffrement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;openssl enc -e -aes-256-cbc -in &amp;lt;FILE&amp;gt; -out &amp;lt;FILE&amp;gt;.asc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;enc&#039;&#039;&#039;: on précise qu’on va utiliser un algorithme de chiffrement&lt;br /&gt;
* &#039;&#039;&#039;-e&#039;&#039;&#039;: on chiffre un fichier&lt;br /&gt;
* &#039;&#039;&#039;-aes-256-cbc&#039;&#039;&#039;: le cypher utilisé, ici AES-256-CBC&lt;br /&gt;
* &#039;&#039;&#039;-in &amp;lt;FILE&amp;gt;&#039;&#039;&#039;: le fichier à chiffrer&lt;br /&gt;
* &#039;&#039;&#039;-out &amp;lt;FILE&amp;gt;.asc&#039;&#039;&#039;: le fichier chiffré (avec l&#039;ajout de l&#039;extension .asc&#039;)&lt;br /&gt;
&lt;br /&gt;
== Déchiffrement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;openssl enc -d -aes-256-cbc -in &amp;lt;FILE&amp;gt;.asc -out &amp;lt;FILE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;enc&#039;&#039;&#039;: on précise qu’on va utiliser un algorithme de chiffrement&lt;br /&gt;
* &#039;&#039;&#039;-d&#039;&#039;&#039;: on déchiffre un fichier&lt;br /&gt;
* &#039;&#039;&#039;-aes-256-cbc&#039;&#039;&#039;: le cypher utilisé, ici AES-256-CBC (doit être identique à celui de la commande de chiffrement)&lt;br /&gt;
* &#039;&#039;&#039;-in &amp;lt;FILE&amp;gt;.asc&#039;&#039;&#039;: le fichier à chiffrer&lt;br /&gt;
* &#039;&#039;&#039;-out &amp;lt;FILE&amp;gt;&#039;&#039;&#039;: le fichier chiffré (avec la suppression de l&#039;extension .asc&#039;)&lt;br /&gt;
&lt;br /&gt;
== Utilisation avec des scripts ==&lt;br /&gt;
&lt;br /&gt;
On peut passer le mot de passe à la commande de chiffrement/déchiffrement.&lt;br /&gt;
&amp;lt;pre&amp;gt;openssl enc -d -aes-256-cbc -in &amp;lt;FILE&amp;gt;.asc -out &amp;lt;FILE&amp;gt; -pass pass:MonSuperMotDePasse&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Admon/warning|Mot de passe dans la commande|Bien que cette méthode met à mal la sécurité, il peut arriver qu&#039;elle est son utilité}}&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Datasheet/OpenSSL/CryptFile&amp;diff=3154</id>
		<title>Datasheet/OpenSSL/CryptFile</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Datasheet/OpenSSL/CryptFile&amp;diff=3154"/>
		<updated>2016-09-17T08:09:41Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « {{Datasheet}} = Chiffrement/Déchiffrement de fichier =  == Lister les cyphers disponibles ==  &amp;lt;pre&amp;gt; openssl list-cipher-commands aes-128-cbc aes-128-ecb aes-192-cbc aes-1... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Datasheet}}&lt;br /&gt;
= Chiffrement/Déchiffrement de fichier =&lt;br /&gt;
&lt;br /&gt;
== Lister les cyphers disponibles ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
openssl list-cipher-commands&lt;br /&gt;
aes-128-cbc&lt;br /&gt;
aes-128-ecb&lt;br /&gt;
aes-192-cbc&lt;br /&gt;
aes-192-ecb&lt;br /&gt;
aes-256-cbc&lt;br /&gt;
aes-256-ecb&lt;br /&gt;
base64&lt;br /&gt;
bf&lt;br /&gt;
bf-cbc&lt;br /&gt;
bf-cfb&lt;br /&gt;
bf-ecb&lt;br /&gt;
bf-ofb&lt;br /&gt;
camellia-128-cbc&lt;br /&gt;
camellia-128-ecb&lt;br /&gt;
camellia-192-cbc&lt;br /&gt;
camellia-192-ecb&lt;br /&gt;
camellia-256-cbc&lt;br /&gt;
camellia-256-ecb&lt;br /&gt;
cast&lt;br /&gt;
cast-cbc&lt;br /&gt;
cast5-cbc&lt;br /&gt;
cast5-cfb&lt;br /&gt;
cast5-ecb&lt;br /&gt;
cast5-ofb&lt;br /&gt;
des&lt;br /&gt;
des-cbc&lt;br /&gt;
des-cfb&lt;br /&gt;
des-ecb&lt;br /&gt;
des-ede&lt;br /&gt;
des-ede-cbc&lt;br /&gt;
des-ede-cfb&lt;br /&gt;
des-ede-ofb&lt;br /&gt;
des-ede3&lt;br /&gt;
des-ede3-cbc&lt;br /&gt;
des-ede3-cfb&lt;br /&gt;
des-ede3-ofb&lt;br /&gt;
des-ofb&lt;br /&gt;
des3&lt;br /&gt;
desx&lt;br /&gt;
idea&lt;br /&gt;
idea-cbc&lt;br /&gt;
idea-cfb&lt;br /&gt;
idea-ecb&lt;br /&gt;
idea-ofb&lt;br /&gt;
rc2&lt;br /&gt;
rc2-40-cbc&lt;br /&gt;
rc2-64-cbc&lt;br /&gt;
rc2-cbc&lt;br /&gt;
rc2-cfb&lt;br /&gt;
rc2-ecb&lt;br /&gt;
rc2-ofb&lt;br /&gt;
rc4&lt;br /&gt;
rc4-40&lt;br /&gt;
rc5&lt;br /&gt;
rc5-cbc&lt;br /&gt;
rc5-cfb&lt;br /&gt;
rc5-ecb&lt;br /&gt;
rc5-ofb&lt;br /&gt;
seed&lt;br /&gt;
seed-cbc&lt;br /&gt;
seed-cfb&lt;br /&gt;
seed-ecb&lt;br /&gt;
seed-ofb&lt;br /&gt;
zlib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Chiffrement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;openssl enc -e -aes-256-cbc -in &amp;lt;FILE&amp;gt; -out &amp;lt;FILE&amp;gt;.asc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;enc&#039;&#039;&#039;: on précise qu’on va utiliser un algorithme de chiffrement&lt;br /&gt;
* &#039;&#039;&#039;-e&#039;&#039;&#039;: on chiffre un fichier&lt;br /&gt;
* &#039;&#039;&#039;-aes-256-cbc&#039;&#039;&#039;: le cypher utilisé, ici AES-256-CBC&lt;br /&gt;
* &#039;&#039;&#039;-in &amp;lt;FILE&amp;gt;&#039;&#039;&#039;: le fichier à chiffrer&lt;br /&gt;
* &#039;&#039;&#039;-out &amp;lt;FILE&amp;gt;.asc&#039;&#039;&#039;: le fichier chiffré (avec l&#039;ajout de l&#039;extension .asc&#039;)&lt;br /&gt;
&lt;br /&gt;
== Déchiffrement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;openssl enc -d -aes-256-cbc -in &amp;lt;FILE&amp;gt;.asc -out &amp;lt;FILE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;enc&#039;&#039;&#039;: on précise qu’on va utiliser un algorithme de chiffrement&lt;br /&gt;
* &#039;&#039;&#039;-d&#039;&#039;&#039;: on déchiffre un fichier&lt;br /&gt;
* &#039;&#039;&#039;-aes-256-cbc&#039;&#039;&#039;: le cypher utilisé, ici AES-256-CBC (doit être identique à celui de la commande de chiffrement)&lt;br /&gt;
* &#039;&#039;&#039;-in &amp;lt;FILE&amp;gt;.asc&#039;&#039;&#039;: le fichier à chiffrer&lt;br /&gt;
* &#039;&#039;&#039;-out &amp;lt;FILE&amp;gt;&#039;&#039;&#039;: le fichier chiffré (avec la suppression de l&#039;extension .asc&#039;)&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=IDS/Fail2Ban&amp;diff=3153</id>
		<title>IDS/Fail2Ban</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=IDS/Fail2Ban&amp;diff=3153"/>
		<updated>2016-09-17T07:47:07Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Bloquer les erreurs apache */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qu&#039;est-ce que Fail2ban? ==&lt;br /&gt;
Fail2ban lit des fichiers de log comme /var/log/pwdfail ou /var/log/apache/error_log et bannit les adresses IP qui ont obtenu un trop grand nombre d&#039;échecs lors de l&#039;authentification. Il met à jour les règles du pare-feu pour rejeter cette adresse IP. Ces règles peuvent êtres défines par l&#039;utilisateur. Fail2ban peut lire plusieurs fichiers de log comme ceux de sshd ou du serveur Apache.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
 yum install fail2ban&lt;br /&gt;
&lt;br /&gt;
Par défaut, le port 22 (ssh) est surveillé, vous pouvez vérifier que les règles ipatbles ont bien prises en compte fail2ban:&lt;br /&gt;
&lt;br /&gt;
 iptables -S | grep fail2ban&lt;br /&gt;
 -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh &lt;br /&gt;
 -A fail2ban-ssh -j RETURN&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Deux fichiers:&lt;br /&gt;
&lt;br /&gt;
=== fail2ban.conf ===&lt;br /&gt;
&lt;br /&gt;
Rien à faire dans ce fichier, vous pouvez laisser les options par défaut:&lt;br /&gt;
&lt;br /&gt;
 /etc/fail2ban/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
 loglevel = 3&lt;br /&gt;
 logtarget = /var/log/fail2ban.log&lt;br /&gt;
 socket = /var/run/fail2ban/fail2ban.sock&lt;br /&gt;
&lt;br /&gt;
=== jail.conf ===&lt;br /&gt;
&lt;br /&gt;
Ce fichier est beaucoup plus intéressant, il contient tous les services à monitorer, et vous allez le découvrir, fail2ban ne se limite pas à SSH...&lt;br /&gt;
&lt;br /&gt;
 /etc/fail2ban/jail.conf&lt;br /&gt;
&lt;br /&gt;
Vérifiez l&#039;adresse d&#039;envoi des mails d&#039;avertissement:&lt;br /&gt;
&lt;br /&gt;
 [DEFAULT]&lt;br /&gt;
 destemail = root@localhost&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erreur commune pour l&#039;envoi des mail d&#039;alertes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
N&#039;oubliez pas de modifier la variable action = %(action_)s&lt;br /&gt;
Et de la placer soit sur:&lt;br /&gt;
&lt;br /&gt;
 action = %(action_mw)s&lt;br /&gt;
&lt;br /&gt;
Soit sur&lt;br /&gt;
&lt;br /&gt;
 action = %(action_mwl)s&lt;br /&gt;
&lt;br /&gt;
Pour activer la surveillance d&#039;un service, il suffit de placer la variable &amp;quot;enabled&amp;quot; à &amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Par défaut la protection du service SSH est activée, pas les autres:&lt;br /&gt;
Si votre ssh n&#039;écoute pas sur le port 22, pensez à le changer... (port = N° de port)&lt;br /&gt;
&lt;br /&gt;
 [ssh]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 port    = ssh&lt;br /&gt;
 filter  = sshd&lt;br /&gt;
 logpath  = /var/log/auth.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
&lt;br /&gt;
D&#039;autres services, à activer en fonction de vos besoins:&lt;br /&gt;
&lt;br /&gt;
 [xinetd-fail]&lt;br /&gt;
 enabled   = true &lt;br /&gt;
 filter    = xinetd-fail&lt;br /&gt;
 port      = all&lt;br /&gt;
 banaction = iptables-multiport-log&lt;br /&gt;
 logpath   = /var/log/daemon.log&lt;br /&gt;
 maxretry  = 2&lt;br /&gt;
&lt;br /&gt;
 [pam-generic]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 filter  = pam-generic&lt;br /&gt;
 port = all&lt;br /&gt;
 banaction = iptables-allports&lt;br /&gt;
 port     = anyport&lt;br /&gt;
 logpath  = /var/log/auth.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
&lt;br /&gt;
 [ssh-ddos]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 port    = ssh&lt;br /&gt;
 filter  = sshd-ddos&lt;br /&gt;
 logpath  = /var/log/auth.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
&lt;br /&gt;
 [apache]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 port    = http,https&lt;br /&gt;
 filter  = apache-auth&lt;br /&gt;
 logpath = /var/log/apache*/*error.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
&lt;br /&gt;
 [apache-multiport]&lt;br /&gt;
 enabled   = true&lt;br /&gt;
 port      = http,https&lt;br /&gt;
 filter    = apache-auth&lt;br /&gt;
 logpath   = /var/log/apache*/*error.log&lt;br /&gt;
 maxretry  = 6&lt;br /&gt;
&lt;br /&gt;
 [apache-noscript]&lt;br /&gt;
 enabled = true &lt;br /&gt;
 port    = http,https&lt;br /&gt;
 filter  = apache-noscript&lt;br /&gt;
 logpath = /var/log/apache*/*error.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
&lt;br /&gt;
 [apache-overflows]&lt;br /&gt;
 enabled = true &lt;br /&gt;
 port    = http,https&lt;br /&gt;
 filter  = apache-overflows&lt;br /&gt;
 logpath = /var/log/apache*/*error.log&lt;br /&gt;
 maxretry = 2&lt;br /&gt;
&lt;br /&gt;
 [postfix]&lt;br /&gt;
 enabled  = true &lt;br /&gt;
 port     = smtp,ssmtp&lt;br /&gt;
 filter   = postfix&lt;br /&gt;
 logpath  = /var/log/mail.log&lt;br /&gt;
&lt;br /&gt;
 [sasl]&lt;br /&gt;
 enabled  = true &lt;br /&gt;
 port     = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s&lt;br /&gt;
 filter   = sasl&lt;br /&gt;
 logpath  = /var/log/mail.log&lt;br /&gt;
&lt;br /&gt;
n&#039;oubliez pas de redémarrer fail2ban :&lt;br /&gt;
&lt;br /&gt;
 # service fail2ban restart&lt;br /&gt;
&lt;br /&gt;
=== jail.local ===&lt;br /&gt;
&lt;br /&gt;
Le fichier jail.local vous permet de mettre vos règles personnelles. Voici quelques exemples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pure-ftpd]&lt;br /&gt;
enabled = true&lt;br /&gt;
port = ftp,ftp-data,ftps,ftps-data&lt;br /&gt;
filter = pure-ftpd&lt;br /&gt;
logpath = /var/log/messages&lt;br /&gt;
maxretry = 3&lt;br /&gt;
&lt;br /&gt;
[dovecot-pop3imap]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter = dovecot-pop3imap&lt;br /&gt;
action = iptables-multiport[name=dovecot-pop3imap, port=&amp;quot;pop3,pop3s,imap,imaps&amp;quot;, protocol=tcp]&lt;br /&gt;
logpath = /var/log/mail.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&lt;br /&gt;
[webmin-auth]&lt;br /&gt;
enabled  = true&lt;br /&gt;
port     = https,10000&lt;br /&gt;
filter   = webmin-auth&lt;br /&gt;
logpath  = /var/log/auth.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
&lt;br /&gt;
# Plugin &#039;&#039;roundcube-fail2ban-plugin&#039;&#039; à installer&lt;br /&gt;
# &lt;br /&gt;
[roundcube]&lt;br /&gt;
enabled  = true&lt;br /&gt;
port     = http,https&lt;br /&gt;
filter   = roundcube&lt;br /&gt;
action   = iptables-multiport[name=roundcube, port=&amp;quot;http,https&amp;quot;]&lt;br /&gt;
           sendmail-whois[name=roundcube, dest=root@localhost, sender=fail2ban@localhost]&lt;br /&gt;
logpath  = /var/www/path/logs/userlogins&lt;br /&gt;
&lt;br /&gt;
# Plugin &#039;&#039;squirrel_logger&#039;&#039; à ajouter à squirrelmail&lt;br /&gt;
[squirrelmail]&lt;br /&gt;
enabled = true&lt;br /&gt;
port = http,https&lt;br /&gt;
filter = squirrelmail&lt;br /&gt;
logpath = /var/www/path/squirrelmail_access_log&lt;br /&gt;
bantime = 6000&lt;br /&gt;
maxretry = 4&lt;br /&gt;
&lt;br /&gt;
# Règle anti-Kevin...&lt;br /&gt;
[apache-admin]&lt;br /&gt;
enabled = true&lt;br /&gt;
port = http&lt;br /&gt;
filter = apache-admin&lt;br /&gt;
logpath = /var/log/apache*/error*.log&lt;br /&gt;
maxretry = 6&lt;br /&gt;
&lt;br /&gt;
# Règle anti-boulets...&lt;br /&gt;
[apache-404]&lt;br /&gt;
enabled = true&lt;br /&gt;
port = http&lt;br /&gt;
filter = apache-404&lt;br /&gt;
logpath = /var/log/ispconfig/httpd/*/error*&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les fichiers de conf qui vont bien:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;pure-ftpd.conf&#039;&#039;&#039; déjà inclu dans la configuration de base&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dovecot-pop3imap.conf&#039;&#039;&#039; déjà inclu dans la configuration de base&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;webmin-auth.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: Cyril Jaquier&lt;br /&gt;
# Rule by : Delvit Guillaume&lt;br /&gt;
#&lt;br /&gt;
# $Revision: 728 $&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
&lt;br /&gt;
# patern :      webmin[15673]: Non-existent login as toto from 86.0.6.217&lt;br /&gt;
#               webmin[29544]: Invalid login as root from 86.0.6.217&lt;br /&gt;
#&lt;br /&gt;
# Option:  failregex&lt;br /&gt;
# Notes.:  regex to match the password failure messages in the logfile. The&lt;br /&gt;
#          host must be matched by a group named &amp;quot;host&amp;quot;. The tag &amp;quot;&amp;lt;HOST&amp;gt;&amp;quot; can&lt;br /&gt;
#          be used for standard IP/hostname matching and is only an alias for&lt;br /&gt;
#          (?:::f{4,6}:)?(?P&amp;lt;host&amp;gt;[\w\-.^_]+)&lt;br /&gt;
# Values:  TEXT&lt;br /&gt;
#&lt;br /&gt;
failregex = webmin.* Non-existent login as .+ from &amp;lt;HOST&amp;gt;$&lt;br /&gt;
            webmin.* Invalid login as .+ from &amp;lt;HOST&amp;gt;$&lt;br /&gt;
&lt;br /&gt;
# Option:  ignoreregex&lt;br /&gt;
# Notes.:  regex to ignore. If this regex matches, the line is ignored.&lt;br /&gt;
# Values:  TEXT&lt;br /&gt;
#&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;roundcube.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = FAILED login for .*. from &amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;squirrelmail.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: Bill Landry ((email_protected))&lt;br /&gt;
#&lt;br /&gt;
# $Revision: 510 $&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
&lt;br /&gt;
# Option: failregex&lt;br /&gt;
# Notes.: regex to match the password failures messages in the logfile. The&lt;br /&gt;
#         host must be matched by a group named &amp;quot;host&amp;quot;. The tag &amp;quot;&amp;quot; can&lt;br /&gt;
#         be used for standard IP/hostname matching and is only an alias for&lt;br /&gt;
#         (?:::f{4,6}:)?(?P\S+)&lt;br /&gt;
# Values: TEXT&lt;br /&gt;
&lt;br /&gt;
failregex = \[LOGIN_ERROR\].*from &amp;lt;HOST&amp;gt;: Utilisateur inconnu ou mot de passe incorrect&lt;br /&gt;
&lt;br /&gt;
# Option:  ignoreregex&lt;br /&gt;
# Notes.:  regex to ignore. If this regex matches, the line is ignored.&lt;br /&gt;
# Values:  TEXT&lt;br /&gt;
&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apache-admin.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: Cyril Jaquier&lt;br /&gt;
#&lt;br /&gt;
# $Revision: 471 $&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
&lt;br /&gt;
# Option: failregex&lt;br /&gt;
# Notes.: regex to match the password failure messages in the logfile. The&lt;br /&gt;
# host must be matched by a group named &amp;quot;host&amp;quot;. The tag &amp;quot;&amp;lt;HOST&amp;gt;&amp;quot; can&lt;br /&gt;
# be used for standard IP/hostname matching.&lt;br /&gt;
# Values: TEXT&lt;br /&gt;
# [client x.x.x.x] File does not exist: /home/www/admin/admin,&lt;br /&gt;
failregex = [[]client &amp;lt;HOST&amp;gt;[]] File does not exist: .*admin|PMA|mysql&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Option: ignoreregex&lt;br /&gt;
# Notes.: regex to ignore. If this regex matches, the line is ignored.&lt;br /&gt;
# Values: TEXT&lt;br /&gt;
#&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apache-404.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: Cyril Jaquier&lt;br /&gt;
#&lt;br /&gt;
# $Revision: 471 $&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
&lt;br /&gt;
# Option: failregex&lt;br /&gt;
# Notes.: regex to match the password failure messages in the logfile. The&lt;br /&gt;
# host must be matched by a group named &amp;quot;host&amp;quot;. The tag &amp;quot;&amp;lt;HOST&amp;gt;&amp;quot; can&lt;br /&gt;
# be used for standard IP/hostname matching.&lt;br /&gt;
# Values: TEXT&lt;br /&gt;
# [client x.x.x.x] File does not exist: /home/www/admin/admin,&lt;br /&gt;
failregex = [[]client &amp;lt;HOST&amp;gt;[]] File does not exist: .*&lt;br /&gt;
#&lt;br /&gt;
# Option: ignoreregex&lt;br /&gt;
# Notes.: regex to ignore. If this regex matches, the line is ignored.&lt;br /&gt;
# Values: TEXT&lt;br /&gt;
#&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option très intéressante pour les logs multiples&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vous avez la possibilité (si vos logs sont &amp;quot;dispersés&amp;quot;) de mettre des chemins &amp;quot;relatifs&amp;quot; - Vous pouvez utiliser les * (étoiles)&lt;br /&gt;
&lt;br /&gt;
Par exemple, vos logs pour chaque site sont dispersés dans des répertoires différents...&lt;br /&gt;
Vous utiliserez alors le chemin suivant (tous les sous-répertoires dans /var/log/ispconfig/httpd/ seront alors pris en compte)&lt;br /&gt;
&lt;br /&gt;
 logpath /var/log/ispconfig/httpd/*/error*&lt;br /&gt;
&lt;br /&gt;
==== Plugins squirrelmail et rouncube ====&lt;br /&gt;
&lt;br /&gt;
[http://mattrude.com/projects/roundcube-fail2ban-plugin/ Plugin roundcube-fail2ban-plugin]&lt;br /&gt;
&lt;br /&gt;
[http://www.howtoforge.com/configuring-fail2ban-with-squirrelmail-on-debian-lenny-ispconfig-3 Plugin squirrel_logger]&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban avec mod-evasive ====&lt;br /&gt;
&lt;br /&gt;
Si vous utilisez mod-evasive, le module de protection contre les attaques Ddos de apache2, vous aurez peut-etre envie d&#039;ajouter un filtre à fail2ban:&lt;br /&gt;
&lt;br /&gt;
 # $EDITOR /etc/fail2ban/filter.d/apache-dosevasive.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: Xela&lt;br /&gt;
#&lt;br /&gt;
# $Revision: 728 $&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
&lt;br /&gt;
# Option:  failregex&lt;br /&gt;
# Notes.:  regex to match the Forbidden log entrys in apache error.log&lt;br /&gt;
#          maybe (but not only) provided by mod_evasive&lt;br /&gt;
#&lt;br /&gt;
# Values:  TEXT&lt;br /&gt;
#&lt;br /&gt;
#failregex = ^\[[^\]]*\]\s+\[error\]\s+\[client \] client denied by server configuration:\s&lt;br /&gt;
failregex = ^\[[^\]]*\]\s+\[error\]\s+\[client &amp;lt;HOST&amp;gt;\] client denied by server configuration:\s&lt;br /&gt;
&lt;br /&gt;
# Option:  ignoreregex&lt;br /&gt;
# Notes.:  regex to ignore. If this regex matches, the line is ignored.&lt;br /&gt;
# Values:  TEXT&lt;br /&gt;
#&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajoutez ensuite ce bloc à /etc/fail2ban/jail.local (adaptez l&#039;emplacement du fichier log à surveiller en fonction de votre configuration)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[apache-dosevasive]&lt;br /&gt;
&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = apache-dosevasive&lt;br /&gt;
action = iptables-allports[name=apache-dosevasive]&lt;br /&gt;
logpath = /var/log/ispconfig/httpd/*/error*&lt;br /&gt;
#logpath = /var/log/apache*/*error.log&lt;br /&gt;
bantime = 600&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cas particulier de mysql ===&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez protéger un serveur mysql dont la base est ouverte sur Internet (ce qui n&#039;est pas conseillé et pas très prudent...), voici comment faire:&lt;br /&gt;
&lt;br /&gt;
[[https://www.debian-fr.org/securite-anti-brute-force-t39497.html Discussion sur le Forum]]&lt;br /&gt;
&lt;br /&gt;
==== Activez les logs de mysql ====&lt;br /&gt;
&lt;br /&gt;
Dans le fichier /etc/mysql/my.cnf&lt;br /&gt;
&lt;br /&gt;
 general_log_file = /var/log/mysql/mysql.log&lt;br /&gt;
 general_log = 1&lt;br /&gt;
&lt;br /&gt;
==== Patchez le fichier de support de date de fail2ban ====&lt;br /&gt;
&lt;br /&gt;
Une sauvegarde:&lt;br /&gt;
cp /usr/share/fail2ban/server/datedetector.py /usr/share/fail2ban/server/datedetector.py.sos&lt;br /&gt;
&lt;br /&gt;
Dans le fichier /usr/share/fail2ban/server/datedetector.py ajoutez ceci (ligne 144)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Attention, les espaces sont des tabulations&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        # AAMMJJ HH:MM:SS&lt;br /&gt;
                        template = DateStrptime()&lt;br /&gt;
                        template.setName(&amp;quot;YearMonthDay Hour:Minute:Second&amp;quot;)&lt;br /&gt;
                        template.setRegex(&amp;quot;\d{2}\d{2}\d{2} \d{2}:\d{2}:\d{2}&amp;quot;)&lt;br /&gt;
                        template.setPattern(&amp;quot;%y%m%d %H:%M:%S&amp;quot;)&lt;br /&gt;
                        self.__templates.append(template)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous devriez obtenir ceci:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        ...&lt;br /&gt;
                        # &amp;lt;09/16/08@05:03:30&amp;gt;&lt;br /&gt;
                        template = DateStrptime()&lt;br /&gt;
                        template.setName(&amp;quot;&amp;lt;Month/Day/Year@Hour:Minute:Second&amp;gt;&amp;quot;)&lt;br /&gt;
                        template.setRegex(&amp;quot;^&amp;lt;\d{2}/\d{2}/\d{2}@\d{2}:\d{2}:\d{2}&amp;gt;&amp;quot;)&lt;br /&gt;
                        template.setPattern(&amp;quot;&amp;lt;%m/%d/%y@%H:%M:%S&amp;gt;&amp;quot;)&lt;br /&gt;
                        self.__templates.append(template)&lt;br /&gt;
                        # AAMMJJ HH:MM:SS&lt;br /&gt;
                        template = DateStrptime()&lt;br /&gt;
                        template.setName(&amp;quot;YearMonthDay Hour:Minute:Second&amp;quot;)&lt;br /&gt;
                        template.setRegex(&amp;quot;\d{2}\d{2}\d{2} \d{2}:\d{2}:\d{2}&amp;quot;)&lt;br /&gt;
                        template.setPattern(&amp;quot;%y%m%d %H:%M:%S&amp;quot;)&lt;br /&gt;
                        self.__templates.append(template)&lt;br /&gt;
                finally:&lt;br /&gt;
                        self.__lock.release()&lt;br /&gt;
                        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurez fail2ban ====&lt;br /&gt;
&lt;br /&gt;
 $editor /etc/fail2ban/jail.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[mysql]&lt;br /&gt;
enabled = true&lt;br /&gt;
port = 3306&lt;br /&gt;
filter = mysqld&lt;br /&gt;
logpath = /var/log/mysql/mysql.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 $editor /etc/fail2ban/filter.d/mysqld.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: JOUBERT Pierre-Benoît&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = Access denied for user &#039;.*&#039;@&#039;&amp;lt;HOST&amp;gt;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bloquer les erreurs 403 apache ===&lt;br /&gt;
&lt;br /&gt;
Modification du fichier /etc/fail2ban/jail.local&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[apache-forbidden]&lt;br /&gt;
enabled = true&lt;br /&gt;
port     = http,https&lt;br /&gt;
logpath  = %(apache_access_log)s&lt;br /&gt;
#          %(apache_error_log)s&lt;br /&gt;
bantime  = 172800&lt;br /&gt;
maxretry = 6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fichier /etc/fail2ban/filter.d/apache-forbidden.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[INCLUDES]&lt;br /&gt;
&lt;br /&gt;
# Read common prefixes. If any customizations available -- read them from&lt;br /&gt;
# apache-common.local&lt;br /&gt;
before = apache-common.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = &amp;lt;HOST&amp;gt;\ \-\ \-\ .*HTTP\/[0-9]+(\.[0-9]+)?\&amp;quot; 403&lt;br /&gt;
            \[client\ &amp;lt;HOST&amp;gt;:[0-9]+\]\ client\ denied&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un redémarrage du service plus tard, notre prison est maintenant opérationnelle et celui qui fait plus de 6 tentatives pour accéder à une ressource protégé par mot de passe, est banni pour 1 semaine.&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
=== Testez les règles ===&lt;br /&gt;
&lt;br /&gt;
L&#039;erreur commune est de se tromper de fichier log... Vérifiez et revérifiez que le fichier donné en &amp;quot;logpath&amp;quot; est le bon.&lt;br /&gt;
Ensuite testez vos règles avec la commande /usr/bin/fail2ban-regex&lt;br /&gt;
&lt;br /&gt;
 # /usr/bin/fail2ban-regex /var/www/path/logs/userlogins /etc/fail2ban/filter.d/roundcube.conf&lt;br /&gt;
&lt;br /&gt;
Exemple de sortie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Running tests&lt;br /&gt;
=============&lt;br /&gt;
&lt;br /&gt;
Use regex file : /etc/fail2ban/filter.d/roundcube.conf&lt;br /&gt;
Use log file   : /var/www/path/logs/userlogins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Results&lt;br /&gt;
=======&lt;br /&gt;
&lt;br /&gt;
Failregex&lt;br /&gt;
|- Regular expressions:&lt;br /&gt;
|  [1] FAILED login for .*. from &amp;lt;HOST&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
`- Number of matches:&lt;br /&gt;
   [1] 1 match(es)&lt;br /&gt;
&lt;br /&gt;
Ignoreregex&lt;br /&gt;
|- Regular expressions:&lt;br /&gt;
|&lt;br /&gt;
`- Number of matches:&lt;br /&gt;
&lt;br /&gt;
Summary&lt;br /&gt;
=======&lt;br /&gt;
&lt;br /&gt;
Addresses found:&lt;br /&gt;
[1]&lt;br /&gt;
    41.xxx.xxx.xxx (Wed Dec 28 15:51:14 2011)&lt;br /&gt;
&lt;br /&gt;
Date template hits:&lt;br /&gt;
0 hit(s): MONTH Day Hour:Minute:Second&lt;br /&gt;
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year&lt;br /&gt;
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second&lt;br /&gt;
0 hit(s): Year/Month/Day Hour:Minute:Second&lt;br /&gt;
0 hit(s): Day/Month/Year Hour:Minute:Second&lt;br /&gt;
0 hit(s): Day/Month/Year Hour:Minute:Second&lt;br /&gt;
0 hit(s): Day/MONTH/Year:Hour:Minute:Second&lt;br /&gt;
0 hit(s): Month/Day/Year:Hour:Minute:Second&lt;br /&gt;
0 hit(s): Year-Month-Day Hour:Minute:Second&lt;br /&gt;
2 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]&lt;br /&gt;
0 hit(s): Day-Month-Year Hour:Minute:Second&lt;br /&gt;
0 hit(s): TAI64N&lt;br /&gt;
0 hit(s): Epoch&lt;br /&gt;
0 hit(s): ISO 8601&lt;br /&gt;
0 hit(s): Hour:Minute:Second&lt;br /&gt;
0 hit(s): &amp;lt;Month/Day/Year@Hour:Minute:Second&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Success, the total number of match is 1&lt;br /&gt;
&lt;br /&gt;
However, look at the above section &#039;Running tests&#039; which could contain important&lt;br /&gt;
information.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testez l&#039;état des jails ===&lt;br /&gt;
&lt;br /&gt;
Avec la commande /usr/bin/fail2ban-client vous pouvez vérifier l&#039;état de vos &amp;quot;jails&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Exemples de sortie:&lt;br /&gt;
&lt;br /&gt;
 # /usr/bin/fail2ban-client status&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Status&lt;br /&gt;
|- Number of jail:      18&lt;br /&gt;
`- Jail list:           dovecot-pop3imap, pure-ftpd, roundcube, apache, ssh, dovecot, apache-overflows, apache-noscript, squirrelmail, apache-dosevasive, apache-admin, pam-generic, postfix, ssh-ddos, webmin-auth, apache-404, sasl, named-refused-tcp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 # /usr/bin/fail2ban-client status apache-404&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Status for the jail: apache-404&lt;br /&gt;
|- filter&lt;br /&gt;
|  |- File list:        /var/log/path/error.log /var/log/path2/error.log /var/log/path2/error.log Etc...&lt;br /&gt;
|  |- Currently failed: 5&lt;br /&gt;
|  `- Total failed:     32&lt;br /&gt;
`- action&lt;br /&gt;
   |- Currently banned: 2&lt;br /&gt;
   |  `- IP list:       41.xxx.xxx.xxx 84.xxx.xxx.xxx &lt;br /&gt;
   `- Total banned:     2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testez en violant une règle ===&lt;br /&gt;
&lt;br /&gt;
Créez par exemple un répertoire dans votre serveur apache, rendez obligatoire l&#039;identification, puis entrez plusieurs fois de suite un mot de passe erroné.&lt;br /&gt;
Vous devriez avoir dans vols logs ceci:&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/fail2ban.log&lt;br /&gt;
&lt;br /&gt;
 2011-08-08 12:27:18,730 fail2ban.actions: WARNING [apache] Ban 10.9.11.150&lt;br /&gt;
&lt;br /&gt;
Effectivement, iptables à bloqué votre ip:&lt;br /&gt;
&lt;br /&gt;
 iptables -L&lt;br /&gt;
&lt;br /&gt;
 Chain fail2ban-apache (1 references)&lt;br /&gt;
 target     prot opt source               destination         &lt;br /&gt;
 DROP       all  --  10.9.11.150          anywhere            &lt;br /&gt;
 RETURN     all  --  anywhere             anywhere&lt;br /&gt;
&lt;br /&gt;
Au bout de 10 minutes (en fonction de ce que vous aurez précisé dans le configuration), l&#039;IP sera de nouveau &amp;quot;libérée&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 2011-08-08 12:37:19,585 fail2ban.actions: WARNING [apache] Unban 10.9.11.150&lt;br /&gt;
&lt;br /&gt;
== Erreur au démarrage de fail2ban ==&lt;br /&gt;
&lt;br /&gt;
Si vous surveillez plusieurs services, il existe un bug gênant sur fail2ban ([http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=554162 fail2ban: fails to load iptable rules with multiple jails]) - Il existe une solution :&lt;br /&gt;
&lt;br /&gt;
Lorsque vous démarrerez fail2ban, surveillez ses logs, vous devriez avoir ceci:&lt;br /&gt;
&lt;br /&gt;
 2011-08-08 16:44:40,564 fail2ban.jail   : INFO   Jail &#039;apache-noscript&#039; started&lt;br /&gt;
 2011-08-08 16:44:40,810 fail2ban.jail   : INFO   Jail &#039;pam-generic&#039; started&lt;br /&gt;
 2011-08-08 16:44:41,051 fail2ban.jail   : INFO   Jail &#039;xinetd-fail&#039; started&lt;br /&gt;
 2011-08-08 16:44:41,269 fail2ban.jail   : INFO   Jail &#039;ssh-ddos&#039; started&lt;br /&gt;
 2011-08-08 16:44:41,506 fail2ban.jail   : INFO   Jail &#039;apache-multiport&#039; started&lt;br /&gt;
 2011-08-08 16:44:41,739 fail2ban.jail   : INFO   Jail &#039;apache-overflows&#039; started&lt;br /&gt;
 2011-08-08 16:44:41,976 fail2ban.jail   : INFO   Jail &#039;ssh&#039; started&lt;br /&gt;
 2011-08-08 16:44:42,206 fail2ban.jail   : INFO   Jail &#039;postfix&#039; started&lt;br /&gt;
 2011-08-08 16:44:42,448 fail2ban.jail   : INFO   Jail &#039;sasl&#039; started&lt;br /&gt;
 2011-08-08 16:44:42,667 fail2ban.jail   : INFO   Jail &#039;apache&#039; started&lt;br /&gt;
&lt;br /&gt;
Si vous avez ce genre de message d&#039;erreur:&lt;br /&gt;
&lt;br /&gt;
 2011-08-08 12:22:52,286 fail2ban.actions.action: ERROR  iptables -N fail2ban-pam-generic&lt;br /&gt;
 iptables -A fail2ban-pam-generic -j RETURN&lt;br /&gt;
 iptables -I INPUT -p tcp -j fail2ban-pam-generic returned 400&lt;br /&gt;
 2011-08-08 15:06:04,467 fail2ban.actions.action: ERROR  iptables -D INPUT -p tcp -m multiport --dports 10122 -j fail2ban-ssh-ddos&lt;br /&gt;
 iptables -F fail2ban-ssh-ddos&lt;br /&gt;
 iptables -X fail2ban-ssh-ddos returned 100&lt;br /&gt;
 2011-08-08 15:06:10,027 fail2ban.actions.action: ERROR  iptables -N fail2ban-apache-overflows&lt;br /&gt;
 iptables -A fail2ban-apache-overflows -j RETURN&lt;br /&gt;
 iptables -I INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-overflows returned 200&lt;br /&gt;
 2011-08-08 15:06:10,224 fail2ban.actions.action: ERROR  iptables -N fail2ban-postfix&lt;br /&gt;
 iptables -A fail2ban-postfix -j RETURN&lt;br /&gt;
 iptables -I INPUT -p tcp -m multiport --dports smtp,ssmtp -j fail2ban-postfix returned 400&lt;br /&gt;
 2011-08-08 15:06:10,283 fail2ban.actions.action: ERROR  iptables -N fail2ban-sasl&lt;br /&gt;
 iptables -A fail2ban-sasl -j RETURN&lt;br /&gt;
 iptables -I INPUT -p tcp -m multiport --dports smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s -j fail2ban-sasl returned 200&lt;br /&gt;
 2011-08-08 15:14:26,002 fail2ban.actions.action: ERROR  iptables -D INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-overflows&lt;br /&gt;
 iptables -F fail2ban-apache-overflows&lt;br /&gt;
 iptables -X fail2ban-apache-overflows returned 100&lt;br /&gt;
 2011-08-08 15:14:28,374 fail2ban.actions.action: ERROR  iptables -D INPUT -p tcp -m multiport --dports smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s -j fail2ban-sasl&lt;br /&gt;
 iptables -F fail2ban-sasl&lt;br /&gt;
 iptables -X fail2ban-sasl returned 100&lt;br /&gt;
 2011-08-08 15:14:45,382 fail2ban.actions.action: ERROR  iptables -N fail2ban-apache-noscript&lt;br /&gt;
 iptables -A fail2ban-apache-noscript -j RETURN&lt;br /&gt;
 iptables -I INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-noscript returned 400&lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions:&lt;br /&gt;
&lt;br /&gt;
1) Modifier le fichier /usr/bin/fail2ban-client&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Faite une sauvegarde de  auparavant...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Editez le fichier /usr/bin/fail2ban-client et ajoutez une temporisation (time.sleep(0.1)) à cet endroit:&lt;br /&gt;
&lt;br /&gt;
        def __processCmd(self, cmd, showRet = True):&lt;br /&gt;
                beautifier = Beautifier()&lt;br /&gt;
                for c in cmd:&lt;br /&gt;
                        time.sleep(0.1)&lt;br /&gt;
                        beautifier.setInputCmd(c)&lt;br /&gt;
&lt;br /&gt;
Si la temporisation à 0.1 ne suffit pas, mettez 0.2. et redémarrez fail2ban.&lt;br /&gt;
&lt;br /&gt;
2) Installer une version supérieure (Fixed in version fail2ban/0.8.5-2)&lt;br /&gt;
&lt;br /&gt;
Installer la version testing (8.6-3 0) ou celle des backports (8.6-3~bpo60+1)&lt;br /&gt;
&lt;br /&gt;
== Fail2ban et ipv6 (EXPERIMENTAL) ==&lt;br /&gt;
&lt;br /&gt;
Vous le savez, l&#039;ipv6 se généralise, lancement officiel le 6 juin 2012&lt;br /&gt;
Quid de fail2ban ? Malheureusement, fail2ban ne supporte pas encore l&#039;ipv6.&lt;br /&gt;
Heureusement, il existe un patch qui permet d&#039;avoir fail2ban activé sur votre ipv6...&lt;br /&gt;
&lt;br /&gt;
Mode d&#039;emploi:&lt;br /&gt;
&lt;br /&gt;
Téléchargez le patch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget http://thanatos.trollprod.org/sousites/fail2banv6/fail2ban-ipv6.tar.bz2&lt;br /&gt;
--2012-04-14 09:30:31--  http://thanatos.trollprod.org/sousites/fail2banv6/fail2ban-ipv6.tar.bz2&lt;br /&gt;
Résolution de thanatos.trollprod.org (thanatos.trollprod.org)... 94.23.14.97, 2001:41d0:2:f61::fed1:fe54&lt;br /&gt;
Connexion vers thanatos.trollprod.org (thanatos.trollprod.org)|94.23.14.97|:80...connecté.&lt;br /&gt;
requête HTTP transmise, en attente de la réponse...200 OK&lt;br /&gt;
Longueur: 2293 (2,2K) [application/x-bzip]&lt;br /&gt;
Sauvegarde en : «fail2ban-ipv6.tar.bz2»&lt;br /&gt;
&lt;br /&gt;
100%[=============================================================================================&amp;gt;] 2 293       --.-K/s   ds 0,001s  &lt;br /&gt;
&lt;br /&gt;
2012-04-14 09:30:31 (2,98 MB/s) - «fail2ban-ipv6.tar.bz2» sauvegardé [2293/2293]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir fail2ban-ipv6&lt;br /&gt;
 tar xvjf fail2ban-ipv6.tar.bz2 -C fail2ban-ipv6&lt;br /&gt;
&lt;br /&gt;
 cp /usr/share/fail2ban/server/filter.py /usr/share/fail2ban/server/filter.py.sos&lt;br /&gt;
 cp /usr/share/fail2ban/server/failregex.py /usr/share/fail2ban/server/failregex.py.sos&lt;br /&gt;
&lt;br /&gt;
Testez les patch:&lt;br /&gt;
&lt;br /&gt;
 cd /usr/share/fail2ban/server/&lt;br /&gt;
&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# patch -p0 --dry-run &amp;lt; /root/fail2ban-ipv6/patchfilter.patch&lt;br /&gt;
 patching file filter.py&lt;br /&gt;
 Hunk #1 succeeded at 525 (offset 14 lines).&lt;br /&gt;
 Hunk #2 succeeded at 549 (offset 14 lines).&lt;br /&gt;
 Hunk #3 succeeded at 580 (offset 14 lines).&lt;br /&gt;
   &lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# patch -p0 --dry-run &amp;lt; /root/fail2ban-ipv6/regex.patch &lt;br /&gt;
 patching file failregex.py&lt;br /&gt;
 Hunk #1 succeeded at 47 (offset 3 lines).&lt;br /&gt;
&lt;br /&gt;
Si le résultat est positif (pas d&#039;erreur) lancez les patchs&lt;br /&gt;
&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# patch -p0 &amp;lt; /root/fail2ban-ipv6/patchfilter.patch&lt;br /&gt;
 patching file filter.py&lt;br /&gt;
 Hunk #1 succeeded at 525 (offset 14 lines).&lt;br /&gt;
 Hunk #2 succeeded at 549 (offset 14 lines).&lt;br /&gt;
 Hunk #3 succeeded at 580 (offset 14 lines).&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# patch -p0 &amp;lt; /root/fail2ban-ipv6/regex.patch &lt;br /&gt;
 patching file failregex.py&lt;br /&gt;
 Hunk #1 succeeded at 47 (offset 3 lines).&lt;br /&gt;
&lt;br /&gt;
Copiez les fichiers nécessaires:&lt;br /&gt;
&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# cp /root/fail2ban-ipv6/ip64tables.sh /usr/bin/&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# chmod 755 /usr/bin/ip64tables.sh&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# cp /root/fail2ban-ipv6/iptables46-multiport.conf /etc/fail2ban/action.d/&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# chmod 644 /etc/fail2ban/action.d/iptables46-multiport.conf&lt;br /&gt;
&lt;br /&gt;
Créez le bloc de configuration:&lt;br /&gt;
&lt;br /&gt;
 nano /etc/fail2ban/jail.conf&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 [ssh-ip6tables]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 filter  = sshd&lt;br /&gt;
 logpath  = /var/log/auth.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
 action   = iptables46-multiport[name=SSH, port=22, protocol=tcp]&lt;br /&gt;
            sendmail-whois[name=SSH, dest=root, sender=fail2ban@mail.com]&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Redémarrez fail2ban et vérifiez qu&#039;il est actif:&lt;br /&gt;
&lt;br /&gt;
 service fail2ban restart&lt;br /&gt;
 Restarting authentication failure monitor: fail2ban.&lt;br /&gt;
 ip6tables -S&lt;br /&gt;
 ...&lt;br /&gt;
 -N fail2ban-SSH&lt;br /&gt;
 -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-SSH&lt;br /&gt;
 -A fail2ban-SSH -j RETURN&lt;br /&gt;
&lt;br /&gt;
Avertissement:&lt;br /&gt;
# N&#039;a pas encore été testé&lt;br /&gt;
# Ne pas activer la résolution de nom dans les logs&lt;br /&gt;
&lt;br /&gt;
== Liens externes ==&lt;br /&gt;
&lt;br /&gt;
Je vous encourage à lire:&lt;br /&gt;
&lt;br /&gt;
* La page de man de fail2ban&lt;br /&gt;
* [http://www.fail2ban.org/wiki/index.php/Main_Page Le Wiki de fail2ban - Très complet]&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sécurité]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=IDS/Fail2Ban&amp;diff=3152</id>
		<title>IDS/Fail2Ban</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=IDS/Fail2Ban&amp;diff=3152"/>
		<updated>2016-09-17T07:41:16Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Cas particulier de mysql */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Qu&#039;est-ce que Fail2ban? ==&lt;br /&gt;
Fail2ban lit des fichiers de log comme /var/log/pwdfail ou /var/log/apache/error_log et bannit les adresses IP qui ont obtenu un trop grand nombre d&#039;échecs lors de l&#039;authentification. Il met à jour les règles du pare-feu pour rejeter cette adresse IP. Ces règles peuvent êtres défines par l&#039;utilisateur. Fail2ban peut lire plusieurs fichiers de log comme ceux de sshd ou du serveur Apache.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
 yum install fail2ban&lt;br /&gt;
&lt;br /&gt;
Par défaut, le port 22 (ssh) est surveillé, vous pouvez vérifier que les règles ipatbles ont bien prises en compte fail2ban:&lt;br /&gt;
&lt;br /&gt;
 iptables -S | grep fail2ban&lt;br /&gt;
 -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh &lt;br /&gt;
 -A fail2ban-ssh -j RETURN&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
Deux fichiers:&lt;br /&gt;
&lt;br /&gt;
=== fail2ban.conf ===&lt;br /&gt;
&lt;br /&gt;
Rien à faire dans ce fichier, vous pouvez laisser les options par défaut:&lt;br /&gt;
&lt;br /&gt;
 /etc/fail2ban/fail2ban.conf&lt;br /&gt;
&lt;br /&gt;
 loglevel = 3&lt;br /&gt;
 logtarget = /var/log/fail2ban.log&lt;br /&gt;
 socket = /var/run/fail2ban/fail2ban.sock&lt;br /&gt;
&lt;br /&gt;
=== jail.conf ===&lt;br /&gt;
&lt;br /&gt;
Ce fichier est beaucoup plus intéressant, il contient tous les services à monitorer, et vous allez le découvrir, fail2ban ne se limite pas à SSH...&lt;br /&gt;
&lt;br /&gt;
 /etc/fail2ban/jail.conf&lt;br /&gt;
&lt;br /&gt;
Vérifiez l&#039;adresse d&#039;envoi des mails d&#039;avertissement:&lt;br /&gt;
&lt;br /&gt;
 [DEFAULT]&lt;br /&gt;
 destemail = root@localhost&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Erreur commune pour l&#039;envoi des mail d&#039;alertes&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
N&#039;oubliez pas de modifier la variable action = %(action_)s&lt;br /&gt;
Et de la placer soit sur:&lt;br /&gt;
&lt;br /&gt;
 action = %(action_mw)s&lt;br /&gt;
&lt;br /&gt;
Soit sur&lt;br /&gt;
&lt;br /&gt;
 action = %(action_mwl)s&lt;br /&gt;
&lt;br /&gt;
Pour activer la surveillance d&#039;un service, il suffit de placer la variable &amp;quot;enabled&amp;quot; à &amp;quot;true&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Par défaut la protection du service SSH est activée, pas les autres:&lt;br /&gt;
Si votre ssh n&#039;écoute pas sur le port 22, pensez à le changer... (port = N° de port)&lt;br /&gt;
&lt;br /&gt;
 [ssh]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 port    = ssh&lt;br /&gt;
 filter  = sshd&lt;br /&gt;
 logpath  = /var/log/auth.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
&lt;br /&gt;
D&#039;autres services, à activer en fonction de vos besoins:&lt;br /&gt;
&lt;br /&gt;
 [xinetd-fail]&lt;br /&gt;
 enabled   = true &lt;br /&gt;
 filter    = xinetd-fail&lt;br /&gt;
 port      = all&lt;br /&gt;
 banaction = iptables-multiport-log&lt;br /&gt;
 logpath   = /var/log/daemon.log&lt;br /&gt;
 maxretry  = 2&lt;br /&gt;
&lt;br /&gt;
 [pam-generic]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 filter  = pam-generic&lt;br /&gt;
 port = all&lt;br /&gt;
 banaction = iptables-allports&lt;br /&gt;
 port     = anyport&lt;br /&gt;
 logpath  = /var/log/auth.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
&lt;br /&gt;
 [ssh-ddos]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 port    = ssh&lt;br /&gt;
 filter  = sshd-ddos&lt;br /&gt;
 logpath  = /var/log/auth.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
&lt;br /&gt;
 [apache]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 port    = http,https&lt;br /&gt;
 filter  = apache-auth&lt;br /&gt;
 logpath = /var/log/apache*/*error.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
&lt;br /&gt;
 [apache-multiport]&lt;br /&gt;
 enabled   = true&lt;br /&gt;
 port      = http,https&lt;br /&gt;
 filter    = apache-auth&lt;br /&gt;
 logpath   = /var/log/apache*/*error.log&lt;br /&gt;
 maxretry  = 6&lt;br /&gt;
&lt;br /&gt;
 [apache-noscript]&lt;br /&gt;
 enabled = true &lt;br /&gt;
 port    = http,https&lt;br /&gt;
 filter  = apache-noscript&lt;br /&gt;
 logpath = /var/log/apache*/*error.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
&lt;br /&gt;
 [apache-overflows]&lt;br /&gt;
 enabled = true &lt;br /&gt;
 port    = http,https&lt;br /&gt;
 filter  = apache-overflows&lt;br /&gt;
 logpath = /var/log/apache*/*error.log&lt;br /&gt;
 maxretry = 2&lt;br /&gt;
&lt;br /&gt;
 [postfix]&lt;br /&gt;
 enabled  = true &lt;br /&gt;
 port     = smtp,ssmtp&lt;br /&gt;
 filter   = postfix&lt;br /&gt;
 logpath  = /var/log/mail.log&lt;br /&gt;
&lt;br /&gt;
 [sasl]&lt;br /&gt;
 enabled  = true &lt;br /&gt;
 port     = smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s&lt;br /&gt;
 filter   = sasl&lt;br /&gt;
 logpath  = /var/log/mail.log&lt;br /&gt;
&lt;br /&gt;
n&#039;oubliez pas de redémarrer fail2ban :&lt;br /&gt;
&lt;br /&gt;
 # service fail2ban restart&lt;br /&gt;
&lt;br /&gt;
=== jail.local ===&lt;br /&gt;
&lt;br /&gt;
Le fichier jail.local vous permet de mettre vos règles personnelles. Voici quelques exemples:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[pure-ftpd]&lt;br /&gt;
enabled = true&lt;br /&gt;
port = ftp,ftp-data,ftps,ftps-data&lt;br /&gt;
filter = pure-ftpd&lt;br /&gt;
logpath = /var/log/messages&lt;br /&gt;
maxretry = 3&lt;br /&gt;
&lt;br /&gt;
[dovecot-pop3imap]&lt;br /&gt;
enabled = true&lt;br /&gt;
filter = dovecot-pop3imap&lt;br /&gt;
action = iptables-multiport[name=dovecot-pop3imap, port=&amp;quot;pop3,pop3s,imap,imaps&amp;quot;, protocol=tcp]&lt;br /&gt;
logpath = /var/log/mail.log&lt;br /&gt;
maxretry = 5&lt;br /&gt;
&lt;br /&gt;
[webmin-auth]&lt;br /&gt;
enabled  = true&lt;br /&gt;
port     = https,10000&lt;br /&gt;
filter   = webmin-auth&lt;br /&gt;
logpath  = /var/log/auth.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
&lt;br /&gt;
# Plugin &#039;&#039;roundcube-fail2ban-plugin&#039;&#039; à installer&lt;br /&gt;
# &lt;br /&gt;
[roundcube]&lt;br /&gt;
enabled  = true&lt;br /&gt;
port     = http,https&lt;br /&gt;
filter   = roundcube&lt;br /&gt;
action   = iptables-multiport[name=roundcube, port=&amp;quot;http,https&amp;quot;]&lt;br /&gt;
           sendmail-whois[name=roundcube, dest=root@localhost, sender=fail2ban@localhost]&lt;br /&gt;
logpath  = /var/www/path/logs/userlogins&lt;br /&gt;
&lt;br /&gt;
# Plugin &#039;&#039;squirrel_logger&#039;&#039; à ajouter à squirrelmail&lt;br /&gt;
[squirrelmail]&lt;br /&gt;
enabled = true&lt;br /&gt;
port = http,https&lt;br /&gt;
filter = squirrelmail&lt;br /&gt;
logpath = /var/www/path/squirrelmail_access_log&lt;br /&gt;
bantime = 6000&lt;br /&gt;
maxretry = 4&lt;br /&gt;
&lt;br /&gt;
# Règle anti-Kevin...&lt;br /&gt;
[apache-admin]&lt;br /&gt;
enabled = true&lt;br /&gt;
port = http&lt;br /&gt;
filter = apache-admin&lt;br /&gt;
logpath = /var/log/apache*/error*.log&lt;br /&gt;
maxretry = 6&lt;br /&gt;
&lt;br /&gt;
# Règle anti-boulets...&lt;br /&gt;
[apache-404]&lt;br /&gt;
enabled = true&lt;br /&gt;
port = http&lt;br /&gt;
filter = apache-404&lt;br /&gt;
logpath = /var/log/ispconfig/httpd/*/error*&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les fichiers de conf qui vont bien:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;pure-ftpd.conf&#039;&#039;&#039; déjà inclu dans la configuration de base&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dovecot-pop3imap.conf&#039;&#039;&#039; déjà inclu dans la configuration de base&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;webmin-auth.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: Cyril Jaquier&lt;br /&gt;
# Rule by : Delvit Guillaume&lt;br /&gt;
#&lt;br /&gt;
# $Revision: 728 $&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
&lt;br /&gt;
# patern :      webmin[15673]: Non-existent login as toto from 86.0.6.217&lt;br /&gt;
#               webmin[29544]: Invalid login as root from 86.0.6.217&lt;br /&gt;
#&lt;br /&gt;
# Option:  failregex&lt;br /&gt;
# Notes.:  regex to match the password failure messages in the logfile. The&lt;br /&gt;
#          host must be matched by a group named &amp;quot;host&amp;quot;. The tag &amp;quot;&amp;lt;HOST&amp;gt;&amp;quot; can&lt;br /&gt;
#          be used for standard IP/hostname matching and is only an alias for&lt;br /&gt;
#          (?:::f{4,6}:)?(?P&amp;lt;host&amp;gt;[\w\-.^_]+)&lt;br /&gt;
# Values:  TEXT&lt;br /&gt;
#&lt;br /&gt;
failregex = webmin.* Non-existent login as .+ from &amp;lt;HOST&amp;gt;$&lt;br /&gt;
            webmin.* Invalid login as .+ from &amp;lt;HOST&amp;gt;$&lt;br /&gt;
&lt;br /&gt;
# Option:  ignoreregex&lt;br /&gt;
# Notes.:  regex to ignore. If this regex matches, the line is ignored.&lt;br /&gt;
# Values:  TEXT&lt;br /&gt;
#&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;roundcube.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = FAILED login for .*. from &amp;lt;HOST&amp;gt;&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;squirrelmail.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: Bill Landry ((email_protected))&lt;br /&gt;
#&lt;br /&gt;
# $Revision: 510 $&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
&lt;br /&gt;
# Option: failregex&lt;br /&gt;
# Notes.: regex to match the password failures messages in the logfile. The&lt;br /&gt;
#         host must be matched by a group named &amp;quot;host&amp;quot;. The tag &amp;quot;&amp;quot; can&lt;br /&gt;
#         be used for standard IP/hostname matching and is only an alias for&lt;br /&gt;
#         (?:::f{4,6}:)?(?P\S+)&lt;br /&gt;
# Values: TEXT&lt;br /&gt;
&lt;br /&gt;
failregex = \[LOGIN_ERROR\].*from &amp;lt;HOST&amp;gt;: Utilisateur inconnu ou mot de passe incorrect&lt;br /&gt;
&lt;br /&gt;
# Option:  ignoreregex&lt;br /&gt;
# Notes.:  regex to ignore. If this regex matches, the line is ignored.&lt;br /&gt;
# Values:  TEXT&lt;br /&gt;
&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apache-admin.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: Cyril Jaquier&lt;br /&gt;
#&lt;br /&gt;
# $Revision: 471 $&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
&lt;br /&gt;
# Option: failregex&lt;br /&gt;
# Notes.: regex to match the password failure messages in the logfile. The&lt;br /&gt;
# host must be matched by a group named &amp;quot;host&amp;quot;. The tag &amp;quot;&amp;lt;HOST&amp;gt;&amp;quot; can&lt;br /&gt;
# be used for standard IP/hostname matching.&lt;br /&gt;
# Values: TEXT&lt;br /&gt;
# [client x.x.x.x] File does not exist: /home/www/admin/admin,&lt;br /&gt;
failregex = [[]client &amp;lt;HOST&amp;gt;[]] File does not exist: .*admin|PMA|mysql&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Option: ignoreregex&lt;br /&gt;
# Notes.: regex to ignore. If this regex matches, the line is ignored.&lt;br /&gt;
# Values: TEXT&lt;br /&gt;
#&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;apache-404.conf&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: Cyril Jaquier&lt;br /&gt;
#&lt;br /&gt;
# $Revision: 471 $&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
&lt;br /&gt;
# Option: failregex&lt;br /&gt;
# Notes.: regex to match the password failure messages in the logfile. The&lt;br /&gt;
# host must be matched by a group named &amp;quot;host&amp;quot;. The tag &amp;quot;&amp;lt;HOST&amp;gt;&amp;quot; can&lt;br /&gt;
# be used for standard IP/hostname matching.&lt;br /&gt;
# Values: TEXT&lt;br /&gt;
# [client x.x.x.x] File does not exist: /home/www/admin/admin,&lt;br /&gt;
failregex = [[]client &amp;lt;HOST&amp;gt;[]] File does not exist: .*&lt;br /&gt;
#&lt;br /&gt;
# Option: ignoreregex&lt;br /&gt;
# Notes.: regex to ignore. If this regex matches, the line is ignored.&lt;br /&gt;
# Values: TEXT&lt;br /&gt;
#&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Option très intéressante pour les logs multiples&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vous avez la possibilité (si vos logs sont &amp;quot;dispersés&amp;quot;) de mettre des chemins &amp;quot;relatifs&amp;quot; - Vous pouvez utiliser les * (étoiles)&lt;br /&gt;
&lt;br /&gt;
Par exemple, vos logs pour chaque site sont dispersés dans des répertoires différents...&lt;br /&gt;
Vous utiliserez alors le chemin suivant (tous les sous-répertoires dans /var/log/ispconfig/httpd/ seront alors pris en compte)&lt;br /&gt;
&lt;br /&gt;
 logpath /var/log/ispconfig/httpd/*/error*&lt;br /&gt;
&lt;br /&gt;
==== Plugins squirrelmail et rouncube ====&lt;br /&gt;
&lt;br /&gt;
[http://mattrude.com/projects/roundcube-fail2ban-plugin/ Plugin roundcube-fail2ban-plugin]&lt;br /&gt;
&lt;br /&gt;
[http://www.howtoforge.com/configuring-fail2ban-with-squirrelmail-on-debian-lenny-ispconfig-3 Plugin squirrel_logger]&lt;br /&gt;
&lt;br /&gt;
==== Fail2ban avec mod-evasive ====&lt;br /&gt;
&lt;br /&gt;
Si vous utilisez mod-evasive, le module de protection contre les attaques Ddos de apache2, vous aurez peut-etre envie d&#039;ajouter un filtre à fail2ban:&lt;br /&gt;
&lt;br /&gt;
 # $EDITOR /etc/fail2ban/filter.d/apache-dosevasive.conf &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: Xela&lt;br /&gt;
#&lt;br /&gt;
# $Revision: 728 $&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
&lt;br /&gt;
# Option:  failregex&lt;br /&gt;
# Notes.:  regex to match the Forbidden log entrys in apache error.log&lt;br /&gt;
#          maybe (but not only) provided by mod_evasive&lt;br /&gt;
#&lt;br /&gt;
# Values:  TEXT&lt;br /&gt;
#&lt;br /&gt;
#failregex = ^\[[^\]]*\]\s+\[error\]\s+\[client \] client denied by server configuration:\s&lt;br /&gt;
failregex = ^\[[^\]]*\]\s+\[error\]\s+\[client &amp;lt;HOST&amp;gt;\] client denied by server configuration:\s&lt;br /&gt;
&lt;br /&gt;
# Option:  ignoreregex&lt;br /&gt;
# Notes.:  regex to ignore. If this regex matches, the line is ignored.&lt;br /&gt;
# Values:  TEXT&lt;br /&gt;
#&lt;br /&gt;
ignoreregex =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajoutez ensuite ce bloc à /etc/fail2ban/jail.local (adaptez l&#039;emplacement du fichier log à surveiller en fonction de votre configuration)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[apache-dosevasive]&lt;br /&gt;
&lt;br /&gt;
enabled = true&lt;br /&gt;
filter  = apache-dosevasive&lt;br /&gt;
action = iptables-allports[name=apache-dosevasive]&lt;br /&gt;
logpath = /var/log/ispconfig/httpd/*/error*&lt;br /&gt;
#logpath = /var/log/apache*/*error.log&lt;br /&gt;
bantime = 600&lt;br /&gt;
maxretry = 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Cas particulier de mysql ===&lt;br /&gt;
&lt;br /&gt;
Si vous souhaitez protéger un serveur mysql dont la base est ouverte sur Internet (ce qui n&#039;est pas conseillé et pas très prudent...), voici comment faire:&lt;br /&gt;
&lt;br /&gt;
[[https://www.debian-fr.org/securite-anti-brute-force-t39497.html Discussion sur le Forum]]&lt;br /&gt;
&lt;br /&gt;
==== Activez les logs de mysql ====&lt;br /&gt;
&lt;br /&gt;
Dans le fichier /etc/mysql/my.cnf&lt;br /&gt;
&lt;br /&gt;
 general_log_file = /var/log/mysql/mysql.log&lt;br /&gt;
 general_log = 1&lt;br /&gt;
&lt;br /&gt;
==== Patchez le fichier de support de date de fail2ban ====&lt;br /&gt;
&lt;br /&gt;
Une sauvegarde:&lt;br /&gt;
cp /usr/share/fail2ban/server/datedetector.py /usr/share/fail2ban/server/datedetector.py.sos&lt;br /&gt;
&lt;br /&gt;
Dans le fichier /usr/share/fail2ban/server/datedetector.py ajoutez ceci (ligne 144)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Attention, les espaces sont des tabulations&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        # AAMMJJ HH:MM:SS&lt;br /&gt;
                        template = DateStrptime()&lt;br /&gt;
                        template.setName(&amp;quot;YearMonthDay Hour:Minute:Second&amp;quot;)&lt;br /&gt;
                        template.setRegex(&amp;quot;\d{2}\d{2}\d{2} \d{2}:\d{2}:\d{2}&amp;quot;)&lt;br /&gt;
                        template.setPattern(&amp;quot;%y%m%d %H:%M:%S&amp;quot;)&lt;br /&gt;
                        self.__templates.append(template)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous devriez obtenir ceci:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        ...&lt;br /&gt;
                        # &amp;lt;09/16/08@05:03:30&amp;gt;&lt;br /&gt;
                        template = DateStrptime()&lt;br /&gt;
                        template.setName(&amp;quot;&amp;lt;Month/Day/Year@Hour:Minute:Second&amp;gt;&amp;quot;)&lt;br /&gt;
                        template.setRegex(&amp;quot;^&amp;lt;\d{2}/\d{2}/\d{2}@\d{2}:\d{2}:\d{2}&amp;gt;&amp;quot;)&lt;br /&gt;
                        template.setPattern(&amp;quot;&amp;lt;%m/%d/%y@%H:%M:%S&amp;gt;&amp;quot;)&lt;br /&gt;
                        self.__templates.append(template)&lt;br /&gt;
                        # AAMMJJ HH:MM:SS&lt;br /&gt;
                        template = DateStrptime()&lt;br /&gt;
                        template.setName(&amp;quot;YearMonthDay Hour:Minute:Second&amp;quot;)&lt;br /&gt;
                        template.setRegex(&amp;quot;\d{2}\d{2}\d{2} \d{2}:\d{2}:\d{2}&amp;quot;)&lt;br /&gt;
                        template.setPattern(&amp;quot;%y%m%d %H:%M:%S&amp;quot;)&lt;br /&gt;
                        self.__templates.append(template)&lt;br /&gt;
                finally:&lt;br /&gt;
                        self.__lock.release()&lt;br /&gt;
                        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configurez fail2ban ====&lt;br /&gt;
&lt;br /&gt;
 $editor /etc/fail2ban/jail.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[mysql]&lt;br /&gt;
enabled = true&lt;br /&gt;
port = 3306&lt;br /&gt;
filter = mysqld&lt;br /&gt;
logpath = /var/log/mysql/mysql.log&lt;br /&gt;
maxretry = 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 $editor /etc/fail2ban/filter.d/mysqld.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Fail2Ban configuration file&lt;br /&gt;
#&lt;br /&gt;
# Author: JOUBERT Pierre-Benoît&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
[Definition]&lt;br /&gt;
failregex = Access denied for user &#039;.*&#039;@&#039;&amp;lt;HOST&amp;gt;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bloquer les erreurs apache ===&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
=== Testez les règles ===&lt;br /&gt;
&lt;br /&gt;
L&#039;erreur commune est de se tromper de fichier log... Vérifiez et revérifiez que le fichier donné en &amp;quot;logpath&amp;quot; est le bon.&lt;br /&gt;
Ensuite testez vos règles avec la commande /usr/bin/fail2ban-regex&lt;br /&gt;
&lt;br /&gt;
 # /usr/bin/fail2ban-regex /var/www/path/logs/userlogins /etc/fail2ban/filter.d/roundcube.conf&lt;br /&gt;
&lt;br /&gt;
Exemple de sortie:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Running tests&lt;br /&gt;
=============&lt;br /&gt;
&lt;br /&gt;
Use regex file : /etc/fail2ban/filter.d/roundcube.conf&lt;br /&gt;
Use log file   : /var/www/path/logs/userlogins&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Results&lt;br /&gt;
=======&lt;br /&gt;
&lt;br /&gt;
Failregex&lt;br /&gt;
|- Regular expressions:&lt;br /&gt;
|  [1] FAILED login for .*. from &amp;lt;HOST&amp;gt;&lt;br /&gt;
|&lt;br /&gt;
`- Number of matches:&lt;br /&gt;
   [1] 1 match(es)&lt;br /&gt;
&lt;br /&gt;
Ignoreregex&lt;br /&gt;
|- Regular expressions:&lt;br /&gt;
|&lt;br /&gt;
`- Number of matches:&lt;br /&gt;
&lt;br /&gt;
Summary&lt;br /&gt;
=======&lt;br /&gt;
&lt;br /&gt;
Addresses found:&lt;br /&gt;
[1]&lt;br /&gt;
    41.xxx.xxx.xxx (Wed Dec 28 15:51:14 2011)&lt;br /&gt;
&lt;br /&gt;
Date template hits:&lt;br /&gt;
0 hit(s): MONTH Day Hour:Minute:Second&lt;br /&gt;
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year&lt;br /&gt;
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second&lt;br /&gt;
0 hit(s): Year/Month/Day Hour:Minute:Second&lt;br /&gt;
0 hit(s): Day/Month/Year Hour:Minute:Second&lt;br /&gt;
0 hit(s): Day/Month/Year Hour:Minute:Second&lt;br /&gt;
0 hit(s): Day/MONTH/Year:Hour:Minute:Second&lt;br /&gt;
0 hit(s): Month/Day/Year:Hour:Minute:Second&lt;br /&gt;
0 hit(s): Year-Month-Day Hour:Minute:Second&lt;br /&gt;
2 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]&lt;br /&gt;
0 hit(s): Day-Month-Year Hour:Minute:Second&lt;br /&gt;
0 hit(s): TAI64N&lt;br /&gt;
0 hit(s): Epoch&lt;br /&gt;
0 hit(s): ISO 8601&lt;br /&gt;
0 hit(s): Hour:Minute:Second&lt;br /&gt;
0 hit(s): &amp;lt;Month/Day/Year@Hour:Minute:Second&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Success, the total number of match is 1&lt;br /&gt;
&lt;br /&gt;
However, look at the above section &#039;Running tests&#039; which could contain important&lt;br /&gt;
information.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testez l&#039;état des jails ===&lt;br /&gt;
&lt;br /&gt;
Avec la commande /usr/bin/fail2ban-client vous pouvez vérifier l&#039;état de vos &amp;quot;jails&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
Exemples de sortie:&lt;br /&gt;
&lt;br /&gt;
 # /usr/bin/fail2ban-client status&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Status&lt;br /&gt;
|- Number of jail:      18&lt;br /&gt;
`- Jail list:           dovecot-pop3imap, pure-ftpd, roundcube, apache, ssh, dovecot, apache-overflows, apache-noscript, squirrelmail, apache-dosevasive, apache-admin, pam-generic, postfix, ssh-ddos, webmin-auth, apache-404, sasl, named-refused-tcp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 # /usr/bin/fail2ban-client status apache-404&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Status for the jail: apache-404&lt;br /&gt;
|- filter&lt;br /&gt;
|  |- File list:        /var/log/path/error.log /var/log/path2/error.log /var/log/path2/error.log Etc...&lt;br /&gt;
|  |- Currently failed: 5&lt;br /&gt;
|  `- Total failed:     32&lt;br /&gt;
`- action&lt;br /&gt;
   |- Currently banned: 2&lt;br /&gt;
   |  `- IP list:       41.xxx.xxx.xxx 84.xxx.xxx.xxx &lt;br /&gt;
   `- Total banned:     2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Testez en violant une règle ===&lt;br /&gt;
&lt;br /&gt;
Créez par exemple un répertoire dans votre serveur apache, rendez obligatoire l&#039;identification, puis entrez plusieurs fois de suite un mot de passe erroné.&lt;br /&gt;
Vous devriez avoir dans vols logs ceci:&lt;br /&gt;
&lt;br /&gt;
 tail -f /var/log/fail2ban.log&lt;br /&gt;
&lt;br /&gt;
 2011-08-08 12:27:18,730 fail2ban.actions: WARNING [apache] Ban 10.9.11.150&lt;br /&gt;
&lt;br /&gt;
Effectivement, iptables à bloqué votre ip:&lt;br /&gt;
&lt;br /&gt;
 iptables -L&lt;br /&gt;
&lt;br /&gt;
 Chain fail2ban-apache (1 references)&lt;br /&gt;
 target     prot opt source               destination         &lt;br /&gt;
 DROP       all  --  10.9.11.150          anywhere            &lt;br /&gt;
 RETURN     all  --  anywhere             anywhere&lt;br /&gt;
&lt;br /&gt;
Au bout de 10 minutes (en fonction de ce que vous aurez précisé dans le configuration), l&#039;IP sera de nouveau &amp;quot;libérée&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 2011-08-08 12:37:19,585 fail2ban.actions: WARNING [apache] Unban 10.9.11.150&lt;br /&gt;
&lt;br /&gt;
== Erreur au démarrage de fail2ban ==&lt;br /&gt;
&lt;br /&gt;
Si vous surveillez plusieurs services, il existe un bug gênant sur fail2ban ([http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=554162 fail2ban: fails to load iptable rules with multiple jails]) - Il existe une solution :&lt;br /&gt;
&lt;br /&gt;
Lorsque vous démarrerez fail2ban, surveillez ses logs, vous devriez avoir ceci:&lt;br /&gt;
&lt;br /&gt;
 2011-08-08 16:44:40,564 fail2ban.jail   : INFO   Jail &#039;apache-noscript&#039; started&lt;br /&gt;
 2011-08-08 16:44:40,810 fail2ban.jail   : INFO   Jail &#039;pam-generic&#039; started&lt;br /&gt;
 2011-08-08 16:44:41,051 fail2ban.jail   : INFO   Jail &#039;xinetd-fail&#039; started&lt;br /&gt;
 2011-08-08 16:44:41,269 fail2ban.jail   : INFO   Jail &#039;ssh-ddos&#039; started&lt;br /&gt;
 2011-08-08 16:44:41,506 fail2ban.jail   : INFO   Jail &#039;apache-multiport&#039; started&lt;br /&gt;
 2011-08-08 16:44:41,739 fail2ban.jail   : INFO   Jail &#039;apache-overflows&#039; started&lt;br /&gt;
 2011-08-08 16:44:41,976 fail2ban.jail   : INFO   Jail &#039;ssh&#039; started&lt;br /&gt;
 2011-08-08 16:44:42,206 fail2ban.jail   : INFO   Jail &#039;postfix&#039; started&lt;br /&gt;
 2011-08-08 16:44:42,448 fail2ban.jail   : INFO   Jail &#039;sasl&#039; started&lt;br /&gt;
 2011-08-08 16:44:42,667 fail2ban.jail   : INFO   Jail &#039;apache&#039; started&lt;br /&gt;
&lt;br /&gt;
Si vous avez ce genre de message d&#039;erreur:&lt;br /&gt;
&lt;br /&gt;
 2011-08-08 12:22:52,286 fail2ban.actions.action: ERROR  iptables -N fail2ban-pam-generic&lt;br /&gt;
 iptables -A fail2ban-pam-generic -j RETURN&lt;br /&gt;
 iptables -I INPUT -p tcp -j fail2ban-pam-generic returned 400&lt;br /&gt;
 2011-08-08 15:06:04,467 fail2ban.actions.action: ERROR  iptables -D INPUT -p tcp -m multiport --dports 10122 -j fail2ban-ssh-ddos&lt;br /&gt;
 iptables -F fail2ban-ssh-ddos&lt;br /&gt;
 iptables -X fail2ban-ssh-ddos returned 100&lt;br /&gt;
 2011-08-08 15:06:10,027 fail2ban.actions.action: ERROR  iptables -N fail2ban-apache-overflows&lt;br /&gt;
 iptables -A fail2ban-apache-overflows -j RETURN&lt;br /&gt;
 iptables -I INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-overflows returned 200&lt;br /&gt;
 2011-08-08 15:06:10,224 fail2ban.actions.action: ERROR  iptables -N fail2ban-postfix&lt;br /&gt;
 iptables -A fail2ban-postfix -j RETURN&lt;br /&gt;
 iptables -I INPUT -p tcp -m multiport --dports smtp,ssmtp -j fail2ban-postfix returned 400&lt;br /&gt;
 2011-08-08 15:06:10,283 fail2ban.actions.action: ERROR  iptables -N fail2ban-sasl&lt;br /&gt;
 iptables -A fail2ban-sasl -j RETURN&lt;br /&gt;
 iptables -I INPUT -p tcp -m multiport --dports smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s -j fail2ban-sasl returned 200&lt;br /&gt;
 2011-08-08 15:14:26,002 fail2ban.actions.action: ERROR  iptables -D INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-overflows&lt;br /&gt;
 iptables -F fail2ban-apache-overflows&lt;br /&gt;
 iptables -X fail2ban-apache-overflows returned 100&lt;br /&gt;
 2011-08-08 15:14:28,374 fail2ban.actions.action: ERROR  iptables -D INPUT -p tcp -m multiport --dports smtp,ssmtp,imap2,imap3,imaps,pop3,pop3s -j fail2ban-sasl&lt;br /&gt;
 iptables -F fail2ban-sasl&lt;br /&gt;
 iptables -X fail2ban-sasl returned 100&lt;br /&gt;
 2011-08-08 15:14:45,382 fail2ban.actions.action: ERROR  iptables -N fail2ban-apache-noscript&lt;br /&gt;
 iptables -A fail2ban-apache-noscript -j RETURN&lt;br /&gt;
 iptables -I INPUT -p tcp -m multiport --dports http,https -j fail2ban-apache-noscript returned 400&lt;br /&gt;
&lt;br /&gt;
Il existe deux solutions:&lt;br /&gt;
&lt;br /&gt;
1) Modifier le fichier /usr/bin/fail2ban-client&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Faite une sauvegarde de  auparavant...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Editez le fichier /usr/bin/fail2ban-client et ajoutez une temporisation (time.sleep(0.1)) à cet endroit:&lt;br /&gt;
&lt;br /&gt;
        def __processCmd(self, cmd, showRet = True):&lt;br /&gt;
                beautifier = Beautifier()&lt;br /&gt;
                for c in cmd:&lt;br /&gt;
                        time.sleep(0.1)&lt;br /&gt;
                        beautifier.setInputCmd(c)&lt;br /&gt;
&lt;br /&gt;
Si la temporisation à 0.1 ne suffit pas, mettez 0.2. et redémarrez fail2ban.&lt;br /&gt;
&lt;br /&gt;
2) Installer une version supérieure (Fixed in version fail2ban/0.8.5-2)&lt;br /&gt;
&lt;br /&gt;
Installer la version testing (8.6-3 0) ou celle des backports (8.6-3~bpo60+1)&lt;br /&gt;
&lt;br /&gt;
== Fail2ban et ipv6 (EXPERIMENTAL) ==&lt;br /&gt;
&lt;br /&gt;
Vous le savez, l&#039;ipv6 se généralise, lancement officiel le 6 juin 2012&lt;br /&gt;
Quid de fail2ban ? Malheureusement, fail2ban ne supporte pas encore l&#039;ipv6.&lt;br /&gt;
Heureusement, il existe un patch qui permet d&#039;avoir fail2ban activé sur votre ipv6...&lt;br /&gt;
&lt;br /&gt;
Mode d&#039;emploi:&lt;br /&gt;
&lt;br /&gt;
Téléchargez le patch:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget http://thanatos.trollprod.org/sousites/fail2banv6/fail2ban-ipv6.tar.bz2&lt;br /&gt;
--2012-04-14 09:30:31--  http://thanatos.trollprod.org/sousites/fail2banv6/fail2ban-ipv6.tar.bz2&lt;br /&gt;
Résolution de thanatos.trollprod.org (thanatos.trollprod.org)... 94.23.14.97, 2001:41d0:2:f61::fed1:fe54&lt;br /&gt;
Connexion vers thanatos.trollprod.org (thanatos.trollprod.org)|94.23.14.97|:80...connecté.&lt;br /&gt;
requête HTTP transmise, en attente de la réponse...200 OK&lt;br /&gt;
Longueur: 2293 (2,2K) [application/x-bzip]&lt;br /&gt;
Sauvegarde en : «fail2ban-ipv6.tar.bz2»&lt;br /&gt;
&lt;br /&gt;
100%[=============================================================================================&amp;gt;] 2 293       --.-K/s   ds 0,001s  &lt;br /&gt;
&lt;br /&gt;
2012-04-14 09:30:31 (2,98 MB/s) - «fail2ban-ipv6.tar.bz2» sauvegardé [2293/2293]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 mkdir fail2ban-ipv6&lt;br /&gt;
 tar xvjf fail2ban-ipv6.tar.bz2 -C fail2ban-ipv6&lt;br /&gt;
&lt;br /&gt;
 cp /usr/share/fail2ban/server/filter.py /usr/share/fail2ban/server/filter.py.sos&lt;br /&gt;
 cp /usr/share/fail2ban/server/failregex.py /usr/share/fail2ban/server/failregex.py.sos&lt;br /&gt;
&lt;br /&gt;
Testez les patch:&lt;br /&gt;
&lt;br /&gt;
 cd /usr/share/fail2ban/server/&lt;br /&gt;
&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# patch -p0 --dry-run &amp;lt; /root/fail2ban-ipv6/patchfilter.patch&lt;br /&gt;
 patching file filter.py&lt;br /&gt;
 Hunk #1 succeeded at 525 (offset 14 lines).&lt;br /&gt;
 Hunk #2 succeeded at 549 (offset 14 lines).&lt;br /&gt;
 Hunk #3 succeeded at 580 (offset 14 lines).&lt;br /&gt;
   &lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# patch -p0 --dry-run &amp;lt; /root/fail2ban-ipv6/regex.patch &lt;br /&gt;
 patching file failregex.py&lt;br /&gt;
 Hunk #1 succeeded at 47 (offset 3 lines).&lt;br /&gt;
&lt;br /&gt;
Si le résultat est positif (pas d&#039;erreur) lancez les patchs&lt;br /&gt;
&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# patch -p0 &amp;lt; /root/fail2ban-ipv6/patchfilter.patch&lt;br /&gt;
 patching file filter.py&lt;br /&gt;
 Hunk #1 succeeded at 525 (offset 14 lines).&lt;br /&gt;
 Hunk #2 succeeded at 549 (offset 14 lines).&lt;br /&gt;
 Hunk #3 succeeded at 580 (offset 14 lines).&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# patch -p0 &amp;lt; /root/fail2ban-ipv6/regex.patch &lt;br /&gt;
 patching file failregex.py&lt;br /&gt;
 Hunk #1 succeeded at 47 (offset 3 lines).&lt;br /&gt;
&lt;br /&gt;
Copiez les fichiers nécessaires:&lt;br /&gt;
&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# cp /root/fail2ban-ipv6/ip64tables.sh /usr/bin/&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# chmod 755 /usr/bin/ip64tables.sh&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# cp /root/fail2ban-ipv6/iptables46-multiport.conf /etc/fail2ban/action.d/&lt;br /&gt;
 root@nas:/usr/share/fail2ban/server# chmod 644 /etc/fail2ban/action.d/iptables46-multiport.conf&lt;br /&gt;
&lt;br /&gt;
Créez le bloc de configuration:&lt;br /&gt;
&lt;br /&gt;
 nano /etc/fail2ban/jail.conf&lt;br /&gt;
&lt;br /&gt;
 ...&lt;br /&gt;
 [ssh-ip6tables]&lt;br /&gt;
 enabled = true&lt;br /&gt;
 filter  = sshd&lt;br /&gt;
 logpath  = /var/log/auth.log&lt;br /&gt;
 maxretry = 6&lt;br /&gt;
 action   = iptables46-multiport[name=SSH, port=22, protocol=tcp]&lt;br /&gt;
            sendmail-whois[name=SSH, dest=root, sender=fail2ban@mail.com]&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Redémarrez fail2ban et vérifiez qu&#039;il est actif:&lt;br /&gt;
&lt;br /&gt;
 service fail2ban restart&lt;br /&gt;
 Restarting authentication failure monitor: fail2ban.&lt;br /&gt;
 ip6tables -S&lt;br /&gt;
 ...&lt;br /&gt;
 -N fail2ban-SSH&lt;br /&gt;
 -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-SSH&lt;br /&gt;
 -A fail2ban-SSH -j RETURN&lt;br /&gt;
&lt;br /&gt;
Avertissement:&lt;br /&gt;
# N&#039;a pas encore été testé&lt;br /&gt;
# Ne pas activer la résolution de nom dans les logs&lt;br /&gt;
&lt;br /&gt;
== Liens externes ==&lt;br /&gt;
&lt;br /&gt;
Je vous encourage à lire:&lt;br /&gt;
&lt;br /&gt;
* La page de man de fail2ban&lt;br /&gt;
* [http://www.fail2ban.org/wiki/index.php/Main_Page Le Wiki de fail2ban - Très complet]&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:Sécurité]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Datasheet/Firewalld&amp;diff=3151</id>
		<title>Datasheet/Firewalld</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Datasheet/Firewalld&amp;diff=3151"/>
		<updated>2016-09-17T07:38:44Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Commandes de modification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Datasheet}}&lt;br /&gt;
= Firewalld =&lt;br /&gt;
&lt;br /&gt;
Gestion du firewall&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Firewalld est une surcouche aux outils netfilter traditionnels: iptables, ip6tables et ebtables qui permet une gestion dynamique des règles, c&#039;est à dire que les règles sont appliquées sans le redémarrage complet du parefeu. Les règles existantes restent donc en place, et les modules noyaux complémentaires utilisés ne sont pas déchargés.&lt;br /&gt;
&lt;br /&gt;
Avec iptables en direct, il fallait soit ré-appliquer l&#039;ensemble des règles, soit appliqué la modification au runtime (non triviale car les règles sont forcément empilées par le dessus), puis aux fichiers pour le prochain redémarrage.&lt;br /&gt;
&lt;br /&gt;
Avec firewalld, il n&#039;y a plus de période (très courte) sans protection, ni de rupture dans le suivi des connexions (related established)&lt;br /&gt;
{{Admon/warning|Utilisation des outils traditionnels netfiter|L&#039;utilisation de FirewallD implique que les commandes &amp;lt;app&amp;gt;iptables&amp;lt;/app&amp;gt;, &amp;lt;app&amp;gt;ip6tables&amp;lt;/app&amp;gt; et &amp;lt;app&amp;gt;ebtables&amp;lt;/app&amp;gt; ne soient plus utilisées directement.&amp;lt;br&amp;gt;&lt;br /&gt;
De plus les fichiers &amp;lt;path&amp;gt;/etc/sysconfig/iptables&amp;lt;/path&amp;gt;, &amp;lt;path&amp;gt;/etc/sysconfig/ip6tables&amp;lt;/path&amp;gt; et &amp;lt;path&amp;gt;/etc/sysconfig/ebtables&amp;lt;chain&amp;gt;&amp;lt;/path&amp;gt; ne sont plus utilisés.}}&lt;br /&gt;
&lt;br /&gt;
Les fichiers de configurations:&lt;br /&gt;
* configuration par défaut dans des fichiers au format XML dans le répertoire &amp;lt;path&amp;gt;/usr/lib/firewalld&amp;lt;/path&amp;gt;. Ils sont susceptibles d&#039;être modifiés par une mise à jour.&lt;br /&gt;
* configuration effectuée par l&#039;administrateur ou les utilisateurs dans le répertoire &amp;lt;path&amp;gt;/etc/firewalld&amp;lt;/path&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
== Les zones ==&lt;br /&gt;
&lt;br /&gt;
FirewallD intègre une notion de zones de réseaux.&lt;br /&gt;
&lt;br /&gt;
* A chaque zone de réseau est associé un ensemble de services réseaux accessibles de l&#039;extérieur, suivant la confiance que l&#039;on accorde à cet &amp;quot;extérieur&amp;quot;.&lt;br /&gt;
* Les interfaces réseaux (ifaces) peuvent être affectées à une zone de réseau.&lt;br /&gt;
{{Admon/important|Par défaut, le trafic sortant est toujours autorisé ainsi que les connexions déja établies|Seules les caractéristiques du trafic entrant seront à préciser.}}&lt;br /&gt;
&lt;br /&gt;
Détails des zones:&lt;br /&gt;
* &#039;&#039;&#039;trusted&#039;&#039;&#039; (non modifiable): un vLAN dédié considéré comme totalement fiable (Réseau dédié pour du RAID sur IP, etc...).&lt;br /&gt;
* &#039;&#039;&#039;home&#039;&#039;&#039;: un LAN considéré comme partielement fiable&lt;br /&gt;
* &#039;&#039;&#039;work&#039;&#039;&#039;: un autre LAN considéré comme partielement fiable&lt;br /&gt;
* &#039;&#039;&#039;internal&#039;&#039;&#039;: un autre LAN considéré comme partielement fiable&lt;br /&gt;
* &#039;&#039;&#039;dmz&#039;&#039;&#039;: une DMZ très peu fiable (sans DHCP)&lt;br /&gt;
* &#039;&#039;&#039;public&#039;&#039;&#039;: un réseau non fiable&lt;br /&gt;
* &#039;&#039;&#039;external&#039;&#039;&#039;: un réseau non fiable (sans DHCP)&lt;br /&gt;
* &#039;&#039;&#039;block&#039;&#039;&#039; (non modifiable): l&#039;intégralité du traffic est bloqué (reject)&lt;br /&gt;
* &#039;&#039;&#039;drop&#039;&#039;&#039; (non modifiable):  l&#039;intégralité du traffic est ignoré (drop)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Les commandes ==&lt;br /&gt;
&lt;br /&gt;
Certaines commandes n&#039;ont pas de sortie, il faut donc analyser le code de retour.&lt;br /&gt;
&lt;br /&gt;
=== Commandes de statut ===&lt;br /&gt;
* Statut du firewall&amp;lt;pre&amp;gt;firewall-cmd --state&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Obtenir la zone par défaut&amp;lt;pre&amp;gt;firewall-cmd --get-default-zone&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Obtenir la zone courante&amp;lt;pre&amp;gt;firewall-cmd --get-active-zone&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Obtenir la zone associé à l&#039;interfcae réseau eth0&amp;lt;pre&amp;gt;firewall-cmd --get-zone-of-interface=eth0&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Lister les services autorisés pour la zone &#039;&#039;public&#039;&#039;&amp;lt;pre&amp;gt;firewall-cmd --zone=public --list-services&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commandes de modification ===&lt;br /&gt;
Les commandes persistantes doivent être suivi d&#039;un rechargement du service (reload)&lt;br /&gt;
* Reload du firewall (sans perte d&#039;information sur le suivi de connexion)&amp;lt;pre&amp;gt;firewall-cmd --reload&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Ouvrir le firewall (runtime only) pour les connexions http&amp;lt;pre&amp;gt;firewall-cmd --add-service=smtp&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Ouvrir le firewall (runtime et persistant) pour les connexions http&amp;lt;pre&amp;gt;firewall-cmd --persistant --add-service=smtp&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Fermer le firewall (runtime et persistant) pour les connexions http&amp;lt;pre&amp;gt;firewall-cmd --persistant --remove-service=smtp&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Ouvrir le firewall (runtime et persistant) pour les connexions sur le port TCP 8080&amp;lt;pre&amp;gt;firewall-cmd --persistant --add-port=8080/tcp&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Bloquer une adresse en particulier (runtime et persistant)&amp;lt;pre&amp;gt;firewall-cmd --persistant --add-rich-rule=&amp;quot;rule family=ipv4 source address=115.0.0.0/8 drop&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Liens ==&lt;br /&gt;
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html Documentation Redhat]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Fichier:DockerContainer.svg&amp;diff=3150</id>
		<title>Fichier:DockerContainer.svg</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Fichier:DockerContainer.svg&amp;diff=3150"/>
		<updated>2016-04-19T14:34:56Z</updated>

		<summary type="html">&lt;p&gt;Didier : Exemple de Conteneurs Docker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exemple de Conteneurs Docker&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Fichier:Virtualisation-Container.svg&amp;diff=3149</id>
		<title>Fichier:Virtualisation-Container.svg</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Fichier:Virtualisation-Container.svg&amp;diff=3149"/>
		<updated>2016-04-19T14:34:34Z</updated>

		<summary type="html">&lt;p&gt;Didier : Virtualisation par conteneur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Virtualisation par conteneur&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Fichier:Virtualisation-Hyperviser.svg&amp;diff=3148</id>
		<title>Fichier:Virtualisation-Hyperviser.svg</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Fichier:Virtualisation-Hyperviser.svg&amp;diff=3148"/>
		<updated>2016-04-19T14:34:17Z</updated>

		<summary type="html">&lt;p&gt;Didier : Virtualisation par hyperviseur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Virtualisation par hyperviseur&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Virt/Docker&amp;diff=3147</id>
		<title>Virt/Docker</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Virt/Docker&amp;diff=3147"/>
		<updated>2016-04-19T14:32:55Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « Logo Docker  == Théorie ==  [https://www.docker.com/ Docker] est donc une plateforme de virtualisation par conteneur qui, contrairement... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:LogoDocker.png|centré|Logo Docker]]&lt;br /&gt;
&lt;br /&gt;
== Théorie ==&lt;br /&gt;
&lt;br /&gt;
[https://www.docker.com/ Docker] est donc une plateforme de virtualisation par conteneur qui, contrairement à la virtualisation sur hyperviseur où de nouvelles machines complètes doivent être créée, va permettre de créer des conteneurs qui vont uniquement contenir une ou plusieurs applications. Empaquetées sous forme de conteneurs, ces applications pourront ainsi être facilement déployées sur tout hôte exécutant Docker, chaque conteneur restant parfaitement indépendant !&lt;br /&gt;
&lt;br /&gt;
Le nom et le vocabulaire de cette technologie n’ont pas été choisis au hasard : tout comme les conteneurs en métal, toujours fabriqués selon les mêmes standards, peuvent être pris en charge par n’importe quel transporteur (et peu importe ce qu’il y a dedans), une application « Dockerisée » doit pouvoir être exécutée sur n’importe quel hôte faisant tourner Docker, peu importe son contenu !&lt;br /&gt;
&lt;br /&gt;
=== La virtualisation par hyperviseur ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Virtualisation-Hyperviser.svg|Virtualisation par hyperviseur|600px]]&lt;br /&gt;
&lt;br /&gt;
Avec la virtualisation par [https://fr.wikipedia.org/wiki/Hyperviseur hyperviseur] de type 2 (VMware Workstation, VirtualBox…), chaque hôte invité virtualise un environnement complet, ce qui permet notamment de pouvoir exécuter un système virtualisé différent du système hôte (typiquement du Windows sur un GNU/Linux par exemple).&lt;br /&gt;
&lt;br /&gt;
=== La virtualisation par conteneur ===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Virtualisation-Container.svg|Virtualisation par containeur|600px]]&lt;br /&gt;
&lt;br /&gt;
Dans ce cas, conteneur virtualisé et système hôte sont fortement liés et c’est pour cela que cette technologie, qui existe pourtant depuis longtemps (OpenVZ a déjà presque 10 ans !), était peu répandue jusqu’à maintenant. Certains appellent d’ailleurs ce type de virtualisation la paravirtualisation...&lt;br /&gt;
&lt;br /&gt;
=== Principe d&#039;utilisation ===&lt;br /&gt;
&lt;br /&gt;
Docker simplifie l’utilisation d’outils existants, et c’est sa principale force. S’il est possible d’isoler des conteneurs : processus, interfaces réseau, points de montage, c’est grâce à l’utilisation des &#039;&#039;&#039;namespaces&#039;&#039;&#039; Linux. Un processus qui s’exécute dans un espace de nom correspondant à un conteneur ne sera visible que par ce conteneur et le système hôte exécutant ce conteneur. En comparant les deux précédents schémas, on remarque que la virtualisation par conteneur est plus rapide que la virtualisation par hyperviseur car les conteneurs ont directement accès aux ressources matérielles de l’hôte. La consommation de ces ressources pouvant être gérées par l’hôte en question grâce aux &#039;&#039;&#039;[https://fr.wikipedia.org/wiki/Cgroups control groups]&#039;&#039;&#039; (cgroups) du noyau Linux.&lt;br /&gt;
&lt;br /&gt;
Tout ceci fait donc de Docker un &#039;&#039;&#039;chroot dopé aux stéroïdes&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
À ses débuts Docker était une couche d’abstraction à LXC car il permettait de s’affranchir de la complexité de ce dernier en gérant pour nous un certain nombre d’opérations. Aujourd’hui Docker va beaucoup plus loin que LXC puisqu’il dispose de sa propre plate-forme : [http://blog.docker.com/2014/03/docker-0-9-introducing-execution-drivers-and-libcontainer/ Libcontainer] (bien que LXC soit toujours proposé sous forme de plugin).&lt;br /&gt;
&lt;br /&gt;
Et ce qui démarque Docker des autres, c’est la rapidité de la mise en place des flux de travail : tout est fait pour réduire le temps entre le développement, les tests, le déploiement et l’utilisation de votre application en production. Et pour cela, on trouve les images.&lt;br /&gt;
&lt;br /&gt;
Une image est le composant de base de Docker. C’est un instantané d’un système d’exploitation (par exemple Debian). Ces images sont disponibles sur un dépôt public, géré par Docker, appelé le registre.&lt;br /&gt;
&lt;br /&gt;
==== Les images ====&lt;br /&gt;
&lt;br /&gt;
[[Fichier:DockerContainer.svg|Conteneur Docker|600px]]&lt;br /&gt;
&lt;br /&gt;
L’exemple ci-dessus se compose de deux conteneurs, parfaitement isolés (d’où les couleurs différentes). On trouve à la base les composants nécessaires à Docker, et qui sont fournis par le noyau Linux de l’hôte. On trouve ensuite deux images : Debian et [https://fr.wikipedia.org/wiki/BusyBox BusyBox].&lt;br /&gt;
&lt;br /&gt;
Une image ne peut être modifiée directement, elle reste toujours en lecture seule.&lt;br /&gt;
&lt;br /&gt;
Remarquez qu’un environnement d’exécution peut nécessiter l’empilement de plusieurs images (ici mariadb, puis apache), rendu possible par les fonctionnalités de &#039;&#039;&#039;[https://fr.wikipedia.org/wiki/Copy-On-Write copy-on-write]&#039;&#039;&#039; des modules de stockages utilisés par Docker ([https://fr.wikipedia.org/wiki/Aufs AuFS], [https://fr.wikipedia.org/wiki/Btrfs Btrfs]).&lt;br /&gt;
&lt;br /&gt;
Enfin, on trouve la couche supérieure, accessible en écriture, qui contiendra toutes les modifications apportées à l’application.&lt;br /&gt;
{{Admon/tip||Au lancement d&#039;un conteneur exécutant une application à partir d’une image, Docker va monter le système de fichier de l’image souhaitée en lecture seule, et ajouter une couche accessible en écriture par dessus, via UnionFS.}}&lt;br /&gt;
On fait donc de sacrées économies de consommation puisque plusieurs conteneurs utilisant la même image de base utiliseront le même système de fichiers !&lt;br /&gt;
&lt;br /&gt;
==== Le Hub ====&lt;br /&gt;
&lt;br /&gt;
Le [https://hub.docker.com/ Hub Docker] est un GitHub pour les images Docker.&lt;br /&gt;
&lt;br /&gt;
Pour conserver les modifications apportées à l&#039;application, Il faut enregistrer celles-ci dans une nouvelle image qui sera uniquement composée des différences apportées. Cette image sera identifiée par Docker grâce à un numéro unique, et pourra être pousser (push) vers le dépôt public Docker.&lt;br /&gt;
&lt;br /&gt;
Le Docker Hub est aux images ce que git est au code. Les commandes sont les mêmes.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Installation du paquet RPM ===&lt;br /&gt;
Docker est supporté sur CentOS 6 et 7, avec de légères différences durant l&#039;installation. Il est vivement recommandé de partir d&#039;un hôte ayant les dernières mises à jour: &amp;lt;code&amp;gt;yum update&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;CentOS 6&#039;&#039;&#039;: paquet présent dans le dépôt &#039;&#039;&#039;EPEL&#039;&#039;&#039;&amp;lt;pre&amp;gt;yum install docker-io&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;CentOS 7&#039;&#039;&#039;: paquet présent dans le dépôt &#039;&#039;&#039;EPEL&#039;&#039;&#039;&amp;lt;pre&amp;gt;yum install docker&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Admon/warning|Version du noyau CentOS 6|Pour utiliser Docker sur CentOS6, il faut, au minimum, un noyau de version &#039;&#039;&#039;2.6.32-431&#039;&#039;&#039; car celui-ci contient des adaptations pour exécuter Docker.}}&lt;br /&gt;
&lt;br /&gt;
=== Exécuter Docker sans les droits root ===&lt;br /&gt;
&lt;br /&gt;
La documentation nous indique que le daemon Docker tourne toujours avec l’utilisateur root, et qu’il se connecte à une [https://fr.wikipedia.org/wiki/Berkeley_sockets#Types_de_sockets socket Unix] en lieu et place d’un socket TCP. L’utilisateur root est par défaut propriétaire de ce socket Unix, et ne peut donc être accessible qu’avec la commande sudo.&lt;br /&gt;
&lt;br /&gt;
Pour éviter d’utiliser sudo à tort et à travers, nous allons pouvoir créer un groupe Unix nommé &#039;&#039;&#039;docker&#039;&#039;&#039; pour nous y ajouter. Ainsi, les propriétés du daemon docker seront modifiées pour que celui-ci soit accessible en lecture / écriture pour les membres du groupe docker. Certes le daemon doit toujours fonctionner en tant que root, mais si nous utilisons le client docker en tant que membre du groupe docker, alors nous n’aurons plus besoin d’utiliser sudo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# On ajoute le groupe docker s&#039;il n&#039;existe pas déjà.&lt;br /&gt;
groupadd docker&lt;br /&gt;
 &lt;br /&gt;
# On ajoute l&#039;utilisateur courant (nous) &amp;quot;${USER}&amp;quot; au groupe.&lt;br /&gt;
# On peut y mettre n&#039;importe quel utilisateur&lt;br /&gt;
# Il faudra se reconnecter pour que les modifications prennent effet.&lt;br /&gt;
gpasswd -a ${USER} docker&lt;br /&gt;
 &lt;br /&gt;
# On redémarre le daemon.&lt;br /&gt;
service docker restart&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C’est du bonus hein… Cela permet aussi de gérer la [https://docs.docker.com/articles/security/#dockersecurity-daemon surface d’attaque] de Docker, mais vous pouvez très bien sauter cette étape et continuer à utiliser Docker avec sudo.&lt;br /&gt;
&lt;br /&gt;
=== Tests ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker version&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Client version: 1.7.1&lt;br /&gt;
Client API version: 1.19&lt;br /&gt;
Go version (client): go1.4.2&lt;br /&gt;
Git commit (client): 786b29d/1.7.1&lt;br /&gt;
OS/Arch (client): linux/amd64&lt;br /&gt;
Server version: 1.7.1&lt;br /&gt;
Server API version: 1.19&lt;br /&gt;
Go version (server): go1.4.2&lt;br /&gt;
Git commit (server): 786b29d/1.7.1&lt;br /&gt;
OS/Arch (server): linux/amd64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;docker info&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Images: 7&lt;br /&gt;
Storage Driver: devicemapper&lt;br /&gt;
 Pool Name: docker-253:0-1183660-pool&lt;br /&gt;
 Pool Blocksize: 65.54 kB&lt;br /&gt;
 Backing Filesystem: extfs&lt;br /&gt;
 Data file: /dev/loop0&lt;br /&gt;
 Metadata file: /dev/loop1&lt;br /&gt;
 Data Space Used: 957.5 MB&lt;br /&gt;
 Data Space Total: 107.4 GB&lt;br /&gt;
 Data Space Available: 24.65 GB&lt;br /&gt;
 Metadata Space Used: 1.507 MB&lt;br /&gt;
 Metadata Space Total: 2.147 GB&lt;br /&gt;
 Metadata Space Available: 2.146 GB&lt;br /&gt;
 Udev Sync Supported: true&lt;br /&gt;
 Deferred Removal Enabled: false&lt;br /&gt;
 Data loop file: /var/lib/docker/devicemapper/devicemapper/data&lt;br /&gt;
 Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata&lt;br /&gt;
 Library Version: 1.02.95-RHEL6 (2015-09-08)&lt;br /&gt;
Execution Driver: native-0.2&lt;br /&gt;
Logging Driver: json-file&lt;br /&gt;
Kernel Version: 2.6.32-573.22.1.el6.x86_64&lt;br /&gt;
Operating System: &amp;lt;unknown&amp;gt;&lt;br /&gt;
CPUs: 8&lt;br /&gt;
Total Memory: 7.685 GiB&lt;br /&gt;
Name: webdev-test.b2pweb.com&lt;br /&gt;
ID: TZXP:Z74H:7XCC:JMST:ZAKF:R5Y5:DSOR:JHGO:Z4GC:T3SZ:662F:3NR2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les conteneurs ==&lt;br /&gt;
&lt;br /&gt;
Pour récupérer une image, on va interroger le [https://hub.docker.com/ docker hub] pour lister toutes les images du registre:&lt;br /&gt;
&amp;lt;pre&amp;gt;docker search centos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED&lt;br /&gt;
centos                          The official build of CentOS.                   2147      [OK]       &lt;br /&gt;
jdeathe/centos-ssh              CentOS-6 6.7 x86_64 / CentOS-7 7.2.1511 x8...   20                   [OK]&lt;br /&gt;
jdeathe/centos-ssh-apache-php   CentOS-6 6.7 x86_64 / Apache / PHP / PHP M...   16                   [OK]&lt;br /&gt;
nimmis/java-centos              This is docker images of CentOS 7 with dif...   8                    [OK]&lt;br /&gt;
torusware/speedus-centos        Always updated official CentOS docker imag...   7                    [OK]&lt;br /&gt;
nickistre/centos-lamp           LAMP on centos setup                            3                    [OK]&lt;br /&gt;
centos/mariadb55-centos7                                                        3                    [OK]&lt;br /&gt;
[...]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Un grand nombre de résultats sont proposés. On observe que le premier résultat indique une image CentOS officielle, ce qui nous assure qu’elle a été validée par l’équipe de Docker. Les images gérées par l’équipe de Docker se remarquent par le format de leur nom, qui est de la forme nom-image alors que les &#039;&#039;&#039;non-officielles&#039;&#039;&#039; sont plutôt de la forme &#039;&#039;&#039;utilisateur/nom-image&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On récupère l&#039;image officielle CentOS 7 (latest)&lt;br /&gt;
&amp;lt;pre&amp;gt;docker pull centos&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
latest: Pulling from centos&lt;br /&gt;
47d44cb6f252: Pull complete &lt;br /&gt;
8aa7f4a1dd13: Pull complete &lt;br /&gt;
e0f5867add13: Pull complete &lt;br /&gt;
eeb3a076a0be: Pull complete &lt;br /&gt;
Digest: sha256:1b9adf413b3ab95ce430c2039954bb0db0c8e2672c48182f2c5b3d30373d5b71&lt;br /&gt;
Status: Downloaded newer image for centos:latest&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
ainsi quer la version 6&lt;br /&gt;
&amp;lt;pre&amp;gt;docker pull centos:6&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
6: Pulling from centos&lt;br /&gt;
9868edceea88: Pull complete &lt;br /&gt;
e0eab6e60b7e: Pull complete &lt;br /&gt;
61bf77ab8841: Pull complete &lt;br /&gt;
47d44cb6f252: Already exists &lt;br /&gt;
Digest: sha256:57f0027b92985edbd0eb87818b73d5dd771dd5955e6b794d624c8a79a4bd4795&lt;br /&gt;
Status: Downloaded newer image for centos:6&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On liste les images déjà téléchargées. La sortie de la commande suivante indique que nous avons récupéré les image portant l’ID 61bf77ab8841 et eeb3a076a0be dans le dépôt intitulé « centos ». Un ID permet d’identifier de manière unique la version d’une image. Ensuite, comme un ID n’est pas forcément explicite pour désigner une version, on lui affecte un ou plusieurs tags, ici « latest » et « 6 ». Plusieurs tags peuvent effectivement désigner la même image, mais chaque version d’image ne possède qu’un ID.&lt;br /&gt;
&amp;lt;pre&amp;gt;docker images&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
centos              6                   61bf77ab8841        2 weeks ago         228.9 MB&lt;br /&gt;
centos              latest              eeb3a076a0be        2 weeks ago         196.7 MB&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
L&#039;empilement peut être affiché avec l&#039;option &#039;&#039;&#039;--all&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;docker images --all&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE&lt;br /&gt;
centos              6                   61bf77ab8841        2 weeks ago         228.9 MB&lt;br /&gt;
&amp;lt;none&amp;gt;              &amp;lt;none&amp;gt;              e0eab6e60b7e        2 weeks ago         228.9 MB&lt;br /&gt;
&amp;lt;none&amp;gt;              &amp;lt;none&amp;gt;              9868edceea88        2 weeks ago         228.9 MB&lt;br /&gt;
centos              latest              eeb3a076a0be        2 weeks ago         196.7 MB&lt;br /&gt;
&amp;lt;none&amp;gt;              &amp;lt;none&amp;gt;              e0f5867add13        2 weeks ago         196.7 MB&lt;br /&gt;
&amp;lt;none&amp;gt;              &amp;lt;none&amp;gt;              8aa7f4a1dd13        2 weeks ago         196.7 MB&lt;br /&gt;
&amp;lt;none&amp;gt;              &amp;lt;none&amp;gt;              47d44cb6f252        7 months ago        0 B&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Les images intermédiaires correspondent aux différentes commandes qui ont été utilisées pour générer l’image finale. Ces commandes peuvent être affichées avec la commande history.&lt;br /&gt;
&amp;lt;pre&amp;gt;docker history centos:6&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT&lt;br /&gt;
61bf77ab8841        2 weeks ago         /bin/sh -c #(nop) CMD [&amp;quot;/bin/bash&amp;quot;]             0 B                 &lt;br /&gt;
e0eab6e60b7e        2 weeks ago         /bin/sh -c #(nop) LABEL name=CentOS Base Imag   0 B                 &lt;br /&gt;
9868edceea88        2 weeks ago         /bin/sh -c #(nop) ADD file:ae8f506cbd1f016c67   228.9 MB            &lt;br /&gt;
47d44cb6f252        7 months ago        /bin/sh -c #(nop) MAINTAINER The CentOS Proje   0 B&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Premiers lancements ===&lt;br /&gt;
&lt;br /&gt;
On lance notre premier conteneur. Évidemment l&#039;intérêt est purement éducatif, car celui-ci ne fera qu&#039;afficher &amp;lt;code&amp;gt;Hello World!&amp;lt;/code&amp;gt; et se terminera.&lt;br /&gt;
{{Admon/important|Durée de vie des conteneurs|La durée de vie d’un conteneur dépend directement du temps de vie des processus qui y sont exécutés.}}&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run centos:latest /bin/echo &#039;Hello World!&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hello World!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On lance maintenant l&#039;interpréteur Bash à l&#039;intérieur de notre conteneur. L&#039;option &#039;&#039;&#039;i&#039;&#039;&#039; laisse l&#039;entrée standard ouverte et l&#039;option &#039;&#039;&#039;t&#039;&#039;&#039; alloue un pseudo-terminal à la commande.&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -t -i centos:6 /bin/bash&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[root@a3bcca2ae195 /]# hostname&lt;br /&gt;
a3bcca2ae195&lt;br /&gt;
[root@a3bcca2ae195 /]# exit&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On liste nos conteneurs (l&#039;option -a permet d&#039;afficher tous les conteneurs car seul les actifs sont affiché par défaut).&lt;br /&gt;
&amp;lt;pre&amp;gt;docker ps -a&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS                          PORTS               NAMES&lt;br /&gt;
a3bcca2ae195        centos:6            &amp;quot;/bin/bash&amp;quot;            35 seconds ago       Exited (0) 12 seconds ago                           angry_goodall       &lt;br /&gt;
f947fb083eaa        centos:6            &amp;quot;/bin/echo &#039;Hello Wo   About a minute ago   Exited (0) About a minute ago                       ecstatic_kirch      &lt;br /&gt;
b6710cdfbcb1        centos:latest       &amp;quot;/bin/echo &#039;Hello Wo   About a minute ago   Exited (0) About a minute ago                       lonely_feynman&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut visualiser tous les détails d&#039;une image&lt;br /&gt;
&amp;lt;pre&amp;gt;docker inspect centos:6&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
{&lt;br /&gt;
    &amp;quot;Id&amp;quot;: &amp;quot;61bf77ab884102c059826f37af32b766aec3a0145af35dbc296bc33754e74757&amp;quot;,&lt;br /&gt;
    &amp;quot;Parent&amp;quot;: &amp;quot;e0eab6e60b7ea4336660dfcbc7ce837621f191d7d6ea587cdf225eecd2001dc6&amp;quot;,&lt;br /&gt;
    &amp;quot;Comment&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;Created&amp;quot;: &amp;quot;2016-04-01T21:29:01.147650406Z&amp;quot;,&lt;br /&gt;
    &amp;quot;Container&amp;quot;: &amp;quot;01a4934c6001e17bfa875876616d915ee5c7a2fdd094f63c4ff84c70a9da3c43&amp;quot;,&lt;br /&gt;
    &amp;quot;ContainerConfig&amp;quot;: {&lt;br /&gt;
        &amp;quot;Hostname&amp;quot;: &amp;quot;4d7e41fcce2c&amp;quot;,&lt;br /&gt;
        &amp;quot;Domainname&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;User&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;AttachStdin&amp;quot;: false,&lt;br /&gt;
        &amp;quot;AttachStdout&amp;quot;: false,&lt;br /&gt;
        &amp;quot;AttachStderr&amp;quot;: false,&lt;br /&gt;
        &amp;quot;PortSpecs&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ExposedPorts&amp;quot;: null,&lt;br /&gt;
        &amp;quot;Tty&amp;quot;: false,&lt;br /&gt;
        &amp;quot;OpenStdin&amp;quot;: false,&lt;br /&gt;
        &amp;quot;StdinOnce&amp;quot;: false,&lt;br /&gt;
        &amp;quot;Env&amp;quot;: null,&lt;br /&gt;
        &amp;quot;Cmd&amp;quot;: [&lt;br /&gt;
            &amp;quot;/bin/sh&amp;quot;,&lt;br /&gt;
            &amp;quot;-c&amp;quot;,&lt;br /&gt;
            &amp;quot;#(nop) CMD [\&amp;quot;/bin/bash\&amp;quot;]&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;Image&amp;quot;: &amp;quot;e0eab6e60b7ea4336660dfcbc7ce837621f191d7d6ea587cdf225eecd2001dc6&amp;quot;,&lt;br /&gt;
        &amp;quot;Volumes&amp;quot;: null,&lt;br /&gt;
        &amp;quot;VolumeDriver&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;WorkingDir&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;Entrypoint&amp;quot;: null,&lt;br /&gt;
        &amp;quot;NetworkDisabled&amp;quot;: false,&lt;br /&gt;
        &amp;quot;MacAddress&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;OnBuild&amp;quot;: null,&lt;br /&gt;
        &amp;quot;Labels&amp;quot;: {&lt;br /&gt;
            &amp;quot;build-date&amp;quot;: &amp;quot;2016-03-31&amp;quot;,&lt;br /&gt;
            &amp;quot;license&amp;quot;: &amp;quot;GPLv2&amp;quot;,&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;CentOS Base Image&amp;quot;,&lt;br /&gt;
            &amp;quot;vendor&amp;quot;: &amp;quot;CentOS&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;DockerVersion&amp;quot;: &amp;quot;1.9.1&amp;quot;,&lt;br /&gt;
    &amp;quot;Author&amp;quot;: &amp;quot;The CentOS Project \u003ccloud-ops@centos.org\u003e&amp;quot;,&lt;br /&gt;
    &amp;quot;Config&amp;quot;: {&lt;br /&gt;
        &amp;quot;Hostname&amp;quot;: &amp;quot;4d7e41fcce2c&amp;quot;,&lt;br /&gt;
        &amp;quot;Domainname&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;User&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;AttachStdin&amp;quot;: false,&lt;br /&gt;
        &amp;quot;AttachStdout&amp;quot;: false,&lt;br /&gt;
        &amp;quot;AttachStderr&amp;quot;: false,&lt;br /&gt;
        &amp;quot;PortSpecs&amp;quot;: null,&lt;br /&gt;
        &amp;quot;ExposedPorts&amp;quot;: null,&lt;br /&gt;
        &amp;quot;Tty&amp;quot;: false,&lt;br /&gt;
        &amp;quot;OpenStdin&amp;quot;: false,&lt;br /&gt;
        &amp;quot;StdinOnce&amp;quot;: false,&lt;br /&gt;
        &amp;quot;Env&amp;quot;: null,&lt;br /&gt;
        &amp;quot;Cmd&amp;quot;: [&lt;br /&gt;
            &amp;quot;/bin/bash&amp;quot;&lt;br /&gt;
        ],&lt;br /&gt;
        &amp;quot;Image&amp;quot;: &amp;quot;e0eab6e60b7ea4336660dfcbc7ce837621f191d7d6ea587cdf225eecd2001dc6&amp;quot;,&lt;br /&gt;
        &amp;quot;Volumes&amp;quot;: null,&lt;br /&gt;
        &amp;quot;VolumeDriver&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;WorkingDir&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;Entrypoint&amp;quot;: null,&lt;br /&gt;
        &amp;quot;NetworkDisabled&amp;quot;: false,&lt;br /&gt;
        &amp;quot;MacAddress&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;OnBuild&amp;quot;: null,&lt;br /&gt;
        &amp;quot;Labels&amp;quot;: {&lt;br /&gt;
            &amp;quot;build-date&amp;quot;: &amp;quot;2016-03-31&amp;quot;,&lt;br /&gt;
            &amp;quot;license&amp;quot;: &amp;quot;GPLv2&amp;quot;,&lt;br /&gt;
            &amp;quot;name&amp;quot;: &amp;quot;CentOS Base Image&amp;quot;,&lt;br /&gt;
            &amp;quot;vendor&amp;quot;: &amp;quot;CentOS&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
    },&lt;br /&gt;
    &amp;quot;Architecture&amp;quot;: &amp;quot;amd64&amp;quot;,&lt;br /&gt;
    &amp;quot;Os&amp;quot;: &amp;quot;linux&amp;quot;,&lt;br /&gt;
    &amp;quot;Size&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;VirtualSize&amp;quot;: 228912764&lt;br /&gt;
}&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Démonisation ===&lt;br /&gt;
&lt;br /&gt;
On va daemoniser notre conteneur avec l&#039;option &#039;&#039;&#039;d&#039;&#039;&#039;. Cette fois la sortie est l&#039;ID du conteneur.&lt;br /&gt;
&amp;lt;pre&amp;gt;docker run -t -i -d centos:6 /bin/bash&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;713ed98359e25eebd6316831d192c9094d5ec7b5bb8f1907ad444db8eabbb298&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de se simplifier la vie, on va obtenir son petit nom&lt;br /&gt;
&amp;lt;pre&amp;gt;docker ps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES&lt;br /&gt;
713ed98359e2        centos:6            &amp;quot;/bin/bash&amp;quot;         2 minutes ago       Up 2 minutes                            gloomy_jones&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pour visualiser la sortie standard de notre conteneur daemonisé, on lance la commande&lt;br /&gt;
** avec l&#039;ID&amp;lt;pre&amp;gt;docker logs 713ed98359e25eebd6316831d192c9094d5ec7b5bb8f1907ad444db8eabbb298&amp;lt;/pre&amp;gt;&lt;br /&gt;
** avec son nom&amp;lt;pre&amp;gt;docker logs gloomy_jones&amp;lt;/pre&amp;gt;&lt;br /&gt;
* On peut s&#039;attacher à ce conteneur&amp;lt;pre&amp;gt;docker attach gloomy_jones&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Le mettre en pause&amp;lt;pre&amp;gt;docker pause gloomy_jones&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Le sortir de sa léthargie imposée&amp;lt;pre&amp;gt;docker unpause gloomy_jones&amp;lt;/pre&amp;gt;&lt;br /&gt;
* L&#039;arrêter&amp;lt;pre&amp;gt;docker stop gloomy_jones&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Le renommer&amp;lt;pre&amp;gt;docker rename gloomy_jones centos6&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Le supprimer&amp;lt;pre&amp;gt;docker rm centos6&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Les commits ==&lt;br /&gt;
== Les liaisons ==&lt;br /&gt;
== Les volumes ==&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Fichier:Virtualisation-Container.png&amp;diff=3146</id>
		<title>Fichier:Virtualisation-Container.png</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Fichier:Virtualisation-Container.png&amp;diff=3146"/>
		<updated>2016-04-19T08:07:29Z</updated>

		<summary type="html">&lt;p&gt;Didier : Pile de la virtualisation par containeur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pile de la virtualisation par containeur&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Fichier:Virtualisation-Hyperviser.png&amp;diff=3145</id>
		<title>Fichier:Virtualisation-Hyperviser.png</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Fichier:Virtualisation-Hyperviser.png&amp;diff=3145"/>
		<updated>2016-04-19T08:07:16Z</updated>

		<summary type="html">&lt;p&gt;Didier : Pile de la virtualisation par hyperviseur&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pile de la virtualisation par hyperviseur&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Fichier:LogoDocker.png&amp;diff=3144</id>
		<title>Fichier:LogoDocker.png</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Fichier:LogoDocker.png&amp;diff=3144"/>
		<updated>2016-04-19T08:06:43Z</updated>

		<summary type="html">&lt;p&gt;Didier : Logo Docker&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Logo Docker&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=RPM&amp;diff=3143</id>
		<title>RPM</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=RPM&amp;diff=3143"/>
		<updated>2016-02-26T09:44:51Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Commande rpm */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Admon/tip|&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;Fedora Packaging&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;|&lt;br /&gt;
* [https://admin.fedoraproject.org FAS Account]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Packaging:Guidelines Guidelines]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Changes/FormatSecurity Format Security]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Package_SCM_admin_requests SCM Requests]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Using_Fedora_GIT Using git and fedpkg]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Using_the_Koji_build_system Using the Koji build system]&lt;br /&gt;
* [https://admin.fedoraproject.org/pkgdb Package Database]: manage contact, package admins (bodhi), etc...&lt;br /&gt;
* [http://fedoraproject.org/wiki/New_package_process_for_existing_contributors Package process for existing contributors]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Package_Review_Process Package Review Process]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Join_the_package_collection_maintainers Join the package collection maintainers]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Package_update_HOWTO Updating Package HowTo]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Commande rpm ==&lt;br /&gt;
* [[RPM/Using|Utiliser la commande &amp;lt;app&amp;gt;rpm&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/UsingYum|Utiliser la commande &amp;lt;app&amp;gt;yum&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/DNF/FAQ| F.A.Q. concernant &amp;lt;app&amp;gt;dnf&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/DNFvYUM|Comparatif de &amp;lt;app&amp;gt;dnf&amp;lt;/app&amp;gt; et de &amp;lt;app&amp;gt;yum&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/Troubleshooting|Gérer les problèmes liés aux RPMs]]&lt;br /&gt;
&lt;br /&gt;
== Spec file ==&lt;br /&gt;
* [[RPM/Spec|Fichiers Spec]]&lt;br /&gt;
&lt;br /&gt;
== Building environment ==&lt;br /&gt;
* [[RPM/Environnement|Building Environment]]&lt;br /&gt;
&lt;br /&gt;
== Packaging Guideline ==&lt;br /&gt;
* [[RPM/Guidelines|Packaging Guidelines]], which contains &#039;&#039;&#039;MUST&#039;&#039;&#039; and &#039;&#039;&#039;SHOULD&#039;&#039;&#039; check list&lt;br /&gt;
&lt;br /&gt;
== Rpmlint ==&lt;br /&gt;
* [[RPM/rpmlinterror|Common errors with rpmlint]]&lt;br /&gt;
&lt;br /&gt;
== Mock ==&lt;br /&gt;
*Configuration example about [[RPM/Mock|Mock]]&lt;br /&gt;
&lt;br /&gt;
== Makefile ==&lt;br /&gt;
* Fichier commun [[RPM/CommonMakefile|Makefile]]&lt;br /&gt;
&lt;br /&gt;
== Sign RPM ==&lt;br /&gt;
* [[RPM/Sign|Sign RPM]]&lt;br /&gt;
&lt;br /&gt;
== Koji ==&lt;br /&gt;
{{:Koji}}&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=RPM/Troubleshooting&amp;diff=3142</id>
		<title>RPM/Troubleshooting</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=RPM/Troubleshooting&amp;diff=3142"/>
		<updated>2016-02-26T09:44:38Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « == Problèmes de dépendances ==  Pour visualiser les dépendances d&amp;#039;un paquet &amp;lt;pre&amp;gt;yum deplist &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt; ou &amp;lt;pre&amp;gt;rpm -q --required &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;  == Problèmes su... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Problèmes de dépendances ==&lt;br /&gt;
&lt;br /&gt;
Pour visualiser les dépendances d&#039;un paquet&lt;br /&gt;
&amp;lt;pre&amp;gt;yum deplist &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
ou&lt;br /&gt;
&amp;lt;pre&amp;gt;rpm -q --required &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problèmes suite à une mise à jour ==&lt;br /&gt;
&lt;br /&gt;
On essaie de remettre une version plus ancienne&lt;br /&gt;
&amp;lt;pre&amp;gt;yum downgrade &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
ou&lt;br /&gt;
&amp;lt;pre&amp;gt;rpm -Uvh --oldpackage [--force] &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut maintenant visualiser les mises à jour disponibles&lt;br /&gt;
&amp;lt;pre&amp;gt;yum list updates &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si le problème est résolu, on peut bloquer la version pour ce paquet.&lt;br /&gt;
# On installe le plugin yum/dnf&lt;br /&gt;
#* Yum &amp;lt;pre&amp;gt;yum install yum-plugin-versionlock&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* Dnf &amp;lt;pre&amp;gt;dnf install &#039;dnf-command(versionlock)&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On bloque la version&amp;lt;pre&amp;gt;yum versionlock add &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Commandes utiles pour gérer les verrous&lt;br /&gt;
* Lister les verrous&amp;lt;pre&amp;gt;yum versionlock list&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Débloquer le verrou d&#039;un paquet&amp;lt;pre&amp;gt;yum versionlock del &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Débloquer tous les verrous&amp;lt;pre&amp;gt;yum versionlock clear&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Problèmes de Bases de données RPM corrompues ==&lt;br /&gt;
&lt;br /&gt;
# On supprime les blocage: fermeture (normale puis forcée si besoin) des programmes utilisant les bases&amp;lt;pre&amp;gt;lsof | grep /var/lib/rpm&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On supprime les index&amp;lt;pre&amp;gt;rm -f /var/lib/rpm/__db.00*&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On vérifie l&#039;intégrité des bases de données&amp;lt;pre&amp;gt;/usr/lib/rpm/rpmdb_verify /var/lib/rpm/*&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Si une base est corrompue, on peut importer une base à partir d&#039;un export de celle qui est corrompue&amp;lt;pre&amp;gt;mv /var/lib/rpm/Packages /var/lib/rpm/packages.bad&amp;lt;/pre&amp;gt;&amp;lt;pre&amp;gt;/usr/lib/rpm/rpmdb_dump /var/lib/rpm/Packages.bad | /usr/lib/rpm/rpmdb_load /var/lib/rpm/Packages&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On reconstruit les index&amp;lt;pre&amp;gt;rpm -v --rebuilddb&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vérification des paquets installés et résolution des différences ==&lt;br /&gt;
&lt;br /&gt;
Pour vérifier que les fichiers d&#039;un paquet RPM soient d&#039;origine, on lance la commande suivante et elle ne doit pas donner de sortie si les fichiers ne sont modifiés.&lt;br /&gt;
L&#039;option -v affichera tous les fichiers (y compris ceux qui ne sont pas modifiés)&lt;br /&gt;
&amp;lt;pre&amp;gt;rpm -V &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
De même on peut vérifier tout le système&lt;br /&gt;
&amp;lt;pre&amp;gt;rpm -Va &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut aller plus loin avec yum en installant un plugin&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install yum-plugin-verify&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
et ainsi vérifier le paquet avec l&#039;argument&lt;br /&gt;
* &#039;&#039;&#039;verify&#039;&#039;&#039;: vérifier l&#039;absence de doublon dans les versions et la non-modificcation de fichier (sauf les fichiers de configuration) pour ce paquet&lt;br /&gt;
* &#039;&#039;&#039;verify-rpm&#039;&#039;&#039;: chercher toutes les modifications par rapport au paquet:&lt;br /&gt;
** &#039;&#039;&#039;S&#039;&#039;&#039;: taille (file Size differs)&lt;br /&gt;
** &#039;&#039;&#039;M&#039;&#039;&#039;: permissions (Mode differs,includes permissions and file type)&lt;br /&gt;
** &#039;&#039;&#039;5&#039;&#039;&#039;: somme de contrôle (en général MD5) (5 digest (formerly MD5 sum) differs)&lt;br /&gt;
** &#039;&#039;&#039;D&#039;&#039;&#039;: Numéro majeure et mineure pour les fichiers de périphérique de &amp;lt;path&amp;gt;/dev&amp;lt;/path&amp;gt; (Device major/minor number mismatch)&lt;br /&gt;
** &#039;&#039;&#039;L&#039;&#039;&#039;: cible d&#039;un lien symbolique (readlink path mismatch)&lt;br /&gt;
** &#039;&#039;&#039;U&#039;&#039;&#039;: propriétaire (User ownership differs)&lt;br /&gt;
** &#039;&#039;&#039;G&#039;&#039;&#039;: groupe (Group ownership differs)&lt;br /&gt;
** &#039;&#039;&#039;T&#039;&#039;&#039;: date de dernière modification (mTime differs)&lt;br /&gt;
** &#039;&#039;&#039;P&#039;&#039;&#039;: capacités (caPabilities differ): exemple le paquet &amp;lt;package&amp;gt;apache&amp;lt;/package&amp;gt; a comme capacité supplémentaire webserver&lt;br /&gt;
* &#039;&#039;&#039;all&#039;&#039;&#039;: lance les deux vérifications précédentes&lt;br /&gt;
&lt;br /&gt;
exemple &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rpm -Vv b2pweb-release&lt;br /&gt;
.........  c /etc/pki/rpm-gpg/RPM-GPG-KEY-B2PWEB-7&lt;br /&gt;
S.5....T.  c /etc/yum.repos.d/b2pweb.repo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On peut voir que le fichier &amp;lt;path&amp;gt;/etc/pki/rpm-gpg/RPM-GPG-KEY-B2PWEB-7&amp;lt;/path&amp;gt; est d&#039;origine, alors que le fichier &amp;lt;path&amp;gt;/etc/yum.repos.d/b2pweb.repo&amp;lt;/path&amp;gt; a été modifié: Taille (S),  checksum (5) et mtime (T) différents.&lt;br /&gt;
&lt;br /&gt;
et maintenant avec yum&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum verify b2pweb-release&lt;br /&gt;
Modules complémentaires chargés : fastestmirror, verify&lt;br /&gt;
verify done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Pas de doublon pour ce paquet (multilib, etc...) et les fichiers ne sont pas modifiés (hormis les fichiers de configuration, ce qui est le cas pour  &amp;lt;path&amp;gt;/etc/yum.repos.d/b2pweb.repo&amp;lt;/path&amp;gt;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum verify-rpm b2pweb-release&lt;br /&gt;
Modules complémentaires chargés : fastestmirror, verify&lt;br /&gt;
==================== Installed Packages ====================&lt;br /&gt;
b2pweb-release.noarch : B2PWeb repository&lt;br /&gt;
    File: /etc/yum.repos.d/b2pweb.repo&lt;br /&gt;
    Tags: configuration&lt;br /&gt;
        Problem:  checksum does not match&lt;br /&gt;
        Current:  sha256:376f90323acef154dc7f57e087d71522f85f4ce0422a482fcc8f067ef254f94b&lt;br /&gt;
        Original: sha256:196f897a18f425ed006f1fba965ff7e769e413f42eeea6a4aafe82d0e4c2ba21&lt;br /&gt;
                                   --------                                   &lt;br /&gt;
        Problem:  size does not match&lt;br /&gt;
        Current:  452  &lt;br /&gt;
        Original: 402  &lt;br /&gt;
                                   --------                                   &lt;br /&gt;
        Problem:  mtime does not match&lt;br /&gt;
        Current:  Fri Jan 29 11:40:03 2016 (279 days, 22:56:31 later)&lt;br /&gt;
        Original: Fri Apr 24 12:43:32 2015&lt;br /&gt;
verify-rpm done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Là on voit mieux ce qui a été modifié&lt;br /&gt;
&lt;br /&gt;
On peut simplement remettre les permissions d&#039;origine avec la commande&lt;br /&gt;
&amp;lt;pre&amp;gt;rpm --setperms &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
et les bon propriétaires/groupes&lt;br /&gt;
&amp;lt;pre&amp;gt;rpm --setugids &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ou avec yum, on ré-installe le tout, mais il faudra gérer les fichiers avec l&#039;extension &#039;&#039;rpmnew&#039;&#039; et &#039;&#039;rpmsave&#039;&#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;yum reinstall &amp;lt;PACKAGE&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3140</id>
		<title>IDS/Tripwire</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3140"/>
		<updated>2016-01-20T10:11:23Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Décrypter un rapport */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation est triviale car le paquet est présent dans les dépôts de base Fedora et dans les dépôts &#039;&#039;&#039;[[Distributions#D.C3.A9p.C3.B4ts_Additionnels_2|EPEL]]&#039;&#039;&#039; pour CentOS.&lt;br /&gt;
 yum install tripwire&lt;br /&gt;
&lt;br /&gt;
== Initialisation de l&#039;application ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation via RPM installe un fichier de configuration et un fichier définissant la politique par défaut dans le dossier &amp;lt;path&amp;gt;/etc/tripwire&amp;lt;/path&amp;gt;. Ces fichiers ne peuvent être utilisés directement par tripwire, car celui-ci travaille avec des fichiers cryptés.&lt;br /&gt;
&lt;br /&gt;
La documentation (la page man de tripwire contient toutes les informations nécessaires) nous apprend qu&#039;il va nous falloir 2 clés:&lt;br /&gt;
* &#039;&#039;&#039;site.key&#039;&#039;&#039;: Une clé servant à encrypter le fichier de définition de la politique sur un ou plusieurs systèmes&lt;br /&gt;
* &#039;&#039;&#039;hostname-local.key&#039;&#039;&#039;: Une autre clé servant uniquement à crypter les fichiers utilisés localement (il est donc unique sur chaque système)&lt;br /&gt;
Suivant l&#039;opération à effectuer, une ou deux clés seront requises.&lt;br /&gt;
&lt;br /&gt;
=== Méthode manuelle ===&lt;br /&gt;
&lt;br /&gt;
Génération de deux clés&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m G -v -S /etc/tripwire/site.key -Q passphrase&lt;br /&gt;
twadmin -m G -v -L /etc/tripwire/hostname-local.key -P passphrase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les clés générées, on va pouvoir encrypter le fichier de configuration et le fichier définissant la politique. C&#039;est une protection contre la modification des fichiers par un éventuelle attaquant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twcfg.txt&lt;br /&gt;
twadmin -m P -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twpol.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Avec un Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tripwire-setup-keyfiles&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
The Tripwire site and local passphrases are used to sign a  variety  of&lt;br /&gt;
files, such as the configuration, policy, and database files.&lt;br /&gt;
&lt;br /&gt;
Passphrases should be at least 8 characters in length and contain  both&lt;br /&gt;
letters and numbers.&lt;br /&gt;
&lt;br /&gt;
See the Tripwire manual for more information.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Creating key files...&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the site keyfile passphrase:&lt;br /&gt;
Verify the site keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the local keyfile passphrase:&lt;br /&gt;
Verify the local keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing configuration file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote configuration file: /etc/tripwire/tw.cfg&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire configuration file:&lt;br /&gt;
/etc/tripwire/twcfg.txt&lt;br /&gt;
has been preserved for your inspection.  It  is  recommended  that  you&lt;br /&gt;
move this file to a secure location and/or encrypt it in place (using a&lt;br /&gt;
tool such as GPG, for example) after you have examined it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing policy file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote policy file: /etc/tripwire/tw.pol&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire policy file:&lt;br /&gt;
/etc/tripwire/twpol.txt&lt;br /&gt;
has been preserved for  your  inspection.  This  implements  a  minimal&lt;br /&gt;
policy, intended only to test  essential  Tripwire  functionality.  You&lt;br /&gt;
should edit the policy file to  describe  your  system,  and  then  use&lt;br /&gt;
twadmin to generate a new signed copy of the Tripwire policy.&lt;br /&gt;
&lt;br /&gt;
Once you have a satisfactory Tripwire policy file, you should move  the&lt;br /&gt;
clear-text version to a secure location  and/or  encrypt  it  in  place&lt;br /&gt;
(using a tool such as GPG, for example).&lt;br /&gt;
&lt;br /&gt;
Now run &amp;quot;tripwire --init&amp;quot; to enter Database Initialization  Mode.  This&lt;br /&gt;
reads the policy file, generates a database based on its contents,  and&lt;br /&gt;
then cryptographically signs the resulting  database.  Options  can  be&lt;br /&gt;
entered on the command line to specify which policy, configuration, and&lt;br /&gt;
key files are used  to  create  the  database.  The  filename  for  the&lt;br /&gt;
database can be specified as well. If no  options  are  specified,  the&lt;br /&gt;
default values from the current configuration file are used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
=== Premier lancement ===&lt;br /&gt;
&lt;br /&gt;
On va lancer la génération de la base avec la politique par défaut, l&#039;affinage se fera dans un second temps, après la première vérification.&lt;br /&gt;
 tripwire --init&lt;br /&gt;
 &lt;br /&gt;
Le premier rapport de tripwire va contenir beaucoup de faux-positif, car la politique par défaut est généraliste.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Warning: File system error.&lt;br /&gt;
### Filename: /usr/sbin/fixrmtab&lt;br /&gt;
### Aucun fichier ou dossier de ce type&lt;br /&gt;
### Continuing...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On va donc lister tous les fichiers inexistant en générant un rapport de vérification&lt;br /&gt;
 tripwire --check | grep &#039;### Filename&#039; | tee twtest.txt&lt;br /&gt;
et commenter les fichiers inexistants dans le fichier de définition de la politique &amp;lt;path&amp;gt;/etc/tripwire/twpol.txt&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification de la politique ===&lt;br /&gt;
&lt;br /&gt;
Une fois le fichier de définition de la politique modifié, il faut l&#039;encrypter et ré-initialiser la base de données&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin --update-policy /etc/tripwire/twpol.txt&lt;br /&gt;
tripwire --init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification sur le système ===&lt;br /&gt;
&lt;br /&gt;
Une fois le système modifié, suite à une mise à jour par exemple, il faut mettre à jour la base de données de tripwire en acceptant les modifications d&#039;un rapport (en général le dernier rapport créé) servant de référence.&lt;br /&gt;
&lt;br /&gt;
Tripwire ne va mettre à jour que les éléments rapportés dans ce rapport (ajout/suppression/modification), ce qui rend l&#039;opération très rapide.&lt;br /&gt;
 tripwire --update -a --twrfile /var/lib/tripwire/report/localhost-lastest.twr&lt;br /&gt;
&lt;br /&gt;
=== Décrypter un rapport ===&lt;br /&gt;
&lt;br /&gt;
Les rapports tripwire (localisés dans &amp;lt;path&amp;gt;/var/lib/tripwire/report/&amp;lt;/path&amp;gt;) étant cryptés, la lecture doit se faire à l&#039;aide d&#039;un utilitaire fournit par le paquet tripwire&lt;br /&gt;
 twprint --print-report --twrfile /var/lib/tripwire/report/localhost-lastest.twr&lt;br /&gt;
&lt;br /&gt;
=== Génération manuelle de signature ===&lt;br /&gt;
&lt;br /&gt;
Le paquet tripwire fournit un utilitaire calculant les sommes de contrôle d&#039;un fichier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
siggen /root/.bashrc &lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
Signatures for file: /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
CRC32               BHT0Cs&lt;br /&gt;
MD5                 CwY+CrtjstBa28sj0FsHBr&lt;br /&gt;
SHA                 ACvBSZWywMS6n4W44NqHgCigQGz&lt;br /&gt;
HAVAL               AocbY3K9hcyO229F8iRtCk&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Durcissement de la sécurité ==&lt;br /&gt;
&lt;br /&gt;
* Tripwire ne peut que constater la modification des fichiers et doit donc être installé/configuré en même temps que la distribution.&lt;br /&gt;
* Tripwire n&#039;utilise que la version cryptée des fichier de configuration et de définition de la politique. C&#039;est pourquoi il est recommandé de supprimé les fichiers &#039;&#039;en clair&#039;&#039;&amp;lt;pre&amp;gt;rm /etc/tripwire/twpol.txt /etc/tripwire/twcfg.txt&amp;lt;/pre&amp;gt;Les fichiers peuvent être générés à partir de leur version cryptée.&amp;lt;pre&amp;gt;twadmin -m p &amp;gt; /etc/tripwire/twpol.txt&amp;lt;/pre&amp;gt;&amp;lt;pre&amp;gt;twadmin -m f &amp;gt; /etc/tripwire/twcfg.txt&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3139</id>
		<title>IDS/Tripwire</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3139"/>
		<updated>2016-01-20T10:09:55Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation est triviale car le paquet est présent dans les dépôts de base Fedora et dans les dépôts &#039;&#039;&#039;[[Distributions#D.C3.A9p.C3.B4ts_Additionnels_2|EPEL]]&#039;&#039;&#039; pour CentOS.&lt;br /&gt;
 yum install tripwire&lt;br /&gt;
&lt;br /&gt;
== Initialisation de l&#039;application ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation via RPM installe un fichier de configuration et un fichier définissant la politique par défaut dans le dossier &amp;lt;path&amp;gt;/etc/tripwire&amp;lt;/path&amp;gt;. Ces fichiers ne peuvent être utilisés directement par tripwire, car celui-ci travaille avec des fichiers cryptés.&lt;br /&gt;
&lt;br /&gt;
La documentation (la page man de tripwire contient toutes les informations nécessaires) nous apprend qu&#039;il va nous falloir 2 clés:&lt;br /&gt;
* &#039;&#039;&#039;site.key&#039;&#039;&#039;: Une clé servant à encrypter le fichier de définition de la politique sur un ou plusieurs systèmes&lt;br /&gt;
* &#039;&#039;&#039;hostname-local.key&#039;&#039;&#039;: Une autre clé servant uniquement à crypter les fichiers utilisés localement (il est donc unique sur chaque système)&lt;br /&gt;
Suivant l&#039;opération à effectuer, une ou deux clés seront requises.&lt;br /&gt;
&lt;br /&gt;
=== Méthode manuelle ===&lt;br /&gt;
&lt;br /&gt;
Génération de deux clés&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m G -v -S /etc/tripwire/site.key -Q passphrase&lt;br /&gt;
twadmin -m G -v -L /etc/tripwire/hostname-local.key -P passphrase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les clés générées, on va pouvoir encrypter le fichier de configuration et le fichier définissant la politique. C&#039;est une protection contre la modification des fichiers par un éventuelle attaquant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twcfg.txt&lt;br /&gt;
twadmin -m P -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twpol.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Avec un Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tripwire-setup-keyfiles&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
The Tripwire site and local passphrases are used to sign a  variety  of&lt;br /&gt;
files, such as the configuration, policy, and database files.&lt;br /&gt;
&lt;br /&gt;
Passphrases should be at least 8 characters in length and contain  both&lt;br /&gt;
letters and numbers.&lt;br /&gt;
&lt;br /&gt;
See the Tripwire manual for more information.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Creating key files...&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the site keyfile passphrase:&lt;br /&gt;
Verify the site keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the local keyfile passphrase:&lt;br /&gt;
Verify the local keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing configuration file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote configuration file: /etc/tripwire/tw.cfg&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire configuration file:&lt;br /&gt;
/etc/tripwire/twcfg.txt&lt;br /&gt;
has been preserved for your inspection.  It  is  recommended  that  you&lt;br /&gt;
move this file to a secure location and/or encrypt it in place (using a&lt;br /&gt;
tool such as GPG, for example) after you have examined it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing policy file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote policy file: /etc/tripwire/tw.pol&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire policy file:&lt;br /&gt;
/etc/tripwire/twpol.txt&lt;br /&gt;
has been preserved for  your  inspection.  This  implements  a  minimal&lt;br /&gt;
policy, intended only to test  essential  Tripwire  functionality.  You&lt;br /&gt;
should edit the policy file to  describe  your  system,  and  then  use&lt;br /&gt;
twadmin to generate a new signed copy of the Tripwire policy.&lt;br /&gt;
&lt;br /&gt;
Once you have a satisfactory Tripwire policy file, you should move  the&lt;br /&gt;
clear-text version to a secure location  and/or  encrypt  it  in  place&lt;br /&gt;
(using a tool such as GPG, for example).&lt;br /&gt;
&lt;br /&gt;
Now run &amp;quot;tripwire --init&amp;quot; to enter Database Initialization  Mode.  This&lt;br /&gt;
reads the policy file, generates a database based on its contents,  and&lt;br /&gt;
then cryptographically signs the resulting  database.  Options  can  be&lt;br /&gt;
entered on the command line to specify which policy, configuration, and&lt;br /&gt;
key files are used  to  create  the  database.  The  filename  for  the&lt;br /&gt;
database can be specified as well. If no  options  are  specified,  the&lt;br /&gt;
default values from the current configuration file are used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
=== Premier lancement ===&lt;br /&gt;
&lt;br /&gt;
On va lancer la génération de la base avec la politique par défaut, l&#039;affinage se fera dans un second temps, après la première vérification.&lt;br /&gt;
 tripwire --init&lt;br /&gt;
 &lt;br /&gt;
Le premier rapport de tripwire va contenir beaucoup de faux-positif, car la politique par défaut est généraliste.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Warning: File system error.&lt;br /&gt;
### Filename: /usr/sbin/fixrmtab&lt;br /&gt;
### Aucun fichier ou dossier de ce type&lt;br /&gt;
### Continuing...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On va donc lister tous les fichiers inexistant en générant un rapport de vérification&lt;br /&gt;
 tripwire --check | grep &#039;### Filename&#039; | tee twtest.txt&lt;br /&gt;
et commenter les fichiers inexistants dans le fichier de définition de la politique &amp;lt;path&amp;gt;/etc/tripwire/twpol.txt&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification de la politique ===&lt;br /&gt;
&lt;br /&gt;
Une fois le fichier de définition de la politique modifié, il faut l&#039;encrypter et ré-initialiser la base de données&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin --update-policy /etc/tripwire/twpol.txt&lt;br /&gt;
tripwire --init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification sur le système ===&lt;br /&gt;
&lt;br /&gt;
Une fois le système modifié, suite à une mise à jour par exemple, il faut mettre à jour la base de données de tripwire en acceptant les modifications d&#039;un rapport (en général le dernier rapport créé) servant de référence.&lt;br /&gt;
&lt;br /&gt;
Tripwire ne va mettre à jour que les éléments rapportés dans ce rapport (ajout/suppression/modification), ce qui rend l&#039;opération très rapide.&lt;br /&gt;
 tripwire --update -a --twrfile /var/lib/tripwire/report/localhost-lastest.twr&lt;br /&gt;
&lt;br /&gt;
=== Décrypter un rapport ===&lt;br /&gt;
&lt;br /&gt;
Les rapports tripwire (localisé dans &amp;lt;path&amp;gt;/var/lib/tripwire/report/&amp;lt;/path&amp;gt;) étant cryptés, la lecture doit se faire à l&#039;aide d&#039;un utilitaire&lt;br /&gt;
 twprint --print-report --twrfile /var/lib/tripwire/report/localhost-lastest.twr&lt;br /&gt;
&lt;br /&gt;
=== Génération manuelle de signature ===&lt;br /&gt;
&lt;br /&gt;
Le paquet tripwire fournit un utilitaire calculant les sommes de contrôle d&#039;un fichier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
siggen /root/.bashrc &lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
Signatures for file: /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
CRC32               BHT0Cs&lt;br /&gt;
MD5                 CwY+CrtjstBa28sj0FsHBr&lt;br /&gt;
SHA                 ACvBSZWywMS6n4W44NqHgCigQGz&lt;br /&gt;
HAVAL               AocbY3K9hcyO229F8iRtCk&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Durcissement de la sécurité ==&lt;br /&gt;
&lt;br /&gt;
* Tripwire ne peut que constater la modification des fichiers et doit donc être installé/configuré en même temps que la distribution.&lt;br /&gt;
* Tripwire n&#039;utilise que la version cryptée des fichier de configuration et de définition de la politique. C&#039;est pourquoi il est recommandé de supprimé les fichiers &#039;&#039;en clair&#039;&#039;&amp;lt;pre&amp;gt;rm /etc/tripwire/twpol.txt /etc/tripwire/twcfg.txt&amp;lt;/pre&amp;gt;Les fichiers peuvent être générés à partir de leur version cryptée.&amp;lt;pre&amp;gt;twadmin -m p &amp;gt; /etc/tripwire/twpol.txt&amp;lt;/pre&amp;gt;&amp;lt;pre&amp;gt;twadmin -m f &amp;gt; /etc/tripwire/twcfg.txt&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3138</id>
		<title>IDS/Tripwire</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3138"/>
		<updated>2016-01-20T10:09:19Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Modification sur le système */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation est triviale car le paquet est présent dans les dépôts de base Fedora et dans les dépôts &#039;&#039;&#039;[[Distributions#D.C3.A9p.C3.B4ts_Additionnels_2|EPEL]]&#039;&#039;&#039; pour CentOS.&lt;br /&gt;
 yum install tripwire&lt;br /&gt;
&lt;br /&gt;
== Initialisation de l&#039;application ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation via RPM installe un fichier de configuration et un fichier définissant la politique par défaut dans le dossier &amp;lt;path&amp;gt;/etc/tripwire&amp;lt;/path&amp;gt;. Ces fichiers ne peuvent être utilisés directement par tripwire, car celui-ci travaille avec des fichiers cryptés.&lt;br /&gt;
&lt;br /&gt;
La documentation (la page man de tripwire contient toutes les informations nécessaires) nous apprend qu&#039;il va nous falloir 2 clés:&lt;br /&gt;
* &#039;&#039;&#039;site.key&#039;&#039;&#039;: Une clé servant à encrypter le fichier de définition de la politique sur un ou plusieurs systèmes&lt;br /&gt;
* &#039;&#039;&#039;hostname-local.key&#039;&#039;&#039;: Une autre clé servant uniquement à crypter les fichiers utilisés localement (il est donc unique sur chaque système)&lt;br /&gt;
Suivant l&#039;opération à effectuer, une ou deux clés seront requises.&lt;br /&gt;
&lt;br /&gt;
=== Méthode manuelle ===&lt;br /&gt;
&lt;br /&gt;
Génération de deux clés&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m G -v -S /etc/tripwire/site.key -Q passphrase&lt;br /&gt;
twadmin -m G -v -L /etc/tripwire/hostname-local.key -P passphrase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les clés générées, on va pouvoir encrypter le fichier de configuration et le fichier définissant la politique. C&#039;est une protection contre la modification des fichiers par un éventuelle attaquant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twcfg.txt&lt;br /&gt;
twadmin -m P -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twpol.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Avec un Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tripwire-setup-keyfiles&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
The Tripwire site and local passphrases are used to sign a  variety  of&lt;br /&gt;
files, such as the configuration, policy, and database files.&lt;br /&gt;
&lt;br /&gt;
Passphrases should be at least 8 characters in length and contain  both&lt;br /&gt;
letters and numbers.&lt;br /&gt;
&lt;br /&gt;
See the Tripwire manual for more information.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Creating key files...&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the site keyfile passphrase:&lt;br /&gt;
Verify the site keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the local keyfile passphrase:&lt;br /&gt;
Verify the local keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing configuration file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote configuration file: /etc/tripwire/tw.cfg&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire configuration file:&lt;br /&gt;
/etc/tripwire/twcfg.txt&lt;br /&gt;
has been preserved for your inspection.  It  is  recommended  that  you&lt;br /&gt;
move this file to a secure location and/or encrypt it in place (using a&lt;br /&gt;
tool such as GPG, for example) after you have examined it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing policy file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote policy file: /etc/tripwire/tw.pol&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire policy file:&lt;br /&gt;
/etc/tripwire/twpol.txt&lt;br /&gt;
has been preserved for  your  inspection.  This  implements  a  minimal&lt;br /&gt;
policy, intended only to test  essential  Tripwire  functionality.  You&lt;br /&gt;
should edit the policy file to  describe  your  system,  and  then  use&lt;br /&gt;
twadmin to generate a new signed copy of the Tripwire policy.&lt;br /&gt;
&lt;br /&gt;
Once you have a satisfactory Tripwire policy file, you should move  the&lt;br /&gt;
clear-text version to a secure location  and/or  encrypt  it  in  place&lt;br /&gt;
(using a tool such as GPG, for example).&lt;br /&gt;
&lt;br /&gt;
Now run &amp;quot;tripwire --init&amp;quot; to enter Database Initialization  Mode.  This&lt;br /&gt;
reads the policy file, generates a database based on its contents,  and&lt;br /&gt;
then cryptographically signs the resulting  database.  Options  can  be&lt;br /&gt;
entered on the command line to specify which policy, configuration, and&lt;br /&gt;
key files are used  to  create  the  database.  The  filename  for  the&lt;br /&gt;
database can be specified as well. If no  options  are  specified,  the&lt;br /&gt;
default values from the current configuration file are used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
=== Premier lancement ===&lt;br /&gt;
&lt;br /&gt;
On va lancer la génération de la base avec la politique par défaut, l&#039;affinage se fera dans un second temps, après la première vérification.&lt;br /&gt;
 tripwire --init&lt;br /&gt;
 &lt;br /&gt;
Le premier rapport de tripwire va contenir beaucoup de faux-positif, car la politique par défaut est généraliste.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Warning: File system error.&lt;br /&gt;
### Filename: /usr/sbin/fixrmtab&lt;br /&gt;
### Aucun fichier ou dossier de ce type&lt;br /&gt;
### Continuing...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On va donc lister tous les fichiers inexistant en générant un rapport de vérification&lt;br /&gt;
 tripwire --check | grep &#039;### Filename&#039; | tee twtest.txt&lt;br /&gt;
et commenter les fichiers inexistants dans le fichier de définition de la politique &amp;lt;path&amp;gt;/etc/tripwire/twpol.txt&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification de la politique ===&lt;br /&gt;
&lt;br /&gt;
Une fois le fichier de définition de la politique modifié, il faut l&#039;encrypter et ré-initialiser la base de données&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin --update-policy /etc/tripwire/twpol.txt&lt;br /&gt;
tripwire --init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Modification sur le système ===&lt;br /&gt;
&lt;br /&gt;
Une fois le système modifié, suite à une mise à jour par exemple, il faut mettre à jour la base de données de tripwire en acceptant les modifications d&#039;un rapport (en général le dernier rapport créé) servant de référence.&lt;br /&gt;
&lt;br /&gt;
Tripwire ne va mettre à jour que les éléments rapportés dans ce rapport (ajout/suppression/modification), ce qui rend l&#039;opération très rapide.&lt;br /&gt;
 tripwire --update -a --twrfile /var/lib/tripwire/report/localhost-lastest.twr&lt;br /&gt;
&lt;br /&gt;
=== Décrypter un rapport ===&lt;br /&gt;
&lt;br /&gt;
Les rapports tripwire (localisé dans &amp;lt;path&amp;gt;/var/lib/tripwire/report/&amp;lt;/path&amp;gt;) étant cryptés, la lecture doit se faire à l&#039;aide d&#039;un utilitaire&lt;br /&gt;
 twprint --print-report --twrfile /var/lib/tripwire/report/localhost-lastest.twr&lt;br /&gt;
&lt;br /&gt;
=== Génération manuelle de signature ===&lt;br /&gt;
&lt;br /&gt;
Le paquet tripwire fournit un utilitaire calculant les sommes de contrôle d&#039;un fichier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
siggen /root/.bashrc &lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
Signatures for file: /root/.bashrc&lt;br /&gt;
&lt;br /&gt;
CRC32               BHT0Cs&lt;br /&gt;
MD5                 CwY+CrtjstBa28sj0FsHBr&lt;br /&gt;
SHA                 ACvBSZWywMS6n4W44NqHgCigQGz&lt;br /&gt;
HAVAL               AocbY3K9hcyO229F8iRtCk&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Durcissement de la sécurité ==&lt;br /&gt;
&lt;br /&gt;
* Tripwire ne peut que constater la modification des fichiers et doit donc être installé/configuré en même temps que la distribution.&lt;br /&gt;
* Tripwire n&#039;utilise que la version cryptée des fichier de configuration et de définition de la politique. C&#039;est pourquoi il est recommandé de supprimé les fichiers &#039;&#039;en clair&#039;&#039;&amp;lt;pre&amp;gt;rm /etc/tripwire/twpol.txt /etc/tripwire/twcfg.txt&amp;lt;/pre&amp;gt;Les fichiers peuvent être générés à partir de leur version cryptée.&amp;lt;pre&amp;gt;twadmin -m p &amp;gt; /etc/tripwire/twpol.txt&amp;lt;/pre&amp;gt;&amp;lt;pre&amp;gt;twadmin -m f &amp;gt; /etc/tripwire/twcfg.txt&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Datasheet/Firefox/AcceptCertificate&amp;diff=3137</id>
		<title>Datasheet/Firefox/AcceptCertificate</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Datasheet/Firefox/AcceptCertificate&amp;diff=3137"/>
		<updated>2016-01-06T09:01:47Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « {{Datasheet}} = Accepter un certificat auto-signé avec Firefox =  # On clique sur &amp;#039;&amp;#039;&amp;#039;Je comprends les risques&amp;#039;&amp;#039;&amp;#039; pour afficher le bouton permettant d&amp;#039;accepter le certific... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Datasheet}}&lt;br /&gt;
= Accepter un certificat auto-signé avec Firefox =&lt;br /&gt;
&lt;br /&gt;
# On clique sur &#039;&#039;&#039;Je comprends les risques&#039;&#039;&#039; pour afficher le bouton permettant d&#039;accepter le certificat&amp;lt;br&amp;gt;[[Fichier:FirefoxAcceptSelfsignedCertificate1.png]]&lt;br /&gt;
# On clique sur le bouton {{Button|Ajouter une exception ...}} tout en bas&amp;lt;br&amp;gt;[[Fichier:FirefoxAcceptSelfsignedCertificate2.png]]&lt;br /&gt;
# On clique sur le bouton {{Button|Confirmer l&#039;exception de sécurité}} en bas à gauche de la nouvelle fenêtre qui vient de s&#039;ouvrir&amp;lt;br&amp;gt;[[Fichier:FirefoxAcceptSelfsignedCertificate3.png]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Fichier:FirefoxAcceptSelfsignedCertificate3.png&amp;diff=3136</id>
		<title>Fichier:FirefoxAcceptSelfsignedCertificate3.png</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Fichier:FirefoxAcceptSelfsignedCertificate3.png&amp;diff=3136"/>
		<updated>2016-01-06T09:00:38Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Fichier:FirefoxAcceptSelfsignedCertificate2.png&amp;diff=3135</id>
		<title>Fichier:FirefoxAcceptSelfsignedCertificate2.png</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Fichier:FirefoxAcceptSelfsignedCertificate2.png&amp;diff=3135"/>
		<updated>2016-01-06T09:00:09Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Fichier:FirefoxAcceptSelfsignedCertificate1.png&amp;diff=3134</id>
		<title>Fichier:FirefoxAcceptSelfsignedCertificate1.png</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Fichier:FirefoxAcceptSelfsignedCertificate1.png&amp;diff=3134"/>
		<updated>2016-01-06T08:59:49Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Datasheet&amp;diff=3133</id>
		<title>Datasheet</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Datasheet&amp;diff=3133"/>
		<updated>2016-01-06T08:53:48Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Services ==&lt;br /&gt;
* [[Datasheet/LVM|LVM]]&lt;br /&gt;
* [[Datasheet/MySQL|MySQL]]&lt;br /&gt;
* [[Datasheet/XtraBackup|XtraBackup]]&lt;br /&gt;
* [[Datasheet/RHCluster|RedHat Cluster]]&lt;br /&gt;
* [[Datasheet/MAJ/Postgresql|Mise à jour de postgresql]]&lt;br /&gt;
* [[Datasheet/MAJ/Gitlab|Mise à jour de Gitlab]]&lt;br /&gt;
* [[Datasheet/FileSystem/XFS|Erreur de réparation après un crash sur XFS]]&lt;br /&gt;
* [[Datasheet/Screen|Screen]]&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
* [[Datasheet/Thunderbird/UseDefaultTemplate|Utilisation d&#039;un modèle par défaut dans Thunderbird]]&lt;br /&gt;
* [[Datasheet/Firefox/AcceptCertificate|Accepter un certificat auto-signé dans Firefox]]&lt;br /&gt;
&lt;br /&gt;
== Virtualisation ==&lt;br /&gt;
* [[Datasheet/Docker|Docker]]&lt;br /&gt;
* [[Datasheet/Virsh|Virsh]]&lt;br /&gt;
* [[Datasheet/Libguestfs|Libguestfs]]&lt;br /&gt;
&lt;br /&gt;
== Systemd ==&lt;br /&gt;
* [[Datasheet/Systemd|Systemd]]&lt;br /&gt;
* [[Datasheet/Journalctl|Journalctl]]&lt;br /&gt;
* [[Datasheet/Hostnamectl|Hostnamectl]]&lt;br /&gt;
* [[Datasheet/Localectl|Localectl]]&lt;br /&gt;
* [[Datasheet/Timedatectl|Timedatectl]]&lt;br /&gt;
* [[Datasheet/Firewalld|Firewalld]]&lt;br /&gt;
&lt;br /&gt;
== Gestion des RPM ==&lt;br /&gt;
* [[Datasheet/yum|Yum]]&lt;br /&gt;
* [[Datasheet/Repoquery|Repoquery]]&lt;br /&gt;
* [[Datasheet/PackageCleanup|Package-cleanup]]&lt;br /&gt;
* [[Datasheet/Fedpkg|Fedpkg]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=CPP/CrossCompilation&amp;diff=3132</id>
		<title>CPP/CrossCompilation</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=CPP/CrossCompilation&amp;diff=3132"/>
		<updated>2016-01-05T09:48:02Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pour générer un exécutable windows depuis linux, il faut recourir à ce qu’on appelle la cross-compilation: compiler sur un système pour un autre système.&lt;br /&gt;
On va partir d’un simple “Hello world”. A ce propos, j’ai découvert une [https://github.com/leachim6/hello-world collection d’hello world sur Github].&lt;br /&gt;
&lt;br /&gt;
== Compilation d&#039;un fichier unique ==&lt;br /&gt;
&lt;br /&gt;
=== Sources ===&lt;br /&gt;
&lt;br /&gt;
Le fichier source en C&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|main.c|&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  printf(&amp;quot;Hello World !\n&amp;quot;);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Le fichier source en C++&lt;br /&gt;
{{Admon/file|main.cpp|&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;Hello World !&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Compilation manuelle ===&lt;br /&gt;
==== GNU/Linux ====&lt;br /&gt;
&lt;br /&gt;
Pour GNU/Linux, le fichier C serait compilé avec la commande&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gcc -O0 -Wall -g -o helloc main.c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
et le fichier C++&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
g++ -O0 -Wall -g -o hellocpp main.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Wind@uze ====&lt;br /&gt;
&lt;br /&gt;
On va se servir des compilateurs mingw (32 et/ou 64 bits)&lt;br /&gt;
&lt;br /&gt;
===== Version 32 bits =====&lt;br /&gt;
&lt;br /&gt;
On installe les compilateurs C et C++ &amp;lt;class&amp;gt;mingw&amp;lt;/class&amp;gt; 32 bits ainsi que la collection d&#039;utilitaires&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install mingw32-gcc mingw32-gcc-c++ mingw32-binutils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
le fichier C sera compilé avec la commande&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i686-w64-mingw32-gcc -O0 -Wall -g -o helloc32.exe main.c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
et le fichier C++&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i686-w64-mingw32-g++ -O0 -Wall -g -o hellocpp32.exe main.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
En testant le binaire généré à partir du C++ avec &amp;lt;app&amp;gt;wine&amp;lt;/app&amp;gt;, on se rend compte qu’il ne fonctionne pas (absence de DLLs).&lt;br /&gt;
&lt;br /&gt;
{{color|red|err:module:import_dll Library libstdc++-6.dll (which is needed by L&amp;quot;V:\\hello32.exe&amp;quot;) not found}}&lt;br /&gt;
&lt;br /&gt;
Pour résoudre ce problème, il va falloir copié quelques DLLs dans le même répertoire que l’exécutable&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libstdc++-6.dll .&lt;br /&gt;
cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll .&lt;br /&gt;
cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libwinpthread-1.dll .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/tip|Test des exécutables avec wine|Wine affiche énormément de trace de debug (FIXME) dans la console et le message provenant de nos exécutables risque d&#039;être noyé au milieu des traces de wine. Il est préférable de désactiver certaines traces:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;export WINEDEBUG=fixme-all&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
On peut maintenant tester un exécutable&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;wine win32/cpp-helloworld.exe&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===== Version 64 bits =====&lt;br /&gt;
&lt;br /&gt;
On installe les compilateurs C et C++ &amp;lt;class&amp;gt;mingw&amp;lt;/class&amp;gt; 64 bits ainsi que la collection d&#039;utilitaires&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install mingw64-gcc mingw64-gcc-c++ mingw64-binutils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
le fichier C sera compilé avec la commande&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
x86_64-w64-mingw32-gcc -O0 -Wall -g -o helloc64.exe main.c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et le fichier C++&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
x86_64-w64-mingw32-g++ -O0 -Wall -g -o hellocpp64.exe main.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour résoudre le même problème que la version 32 bits, il va falloir copié quelques DLLs dans le même répertoire que l’exécutable.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libstdc++-6.dll .&lt;br /&gt;
cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_seh-1.dll .&lt;br /&gt;
cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libwinpthread-1.dll .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compilation avec Makefile ===&lt;br /&gt;
Chaque architecture aura son propre répertoire d&#039;accueil afin d&#039;éviter le chevauchement de DLLs (même nom mais architecture différente) et fabriquera deux binaires: un avec un fichier source en &#039;&#039;&#039;C&#039;&#039;&#039; et l&#039;autre avec un fichier source en &#039;&#039;&#039;C++&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On va définir plusieurs cibles principales:&lt;br /&gt;
* &#039;&#039;&#039;linux&#039;&#039;&#039;: ce sera la cible par défaut et elle construira les binaires ELF dans le répertoire &amp;lt;path&amp;gt;linux&amp;lt;/path&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;win32&#039;&#039;&#039;: elle construira les binaires Windows 32 bits dans le répertoire &amp;lt;path&amp;gt;win32&amp;lt;/path&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;win64&#039;&#039;&#039;: elle construira les binaires Windows 64 bits dans le répertoire &amp;lt;path&amp;gt;win64&amp;lt;/path&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;win&#039;&#039;&#039;: elle lancera les cibles win32 et win64&lt;br /&gt;
* &#039;&#039;&#039;all&#039;&#039;&#039;: elle lancera les cibles linux, win32 et win64&lt;br /&gt;
* &#039;&#039;&#039;clean&#039;&#039;&#039;: elle nettoiera le projet&lt;br /&gt;
D&#039;autres cibles secondaires seront définies:&lt;br /&gt;
* &#039;&#039;&#039;tree&#039;&#039;&#039;: Créera si besoin le répertoire d&#039;accueil des binaires&lt;br /&gt;
* &#039;&#039;&#039;copy-dll32&#039;&#039;&#039;: copiera si besoin les DLLs 32 bits dans le répertoire d&#039;accueil des binaires Windows 32 bits&lt;br /&gt;
* &#039;&#039;&#039;copy-dll64&#039;&#039;&#039;: copiera si besoin les DLLs 64 bits dans le répertoire d&#039;accueil des binaires Windows 64 bits&lt;br /&gt;
{{Admon/tip|@ dans les commandes|Certaines commandes du fichier &amp;lt;path&amp;gt;Makefile&amp;lt;/path&amp;gt; sont précédées d&#039;un &#039;&#039;&#039;@&#039;&#039;&#039; afin de ne pas écrire la commande en cours sur la sortie standard.}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|Makefile|&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CFLAGS=-O0 -Wall -g&lt;br /&gt;
CXXFLAGS=-O0 -Wall -g&lt;br /&gt;
LDFLAGS=&lt;br /&gt;
WINFLAGS=&lt;br /&gt;
CTARGET=c-helloworld&lt;br /&gt;
CXXTARGET=cpp-helloworld&lt;br /&gt;
 &lt;br /&gt;
DLL32_PATH := /usr/i686-w64-mingw32/sys-root/mingw/bin&lt;br /&gt;
DLL64_PATH := /usr/x86_64-w64-mingw32/sys-root/mingw/bin&lt;br /&gt;
 &lt;br /&gt;
linux: tree c-linux cpp-linux&lt;br /&gt;
&lt;br /&gt;
win: win32 win64&lt;br /&gt;
&lt;br /&gt;
win32: tree c-win32.exe cpp-win32.exe copy-dll32&lt;br /&gt;
&lt;br /&gt;
win64: tree c-win64.exe cpp-win64.exe copy-dll64&lt;br /&gt;
&lt;br /&gt;
all: linux win&lt;br /&gt;
&lt;br /&gt;
tree:&lt;br /&gt;
	@[ -d linux ] || mkdir linux&lt;br /&gt;
	@[ -d win32 ] || mkdir win32&lt;br /&gt;
	@[ -d win64 ] || mkdir win64&lt;br /&gt;
&lt;br /&gt;
cpp-linux: &lt;br /&gt;
	@g++ $(CXXFLAGS) -o linux/$(CXXTARGET) main.cpp&lt;br /&gt;
&lt;br /&gt;
c-linux: &lt;br /&gt;
	@gcc $(CFLAGS) -o linux/$(CTARGET) main.c&lt;br /&gt;
&lt;br /&gt;
c-win32.exe:&lt;br /&gt;
	@i686-w64-mingw32-gcc $(CFLAGS) -o win32/$(CTARGET).exe main.c&lt;br /&gt;
&lt;br /&gt;
cpp-win32.exe:&lt;br /&gt;
	@i686-w64-mingw32-g++ $(CXXFLAGS) -o win32/$(CXXTARGET).exe main.cpp&lt;br /&gt;
&lt;br /&gt;
c-win64.exe:&lt;br /&gt;
	@x86_64-w64-mingw32-gcc $(CFLAGS) -o win64/$(CTARGET).exe main.c&lt;br /&gt;
&lt;br /&gt;
cpp-win64.exe:&lt;br /&gt;
	@x86_64-w64-mingw32-g++ $(CXXFLAGS) -o win64/$(CXXTARGET).exe main.cpp&lt;br /&gt;
&lt;br /&gt;
copy-dll32:&lt;br /&gt;
	@[ -f libwinpthread-1.dll ] || cp $(DLL32_PATH)/libwinpthread-1.dll win32/&lt;br /&gt;
	@[ -f libstdc++-6.dll ] || cp $(DLL32_PATH)/libstdc++-6.dll win32/&lt;br /&gt;
	@[ -f libgcc_s_sjlj-1.dll ] || cp $(DLL32_PATH)/libgcc_s_sjlj-1.dll win32/&lt;br /&gt;
&lt;br /&gt;
copy-dll64:&lt;br /&gt;
	@[ -f libwinpthread-1.dll ] || cp $(DLL64_PATH)/libwinpthread-1.dll win64/&lt;br /&gt;
	@[ -f libstdc++-6.dll ] || cp $(DLL64_PATH)/libstdc++-6.dll win64/&lt;br /&gt;
	@[ -f libgcc_s_seh-1.dll ] || cp $(DLL64_PATH)/libgcc_s_seh-1.dll win64/&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	@rm -rf linux win32 win64&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Compilation de plusieurs fichiers sources ==&lt;br /&gt;
&lt;br /&gt;
=== Sources ===&lt;br /&gt;
&lt;br /&gt;
Afin de simplifier les explications, on va se concentrer sur le &amp;lt;class&amp;gt;C++&amp;lt;/class&amp;gt; et utiliser un fichier Makefile. Cette fois les sources seront un fichier principal (&amp;lt;path&amp;gt;main.cpp&amp;lt;/path&amp;gt;) ainsi qu&#039;un fichier de définition (&amp;lt;path&amp;gt;data.h&amp;lt;/path&amp;gt;) et d&#039;implémentation (&amp;lt;path&amp;gt;data.cpp&amp;lt;/path&amp;gt;) d&#039;une classe.&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|main.cpp|&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;data.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
	Data data;&lt;br /&gt;
	data.set( 99 );&lt;br /&gt;
	cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot; &amp;lt;&amp;lt; data.get() &amp;lt;&amp;lt; endl;&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
{{Admon/file|data.h|&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef _DATA_HPP_&lt;br /&gt;
#define _DATA_HPP_&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Data&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
	Data();&lt;br /&gt;
	~Data();&lt;br /&gt;
	void set( int number );&lt;br /&gt;
	int get() const;&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
	int _number;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int get();&lt;br /&gt;
&lt;br /&gt;
#endif //_DATA_HPP_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
{{Admon/file|data.cpp|&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;data.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Data::Data() :&lt;br /&gt;
	_number( 0 )&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Data::~Data()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Data::set( int number )&lt;br /&gt;
{&lt;br /&gt;
	_number = number;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int Data::get() const&lt;br /&gt;
{&lt;br /&gt;
	return _number;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Fichier Makefile ===&lt;br /&gt;
&lt;br /&gt;
Cette fois on va définir un modèle générique afin de compiler chaque fichier source cpp en fichier objet et lier ces fichiers objet entre eux pour obtenir un exécutable.&lt;br /&gt;
{{Admon/note|Fichiers temporaires|Les fichiers temporaires ne sont pas isolés dans leur répertoire d&#039;accueil respectif, mais cela ne pose pas de problème de conflit entre les architectures.}}&lt;br /&gt;
{{Admon/file|Makefile|&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
CXXFLAGS=-O0 -Wall -g&lt;br /&gt;
LDFLAGS=&lt;br /&gt;
CXXTARGET=data&lt;br /&gt;
 &lt;br /&gt;
DLL32_PATH := /usr/i686-w64-mingw32/sys-root/mingw/bin&lt;br /&gt;
DLL64_PATH := /usr/x86_64-w64-mingw32/sys-root/mingw/bin&lt;br /&gt;
 &lt;br /&gt;
linux: tree linux.exe&lt;br /&gt;
&lt;br /&gt;
win: win32 win64&lt;br /&gt;
&lt;br /&gt;
win32: tree win32.exe copy-dll32&lt;br /&gt;
&lt;br /&gt;
win64: tree win64.exe copy-dll64&lt;br /&gt;
&lt;br /&gt;
all: linux win&lt;br /&gt;
&lt;br /&gt;
tree:&lt;br /&gt;
	@[ -d linux ] || mkdir linux&lt;br /&gt;
	@[ -d win32 ] || mkdir win32&lt;br /&gt;
	@[ -d win64 ] || mkdir win64&lt;br /&gt;
&lt;br /&gt;
%.o: %.cpp $(CXXDEPS)&lt;br /&gt;
	@g++ -c -o $@ $&amp;lt; $(CXXFLAGS)&lt;br /&gt;
	&lt;br /&gt;
%.obj32: %.cpp $(CXXDEPS)&lt;br /&gt;
	@i686-w64-mingw32-g++ -c -o $@ $&amp;lt; $(CXXFLAGS)&lt;br /&gt;
	&lt;br /&gt;
%.obj64: %.cpp $(CXXDEPS)&lt;br /&gt;
	@x86_64-w64-mingw32-g++ -c -o $@ $&amp;lt; $(CXXFLAGS)&lt;br /&gt;
&lt;br /&gt;
linux.exe: main.o data.o&lt;br /&gt;
	@g++ $(CXXFLAGS) -o linux/$(CXXTARGET) main.o data.o&lt;br /&gt;
&lt;br /&gt;
win32.exe: main.obj32 data.obj32&lt;br /&gt;
	@i686-w64-mingw32-g++ $(CXXFLAGS) -o win32/$(CXXTARGET).exe main.obj32 data.obj32&lt;br /&gt;
&lt;br /&gt;
win64.exe: main.obj64 data.obj64&lt;br /&gt;
	@x86_64-w64-mingw32-g++ $(CXXFLAGS) -o win64/$(CXXTARGET).exe main.obj64 data.obj64&lt;br /&gt;
&lt;br /&gt;
copy-dll32:&lt;br /&gt;
	@[ -f libwinpthread-1.dll ] || cp $(DLL32_PATH)/libwinpthread-1.dll win32/&lt;br /&gt;
	@[ -f libstdc++-6.dll ] || cp $(DLL32_PATH)/libstdc++-6.dll win32/&lt;br /&gt;
	@[ -f libgcc_s_sjlj-1.dll ] || cp $(DLL32_PATH)/libgcc_s_sjlj-1.dll win32/&lt;br /&gt;
&lt;br /&gt;
copy-dll64:&lt;br /&gt;
	@[ -f libwinpthread-1.dll ] || cp $(DLL64_PATH)/libwinpthread-1.dll win64/&lt;br /&gt;
	@[ -f libstdc++-6.dll ] || cp $(DLL64_PATH)/libstdc++-6.dll win64/&lt;br /&gt;
	@[ -f libgcc_s_seh-1.dll ] || cp $(DLL64_PATH)/libgcc_s_seh-1.dll win64/&lt;br /&gt;
&lt;br /&gt;
clean:&lt;br /&gt;
	@rm -rf linux win32 win64 *.o *.obj32 *.obj64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=C_C%2B%2B&amp;diff=3131</id>
		<title>C C++</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=C_C%2B%2B&amp;diff=3131"/>
		<updated>2016-01-05T09:46:35Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Cross-compilation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tests Unitaires ==&lt;br /&gt;
* [[CPP/CMake/UnitTests|Intégrer les tests unitaires avec CMake]]&lt;br /&gt;
* [[CPP/UnitTests/CppTest| Tests unitaires avec CppTest]]&lt;br /&gt;
&lt;br /&gt;
== Cross-compilation ==&lt;br /&gt;
* [[CPP/CrossCompilation|Cross-Compilation simple]]&lt;br /&gt;
* [[CPP/CMake/CrossCompilation|Cross-Compilation avec cmake]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=C_C%2B%2B&amp;diff=3130</id>
		<title>C C++</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=C_C%2B%2B&amp;diff=3130"/>
		<updated>2016-01-04T14:32:24Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Tests Unitaires ==&lt;br /&gt;
* [[CPP/CMake/UnitTests|Intégrer les tests unitaires avec CMake]]&lt;br /&gt;
* [[CPP/UnitTests/CppTest| Tests unitaires avec CppTest]]&lt;br /&gt;
&lt;br /&gt;
== Cross-compilation ==&lt;br /&gt;
* [[CPP/CrossCompilation|Cross-Compilation simple sans Makefile]]&lt;br /&gt;
* [[CPP/CMake/CrossCompilation|Cross-Compilation avec cmake]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=CPP/CrossCompilation&amp;diff=3129</id>
		<title>CPP/CrossCompilation</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=CPP/CrossCompilation&amp;diff=3129"/>
		<updated>2016-01-04T14:31:35Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « Pour générer un exécutable windows depuis linux, il faut recourir à ce qu’on appelle la cross-compilation: compiler sur un système pour un autre système. On va par... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pour générer un exécutable windows depuis linux, il faut recourir à ce qu’on appelle la cross-compilation: compiler sur un système pour un autre système.&lt;br /&gt;
On va partir d’un simple “Hello world”. A ce propos, j’ai découvert une collection d’hello world sur Github.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
Le fichier source en C&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|main.c|&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include&amp;lt;stdio.h&amp;gt;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  printf(&amp;quot;Hello World !\n&amp;quot;);&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Le fichier source en C++&lt;br /&gt;
{{Admon/file|main.cpp|&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;Hello World !&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Compilation ==&lt;br /&gt;
=== GNU/Linux ===&lt;br /&gt;
&lt;br /&gt;
Pour GNU/Linux, le fichier C serait compilé avec la commande&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gcc -O0 -Wall -g -o helloc main.c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
et le fichier C++&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
g++ -O0 -Wall -g -o hellocpp main.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Wind@uze ===&lt;br /&gt;
&lt;br /&gt;
On va se servir des compilateurs mingw&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dnf install mingw32-gcc mingw32-gcc-c++ mingw32-binutils mingw64-gcc mingw64-gcc-c++ mingw64-binutils&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version 32 bits ====&lt;br /&gt;
&lt;br /&gt;
le fichier C sera compilé avec la commande&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i686-w64-mingw32-gcc -O0 -Wall -g -o helloc32.exe main.c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
et le fichier C++&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
i686-w64-mingw32-g++ -O0 -Wall -g -o hellocpp32.exe main.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
En testant le binaire généré à partir du C++ avec wine, on se rend compte qu’il ne fonctionne pas (absence de DLLs).&lt;br /&gt;
&lt;br /&gt;
{{color|red|err:module:import_dll Library libstdc++-6.dll (which is needed by L&amp;quot;V:\\hello32.exe&amp;quot;) not found}}&lt;br /&gt;
&lt;br /&gt;
Pour résoudre ce problème, il va falloir copié quelques DLLs dans le même répertoire que l’exécutable&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libstdc++-6.dll .&lt;br /&gt;
cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libgcc_s_sjlj-1.dll .&lt;br /&gt;
cp /usr/i686-w64-mingw32/sys-root/mingw/bin/libwinpthread-1.dll .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Version 64 bits ====&lt;br /&gt;
&lt;br /&gt;
le fichier C sera compilé avec la commande&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
x86_64-w64-mingw32-gcc -O0 -Wall -g -o helloc64.exe main.c&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
et le fichier C++&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
x86_64-w64-mingw32-g++ -O0 -Wall -g -o hellocpp64.exe main.cpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour résoudre le même problème que la version 32 bits, il va falloir copié quelques DLLs dans le même répertoire que l’exécutable.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libstdc++-6.dll .&lt;br /&gt;
cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libgcc_s_seh-1.dll .&lt;br /&gt;
cp /usr/x86_64-w64-mingw32/sys-root/mingw/bin/libwinpthread-1.dll .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=CPP/CMake/CrossCompilation&amp;diff=3128</id>
		<title>CPP/CMake/CrossCompilation</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=CPP/CMake/CrossCompilation&amp;diff=3128"/>
		<updated>2016-01-04T14:24:18Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « == Sources ==  On va cette fois se servir de deux fichiers sources, d’un fichier en-tête et d’un fichier cmake pour construire notre binaire &amp;#039;&amp;#039;&amp;#039;cppdata&amp;#039;&amp;#039;&amp;#039;: * Le fichi... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sources ==&lt;br /&gt;
&lt;br /&gt;
On va cette fois se servir de deux fichiers sources, d’un fichier en-tête et d’un fichier cmake pour construire notre binaire &#039;&#039;&#039;cppdata&#039;&#039;&#039;:&lt;br /&gt;
* Le fichier main.cpp&lt;br /&gt;
* Le fichier data.cpp, qui est l’implémentation de la class Data&lt;br /&gt;
* Le fichier en-tête data.hpp qui déclare notre class Data&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|main.cpp|&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;iostream&amp;gt;&lt;br /&gt;
#include &amp;quot;data.hpp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
  Data data;&lt;br /&gt;
  data.set( 99 );&lt;br /&gt;
  cout &amp;lt;&amp;lt; &amp;quot;data: &amp;quot; &amp;lt;&amp;lt; data.get() &amp;lt;&amp;lt; endl;&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|data.hpp|&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#ifndef _DATA_HPP_&lt;br /&gt;
#define _DATA_HPP_&lt;br /&gt;
&lt;br /&gt;
#include &lt;br /&gt;
&lt;br /&gt;
class Data&lt;br /&gt;
{&lt;br /&gt;
public:&lt;br /&gt;
  Data();&lt;br /&gt;
  ~Data();&lt;br /&gt;
  void set( int number );&lt;br /&gt;
  int get() const;&lt;br /&gt;
&lt;br /&gt;
protected:&lt;br /&gt;
  int _number;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int get();&lt;br /&gt;
&lt;br /&gt;
#endif //_DATA_HPP_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|data.cpp|&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;quot;data.hpp&amp;quot;&lt;br /&gt;
Data::Data() :&lt;br /&gt;
  _number( 0 )&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
Data::~Data()&lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Data::set( int number )&lt;br /&gt;
{&lt;br /&gt;
  _number = number;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int Data::get() const&lt;br /&gt;
{&lt;br /&gt;
  return _number;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|CMakeLists.txt|&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cmake_minimum_required(VERSION 2.6)&lt;br /&gt;
project(testdata)&lt;br /&gt;
add_executable(cppdata main.cpp data.cpp)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== La chaine de construction ==&lt;br /&gt;
&lt;br /&gt;
Afin de se simplifier la tâche, on va écrire un fichier buildchain pour chaque architecture. Ces fichiers, utilisables uniquement par cmake, nous permettront de nous affranchir de longues ligne de définition cmake.&lt;br /&gt;
* Le buildchain windows 32 bits: win32.cmake&lt;br /&gt;
* Le buildchain windows 64 bits: win64.cmake&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|win32.cmake|&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot;&amp;gt;&lt;br /&gt;
set(CMAKE_SYSTEM_NAME Windows)&lt;br /&gt;
&lt;br /&gt;
set( WIN_BUILD_ARCH &amp;quot;i686&amp;quot; )&lt;br /&gt;
set( WIN_ARCH_BITS &amp;quot;32&amp;quot; )&lt;br /&gt;
set( WIN_ARCH &amp;quot;x86&amp;quot; )&lt;br /&gt;
set(COMPILER_PREFIX &amp;quot;${WIN_BUILD_ARCH}-w64-mingw32&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Which compilers to use for C and C++&lt;br /&gt;
set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc)&lt;br /&gt;
set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++)&lt;br /&gt;
set(CMAKE_RC_COMPILER ${COMPILER_PREFIX}-windres)&lt;br /&gt;
&lt;br /&gt;
# Here is the target environment located&lt;br /&gt;
set(CMAKE_FIND_ROOT_PATH /usr/${COMPILER_PREFIX} /usr/${COMPILER_PREFIX}/sys-root/mingw)&lt;br /&gt;
&lt;br /&gt;
# Adjust the default behaviour of the FIND_XXX() commands:&lt;br /&gt;
# search headers and libraries in the target environment, search &lt;br /&gt;
# programs in the host environment&lt;br /&gt;
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)&lt;br /&gt;
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)&lt;br /&gt;
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|win64.cmake|&amp;lt;syntaxhighlight lang=&amp;quot;cmake&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
set(CMAKE_SYSTEM_NAME Windows)&lt;br /&gt;
&lt;br /&gt;
set( WIN_BUILD_ARCH &amp;quot;x86_64&amp;quot; )&lt;br /&gt;
set( WIN_ARCH_BITS &amp;quot;64&amp;quot; )&lt;br /&gt;
set( WIN_ARCH &amp;quot;x64&amp;quot; )&lt;br /&gt;
set(COMPILER_PREFIX &amp;quot;${WIN_BUILD_ARCH}-w64-mingw32&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Which compilers to use for C and C++&lt;br /&gt;
set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc)&lt;br /&gt;
set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++)&lt;br /&gt;
set(CMAKE_RC_COMPILER ${COMPILER_PREFIX}-windres)&lt;br /&gt;
&lt;br /&gt;
# Here is the target environment located&lt;br /&gt;
set(CMAKE_FIND_ROOT_PATH /usr/${COMPILER_PREFIX} /usr/${COMPILER_PREFIX}/sys-root/mingw)&lt;br /&gt;
&lt;br /&gt;
# Adjust the default behaviour of the FIND_XXX() commands:&lt;br /&gt;
# search headers and libraries in the target environment, search &lt;br /&gt;
# programs in the host environment&lt;br /&gt;
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)&lt;br /&gt;
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)&lt;br /&gt;
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Construction ==&lt;br /&gt;
&lt;br /&gt;
Comme habituellement avec cmake, on créé un répertoire dédié à la construction.&lt;br /&gt;
=== Linux ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir linux&lt;br /&gt;
cd linux&lt;br /&gt;
cmake ..&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
=== Wind@uze ===&lt;br /&gt;
==== Version 32 bits ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir win32&lt;br /&gt;
cmake -D CMAKE_TOOLCHAIN_FILE=../win32.cmake ..&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== Version 64 bits ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir win64&lt;br /&gt;
cmake -D CMAKE_TOOLCHAIN_FILE=../win64.cmake ..&lt;br /&gt;
make&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3127</id>
		<title>IDS/Tripwire</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3127"/>
		<updated>2015-12-18T09:16:25Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Modification sur le système */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation est triviale car le paquet est présent dans les dépôts de base Fedora et dans les dépôts &#039;&#039;&#039;[[Distributions#D.C3.A9p.C3.B4ts_Additionnels_2|EPEL]]&#039;&#039;&#039; pour CentOS.&lt;br /&gt;
 yum install tripwire&lt;br /&gt;
&lt;br /&gt;
== Initialisation de l&#039;application ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation via RPM installe un fichier de configuration et un fichier définissant la politique par défaut dans le dossier &amp;lt;path&amp;gt;/etc/tripwire&amp;lt;/path&amp;gt;. Ces fichiers ne peuvent être utilisés directement par tripwire, car celui-ci travaille avec des fichiers cryptés.&lt;br /&gt;
&lt;br /&gt;
La documentation (la page man de tripwire contient toutes les informations nécessaires) nous apprend qu&#039;il va nous falloir 2 clés:&lt;br /&gt;
* &#039;&#039;&#039;site.key&#039;&#039;&#039;: Une clé servant à encrypter le fichier de définition de la politique sur un ou plusieurs systèmes&lt;br /&gt;
* &#039;&#039;&#039;hostname-local.key&#039;&#039;&#039;: Une autre clé servant uniquement à crypter les fichiers utilisés localement (il est donc unique sur chaque système)&lt;br /&gt;
Suivant l&#039;opération à effectuer, une ou deux clés seront requises.&lt;br /&gt;
&lt;br /&gt;
=== Méthode manuelle ===&lt;br /&gt;
&lt;br /&gt;
Génération de deux clés&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m G -v -S /etc/tripwire/site.key -Q passphrase&lt;br /&gt;
twadmin -m G -v -L /etc/tripwire/hostname-local.key -P passphrase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les clés générées, on va pouvoir encrypter le fichier de configuration et le fichier définissant la politique. C&#039;est une protection contre la modification des fichiers par un éventuelle attaquant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twcfg.txt&lt;br /&gt;
twadmin -m P -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twpol.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Avec un Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tripwire-setup-keyfiles&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
The Tripwire site and local passphrases are used to sign a  variety  of&lt;br /&gt;
files, such as the configuration, policy, and database files.&lt;br /&gt;
&lt;br /&gt;
Passphrases should be at least 8 characters in length and contain  both&lt;br /&gt;
letters and numbers.&lt;br /&gt;
&lt;br /&gt;
See the Tripwire manual for more information.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Creating key files...&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the site keyfile passphrase:&lt;br /&gt;
Verify the site keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the local keyfile passphrase:&lt;br /&gt;
Verify the local keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing configuration file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote configuration file: /etc/tripwire/tw.cfg&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire configuration file:&lt;br /&gt;
/etc/tripwire/twcfg.txt&lt;br /&gt;
has been preserved for your inspection.  It  is  recommended  that  you&lt;br /&gt;
move this file to a secure location and/or encrypt it in place (using a&lt;br /&gt;
tool such as GPG, for example) after you have examined it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing policy file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote policy file: /etc/tripwire/tw.pol&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire policy file:&lt;br /&gt;
/etc/tripwire/twpol.txt&lt;br /&gt;
has been preserved for  your  inspection.  This  implements  a  minimal&lt;br /&gt;
policy, intended only to test  essential  Tripwire  functionality.  You&lt;br /&gt;
should edit the policy file to  describe  your  system,  and  then  use&lt;br /&gt;
twadmin to generate a new signed copy of the Tripwire policy.&lt;br /&gt;
&lt;br /&gt;
Once you have a satisfactory Tripwire policy file, you should move  the&lt;br /&gt;
clear-text version to a secure location  and/or  encrypt  it  in  place&lt;br /&gt;
(using a tool such as GPG, for example).&lt;br /&gt;
&lt;br /&gt;
Now run &amp;quot;tripwire --init&amp;quot; to enter Database Initialization  Mode.  This&lt;br /&gt;
reads the policy file, generates a database based on its contents,  and&lt;br /&gt;
then cryptographically signs the resulting  database.  Options  can  be&lt;br /&gt;
entered on the command line to specify which policy, configuration, and&lt;br /&gt;
key files are used  to  create  the  database.  The  filename  for  the&lt;br /&gt;
database can be specified as well. If no  options  are  specified,  the&lt;br /&gt;
default values from the current configuration file are used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
=== Premier lancement ===&lt;br /&gt;
&lt;br /&gt;
On va lancer la génération de la base avec la politique par défaut, l&#039;affinage se fera dans un second temps, après la première vérification.&lt;br /&gt;
 tripwire --init&lt;br /&gt;
 &lt;br /&gt;
Le premier rapport de tripwire va contenir beaucoup de faux-positif, car la politique par défaut est généraliste.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Warning: File system error.&lt;br /&gt;
### Filename: /usr/sbin/fixrmtab&lt;br /&gt;
### Aucun fichier ou dossier de ce type&lt;br /&gt;
### Continuing...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On va donc lister tous les fichiers inexistant en générant un rapport de vérification&lt;br /&gt;
 tripwire --check | grep &#039;### Filename&#039; | tee twtest.txt&lt;br /&gt;
et commenter les fichiers inexistants dans le fichier de définition de la politique &amp;lt;path&amp;gt;/etc/tripwire/twpol.txt&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification de la politique ===&lt;br /&gt;
&lt;br /&gt;
Une fois le fichier de définition de la politique modifié, il faut l&#039;encrypter et ré-initialiser la base de données&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin --update-policy /etc/tripwire/twpol.txt&lt;br /&gt;
tripwire --init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification sur le système ===&lt;br /&gt;
&lt;br /&gt;
Une fois le système modifié, suite à une mise à jour par exemple, il faut mettre à jour le base de données de tripwire&lt;br /&gt;
 tripwire --update&lt;br /&gt;
&lt;br /&gt;
== Durcissement de la sécurité ==&lt;br /&gt;
&lt;br /&gt;
* Tripwire ne peut que constater la modification des fichiers et doit donc être installé/configuré en même temps que la distribution.&lt;br /&gt;
* Tripwire n&#039;utilise que la version cryptée des fichier de configuration et de définition de la politique. C&#039;est pourquoi il est recommandé de supprimé les fichiers &#039;&#039;en clair&#039;&#039;&amp;lt;pre&amp;gt;rm /etc/tripwire/twpol.txt /etc/tripwire/twcfg.txt&amp;lt;/pre&amp;gt;Les fichiers peuvent être générés à partir de leur version cryptée.&amp;lt;pre&amp;gt;twadmin -m p &amp;gt; /etc/tripwire/twpol.txt&amp;lt;/pre&amp;gt;&amp;lt;pre&amp;gt;twadmin -m f &amp;gt; /etc/tripwire/twcfg.txt&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3126</id>
		<title>IDS/Tripwire</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3126"/>
		<updated>2015-12-18T08:57:33Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Initialisation de l&amp;#039;application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation est triviale car le paquet est présent dans les dépôts de base Fedora et dans les dépôts &#039;&#039;&#039;[[Distributions#D.C3.A9p.C3.B4ts_Additionnels_2|EPEL]]&#039;&#039;&#039; pour CentOS.&lt;br /&gt;
 yum install tripwire&lt;br /&gt;
&lt;br /&gt;
== Initialisation de l&#039;application ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation via RPM installe un fichier de configuration et un fichier définissant la politique par défaut dans le dossier &amp;lt;path&amp;gt;/etc/tripwire&amp;lt;/path&amp;gt;. Ces fichiers ne peuvent être utilisés directement par tripwire, car celui-ci travaille avec des fichiers cryptés.&lt;br /&gt;
&lt;br /&gt;
La documentation (la page man de tripwire contient toutes les informations nécessaires) nous apprend qu&#039;il va nous falloir 2 clés:&lt;br /&gt;
* &#039;&#039;&#039;site.key&#039;&#039;&#039;: Une clé servant à encrypter le fichier de définition de la politique sur un ou plusieurs systèmes&lt;br /&gt;
* &#039;&#039;&#039;hostname-local.key&#039;&#039;&#039;: Une autre clé servant uniquement à crypter les fichiers utilisés localement (il est donc unique sur chaque système)&lt;br /&gt;
Suivant l&#039;opération à effectuer, une ou deux clés seront requises.&lt;br /&gt;
&lt;br /&gt;
=== Méthode manuelle ===&lt;br /&gt;
&lt;br /&gt;
Génération de deux clés&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m G -v -S /etc/tripwire/site.key -Q passphrase&lt;br /&gt;
twadmin -m G -v -L /etc/tripwire/hostname-local.key -P passphrase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les clés générées, on va pouvoir encrypter le fichier de configuration et le fichier définissant la politique. C&#039;est une protection contre la modification des fichiers par un éventuelle attaquant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twcfg.txt&lt;br /&gt;
twadmin -m P -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twpol.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Avec un Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tripwire-setup-keyfiles&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
The Tripwire site and local passphrases are used to sign a  variety  of&lt;br /&gt;
files, such as the configuration, policy, and database files.&lt;br /&gt;
&lt;br /&gt;
Passphrases should be at least 8 characters in length and contain  both&lt;br /&gt;
letters and numbers.&lt;br /&gt;
&lt;br /&gt;
See the Tripwire manual for more information.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Creating key files...&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the site keyfile passphrase:&lt;br /&gt;
Verify the site keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the local keyfile passphrase:&lt;br /&gt;
Verify the local keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing configuration file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote configuration file: /etc/tripwire/tw.cfg&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire configuration file:&lt;br /&gt;
/etc/tripwire/twcfg.txt&lt;br /&gt;
has been preserved for your inspection.  It  is  recommended  that  you&lt;br /&gt;
move this file to a secure location and/or encrypt it in place (using a&lt;br /&gt;
tool such as GPG, for example) after you have examined it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing policy file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote policy file: /etc/tripwire/tw.pol&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire policy file:&lt;br /&gt;
/etc/tripwire/twpol.txt&lt;br /&gt;
has been preserved for  your  inspection.  This  implements  a  minimal&lt;br /&gt;
policy, intended only to test  essential  Tripwire  functionality.  You&lt;br /&gt;
should edit the policy file to  describe  your  system,  and  then  use&lt;br /&gt;
twadmin to generate a new signed copy of the Tripwire policy.&lt;br /&gt;
&lt;br /&gt;
Once you have a satisfactory Tripwire policy file, you should move  the&lt;br /&gt;
clear-text version to a secure location  and/or  encrypt  it  in  place&lt;br /&gt;
(using a tool such as GPG, for example).&lt;br /&gt;
&lt;br /&gt;
Now run &amp;quot;tripwire --init&amp;quot; to enter Database Initialization  Mode.  This&lt;br /&gt;
reads the policy file, generates a database based on its contents,  and&lt;br /&gt;
then cryptographically signs the resulting  database.  Options  can  be&lt;br /&gt;
entered on the command line to specify which policy, configuration, and&lt;br /&gt;
key files are used  to  create  the  database.  The  filename  for  the&lt;br /&gt;
database can be specified as well. If no  options  are  specified,  the&lt;br /&gt;
default values from the current configuration file are used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
=== Premier lancement ===&lt;br /&gt;
&lt;br /&gt;
On va lancer la génération de la base avec la politique par défaut, l&#039;affinage se fera dans un second temps, après la première vérification.&lt;br /&gt;
 tripwire --init&lt;br /&gt;
 &lt;br /&gt;
Le premier rapport de tripwire va contenir beaucoup de faux-positif, car la politique par défaut est généraliste.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Warning: File system error.&lt;br /&gt;
### Filename: /usr/sbin/fixrmtab&lt;br /&gt;
### Aucun fichier ou dossier de ce type&lt;br /&gt;
### Continuing...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On va donc lister tous les fichiers inexistant en générant un rapport de vérification&lt;br /&gt;
 tripwire --check | grep &#039;### Filename&#039; | tee twtest.txt&lt;br /&gt;
et commenter les fichiers inexistants dans le fichier de définition de la politique &amp;lt;path&amp;gt;/etc/tripwire/twpol.txt&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification de la politique ===&lt;br /&gt;
&lt;br /&gt;
Une fois le fichier de définition de la politique modifié, il faut l&#039;encrypter et ré-initialiser la base de données&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin --update-policy /etc/tripwire/twpol.txt&lt;br /&gt;
tripwire --init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification sur le système ===&lt;br /&gt;
&lt;br /&gt;
Une fois le système modifié, suite à une mise à jour par exemple, il faut mettre à jour le base de données de tripwire&lt;br /&gt;
 tripwire --update&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3125</id>
		<title>IDS/Tripwire</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3125"/>
		<updated>2015-12-18T08:53:10Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation est triviale car le paquet est présent dans les dépôts de base Fedora et dans les dépôts &#039;&#039;&#039;[[Distributions#D.C3.A9p.C3.B4ts_Additionnels_2|EPEL]]&#039;&#039;&#039; pour CentOS.&lt;br /&gt;
 yum install tripwire&lt;br /&gt;
&lt;br /&gt;
== Initialisation de l&#039;application ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation via RPM installe un fichier de configuration et un fichier définissant la politique par défaut dans le dossier &amp;lt;path&amp;gt;/etc/tripwire&amp;lt;/path&amp;gt;. Ces fichiers ne peuvent être utilisés directement par tripwire, car celui-ci travaille avec des fichiers cryptés.&lt;br /&gt;
&lt;br /&gt;
La documentation (la page man de tripwire contient toutes les informations nécessaires) nous apprend qu&#039;il va nous falloir 2 clés:&lt;br /&gt;
* &#039;&#039;&#039;site.key&#039;&#039;&#039;: Une clé servant à encrypter le fichier de définition de la politique sur un ou plusieurs systèmes&lt;br /&gt;
* &#039;&#039;&#039;hostname-local.key&#039;&#039;: Une autre clé servant uniquement à crypter les fichiers utilisés localement (il est donc unique sur chaque système)&lt;br /&gt;
Suivant l&#039;opération à effectuer, une ou les deux clés seront requises.&lt;br /&gt;
&lt;br /&gt;
=== Méthode manuelle ===&lt;br /&gt;
&lt;br /&gt;
Génération de deux clés&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m G -v -S /etc/tripwire/site.key -Q passphrase&lt;br /&gt;
twadmin -m G -v -L /etc/tripwire/hostname-local.key -P passphrase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les clés générées, on va pouvoir encrypter le fichier de configuration et le fichier définissant la politique. C&#039;est une protection contre la modification des fichiers par un éventuelle attaquant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twcfg.txt&lt;br /&gt;
twadmin -m P -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twpol.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Avec un Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tripwire-setup-keyfiles&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
The Tripwire site and local passphrases are used to sign a  variety  of&lt;br /&gt;
files, such as the configuration, policy, and database files.&lt;br /&gt;
&lt;br /&gt;
Passphrases should be at least 8 characters in length and contain  both&lt;br /&gt;
letters and numbers.&lt;br /&gt;
&lt;br /&gt;
See the Tripwire manual for more information.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Creating key files...&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the site keyfile passphrase:&lt;br /&gt;
Verify the site keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the local keyfile passphrase:&lt;br /&gt;
Verify the local keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing configuration file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote configuration file: /etc/tripwire/tw.cfg&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire configuration file:&lt;br /&gt;
/etc/tripwire/twcfg.txt&lt;br /&gt;
has been preserved for your inspection.  It  is  recommended  that  you&lt;br /&gt;
move this file to a secure location and/or encrypt it in place (using a&lt;br /&gt;
tool such as GPG, for example) after you have examined it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing policy file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote policy file: /etc/tripwire/tw.pol&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire policy file:&lt;br /&gt;
/etc/tripwire/twpol.txt&lt;br /&gt;
has been preserved for  your  inspection.  This  implements  a  minimal&lt;br /&gt;
policy, intended only to test  essential  Tripwire  functionality.  You&lt;br /&gt;
should edit the policy file to  describe  your  system,  and  then  use&lt;br /&gt;
twadmin to generate a new signed copy of the Tripwire policy.&lt;br /&gt;
&lt;br /&gt;
Once you have a satisfactory Tripwire policy file, you should move  the&lt;br /&gt;
clear-text version to a secure location  and/or  encrypt  it  in  place&lt;br /&gt;
(using a tool such as GPG, for example).&lt;br /&gt;
&lt;br /&gt;
Now run &amp;quot;tripwire --init&amp;quot; to enter Database Initialization  Mode.  This&lt;br /&gt;
reads the policy file, generates a database based on its contents,  and&lt;br /&gt;
then cryptographically signs the resulting  database.  Options  can  be&lt;br /&gt;
entered on the command line to specify which policy, configuration, and&lt;br /&gt;
key files are used  to  create  the  database.  The  filename  for  the&lt;br /&gt;
database can be specified as well. If no  options  are  specified,  the&lt;br /&gt;
default values from the current configuration file are used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
=== Premier lancement ===&lt;br /&gt;
&lt;br /&gt;
On va lancer la génération de la base avec la politique par défaut, l&#039;affinage se fera dans un second temps, après la première vérification.&lt;br /&gt;
 tripwire --init&lt;br /&gt;
 &lt;br /&gt;
Le premier rapport de tripwire va contenir beaucoup de faux-positif, car la politique par défaut est généraliste.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Warning: File system error.&lt;br /&gt;
### Filename: /usr/sbin/fixrmtab&lt;br /&gt;
### Aucun fichier ou dossier de ce type&lt;br /&gt;
### Continuing...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On va donc lister tous les fichiers inexistant en générant un rapport de vérification&lt;br /&gt;
 tripwire --check | grep &#039;### Filename&#039; | tee twtest.txt&lt;br /&gt;
et commenter les fichiers inexistants dans le fichier de définition de la politique &amp;lt;path&amp;gt;/etc/tripwire/twpol.txt&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification de la politique ===&lt;br /&gt;
&lt;br /&gt;
Une fois le fichier de définition de la politique modifié, il faut l&#039;encrypter et ré-initialiser la base de données&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin --update-policy /etc/tripwire/twpol.txt&lt;br /&gt;
tripwire --init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification sur le système ===&lt;br /&gt;
&lt;br /&gt;
Une fois le système modifié, suite à une mise à jour par exemple, il faut mettre à jour le base de données de tripwire&lt;br /&gt;
 tripwire --update&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3124</id>
		<title>IDS/Tripwire</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3124"/>
		<updated>2015-12-18T08:51:32Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Premier lancement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation est triviale car le paquet est présent dans les dépôts de base Fedora et dans les dépôts [[Distributions#D.C3.A9p.C3.B4ts_Additionnels_2|EPEL]] pour CentOS.&lt;br /&gt;
 yum install tripwire&lt;br /&gt;
&lt;br /&gt;
== Initialisation de l&#039;application ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation via RPM installe un fichier de configuration et un fichier définissant la politique par défaut dans le dossier &amp;lt;path&amp;gt;/etc/tripwire&amp;lt;/path&amp;gt;. Ces fichiers ne peuvent être utilisés directement par tripwire, car celui-ci travaille avec des fichiers cryptés.&lt;br /&gt;
&lt;br /&gt;
La documentation (la page man de tripwire contient toutes les informations nécessaires) nous apprend qu&#039;il va nous falloir 2 clés:&lt;br /&gt;
* &#039;&#039;&#039;site.key&#039;&#039;&#039;: Une clé servant à encrypter le fichier de définition de la politique sur un ou plusieurs systèmes&lt;br /&gt;
* &#039;&#039;&#039;hostname-local.key&#039;&#039;: Une autre clé servant uniquement à crypter les fichiers utilisés localement (il est donc unique sur chaque système)&lt;br /&gt;
Suivant l&#039;opération à effectuer, une ou les deux clés seront requises.&lt;br /&gt;
&lt;br /&gt;
=== Méthode manuelle ===&lt;br /&gt;
&lt;br /&gt;
Génération de deux clés&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m G -v -S /etc/tripwire/site.key -Q passphrase&lt;br /&gt;
twadmin -m G -v -L /etc/tripwire/hostname-local.key -P passphrase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les clés générées, on va pouvoir encrypter le fichier de configuration et le fichier définissant la politique. C&#039;est une protection contre la modification des fichiers par un éventuelle attaquant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twcfg.txt&lt;br /&gt;
twadmin -m P -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twpol.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Avec un Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tripwire-setup-keyfiles&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
The Tripwire site and local passphrases are used to sign a  variety  of&lt;br /&gt;
files, such as the configuration, policy, and database files.&lt;br /&gt;
&lt;br /&gt;
Passphrases should be at least 8 characters in length and contain  both&lt;br /&gt;
letters and numbers.&lt;br /&gt;
&lt;br /&gt;
See the Tripwire manual for more information.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Creating key files...&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the site keyfile passphrase:&lt;br /&gt;
Verify the site keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the local keyfile passphrase:&lt;br /&gt;
Verify the local keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing configuration file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote configuration file: /etc/tripwire/tw.cfg&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire configuration file:&lt;br /&gt;
/etc/tripwire/twcfg.txt&lt;br /&gt;
has been preserved for your inspection.  It  is  recommended  that  you&lt;br /&gt;
move this file to a secure location and/or encrypt it in place (using a&lt;br /&gt;
tool such as GPG, for example) after you have examined it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing policy file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote policy file: /etc/tripwire/tw.pol&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire policy file:&lt;br /&gt;
/etc/tripwire/twpol.txt&lt;br /&gt;
has been preserved for  your  inspection.  This  implements  a  minimal&lt;br /&gt;
policy, intended only to test  essential  Tripwire  functionality.  You&lt;br /&gt;
should edit the policy file to  describe  your  system,  and  then  use&lt;br /&gt;
twadmin to generate a new signed copy of the Tripwire policy.&lt;br /&gt;
&lt;br /&gt;
Once you have a satisfactory Tripwire policy file, you should move  the&lt;br /&gt;
clear-text version to a secure location  and/or  encrypt  it  in  place&lt;br /&gt;
(using a tool such as GPG, for example).&lt;br /&gt;
&lt;br /&gt;
Now run &amp;quot;tripwire --init&amp;quot; to enter Database Initialization  Mode.  This&lt;br /&gt;
reads the policy file, generates a database based on its contents,  and&lt;br /&gt;
then cryptographically signs the resulting  database.  Options  can  be&lt;br /&gt;
entered on the command line to specify which policy, configuration, and&lt;br /&gt;
key files are used  to  create  the  database.  The  filename  for  the&lt;br /&gt;
database can be specified as well. If no  options  are  specified,  the&lt;br /&gt;
default values from the current configuration file are used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
=== Premier lancement ===&lt;br /&gt;
&lt;br /&gt;
On va lancer la génération de la base avec la politique par défaut, l&#039;affinage se fera dans un second temps, après la première vérification.&lt;br /&gt;
 tripwire --init&lt;br /&gt;
 &lt;br /&gt;
Le premier rapport de tripwire va contenir beaucoup de faux-positif, car la politique par défaut est généraliste.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Warning: File system error.&lt;br /&gt;
### Filename: /usr/sbin/fixrmtab&lt;br /&gt;
### Aucun fichier ou dossier de ce type&lt;br /&gt;
### Continuing...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On va donc lister tous les fichiers inexistant en générant un rapport de vérification&lt;br /&gt;
 tripwire --check | grep &#039;### Filename&#039; | tee twtest.txt&lt;br /&gt;
et commenter les fichiers inexistants dans le fichier de définition de la politique &amp;lt;path&amp;gt;/etc/tripwire/twpol.txt&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification de la politique ===&lt;br /&gt;
&lt;br /&gt;
Une fois le fichier de définition de la politique modifié, il faut l&#039;encrypter et ré-initialiser la base de données&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin --update-policy /etc/tripwire/twpol.txt&lt;br /&gt;
tripwire --init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification sur le système ===&lt;br /&gt;
&lt;br /&gt;
Une fois le système modifié, suite à une mise à jour par exemple, il faut mettre à jour le base de données de tripwire&lt;br /&gt;
 tripwire --update&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3123</id>
		<title>IDS/Tripwire</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3123"/>
		<updated>2015-12-18T08:27:27Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Utilisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation est triviale car le paquet est présent dans les dépôts de base Fedora et dans les dépôts [[Distributions#D.C3.A9p.C3.B4ts_Additionnels_2|EPEL]] pour CentOS.&lt;br /&gt;
 yum install tripwire&lt;br /&gt;
&lt;br /&gt;
== Initialisation de l&#039;application ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation via RPM installe un fichier de configuration et un fichier définissant la politique par défaut dans le dossier &amp;lt;path&amp;gt;/etc/tripwire&amp;lt;/path&amp;gt;. Ces fichiers ne peuvent être utilisés directement par tripwire, car celui-ci travaille avec des fichiers cryptés.&lt;br /&gt;
&lt;br /&gt;
La documentation (la page man de tripwire contient toutes les informations nécessaires) nous apprend qu&#039;il va nous falloir 2 clés:&lt;br /&gt;
* &#039;&#039;&#039;site.key&#039;&#039;&#039;: Une clé servant à encrypter le fichier de définition de la politique sur un ou plusieurs systèmes&lt;br /&gt;
* &#039;&#039;&#039;hostname-local.key&#039;&#039;: Une autre clé servant uniquement à crypter les fichiers utilisés localement (il est donc unique sur chaque système)&lt;br /&gt;
Suivant l&#039;opération à effectuer, une ou les deux clés seront requises.&lt;br /&gt;
&lt;br /&gt;
=== Méthode manuelle ===&lt;br /&gt;
&lt;br /&gt;
Génération de deux clés&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m G -v -S /etc/tripwire/site.key -Q passphrase&lt;br /&gt;
twadmin -m G -v -L /etc/tripwire/hostname-local.key -P passphrase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les clés générées, on va pouvoir encrypter le fichier de configuration et le fichier définissant la politique. C&#039;est une protection contre la modification des fichiers par un éventuelle attaquant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twcfg.txt&lt;br /&gt;
twadmin -m P -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twpol.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Avec un Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tripwire-setup-keyfiles&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
The Tripwire site and local passphrases are used to sign a  variety  of&lt;br /&gt;
files, such as the configuration, policy, and database files.&lt;br /&gt;
&lt;br /&gt;
Passphrases should be at least 8 characters in length and contain  both&lt;br /&gt;
letters and numbers.&lt;br /&gt;
&lt;br /&gt;
See the Tripwire manual for more information.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Creating key files...&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the site keyfile passphrase:&lt;br /&gt;
Verify the site keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the local keyfile passphrase:&lt;br /&gt;
Verify the local keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing configuration file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote configuration file: /etc/tripwire/tw.cfg&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire configuration file:&lt;br /&gt;
/etc/tripwire/twcfg.txt&lt;br /&gt;
has been preserved for your inspection.  It  is  recommended  that  you&lt;br /&gt;
move this file to a secure location and/or encrypt it in place (using a&lt;br /&gt;
tool such as GPG, for example) after you have examined it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing policy file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote policy file: /etc/tripwire/tw.pol&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire policy file:&lt;br /&gt;
/etc/tripwire/twpol.txt&lt;br /&gt;
has been preserved for  your  inspection.  This  implements  a  minimal&lt;br /&gt;
policy, intended only to test  essential  Tripwire  functionality.  You&lt;br /&gt;
should edit the policy file to  describe  your  system,  and  then  use&lt;br /&gt;
twadmin to generate a new signed copy of the Tripwire policy.&lt;br /&gt;
&lt;br /&gt;
Once you have a satisfactory Tripwire policy file, you should move  the&lt;br /&gt;
clear-text version to a secure location  and/or  encrypt  it  in  place&lt;br /&gt;
(using a tool such as GPG, for example).&lt;br /&gt;
&lt;br /&gt;
Now run &amp;quot;tripwire --init&amp;quot; to enter Database Initialization  Mode.  This&lt;br /&gt;
reads the policy file, generates a database based on its contents,  and&lt;br /&gt;
then cryptographically signs the resulting  database.  Options  can  be&lt;br /&gt;
entered on the command line to specify which policy, configuration, and&lt;br /&gt;
key files are used  to  create  the  database.  The  filename  for  the&lt;br /&gt;
database can be specified as well. If no  options  are  specified,  the&lt;br /&gt;
default values from the current configuration file are used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
=== Premier lancement ===&lt;br /&gt;
&lt;br /&gt;
On va lancer la génération de la base avec la politique par défaut, l&#039;affinage se fera dans un second temps&lt;br /&gt;
 tripwire --init&lt;br /&gt;
&lt;br /&gt;
Le premier rapport de tripwire va contenir beaucoup de faux-positif, car la politique par défaut est généraliste.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Warning: File system error.&lt;br /&gt;
### Filename: /usr/sbin/fixrmtab&lt;br /&gt;
### Aucun fichier ou dossier de ce type&lt;br /&gt;
### Continuing...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On va donc lister tous les fichiers inexistant&lt;br /&gt;
 tripwire --check | grep &#039;### Filename&#039; &amp;gt;&amp;gt; twtest.txt&lt;br /&gt;
et les commenter dans le fichier de définition de la politique &amp;lt;path&amp;gt;/etc/tripwire/twpol.txt&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification de la politique ===&lt;br /&gt;
&lt;br /&gt;
Une fois le fichier de définition de la politique modifié, il faut l&#039;encrypter et ré-initialiser la base de données&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin --update-policy /etc/tripwire/twpol.txt&lt;br /&gt;
tripwire --init&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modification sur le système ===&lt;br /&gt;
&lt;br /&gt;
Une fois le système modifié, suite à une mise à jour par exemple, il faut mettre à jour le base de données de tripwire&lt;br /&gt;
 tripwire --update&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3122</id>
		<title>IDS/Tripwire</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=IDS/Tripwire&amp;diff=3122"/>
		<updated>2015-12-17T15:12:43Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installation ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation est triviale car le paquet est présent dans les dépôts de base Fedora et dans les dépôts [[Distributions#D.C3.A9p.C3.B4ts_Additionnels_2|EPEL]] pour CentOS.&lt;br /&gt;
 yum install tripwire&lt;br /&gt;
&lt;br /&gt;
== Initialisation de l&#039;application ==&lt;br /&gt;
&lt;br /&gt;
L&#039;installation via RPM installe un fichier de configuration et un fichier définissant la politique par défaut dans le dossier &amp;lt;path&amp;gt;/etc/tripwire&amp;lt;/path&amp;gt;. Ces fichiers ne peuvent être utilisés directement par tripwire, car celui-ci travaille avec des fichiers cryptés.&lt;br /&gt;
&lt;br /&gt;
La documentation (la page man de tripwire contient toutes les informations nécessaires) nous apprend qu&#039;il va nous falloir 2 clés:&lt;br /&gt;
* &#039;&#039;&#039;site.key&#039;&#039;&#039;: Une clé servant à encrypter le fichier de définition de la politique sur un ou plusieurs systèmes&lt;br /&gt;
* &#039;&#039;&#039;hostname-local.key&#039;&#039;: Une autre clé servant uniquement à crypter les fichiers utilisés localement (il est donc unique sur chaque système)&lt;br /&gt;
Suivant l&#039;opération à effectuer, une ou les deux clés seront requises.&lt;br /&gt;
&lt;br /&gt;
=== Méthode manuelle ===&lt;br /&gt;
&lt;br /&gt;
Génération de deux clés&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m G -v -S /etc/tripwire/site.key -Q passphrase&lt;br /&gt;
twadmin -m G -v -L /etc/tripwire/hostname-local.key -P passphrase&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois les clés générées, on va pouvoir encrypter le fichier de configuration et le fichier définissant la politique. C&#039;est une protection contre la modification des fichiers par un éventuelle attaquant.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
twadmin -m F -c /etc/tripwire/tw.cfg -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twcfg.txt&lt;br /&gt;
twadmin -m P -p /etc/tripwire/tw.pol -S /etc/tripwire/site.key -Q passphrase /etc/tripwire/twpol.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Avec un Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tripwire-setup-keyfiles&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
The Tripwire site and local passphrases are used to sign a  variety  of&lt;br /&gt;
files, such as the configuration, policy, and database files.&lt;br /&gt;
&lt;br /&gt;
Passphrases should be at least 8 characters in length and contain  both&lt;br /&gt;
letters and numbers.&lt;br /&gt;
&lt;br /&gt;
See the Tripwire manual for more information.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Creating key files...&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the site keyfile passphrase:&lt;br /&gt;
Verify the site keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
(When selecting a passphrase, keep in mind that good passphrases typically&lt;br /&gt;
have upper and lower case letters, digits and punctuation marks, and are&lt;br /&gt;
at least 8 characters in length.)&lt;br /&gt;
&lt;br /&gt;
Enter the local keyfile passphrase:&lt;br /&gt;
Verify the local keyfile passphrase:&lt;br /&gt;
Generating key (this may take several minutes)...Key generation complete.&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing configuration file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote configuration file: /etc/tripwire/tw.cfg&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire configuration file:&lt;br /&gt;
/etc/tripwire/twcfg.txt&lt;br /&gt;
has been preserved for your inspection.  It  is  recommended  that  you&lt;br /&gt;
move this file to a secure location and/or encrypt it in place (using a&lt;br /&gt;
tool such as GPG, for example) after you have examined it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------&lt;br /&gt;
Signing policy file...&lt;br /&gt;
Please enter your site passphrase: &lt;br /&gt;
Wrote policy file: /etc/tripwire/tw.pol&lt;br /&gt;
&lt;br /&gt;
A clear-text version of the Tripwire policy file:&lt;br /&gt;
/etc/tripwire/twpol.txt&lt;br /&gt;
has been preserved for  your  inspection.  This  implements  a  minimal&lt;br /&gt;
policy, intended only to test  essential  Tripwire  functionality.  You&lt;br /&gt;
should edit the policy file to  describe  your  system,  and  then  use&lt;br /&gt;
twadmin to generate a new signed copy of the Tripwire policy.&lt;br /&gt;
&lt;br /&gt;
Once you have a satisfactory Tripwire policy file, you should move  the&lt;br /&gt;
clear-text version to a secure location  and/or  encrypt  it  in  place&lt;br /&gt;
(using a tool such as GPG, for example).&lt;br /&gt;
&lt;br /&gt;
Now run &amp;quot;tripwire --init&amp;quot; to enter Database Initialization  Mode.  This&lt;br /&gt;
reads the policy file, generates a database based on its contents,  and&lt;br /&gt;
then cryptographically signs the resulting  database.  Options  can  be&lt;br /&gt;
entered on the command line to specify which policy, configuration, and&lt;br /&gt;
key files are used  to  create  the  database.  The  filename  for  the&lt;br /&gt;
database can be specified as well. If no  options  are  specified,  the&lt;br /&gt;
default values from the current configuration file are used.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
&lt;br /&gt;
=== Initialisation de la base de données ===&lt;br /&gt;
&lt;br /&gt;
 tripwire -m i&lt;br /&gt;
&lt;br /&gt;
=== Modification de la configuration ===&lt;br /&gt;
&lt;br /&gt;
Le premier rapport de tripwire va contenir beaucoup de faux-positif&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Warning: File system error.&lt;br /&gt;
### Filename: /usr/sbin/fixrmtab&lt;br /&gt;
### Aucun fichier ou dossier de ce type&lt;br /&gt;
### Continuing...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On va donc lister tous les fichiers inexistant&lt;br /&gt;
 /usr/sbin/tripwire -m c | grep &#039;### Filename&#039; &amp;gt;&amp;gt; twtest.txt&lt;br /&gt;
et les commenter dans le fichier de définition de la politique &amp;lt;path&amp;gt;/etc/tripwire/twpol.txt&amp;lt;/path&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Mail/MTA/Postfix/GmailRelay&amp;diff=3121</id>
		<title>Mail/MTA/Postfix/GmailRelay</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Mail/MTA/Postfix/GmailRelay&amp;diff=3121"/>
		<updated>2015-10-10T13:16:06Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « == Modify postfix configuration ==  Edit /etc/postfix/main.cf &amp;lt;pre&amp;gt; # sets gmail as relay relayhost = [smtp.gmail.com]:587  #  use tls smtp_use_tls=yes  # use sasl when au... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Modify postfix configuration ==&lt;br /&gt;
&lt;br /&gt;
Edit /etc/postfix/main.cf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# sets gmail as relay&lt;br /&gt;
relayhost = [smtp.gmail.com]:587&lt;br /&gt;
&lt;br /&gt;
#  use tls&lt;br /&gt;
smtp_use_tls=yes&lt;br /&gt;
&lt;br /&gt;
# use sasl when authenticating to foreign SMTP servers&lt;br /&gt;
smtp_sasl_auth_enable = yes&lt;br /&gt;
&lt;br /&gt;
# path to password map file&lt;br /&gt;
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd&lt;br /&gt;
&lt;br /&gt;
# list of CAs to trust when verifying server certificate&lt;br /&gt;
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.trust.crt&lt;br /&gt;
&lt;br /&gt;
# eliminates default security options which are imcompatible with gmail&lt;br /&gt;
smtp_sasl_security_options =&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need further debugging you can add these:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
debug_peer_list=smtp.gmail.com&lt;br /&gt;
debug_peer_level=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set Gmail credentials ==&lt;br /&gt;
&lt;br /&gt;
Add Gmail credentials to /etc/postfix/sasl_passwd&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[smtp.gmail.com]:587  username:password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and create database&lt;br /&gt;
&amp;lt;pre&amp;gt;postmap /etc/postfix/sasl_passwd&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reload postfix service ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;systemctl reload postfix&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Services&amp;diff=3120</id>
		<title>Services</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Services&amp;diff=3120"/>
		<updated>2015-09-09T16:05:23Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Processus noyau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Services B2PWeb ==&lt;br /&gt;
&lt;br /&gt;
{{:B2PWeb/Services}}&lt;br /&gt;
&lt;br /&gt;
== Database management system ==&lt;br /&gt;
&lt;br /&gt;
=== MySQL ===&lt;br /&gt;
&lt;br /&gt;
* [[DBMS/MySQL/Brief|Brève présentation]]&lt;br /&gt;
* [[DBMS/MySQL/ReasonsReplicationLag|Causes courantes du lag de réplication]]&lt;br /&gt;
* [[DBMS/MySQL/InnoDB/DataOrganization|Organisation des données innodb]]&lt;br /&gt;
* [[DBMS/MySQL/ResetSlave|Réinitialiser la réplication]]&lt;br /&gt;
* [[DBMS/MySQL/Tips|Astuces]]&lt;br /&gt;
&lt;br /&gt;
==== Sauvegarde et restauration ====&lt;br /&gt;
* [[DBMS/MySQL/XtraBackup|XtraBackup]]&lt;br /&gt;
* [[DBMS/MySQL/backup_scripts|Scripts Utiles]]&lt;br /&gt;
&lt;br /&gt;
==== Réplication du datadir ====&lt;br /&gt;
* [[DBMS/MySQL/DRBD|Datadir sur partition DRBD]]&lt;br /&gt;
&lt;br /&gt;
==== Optimisation ====&lt;br /&gt;
* [[DBMS/MySQL/Optimizing| Optimiser le fichier &amp;lt;path&amp;gt;/etc/my.cnf&amp;lt;/path&amp;gt;]] pour innoDB&lt;br /&gt;
&lt;br /&gt;
==== Informations ====&lt;br /&gt;
* [[DBMS/MySQL/Informations| Obtenir des informations sur un serveur MySQL]]&lt;br /&gt;
* [[DBMS/MySQL/Show_Grants| Afficher les GRANTS MySQL]]&lt;br /&gt;
&lt;br /&gt;
==== XtraDB Cluster ====&lt;br /&gt;
* [[DBMS/MySQL/XtraDBCluster/Install| Installation d&#039;un cluster Percona XtraDB]]&lt;br /&gt;
* [[DBMS/MySQL/XtraDBCluster/Manage| Gestion d&#039;un cluster Percona XtraDB]]&lt;br /&gt;
&lt;br /&gt;
=== Oracle ===&lt;br /&gt;
* [[DBMS/Oracle/Brief|Présentation d&#039;Oracle]]&lt;br /&gt;
&lt;br /&gt;
=== PostgreSQL ===&lt;br /&gt;
* [[DBMS/PostgreSQL/Brief|Brève présentation]]&lt;br /&gt;
&lt;br /&gt;
== Versionning control system ==&lt;br /&gt;
&lt;br /&gt;
* [[VCS/GitLab/Install|Installation de gitlab]], un clone de github avec une interface web.&lt;br /&gt;
&lt;br /&gt;
=== Git ===&lt;br /&gt;
* [[VCS/GitOverSvn|Git over Svn]] repository&lt;br /&gt;
* [[VCS/Git|Git]]&lt;br /&gt;
* [[VCS/Git/ImportSVN| Importer un dépôt SVN]]&lt;br /&gt;
* [[VCS/Git/CreateRemoteRepository|Initialiser un dépôt distant]]&lt;br /&gt;
* [[VCS/Git/ResolvingMerge|Résoudre les conflits de merge]]&lt;br /&gt;
* [[VCS/Git/SyncFork|Synchroniser un Fork]] (utile pour les forks github)&lt;br /&gt;
&lt;br /&gt;
== Domain Name Server ==&lt;br /&gt;
* [[Services/DNS/Install|Installation de bind]]&lt;br /&gt;
* Check DNS Zone with [[DNS/Zonecheck|Zonecheck]]&lt;br /&gt;
&lt;br /&gt;
== Voice over IP ==&lt;br /&gt;
* Serveur de VoIP [[VoIP/Asterisk|Asterisk]]&lt;br /&gt;
* Analyse de la base de données CDR [[VoIP/Elastix/Database/Cdr|base de données CDR sur Elastix]]&lt;br /&gt;
* [[VoIP/Skype|Skype]]&lt;br /&gt;
* [[VoIP/AsteriskOnFedora|Un serveur VoIP Asterisk sur Fedora]]&lt;br /&gt;
&lt;br /&gt;
== Mail ==&lt;br /&gt;
* [[Mail/MTA/Sendmail|Sendmail]]&lt;br /&gt;
* [[Mail/MTA/Zimbra|Zimbra]]&lt;br /&gt;
* [[Mail/MTA/Synchro/ImapSync|ImapSync]]&lt;br /&gt;
&lt;br /&gt;
== Sauvegarde ==&lt;br /&gt;
* Serveur de sauvegarde [[Save/Amanda|Amanda]]&lt;br /&gt;
* Sauvegarde des bases de données [[DBMS/MySQL/Brief|MySQL]] avec [[Save/Amanda/ZRM|MySQL-zrm]]&lt;br /&gt;
&lt;br /&gt;
== Communication ==&lt;br /&gt;
* Envoi de message sur la messagerie instantanée Jabber en ligne de commande avec [[Com/Jabber/Sendxmpp|sendxmpp]]&lt;br /&gt;
&lt;br /&gt;
== File System ==&lt;br /&gt;
=== Logical Volume Manager ===&lt;br /&gt;
* [[Filesystem/LVM|LVM]]&lt;br /&gt;
=== Linux File System ===&lt;br /&gt;
* [[Filesystem/Ext3|EXT3]]&lt;br /&gt;
* [[Filesystem/Ext4|EXT4]]&lt;br /&gt;
&lt;br /&gt;
=== Raid sur IP ===&lt;br /&gt;
* [[Filesystem/RaidOverIP/GlusterFS|GlusterFS]]&lt;br /&gt;
* [[Filesystem/RaidOverIP/DRBD|DRBD]]&lt;br /&gt;
&lt;br /&gt;
=== Partage ===&lt;br /&gt;
* [[Filesystem/Network/NFS| NFS]]&lt;br /&gt;
* [[Filesystem/Network/Samba| Samba]]&lt;br /&gt;
&lt;br /&gt;
=== Monitoring ===&lt;br /&gt;
* [[Filesystem/Monitoring/Smart| Smart]]&lt;br /&gt;
&lt;br /&gt;
== Installation et déploiement automatique ==&lt;br /&gt;
* [[Installation/Cobbler|Cobbler]]&lt;br /&gt;
* [[Deploy/Puppet|Puppet]]&lt;br /&gt;
* [[Deploy/SpaceWalk|SpaceWalk]]&lt;br /&gt;
** [[Deploy/SpaceWalk/Install|Install SpaceWalk]]&lt;br /&gt;
** [[Deploy/SpaceWalk/Upload|Uploading Content]]&lt;br /&gt;
** Registrer [[Deploy/SpaceWalk/Client|client]] on Spacewalk.&lt;br /&gt;
** [[Deploy/SpaceWalk/Backup|Backup]]&lt;br /&gt;
** [[Deploy/SpaceWalk/Howto| Tutorial]]&lt;br /&gt;
* [[Deploy/Ansible|Ansible]]&lt;br /&gt;
&lt;br /&gt;
== Virtualisation ==&lt;br /&gt;
* Pseudo-virtualisation avec un environnement [[Virt/Chroot|Chroot]]&lt;br /&gt;
* [[Virt/LibVirt|LibVirt]]&lt;br /&gt;
* [[Virt/RawDisk|Accéder à des données sur un disque virtuel]]&lt;br /&gt;
* [[Virt/LinuxGuest|Ajouter un disque sans reboot]]&lt;br /&gt;
&lt;br /&gt;
=== Containers ===&lt;br /&gt;
* [[Virt/LXC|LXC]]&lt;br /&gt;
* [[Virt/Docker|Docker]]&lt;br /&gt;
&lt;br /&gt;
=== Virtualisation complète et para-virtuelle ===&lt;br /&gt;
* [[Virt/Xen|Xen]]&lt;br /&gt;
* [[Virt/Xen4|Xen4]]&lt;br /&gt;
* [[Virt/VirtualBox|VirtualBox]]&lt;br /&gt;
* [[Virt/KVM|Qemu/KVM]]&lt;br /&gt;
&lt;br /&gt;
== Services Web ==&lt;br /&gt;
* [[Webserver/Apache|Apache]]&lt;br /&gt;
** [[Webserver/Apache/StatusPage|Page de status d&#039;Apache]]&lt;br /&gt;
** [[Webserver/Apache/FineTuningSSL|Configuration fine du module SSL]]&lt;br /&gt;
** [[Webserver/Apache/Tips|Trucs et astuces]]&lt;br /&gt;
** [[Webserver/Apache/Migration_2.2_2.4|Migration d&#039;Apache version 2.2 en 2.4]]&lt;br /&gt;
** Les modules d&#039;Apache&lt;br /&gt;
*** [[Webserver/Apache/Modules/GeoIP|mod_geoip]]&lt;br /&gt;
*** [[Webserver/Apache/Modules/Evasive|mod_evasive]]&lt;br /&gt;
*** [[Webserver/Apache/Modules/Security|mod_security]]&lt;br /&gt;
* [[Services/Web/Stikked|Stikked]]&lt;br /&gt;
&lt;br /&gt;
== PKI ==&lt;br /&gt;
* [[Services/OCSP| répondeur OCSP (Online Certificate Status Protocol)]]&lt;br /&gt;
&lt;br /&gt;
== Clustering ==&lt;br /&gt;
* [[Services/Cluster/Pacemaker|Pacemaker]]&lt;br /&gt;
* [[Services/Cluster/RHCluster|RedHat Cluster]]&lt;br /&gt;
* [[Services/Cluster/RHCluster/Admin|Administration d&#039;un cluster RedHat]]&lt;br /&gt;
&lt;br /&gt;
== Monitoring ==&lt;br /&gt;
&lt;br /&gt;
=== Nagios ===&lt;br /&gt;
* [[Services/Monitoring/Nagios| Nagios]]&lt;br /&gt;
&lt;br /&gt;
=== Pnp4Nagios ===&lt;br /&gt;
* [[Services/Monitoring/Pnp4Nagios| Pnp4Nagios]]&lt;br /&gt;
&lt;br /&gt;
=== Shinken ===&lt;br /&gt;
* [[Services/Monitoring/Shinken| Shinken]]&lt;br /&gt;
&lt;br /&gt;
=== SNMP ===&lt;br /&gt;
* [[Services/Monitoring/SNMP| SNMP]]&lt;br /&gt;
&lt;br /&gt;
== Serveur de clés ==&lt;br /&gt;
* [[Services/Kerberos/Install|Installation d&#039;un serveur Kerberos]]&lt;br /&gt;
* [[Services/Kerberos+LDAP/Install|Installation d&#039;un serveur Kerberos couplé avec LDAP ]]&lt;br /&gt;
&lt;br /&gt;
== Virtual Private Network ==&lt;br /&gt;
* [[Services/VPN/Openvpn|Openvpn]]&lt;br /&gt;
&lt;br /&gt;
== Accès à distance ==&lt;br /&gt;
* [[Services/Remote/VNC/TigerVNC|TigerVNC]]&lt;br /&gt;
&lt;br /&gt;
== Processus noyau ==&lt;br /&gt;
* [[Services/Kernel/CGroup|Control Group]]&lt;br /&gt;
&lt;br /&gt;
== File Transfer Protocol ==&lt;br /&gt;
* [[Services/FTP/SFTP|Secure FTP (SFTP)]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Services/FTP/SFTP&amp;diff=3119</id>
		<title>Services/FTP/SFTP</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Services/FTP/SFTP&amp;diff=3119"/>
		<updated>2015-09-09T16:05:11Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « Pour donner un accès en téléversement à un tiers, la solution la plus logique serait d&amp;#039;utiliser ssh et de limiter ce tiers au serveur sFTP. Bien que ce ne soit oblilga... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pour donner un accès en téléversement à un tiers, la solution la plus logique serait d&#039;utiliser ssh et de limiter ce tiers au serveur sFTP. Bien que ce ne soit oblilgatoire, celui-ci serait emprisonné dans son répertoire utilisateur (chroot)&lt;br /&gt;
&lt;br /&gt;
== Création du groupe et des utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
Création du groupe &#039;&#039;sftponly&#039;&#039; qui limiterait les utilisateurs à l&#039;utilisation de sFTP (accès SSH interdit)&lt;br /&gt;
 groupadd sftponly&lt;br /&gt;
Création d&#039;un utilisateur dont l&#039;accès serait uniquement via sFTP (pas d&#039;ouverture de session possible, en local ou distant) et affectation d&#039;un mot de passe.&lt;br /&gt;
 useradd -m -s /bin/false -c &#039;sFTP User Only&#039; sftptest&lt;br /&gt;
 usermod -aG sftponly  sftptest&lt;br /&gt;
 passwd sftptest&lt;br /&gt;
&lt;br /&gt;
== Modification de la configuration du démon SSH ==&lt;br /&gt;
&lt;br /&gt;
Dans le fichier &amp;lt;path&amp;gt;/etc/ssh/sshd_config&amp;lt;/path&amp;gt;&lt;br /&gt;
Modifier le programme gérant le sFTP afin d&#039;utiliser le wrapper interne à ssh pour lancer le programme sFTP. En effet le binaire ne sera pas accessible depuis le chroot.&lt;br /&gt;
 Subsystem       sftp    internal-sftp&lt;br /&gt;
&lt;br /&gt;
Ajouter à la fin du fichier, la configuration des utilisateurs ayant pour groupe &#039;&#039;sftponly&#039;&#039; afin de les emprisonner dans leur répertoire personnel et de leur permettre l&#039;accès uniquement au service sFTP.&lt;br /&gt;
&lt;br /&gt;
 Match Group sftponly&lt;br /&gt;
    ChrootDirectory %h&lt;br /&gt;
    ForceCommand internal-sftp&lt;br /&gt;
    X11Forwarding no&lt;br /&gt;
    AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
Le démon SSH (sshd) doit être rafraichi&lt;br /&gt;
 service sshd reload&lt;br /&gt;
&lt;br /&gt;
== Ajuster les droits des répertoires utilisateurs créés ==&lt;br /&gt;
&lt;br /&gt;
Le répertoire personnel des utilisateurs sFTP doit avoir pour propriétaire et groupe &#039;&#039;&#039;root&#039;&#039;&#039; et pour permission &#039;&#039;&#039;755&#039;&#039;&#039; (root:root rwxr-xr-x). Afin de pouvoir téléverser, il faut créer un répertoire ayant pour propriétaire l&#039;utilisateur (sftptest ici). en effet l&#039;utilisateur ne pourra pas téléverser à sa racine (son répertoire utilisateur).&lt;br /&gt;
&lt;br /&gt;
 chown root:sftponly /home/sftptest&lt;br /&gt;
 chmod 755 /home/sftptest&lt;br /&gt;
 mkdir /home/sftptest/upload&lt;br /&gt;
 chown sftptest: sftponly /home/sftptest/upload&lt;br /&gt;
 chmod 755 /home/sftptest/upload&lt;br /&gt;
&lt;br /&gt;
== SELinux ==&lt;br /&gt;
&lt;br /&gt;
Par défaut, pour SELinix, le chroot sFTP est en lecture seule. Afin d&#039;autoriser le téléversement, il faut qu&#039;il soit en lecture/écriture. SELInux dispose d&#039;un booléen pour ça.&lt;br /&gt;
&lt;br /&gt;
 setsebool -P ssh_chroot_rw_homedirs on&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
Afin de ne pas perturber le démon SSH en cours d&#039;utilisation, on peut lancer une seconde instance (sur un port différent) en mode debug&lt;br /&gt;
 /usr/sbin/sshd -p 2222 -d&lt;br /&gt;
&lt;br /&gt;
Depuis un autre poste, on test la connexion ssh (qui ne doit pas fonctionner) et le téléversement d&#039;un fichier à la racine (qui doit rapporter une erreur) et dans le répertoire upload (seul ce dernier doit fonctionner).&lt;br /&gt;
 ssh -p 2222 sftptest@monserver&lt;br /&gt;
 sftptest@monserver&#039;s password:&lt;br /&gt;
 This service allows sftp connections only.&lt;br /&gt;
 Connection to monserver closed.&lt;br /&gt;
&lt;br /&gt;
 sftp -p 2222 sftptest@monserver&lt;br /&gt;
 sftptest@monserver&#039;s password:&lt;br /&gt;
 Connected to monserver.&lt;br /&gt;
 sftp&amp;gt; ls&lt;br /&gt;
 upload&lt;br /&gt;
 sftp&amp;gt; put test.txt&lt;br /&gt;
 Uploading test.txt to /test.txt&lt;br /&gt;
 remote open(&amp;quot;/test.txt&amp;quot;): Permission denied&lt;br /&gt;
 sftp&amp;gt; cd upload&lt;br /&gt;
 sftp&amp;gt; put test.txt&lt;br /&gt;
 Uploading test.txt to /upload/test.txt&lt;br /&gt;
 test.txt                    100%    5     0.0KB/s   00:00&lt;br /&gt;
 sftp&amp;gt; exit&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Datasheet&amp;diff=3118</id>
		<title>Datasheet</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Datasheet&amp;diff=3118"/>
		<updated>2015-06-05T13:26:05Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Services ==&lt;br /&gt;
* [[Datasheet/LVM|LVM]]&lt;br /&gt;
* [[Datasheet/MySQL|MySQL]]&lt;br /&gt;
* [[Datasheet/XtraBackup|XtraBackup]]&lt;br /&gt;
* [[Datasheet/RHCluster|RedHat Cluster]]&lt;br /&gt;
* [[Datasheet/MAJ/Postgresql|Mise à jour de postgresql]]&lt;br /&gt;
* [[Datasheet/MAJ/Gitlab|Mise à jour de Gitlab]]&lt;br /&gt;
* [[Datasheet/FileSystem/XFS|Erreur de réparation après un crash sur XFS]]&lt;br /&gt;
* [[Datasheet/Screen|Screen]]&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
* [[Datasheet/Thunderbird/UseDefaultTemplate|Utilisation d&#039;un template par défaut]]&lt;br /&gt;
&lt;br /&gt;
== Virtualisation ==&lt;br /&gt;
* [[Datasheet/Docker|Docker]]&lt;br /&gt;
* [[Datasheet/Virsh|Virsh]]&lt;br /&gt;
* [[Datasheet/Libguestfs|Libguestfs]]&lt;br /&gt;
&lt;br /&gt;
== Systemd ==&lt;br /&gt;
* [[Datasheet/Systemd|Systemd]]&lt;br /&gt;
* [[Datasheet/Journalctl|Journalctl]]&lt;br /&gt;
* [[Datasheet/Hostnamectl|Hostnamectl]]&lt;br /&gt;
* [[Datasheet/Localectl|Localectl]]&lt;br /&gt;
* [[Datasheet/Timedatectl|Timedatectl]]&lt;br /&gt;
* [[Datasheet/Firewalld|Firewalld]]&lt;br /&gt;
&lt;br /&gt;
== Gestion des RPM ==&lt;br /&gt;
* [[Datasheet/yum|Yum]]&lt;br /&gt;
* [[Datasheet/Repoquery|Repoquery]]&lt;br /&gt;
* [[Datasheet/PackageCleanup|Package-cleanup]]&lt;br /&gt;
* [[Datasheet/Fedpkg|Fedpkg]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Datasheet/Screen&amp;diff=3117</id>
		<title>Datasheet/Screen</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Datasheet/Screen&amp;diff=3117"/>
		<updated>2015-06-05T13:25:08Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « {{Datasheet}} = Screen =  == Présentation ==  Screen [http://fr.wikipedia.org/wiki/GNU_Screen GNU Screen] est un multiplexeur de terminaux permettant d&amp;#039;ouvrir plusieurs t... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Datasheet}}&lt;br /&gt;
= Screen =&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
&lt;br /&gt;
Screen [http://fr.wikipedia.org/wiki/GNU_Screen GNU Screen] est un multiplexeur de terminaux permettant d&#039;ouvrir plusieurs terminaux dans une même console, de passer de l&#039;un à l&#039;autre et de les récupérer plus tard.&lt;br /&gt;
&lt;br /&gt;
Toutes les commandes à destination de screen sont toutes précédées de {{Button|CTRL}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de la {{Button|touche de commande}}&lt;br /&gt;
&lt;br /&gt;
== Utilisation basique ==&lt;br /&gt;
&lt;br /&gt;
* Ouvrir une session screen&amp;lt;pre&amp;gt;screen&amp;lt;/pre&amp;gt;Par défaut, le nom de la session sera &amp;lt;tty utilisé&amp;gt;.&amp;lt;nom d&#039;hôte simple&amp;gt;&lt;br /&gt;
* Ouvrir une session screen en la nommant&amp;lt;pre&amp;gt;screen -S nom_de_la_session&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Détacher une session screen: {{Button|CTRL}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|d}}&lt;br /&gt;
* Se rattacher à une session nommée&amp;lt;pre&amp;gt;screen -r nom_de_la_session&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Se rattacher à une session&amp;lt;pre&amp;gt;screen -r&amp;lt;/pre&amp;gt;Si plusieurs sessions sont disponibles, screen affichera une liste de celles-ci.&amp;lt;pre&amp;gt; 21906.pts-3.didier      (Detached)&amp;lt;/pre&amp;gt; Il faudra alors spécifier soit son identifiant (21906), soit son nom (pts-3.didier)&lt;br /&gt;
* Lister les sessions screen existantes&amp;lt;pre&amp;gt;screen -ls&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Fermer une session screen: {{Button|CTRL}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|\}} ( {{Button|AltGr}} + {{Button|8}} ) ou &amp;lt;pre&amp;gt;exit&amp;lt;/pre&amp;gt;&lt;br /&gt;
* S&#039;attacher à un screen déjà attaché (partage de session)&amp;lt;pre&amp;gt;screen -x nom_de_la_session&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Raccourcis clavier ==&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|n}}: Aller au terminal suivant (next)&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|p}}: Aller au terminal précédent (previous).&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|0}}..{{Button|9}}: aller au terminal n.&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|&#039;}}: saisir dans le prompt le numéro du terminal.&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|&amp;quot;}}: lister des différents terminaux, avec la possibilité d&#039;en choisir un.&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|w}}: lister les terminaux actuels avec leur nom.&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|a}}: retourner au terminal d&#039;où l&#039;on vient.&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|A}}: nommer les terminaux et s&#039;y rendre par la suite plus aisément.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Séparation de la console&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;}} ( {{Button|AltGr}} + {{Button|6}} ): Sépare la console courante en deux consoles verticalement (la console courante devient celle de gauche).&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|S}}: Sépare la console courante en deux consoles horizontalement (la console courante devient celle du dessus).&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|TAB}}: Une fois la console séparée, ce raccourci permet de se positionner sur la console suivante.&lt;br /&gt;
{{Admon/tip|Seconde console|Pour la seconde console, il faut soit:&lt;br /&gt;
&lt;br /&gt;
créer un nouveau screen {{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|AltGr}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|c}}&lt;br /&gt;
&lt;br /&gt;
démarrer un nouveau terminal{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|c}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|Q}}: Supprime toutes les consoles, sauf la console courante.&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|K}}: Supprime la console courante.&lt;br /&gt;
{{Admon/tip|Suppression de région|La suppression d&#039;une ou plusieurs régions ne supprime pas les consoles qui s&#039;y trouvaient.}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Divers&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|F}}: Redimensionnement de la fenêtre à la taille de son terminal. Utile lorsque l&#039;on est plusieurs sur une même console et que l&#039;on n&#039;a pas tous un écran 16/9e.&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|H}}: Permet de logguer tout ce qui passe à l&#039;écran dans un fichier $HOME/screenlog.XX (XX : no de la console)&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|?}}: Affiche une petite aide&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Déplacement et copie&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|ESC}}: Entre en mode copie/scrollback. On peut se déplacer dans le screen avec les flèches directionnelles et la touche {{Button|ENTER}} Permet de commencer une sélection. Un second appui sur la touche {{Button|ENTER}} termine la sélection.&lt;br /&gt;
&lt;br /&gt;
{{Button|Ctrl}} &amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt; {{Button|a}} suivi de {{Button|]}} ( {{Button|AltGr}} + {{Button|)}} ): Colle le contenu sélectionné précédemment.&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Button&amp;diff=3116</id>
		<title>Modèle:Button</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Button&amp;diff=3116"/>
		<updated>2015-06-05T13:23:59Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « &amp;lt;span class=&amp;quot;mw-code&amp;quot; style=&amp;quot;border-radius:4px;padding:0.25em 0.5em;margin:0.25em;&amp;quot;&amp;gt;{{{1|Button}}}&amp;lt;/span&amp;gt; »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;mw-code&amp;quot; style=&amp;quot;border-radius:4px;padding:0.25em 0.5em;margin:0.25em;&amp;quot;&amp;gt;{{{1|Button}}}&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Koji/Installation&amp;diff=3115</id>
		<title>Koji/Installation</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Koji/Installation&amp;diff=3115"/>
		<updated>2015-04-23T11:38:15Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Mettre en place un système de construction de RPM Koji&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
{{class|Koji}} est une suite logicielle de construction de RPM. Il utilise [[RPM/Mock|mock]] pour créer des environnements&lt;br /&gt;
chrootés et y effectuer les builds.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:KojiArch.svg|441px|vignette|centré|Architecture du koji]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Koji-Hub&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est le centre nerveux de toutes les opérations Koji. Il s&#039;agit d&#039;un serveur XML-RPC fonctionnant sous mod_python pour Apache. {{class|koji-hub}} est passif : il ne reçoit que les appels XML-RPC et s&#039;appuie sur les autres outils de la suite pour la construction. {{class|koji-hub}} est le seul composant qui a un accès direct à la base de données et est l&#039;un des deux composants qui ont un accès en écriture au système de fichiers.&lt;br /&gt;
* &#039;&#039;&#039;Kojid&#039;&#039;&#039; ou &#039;&#039;&#039;Koji-builder&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est le démon de compilation qui s&#039;exécute sur chacune des machines de construction. Sa principale responsabilité est de scruter les demandes de construction entrantes et de les exécuter. Pour cela, {{class|kojid}} interroge {{class|koji-hub}}. {{class|Kojid}} est également responsable d&#039;autres tâches que la construction : la création d&#039;images d&#039;installation par exemple. kojid utilise Mock pour la construction. Il crée également un buildroot vierge pour chaque génération. kojid est écrit en Python et communique avec koji-hub par l&#039;intermédiaire de XML-RPC.&lt;br /&gt;
* &#039;&#039;&#039;Koji-Web&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est un ensemble de scripts qui s&#039;exécutent avec mod_python et utilise le moteur de templates Cheetah pour fournir une interface web à {{class|Koji}}. Il agit comme un client à {{class|koji-hub}} en offrant une interface d&#039;aministration limitée. {{class|koji-Web}} expose un grand nombre d&#039;informations et fournit également un moyen pour certaines opérations, telles que l&#039;annulation de builds.&lt;br /&gt;
* &#039;&#039;&#039;Koji-client&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est une interface en ligne de commande ( CLI = Command Line Interface ) écrit en Python qui fournit de nombreux hooks à {{class|Koji}}. Il permet à l&#039;utilisateur d&#039;interroger la plupart des données ainsi que d&#039;effectuer des actions telles que l&#039;ajout d&#039;utilisateurs et de lancer la construction des demandes.&lt;br /&gt;
* &#039;&#039;&#039;Kojira&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est un démon qui garde la racine de construction repodata à jour. Il est responsable de l&#039;enlèvement des racines redondantes et du nettoyage après une demande de construction est terminée.&lt;br /&gt;
&lt;br /&gt;
Les composants de {{class|Koji}} peuvent être installés sur des serveurs différents. La seule obligation est d&#039;autoriser la communication entre les différents composants de la suite.&lt;br /&gt;
&lt;br /&gt;
{{class|Koji}} supporte nativement l&#039;authentification par serveur Kerberos et par certificat SSL. Seul {{class|koji-client}} supporte l&#039;authentification par mot de passe. De ce fait, l&#039;authentification par mot de passe ne sera même pas abordée.&lt;br /&gt;
&lt;br /&gt;
La méthode d&#039;authentification doit être choisie dès le début de l&#039;installation. Dans la suite de ce document, nous mettrons en place la méthode SSL.&lt;br /&gt;
&lt;br /&gt;
{{class|Koji}} utilise beaucoup d&#039;espace disque dans son répertoire primaire &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;. De plus Mock en utilisera beaucoup aussi sur les répertoires &amp;lt;path&amp;gt;/var/lib/mock&amp;lt;/path&amp;gt; et &amp;lt;path&amp;gt;/var/cache/mock&amp;lt;/path&amp;gt;. Il vaut mieux prévoir des partitions dédiées à ces répertoires ( les répertoires de Mock doivent appartenir au groupe mock et avoir les permissions 02755 ).&lt;br /&gt;
&lt;br /&gt;
Pour un aperçu rapide des outils utilisés : [[RPM/Yum|yum]], [[RPM/Mock|mock]], {{class|Koji}} (et tous ses composants), [[RPM/Mash|mash]], et comment ils fonctionnent ensemble, il existe une excellente présentation &amp;lt;ref&amp;gt;Présentation des outils de création/gestion des RPM [http://indico.cern.ch/event/55091 | Version online ]&amp;lt;br&amp;gt;Version offline: [[Fichier:MockKojiMash.pdf]] ( non mise à jour )&amp;lt;/ref&amp;gt; créée par Steve Traylen du CERN.&lt;br /&gt;
&lt;br /&gt;
Le dépôt git de RussianFedora avec les fichiers de configuration de {{class|Koji}} &amp;lt;ref&amp;gt;https://github.com/RussianFedora/koji-setup&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connaissances requises ===&lt;br /&gt;
* Connaissances basiques de l&#039;authentification par certificat SSL.&lt;br /&gt;
* Connaissances basiques de création de base de données PostgreSQL and d&#039;importation de structure de base&lt;br /&gt;
* Connaissances basiques de l&#039;outil psql&lt;br /&gt;
* Connaissances basiques de configuration d&#039;Apache&lt;br /&gt;
* Connaissances basiques des outils yum/createrepo/mock &lt;br /&gt;
* Connaissances basiques de la ligne de commandes&lt;br /&gt;
* Connaissances basiques sur la construction de RPM&lt;br /&gt;
&lt;br /&gt;
=== Dépendances ===&lt;br /&gt;
&lt;br /&gt;
Sur le serveur ({{class|koji-hub}} / {{class|kojiweb}} )&lt;br /&gt;
* httpd&lt;br /&gt;
* mod_ssl&lt;br /&gt;
* postgresql-server&lt;br /&gt;
* mod_wsgi&lt;br /&gt;
* MySQL-python&lt;br /&gt;
&lt;br /&gt;
Sur les constructeurs ( {{class|kojid}} )&lt;br /&gt;
* mock&lt;br /&gt;
* setarch&lt;br /&gt;
* rpm-build&lt;br /&gt;
* createrepo&lt;br /&gt;
&lt;br /&gt;
Si le mode d&#039;authentification choisie est Kerberos, il faudra aussi que le réseau local ait un serveur DNS et une dépendance supplémentaire est à installer sur le serveur et les constructeurs.&lt;br /&gt;
* mod_auth_kerb&lt;br /&gt;
&lt;br /&gt;
=== Espace disque ===&lt;br /&gt;
&lt;br /&gt;
comme &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; utilise [[RPM/Mock|Mock]], les répertoires &amp;lt;path&amp;gt;/var/lib/mock&amp;lt;/path&amp;gt; et &amp;lt;path&amp;gt;/var/cache/mock&amp;lt;/path&amp;gt; grossiront mais une purge de ces répertoires est mise en place par Koji.&lt;br /&gt;
&lt;br /&gt;
Les répertoires qui vont grossir au fur et à mesure de l&#039;utilisation sont ceux de:&lt;br /&gt;
* Mock: &lt;br /&gt;
* La base de données: &amp;lt;path&amp;gt;/var/lib/psql&amp;lt;/path&amp;gt;&lt;br /&gt;
* Le répertoire principal de Koji: &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;&lt;br /&gt;
* Le répertoire des dépôts: &amp;lt;path&amp;gt;/mnt/repo&amp;lt;/path&amp;gt;&lt;br /&gt;
Il sera donc judicieux de leur attribuer une partition spécifique avec une taille dynamique (lvm)&lt;br /&gt;
&lt;br /&gt;
== Génération des certificats SSL ==&lt;br /&gt;
&lt;br /&gt;
Ces certificats serviront à l&#039;authentification des éléments de Koji sur le {{class|koji-hub}}.&lt;br /&gt;
&lt;br /&gt;
Création du répertoire des certificats&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 mkdir /etc/pki/koji &amp;amp;&amp;amp; cd /etc/pki/koji&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Création du fichier de configuration de nos futurs certificats&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/ssl.cnf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HOME                    = .&lt;br /&gt;
RANDFILE                = .rand&lt;br /&gt;
&lt;br /&gt;
[ca] &lt;br /&gt;
default_ca              = ca_default&lt;br /&gt;
&lt;br /&gt;
[ca_default] &lt;br /&gt;
dir                     = .&lt;br /&gt;
certs                   = $dir/certs&lt;br /&gt;
crl_dir                 = $dir/crl&lt;br /&gt;
database                = $dir/index.txt&lt;br /&gt;
new_certs_dir           = $dir/newcerts&lt;br /&gt;
certificate             = $dir/%s_ca_cert.pem&lt;br /&gt;
private_key             = $dir/private/%s_ca_key.pem&lt;br /&gt;
serial                  = $dir/serial&lt;br /&gt;
crl                     = $dir/crl.pem&lt;br /&gt;
x509_extensions         = usr_cert&lt;br /&gt;
name_opt                = ca_default&lt;br /&gt;
cert_opt                = ca_default&lt;br /&gt;
default_days            = 3650&lt;br /&gt;
default_crl_days        = 30&lt;br /&gt;
default_md              = sha256&lt;br /&gt;
preserve                = no&lt;br /&gt;
policy                  = policy_match&lt;br /&gt;
&lt;br /&gt;
[policy_match] &lt;br /&gt;
countryName             = match&lt;br /&gt;
stateOrProvinceName     = match&lt;br /&gt;
organizationName        = match&lt;br /&gt;
organizationalUnitName  = optional&lt;br /&gt;
commonName              = supplied&lt;br /&gt;
emailAddress            = optional&lt;br /&gt;
&lt;br /&gt;
[req] &lt;br /&gt;
default_bits            = 4096&lt;br /&gt;
default_keyfile         = privkey.pem&lt;br /&gt;
distinguished_name      = req_distinguished_name&lt;br /&gt;
attributes              = req_attributes&lt;br /&gt;
x509_extensions         = v3_ca # The extentions to add to the self signed cert&lt;br /&gt;
string_mask             = MASK:0x2002&lt;br /&gt;
&lt;br /&gt;
[req_distinguished_name] &lt;br /&gt;
countryName                     = Country Name (2 letter code)&lt;br /&gt;
countryName_default             = FR&lt;br /&gt;
countryName_min                 = 2&lt;br /&gt;
countryName_max                 = 2&lt;br /&gt;
stateOrProvinceName             = State or Province Name (full name)&lt;br /&gt;
stateOrProvinceName_default     = Languedoc Roussilon&lt;br /&gt;
localityName                    = Locality Name (eg, city)&lt;br /&gt;
localityName_default            = Beaucaire&lt;br /&gt;
0.organizationName              = Organization Name (eg, company)&lt;br /&gt;
0.organizationName_default      = Home&lt;br /&gt;
organizationalUnitName          = Organizational Unit Name (eg, section)&lt;br /&gt;
commonName                      = Common Name (eg, your name or your server\&#039;s hostname)&lt;br /&gt;
commonName_max                  = 64&lt;br /&gt;
emailAddress                    = Email Address&lt;br /&gt;
emailAddress_max                = 64&lt;br /&gt;
&lt;br /&gt;
[req_attributes] &lt;br /&gt;
challengePassword               = A challenge password&lt;br /&gt;
challengePassword_min           = 4&lt;br /&gt;
challengePassword_max           = 20&lt;br /&gt;
unstructuredName                = An optional company name&lt;br /&gt;
&lt;br /&gt;
[usr_cert] &lt;br /&gt;
basicConstraints                = CA:FALSE&lt;br /&gt;
nsComment                       = &amp;quot;OpenSSL Generated Certificate&amp;quot;&lt;br /&gt;
subjectKeyIdentifier            = hash&lt;br /&gt;
authorityKeyIdentifier          = keyid,issuer:always&lt;br /&gt;
&lt;br /&gt;
[v3_ca] &lt;br /&gt;
subjectKeyIdentifier            = hash&lt;br /&gt;
authorityKeyIdentifier          = keyid:always,issuer:always&lt;br /&gt;
basicConstraints                = CA:true&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/note|Modification du fichier ssl.cnf|Bien que cela ne soit pas obligatoire, il est recommandé d&#039;éditer les champs suffixés par &#039;&#039;&#039;_default&#039;&#039;&#039; dans la section &#039;&#039;&#039;[req_distinguished_name]&#039;&#039;&#039;, afin de coller aux informations du serveur en cours d&#039;installation&amp;lt;br&amp;gt;Cela vous permettra d&#039;accepter directement les valeurs proposées par défaut à la génération des certificats.&amp;lt;br&amp;gt;Les autres sections n&#039;ont pas besoin d&#039;être éditées.}}&lt;br /&gt;
&lt;br /&gt;
=== Génération de l&#039;autorité de certification ===&lt;br /&gt;
&lt;br /&gt;
Toujours depuis le répertoire /etc/pki/koji, on initialise notre générateur et on génère l’autorité de certification. Celle-ci se compose d&#039;une paire clé/certificat qui servira à signer tous les autres certificats.&lt;br /&gt;
&lt;br /&gt;
Ici, le CN sera obligatoirement le nom d&#039;hôte du serveur (FQDN), les autres renseignements ne sont pas bloquants pour la suite.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /etc/pki/koji/&lt;br /&gt;
mkdir {certs,private,confs}&lt;br /&gt;
touch index.txt&lt;br /&gt;
echo 01 &amp;gt; serial&lt;br /&gt;
openssl genrsa -out private/koji_ca_cert.key 4096&lt;br /&gt;
openssl req -config ssl.cnf -new -x509 -days 3650 -key private/koji_ca_cert.key \&lt;br /&gt;
-out koji_ca_cert.crt -extensions v3_ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Générer les certificats des composants de Koji et le certificat de l&#039;administrateur===&lt;br /&gt;
&lt;br /&gt;
Chaque composant de Koji a besoin d&#039;un certificat.&lt;br /&gt;
Kojihub et kojiweb ont besoin d&#039;avoir le nome d&#039;hôte pleinement qualifié (FQDN) en CN, on se servira de OU pour distinguer les certificats. Pour les autres certificats, le CN doit être le nom du composant ( kojira ), le login du compte administrateur ou le nom du builder qui sera définit avec koji-client.&lt;br /&gt;
Par simplicité, on va se servir de ces scripts pour générer les certificats des composants et les certificats web.&lt;br /&gt;
&lt;br /&gt;
Script de génération des certificats&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/generate-certificate.sh&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#if you change your certificate authority name to something else you will need to change the caname value to reflect the change.&lt;br /&gt;
caname=koji&lt;br /&gt;
&lt;br /&gt;
# user is equal to parameter one or the first argument when you actually run the script&lt;br /&gt;
user=$1&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;$user&amp;quot; == &amp;quot;&amp;quot; ]]&lt;br /&gt;
then&lt;br /&gt;
	echo &amp;quot;Usage: $(basename $0) USER&amp;quot;&lt;br /&gt;
	exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Generate certificates for \&amp;quot;${user}\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
openssl genrsa -out certs/${user}.key 4096&lt;br /&gt;
&lt;br /&gt;
cat ssl.cnf | sed &#039;s/insert_hostname/&#039;${user}&#039;/&#039;&amp;gt; ssl2.cnf&lt;br /&gt;
&lt;br /&gt;
openssl req -config ssl2.cnf -new -nodes -out certs/${user}.csr -key certs/${user}.key&lt;br /&gt;
&lt;br /&gt;
openssl ca -config ssl2.cnf -keyfile private/${caname}_ca_cert.key -cert ${caname}_ca_cert.crt \&lt;br /&gt;
	-out certs/${user}.crt -outdir certs -infiles certs/${user}.csr&lt;br /&gt;
&lt;br /&gt;
cat certs/${user}.crt certs/${user}.key &amp;gt; ${user}.pem&lt;br /&gt;
&lt;br /&gt;
mv ssl2.cnf confs/${user}-ssl.cnf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Script de génération des certificats pour les navigateurs Web&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/generate-web-certificate.sh&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#if you change your certificate authority name to something else you will need to change the caname value to reflect the change.&lt;br /&gt;
caname=koji&lt;br /&gt;
&lt;br /&gt;
# user is equal to parameter one or the first argument when you actually run the script&lt;br /&gt;
user=$1&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;$user&amp;quot; == &amp;quot;&amp;quot; ]]&lt;br /&gt;
then&lt;br /&gt;
	echo &amp;quot;Usage: $(basename $0) USER&amp;quot;&lt;br /&gt;
	exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Generate web certificates for \&amp;quot;${user}\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
openssl pkcs12 -export -inkey certs/${user}.key -in certs/${user}.crt -CAfile ${caname}_ca_cert.crt \&lt;br /&gt;
	-out certs/${user}_browser_cert.p12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
On génère les certificats comme cela pour tous les composants et users du tableau récapitulatif:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /etc/pki/koji/&lt;br /&gt;
./generate-certificate.sh kojiweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Le user choisi pour être le koji admin est le user didier.&lt;br /&gt;
&lt;br /&gt;
De plus pour les utilisateurs (réels) de {{class|koji}}, on générera les certificats web comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./generate-web-certificate.sh didier&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom du certificat&lt;br /&gt;
! CN (commonName)&lt;br /&gt;
! OU (organizationalUnitName)&lt;br /&gt;
|-&lt;br /&gt;
| kojihub&lt;br /&gt;
| koji.didier-linux.eu (FQDN)&lt;br /&gt;
| kojihub&lt;br /&gt;
|-&lt;br /&gt;
| kojiweb&lt;br /&gt;
| koji.didier-linux.eu (FQDN)&lt;br /&gt;
| kojiweb&lt;br /&gt;
|-&lt;br /&gt;
| kojira&lt;br /&gt;
| kojira&lt;br /&gt;
| Admin&lt;br /&gt;
|-&lt;br /&gt;
| didier ( utilisateur koji admin )&lt;br /&gt;
| didier ( ici c&#039;est le user et non le nom d&#039;hôte de la machine )&lt;br /&gt;
| Admin&lt;br /&gt;
|-&lt;br /&gt;
| kojibuilder.didier-linux.eu&lt;br /&gt;
| kojibuilder.didier-linux.eu&lt;br /&gt;
| builder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Copier les certificats dans le home de utilisateur admin ===&lt;br /&gt;
&lt;br /&gt;
On copie le certificat correspondant à l&#039;administrateur du {{class|Koji}}, et l&#039;autorité de certification dans son home.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir ~/.koji&lt;br /&gt;
cp /etc/pki/koji/didier.pem ~/.koji/client.crt&lt;br /&gt;
cp /etc/pki/koji/koji_ca_cert.crt ~/.koji/clientca.crt&lt;br /&gt;
cp /etc/pki/koji/koji_ca_cert.crt ~/.koji/serverca.crt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/note|Modification des paramètres par défaut|Pour modifier des paramètre d&#039;un client sans modifier la configuration générale, il faut copier le fichier &amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt; dans le home de l&#039;utilisateur &amp;lt;path&amp;gt;~/.koji/config&amp;lt;/path&amp;gt; et y effectuer les modifications dans celui-ci.}}&lt;br /&gt;
&lt;br /&gt;
==Mise en place des principals Kerberos==&lt;br /&gt;
&lt;br /&gt;
Le serveur Kerberos doit pouvoir être trouvé grâce au DNS. Le point final indique que l&#039;hôte est pleinement qualifié (FQDN).&lt;br /&gt;
&amp;lt;pre&amp;gt;_kerberos._udp    IN SRV  10 100 88 kerberos.didier-linux.eu.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Principal&lt;br /&gt;
! Utilisation&lt;br /&gt;
|-&lt;br /&gt;
| host/kojihub@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-hub pour communiquer avec le client koji&lt;br /&gt;
|-&lt;br /&gt;
| HTTP/kojiweb@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-web pour négotier une authentifiaction avec le navigateur web. C&#039;est le principal pour l&#039;authentification Apache &amp;lt;package&amp;gt;mod_auth_kerb&amp;lt;/package&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| koji/kojiweb@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-web pour communiquer avec koji-hub. C&#039;est le principal qui va authentifier koji-web sur Kerberos comme &amp;quot;koji/kojiweb@EXAMPLE.COM&amp;quot;. Koji-web relayera aussi le nom d&#039;utilisateur (authentification Apache) vers koji-hub (koji-hub config option &#039;&#039;&#039;&#039;&#039;ProxyPrincipals&#039;&#039;&#039;&#039;&#039;). &lt;br /&gt;
|-&lt;br /&gt;
| koji/kojira@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par kojira pour communiquer avec koji-hub&lt;br /&gt;
|-&lt;br /&gt;
| compile/builder1@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par le constructeur koji pour communiquer avec koji-hub&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Ajout des utilisateurs Koji aux alias du serveur de mail local==&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, un serveur [[Mail/MTA/Sendmail|sendmail]] en local est déjà configuré et opérationnel.&lt;br /&gt;
&lt;br /&gt;
Appairer les utilisateurs Koji aux véritables adresses mail.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/aliases&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Person who should get root&#039;s mail&lt;br /&gt;
root:           didier@didier-linux.eu&lt;br /&gt;
didier:         didier@didier-linux.eu&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Puis lancer la régénération des alias&lt;br /&gt;
 # newaliases&lt;br /&gt;
&lt;br /&gt;
== Serveur PostgreSQL ==&lt;br /&gt;
Une fois l&#039;autentification mise en place, nous avons besoin d&#039;installer un serveur [[DBMS/PostgreSQL/Brief|PostgreSQL]], de le configurer et de mettre en place la structure de la base de données pour {{class|Koji}}.&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* /var/lib/pgsql/data/pg_hba.conf&lt;br /&gt;
* /var/lib/pgsql/data/postgresql.conf&lt;br /&gt;
&lt;br /&gt;
===Installation du serveur PostgreSQL===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install postgresql-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Initialisation de la base de données PostgreSQL===&lt;br /&gt;
&lt;br /&gt;
Les commandes suivantes initialise le serveur [[DBMS/PostgreSQL/Brief|PostgreSQL]] et le démarre.&lt;br /&gt;
Le script d&#039;init a été converti à systemd sur les distributions Fedora 16 et supérieures et la cible &#039;&#039;&#039;initdb&#039;&#039;&#039; du script d&#039;init a été supprimée. On initialise directement avec les commandes du SGBD.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - postgres -c &amp;quot;PGDATA=/var/lib/pgsql/data initdb&amp;quot;&lt;br /&gt;
systemctl start postgresql.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{admon/tip|Initialisation du SGBD sur les distributions sysVinit|&amp;lt;pre&amp;gt;service postgresql initdb &amp;amp;&amp;amp; service postgresql start&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Compte utilisateur ===&lt;br /&gt;
&lt;br /&gt;
Mise en place du compte &#039;&#039;&#039;koji&#039;&#039;&#039; sur le système (utilisateur unix) et mise en place d&#039;un mot de passe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
useradd koji&lt;br /&gt;
passwd koji&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setup de PostgreSQL et import de la structure de la base ===&lt;br /&gt;
&lt;br /&gt;
Création de l&#039;utilisateur PostgreSQL &#039;&#039;&#039;koji&#039;&#039;&#039; et création de sa base de données, puis import de la structure.&lt;br /&gt;
{{Admon/bug|Import de la structure|Il est important laisser le joker (*) afin de ne pas se restreindre à une version particulière de Koji. Durant des test, il a été découvert que la restriction à une version spécifique de Koji ne créé pas  correctement toutes les tables.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - postgres&lt;br /&gt;
createuser koji&lt;br /&gt;
Shall the new role be a superuser? (y/n) n&lt;br /&gt;
Shall the new role be allowed to create databases? (y/n) n&lt;br /&gt;
Shall the new role be allowed to create more new roles? (y/n) n&lt;br /&gt;
createdb -O koji koji&lt;br /&gt;
logout&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - koji&lt;br /&gt;
psql koji koji &amp;lt; /usr/share/doc/koji*/docs/schema.sql&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autorisation de Koji-web et Koji-hub aux resources===&lt;br /&gt;
&#039;&#039;Dans cet exemple, Koji-web et Koji-hub sont démarrés sur localhost.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ces paramètres doivent être ajouter avant les autres.&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host    koji        koji        127.0.0.1/32          trust&lt;br /&gt;
host    koji        koji          ::1/128             trust&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
On peut aussi utiliser les sockets UNIX. La variable &#039;&#039;&#039;&#039;&#039;DBHost&#039;&#039;&#039;&#039;&#039; variable ne doit pas être renseigné avec cette méthode.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local   koji        apache                            trust&lt;br /&gt;
local   koji        apache      127.0.0.1/32          trust&lt;br /&gt;
local   koji        apache        ::1/128             trust&lt;br /&gt;
local   koji        koji                              trust&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Application des changements à chaud ===&lt;br /&gt;
&lt;br /&gt;
Informer postgreSQL que les fichiers de configuration doivent être relus.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@localhost$ su - postgres&lt;br /&gt;
postgres@localhost$ pg_ctl reload&lt;br /&gt;
postgres@localhost$ exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout du premier administrateur du Koji à la base PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
Le premier administrateur du &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; doit être ajouter à la main avec des commandes SQL. Une fois ajouté avec les droits administarteur, Il pourra gérer les autres utilisateurs de &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; avec l&#039;outil d&#039;administration en ligne de commande.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;authentifiaction SSL ou Kerberos, il n&#039;y a pas besoin de mettre un mot de passe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@localhost$ su - koji&lt;br /&gt;
koji@localhost$ psql&lt;br /&gt;
koji=&amp;gt; insert into users (name, status, usertype) values (&#039;admin-user-name&#039;, 0, 0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Se donner les droits admin ===&lt;br /&gt;
&lt;br /&gt;
Commande permettant de se donner les droits administrateur. Pour la lancer, on doit connaitre l&#039;ID de l&#039;utilisateur.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji=&amp;gt; insert into user_perms (user_id, perm_id, creator_id) values (&amp;lt;ID of user inserted above&amp;gt;, 1, &amp;lt;ID of user inserted above&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Admon/tip|Connaitre l&#039;ID des utilisateurs|Pour connaitre les IDs des utilisateurs du &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, on doit lancer une commande SQL.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji=&amp;gt; select * from users;&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
A ce stade, aucune action ne peut être démarrée tant que le kojihub n&#039;est pas configuré et le serveur web démarré.&lt;br /&gt;
&lt;br /&gt;
== Koji Hub ==&lt;br /&gt;
&lt;br /&gt;
koji-hub est le centre nerveux de toutes les opérations Koji. Il s&#039;agit d&#039;un serveur XML-RPC fonctionnant sous mod_python pour Apache. koji-hub est passif : il ne reçoit que les appels XML-RPC et s&#039;appuie sur les autres outils de la suite pour la construction. koji-hub est le seul composant qui a un accès direct à la base de données et est l&#039;un des deux composants qui ont un accès en écriture au système de fichiers. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* /etc/httpd/conf/httpd.conf&lt;br /&gt;
* /etc/httpd/conf.d/kojihub.conf&lt;br /&gt;
* /etc/httpd/conf.d/ssl.conf (when using ssl auth)&lt;br /&gt;
* /etc/koji-hub/hub.conf&lt;br /&gt;
* /etc/koji.conf&lt;br /&gt;
&lt;br /&gt;
Le répertoire de travail sera &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;.&lt;br /&gt;
{{Admon/bug|Répertoire de travail de Koji|Si le répertoire de travail de Koji n&#039;est pas &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;, il est impératif de créer un lien symbolique du répertoire de travail de Koji dans &amp;lt;path&amp;gt;/mnt&amp;lt;/path&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;ln -s /path/to/koji/datadir /mnt/koji&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Installation de {{class|koji-hub}}===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-hub httpd mod_ssl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On bride tout d&#039;abord le nombre maximum de requête sur le serveur [[Webserver/Apache|apache]] à une valeur plus raisonnable afin de prévenir une saturation et/ou un crash du serveur web.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf/httpd.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;IfModule prefork.c&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
MaxRequestsPerChild  100&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;IfModule worker.c&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
MaxRequestsPerChild  100&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Le répertoire &amp;lt;path&amp;gt;/mnt/koji/packages&amp;lt;/path&amp;gt; doit être accessible par HTTP. On ajoute donc un alias.&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojipackages.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Alias /packages &amp;quot;/mnt/koji/packages&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/mnt/koji/packages&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order allow,deny&lt;br /&gt;
        Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/ssl.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
LoadModule ssl_module modules/mod_ssl.so&lt;br /&gt;
&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog&lt;br /&gt;
&lt;br /&gt;
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)&lt;br /&gt;
SSLSessionCacheTimeout  300&lt;br /&gt;
&lt;br /&gt;
SSLMutex default&lt;br /&gt;
&lt;br /&gt;
SSLRandomSeed startup file:/dev/urandom  256&lt;br /&gt;
SSLRandomSeed connect builtin&lt;br /&gt;
&lt;br /&gt;
SSLCryptoDevice builtin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
  ErrorLog logs/ssl_error_log&lt;br /&gt;
  TransferLog logs/ssl_access_log&lt;br /&gt;
  LogLevel warn&lt;br /&gt;
&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLProtocol all -SSLv2&lt;br /&gt;
  SSLCipherSuite RC4-SHA:AES128-SHA:ALL:!ADH:!EXP:!LOW:!MD5:!SSLV2:!NULL&lt;br /&gt;
&lt;br /&gt;
  SSLCertificateFile /etc/pki/koji/certs/kojihub.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/pki/koji/certs/kojihub.key&lt;br /&gt;
  SSLCertificateChainFile /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
  SSLCACertificateFile /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
  SSLVerifyClient require&lt;br /&gt;
  SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Files ~ &amp;quot;\.(cgi|shtml|phtml|php3?)$&amp;quot;&amp;gt;&lt;br /&gt;
    SSLOptions +StdEnvVars&lt;br /&gt;
  &amp;lt;/Files&amp;gt;&lt;br /&gt;
  &amp;lt;Directory &amp;quot;/var/www/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
    SSLOptions +StdEnvVars&lt;br /&gt;
  &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  SetEnvIf User-Agent &amp;quot;.*MSIE.*&amp;quot; \&lt;br /&gt;
         nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
         downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
  CustomLog logs/ssl_request_log \&lt;br /&gt;
          &amp;quot;%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \&amp;quot;%r\&amp;quot; %b&amp;quot;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojihub.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Alias /kojihub /usr/share/koji-hub/kojixmlrpc.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/usr/share/koji-hub&amp;quot;&amp;gt;&lt;br /&gt;
    Options ExecCGI&lt;br /&gt;
    SetHandler wsgi-script&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alias /kojifiles &amp;quot;/mnt/koji/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/mnt/koji&amp;quot;&amp;gt;&lt;br /&gt;
    Options Indexes SymLinksIfOwnerMatch&lt;br /&gt;
    AllowOverride None&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Location /kojihub/ssllogin&amp;gt;&lt;br /&gt;
        SSLVerifyClient require&lt;br /&gt;
        SSLVerifyDepth  10&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Location /kojihub&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/koji-hub/hub.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[hub]&lt;br /&gt;
DBName = koji&lt;br /&gt;
DBUser = koji&lt;br /&gt;
DBHost = localhost&lt;br /&gt;
KojiDir = /mnt/koji&lt;br /&gt;
&lt;br /&gt;
DNUsernameComponent = CN&lt;br /&gt;
ProxyDNs = C=FR,ST=Languedoc Roussillon,L=Beaucaire,O=Home,OU=kojiweb,CN=koji.didier-linux.eu,emailAddress=root@didier-linux.eu&lt;br /&gt;
&lt;br /&gt;
LoginCreatesUser = On&lt;br /&gt;
KojiWebURL = http://koji.didier-linux.eu/koji&lt;br /&gt;
EmailDomain = didier-linux.eu&lt;br /&gt;
NotifyOnSuccess = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[koji]&lt;br /&gt;
server = http://koji.didier-linux.eu/kojihub&lt;br /&gt;
weburl = http://koji.didier-linux.eu/koji&lt;br /&gt;
topurl = http://koji.didier-linux.eu/kojifiles&lt;br /&gt;
topdir = /mnt/koji&lt;br /&gt;
cert = ~/.koji/client.crt&lt;br /&gt;
ca = ~/.koji/clientca.crt&lt;br /&gt;
serverca = ~/.koji/serverca.crt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Configuration de [[Security/SELinux|SELinux]] ===&lt;br /&gt;
Si le mode enforcing est utilisé, on doit autoriser [[Webserver/Apache|apache]] à acceder au serveur [[SGBD/PostgreSQL]]. Même si le mode est permissive, il est recommandé de lancer la commande suivante afin de se prémunir d&#039;un changement de mode de [[Security/SELinux|SELinux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setsebool -P httpd_can_network_connect_db 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Squelette des fichiers Koji ===&lt;br /&gt;
&lt;br /&gt;
Avant que les autres composants de Koji puissent fonctionner correctement, On doit créer la structure et modifié les droits de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt&lt;br /&gt;
mkdir koji&lt;br /&gt;
cd koji&lt;br /&gt;
mkdir {packages,repos,work,scratch}&lt;br /&gt;
chown apache.apache *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, [[Webserver/Apache|apache]] peut être redémarré et on peut effectuer des opérations minimales sur notre serveur Koji via le client en ligne de commande: gestion des utilisateurs et des constructeurs.&lt;br /&gt;
&lt;br /&gt;
Il faut s&#039;assurer que le client est configuré par défaut ( fichier &amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt; et que les certificats sont en place dans le home de l&#039;administrateur.&lt;br /&gt;
&lt;br /&gt;
{{Admon/note|Fichier de configuration alternatif|Si un fichier de configuration personnel autre que &amp;lt;path&amp;gt;~/.koji/config&amp;lt;/path&amp;gt; est utilisé, il faut utilisé la commande koji avec l&#039;option &#039;&#039;&#039;-c&#039;&#039;&#039;.}}&lt;br /&gt;
La commande suivante teste le login administrateur sur le serveur Koji.&lt;br /&gt;
 koji call getLoggedInUser&lt;br /&gt;
&lt;br /&gt;
{{Admon/important|Droit des daemons|Kojira a besoin du privilège &#039;&#039;&#039;repo&#039;&#039;&#039; avant le lancement du daemon. C&#039;est pourquoi il est vivement recommandé de créer cet utilisateur maintenant et de lui ajouter le privilège&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-user kojira&lt;br /&gt;
koji grant-permission repo kojira&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour des raisons similaires, les hôtes de constructions doivent être ajoutés avant le démarrage du daemon kojid.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host kojibuilder1 x86_64 i386&lt;br /&gt;
koji add-host kojibuilder2 ppc ppc64&lt;br /&gt;
koji add-host kojibuilder3 ia64&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Koji Web - Interface for the Masses ==&lt;br /&gt;
&lt;br /&gt;
Koji-web est un jeu de scripts qui tournent avec mod_wsgi et qui utilise le moteur de modèle Cheetah pour fournir une interface web à Koji. Koji-web affiche beaucoup d&#039;informations et propose même quelques opérations comme l&#039;abandon de tâche.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration:&#039;&#039;&#039;&lt;br /&gt;
* /etc/kojiweb/web.conf&lt;br /&gt;
* /etc/httpd/conf.d/kojiweb.conf&lt;br /&gt;
* /etc/httpd/conf.d/ssl.conf&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de Koji-Web:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-web mod_ssl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configuration obligatoire ====&lt;br /&gt;
&lt;br /&gt;
La configuration doit fournir à Koji-web les URLs d&#039;accès à Koji-hub, aux paquets koji (builds) et à sa propre interface. Il est judicieux de modifier aussi le secret (directive &#039;&#039;PythonOption Secret&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Avec l&#039;authentification SSL, elle doit aussi fournir le nom des certificats à utiliser et la directive &#039;&#039;PythonOption WebCert&#039;&#039; doit contenir &#039;&#039;&#039;la clé publique ET la clé privée&#039;&#039;&#039;.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojiweb/web.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[web]&lt;br /&gt;
SiteName = koji&lt;br /&gt;
KojiTheme = didier&lt;br /&gt;
&lt;br /&gt;
KojiHubURL http://koji.didier-linux.eu/kojihub&lt;br /&gt;
KojiFilesURL http://www.didier-linux.eu/kojifiles&lt;br /&gt;
&lt;br /&gt;
WebCert /etc/pki/koji/kojiweb.pem&lt;br /&gt;
ClientCA /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
KojiHubCA /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
LoginTimeout 72&lt;br /&gt;
Secret CHANGE_ME&lt;br /&gt;
&lt;br /&gt;
LibPath = /usr/share/koji-web/lib&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration Optionnelle ====&lt;br /&gt;
&lt;br /&gt;
Il faut éditer le fichier &amp;lt;path&amp;gt;/etc/httpd/conf.d/kojiweb.conf&amp;lt;/path&amp;gt; pour configurer l&#039;authentification choisie.&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojiweb.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Location /koji/login&amp;gt;&lt;br /&gt;
SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/ssl.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SSLVerifyClient require&lt;br /&gt;
SSLVerifyDepth  10&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Interface Web opérationnelle ====&lt;br /&gt;
&lt;br /&gt;
L&#039;interface Web du koji est maintenant accessible et la plupart des opérations de lecture doivent fonctionner et chaque utilisateur doit pouvoir se connecter.&lt;br /&gt;
&lt;br /&gt;
== Koji Daemon - Builder ==&lt;br /&gt;
&lt;br /&gt;
Kojid est le daemon de construction qui tourne sur chaque constructeur. son rôle principale est de traiter les requêtes de construction. Koji ne se limite cependant pas aux tâches de construction puisqu&#039;il peut aussi construire des images ISO, des disques virtuels (appliances). Kojid utilise mock pour créer des environnements de construction minimaliste et en créé pour chaque construction. Ceci permet le compartimentage des constructions et les constructions ne peuvent pas se gêner les unes les autres. Kojid est écrit en python et communique avec le hub via XML-RPC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fichiers de Configuration&#039;&#039;&#039;&lt;br /&gt;
* Configuration du daemon Kojira: /etc/kojid/kojid.conf&lt;br /&gt;
* Variables de lancement du daemon: /etc/sysconfig/kojid&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de kojid:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-builder&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configuration générale ====&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration de chaque constructeur doit être édité afin que la directive &#039;&#039;server&#039;&#039; pointe sur l&#039;hôte supportant le Koji-hub. La directive &#039;&#039;user&#039;&#039; doit contenir le nom d&#039;hôte du constructeur.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The URL for the xmlrpc server&lt;br /&gt;
server=http://hub.example.com/kojihub&lt;br /&gt;
&lt;br /&gt;
; the username has to be the same as what you used with add-host&lt;br /&gt;
; in this example follow as below&lt;br /&gt;
user = kojibuilder1.example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
La directive &#039;&#039;workdir&#039;&#039; peut être différente entre les constructeurs mais elle ne doit pas être le répertoire de travail du Koji (&amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;)&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The directory root for temporary storage&lt;br /&gt;
workdir=/tmp/koji&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration des certificats SSL ====&lt;br /&gt;
&lt;br /&gt;
Ces entrées doivent être éditées pour pointer sur les bons certificats générés précédemment.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;client certificate&lt;br /&gt;
; This should reference the builder certificate we created above, for&lt;br /&gt;
; kojibuilder1.example.com&lt;br /&gt;
cert = /etc/kojid/kojid.pem&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the client certificate&lt;br /&gt;
ca = /etc/kojid/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the HTTP server certificate&lt;br /&gt;
serverca = /etc/kojid/koji_ca_cert.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/important|Copie des certificats sur l&#039;hôte|Les certificats SSL doivent être copiés depuis l&#039;hôte abritant le Koji-hub sur les constructeurs dans le répertoire &amp;lt;path&amp;gt;/etc/kojid&amp;lt;/path&amp;gt; pour que les constructeurs puissent s&#039;authentifier.}}&lt;br /&gt;
&lt;br /&gt;
==== Ajout d&#039;un hôte à la base de données des constructeurs ====&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant ajouter l&#039;hôte à la base de données des constructeurs afin qu&#039;il puisse être utilisé par Koji-hub.&lt;br /&gt;
{{Admon/important|L&#039;ajout doit être fait avant le premier démarrage du daemon de construction|Sinon, il faudra purger les entrées à la main dans les tables &#039;&#039;sessions&#039;&#039; et &#039;&#039;users&lt;br /&gt;
&#039;&#039; avant de pouvoir démarrer avec succès le daemon.}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host kojibuilder1.didier-linux.eu i386 x86_64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le premier argument après la commande est le nom d&#039;hôte du constructeur. Le second argument spécifie l&#039;(les) architecture(s) utilisées par l&#039;hôtes.&lt;br /&gt;
&lt;br /&gt;
==== Ajout de l&#039;hôte au canal de création ====&lt;br /&gt;
&lt;br /&gt;
Les canaux sont un moyen de contrôler quel constructeur fait quoi. Par défaut les hôtes sont ajouté au canal &#039;&#039;default&#039;&#039;. Il faut qu&#039;au moins quelques uns (1 au minimum) soient ajoutés au canal &#039;&#039;createrepo&#039;&#039; pour pouvoir lancer les travaux kojira sur les dépôts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host-to-channel kojibuilder1.didier.eu createrepo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Capacité ====&lt;br /&gt;
&lt;br /&gt;
La capacité d&#039;un hôte par défaut est de 2, ce qui veut dire que le daemond econstruction n&#039;acceptera pas de travail supplémentaire si le load average est supérieur à 2. Ce paramètre est différent de celui du nombre maximal de travaux (fichier de configuration). Avant que ledaemon de construction n&#039;accepte un nouveau travail, il s&#039;assure que le load average est inférieur à la capacité et que le nombre de travaux est inférieur au nombre maximal. Toutefois, à l&#039;ère des CPU multi-coeurs, un load average de 2 est insuffisant pour consommer 100% des ressources du système. Il n&#039;y a pas d&#039;option pour définir la capacité en ligne de commande, cela doit être fait en base (psql).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji@localhost$ psql koji&lt;br /&gt;
koji=# select (id, name, capacity) from host;&lt;br /&gt;
              row               &lt;br /&gt;
--------------------------------&lt;br /&gt;
 (1,kojibuilder1.didier-linux.eu,2)&lt;br /&gt;
 (2,kojibuilder2.didier-linux.eu,2)&lt;br /&gt;
(2 rows)&lt;br /&gt;
&lt;br /&gt;
koji=# update host set capacity = 16 where id = 1;&lt;br /&gt;
UPDATE 1&lt;br /&gt;
koji=# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Démarrage du daemon Kojid ====&lt;br /&gt;
&lt;br /&gt;
Une fois le constructeur ajouté à la base de données, on peut démarrer son daemon de construction.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl start kojid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On vérifie dans le fichier &amp;lt;path&amp;gt;/var/log/kojid.log&amp;lt;/path&amp;gt; qur le daemon a bien démarré. Si aucune erreur n&#039;est rapportée, c&#039;est que le daemon doit être correctement configuré et démarré. On peut le vérifier sur l&#039;interface Koji-web dans l&#039;onglet &#039;&#039;hôtes&#039;&#039;. Cette page affiche le liste des constructeurs et leur status.&lt;br /&gt;
&lt;br /&gt;
== Kojira - Création et maintenance du dépôt ==&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration:&#039;&#039;&#039;&lt;br /&gt;
* Configuration du daemon Kojira: &amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
* Variables de lancement du daemon: &amp;lt;path&amp;gt;/etc/sysconfig/kojira&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de kojira&#039;&#039;&#039;&lt;br /&gt;
 yum install koji-utils&lt;br /&gt;
&lt;br /&gt;
==== Configuration générale ====&lt;br /&gt;
La directive &#039;&#039;server&#039;&#039; a besoin de pointer sur le koji-hub.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The URL for the xmlrpc server&lt;br /&gt;
server=http://koji.didier-linux.eu/kojihub&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/important|Note importante|&lt;br /&gt;
* Kojira a besoin d&#039;un accès en lecture/écriture sur &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;. &lt;br /&gt;
* Il ne devrait exister qu&#039;une seule instance de {{class|kojira}} à la fois.&lt;br /&gt;
* Il n&#039;est pas recommandé de lancer kojira sur les constructeurs, car ceux-ci n&#039;ont besoin que d&#039;un accès en lecture seule sur le répertoire &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration de l&#039;authentification SSL ====&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;client certificate&lt;br /&gt;
; This should reference the kojira certificate we created above&lt;br /&gt;
cert = /etc/pki/koji/kojira.pem&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the client certificate&lt;br /&gt;
ca = /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the HTTP server certificate&lt;br /&gt;
serverca = /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The local user kojira runs as needs to be able to read and write to /mnt/koji/repos/.&lt;br /&gt;
If the volume that directory resides on is root-squashed or otherwise unmodifiable&lt;br /&gt;
by root, you can set &#039;&#039;&#039;RUNAS=&#039;&#039;&#039; to a user that has the required privileges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/sysconfig/kojira&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORCE_LOCK=Y&lt;br /&gt;
KOJIRA_DEBUG=N&lt;br /&gt;
KOJIRA_VERBOSE=Y&lt;br /&gt;
RUNAS=root&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Ajout de l&#039;utilisateur kojira à Koji ====&lt;br /&gt;
Si cela n&#039;a pas été déjà fait, création de l&#039;utilisateur kojira et ajout du droit &#039;&#039;&#039;repo&#039;&#039;&#039; à celui-ci. Cela doit être fait avec le compte de l&#039;administrateur de Koji.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-user kojira&lt;br /&gt;
koji grant-permission repo kojira&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Démarrage du deamon Kojira ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl start kojira.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On vérifie dans le fichier &amp;lt;path&amp;gt;/var/log/kojira/kojira.log&amp;lt;/path&amp;gt; que {{class|kojira}} a bien démarré.&lt;br /&gt;
&lt;br /&gt;
== SELinux ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
semanage fcontext -a -t httpd_sys_rw_content_t &#039;/mnt/koji(/.*)?&#039;&lt;br /&gt;
restorecon -Rv /mnt/koji&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:RPM|Install Koji]]&lt;br /&gt;
[[Catégorie:Koji|Install]]&lt;br /&gt;
[[Catégorie:Server|Install Koji]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Koji/Installation&amp;diff=3114</id>
		<title>Koji/Installation</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Koji/Installation&amp;diff=3114"/>
		<updated>2015-04-23T11:34:59Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Se donner les droits admin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Mettre en place un système de construction de RPM Koji&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
{{class|Koji}} est une suite logicielle de construction de RPM. Il utilise [[RPM/Mock|mock]] pour créer des environnements&lt;br /&gt;
chrootés et y effectuer les builds.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:KojiArch.svg|441px|vignette|centré|Architecture du koji]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Koji-Hub&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est le centre nerveux de toutes les opérations Koji. Il s&#039;agit d&#039;un serveur XML-RPC fonctionnant sous mod_python pour Apache. {{class|koji-hub}} est passif : il ne reçoit que les appels XML-RPC et s&#039;appuie sur les autres outils de la suite pour la construction. {{class|koji-hub}} est le seul composant qui a un accès direct à la base de données et est l&#039;un des deux composants qui ont un accès en écriture au système de fichiers.&lt;br /&gt;
* &#039;&#039;&#039;Kojid&#039;&#039;&#039; ou &#039;&#039;&#039;Koji-builder&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est le démon de compilation qui s&#039;exécute sur chacune des machines de construction. Sa principale responsabilité est de scruter les demandes de construction entrantes et de les exécuter. Pour cela, {{class|kojid}} interroge {{class|koji-hub}}. {{class|Kojid}} est également responsable d&#039;autres tâches que la construction : la création d&#039;images d&#039;installation par exemple. kojid utilise Mock pour la construction. Il crée également un buildroot vierge pour chaque génération. kojid est écrit en Python et communique avec koji-hub par l&#039;intermédiaire de XML-RPC.&lt;br /&gt;
* &#039;&#039;&#039;Koji-Web&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est un ensemble de scripts qui s&#039;exécutent avec mod_python et utilise le moteur de templates Cheetah pour fournir une interface web à {{class|Koji}}. Il agit comme un client à {{class|koji-hub}} en offrant une interface d&#039;aministration limitée. {{class|koji-Web}} expose un grand nombre d&#039;informations et fournit également un moyen pour certaines opérations, telles que l&#039;annulation de builds.&lt;br /&gt;
* &#039;&#039;&#039;Koji-client&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est une interface en ligne de commande ( CLI = Command Line Interface ) écrit en Python qui fournit de nombreux hooks à {{class|Koji}}. Il permet à l&#039;utilisateur d&#039;interroger la plupart des données ainsi que d&#039;effectuer des actions telles que l&#039;ajout d&#039;utilisateurs et de lancer la construction des demandes.&lt;br /&gt;
* &#039;&#039;&#039;Kojira&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est un démon qui garde la racine de construction repodata à jour. Il est responsable de l&#039;enlèvement des racines redondantes et du nettoyage après une demande de construction est terminée.&lt;br /&gt;
&lt;br /&gt;
Les composants de {{class|Koji}} peuvent être installés sur des serveurs différents. La seule obligation est d&#039;autoriser la communication entre les différents composants de la suite.&lt;br /&gt;
&lt;br /&gt;
{{class|Koji}} supporte nativement l&#039;authentification par serveur Kerberos et par certificat SSL. Seul {{class|koji-client}} supporte l&#039;authentification par mot de passe. De ce fait, l&#039;authentification par mot de passe ne sera même pas abordée.&lt;br /&gt;
&lt;br /&gt;
La méthode d&#039;authentification doit être choisie dès le début de l&#039;installation. Dans la suite de ce document, nous mettrons en place la méthode SSL.&lt;br /&gt;
&lt;br /&gt;
{{class|Koji}} utilise beaucoup d&#039;espace disque dans son répertoire primaire &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;. De plus Mock en utilisera beaucoup aussi sur les répertoires &amp;lt;path&amp;gt;/var/lib/mock&amp;lt;/path&amp;gt; et &amp;lt;path&amp;gt;/var/cache/mock&amp;lt;/path&amp;gt;. Il vaut mieux prévoir des partitions dédiées à ces répertoires ( les répertoires de Mock doivent appartenir au groupe mock et avoir les permissions 02755 ).&lt;br /&gt;
&lt;br /&gt;
Pour un aperçu rapide des outils utilisés : [[RPM/Yum|yum]], [[RPM/Mock|mock]], {{class|Koji}} (et tous ses composants), [[RPM/Mash|mash]], et comment ils fonctionnent ensemble, il existe une excellente présentation &amp;lt;ref&amp;gt;Présentation des outils de création/gestion des RPM [http://indico.cern.ch/event/55091 | Version online ]&amp;lt;br&amp;gt;Version offline: [[Fichier:MockKojiMash.pdf]] ( non mise à jour )&amp;lt;/ref&amp;gt; créée par Steve Traylen du CERN.&lt;br /&gt;
&lt;br /&gt;
Le dépôt git de RussianFedora avec les fichiers de configuration de {{class|Koji}} &amp;lt;ref&amp;gt;https://github.com/RussianFedora/koji-setup&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connaissances requises ===&lt;br /&gt;
* Connaissances basiques de l&#039;authentification par certificat SSL.&lt;br /&gt;
* Connaissances basiques de création de base de données PostgreSQL and d&#039;importation de structure de base&lt;br /&gt;
* Connaissances basiques de l&#039;outil psql&lt;br /&gt;
* Connaissances basiques de configuration d&#039;Apache&lt;br /&gt;
* Connaissances basiques des outils yum/createrepo/mock &lt;br /&gt;
* Connaissances basiques de la ligne de commandes&lt;br /&gt;
* Connaissances basiques sur la construction de RPM&lt;br /&gt;
&lt;br /&gt;
=== Dépendances ===&lt;br /&gt;
&lt;br /&gt;
Sur le serveur ({{class|koji-hub}} / {{class|kojiweb}} )&lt;br /&gt;
* httpd&lt;br /&gt;
* mod_ssl&lt;br /&gt;
* postgresql-server&lt;br /&gt;
* mod_wsgi&lt;br /&gt;
* MySQL-python&lt;br /&gt;
&lt;br /&gt;
Sur les constructeurs ( {{class|kojid}} )&lt;br /&gt;
* mock&lt;br /&gt;
* setarch&lt;br /&gt;
* rpm-build&lt;br /&gt;
* createrepo&lt;br /&gt;
&lt;br /&gt;
Si le mode d&#039;authentification choisie est Kerberos, il faudra aussi que le réseau local ait un serveur DNS et une dépendance supplémentaire est à installer sur le serveur et les constructeurs.&lt;br /&gt;
* mod_auth_kerb&lt;br /&gt;
&lt;br /&gt;
=== Espace disque ===&lt;br /&gt;
&lt;br /&gt;
comme &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; utilise [[RPM/Mock|Mock]], les répertoires &amp;lt;path&amp;gt;/var/lib/mock&amp;lt;/path&amp;gt; et &amp;lt;path&amp;gt;/var/cache/mock&amp;lt;/path&amp;gt; grossiront mais une purge de ces répertoires est mise en place par Koji.&lt;br /&gt;
&lt;br /&gt;
Les répertoires qui vont grossir au fur et à mesure de l&#039;utilisation sont ceux de:&lt;br /&gt;
* Mock: &lt;br /&gt;
* La base de données: &amp;lt;path&amp;gt;/var/lib/psql&amp;lt;/path&amp;gt;&lt;br /&gt;
* Le répertoire principal de Koji: &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;&lt;br /&gt;
* Le répertoire des dépôts: &amp;lt;path&amp;gt;/mnt/repo&amp;lt;/path&amp;gt;&lt;br /&gt;
Il sera donc judicieux de leur attribuer une partition spécifique avec une taille dynamique (lvm)&lt;br /&gt;
&lt;br /&gt;
== Génération des certificats SSL ==&lt;br /&gt;
&lt;br /&gt;
Ces certificats serviront à l&#039;authentification des éléments de Koji sur le {{class|koji-hub}}.&lt;br /&gt;
&lt;br /&gt;
Création du répertoire des certificats&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 mkdir /etc/pki/koji &amp;amp;&amp;amp; cd /etc/pki/koji&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Création du fichier de configuration de nos futurs certificats&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/ssl.cnf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HOME                    = .&lt;br /&gt;
RANDFILE                = .rand&lt;br /&gt;
&lt;br /&gt;
[ca] &lt;br /&gt;
default_ca              = ca_default&lt;br /&gt;
&lt;br /&gt;
[ca_default] &lt;br /&gt;
dir                     = .&lt;br /&gt;
certs                   = $dir/certs&lt;br /&gt;
crl_dir                 = $dir/crl&lt;br /&gt;
database                = $dir/index.txt&lt;br /&gt;
new_certs_dir           = $dir/newcerts&lt;br /&gt;
certificate             = $dir/%s_ca_cert.pem&lt;br /&gt;
private_key             = $dir/private/%s_ca_key.pem&lt;br /&gt;
serial                  = $dir/serial&lt;br /&gt;
crl                     = $dir/crl.pem&lt;br /&gt;
x509_extensions         = usr_cert&lt;br /&gt;
name_opt                = ca_default&lt;br /&gt;
cert_opt                = ca_default&lt;br /&gt;
default_days            = 3650&lt;br /&gt;
default_crl_days        = 30&lt;br /&gt;
default_md              = sha256&lt;br /&gt;
preserve                = no&lt;br /&gt;
policy                  = policy_match&lt;br /&gt;
&lt;br /&gt;
[policy_match] &lt;br /&gt;
countryName             = match&lt;br /&gt;
stateOrProvinceName     = match&lt;br /&gt;
organizationName        = match&lt;br /&gt;
organizationalUnitName  = optional&lt;br /&gt;
commonName              = supplied&lt;br /&gt;
emailAddress            = optional&lt;br /&gt;
&lt;br /&gt;
[req] &lt;br /&gt;
default_bits            = 4096&lt;br /&gt;
default_keyfile         = privkey.pem&lt;br /&gt;
distinguished_name      = req_distinguished_name&lt;br /&gt;
attributes              = req_attributes&lt;br /&gt;
x509_extensions         = v3_ca # The extentions to add to the self signed cert&lt;br /&gt;
string_mask             = MASK:0x2002&lt;br /&gt;
&lt;br /&gt;
[req_distinguished_name] &lt;br /&gt;
countryName                     = Country Name (2 letter code)&lt;br /&gt;
countryName_default             = FR&lt;br /&gt;
countryName_min                 = 2&lt;br /&gt;
countryName_max                 = 2&lt;br /&gt;
stateOrProvinceName             = State or Province Name (full name)&lt;br /&gt;
stateOrProvinceName_default     = Languedoc Roussilon&lt;br /&gt;
localityName                    = Locality Name (eg, city)&lt;br /&gt;
localityName_default            = Beaucaire&lt;br /&gt;
0.organizationName              = Organization Name (eg, company)&lt;br /&gt;
0.organizationName_default      = Home&lt;br /&gt;
organizationalUnitName          = Organizational Unit Name (eg, section)&lt;br /&gt;
commonName                      = Common Name (eg, your name or your server\&#039;s hostname)&lt;br /&gt;
commonName_max                  = 64&lt;br /&gt;
emailAddress                    = Email Address&lt;br /&gt;
emailAddress_max                = 64&lt;br /&gt;
&lt;br /&gt;
[req_attributes] &lt;br /&gt;
challengePassword               = A challenge password&lt;br /&gt;
challengePassword_min           = 4&lt;br /&gt;
challengePassword_max           = 20&lt;br /&gt;
unstructuredName                = An optional company name&lt;br /&gt;
&lt;br /&gt;
[usr_cert] &lt;br /&gt;
basicConstraints                = CA:FALSE&lt;br /&gt;
nsComment                       = &amp;quot;OpenSSL Generated Certificate&amp;quot;&lt;br /&gt;
subjectKeyIdentifier            = hash&lt;br /&gt;
authorityKeyIdentifier          = keyid,issuer:always&lt;br /&gt;
&lt;br /&gt;
[v3_ca] &lt;br /&gt;
subjectKeyIdentifier            = hash&lt;br /&gt;
authorityKeyIdentifier          = keyid:always,issuer:always&lt;br /&gt;
basicConstraints                = CA:true&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/note|Modification du fichier ssl.cnf|Bien que cela ne soit pas obligatoire, il est recommandé d&#039;éditer les champs suffixés par &#039;&#039;&#039;_default&#039;&#039;&#039; dans la section &#039;&#039;&#039;[req_distinguished_name]&#039;&#039;&#039;, afin de coller aux informations du serveur en cours d&#039;installation&amp;lt;br&amp;gt;Cela vous permettra d&#039;accepter directement les valeurs proposées par défaut à la génération des certificats.&amp;lt;br&amp;gt;Les autres sections n&#039;ont pas besoin d&#039;être éditées.}}&lt;br /&gt;
&lt;br /&gt;
=== Génération de l&#039;autorité de certification ===&lt;br /&gt;
&lt;br /&gt;
Toujours depuis le répertoire /etc/pki/koji, on initialise notre générateur et on génère l’autorité de certification. Celle-ci se compose d&#039;une paire clé/certificat qui servira à signer tous les autres certificats.&lt;br /&gt;
&lt;br /&gt;
Ici, le CN sera obligatoirement le nom d&#039;hôte du serveur (FQDN), les autres renseignements ne sont pas bloquants pour la suite.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /etc/pki/koji/&lt;br /&gt;
mkdir {certs,private,confs}&lt;br /&gt;
touch index.txt&lt;br /&gt;
echo 01 &amp;gt; serial&lt;br /&gt;
openssl genrsa -out private/koji_ca_cert.key 4096&lt;br /&gt;
openssl req -config ssl.cnf -new -x509 -days 3650 -key private/koji_ca_cert.key \&lt;br /&gt;
-out koji_ca_cert.crt -extensions v3_ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Générer les certificats des composants de Koji et le certificat de l&#039;administrateur===&lt;br /&gt;
&lt;br /&gt;
Chaque composant de Koji a besoin d&#039;un certificat.&lt;br /&gt;
Kojihub et kojiweb ont besoin d&#039;avoir le nome d&#039;hôte pleinement qualifié (FQDN) en CN, on se servira de OU pour distinguer les certificats. Pour les autres certificats, le CN doit être le nom du composant ( kojira ), le login du compte administrateur ou le nom du builder qui sera définit avec koji-client.&lt;br /&gt;
Par simplicité, on va se servir de ces scripts pour générer les certificats des composants et les certificats web.&lt;br /&gt;
&lt;br /&gt;
Script de génération des certificats&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/generate-certificate.sh&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#if you change your certificate authority name to something else you will need to change the caname value to reflect the change.&lt;br /&gt;
caname=koji&lt;br /&gt;
&lt;br /&gt;
# user is equal to parameter one or the first argument when you actually run the script&lt;br /&gt;
user=$1&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;$user&amp;quot; == &amp;quot;&amp;quot; ]]&lt;br /&gt;
then&lt;br /&gt;
	echo &amp;quot;Usage: $(basename $0) USER&amp;quot;&lt;br /&gt;
	exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Generate certificates for \&amp;quot;${user}\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
openssl genrsa -out certs/${user}.key 4096&lt;br /&gt;
&lt;br /&gt;
cat ssl.cnf | sed &#039;s/insert_hostname/&#039;${user}&#039;/&#039;&amp;gt; ssl2.cnf&lt;br /&gt;
&lt;br /&gt;
openssl req -config ssl2.cnf -new -nodes -out certs/${user}.csr -key certs/${user}.key&lt;br /&gt;
&lt;br /&gt;
openssl ca -config ssl2.cnf -keyfile private/${caname}_ca_cert.key -cert ${caname}_ca_cert.crt \&lt;br /&gt;
	-out certs/${user}.crt -outdir certs -infiles certs/${user}.csr&lt;br /&gt;
&lt;br /&gt;
cat certs/${user}.crt certs/${user}.key &amp;gt; ${user}.pem&lt;br /&gt;
&lt;br /&gt;
mv ssl2.cnf confs/${user}-ssl.cnf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Script de génération des certificats pour les navigateurs Web&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/generate-web-certificate.sh&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#if you change your certificate authority name to something else you will need to change the caname value to reflect the change.&lt;br /&gt;
caname=koji&lt;br /&gt;
&lt;br /&gt;
# user is equal to parameter one or the first argument when you actually run the script&lt;br /&gt;
user=$1&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;$user&amp;quot; == &amp;quot;&amp;quot; ]]&lt;br /&gt;
then&lt;br /&gt;
	echo &amp;quot;Usage: $(basename $0) USER&amp;quot;&lt;br /&gt;
	exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Generate web certificates for \&amp;quot;${user}\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
openssl pkcs12 -export -inkey certs/${user}.key -in certs/${user}.crt -CAfile ${caname}_ca_cert.crt \&lt;br /&gt;
	-out certs/${user}_browser_cert.p12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
On génère les certificats comme cela pour tous les composants et users du tableau récapitulatif:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /etc/pki/koji/&lt;br /&gt;
./generate-certificate.sh kojiweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Le user choisi pour être le koji admin est le user didier.&lt;br /&gt;
&lt;br /&gt;
De plus pour les utilisateurs (réels) de {{class|koji}}, on générera les certificats web comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./generate-web-certificate.sh didier&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom du certificat&lt;br /&gt;
! CN (commonName)&lt;br /&gt;
! OU (organizationalUnitName)&lt;br /&gt;
|-&lt;br /&gt;
| kojihub&lt;br /&gt;
| koji.didier-linux.eu (FQDN)&lt;br /&gt;
| kojihub&lt;br /&gt;
|-&lt;br /&gt;
| kojiweb&lt;br /&gt;
| koji.didier-linux.eu (FQDN)&lt;br /&gt;
| kojiweb&lt;br /&gt;
|-&lt;br /&gt;
| kojira&lt;br /&gt;
| kojira&lt;br /&gt;
| Admin&lt;br /&gt;
|-&lt;br /&gt;
| didier ( utilisateur koji admin )&lt;br /&gt;
| didier ( ici c&#039;est le user et non le nom d&#039;hôte de la machine )&lt;br /&gt;
| Admin&lt;br /&gt;
|-&lt;br /&gt;
| kojibuilder.didier-linux.eu&lt;br /&gt;
| kojibuilder.didier-linux.eu&lt;br /&gt;
| builder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Copier les certificats dans le home de utilisateur admin ===&lt;br /&gt;
&lt;br /&gt;
On copie le certificat correspondant à l&#039;administrateur du {{class|Koji}}, et l&#039;autorité de certification dans son home.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir ~/.koji&lt;br /&gt;
cp /etc/pki/koji/didier.pem ~/.koji/client.crt&lt;br /&gt;
cp /etc/pki/koji/koji_ca_cert.crt ~/.koji/clientca.crt&lt;br /&gt;
cp /etc/pki/koji/koji_ca_cert.crt ~/.koji/serverca.crt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/note|Modification des paramètres par défaut|Pour modifier des paramètre d&#039;un client sans modifier la configuration générale, il faut copier le fichier &amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt; dans le home de l&#039;utilisateur &amp;lt;path&amp;gt;~/.koji/config&amp;lt;/path&amp;gt; et y effectuer les modifications dans celui-ci.}}&lt;br /&gt;
&lt;br /&gt;
==Mise en place des principals Kerberos==&lt;br /&gt;
&lt;br /&gt;
Le serveur Kerberos doit pouvoir être trouvé grâce au DNS. Le point final indique que l&#039;hôte est pleinement qualifié (FQDN).&lt;br /&gt;
&amp;lt;pre&amp;gt;_kerberos._udp    IN SRV  10 100 88 kerberos.didier-linux.eu.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Principal&lt;br /&gt;
! Utilisation&lt;br /&gt;
|-&lt;br /&gt;
| host/kojihub@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-hub pour communiquer avec le client koji&lt;br /&gt;
|-&lt;br /&gt;
| HTTP/kojiweb@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-web pour négotier une authentifiaction avec le navigateur web. C&#039;est le principal pour l&#039;authentification Apache &amp;lt;package&amp;gt;mod_auth_kerb&amp;lt;/package&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| koji/kojiweb@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-web pour communiquer avec koji-hub. C&#039;est le principal qui va authentifier koji-web sur Kerberos comme &amp;quot;koji/kojiweb@EXAMPLE.COM&amp;quot;. Koji-web relayera aussi le nom d&#039;utilisateur (authentification Apache) vers koji-hub (koji-hub config option &#039;&#039;&#039;&#039;&#039;ProxyPrincipals&#039;&#039;&#039;&#039;&#039;). &lt;br /&gt;
|-&lt;br /&gt;
| koji/kojira@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par kojira pour communiquer avec koji-hub&lt;br /&gt;
|-&lt;br /&gt;
| compile/builder1@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par le constructeur koji pour communiquer avec koji-hub&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Ajout des utilisateurs Koji aux alias du serveur de mail local==&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, un serveur [[Mail/MTA/Sendmail|sendmail]] en local est déjà configuré et opérationnel.&lt;br /&gt;
&lt;br /&gt;
Appairer les utilisateurs Koji aux véritables adresses mail.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/aliases&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Person who should get root&#039;s mail&lt;br /&gt;
root:           didier@didier-linux.eu&lt;br /&gt;
didier:         didier@didier-linux.eu&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Puis lancer la régénération des alias&lt;br /&gt;
 # newaliases&lt;br /&gt;
&lt;br /&gt;
== Serveur PostgreSQL ==&lt;br /&gt;
Une fois l&#039;autentification mise en place, nous avons besoin d&#039;installer un serveur [[DBMS/PostgreSQL/Brief|PostgreSQL]], de le configurer et de mettre en place la structure de la base de données pour {{class|Koji}}.&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* /var/lib/pgsql/data/pg_hba.conf&lt;br /&gt;
* /var/lib/pgsql/data/postgresql.conf&lt;br /&gt;
&lt;br /&gt;
===Installation du serveur PostgreSQL===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install postgresql-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Initialisation de la base de données PostgreSQL===&lt;br /&gt;
&lt;br /&gt;
Les commandes suivantes initialise le serveur [[DBMS/PostgreSQL/Brief|PostgreSQL]] et le démarre.&lt;br /&gt;
Le script d&#039;init a été converti à systemd sur les distributions Fedora 16 et supérieures et la cible &#039;&#039;&#039;initdb&#039;&#039;&#039; du script d&#039;init a été supprimée. On initialise directement avec les commandes du SGBD.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - postgres -c &amp;quot;PGDATA=/var/lib/pgsql/data initdb&amp;quot;&lt;br /&gt;
systemctl start postgresql.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{admon/tip|Initialisation du SGBD sur les distributions sysVinit|&amp;lt;pre&amp;gt;service postgresql initdb &amp;amp;&amp;amp; service postgresql start&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Compte utilisateur ===&lt;br /&gt;
&lt;br /&gt;
Mise en place du compte &#039;&#039;&#039;koji&#039;&#039;&#039; sur le système (utilisateur unix) et mise en place d&#039;un mot de passe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
useradd koji&lt;br /&gt;
passwd koji&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setup de PostgreSQL et import de la structure de la base ===&lt;br /&gt;
&lt;br /&gt;
Création de l&#039;utilisateur PostgreSQL &#039;&#039;&#039;koji&#039;&#039;&#039; et création de sa base de données, puis import de la structure.&lt;br /&gt;
{{Admon/bug|Import de la structure|Il est important laisser le joker (*) afin de ne pas se restreindre à une version particulière de Koji. Durant des test, il a été découvert que la restriction à une version spécifique de Koji ne créé pas  correctement toutes les tables.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - postgres&lt;br /&gt;
createuser koji&lt;br /&gt;
Shall the new role be a superuser? (y/n) n&lt;br /&gt;
Shall the new role be allowed to create databases? (y/n) n&lt;br /&gt;
Shall the new role be allowed to create more new roles? (y/n) n&lt;br /&gt;
createdb -O koji koji&lt;br /&gt;
logout&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - koji&lt;br /&gt;
psql koji koji &amp;lt; /usr/share/doc/koji*/docs/schema.sql&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autorisation de Koji-web et Koji-hub aux resources===&lt;br /&gt;
&#039;&#039;Dans cet exemple, Koji-web et Koji-hub sont démarrés sur localhost.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ces paramètres doivent être ajouter avant les autres.&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host    koji        koji        127.0.0.1/32          trust&lt;br /&gt;
host    koji        koji          ::1/128             trust&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
On peut aussi utiliser les sockets UNIX. La variable &#039;&#039;&#039;&#039;&#039;DBHost&#039;&#039;&#039;&#039;&#039; variable ne doit pas être renseigné avec cette méthode.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local   koji        apache                            trust&lt;br /&gt;
local   koji        apache      127.0.0.1/32          trust&lt;br /&gt;
local   koji        apache        ::1/128             trust&lt;br /&gt;
local   koji        koji                              trust&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Application des changements à chaud ===&lt;br /&gt;
&lt;br /&gt;
Informer postgreSQL que les fichiers de configuration doivent être relus.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@localhost$ su - postgres&lt;br /&gt;
postgres@localhost$ pg_ctl reload&lt;br /&gt;
postgres@localhost$ exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout du premier administrateur du Koji à la base PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
Le premier administrateur du &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; doit être ajouter à la main avec des commandes SQL. Une fois ajouté avec les droits administarteur, Il pourra gérer les autres utilisateurs de &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; avec l&#039;outil d&#039;administration en ligne de commande.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;authentifiaction SSL ou Kerberos, il n&#039;y a pas besoin de mettre un mot de passe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@localhost$ su - koji&lt;br /&gt;
koji@localhost$ psql&lt;br /&gt;
koji=&amp;gt; insert into users (name, status, usertype) values (&#039;admin-user-name&#039;, 0, 0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Se donner les droits admin ===&lt;br /&gt;
&lt;br /&gt;
Commande permettant de se donner les droits administrateur. Pour la lancer, on doit connaitre l&#039;ID de l&#039;utilisateur.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji=&amp;gt; insert into user_perms (user_id, perm_id, creator_id) values (&amp;lt;ID of user inserted above&amp;gt;, 1, &amp;lt;ID of user inserted above&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Admon/tip|Connaitre l&#039;ID des utilisateurs|Pour connaitre les IDs des utilisateurs du &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, on doit lancer une commande SQL.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji=&amp;gt; select * from users;&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
A ce stade, aucune action ne peut être démarrée tant que le kojihub n&#039;est pas configuré et le serveur web démarré.&lt;br /&gt;
&lt;br /&gt;
== Koji Hub ==&lt;br /&gt;
&lt;br /&gt;
koji-hub est le centre nerveux de toutes les opérations Koji. Il s&#039;agit d&#039;un serveur XML-RPC fonctionnant sous mod_python pour Apache. koji-hub est passif : il ne reçoit que les appels XML-RPC et s&#039;appuie sur les autres outils de la suite pour la construction. koji-hub est le seul composant qui a un accès direct à la base de données et est l&#039;un des deux composants qui ont un accès en écriture au système de fichiers. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* /etc/httpd/conf/httpd.conf&lt;br /&gt;
* /etc/httpd/conf.d/kojihub.conf&lt;br /&gt;
* /etc/httpd/conf.d/ssl.conf (when using ssl auth)&lt;br /&gt;
* /etc/koji-hub/hub.conf&lt;br /&gt;
* /etc/koji.conf&lt;br /&gt;
&lt;br /&gt;
Le répertoire de travail sera &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;.&lt;br /&gt;
{{Admon/bug|Répertoire de travail de Koji|Si le répertoire de travail de Koji n&#039;est pas &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;, il est impératif de créer un lien symbolique du répertoire de travail de Koji dans &amp;lt;path&amp;gt;/mnt&amp;lt;/path&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;ln -s /path/to/koji/datadir /mnt/koji&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Installation de {{class|koji-hub}}===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-hub httpd mod_ssl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On bride tout d&#039;abord le nombre maximum de requête sur le serveur [[Webserver/Apache|apache]] à une valeur plus raisonnable afin de prévenir une saturation et/ou un crash du serveur web.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf/httpd.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;IfModule prefork.c&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
MaxRequestsPerChild  100&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;IfModule worker.c&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
MaxRequestsPerChild  100&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Le répertoire &amp;lt;path&amp;gt;/mnt/koji/packages&amp;lt;/path&amp;gt; doit être accessible par HTTP. On ajoute donc un alias.&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojipackages.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Alias /packages &amp;quot;/mnt/koji/packages&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/mnt/koji/packages&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order allow,deny&lt;br /&gt;
        Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/ssl.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
LoadModule ssl_module modules/mod_ssl.so&lt;br /&gt;
&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog&lt;br /&gt;
&lt;br /&gt;
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)&lt;br /&gt;
SSLSessionCacheTimeout  300&lt;br /&gt;
&lt;br /&gt;
SSLMutex default&lt;br /&gt;
&lt;br /&gt;
SSLRandomSeed startup file:/dev/urandom  256&lt;br /&gt;
SSLRandomSeed connect builtin&lt;br /&gt;
&lt;br /&gt;
SSLCryptoDevice builtin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
  ErrorLog logs/ssl_error_log&lt;br /&gt;
  TransferLog logs/ssl_access_log&lt;br /&gt;
  LogLevel warn&lt;br /&gt;
&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLProtocol all -SSLv2&lt;br /&gt;
  SSLCipherSuite RC4-SHA:AES128-SHA:ALL:!ADH:!EXP:!LOW:!MD5:!SSLV2:!NULL&lt;br /&gt;
&lt;br /&gt;
  SSLCertificateFile /etc/pki/koji/certs/kojihub.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/pki/koji/certs/kojihub.key&lt;br /&gt;
  SSLCertificateChainFile /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
  SSLCACertificateFile /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
  SSLVerifyClient require&lt;br /&gt;
  SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Files ~ &amp;quot;\.(cgi|shtml|phtml|php3?)$&amp;quot;&amp;gt;&lt;br /&gt;
    SSLOptions +StdEnvVars&lt;br /&gt;
  &amp;lt;/Files&amp;gt;&lt;br /&gt;
  &amp;lt;Directory &amp;quot;/var/www/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
    SSLOptions +StdEnvVars&lt;br /&gt;
  &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  SetEnvIf User-Agent &amp;quot;.*MSIE.*&amp;quot; \&lt;br /&gt;
         nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
         downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
  CustomLog logs/ssl_request_log \&lt;br /&gt;
          &amp;quot;%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \&amp;quot;%r\&amp;quot; %b&amp;quot;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojihub.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Alias /kojihub /usr/share/koji-hub/kojixmlrpc.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/usr/share/koji-hub&amp;quot;&amp;gt;&lt;br /&gt;
    Options ExecCGI&lt;br /&gt;
    SetHandler wsgi-script&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alias /kojifiles &amp;quot;/mnt/koji/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/mnt/koji&amp;quot;&amp;gt;&lt;br /&gt;
    Options Indexes SymLinksIfOwnerMatch&lt;br /&gt;
    AllowOverride None&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Location /kojihub/ssllogin&amp;gt;&lt;br /&gt;
        SSLVerifyClient require&lt;br /&gt;
        SSLVerifyDepth  10&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Location /kojihub&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/koji-hub/hub.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[hub]&lt;br /&gt;
DBName = koji&lt;br /&gt;
DBUser = koji&lt;br /&gt;
DBHost = localhost&lt;br /&gt;
KojiDir = /mnt/koji&lt;br /&gt;
&lt;br /&gt;
DNUsernameComponent = CN&lt;br /&gt;
ProxyDNs = /C=FR/ST=Languedoc Roussillon/O=Home/OU=kojiweb/CN=koji.didier-linux.eu/emailAddress=root@didier-linux.eu|/C=FR/ST=Languedoc Roussillon/O=Home/OU=Admin/CN=didier/emailAddress=didier@didier-linux.eu&lt;br /&gt;
&lt;br /&gt;
LoginCreatesUser = On&lt;br /&gt;
KojiWebURL = http://koji.didier-linux.eu/koji&lt;br /&gt;
EmailDomain = didier-linux.eu&lt;br /&gt;
NotifyOnSuccess = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[koji]&lt;br /&gt;
server = http://koji.didier-linux.eu/kojihub&lt;br /&gt;
weburl = http://koji.didier-linux.eu/koji&lt;br /&gt;
topurl = http://koji.didier-linux.eu/kojifiles&lt;br /&gt;
topdir = /mnt/koji&lt;br /&gt;
cert = ~/.koji/client.crt&lt;br /&gt;
ca = ~/.koji/clientca.crt&lt;br /&gt;
serverca = ~/.koji/serverca.crt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Configuration de [[Security/SELinux|SELinux]] ===&lt;br /&gt;
Si le mode enforcing est utilisé, on doit autoriser [[Webserver/Apache|apache]] à acceder au serveur [[SGBD/PostgreSQL]]. Même si le mode est permissive, il est recommandé de lancer la commande suivante afin de se prémunir d&#039;un changement de mode de [[Security/SELinux|SELinux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setsebool -P httpd_can_network_connect_db 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Squelette des fichiers Koji ===&lt;br /&gt;
&lt;br /&gt;
Avant que les autres composants de Koji puissent fonctionner correctement, On doit créer la structure et modifié les droits de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt&lt;br /&gt;
mkdir koji&lt;br /&gt;
cd koji&lt;br /&gt;
mkdir {packages,repos,work,scratch}&lt;br /&gt;
chown apache.apache *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, [[Webserver/Apache|apache]] peut être redémarré et on peut effectuer des opérations minimales sur notre serveur Koji via le client en ligne de commande: gestion des utilisateurs et des constructeurs.&lt;br /&gt;
&lt;br /&gt;
Il faut s&#039;assurer que le client est configuré par défaut ( fichier &amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt; et que les certificats sont en place dans le home de l&#039;administrateur.&lt;br /&gt;
&lt;br /&gt;
{{Admon/note|Fichier de configuration alternatif|Si un fichier de configuration personnel autre que &amp;lt;path&amp;gt;~/.koji/config&amp;lt;/path&amp;gt; est utilisé, il faut utilisé la commande koji avec l&#039;option &#039;&#039;&#039;-c&#039;&#039;&#039;.}}&lt;br /&gt;
La commande suivante teste le login administrateur sur le serveur Koji.&lt;br /&gt;
 koji call getLoggedInUser&lt;br /&gt;
&lt;br /&gt;
{{Admon/important|Droit des daemons|Kojira a besoin du privilège &#039;&#039;&#039;repo&#039;&#039;&#039; avant le lancement du daemon. C&#039;est pourquoi il est vivement recommandé de créer cet utilisateur maintenant et de lui ajouter le privilège&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-user kojira&lt;br /&gt;
koji grant-permission repo kojira&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour des raisons similaires, les hôtes de constructions doivent être ajoutés avant le démarrage du daemon kojid.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host kojibuilder1 x86_64 i386&lt;br /&gt;
koji add-host kojibuilder2 ppc ppc64&lt;br /&gt;
koji add-host kojibuilder3 ia64&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Koji Web - Interface for the Masses ==&lt;br /&gt;
&lt;br /&gt;
Koji-web est un jeu de scripts qui tournent avec mod_wsgi et qui utilise le moteur de modèle Cheetah pour fournir une interface web à Koji. Koji-web affiche beaucoup d&#039;informations et propose même quelques opérations comme l&#039;abandon de tâche.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration:&#039;&#039;&#039;&lt;br /&gt;
* /etc/kojiweb/web.conf&lt;br /&gt;
* /etc/httpd/conf.d/kojiweb.conf&lt;br /&gt;
* /etc/httpd/conf.d/ssl.conf&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de Koji-Web:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-web mod_ssl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configuration obligatoire ====&lt;br /&gt;
&lt;br /&gt;
La configuration doit fournir à Koji-web les URLs d&#039;accès à Koji-hub, aux paquets koji (builds) et à sa propre interface. Il est judicieux de modifier aussi le secret (directive &#039;&#039;PythonOption Secret&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Avec l&#039;authentification SSL, elle doit aussi fournir le nom des certificats à utiliser et la directive &#039;&#039;PythonOption WebCert&#039;&#039; doit contenir &#039;&#039;&#039;la clé publique ET la clé privée&#039;&#039;&#039;.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojiweb/web.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[web]&lt;br /&gt;
SiteName = koji&lt;br /&gt;
KojiTheme = didier&lt;br /&gt;
&lt;br /&gt;
KojiHubURL http://koji.didier-linux.eu/kojihub&lt;br /&gt;
KojiFilesURL http://www.didier-linux.eu/kojifiles&lt;br /&gt;
&lt;br /&gt;
WebCert /etc/pki/koji/kojiweb.pem&lt;br /&gt;
ClientCA /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
KojiHubCA /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
LoginTimeout 72&lt;br /&gt;
Secret CHANGE_ME&lt;br /&gt;
&lt;br /&gt;
LibPath = /usr/share/koji-web/lib&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration Optionnelle ====&lt;br /&gt;
&lt;br /&gt;
Il faut éditer le fichier &amp;lt;path&amp;gt;/etc/httpd/conf.d/kojiweb.conf&amp;lt;/path&amp;gt; pour configurer l&#039;authentification choisie.&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojiweb.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Location /koji/login&amp;gt;&lt;br /&gt;
SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/ssl.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SSLVerifyClient require&lt;br /&gt;
SSLVerifyDepth  10&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Interface Web opérationnelle ====&lt;br /&gt;
&lt;br /&gt;
L&#039;interface Web du koji est maintenant accessible et la plupart des opérations de lecture doivent fonctionner et chaque utilisateur doit pouvoir se connecter.&lt;br /&gt;
&lt;br /&gt;
== Koji Daemon - Builder ==&lt;br /&gt;
&lt;br /&gt;
Kojid est le daemon de construction qui tourne sur chaque constructeur. son rôle principale est de traiter les requêtes de construction. Koji ne se limite cependant pas aux tâches de construction puisqu&#039;il peut aussi construire des images ISO, des disques virtuels (appliances). Kojid utilise mock pour créer des environnements de construction minimaliste et en créé pour chaque construction. Ceci permet le compartimentage des constructions et les constructions ne peuvent pas se gêner les unes les autres. Kojid est écrit en python et communique avec le hub via XML-RPC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fichiers de Configuration&#039;&#039;&#039;&lt;br /&gt;
* Configuration du daemon Kojira: /etc/kojid/kojid.conf&lt;br /&gt;
* Variables de lancement du daemon: /etc/sysconfig/kojid&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de kojid:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-builder&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configuration générale ====&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration de chaque constructeur doit être édité afin que la directive &#039;&#039;server&#039;&#039; pointe sur l&#039;hôte supportant le Koji-hub. La directive &#039;&#039;user&#039;&#039; doit contenir le nom d&#039;hôte du constructeur.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The URL for the xmlrpc server&lt;br /&gt;
server=http://hub.example.com/kojihub&lt;br /&gt;
&lt;br /&gt;
; the username has to be the same as what you used with add-host&lt;br /&gt;
; in this example follow as below&lt;br /&gt;
user = kojibuilder1.example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
La directive &#039;&#039;workdir&#039;&#039; peut être différente entre les constructeurs mais elle ne doit pas être le répertoire de travail du Koji (&amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;)&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The directory root for temporary storage&lt;br /&gt;
workdir=/tmp/koji&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration des certificats SSL ====&lt;br /&gt;
&lt;br /&gt;
Ces entrées doivent être éditées pour pointer sur les bons certificats générés précédemment.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;client certificate&lt;br /&gt;
; This should reference the builder certificate we created above, for&lt;br /&gt;
; kojibuilder1.example.com&lt;br /&gt;
cert = /etc/kojid/kojid.pem&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the client certificate&lt;br /&gt;
ca = /etc/kojid/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the HTTP server certificate&lt;br /&gt;
serverca = /etc/kojid/koji_ca_cert.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/important|Copie des certificats sur l&#039;hôte|Les certificats SSL doivent être copiés depuis l&#039;hôte abritant le Koji-hub sur les constructeurs dans le répertoire &amp;lt;path&amp;gt;/etc/kojid&amp;lt;/path&amp;gt; pour que les constructeurs puissent s&#039;authentifier.}}&lt;br /&gt;
&lt;br /&gt;
==== Ajout d&#039;un hôte à la base de données des constructeurs ====&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant ajouter l&#039;hôte à la base de données des constructeurs afin qu&#039;il puisse être utilisé par Koji-hub.&lt;br /&gt;
{{Admon/important|L&#039;ajout doit être fait avant le premier démarrage du daemon de construction|Sinon, il faudra purger les entrées à la main dans les tables &#039;&#039;sessions&#039;&#039; et &#039;&#039;users&lt;br /&gt;
&#039;&#039; avant de pouvoir démarrer avec succès le daemon.}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host kojibuilder1.didier-linux.eu i386 x86_64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le premier argument après la commande est le nom d&#039;hôte du constructeur. Le second argument spécifie l&#039;(les) architecture(s) utilisées par l&#039;hôtes.&lt;br /&gt;
&lt;br /&gt;
==== Ajout de l&#039;hôte au canal de création ====&lt;br /&gt;
&lt;br /&gt;
Les canaux sont un moyen de contrôler quel constructeur fait quoi. Par défaut les hôtes sont ajouté au canal &#039;&#039;default&#039;&#039;. Il faut qu&#039;au moins quelques uns (1 au minimum) soient ajoutés au canal &#039;&#039;createrepo&#039;&#039; pour pouvoir lancer les travaux kojira sur les dépôts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host-to-channel kojibuilder1.didier.eu createrepo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Capacité ====&lt;br /&gt;
&lt;br /&gt;
La capacité d&#039;un hôte par défaut est de 2, ce qui veut dire que le daemond econstruction n&#039;acceptera pas de travail supplémentaire si le load average est supérieur à 2. Ce paramètre est différent de celui du nombre maximal de travaux (fichier de configuration). Avant que ledaemon de construction n&#039;accepte un nouveau travail, il s&#039;assure que le load average est inférieur à la capacité et que le nombre de travaux est inférieur au nombre maximal. Toutefois, à l&#039;ère des CPU multi-coeurs, un load average de 2 est insuffisant pour consommer 100% des ressources du système. Il n&#039;y a pas d&#039;option pour définir la capacité en ligne de commande, cela doit être fait en base (psql).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji@localhost$ psql koji&lt;br /&gt;
koji=# select (id, name, capacity) from host;&lt;br /&gt;
              row               &lt;br /&gt;
--------------------------------&lt;br /&gt;
 (1,kojibuilder1.didier-linux.eu,2)&lt;br /&gt;
 (2,kojibuilder2.didier-linux.eu,2)&lt;br /&gt;
(2 rows)&lt;br /&gt;
&lt;br /&gt;
koji=# update host set capacity = 16 where id = 1;&lt;br /&gt;
UPDATE 1&lt;br /&gt;
koji=# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Démarrage du daemon Kojid ====&lt;br /&gt;
&lt;br /&gt;
Une fois le constructeur ajouté à la base de données, on peut démarrer son daemon de construction.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl start kojid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On vérifie dans le fichier &amp;lt;path&amp;gt;/var/log/kojid.log&amp;lt;/path&amp;gt; qur le daemon a bien démarré. Si aucune erreur n&#039;est rapportée, c&#039;est que le daemon doit être correctement configuré et démarré. On peut le vérifier sur l&#039;interface Koji-web dans l&#039;onglet &#039;&#039;hôtes&#039;&#039;. Cette page affiche le liste des constructeurs et leur status.&lt;br /&gt;
&lt;br /&gt;
== Kojira - Création et maintenance du dépôt ==&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration:&#039;&#039;&#039;&lt;br /&gt;
* Configuration du daemon Kojira: &amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
* Variables de lancement du daemon: &amp;lt;path&amp;gt;/etc/sysconfig/kojira&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de kojira&#039;&#039;&#039;&lt;br /&gt;
 yum install koji-utils&lt;br /&gt;
&lt;br /&gt;
==== Configuration générale ====&lt;br /&gt;
La directive &#039;&#039;server&#039;&#039; a besoin de pointer sur le koji-hub.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The URL for the xmlrpc server&lt;br /&gt;
server=http://koji.didier-linux.eu/kojihub&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/important|Note importante|&lt;br /&gt;
* Kojira a besoin d&#039;un accès en lecture/écriture sur &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;. &lt;br /&gt;
* Il ne devrait exister qu&#039;une seule instance de {{class|kojira}} à la fois.&lt;br /&gt;
* Il n&#039;est pas recommandé de lancer kojira sur les constructeurs, car ceux-ci n&#039;ont besoin que d&#039;un accès en lecture seule sur le répertoire &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration de l&#039;authentification SSL ====&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;client certificate&lt;br /&gt;
; This should reference the kojira certificate we created above&lt;br /&gt;
cert = /etc/pki/koji/kojira.pem&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the client certificate&lt;br /&gt;
ca = /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the HTTP server certificate&lt;br /&gt;
serverca = /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The local user kojira runs as needs to be able to read and write to /mnt/koji/repos/.&lt;br /&gt;
If the volume that directory resides on is root-squashed or otherwise unmodifiable&lt;br /&gt;
by root, you can set &#039;&#039;&#039;RUNAS=&#039;&#039;&#039; to a user that has the required privileges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/sysconfig/kojira&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORCE_LOCK=Y&lt;br /&gt;
KOJIRA_DEBUG=N&lt;br /&gt;
KOJIRA_VERBOSE=Y&lt;br /&gt;
RUNAS=root&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Ajout de l&#039;utilisateur kojira à Koji ====&lt;br /&gt;
Si cela n&#039;a pas été déjà fait, création de l&#039;utilisateur kojira et ajout du droit &#039;&#039;&#039;repo&#039;&#039;&#039; à celui-ci. Cela doit être fait avec le compte de l&#039;administrateur de Koji.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-user kojira&lt;br /&gt;
koji grant-permission repo kojira&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Démarrage du deamon Kojira ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl start kojira.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On vérifie dans le fichier &amp;lt;path&amp;gt;/var/log/kojira/kojira.log&amp;lt;/path&amp;gt; que {{class|kojira}} a bien démarré.&lt;br /&gt;
&lt;br /&gt;
== SELinux ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
semanage fcontext -a -t httpd_sys_rw_content_t &#039;/mnt/koji(/.*)?&#039;&lt;br /&gt;
restorecon -Rv /mnt/koji&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:RPM|Install Koji]]&lt;br /&gt;
[[Catégorie:Koji|Install]]&lt;br /&gt;
[[Catégorie:Server|Install Koji]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulUsing&amp;diff=3113</id>
		<title>Koji/SigulUsing</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulUsing&amp;diff=3113"/>
		<updated>2015-04-23T08:53:42Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sigul ==&lt;br /&gt;
&lt;br /&gt;
après une [[Koji/SigulInstall|installation de Sigul]], on peut l&#039;utiliser.&lt;br /&gt;
{{Admon/note|Commandes disponible|&amp;lt;pre&amp;gt;$ sigul --help-commands&lt;br /&gt;
delete-key          Delete a key&lt;br /&gt;
modify-key-user     Modify user&#039;s key access&lt;br /&gt;
list-users          List users&lt;br /&gt;
grant-key-access    Grant key access to a user&lt;br /&gt;
sign-text           Output a cleartext signature of a text&lt;br /&gt;
import-key          Import a key&lt;br /&gt;
new-user            Add a user&lt;br /&gt;
sign-rpm            Sign a RPM&lt;br /&gt;
list-keys           List keys&lt;br /&gt;
sign-data           Create a detached signature&lt;br /&gt;
revoke-key-access   Revoke key acess from a user&lt;br /&gt;
user-info           Show information about a user&lt;br /&gt;
change-passphrase   Change key passphrase&lt;br /&gt;
list-key-users      List users that can access a key&lt;br /&gt;
new-key             Add a key&lt;br /&gt;
modify-user         Modify a user&lt;br /&gt;
sign-rpms           Sign one or more RPMs&lt;br /&gt;
modify-key          Modify a key&lt;br /&gt;
delete-user         Delete a user&lt;br /&gt;
key-user-info       Show information about user&#039;s key access&lt;br /&gt;
get-public-key      Output public part of the key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Créer une nouvelle clé ===&lt;br /&gt;
&lt;br /&gt;
Une fois le client Sigul capable d&#039;envoyer des commandes à &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, on peut créer une nouvelle clé nommée &#039;&#039;&#039;centos-5-key&#039;&#039;&#039;.&lt;br /&gt;
 sigul new-key --name-real=&#039;CentOS-5-B2PWeb&#039; --name-comment=&#039;CentOS 5 B2PWeb Signing Key&#039; --name-email=&#039;srs@b2pweb.com&#039; --key-admin root centos-5-key&lt;br /&gt;
{{Admon/note|Générer beaucoup d&#039;entropie durant le génération de la clé|La génération de la clé nécessite beaucoup d&#039;entropie sur le serveur Sigul. On peut donc occuper le serveur et paradoxalement accélerer la génération de la clé.&lt;br /&gt;
&lt;br /&gt;
La commande suivant génère assez d&#039;entropie pour 2 minutes:&lt;br /&gt;
&amp;lt;pre&amp;gt;find / &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&amp;lt;/pre&amp;gt;}}&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigul new-key --help&lt;br /&gt;
usage: client.py new-key [options] key&lt;br /&gt;
&lt;br /&gt;
Add a key&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  --key-admin=USER      Initial key administrator&lt;br /&gt;
  --name-real=NAME_REAL&lt;br /&gt;
                        Real name of key subject&lt;br /&gt;
  --name-comment=NAME_COMMENT&lt;br /&gt;
                        A comment about of key subject&lt;br /&gt;
  --name-email=NAME_EMAIL&lt;br /&gt;
                        E-mail of key subject&lt;br /&gt;
  --expire-date=YYYY-MM-DD&lt;br /&gt;
                        Key expiration date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Import d&#039;une clé existante ===&lt;br /&gt;
 sigul import-key &#039;CentOS-5-B2PWeb&#039; ~/.gnupg/secring.gpg&lt;br /&gt;
&lt;br /&gt;
=== Changer le nom de la clé ===&lt;br /&gt;
Changer le nom de la clé &#039;&#039;&#039;centos5&#039;&#039;&#039; en &#039;&#039;&#039;centos-5-key&#039;&#039;&#039;&amp;lt;pre&amp;gt;sigul modify-key --new-name centos-5-key centos5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout d&#039;un utilisateur ===&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un utilisateur administrateur&amp;lt;pre&amp;gt;sigul new-user --admin --with-password didier&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autoriser l&#039;utilisation d&#039;une clé existante à un utilisateur ===&lt;br /&gt;
&amp;lt;pre&amp;gt;sigul grant-key-access centos-5-key didier&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigul grant-key-access --help&lt;br /&gt;
usage: client.py grant-key-access key user&lt;br /&gt;
&lt;br /&gt;
Grant key access to a user&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help  show this help message and exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modifier la phrase de passe ===&lt;br /&gt;
 sigul change-passphrase centos-5-key&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigul change-passphrase --help&lt;br /&gt;
usage: client.py change-passphrase key&lt;br /&gt;
&lt;br /&gt;
Change key passphrase&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help  show this help message and exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|ERROR: I/O error: Unexpected EOF in NSPR|&lt;br /&gt;
* S&#039;assurer que le répertoire des clés existe. Ce chemin est déclaré dans le fichier &amp;lt;path&amp;gt;/etc/sigul/server.conf&amp;lt;/path&amp;gt;&amp;lt;pre&amp;gt;gnupg-home: /var/lib/sigul/server/gnupg&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Propriétaire: &#039;&#039;&#039;sigul&#039;&#039;&#039;&lt;br /&gt;
** Groupe: &#039;&#039;&#039;sigul&#039;&#039;&#039;&lt;br /&gt;
** Droits: 0700 &#039;&#039;&#039;rwx------&#039;&#039;&#039;&lt;br /&gt;
** Lien symbolique &#039;&#039;&#039;/var/lib/sigul/gnupg&#039;&#039;&#039; pointant sur &amp;lt;path&amp;gt;/var/lib/sigul/server/gnupg&amp;lt;/path&amp;gt;&lt;br /&gt;
* S&#039;assurer qu&#039;il y a suffisamment d&#039;espace disque ( en gros deux fois la taille du plus gros paquet RPM )&lt;br /&gt;
* S&#039;assurer que les daemons sigul_bridge et sigul_server sont démarrés&amp;lt;pre&amp;gt;service sigul_server status &amp;amp;&amp;amp; service sigul_bridge status&amp;lt;/pre&amp;gt;&lt;br /&gt;
* S&#039;assurer que le pont peut se connecter au serveur ( [[Koji/SigulInstall#Firewall| Configure firewall]] )}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|Error: Unknown error|&lt;br /&gt;
Vérifier les journaux du serveur, l&#039;erreur est surement plus explicite&lt;br /&gt;
* &amp;lt;pre&amp;gt;/usr/bin/rpmsign: No such file or directory&amp;lt;/pre&amp;gt;Il suffit d&#039;installer le paquet &amp;lt;package&amp;gt;rpm-sign&amp;lt;/package&amp;gt; qui n&#039;est pas installé par défaut sur centos 7. Un simple &amp;lt;code&amp;gt;yum provides /usr/bin/rpmsign&amp;lt;/code&amp;gt; donne le paquet à installer.}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|Unknown error on creating key process|&lt;br /&gt;
* Installer le paquet &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt; depuis [ http://people.redhat.com/mitr/rpmsigner/rhel6 ] ou de [ http://infrastructure.stg.fedoraproject.org/repo/builder-rpms/6Server/SRPMS/ ]&lt;br /&gt;
* S&#039;assurer que Sigul est configurer pour utiliser &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt;&amp;lt;pre&amp;gt;sed -i -e &#039;/gnupg_bin/s,^.*$,gnupg_bin = &amp;quot;/usr/bin/gpg1&amp;quot;,&#039; /usr/share/sigul/settings.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
* S&#039;assurer que le paquet &amp;lt;package&amp;gt;python-sqlalchemy&amp;lt;/package&amp;gt; soit installé}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|Certificats client expirés|&lt;br /&gt;
Une fois le certificat client expiré, il faut le désactiver localement&amp;lt;pre&amp;gt;certutil -d ~/.sigul -D -n sigul-client-cert&amp;lt;/pre&amp;gt; et refaire une génération de certificat client.}}&lt;br /&gt;
&lt;br /&gt;
== Interfacer Sigul et koji ==&lt;br /&gt;
&lt;br /&gt;
=== configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; peut être utiliser pour signer un ou de multiples RPMs dans une instance &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;. Une fois le client Sigul correctement configuré, il suffit juste de configurer l&#039;utilisateur Proxy pour Koji. Quand un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; émet une requête de signature pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; se connecte à &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; en tant qu&#039;utilisateur &#039;&#039;&#039;kojiweb&#039;&#039;&#039;. Il faut juste s&#039;assurer que l&#039;utilisateur demandeur a les droits administrateur sur le &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; s&#039;occupe du reste.&lt;br /&gt;
&lt;br /&gt;
La configuration pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; peut être situer n&#039;importe où, du moment que l&#039;utilisateur sigul a droit de lecture. Les certificats pour &#039;&#039;&#039;kojiweb&#039;&#039;&#039; doivent être copiés dans le même chemin que la configuration &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création du répertoire de configuration de &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p ~/.koji&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie de la configuration par défaut du client &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/koji.conf ~/.koji/config&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie des certificats {{class|Kojiweb}} dans celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/pem/kojiweb.pem .koji/client.pem&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/clientca.crt&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/serverca.crt&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarrer le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, le client doit être capable d&#039;obtenir un RPM depuis Koji et de le signer.&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Pour tester l&#039;interfaçage, on va obtenir un RPM depuis &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le signer et le sauvegarder dans le répertoire de travail actuel. c&#039;est juste pour tester la connxion et l&#039;authentification sur &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul sign-rpm -o signed.rpm key_name unsigned.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si la commande précédente fonctionne, un RPM signé est présent dans le répertoire de travail actuel.&lt;br /&gt;
&lt;br /&gt;
On vérifie sa signature&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rpm --checksig signed.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script sigulsign_unsigned.py ==&lt;br /&gt;
&lt;br /&gt;
Le script est à récupérer depuis un depôt releng de Fedora via git (git://git.fedorahosted.org/git/releng) ou directement depuis https://git.fedorahosted.org/cgit/releng/tree/scripts/sigulsign_unsigned.py&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir utiliser ce script magique qui va signer tous les RPM non-signés (derniers m-v-r) construit dans le Koji, il est nécessaire de modifier quelques variables:&lt;br /&gt;
* Changer l&#039;URL du HUB Koji (2 fois): KOJIHUB&lt;br /&gt;
* Spécifier nos propres fichiers de certificats: SERVERCA, CLIENTCA, CLIENTCERT&lt;br /&gt;
* Ajout de nos clés de signature: KEYS&lt;br /&gt;
{{Admon/warning|Casse de l&#039;ID dans le script sigulsign_unsigned.py|GPG rapporte un ID écrit en majuscule mais dans le script, celui-ci doit être renseigné en minuscule pour que le processus fonctionne.}}&lt;br /&gt;
&lt;br /&gt;
Pour obtenir l&#039;ID de nos clés:&lt;br /&gt;
* exporter de la clé&amp;lt;pre&amp;gt;sigul get-public-key centos-5-key &amp;gt; centos-5-key.asc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* importer dans GPG&amp;lt;pre&amp;gt;gpg --import centos-5-key.asc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Lister nos clé GPG&amp;lt;pre&amp;gt;gpg --list-keys&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/root/.gnupg/pubring.gpg&lt;br /&gt;
------------------------&lt;br /&gt;
pub   1024D/773DF357 2013-08-20&lt;br /&gt;
uid                  CentOS-5-B2PWeb (CentOS 5 B2PWeb Signing Key) &amp;lt;srs@b2pweb.com&amp;gt;&lt;br /&gt;
sub   2048g/EBC96FF2 2013-08-20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
L&#039;ID de notre clé &#039;&#039;&#039;centos-5-key&#039;&#039;&#039; est 773DF357&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
Change koji hostname, certificate files and add B2PWeb signing keys&lt;br /&gt;
diff -u a/sigulsign_unsigned.py b/sigulsign_unsigned.py&lt;br /&gt;
--- a/sigulsign_unsigned.py	2013-08-21 10:05:57.418032284 +0200&lt;br /&gt;
+++ b/sigulsign_unsigned.py	2013-08-21 10:13:11.683976970 +0200&lt;br /&gt;
@@ -38,11 +38,11 @@ rpmdict = {}&lt;br /&gt;
 unsigned = []&lt;br /&gt;
 loglevel = &#039;&#039;&lt;br /&gt;
 passphrase = &#039;&#039;&lt;br /&gt;
-KOJIHUB = &#039;https://koji.fedoraproject.org/kojihub&#039;&lt;br /&gt;
+KOJIHUB = &#039;http://koji.b2pweb.com/kojihub&#039;&lt;br /&gt;
 # Should probably set these from a koji config file&lt;br /&gt;
-SERVERCA = os.path.expanduser(&#039;~/.fedora-server-ca.cert&#039;)&lt;br /&gt;
-CLIENTCA = os.path.expanduser(&#039;~/.fedora-upload-ca.cert&#039;)&lt;br /&gt;
-CLIENTCERT = os.path.expanduser(&#039;~/.fedora.cert&#039;)&lt;br /&gt;
+SERVERCA = os.path.expanduser(&#039;~/.koji/serverca.crt&#039;)&lt;br /&gt;
+CLIENTCA = os.path.expanduser(&#039;~/.koji/clientca.crt&#039;)&lt;br /&gt;
+CLIENTCERT = os.path.expanduser(&#039;~/.koji/client.pem&#039;)&lt;br /&gt;
 # Setup a dict of our key names as sigul knows them to the actual key ID&lt;br /&gt;
 # that koji would use.  We should get this from sigul somehow.&lt;br /&gt;
 KEYS = {&#039;fedora-12-sparc&#039;: {&#039;id&#039;: &#039;b3eb779b&#039;, &#039;v3&#039;: True},&lt;br /&gt;
@@ -67,7 +67,9 @@ KEYS = {&#039;fedora-12-sparc&#039;: {&#039;id&#039;: &#039;b3eb7&lt;br /&gt;
         &#039;fedora-10&#039;: {&#039;id&#039;: &#039;4ebfc273&#039;, &#039;v3&#039;: False},&lt;br /&gt;
         &#039;fedora-10-testing&#039;: {&#039;id&#039;: &#039;0b86274e&#039;, &#039;v3&#039;: False},&lt;br /&gt;
         &#039;epel-6&#039;: {&#039;id&#039;: &#039;0608b895&#039;, &#039;v3&#039;: True},&lt;br /&gt;
-        &#039;epel-5&#039;: {&#039;id&#039;: &#039;217521f6&#039;, &#039;v3&#039;: False}}&lt;br /&gt;
+        &#039;epel-5&#039;: {&#039;id&#039;: &#039;217521f6&#039;, &#039;v3&#039;: False},&lt;br /&gt;
+        &#039;centos-5-key&#039; : {&#039;id&#039;: &#039;773df357&#039;, &#039;v3&#039;: True},&lt;br /&gt;
+        &#039;centos-6-key&#039; : {&#039;id&#039;: &#039;d3f3c56a&#039;, &#039;v3&#039;: True}}&lt;br /&gt;
 &lt;br /&gt;
 def exit(status):&lt;br /&gt;
     &amp;quot;&amp;quot;&amp;quot;End the program using status, report any errors&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
@@ -213,7 +215,7 @@ if not (opts.just_list or opts.just_writ&lt;br /&gt;
 &lt;br /&gt;
 # Reset the KOJIHUB if the target is a secondary arch&lt;br /&gt;
 if opts.arch:&lt;br /&gt;
-    KOJIHUB = &#039;http://%s.koji.fedoraproject.org/kojihub&#039; % opts.arch&lt;br /&gt;
+    KOJIHUB = &#039;http://%s.koji.b2pweb.com/kojihub&#039; % opts.arch&lt;br /&gt;
 # setup the koji session&lt;br /&gt;
 logging.info(&#039;Setting up koji session&#039;)&lt;br /&gt;
 kojisession = koji.ClientSession(KOJIHUB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signature d&#039;un ou plusieurs paquets ===&lt;br /&gt;
&lt;br /&gt;
C&#039;est utile afin de signer des paquets qui ne sont pas les derniers construits (dernier N-V-R)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sigulsign_unsigned.py -v --password=&amp;quot;motdepasse&amp;quot; --inherit centos-6-key &amp;lt;N-V-R&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sigulsign_unsigned.py -v --password=&amp;quot;$(cat /root/.sigul/centos-6-key)&amp;quot; --inherit centos-6-key appliance-tools-007.0-1.el6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Koji/Installation&amp;diff=3112</id>
		<title>Koji/Installation</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Koji/Installation&amp;diff=3112"/>
		<updated>2015-04-22T10:14:01Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Koji Web - Interface for the Masses */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Mettre en place un système de construction de RPM Koji&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
{{class|Koji}} est une suite logicielle de construction de RPM. Il utilise [[RPM/Mock|mock]] pour créer des environnements&lt;br /&gt;
chrootés et y effectuer les builds.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:KojiArch.svg|441px|vignette|centré|Architecture du koji]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Koji-Hub&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est le centre nerveux de toutes les opérations Koji. Il s&#039;agit d&#039;un serveur XML-RPC fonctionnant sous mod_python pour Apache. {{class|koji-hub}} est passif : il ne reçoit que les appels XML-RPC et s&#039;appuie sur les autres outils de la suite pour la construction. {{class|koji-hub}} est le seul composant qui a un accès direct à la base de données et est l&#039;un des deux composants qui ont un accès en écriture au système de fichiers.&lt;br /&gt;
* &#039;&#039;&#039;Kojid&#039;&#039;&#039; ou &#039;&#039;&#039;Koji-builder&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est le démon de compilation qui s&#039;exécute sur chacune des machines de construction. Sa principale responsabilité est de scruter les demandes de construction entrantes et de les exécuter. Pour cela, {{class|kojid}} interroge {{class|koji-hub}}. {{class|Kojid}} est également responsable d&#039;autres tâches que la construction : la création d&#039;images d&#039;installation par exemple. kojid utilise Mock pour la construction. Il crée également un buildroot vierge pour chaque génération. kojid est écrit en Python et communique avec koji-hub par l&#039;intermédiaire de XML-RPC.&lt;br /&gt;
* &#039;&#039;&#039;Koji-Web&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est un ensemble de scripts qui s&#039;exécutent avec mod_python et utilise le moteur de templates Cheetah pour fournir une interface web à {{class|Koji}}. Il agit comme un client à {{class|koji-hub}} en offrant une interface d&#039;aministration limitée. {{class|koji-Web}} expose un grand nombre d&#039;informations et fournit également un moyen pour certaines opérations, telles que l&#039;annulation de builds.&lt;br /&gt;
* &#039;&#039;&#039;Koji-client&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est une interface en ligne de commande ( CLI = Command Line Interface ) écrit en Python qui fournit de nombreux hooks à {{class|Koji}}. Il permet à l&#039;utilisateur d&#039;interroger la plupart des données ainsi que d&#039;effectuer des actions telles que l&#039;ajout d&#039;utilisateurs et de lancer la construction des demandes.&lt;br /&gt;
* &#039;&#039;&#039;Kojira&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est un démon qui garde la racine de construction repodata à jour. Il est responsable de l&#039;enlèvement des racines redondantes et du nettoyage après une demande de construction est terminée.&lt;br /&gt;
&lt;br /&gt;
Les composants de {{class|Koji}} peuvent être installés sur des serveurs différents. La seule obligation est d&#039;autoriser la communication entre les différents composants de la suite.&lt;br /&gt;
&lt;br /&gt;
{{class|Koji}} supporte nativement l&#039;authentification par serveur Kerberos et par certificat SSL. Seul {{class|koji-client}} supporte l&#039;authentification par mot de passe. De ce fait, l&#039;authentification par mot de passe ne sera même pas abordée.&lt;br /&gt;
&lt;br /&gt;
La méthode d&#039;authentification doit être choisie dès le début de l&#039;installation. Dans la suite de ce document, nous mettrons en place la méthode SSL.&lt;br /&gt;
&lt;br /&gt;
{{class|Koji}} utilise beaucoup d&#039;espace disque dans son répertoire primaire &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;. De plus Mock en utilisera beaucoup aussi sur les répertoires &amp;lt;path&amp;gt;/var/lib/mock&amp;lt;/path&amp;gt; et &amp;lt;path&amp;gt;/var/cache/mock&amp;lt;/path&amp;gt;. Il vaut mieux prévoir des partitions dédiées à ces répertoires ( les répertoires de Mock doivent appartenir au groupe mock et avoir les permissions 02755 ).&lt;br /&gt;
&lt;br /&gt;
Pour un aperçu rapide des outils utilisés : [[RPM/Yum|yum]], [[RPM/Mock|mock]], {{class|Koji}} (et tous ses composants), [[RPM/Mash|mash]], et comment ils fonctionnent ensemble, il existe une excellente présentation &amp;lt;ref&amp;gt;Présentation des outils de création/gestion des RPM [http://indico.cern.ch/event/55091 | Version online ]&amp;lt;br&amp;gt;Version offline: [[Fichier:MockKojiMash.pdf]] ( non mise à jour )&amp;lt;/ref&amp;gt; créée par Steve Traylen du CERN.&lt;br /&gt;
&lt;br /&gt;
Le dépôt git de RussianFedora avec les fichiers de configuration de {{class|Koji}} &amp;lt;ref&amp;gt;https://github.com/RussianFedora/koji-setup&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connaissances requises ===&lt;br /&gt;
* Connaissances basiques de l&#039;authentification par certificat SSL.&lt;br /&gt;
* Connaissances basiques de création de base de données PostgreSQL and d&#039;importation de structure de base&lt;br /&gt;
* Connaissances basiques de l&#039;outil psql&lt;br /&gt;
* Connaissances basiques de configuration d&#039;Apache&lt;br /&gt;
* Connaissances basiques des outils yum/createrepo/mock &lt;br /&gt;
* Connaissances basiques de la ligne de commandes&lt;br /&gt;
* Connaissances basiques sur la construction de RPM&lt;br /&gt;
&lt;br /&gt;
=== Dépendances ===&lt;br /&gt;
&lt;br /&gt;
Sur le serveur ({{class|koji-hub}} / {{class|kojiweb}} )&lt;br /&gt;
* httpd&lt;br /&gt;
* mod_ssl&lt;br /&gt;
* postgresql-server&lt;br /&gt;
* mod_wsgi&lt;br /&gt;
* MySQL-python&lt;br /&gt;
&lt;br /&gt;
Sur les constructeurs ( {{class|kojid}} )&lt;br /&gt;
* mock&lt;br /&gt;
* setarch&lt;br /&gt;
* rpm-build&lt;br /&gt;
* createrepo&lt;br /&gt;
&lt;br /&gt;
Si le mode d&#039;authentification choisie est Kerberos, il faudra aussi que le réseau local ait un serveur DNS et une dépendance supplémentaire est à installer sur le serveur et les constructeurs.&lt;br /&gt;
* mod_auth_kerb&lt;br /&gt;
&lt;br /&gt;
=== Espace disque ===&lt;br /&gt;
&lt;br /&gt;
comme &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; utilise [[RPM/Mock|Mock]], les répertoires &amp;lt;path&amp;gt;/var/lib/mock&amp;lt;/path&amp;gt; et &amp;lt;path&amp;gt;/var/cache/mock&amp;lt;/path&amp;gt; grossiront mais une purge de ces répertoires est mise en place par Koji.&lt;br /&gt;
&lt;br /&gt;
Les répertoires qui vont grossir au fur et à mesure de l&#039;utilisation sont ceux de:&lt;br /&gt;
* Mock: &lt;br /&gt;
* La base de données: &amp;lt;path&amp;gt;/var/lib/psql&amp;lt;/path&amp;gt;&lt;br /&gt;
* Le répertoire principal de Koji: &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;&lt;br /&gt;
* Le répertoire des dépôts: &amp;lt;path&amp;gt;/mnt/repo&amp;lt;/path&amp;gt;&lt;br /&gt;
Il sera donc judicieux de leur attribuer une partition spécifique avec une taille dynamique (lvm)&lt;br /&gt;
&lt;br /&gt;
== Génération des certificats SSL ==&lt;br /&gt;
&lt;br /&gt;
Ces certificats serviront à l&#039;authentification des éléments de Koji sur le {{class|koji-hub}}.&lt;br /&gt;
&lt;br /&gt;
Création du répertoire des certificats&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 mkdir /etc/pki/koji &amp;amp;&amp;amp; cd /etc/pki/koji&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Création du fichier de configuration de nos futurs certificats&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/ssl.cnf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HOME                    = .&lt;br /&gt;
RANDFILE                = .rand&lt;br /&gt;
&lt;br /&gt;
[ca] &lt;br /&gt;
default_ca              = ca_default&lt;br /&gt;
&lt;br /&gt;
[ca_default] &lt;br /&gt;
dir                     = .&lt;br /&gt;
certs                   = $dir/certs&lt;br /&gt;
crl_dir                 = $dir/crl&lt;br /&gt;
database                = $dir/index.txt&lt;br /&gt;
new_certs_dir           = $dir/newcerts&lt;br /&gt;
certificate             = $dir/%s_ca_cert.pem&lt;br /&gt;
private_key             = $dir/private/%s_ca_key.pem&lt;br /&gt;
serial                  = $dir/serial&lt;br /&gt;
crl                     = $dir/crl.pem&lt;br /&gt;
x509_extensions         = usr_cert&lt;br /&gt;
name_opt                = ca_default&lt;br /&gt;
cert_opt                = ca_default&lt;br /&gt;
default_days            = 3650&lt;br /&gt;
default_crl_days        = 30&lt;br /&gt;
default_md              = sha256&lt;br /&gt;
preserve                = no&lt;br /&gt;
policy                  = policy_match&lt;br /&gt;
&lt;br /&gt;
[policy_match] &lt;br /&gt;
countryName             = match&lt;br /&gt;
stateOrProvinceName     = match&lt;br /&gt;
organizationName        = match&lt;br /&gt;
organizationalUnitName  = optional&lt;br /&gt;
commonName              = supplied&lt;br /&gt;
emailAddress            = optional&lt;br /&gt;
&lt;br /&gt;
[req] &lt;br /&gt;
default_bits            = 4096&lt;br /&gt;
default_keyfile         = privkey.pem&lt;br /&gt;
distinguished_name      = req_distinguished_name&lt;br /&gt;
attributes              = req_attributes&lt;br /&gt;
x509_extensions         = v3_ca # The extentions to add to the self signed cert&lt;br /&gt;
string_mask             = MASK:0x2002&lt;br /&gt;
&lt;br /&gt;
[req_distinguished_name] &lt;br /&gt;
countryName                     = Country Name (2 letter code)&lt;br /&gt;
countryName_default             = FR&lt;br /&gt;
countryName_min                 = 2&lt;br /&gt;
countryName_max                 = 2&lt;br /&gt;
stateOrProvinceName             = State or Province Name (full name)&lt;br /&gt;
stateOrProvinceName_default     = Languedoc Roussilon&lt;br /&gt;
localityName                    = Locality Name (eg, city)&lt;br /&gt;
localityName_default            = Beaucaire&lt;br /&gt;
0.organizationName              = Organization Name (eg, company)&lt;br /&gt;
0.organizationName_default      = Home&lt;br /&gt;
organizationalUnitName          = Organizational Unit Name (eg, section)&lt;br /&gt;
commonName                      = Common Name (eg, your name or your server\&#039;s hostname)&lt;br /&gt;
commonName_max                  = 64&lt;br /&gt;
emailAddress                    = Email Address&lt;br /&gt;
emailAddress_max                = 64&lt;br /&gt;
&lt;br /&gt;
[req_attributes] &lt;br /&gt;
challengePassword               = A challenge password&lt;br /&gt;
challengePassword_min           = 4&lt;br /&gt;
challengePassword_max           = 20&lt;br /&gt;
unstructuredName                = An optional company name&lt;br /&gt;
&lt;br /&gt;
[usr_cert] &lt;br /&gt;
basicConstraints                = CA:FALSE&lt;br /&gt;
nsComment                       = &amp;quot;OpenSSL Generated Certificate&amp;quot;&lt;br /&gt;
subjectKeyIdentifier            = hash&lt;br /&gt;
authorityKeyIdentifier          = keyid,issuer:always&lt;br /&gt;
&lt;br /&gt;
[v3_ca] &lt;br /&gt;
subjectKeyIdentifier            = hash&lt;br /&gt;
authorityKeyIdentifier          = keyid:always,issuer:always&lt;br /&gt;
basicConstraints                = CA:true&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/note|Modification du fichier ssl.cnf|Bien que cela ne soit pas obligatoire, il est recommandé d&#039;éditer les champs suffixés par &#039;&#039;&#039;_default&#039;&#039;&#039; dans la section &#039;&#039;&#039;[req_distinguished_name]&#039;&#039;&#039;, afin de coller aux informations du serveur en cours d&#039;installation&amp;lt;br&amp;gt;Cela vous permettra d&#039;accepter directement les valeurs proposées par défaut à la génération des certificats.&amp;lt;br&amp;gt;Les autres sections n&#039;ont pas besoin d&#039;être éditées.}}&lt;br /&gt;
&lt;br /&gt;
=== Génération de l&#039;autorité de certification ===&lt;br /&gt;
&lt;br /&gt;
Toujours depuis le répertoire /etc/pki/koji, on initialise notre générateur et on génère l’autorité de certification. Celle-ci se compose d&#039;une paire clé/certificat qui servira à signer tous les autres certificats.&lt;br /&gt;
&lt;br /&gt;
Ici, le CN sera obligatoirement le nom d&#039;hôte du serveur (FQDN), les autres renseignements ne sont pas bloquants pour la suite.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /etc/pki/koji/&lt;br /&gt;
mkdir {certs,private,confs}&lt;br /&gt;
touch index.txt&lt;br /&gt;
echo 01 &amp;gt; serial&lt;br /&gt;
openssl genrsa -out private/koji_ca_cert.key 4096&lt;br /&gt;
openssl req -config ssl.cnf -new -x509 -days 3650 -key private/koji_ca_cert.key \&lt;br /&gt;
-out koji_ca_cert.crt -extensions v3_ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Générer les certificats des composants de Koji et le certificat de l&#039;administrateur===&lt;br /&gt;
&lt;br /&gt;
Chaque composant de Koji a besoin d&#039;un certificat.&lt;br /&gt;
Kojihub et kojiweb ont besoin d&#039;avoir le nome d&#039;hôte pleinement qualifié (FQDN) en CN, on se servira de OU pour distinguer les certificats. Pour les autres certificats, le CN doit être le nom du composant ( kojira ), le login du compte administrateur ou le nom du builder qui sera définit avec koji-client.&lt;br /&gt;
Par simplicité, on va se servir de ces scripts pour générer les certificats des composants et les certificats web.&lt;br /&gt;
&lt;br /&gt;
Script de génération des certificats&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/generate-certificate.sh&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#if you change your certificate authority name to something else you will need to change the caname value to reflect the change.&lt;br /&gt;
caname=koji&lt;br /&gt;
&lt;br /&gt;
# user is equal to parameter one or the first argument when you actually run the script&lt;br /&gt;
user=$1&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;$user&amp;quot; == &amp;quot;&amp;quot; ]]&lt;br /&gt;
then&lt;br /&gt;
	echo &amp;quot;Usage: $(basename $0) USER&amp;quot;&lt;br /&gt;
	exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Generate certificates for \&amp;quot;${user}\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
openssl genrsa -out certs/${user}.key 4096&lt;br /&gt;
&lt;br /&gt;
cat ssl.cnf | sed &#039;s/insert_hostname/&#039;${user}&#039;/&#039;&amp;gt; ssl2.cnf&lt;br /&gt;
&lt;br /&gt;
openssl req -config ssl2.cnf -new -nodes -out certs/${user}.csr -key certs/${user}.key&lt;br /&gt;
&lt;br /&gt;
openssl ca -config ssl2.cnf -keyfile private/${caname}_ca_cert.key -cert ${caname}_ca_cert.crt \&lt;br /&gt;
	-out certs/${user}.crt -outdir certs -infiles certs/${user}.csr&lt;br /&gt;
&lt;br /&gt;
cat certs/${user}.crt certs/${user}.key &amp;gt; ${user}.pem&lt;br /&gt;
&lt;br /&gt;
mv ssl2.cnf confs/${user}-ssl.cnf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Script de génération des certificats pour les navigateurs Web&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/generate-web-certificate.sh&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#if you change your certificate authority name to something else you will need to change the caname value to reflect the change.&lt;br /&gt;
caname=koji&lt;br /&gt;
&lt;br /&gt;
# user is equal to parameter one or the first argument when you actually run the script&lt;br /&gt;
user=$1&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;$user&amp;quot; == &amp;quot;&amp;quot; ]]&lt;br /&gt;
then&lt;br /&gt;
	echo &amp;quot;Usage: $(basename $0) USER&amp;quot;&lt;br /&gt;
	exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Generate web certificates for \&amp;quot;${user}\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
openssl pkcs12 -export -inkey certs/${user}.key -in certs/${user}.crt -CAfile ${caname}_ca_cert.crt \&lt;br /&gt;
	-out certs/${user}_browser_cert.p12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
On génère les certificats comme cela pour tous les composants et users du tableau récapitulatif:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /etc/pki/koji/&lt;br /&gt;
./generate-certificate.sh kojiweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Le user choisi pour être le koji admin est le user didier.&lt;br /&gt;
&lt;br /&gt;
De plus pour les utilisateurs (réels) de {{class|koji}}, on générera les certificats web comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./generate-web-certificate.sh didier&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom du certificat&lt;br /&gt;
! CN (commonName)&lt;br /&gt;
! OU (organizationalUnitName)&lt;br /&gt;
|-&lt;br /&gt;
| kojihub&lt;br /&gt;
| koji.didier-linux.eu (FQDN)&lt;br /&gt;
| kojihub&lt;br /&gt;
|-&lt;br /&gt;
| kojiweb&lt;br /&gt;
| koji.didier-linux.eu (FQDN)&lt;br /&gt;
| kojiweb&lt;br /&gt;
|-&lt;br /&gt;
| kojira&lt;br /&gt;
| kojira&lt;br /&gt;
| Admin&lt;br /&gt;
|-&lt;br /&gt;
| didier ( utilisateur koji admin )&lt;br /&gt;
| didier ( ici c&#039;est le user et non le nom d&#039;hôte de la machine )&lt;br /&gt;
| Admin&lt;br /&gt;
|-&lt;br /&gt;
| kojibuilder.didier-linux.eu&lt;br /&gt;
| kojibuilder.didier-linux.eu&lt;br /&gt;
| builder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Copier les certificats dans le home de utilisateur admin ===&lt;br /&gt;
&lt;br /&gt;
On copie le certificat correspondant à l&#039;administrateur du {{class|Koji}}, et l&#039;autorité de certification dans son home.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir ~/.koji&lt;br /&gt;
cp /etc/pki/koji/didier.pem ~/.koji/client.crt&lt;br /&gt;
cp /etc/pki/koji/koji_ca_cert.crt ~/.koji/clientca.crt&lt;br /&gt;
cp /etc/pki/koji/koji_ca_cert.crt ~/.koji/serverca.crt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/note|Modification des paramètres par défaut|Pour modifier des paramètre d&#039;un client sans modifier la configuration générale, il faut copier le fichier &amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt; dans le home de l&#039;utilisateur &amp;lt;path&amp;gt;~/.koji/config&amp;lt;/path&amp;gt; et y effectuer les modifications dans celui-ci.}}&lt;br /&gt;
&lt;br /&gt;
==Mise en place des principals Kerberos==&lt;br /&gt;
&lt;br /&gt;
Le serveur Kerberos doit pouvoir être trouvé grâce au DNS. Le point final indique que l&#039;hôte est pleinement qualifié (FQDN).&lt;br /&gt;
&amp;lt;pre&amp;gt;_kerberos._udp    IN SRV  10 100 88 kerberos.didier-linux.eu.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Principal&lt;br /&gt;
! Utilisation&lt;br /&gt;
|-&lt;br /&gt;
| host/kojihub@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-hub pour communiquer avec le client koji&lt;br /&gt;
|-&lt;br /&gt;
| HTTP/kojiweb@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-web pour négotier une authentifiaction avec le navigateur web. C&#039;est le principal pour l&#039;authentification Apache &amp;lt;package&amp;gt;mod_auth_kerb&amp;lt;/package&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| koji/kojiweb@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-web pour communiquer avec koji-hub. C&#039;est le principal qui va authentifier koji-web sur Kerberos comme &amp;quot;koji/kojiweb@EXAMPLE.COM&amp;quot;. Koji-web relayera aussi le nom d&#039;utilisateur (authentification Apache) vers koji-hub (koji-hub config option &#039;&#039;&#039;&#039;&#039;ProxyPrincipals&#039;&#039;&#039;&#039;&#039;). &lt;br /&gt;
|-&lt;br /&gt;
| koji/kojira@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par kojira pour communiquer avec koji-hub&lt;br /&gt;
|-&lt;br /&gt;
| compile/builder1@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par le constructeur koji pour communiquer avec koji-hub&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Ajout des utilisateurs Koji aux alias du serveur de mail local==&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, un serveur [[Mail/MTA/Sendmail|sendmail]] en local est déjà configuré et opérationnel.&lt;br /&gt;
&lt;br /&gt;
Appairer les utilisateurs Koji aux véritables adresses mail.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/aliases&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Person who should get root&#039;s mail&lt;br /&gt;
root:           didier@didier-linux.eu&lt;br /&gt;
didier:         didier@didier-linux.eu&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Puis lancer la régénération des alias&lt;br /&gt;
 # newaliases&lt;br /&gt;
&lt;br /&gt;
== Serveur PostgreSQL ==&lt;br /&gt;
Une fois l&#039;autentification mise en place, nous avons besoin d&#039;installer un serveur [[DBMS/PostgreSQL/Brief|PostgreSQL]], de le configurer et de mettre en place la structure de la base de données pour {{class|Koji}}.&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* /var/lib/pgsql/data/pg_hba.conf&lt;br /&gt;
* /var/lib/pgsql/data/postgresql.conf&lt;br /&gt;
&lt;br /&gt;
===Installation du serveur PostgreSQL===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install postgresql-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Initialisation de la base de données PostgreSQL===&lt;br /&gt;
&lt;br /&gt;
Les commandes suivantes initialise le serveur [[DBMS/PostgreSQL/Brief|PostgreSQL]] et le démarre.&lt;br /&gt;
Le script d&#039;init a été converti à systemd sur les distributions Fedora 16 et supérieures et la cible &#039;&#039;&#039;initdb&#039;&#039;&#039; du script d&#039;init a été supprimée. On initialise directement avec les commandes du SGBD.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - postgres -c &amp;quot;PGDATA=/var/lib/pgsql/data initdb&amp;quot;&lt;br /&gt;
systemctl start postgresql.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{admon/tip|Initialisation du SGBD sur les distributions sysVinit|&amp;lt;pre&amp;gt;service postgresql initdb &amp;amp;&amp;amp; service postgresql start&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Compte utilisateur ===&lt;br /&gt;
&lt;br /&gt;
Mise en place du compte &#039;&#039;&#039;koji&#039;&#039;&#039; sur le système (utilisateur unix) et mise en place d&#039;un mot de passe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
useradd koji&lt;br /&gt;
passwd koji&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setup de PostgreSQL et import de la structure de la base ===&lt;br /&gt;
&lt;br /&gt;
Création de l&#039;utilisateur PostgreSQL &#039;&#039;&#039;koji&#039;&#039;&#039; et création de sa base de données, puis import de la structure.&lt;br /&gt;
{{Admon/bug|Import de la structure|Il est important laisser le joker (*) afin de ne pas se restreindre à une version particulière de Koji. Durant des test, il a été découvert que la restriction à une version spécifique de Koji ne créé pas  correctement toutes les tables.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - postgres&lt;br /&gt;
createuser koji&lt;br /&gt;
Shall the new role be a superuser? (y/n) n&lt;br /&gt;
Shall the new role be allowed to create databases? (y/n) n&lt;br /&gt;
Shall the new role be allowed to create more new roles? (y/n) n&lt;br /&gt;
createdb -O koji koji&lt;br /&gt;
logout&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - koji&lt;br /&gt;
psql koji koji &amp;lt; /usr/share/doc/koji*/docs/schema.sql&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autorisation de Koji-web et Koji-hub aux resources===&lt;br /&gt;
&#039;&#039;Dans cet exemple, Koji-web et Koji-hub sont démarrés sur localhost.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ces paramètres doivent être ajouter avant les autres.&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host    koji        koji        127.0.0.1/32          trust&lt;br /&gt;
host    koji        koji          ::1/128             trust&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
On peut aussi utiliser les sockets UNIX. La variable &#039;&#039;&#039;&#039;&#039;DBHost&#039;&#039;&#039;&#039;&#039; variable ne doit pas être renseigné avec cette méthode.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local   koji        apache                            trust&lt;br /&gt;
local   koji        apache      127.0.0.1/32          trust&lt;br /&gt;
local   koji        apache        ::1/128             trust&lt;br /&gt;
local   koji        koji                              trust&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Application des changements à chaud ===&lt;br /&gt;
&lt;br /&gt;
Informer postgreSQL que les fichiers de configuration doivent être relus.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@localhost$ su - postgres&lt;br /&gt;
postgres@localhost$ pg_ctl reload&lt;br /&gt;
postgres@localhost$ exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout du premier administrateur du Koji à la base PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
Le premier administrateur du &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; doit être ajouter à la main avec des commandes SQL. Une fois ajouté avec les droits administarteur, Il pourra gérer les autres utilisateurs de &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; avec l&#039;outil d&#039;administration en ligne de commande.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;authentifiaction SSL ou Kerberos, il n&#039;y a pas besoin de mettre un mot de passe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@localhost$ su - koji&lt;br /&gt;
koji@localhost$ psql&lt;br /&gt;
koji=&amp;gt; insert into users (name, status, usertype) values (&#039;admin-user-name&#039;, 0, 0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Se donner les droits admin ===&lt;br /&gt;
&lt;br /&gt;
Commande permettant de se donner les droits administrateur. Pour la lancer, on doit connaitre l&#039;ID de l&#039;utilisateur.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji=&amp;gt; insert into user_perms (user_id, perm_id, creator_id) values (&amp;lt;id of user inserted above&amp;gt;, 1, &amp;lt;id of user inserted above&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Admon/tip|Connaitre l&#039;ID des utilisateurs|Pour connaitre les IDs des utilisateurs du &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, on doit lancer une commande SQL.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji=&amp;gt; select * from users;&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
A ce stade, aucune action ne peut être démarrée tant que le kojihub n&#039;est pas configuré et le serveur web démarré.&lt;br /&gt;
&lt;br /&gt;
== Koji Hub ==&lt;br /&gt;
&lt;br /&gt;
koji-hub est le centre nerveux de toutes les opérations Koji. Il s&#039;agit d&#039;un serveur XML-RPC fonctionnant sous mod_python pour Apache. koji-hub est passif : il ne reçoit que les appels XML-RPC et s&#039;appuie sur les autres outils de la suite pour la construction. koji-hub est le seul composant qui a un accès direct à la base de données et est l&#039;un des deux composants qui ont un accès en écriture au système de fichiers. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* /etc/httpd/conf/httpd.conf&lt;br /&gt;
* /etc/httpd/conf.d/kojihub.conf&lt;br /&gt;
* /etc/httpd/conf.d/ssl.conf (when using ssl auth)&lt;br /&gt;
* /etc/koji-hub/hub.conf&lt;br /&gt;
* /etc/koji.conf&lt;br /&gt;
&lt;br /&gt;
Le répertoire de travail sera &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;.&lt;br /&gt;
{{Admon/bug|Répertoire de travail de Koji|Si le répertoire de travail de Koji n&#039;est pas &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;, il est impératif de créer un lien symbolique du répertoire de travail de Koji dans &amp;lt;path&amp;gt;/mnt&amp;lt;/path&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;ln -s /path/to/koji/datadir /mnt/koji&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Installation de {{class|koji-hub}}===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-hub httpd mod_ssl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On bride tout d&#039;abord le nombre maximum de requête sur le serveur [[Webserver/Apache|apache]] à une valeur plus raisonnable afin de prévenir une saturation et/ou un crash du serveur web.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf/httpd.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;IfModule prefork.c&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
MaxRequestsPerChild  100&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;IfModule worker.c&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
MaxRequestsPerChild  100&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Le répertoire &amp;lt;path&amp;gt;/mnt/koji/packages&amp;lt;/path&amp;gt; doit être accessible par HTTP. On ajoute donc un alias.&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojipackages.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Alias /packages &amp;quot;/mnt/koji/packages&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/mnt/koji/packages&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order allow,deny&lt;br /&gt;
        Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/ssl.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
LoadModule ssl_module modules/mod_ssl.so&lt;br /&gt;
&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog&lt;br /&gt;
&lt;br /&gt;
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)&lt;br /&gt;
SSLSessionCacheTimeout  300&lt;br /&gt;
&lt;br /&gt;
SSLMutex default&lt;br /&gt;
&lt;br /&gt;
SSLRandomSeed startup file:/dev/urandom  256&lt;br /&gt;
SSLRandomSeed connect builtin&lt;br /&gt;
&lt;br /&gt;
SSLCryptoDevice builtin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
  ErrorLog logs/ssl_error_log&lt;br /&gt;
  TransferLog logs/ssl_access_log&lt;br /&gt;
  LogLevel warn&lt;br /&gt;
&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLProtocol all -SSLv2&lt;br /&gt;
  SSLCipherSuite RC4-SHA:AES128-SHA:ALL:!ADH:!EXP:!LOW:!MD5:!SSLV2:!NULL&lt;br /&gt;
&lt;br /&gt;
  SSLCertificateFile /etc/pki/koji/certs/kojihub.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/pki/koji/certs/kojihub.key&lt;br /&gt;
  SSLCertificateChainFile /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
  SSLCACertificateFile /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
  SSLVerifyClient require&lt;br /&gt;
  SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Files ~ &amp;quot;\.(cgi|shtml|phtml|php3?)$&amp;quot;&amp;gt;&lt;br /&gt;
    SSLOptions +StdEnvVars&lt;br /&gt;
  &amp;lt;/Files&amp;gt;&lt;br /&gt;
  &amp;lt;Directory &amp;quot;/var/www/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
    SSLOptions +StdEnvVars&lt;br /&gt;
  &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  SetEnvIf User-Agent &amp;quot;.*MSIE.*&amp;quot; \&lt;br /&gt;
         nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
         downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
  CustomLog logs/ssl_request_log \&lt;br /&gt;
          &amp;quot;%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \&amp;quot;%r\&amp;quot; %b&amp;quot;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojihub.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Alias /kojihub /usr/share/koji-hub/kojixmlrpc.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/usr/share/koji-hub&amp;quot;&amp;gt;&lt;br /&gt;
    Options ExecCGI&lt;br /&gt;
    SetHandler wsgi-script&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alias /kojifiles &amp;quot;/mnt/koji/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/mnt/koji&amp;quot;&amp;gt;&lt;br /&gt;
    Options Indexes SymLinksIfOwnerMatch&lt;br /&gt;
    AllowOverride None&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Location /kojihub/ssllogin&amp;gt;&lt;br /&gt;
        SSLVerifyClient require&lt;br /&gt;
        SSLVerifyDepth  10&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Location /kojihub&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/koji-hub/hub.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[hub]&lt;br /&gt;
DBName = koji&lt;br /&gt;
DBUser = koji&lt;br /&gt;
DBHost = localhost&lt;br /&gt;
KojiDir = /mnt/koji&lt;br /&gt;
&lt;br /&gt;
DNUsernameComponent = CN&lt;br /&gt;
ProxyDNs = /C=FR/ST=Languedoc Roussillon/O=Home/OU=kojiweb/CN=koji.didier-linux.eu/emailAddress=root@didier-linux.eu|/C=FR/ST=Languedoc Roussillon/O=Home/OU=Admin/CN=didier/emailAddress=didier@didier-linux.eu&lt;br /&gt;
&lt;br /&gt;
LoginCreatesUser = On&lt;br /&gt;
KojiWebURL = http://koji.didier-linux.eu/koji&lt;br /&gt;
EmailDomain = didier-linux.eu&lt;br /&gt;
NotifyOnSuccess = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[koji]&lt;br /&gt;
server = http://koji.didier-linux.eu/kojihub&lt;br /&gt;
weburl = http://koji.didier-linux.eu/koji&lt;br /&gt;
topurl = http://koji.didier-linux.eu/kojifiles&lt;br /&gt;
topdir = /mnt/koji&lt;br /&gt;
cert = ~/.koji/client.crt&lt;br /&gt;
ca = ~/.koji/clientca.crt&lt;br /&gt;
serverca = ~/.koji/serverca.crt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Configuration de [[Security/SELinux|SELinux]] ===&lt;br /&gt;
Si le mode enforcing est utilisé, on doit autoriser [[Webserver/Apache|apache]] à acceder au serveur [[SGBD/PostgreSQL]]. Même si le mode est permissive, il est recommandé de lancer la commande suivante afin de se prémunir d&#039;un changement de mode de [[Security/SELinux|SELinux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setsebool -P httpd_can_network_connect_db 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Squelette des fichiers Koji ===&lt;br /&gt;
&lt;br /&gt;
Avant que les autres composants de Koji puissent fonctionner correctement, On doit créer la structure et modifié les droits de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt&lt;br /&gt;
mkdir koji&lt;br /&gt;
cd koji&lt;br /&gt;
mkdir {packages,repos,work,scratch}&lt;br /&gt;
chown apache.apache *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, [[Webserver/Apache|apache]] peut être redémarré et on peut effectuer des opérations minimales sur notre serveur Koji via le client en ligne de commande: gestion des utilisateurs et des constructeurs.&lt;br /&gt;
&lt;br /&gt;
Il faut s&#039;assurer que le client est configuré par défaut ( fichier &amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt; et que les certificats sont en place dans le home de l&#039;administrateur.&lt;br /&gt;
&lt;br /&gt;
{{Admon/note|Fichier de configuration alternatif|Si un fichier de configuration personnel autre que &amp;lt;path&amp;gt;~/.koji/config&amp;lt;/path&amp;gt; est utilisé, il faut utilisé la commande koji avec l&#039;option &#039;&#039;&#039;-c&#039;&#039;&#039;.}}&lt;br /&gt;
La commande suivante teste le login administrateur sur le serveur Koji.&lt;br /&gt;
 koji call getLoggedInUser&lt;br /&gt;
&lt;br /&gt;
{{Admon/important|Droit des daemons|Kojira a besoin du privilège &#039;&#039;&#039;repo&#039;&#039;&#039; avant le lancement du daemon. C&#039;est pourquoi il est vivement recommandé de créer cet utilisateur maintenant et de lui ajouter le privilège&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-user kojira&lt;br /&gt;
koji grant-permission repo kojira&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour des raisons similaires, les hôtes de constructions doivent être ajoutés avant le démarrage du daemon kojid.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host kojibuilder1 x86_64 i386&lt;br /&gt;
koji add-host kojibuilder2 ppc ppc64&lt;br /&gt;
koji add-host kojibuilder3 ia64&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Koji Web - Interface for the Masses ==&lt;br /&gt;
&lt;br /&gt;
Koji-web est un jeu de scripts qui tournent avec mod_wsgi et qui utilise le moteur de modèle Cheetah pour fournir une interface web à Koji. Koji-web affiche beaucoup d&#039;informations et propose même quelques opérations comme l&#039;abandon de tâche.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration:&#039;&#039;&#039;&lt;br /&gt;
* /etc/kojiweb/web.conf&lt;br /&gt;
* /etc/httpd/conf.d/kojiweb.conf&lt;br /&gt;
* /etc/httpd/conf.d/ssl.conf&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de Koji-Web:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-web mod_ssl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configuration obligatoire ====&lt;br /&gt;
&lt;br /&gt;
La configuration doit fournir à Koji-web les URLs d&#039;accès à Koji-hub, aux paquets koji (builds) et à sa propre interface. Il est judicieux de modifier aussi le secret (directive &#039;&#039;PythonOption Secret&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Avec l&#039;authentification SSL, elle doit aussi fournir le nom des certificats à utiliser et la directive &#039;&#039;PythonOption WebCert&#039;&#039; doit contenir &#039;&#039;&#039;la clé publique ET la clé privée&#039;&#039;&#039;.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojiweb/web.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[web]&lt;br /&gt;
SiteName = koji&lt;br /&gt;
KojiTheme = didier&lt;br /&gt;
&lt;br /&gt;
KojiHubURL http://koji.didier-linux.eu/kojihub&lt;br /&gt;
KojiFilesURL http://www.didier-linux.eu/kojifiles&lt;br /&gt;
&lt;br /&gt;
WebCert /etc/pki/koji/kojiweb.pem&lt;br /&gt;
ClientCA /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
KojiHubCA /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
LoginTimeout 72&lt;br /&gt;
Secret CHANGE_ME&lt;br /&gt;
&lt;br /&gt;
LibPath = /usr/share/koji-web/lib&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration Optionnelle ====&lt;br /&gt;
&lt;br /&gt;
Il faut éditer le fichier &amp;lt;path&amp;gt;/etc/httpd/conf.d/kojiweb.conf&amp;lt;/path&amp;gt; pour configurer l&#039;authentification choisie.&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojiweb.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Location /koji/login&amp;gt;&lt;br /&gt;
SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/ssl.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SSLVerifyClient require&lt;br /&gt;
SSLVerifyDepth  10&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Interface Web opérationnelle ====&lt;br /&gt;
&lt;br /&gt;
L&#039;interface Web du koji est maintenant accessible et la plupart des opérations de lecture doivent fonctionner et chaque utilisateur doit pouvoir se connecter.&lt;br /&gt;
&lt;br /&gt;
== Koji Daemon - Builder ==&lt;br /&gt;
&lt;br /&gt;
Kojid est le daemon de construction qui tourne sur chaque constructeur. son rôle principale est de traiter les requêtes de construction. Koji ne se limite cependant pas aux tâches de construction puisqu&#039;il peut aussi construire des images ISO, des disques virtuels (appliances). Kojid utilise mock pour créer des environnements de construction minimaliste et en créé pour chaque construction. Ceci permet le compartimentage des constructions et les constructions ne peuvent pas se gêner les unes les autres. Kojid est écrit en python et communique avec le hub via XML-RPC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fichiers de Configuration&#039;&#039;&#039;&lt;br /&gt;
* Configuration du daemon Kojira: /etc/kojid/kojid.conf&lt;br /&gt;
* Variables de lancement du daemon: /etc/sysconfig/kojid&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de kojid:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-builder&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configuration générale ====&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration de chaque constructeur doit être édité afin que la directive &#039;&#039;server&#039;&#039; pointe sur l&#039;hôte supportant le Koji-hub. La directive &#039;&#039;user&#039;&#039; doit contenir le nom d&#039;hôte du constructeur.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The URL for the xmlrpc server&lt;br /&gt;
server=http://hub.example.com/kojihub&lt;br /&gt;
&lt;br /&gt;
; the username has to be the same as what you used with add-host&lt;br /&gt;
; in this example follow as below&lt;br /&gt;
user = kojibuilder1.example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
La directive &#039;&#039;workdir&#039;&#039; peut être différente entre les constructeurs mais elle ne doit pas être le répertoire de travail du Koji (&amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;)&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The directory root for temporary storage&lt;br /&gt;
workdir=/tmp/koji&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration des certificats SSL ====&lt;br /&gt;
&lt;br /&gt;
Ces entrées doivent être éditées pour pointer sur les bons certificats générés précédemment.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;client certificate&lt;br /&gt;
; This should reference the builder certificate we created above, for&lt;br /&gt;
; kojibuilder1.example.com&lt;br /&gt;
cert = /etc/kojid/kojid.pem&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the client certificate&lt;br /&gt;
ca = /etc/kojid/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the HTTP server certificate&lt;br /&gt;
serverca = /etc/kojid/koji_ca_cert.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/important|Copie des certificats sur l&#039;hôte|Les certificats SSL doivent être copiés depuis l&#039;hôte abritant le Koji-hub sur les constructeurs dans le répertoire &amp;lt;path&amp;gt;/etc/kojid&amp;lt;/path&amp;gt; pour que les constructeurs puissent s&#039;authentifier.}}&lt;br /&gt;
&lt;br /&gt;
==== Ajout d&#039;un hôte à la base de données des constructeurs ====&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant ajouter l&#039;hôte à la base de données des constructeurs afin qu&#039;il puisse être utilisé par Koji-hub.&lt;br /&gt;
{{Admon/important|L&#039;ajout doit être fait avant le premier démarrage du daemon de construction|Sinon, il faudra purger les entrées à la main dans les tables &#039;&#039;sessions&#039;&#039; et &#039;&#039;users&lt;br /&gt;
&#039;&#039; avant de pouvoir démarrer avec succès le daemon.}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host kojibuilder1.didier-linux.eu i386 x86_64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le premier argument après la commande est le nom d&#039;hôte du constructeur. Le second argument spécifie l&#039;(les) architecture(s) utilisées par l&#039;hôtes.&lt;br /&gt;
&lt;br /&gt;
==== Ajout de l&#039;hôte au canal de création ====&lt;br /&gt;
&lt;br /&gt;
Les canaux sont un moyen de contrôler quel constructeur fait quoi. Par défaut les hôtes sont ajouté au canal &#039;&#039;default&#039;&#039;. Il faut qu&#039;au moins quelques uns (1 au minimum) soient ajoutés au canal &#039;&#039;createrepo&#039;&#039; pour pouvoir lancer les travaux kojira sur les dépôts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host-to-channel kojibuilder1.didier.eu createrepo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Capacité ====&lt;br /&gt;
&lt;br /&gt;
La capacité d&#039;un hôte par défaut est de 2, ce qui veut dire que le daemond econstruction n&#039;acceptera pas de travail supplémentaire si le load average est supérieur à 2. Ce paramètre est différent de celui du nombre maximal de travaux (fichier de configuration). Avant que ledaemon de construction n&#039;accepte un nouveau travail, il s&#039;assure que le load average est inférieur à la capacité et que le nombre de travaux est inférieur au nombre maximal. Toutefois, à l&#039;ère des CPU multi-coeurs, un load average de 2 est insuffisant pour consommer 100% des ressources du système. Il n&#039;y a pas d&#039;option pour définir la capacité en ligne de commande, cela doit être fait en base (psql).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji@localhost$ psql koji&lt;br /&gt;
koji=# select (id, name, capacity) from host;&lt;br /&gt;
              row               &lt;br /&gt;
--------------------------------&lt;br /&gt;
 (1,kojibuilder1.didier-linux.eu,2)&lt;br /&gt;
 (2,kojibuilder2.didier-linux.eu,2)&lt;br /&gt;
(2 rows)&lt;br /&gt;
&lt;br /&gt;
koji=# update host set capacity = 16 where id = 1;&lt;br /&gt;
UPDATE 1&lt;br /&gt;
koji=# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Démarrage du daemon Kojid ====&lt;br /&gt;
&lt;br /&gt;
Une fois le constructeur ajouté à la base de données, on peut démarrer son daemon de construction.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl start kojid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On vérifie dans le fichier &amp;lt;path&amp;gt;/var/log/kojid.log&amp;lt;/path&amp;gt; qur le daemon a bien démarré. Si aucune erreur n&#039;est rapportée, c&#039;est que le daemon doit être correctement configuré et démarré. On peut le vérifier sur l&#039;interface Koji-web dans l&#039;onglet &#039;&#039;hôtes&#039;&#039;. Cette page affiche le liste des constructeurs et leur status.&lt;br /&gt;
&lt;br /&gt;
== Kojira - Création et maintenance du dépôt ==&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration:&#039;&#039;&#039;&lt;br /&gt;
* Configuration du daemon Kojira: &amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
* Variables de lancement du daemon: &amp;lt;path&amp;gt;/etc/sysconfig/kojira&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de kojira&#039;&#039;&#039;&lt;br /&gt;
 yum install koji-utils&lt;br /&gt;
&lt;br /&gt;
==== Configuration générale ====&lt;br /&gt;
La directive &#039;&#039;server&#039;&#039; a besoin de pointer sur le koji-hub.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The URL for the xmlrpc server&lt;br /&gt;
server=http://koji.didier-linux.eu/kojihub&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/important|Note importante|&lt;br /&gt;
* Kojira a besoin d&#039;un accès en lecture/écriture sur &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;. &lt;br /&gt;
* Il ne devrait exister qu&#039;une seule instance de {{class|kojira}} à la fois.&lt;br /&gt;
* Il n&#039;est pas recommandé de lancer kojira sur les constructeurs, car ceux-ci n&#039;ont besoin que d&#039;un accès en lecture seule sur le répertoire &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration de l&#039;authentification SSL ====&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;client certificate&lt;br /&gt;
; This should reference the kojira certificate we created above&lt;br /&gt;
cert = /etc/pki/koji/kojira.pem&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the client certificate&lt;br /&gt;
ca = /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the HTTP server certificate&lt;br /&gt;
serverca = /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The local user kojira runs as needs to be able to read and write to /mnt/koji/repos/.&lt;br /&gt;
If the volume that directory resides on is root-squashed or otherwise unmodifiable&lt;br /&gt;
by root, you can set &#039;&#039;&#039;RUNAS=&#039;&#039;&#039; to a user that has the required privileges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/sysconfig/kojira&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORCE_LOCK=Y&lt;br /&gt;
KOJIRA_DEBUG=N&lt;br /&gt;
KOJIRA_VERBOSE=Y&lt;br /&gt;
RUNAS=root&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Ajout de l&#039;utilisateur kojira à Koji ====&lt;br /&gt;
Si cela n&#039;a pas été déjà fait, création de l&#039;utilisateur kojira et ajout du droit &#039;&#039;&#039;repo&#039;&#039;&#039; à celui-ci. Cela doit être fait avec le compte de l&#039;administrateur de Koji.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-user kojira&lt;br /&gt;
koji grant-permission repo kojira&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Démarrage du deamon Kojira ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl start kojira.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On vérifie dans le fichier &amp;lt;path&amp;gt;/var/log/kojira/kojira.log&amp;lt;/path&amp;gt; que {{class|kojira}} a bien démarré.&lt;br /&gt;
&lt;br /&gt;
== SELinux ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
semanage fcontext -a -t httpd_sys_rw_content_t &#039;/mnt/koji(/.*)?&#039;&lt;br /&gt;
restorecon -Rv /mnt/koji&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:RPM|Install Koji]]&lt;br /&gt;
[[Catégorie:Koji|Install]]&lt;br /&gt;
[[Catégorie:Server|Install Koji]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulUsing&amp;diff=3111</id>
		<title>Koji/SigulUsing</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulUsing&amp;diff=3111"/>
		<updated>2015-04-22T07:48:04Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sigul ==&lt;br /&gt;
&lt;br /&gt;
après une [[Koji/SigulInstall|installation de Sigul]], on peut l&#039;utiliser.&lt;br /&gt;
{{Admon/note|Commandes disponible|&amp;lt;pre&amp;gt;$ sigul --help-commands&lt;br /&gt;
delete-key          Delete a key&lt;br /&gt;
modify-key-user     Modify user&#039;s key access&lt;br /&gt;
list-users          List users&lt;br /&gt;
grant-key-access    Grant key access to a user&lt;br /&gt;
sign-text           Output a cleartext signature of a text&lt;br /&gt;
import-key          Import a key&lt;br /&gt;
new-user            Add a user&lt;br /&gt;
sign-rpm            Sign a RPM&lt;br /&gt;
list-keys           List keys&lt;br /&gt;
sign-data           Create a detached signature&lt;br /&gt;
revoke-key-access   Revoke key acess from a user&lt;br /&gt;
user-info           Show information about a user&lt;br /&gt;
change-passphrase   Change key passphrase&lt;br /&gt;
list-key-users      List users that can access a key&lt;br /&gt;
new-key             Add a key&lt;br /&gt;
modify-user         Modify a user&lt;br /&gt;
sign-rpms           Sign one or more RPMs&lt;br /&gt;
modify-key          Modify a key&lt;br /&gt;
delete-user         Delete a user&lt;br /&gt;
key-user-info       Show information about user&#039;s key access&lt;br /&gt;
get-public-key      Output public part of the key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Créer une nouvelle clé ===&lt;br /&gt;
&lt;br /&gt;
Une fois le client Sigul capable d&#039;envoyer des commandes à &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, on peut créer une nouvelle clé nommée &#039;&#039;&#039;centos-5-key&#039;&#039;&#039;.&lt;br /&gt;
 sigul new-key --name-real=&#039;CentOS-5-B2PWeb&#039; --name-comment=&#039;CentOS 5 B2PWeb Signing Key&#039; --name-email=&#039;srs@b2pweb.com&#039; --key-admin root centos-5-key&lt;br /&gt;
{{Admon/note|Générer beaucoup d&#039;entropie durant le génération de la clé|La génération de la clé nécessite beaucoup d&#039;entropie sur le serveur Sigul. On peut donc occuper le serveur et paradoxalement accélerer la génération de la clé.&lt;br /&gt;
&lt;br /&gt;
La commande suivant génère assez d&#039;entropie pour 2 minutes:&lt;br /&gt;
&amp;lt;pre&amp;gt;find / &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&amp;lt;/pre&amp;gt;}}&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigul new-key --help&lt;br /&gt;
usage: client.py new-key [options] key&lt;br /&gt;
&lt;br /&gt;
Add a key&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  --key-admin=USER      Initial key administrator&lt;br /&gt;
  --name-real=NAME_REAL&lt;br /&gt;
                        Real name of key subject&lt;br /&gt;
  --name-comment=NAME_COMMENT&lt;br /&gt;
                        A comment about of key subject&lt;br /&gt;
  --name-email=NAME_EMAIL&lt;br /&gt;
                        E-mail of key subject&lt;br /&gt;
  --expire-date=YYYY-MM-DD&lt;br /&gt;
                        Key expiration date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Import d&#039;une clé existante ===&lt;br /&gt;
 sigul import-key &#039;CentOS-5-B2PWeb&#039; ~/.gnupg/secring.gpg&lt;br /&gt;
&lt;br /&gt;
=== Changer le nom de la clé ===&lt;br /&gt;
Changer le nom de la clé &#039;&#039;&#039;centos5&#039;&#039;&#039; en &#039;&#039;&#039;centos-5-key&#039;&#039;&#039;&amp;lt;pre&amp;gt;sigul modify-key --new-name centos-5-key centos5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout d&#039;un utilisateur ===&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un utilisateur administrateur&amp;lt;pre&amp;gt;sigul new-user --admin --with-password didier&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autoriser l&#039;utilisation d&#039;une clé existante à un utilisateur ===&lt;br /&gt;
&amp;lt;pre&amp;gt;sigul grant-key-access centos-5-key didier&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigul grant-key-access --help&lt;br /&gt;
usage: client.py grant-key-access key user&lt;br /&gt;
&lt;br /&gt;
Grant key access to a user&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help  show this help message and exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modifier la phrase de passe ===&lt;br /&gt;
 sigul change-passphrase centos-5-key&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigul change-passphrase --help&lt;br /&gt;
usage: client.py change-passphrase key&lt;br /&gt;
&lt;br /&gt;
Change key passphrase&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help  show this help message and exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|ERROR: I/O error: Unexpected EOF in NSPR|&lt;br /&gt;
* S&#039;assurer que le répertoire des clés existe. Ce chemin est déclaré dans le fichier &amp;lt;path&amp;gt;/etc/sigul/server.conf&amp;lt;/path&amp;gt;&amp;lt;pre&amp;gt;gnupg-home: /var/lib/sigul/server/gnupg&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Propriétaire: &#039;&#039;&#039;sigul&#039;&#039;&#039;&lt;br /&gt;
** Groupe: &#039;&#039;&#039;sigul&#039;&#039;&#039;&lt;br /&gt;
** Droits: 0700 &#039;&#039;&#039;rwx------&#039;&#039;&#039;&lt;br /&gt;
** Lien symbolique &#039;&#039;&#039;/var/lib/sigul/gnupg&#039;&#039;&#039; pointant sur &amp;lt;path&amp;gt;/var/lib/sigul/server/gnupg&amp;lt;/path&amp;gt;&lt;br /&gt;
* S&#039;assurer qu&#039;il y a suffisamment d&#039;espace disque ( en gros deux fois la taille du plus gros paquet RPM )&lt;br /&gt;
* S&#039;assurer que les daemons sigul_bridge et sigul_server sont démarrés&amp;lt;pre&amp;gt;service sigul_server status &amp;amp;&amp;amp; service sigul_bridge status&amp;lt;/pre&amp;gt;&lt;br /&gt;
* S&#039;assurer que le pont peut se connecter au serveur ( [[Koji/SigulInstall#Firewall| Configure firewall]] )}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|Unknown error on creating key process|&lt;br /&gt;
* Installer le paquet &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt; depuis [ http://people.redhat.com/mitr/rpmsigner/rhel6 ] ou de [ http://infrastructure.stg.fedoraproject.org/repo/builder-rpms/6Server/SRPMS/ ]&lt;br /&gt;
* S&#039;assurer que Sigul est configurer pour utiliser &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt;&amp;lt;pre&amp;gt;sed -i -e &#039;/gnupg_bin/s,^.*$,gnupg_bin = &amp;quot;/usr/bin/gpg1&amp;quot;,&#039; /usr/share/sigul/settings.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
* S&#039;assurer que le paquet &amp;lt;package&amp;gt;python-sqlalchemy&amp;lt;/package&amp;gt; soit installé}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|Certificats client expirés|&lt;br /&gt;
Une fois le certificat client expiré, il faut le désactiver localement&amp;lt;pre&amp;gt;certutil -d ~/.sigul -D -n sigul-client-cert&amp;lt;/pre&amp;gt; et refaire une génération de certificat client.}}&lt;br /&gt;
&lt;br /&gt;
== Interfacer Sigul et koji ==&lt;br /&gt;
&lt;br /&gt;
=== configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; peut être utiliser pour signer un ou de multiples RPMs dans une instance &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;. Une fois le client Sigul correctement configuré, il suffit juste de configurer l&#039;utilisateur Proxy pour Koji. Quand un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; émet une requête de signature pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; se connecte à &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; en tant qu&#039;utilisateur &#039;&#039;&#039;kojiweb&#039;&#039;&#039;. Il faut juste s&#039;assurer que l&#039;utilisateur demandeur a les droits administrateur sur le &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; s&#039;occupe du reste.&lt;br /&gt;
&lt;br /&gt;
La configuration pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; peut être situer n&#039;importe où, du moment que l&#039;utilisateur sigul a droit de lecture. Les certificats pour &#039;&#039;&#039;kojiweb&#039;&#039;&#039; doivent être copiés dans le même chemin que la configuration &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création du répertoire de configuration de &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p ~/.koji&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie de la configuration par défaut du client &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/koji.conf ~/.koji/config&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie des certificats {{class|Kojiweb}} dans celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/pem/kojiweb.pem .koji/client.pem&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/clientca.crt&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/serverca.crt&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarrer le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, le client doit être capable d&#039;obtenir un RPM depuis Koji et de le signer.&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Pour tester l&#039;interfaçage, on va obtenir un RPM depuis &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le signer et le sauvegarder dans le répertoire de travail actuel. c&#039;est juste pour tester la connxion et l&#039;authentification sur &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul sign-rpm -o signed.rpm key_name unsigned.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si la commande précédente fonctionne, un RPM signé est présent dans le répertoire de travail actuel.&lt;br /&gt;
&lt;br /&gt;
On vérifie sa signature&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rpm --checksig signed.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script sigulsign_unsigned.py ==&lt;br /&gt;
&lt;br /&gt;
Le script est à récupérer depuis un depôt releng de Fedora via git (git://git.fedorahosted.org/git/releng) ou directement depuis https://git.fedorahosted.org/cgit/releng/tree/scripts/sigulsign_unsigned.py&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir utiliser ce script magique qui va signer tous les RPM non-signés (derniers m-v-r) construit dans le Koji, il est nécessaire de modifier quelques variables:&lt;br /&gt;
* Changer l&#039;URL du HUB Koji (2 fois): KOJIHUB&lt;br /&gt;
* Spécifier nos propres fichiers de certificats: SERVERCA, CLIENTCA, CLIENTCERT&lt;br /&gt;
* Ajout de nos clés de signature: KEYS&lt;br /&gt;
{{Admon/warning|Casse de l&#039;ID dans le script sigulsign_unsigned.py|GPG rapporte un ID écrit en majuscule mais dans le script, celui-ci doit être renseigné en minuscule pour que le processus fonctionne.}}&lt;br /&gt;
&lt;br /&gt;
Pour obtenir l&#039;ID de nos clés:&lt;br /&gt;
* exporter de la clé&amp;lt;pre&amp;gt;sigul get-public-key centos-5-key &amp;gt; centos-5-key.asc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* importer dans GPG&amp;lt;pre&amp;gt;gpg --import centos-5-key.asc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Lister nos clé GPG&amp;lt;pre&amp;gt;gpg --list-keys&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/root/.gnupg/pubring.gpg&lt;br /&gt;
------------------------&lt;br /&gt;
pub   1024D/773DF357 2013-08-20&lt;br /&gt;
uid                  CentOS-5-B2PWeb (CentOS 5 B2PWeb Signing Key) &amp;lt;srs@b2pweb.com&amp;gt;&lt;br /&gt;
sub   2048g/EBC96FF2 2013-08-20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
L&#039;ID de notre clé &#039;&#039;&#039;centos-5-key&#039;&#039;&#039; est 773DF357&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
Change koji hostname, certificate files and add B2PWeb signing keys&lt;br /&gt;
diff -u a/sigulsign_unsigned.py b/sigulsign_unsigned.py&lt;br /&gt;
--- a/sigulsign_unsigned.py	2013-08-21 10:05:57.418032284 +0200&lt;br /&gt;
+++ b/sigulsign_unsigned.py	2013-08-21 10:13:11.683976970 +0200&lt;br /&gt;
@@ -38,11 +38,11 @@ rpmdict = {}&lt;br /&gt;
 unsigned = []&lt;br /&gt;
 loglevel = &#039;&#039;&lt;br /&gt;
 passphrase = &#039;&#039;&lt;br /&gt;
-KOJIHUB = &#039;https://koji.fedoraproject.org/kojihub&#039;&lt;br /&gt;
+KOJIHUB = &#039;http://koji.b2pweb.com/kojihub&#039;&lt;br /&gt;
 # Should probably set these from a koji config file&lt;br /&gt;
-SERVERCA = os.path.expanduser(&#039;~/.fedora-server-ca.cert&#039;)&lt;br /&gt;
-CLIENTCA = os.path.expanduser(&#039;~/.fedora-upload-ca.cert&#039;)&lt;br /&gt;
-CLIENTCERT = os.path.expanduser(&#039;~/.fedora.cert&#039;)&lt;br /&gt;
+SERVERCA = os.path.expanduser(&#039;~/.koji/serverca.crt&#039;)&lt;br /&gt;
+CLIENTCA = os.path.expanduser(&#039;~/.koji/clientca.crt&#039;)&lt;br /&gt;
+CLIENTCERT = os.path.expanduser(&#039;~/.koji/client.pem&#039;)&lt;br /&gt;
 # Setup a dict of our key names as sigul knows them to the actual key ID&lt;br /&gt;
 # that koji would use.  We should get this from sigul somehow.&lt;br /&gt;
 KEYS = {&#039;fedora-12-sparc&#039;: {&#039;id&#039;: &#039;b3eb779b&#039;, &#039;v3&#039;: True},&lt;br /&gt;
@@ -67,7 +67,9 @@ KEYS = {&#039;fedora-12-sparc&#039;: {&#039;id&#039;: &#039;b3eb7&lt;br /&gt;
         &#039;fedora-10&#039;: {&#039;id&#039;: &#039;4ebfc273&#039;, &#039;v3&#039;: False},&lt;br /&gt;
         &#039;fedora-10-testing&#039;: {&#039;id&#039;: &#039;0b86274e&#039;, &#039;v3&#039;: False},&lt;br /&gt;
         &#039;epel-6&#039;: {&#039;id&#039;: &#039;0608b895&#039;, &#039;v3&#039;: True},&lt;br /&gt;
-        &#039;epel-5&#039;: {&#039;id&#039;: &#039;217521f6&#039;, &#039;v3&#039;: False}}&lt;br /&gt;
+        &#039;epel-5&#039;: {&#039;id&#039;: &#039;217521f6&#039;, &#039;v3&#039;: False},&lt;br /&gt;
+        &#039;centos-5-key&#039; : {&#039;id&#039;: &#039;773df357&#039;, &#039;v3&#039;: True},&lt;br /&gt;
+        &#039;centos-6-key&#039; : {&#039;id&#039;: &#039;d3f3c56a&#039;, &#039;v3&#039;: True}}&lt;br /&gt;
 &lt;br /&gt;
 def exit(status):&lt;br /&gt;
     &amp;quot;&amp;quot;&amp;quot;End the program using status, report any errors&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
@@ -213,7 +215,7 @@ if not (opts.just_list or opts.just_writ&lt;br /&gt;
 &lt;br /&gt;
 # Reset the KOJIHUB if the target is a secondary arch&lt;br /&gt;
 if opts.arch:&lt;br /&gt;
-    KOJIHUB = &#039;http://%s.koji.fedoraproject.org/kojihub&#039; % opts.arch&lt;br /&gt;
+    KOJIHUB = &#039;http://%s.koji.b2pweb.com/kojihub&#039; % opts.arch&lt;br /&gt;
 # setup the koji session&lt;br /&gt;
 logging.info(&#039;Setting up koji session&#039;)&lt;br /&gt;
 kojisession = koji.ClientSession(KOJIHUB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signature d&#039;un ou plusieurs paquets ===&lt;br /&gt;
&lt;br /&gt;
C&#039;est utile afin de signer des paquets qui ne sont pas les derniers construits (dernier N-V-R)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sigulsign_unsigned.py -v --password=&amp;quot;motdepasse&amp;quot; --inherit centos-6-key &amp;lt;N-V-R&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sigulsign_unsigned.py -v --password=&amp;quot;$(cat /root/.sigul/centos-6-key)&amp;quot; --inherit centos-6-key appliance-tools-007.0-1.el6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulUsing&amp;diff=3110</id>
		<title>Koji/SigulUsing</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulUsing&amp;diff=3110"/>
		<updated>2015-04-22T07:42:20Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Script sigulsign_unsigned.py */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sigul ==&lt;br /&gt;
&lt;br /&gt;
après une [[Koji/SigulInstall|installation de Sigul]], on peut l&#039;utiliser.&lt;br /&gt;
{{Admon/note|Commandes disponible|&amp;lt;pre&amp;gt;$ sigul --help-commands&lt;br /&gt;
delete-key          Delete a key&lt;br /&gt;
modify-key-user     Modify user&#039;s key access&lt;br /&gt;
list-users          List users&lt;br /&gt;
grant-key-access    Grant key access to a user&lt;br /&gt;
sign-text           Output a cleartext signature of a text&lt;br /&gt;
import-key          Import a key&lt;br /&gt;
new-user            Add a user&lt;br /&gt;
sign-rpm            Sign a RPM&lt;br /&gt;
list-keys           List keys&lt;br /&gt;
sign-data           Create a detached signature&lt;br /&gt;
revoke-key-access   Revoke key acess from a user&lt;br /&gt;
user-info           Show information about a user&lt;br /&gt;
change-passphrase   Change key passphrase&lt;br /&gt;
list-key-users      List users that can access a key&lt;br /&gt;
new-key             Add a key&lt;br /&gt;
modify-user         Modify a user&lt;br /&gt;
sign-rpms           Sign one or more RPMs&lt;br /&gt;
modify-key          Modify a key&lt;br /&gt;
delete-user         Delete a user&lt;br /&gt;
key-user-info       Show information about user&#039;s key access&lt;br /&gt;
get-public-key      Output public part of the key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Créer une nouvelle clé ===&lt;br /&gt;
&lt;br /&gt;
Une fois le client Sigul capable d&#039;envoyer des commandes à &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, on peut créer une nouvelle clé nommée &#039;&#039;&#039;centos-5-key&#039;&#039;&#039;.&lt;br /&gt;
 sigul new-key --name-real=&#039;CentOS-5-B2PWeb&#039; --name-comment=&#039;CentOS 5 B2PWeb Signing Key&#039; --name-email=&#039;srs@b2pweb.com&#039; --key-admin root centos-5-key&lt;br /&gt;
{{Admon/note|Générer beaucoup d&#039;entropie durant le génération de la clé|La génération de la clé nécessite beaucoup d&#039;entropie sur le serveur Sigul. On peut donc occuper le serveur et paradoxalement accélerer la génération de la clé.&lt;br /&gt;
&lt;br /&gt;
La commande suivant génère assez d&#039;entropie pour 2 minutes:&lt;br /&gt;
&amp;lt;pre&amp;gt;find / &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&amp;lt;/pre&amp;gt;}}&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigul new-key --help&lt;br /&gt;
usage: client.py new-key [options] key&lt;br /&gt;
&lt;br /&gt;
Add a key&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  --key-admin=USER      Initial key administrator&lt;br /&gt;
  --name-real=NAME_REAL&lt;br /&gt;
                        Real name of key subject&lt;br /&gt;
  --name-comment=NAME_COMMENT&lt;br /&gt;
                        A comment about of key subject&lt;br /&gt;
  --name-email=NAME_EMAIL&lt;br /&gt;
                        E-mail of key subject&lt;br /&gt;
  --expire-date=YYYY-MM-DD&lt;br /&gt;
                        Key expiration date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Import d&#039;une clé existante ===&lt;br /&gt;
 sigul import-key &#039;CentOS-5-B2PWeb&#039; ~/.gnupg/secring.gpg&lt;br /&gt;
&lt;br /&gt;
=== Changer le nom de la clé ===&lt;br /&gt;
Changer le nom de la clé &#039;&#039;&#039;centos5&#039;&#039;&#039; en &#039;&#039;&#039;centos-5-key&#039;&#039;&#039;&amp;lt;pre&amp;gt;sigul modify-key --new-name centos-5-key centos5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout d&#039;un utilisateur ===&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un utilisateur administrateur&amp;lt;pre&amp;gt;sigul new-user --admin --with-password didier&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autoriser l&#039;utilisation d&#039;une clé existante à un utilisateur ===&lt;br /&gt;
&amp;lt;pre&amp;gt;sigul grant-key-access centos-5-key didier&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigul grant-key-access --help&lt;br /&gt;
usage: client.py grant-key-access key user&lt;br /&gt;
&lt;br /&gt;
Grant key access to a user&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help  show this help message and exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modifier la phrase de passe ===&lt;br /&gt;
 sigul change-passphrase centos-5-key&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigul change-passphrase --help&lt;br /&gt;
usage: client.py change-passphrase key&lt;br /&gt;
&lt;br /&gt;
Change key passphrase&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help  show this help message and exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|ERROR: I/O error: Unexpected EOF in NSPR|&lt;br /&gt;
* S&#039;assurer que le répertoire des clés existe et a les bons propriétaires et droits ( owner et group: &#039;&#039;&#039;sigul&#039;&#039;&#039; )&amp;lt;br&amp;gt;Ce chemin est déclaré dans le fichier &amp;lt;path&amp;gt;/etc/sigul/server.conf&amp;lt;/path&amp;gt;&amp;lt;pre&amp;gt;gnupg-home: /var/lib/sigul/server/gnupg&amp;lt;/pre&amp;gt;&lt;br /&gt;
* S&#039;assurer qu&#039;il y a suffisamment d&#039;espace disque ( en gros deux fois la taille du plus gros paquet RPM )&lt;br /&gt;
* S&#039;assurer que les daemons sigul_bridge et sigul_server sont démarrés&amp;lt;pre&amp;gt;service sigul_server status &amp;amp;&amp;amp; service sigul_bridge status&amp;lt;/pre&amp;gt;&lt;br /&gt;
* S&#039;assurer que le pont peut se connecter au serveur ( [[Koji/SigulInstall#Firewall| Configure firewall]] )}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|Unknown error on creating key process|&lt;br /&gt;
* Installer le paquet &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt; depuis [ http://people.redhat.com/mitr/rpmsigner/rhel6 ] ou de [ http://infrastructure.stg.fedoraproject.org/repo/builder-rpms/6Server/SRPMS/ ]&lt;br /&gt;
* S&#039;assurer que Sigul est configurer pour utiliser &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt;&amp;lt;pre&amp;gt;sed -i -e &#039;/gnupg_bin/s,^.*$,gnupg_bin = &amp;quot;/usr/bin/gpg1&amp;quot;,&#039; /usr/share/sigul/settings.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
* S&#039;assurer que le paquet &amp;lt;package&amp;gt;python-sqlalchemy&amp;lt;/package&amp;gt; soit installé}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|Certificats client expirés|&lt;br /&gt;
Une fois le certificat client expiré, il faut le désactiver localement&amp;lt;pre&amp;gt;certutil -d ~/.sigul -D -n sigul-client-cert&amp;lt;/pre&amp;gt; et refaire une génération de certificat client.}}&lt;br /&gt;
&lt;br /&gt;
== Interfacer Sigul et koji ==&lt;br /&gt;
&lt;br /&gt;
=== configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; peut être utiliser pour signer un ou de multiples RPMs dans une instance &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;. Une fois le client Sigul correctement configuré, il suffit juste de configurer l&#039;utilisateur Proxy pour Koji. Quand un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; émet une requête de signature pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; se connecte à &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; en tant qu&#039;utilisateur &#039;&#039;&#039;kojiweb&#039;&#039;&#039;. Il faut juste s&#039;assurer que l&#039;utilisateur demandeur a les droits administrateur sur le &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; s&#039;occupe du reste.&lt;br /&gt;
&lt;br /&gt;
La configuration pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; peut être situer n&#039;importe où, du moment que l&#039;utilisateur sigul a droit de lecture. Les certificats pour &#039;&#039;&#039;kojiweb&#039;&#039;&#039; doivent être copiés dans le même chemin que la configuration &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création du répertoire de configuration de &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p ~/.koji&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie de la configuration par défaut du client &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/koji.conf ~/.koji/config&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie des certificats {{class|Kojiweb}} dans celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/pem/kojiweb.pem .koji/client.pem&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/clientca.crt&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/serverca.crt&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarrer le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, le client doit être capable d&#039;obtenir un RPM depuis Koji et de le signer.&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Pour tester l&#039;interfaçage, on va obtenir un RPM depuis &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le signer et le sauvegarder dans le répertoire de travail actuel. c&#039;est juste pour tester la connxion et l&#039;authentification sur &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul sign-rpm -o signed.rpm key_name unsigned.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si la commande précédente fonctionne, un RPM signé est présent dans le répertoire de travail actuel.&lt;br /&gt;
&lt;br /&gt;
On vérifie sa signature&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rpm --checksig signed.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script sigulsign_unsigned.py ==&lt;br /&gt;
&lt;br /&gt;
Le script est à récupérer depuis un depôt releng de Fedora via git (git://git.fedorahosted.org/git/releng) ou directement depuis https://git.fedorahosted.org/cgit/releng/tree/scripts/sigulsign_unsigned.py&lt;br /&gt;
&lt;br /&gt;
Avant de pouvoir utiliser ce script magique qui va signer tous les RPM non-signés (derniers m-v-r) construit dans le Koji, il est nécessaire de modifier quelques variables:&lt;br /&gt;
* Changer l&#039;URL du HUB Koji (2 fois): KOJIHUB&lt;br /&gt;
* Spécifier nos propres fichiers de certificats: SERVERCA, CLIENTCA, CLIENTCERT&lt;br /&gt;
* Ajout de nos clés de signature: KEYS&lt;br /&gt;
{{Admon/warning|Casse de l&#039;ID dans le script sigulsign_unsigned.py|GPG rapporte un ID écrit en majuscule mais dans le script, celui-ci doit être renseigné en minuscule pour que le processus fonctionne.}}&lt;br /&gt;
&lt;br /&gt;
Pour obtenir l&#039;ID de nos clés:&lt;br /&gt;
* exporter de la clé&amp;lt;pre&amp;gt;sigul get-public-key centos-5-key &amp;gt; centos-5-key.asc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* importer dans GPG&amp;lt;pre&amp;gt;gpg --import centos-5-key.asc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Lister nos clé GPG&amp;lt;pre&amp;gt;gpg --list-keys&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/root/.gnupg/pubring.gpg&lt;br /&gt;
------------------------&lt;br /&gt;
pub   1024D/773DF357 2013-08-20&lt;br /&gt;
uid                  CentOS-5-B2PWeb (CentOS 5 B2PWeb Signing Key) &amp;lt;srs@b2pweb.com&amp;gt;&lt;br /&gt;
sub   2048g/EBC96FF2 2013-08-20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
L&#039;ID de notre clé &#039;&#039;&#039;centos-5-key&#039;&#039;&#039; est 773DF357&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
Change koji hostname, certificate files and add B2PWeb signing keys&lt;br /&gt;
diff -u a/sigulsign_unsigned.py b/sigulsign_unsigned.py&lt;br /&gt;
--- a/sigulsign_unsigned.py	2013-08-21 10:05:57.418032284 +0200&lt;br /&gt;
+++ b/sigulsign_unsigned.py	2013-08-21 10:13:11.683976970 +0200&lt;br /&gt;
@@ -38,11 +38,11 @@ rpmdict = {}&lt;br /&gt;
 unsigned = []&lt;br /&gt;
 loglevel = &#039;&#039;&lt;br /&gt;
 passphrase = &#039;&#039;&lt;br /&gt;
-KOJIHUB = &#039;https://koji.fedoraproject.org/kojihub&#039;&lt;br /&gt;
+KOJIHUB = &#039;http://koji.b2pweb.com/kojihub&#039;&lt;br /&gt;
 # Should probably set these from a koji config file&lt;br /&gt;
-SERVERCA = os.path.expanduser(&#039;~/.fedora-server-ca.cert&#039;)&lt;br /&gt;
-CLIENTCA = os.path.expanduser(&#039;~/.fedora-upload-ca.cert&#039;)&lt;br /&gt;
-CLIENTCERT = os.path.expanduser(&#039;~/.fedora.cert&#039;)&lt;br /&gt;
+SERVERCA = os.path.expanduser(&#039;~/.koji/serverca.crt&#039;)&lt;br /&gt;
+CLIENTCA = os.path.expanduser(&#039;~/.koji/clientca.crt&#039;)&lt;br /&gt;
+CLIENTCERT = os.path.expanduser(&#039;~/.koji/client.pem&#039;)&lt;br /&gt;
 # Setup a dict of our key names as sigul knows them to the actual key ID&lt;br /&gt;
 # that koji would use.  We should get this from sigul somehow.&lt;br /&gt;
 KEYS = {&#039;fedora-12-sparc&#039;: {&#039;id&#039;: &#039;b3eb779b&#039;, &#039;v3&#039;: True},&lt;br /&gt;
@@ -67,7 +67,9 @@ KEYS = {&#039;fedora-12-sparc&#039;: {&#039;id&#039;: &#039;b3eb7&lt;br /&gt;
         &#039;fedora-10&#039;: {&#039;id&#039;: &#039;4ebfc273&#039;, &#039;v3&#039;: False},&lt;br /&gt;
         &#039;fedora-10-testing&#039;: {&#039;id&#039;: &#039;0b86274e&#039;, &#039;v3&#039;: False},&lt;br /&gt;
         &#039;epel-6&#039;: {&#039;id&#039;: &#039;0608b895&#039;, &#039;v3&#039;: True},&lt;br /&gt;
-        &#039;epel-5&#039;: {&#039;id&#039;: &#039;217521f6&#039;, &#039;v3&#039;: False}}&lt;br /&gt;
+        &#039;epel-5&#039;: {&#039;id&#039;: &#039;217521f6&#039;, &#039;v3&#039;: False},&lt;br /&gt;
+        &#039;centos-5-key&#039; : {&#039;id&#039;: &#039;773df357&#039;, &#039;v3&#039;: True},&lt;br /&gt;
+        &#039;centos-6-key&#039; : {&#039;id&#039;: &#039;d3f3c56a&#039;, &#039;v3&#039;: True}}&lt;br /&gt;
 &lt;br /&gt;
 def exit(status):&lt;br /&gt;
     &amp;quot;&amp;quot;&amp;quot;End the program using status, report any errors&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
@@ -213,7 +215,7 @@ if not (opts.just_list or opts.just_writ&lt;br /&gt;
 &lt;br /&gt;
 # Reset the KOJIHUB if the target is a secondary arch&lt;br /&gt;
 if opts.arch:&lt;br /&gt;
-    KOJIHUB = &#039;http://%s.koji.fedoraproject.org/kojihub&#039; % opts.arch&lt;br /&gt;
+    KOJIHUB = &#039;http://%s.koji.b2pweb.com/kojihub&#039; % opts.arch&lt;br /&gt;
 # setup the koji session&lt;br /&gt;
 logging.info(&#039;Setting up koji session&#039;)&lt;br /&gt;
 kojisession = koji.ClientSession(KOJIHUB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signature d&#039;un ou plusieurs paquets ===&lt;br /&gt;
&lt;br /&gt;
C&#039;est utile afin de signer des paquets qui ne sont pas les derniers construits (dernier N-V-R)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sigulsign_unsigned.py -v --password=&amp;quot;motdepasse&amp;quot; --inherit centos-6-key &amp;lt;N-V-R&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sigulsign_unsigned.py -v --password=&amp;quot;$(cat /root/.sigul/centos-6-key)&amp;quot; --inherit centos-6-key appliance-tools-007.0-1.el6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=3109</id>
		<title>Koji/SigulInstall</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=3109"/>
		<updated>2015-04-22T07:41:28Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Interfacer Sigul et koji */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vue d&#039;ensemble ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; est une suite logicielle pour un serveur de signature, qui peut signer les RPMs ou de simple ou multiples fichiers. Toutes les clés [[Security/OpenGPG|GPG]] sont stockés uniquement sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul server), et donc aucun utilisateur n&#039;a accès à aucune clé publique ou privée. Toutes les communications avec le serveur passent par le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul bridge) qui agit comme une passerelle entre le client et le serveur. Cela isole le serveur et interdit tout accès extérieur autre que depuis le pont. Le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, une fois configuré, autorise les utilisateurs à signer les RPMs avec les clés créées (ou importées) sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, en envoyant des commandes au pont, qui lui se chargera de transmettre au serveur.&lt;br /&gt;
[[Fichier:SigulArch.svg|441px|centré|vignette|Architecture de Sigul]]&lt;br /&gt;
{{Admon/bug|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; sur les systèmes el6|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; a un bug récurrent&amp;lt;ref&amp;gt;https://bugzilla.redhat.com/show_bug.cgi?format=multiple&amp;amp;id=894019&amp;lt;/ref&amp;gt; sur les systèmes el6 et a besoin de travailler avec le paquet &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt; au lieu du paquet par défaut &amp;lt;package&amp;gt;gnupg2&amp;lt;/package&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut modifier le fichier &amp;lt;path&amp;gt;/usr/share/sigul/settings.py&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gnupg_bin = &amp;quot;/usr/bin/gpg1&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le paquet &amp;lt;package&amp;gt;sigul&amp;lt;/package&amp;gt; du dépôt B2PWeb intègre déjà les modifications pour travailler avec &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Rien de plus simple, on installe via [[RPM/UsingYum|yum]], puis on créé l&#039;arborescence nécessaire aux composants de &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  {{Admon/smiley|:)}}&lt;br /&gt;
&lt;br /&gt;
La création de l&#039;arborescence est rendue nécessaire par le fait d&#039;installer le pont et le serveur sur le même système (chose qui n&#039;est pas recommandée pour des raisons de sécurité)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install sigul&lt;br /&gt;
su - sigul -s /bin/bash -c &#039;mkdir /var/lib/sigul/{bridge,server}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/tip|Modification permanente pour l&#039;utilisateur sigul|Il peut être pratique de fixer le shell pour l&#039;utilisateur sigul afin de simplifier les commandes d&#039;administrations&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# usermod -s /bin/bash sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
De même, on peut fixer définitivement les variables utilisées dans l&#039;installation en ajoutant au fichier &amp;lt;path&amp;gt;~/.bash_profile&amp;lt;/path&amp;gt; de l&#039;utilisateur sigul&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bridge_dir=/var/lib/sigul/bridge&lt;br /&gt;
server_dir=/var/lib/sigul/server&lt;br /&gt;
export bridge_dir&lt;br /&gt;
export server_dir&lt;br /&gt;
&lt;br /&gt;
gpgagent=$(ps aux | grep gpg | grep sigul | grep -v grep | wc -l)&lt;br /&gt;
[ ${gpgagent} -eq 0 ] &amp;amp;&amp;amp; gpg-agent --homedir=/var/lib/sigul/server --daemon --use-standard-socket 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Admon/note|FAS|FAS est le système de compte de Fedora, nous n&#039;avons pas besoin de FAS pour un système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; personnel.}}&lt;br /&gt;
{{Admon/warning|Mot de passe NSS| Il faut impérativement se rappeler tous les mots de passes utilisés ici.}}&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
&lt;br /&gt;
* Le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  doit pouvoir communiquer avec le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44333 )&lt;br /&gt;
* Tous les clients &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; doivent pouvoir communiquer avec le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44334 )&lt;br /&gt;
&lt;br /&gt;
Naturellement, Le pont peut avoir des accès plus restrictifs ( autorisation de quelques adresses IP )&lt;br /&gt;
* Pour le pont&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 44334 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Pour le serveur (une seule adresse autorisée)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -s 192.168.0.148/32 -p tcp -m state --state NEW -m tcp --dport 44333 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du pont ==&lt;br /&gt;
&lt;br /&gt;
Le pont agit en tant que passerelle centrale su système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;. C&#039;est le seul composant qui dialogue avec le serveur, c&#039;est à dire que les commandes clientes pour le serveur vont être envoyées au pont, qui les relayera au serveur, recevra la réponse et la redistribuera au client. Le pont agit en tant que passerelle pour [[Koji]] pour la signature des paquets, le pont dialogue avec le [[Koji/Installation#Pr.C3.A9sentation|Hub Koji]] avec l’authentification d&#039;un utilisateur Proxy, comme Kojiweb. La partie sur la liaison entre &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; est [[Koji/SigulInstall#Configuration_de_Sigul_pour_koji|ici]].&lt;br /&gt;
&lt;br /&gt;
Pour démarrer la mise en place, on doit générer les certificats qui seront utilisés pour authentifier les différent composants du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; entre eux. Le pont sera utilisé comme Autorité de Certification pour les communications internes du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;bridge_dir=/var/lib/sigul/bridge&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$bridge_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération de l&#039;autorité de certification (CA: Certificate Authority) qui sera utilisée par tous les composants &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-ca -s &#039;CN=Sigul CA&#039; -t CT,, -x -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le pont&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le pont est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-bridge-cert -s &#039;CN=koji.b2pweb.com&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le pont en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/bridge.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[bridge]&lt;br /&gt;
bridge-cert-nickname: sigul-bridge-cert&lt;br /&gt;
client-listen-port: 44334&lt;br /&gt;
server-listen-port: 44333&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/bridge&lt;br /&gt;
nss-password: bridgensspasswd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_bridge -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|Le premier message du fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt; doit être&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:41:42,214 DEBUG: Waiting for the client to connect&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_bridge.service&lt;br /&gt;
systemctl enable sigul_bridge.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_bridge start&lt;br /&gt;
chkconfig sigul_bridge on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du serveur ==&lt;br /&gt;
&lt;br /&gt;
Le serveur est complètement isolé du reste du monde. Toutes les communications depuis l&#039;extérieur doivent être interdites, exception faite des communications avec le pont. De même, les communications sortantes doivent être restreintes au pont pour un maximum de sécurité. Il faut s&#039;assurer qu&#039;aucun accès exterieur est possible (même web). Il détient toutes les clés pour signer les RPMs, et donc aucun utilisateur ne doit avoir accès directement aux clés, le serveur est le seul système qui connait les clés.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;server_dir=/var/lib/sigul/server&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$server_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $server_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le serveur est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -S -n sigul-server-cert -s &#039;CN=koji.b2pweb.com&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/bug|Répertoire racine de gnupg|Bien que la configuration de sigul puisse être éditée, &lt;br /&gt;
&amp;lt;pre&amp;gt;_default_storage_path = &#039;/var/lib/sigul/server&#039;&lt;br /&gt;
default_gnupg_home = os.path.join(_default_storage_path, &#039;gnupg&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
il faut quand même rajouter un lien symbolique à la racine du répertoire personnel de sigul.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/lib/sigul&lt;br /&gt;
ln -s /var/lib/sigul/server/gnupg gnupg&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le serveur en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/server.conf&amp;lt;/path&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[server]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44333&lt;br /&gt;
max-file-payload-size: 1073741824&lt;br /&gt;
max-memory-payload-size: 1048576&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
server-cert-nickname: sigul-server-cert&lt;br /&gt;
signing-timeout: 60&lt;br /&gt;
&lt;br /&gt;
[database]&lt;br /&gt;
database-path: /var/lib/sigul/server/server.sqlite&lt;br /&gt;
&lt;br /&gt;
[gnupg]&lt;br /&gt;
gnupg-home: /var/lib/sigul/server/gnupg&lt;br /&gt;
gnupg-key-type: DSA&lt;br /&gt;
gnupg-key-length: 1024&lt;br /&gt;
gnupg-subkey-type: ELG-E&lt;br /&gt;
gnupg-subkey-length: 2048&lt;br /&gt;
gnupg-key-usage: sign&lt;br /&gt;
passphrase-length: 64&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/server&lt;br /&gt;
nss-password: **********&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va maintenant créer la base de données pour que le serveur y stocke les informations à propos des utilisateurs et des clés&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_create_db&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va ajouter l&#039;administrateur initial. Celui-ci doit déjà exister localement sur le système. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_add_admin&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_server.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|You should see the first log message in &amp;lt;path&amp;gt;/var/log/sigul_server.log:&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:36:42,154 DEBUG: Waiting for a request&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_server.service&lt;br /&gt;
systemctl enable sigul_server.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_server start&lt;br /&gt;
chkconfig sigul_server on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du Client ==&lt;br /&gt;
&lt;br /&gt;
Le client doit pouvoir s&#039;authentifier sur le pont avec des certificats pour pouvoir envoyer des commandes à celui-ci.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et modification du propriétaire sur celui-ci&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Edition du fichier &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[client]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44334&lt;br /&gt;
client-cert-nickname: sigul-client-cert&lt;br /&gt;
server-hostname: koji.didier-linux.eu&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: ~/.sigul&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur qui utilisera Sigul ===&lt;br /&gt;
&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;client_dir=~/.sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir $client_dir&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$client_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $client_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le login de l&#039;utilisateur pour le système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -S -n sigul-client-cert -s &#039;CN=root&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier de configuration générale des clients &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt; dans son répertoire personnel &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/sigul/client.conf ~/.sigul/client.conf&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Édition du fichier &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt; pour insérer le mot de passe de l&#039;utilisateur dans la section [nss].&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;nss-password: Your NSS PASS&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
Test avec une commande sigul pour valider le bon fonctionnement de toute la chaine&lt;br /&gt;
 sigul list-users&lt;br /&gt;
&lt;br /&gt;
On peut maintenant utiliser pleinement &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Sigul Client Config Script==&lt;br /&gt;
&lt;br /&gt;
Ce script peut être utilisé pour mettre en place rapidement l’authentification pour un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; quand l’authentification FAS n&#039;est pas utilisée.&lt;br /&gt;
{{Admon/important|L&#039;utilisateur doit déjà être créé sur le serveur|Ce script ne fait que la mise en place des certificats.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #Variables### And initial setup#######&lt;br /&gt;
 mkdir ~/.sigul&lt;br /&gt;
 client_dir=~/.sigul&lt;br /&gt;
 user=$(whoami)  &lt;br /&gt;
 ####################&lt;br /&gt;
 echo&lt;br /&gt;
 ############################Begin Certificate imports&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Setting up NSS Database&amp;quot;&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -N&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Downloading CA Cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 wget http://someurl.com/sigul/sigulca.p12 &amp;lt;-- Substitute with a path or url of your exported .p12&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Importing CA certs&amp;quot;&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 pk12util -d $client_dir -i sigulca.p12&lt;br /&gt;
 certutil -d $client_dir -M -n sigul-ca -t CT,,&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Generating Client cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -S -n sigul-client-cert -s &amp;quot;CN=$user&amp;quot; -c sigul-ca -t u,, -v 120&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 #########End certificate imports########&lt;br /&gt;
 ########################################&lt;br /&gt;
 #########NSS password Saver#############&lt;br /&gt;
 read -p &amp;quot;Would you like to save your nss pass to ~/.sigul/client.conf [y/n]: &amp;quot; nsspasssel&lt;br /&gt;
 #########User Input conditional#########&lt;br /&gt;
 if [ $nsspasssel == &amp;quot;y&amp;quot; -o $nsspasssel == &amp;quot;Y&amp;quot; ]; then&lt;br /&gt;
 echo &amp;quot;Enter your NSS password One more time: &amp;quot;&lt;br /&gt;
 read -s nsspass&lt;br /&gt;
 echo &amp;quot;[nss]&amp;quot; &amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo &amp;quot;nss-password: $nsspass&amp;quot; &amp;gt;&amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 else&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 fi&lt;br /&gt;
 #########################################\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
Utilisation de son [[Koji/SigulUsing|Sigul signing server]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=3108</id>
		<title>Koji/SigulInstall</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=3108"/>
		<updated>2015-04-22T07:39:39Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Opérations sur le client avec l&amp;#039;utilisateur qui utilisera Sigul */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vue d&#039;ensemble ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; est une suite logicielle pour un serveur de signature, qui peut signer les RPMs ou de simple ou multiples fichiers. Toutes les clés [[Security/OpenGPG|GPG]] sont stockés uniquement sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul server), et donc aucun utilisateur n&#039;a accès à aucune clé publique ou privée. Toutes les communications avec le serveur passent par le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul bridge) qui agit comme une passerelle entre le client et le serveur. Cela isole le serveur et interdit tout accès extérieur autre que depuis le pont. Le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, une fois configuré, autorise les utilisateurs à signer les RPMs avec les clés créées (ou importées) sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, en envoyant des commandes au pont, qui lui se chargera de transmettre au serveur.&lt;br /&gt;
[[Fichier:SigulArch.svg|441px|centré|vignette|Architecture de Sigul]]&lt;br /&gt;
{{Admon/bug|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; sur les systèmes el6|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; a un bug récurrent&amp;lt;ref&amp;gt;https://bugzilla.redhat.com/show_bug.cgi?format=multiple&amp;amp;id=894019&amp;lt;/ref&amp;gt; sur les systèmes el6 et a besoin de travailler avec le paquet &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt; au lieu du paquet par défaut &amp;lt;package&amp;gt;gnupg2&amp;lt;/package&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut modifier le fichier &amp;lt;path&amp;gt;/usr/share/sigul/settings.py&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gnupg_bin = &amp;quot;/usr/bin/gpg1&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le paquet &amp;lt;package&amp;gt;sigul&amp;lt;/package&amp;gt; du dépôt B2PWeb intègre déjà les modifications pour travailler avec &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Rien de plus simple, on installe via [[RPM/UsingYum|yum]], puis on créé l&#039;arborescence nécessaire aux composants de &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  {{Admon/smiley|:)}}&lt;br /&gt;
&lt;br /&gt;
La création de l&#039;arborescence est rendue nécessaire par le fait d&#039;installer le pont et le serveur sur le même système (chose qui n&#039;est pas recommandée pour des raisons de sécurité)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install sigul&lt;br /&gt;
su - sigul -s /bin/bash -c &#039;mkdir /var/lib/sigul/{bridge,server}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/tip|Modification permanente pour l&#039;utilisateur sigul|Il peut être pratique de fixer le shell pour l&#039;utilisateur sigul afin de simplifier les commandes d&#039;administrations&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# usermod -s /bin/bash sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
De même, on peut fixer définitivement les variables utilisées dans l&#039;installation en ajoutant au fichier &amp;lt;path&amp;gt;~/.bash_profile&amp;lt;/path&amp;gt; de l&#039;utilisateur sigul&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bridge_dir=/var/lib/sigul/bridge&lt;br /&gt;
server_dir=/var/lib/sigul/server&lt;br /&gt;
export bridge_dir&lt;br /&gt;
export server_dir&lt;br /&gt;
&lt;br /&gt;
gpgagent=$(ps aux | grep gpg | grep sigul | grep -v grep | wc -l)&lt;br /&gt;
[ ${gpgagent} -eq 0 ] &amp;amp;&amp;amp; gpg-agent --homedir=/var/lib/sigul/server --daemon --use-standard-socket 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Admon/note|FAS|FAS est le système de compte de Fedora, nous n&#039;avons pas besoin de FAS pour un système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; personnel.}}&lt;br /&gt;
{{Admon/warning|Mot de passe NSS| Il faut impérativement se rappeler tous les mots de passes utilisés ici.}}&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
&lt;br /&gt;
* Le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  doit pouvoir communiquer avec le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44333 )&lt;br /&gt;
* Tous les clients &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; doivent pouvoir communiquer avec le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44334 )&lt;br /&gt;
&lt;br /&gt;
Naturellement, Le pont peut avoir des accès plus restrictifs ( autorisation de quelques adresses IP )&lt;br /&gt;
* Pour le pont&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 44334 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Pour le serveur (une seule adresse autorisée)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -s 192.168.0.148/32 -p tcp -m state --state NEW -m tcp --dport 44333 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du pont ==&lt;br /&gt;
&lt;br /&gt;
Le pont agit en tant que passerelle centrale su système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;. C&#039;est le seul composant qui dialogue avec le serveur, c&#039;est à dire que les commandes clientes pour le serveur vont être envoyées au pont, qui les relayera au serveur, recevra la réponse et la redistribuera au client. Le pont agit en tant que passerelle pour [[Koji]] pour la signature des paquets, le pont dialogue avec le [[Koji/Installation#Pr.C3.A9sentation|Hub Koji]] avec l’authentification d&#039;un utilisateur Proxy, comme Kojiweb. La partie sur la liaison entre &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; est [[Koji/SigulInstall#Configuration_de_Sigul_pour_koji|ici]].&lt;br /&gt;
&lt;br /&gt;
Pour démarrer la mise en place, on doit générer les certificats qui seront utilisés pour authentifier les différent composants du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; entre eux. Le pont sera utilisé comme Autorité de Certification pour les communications internes du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;bridge_dir=/var/lib/sigul/bridge&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$bridge_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération de l&#039;autorité de certification (CA: Certificate Authority) qui sera utilisée par tous les composants &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-ca -s &#039;CN=Sigul CA&#039; -t CT,, -x -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le pont&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le pont est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-bridge-cert -s &#039;CN=koji.b2pweb.com&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le pont en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/bridge.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[bridge]&lt;br /&gt;
bridge-cert-nickname: sigul-bridge-cert&lt;br /&gt;
client-listen-port: 44334&lt;br /&gt;
server-listen-port: 44333&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/bridge&lt;br /&gt;
nss-password: bridgensspasswd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_bridge -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|Le premier message du fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt; doit être&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:41:42,214 DEBUG: Waiting for the client to connect&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_bridge.service&lt;br /&gt;
systemctl enable sigul_bridge.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_bridge start&lt;br /&gt;
chkconfig sigul_bridge on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du serveur ==&lt;br /&gt;
&lt;br /&gt;
Le serveur est complètement isolé du reste du monde. Toutes les communications depuis l&#039;extérieur doivent être interdites, exception faite des communications avec le pont. De même, les communications sortantes doivent être restreintes au pont pour un maximum de sécurité. Il faut s&#039;assurer qu&#039;aucun accès exterieur est possible (même web). Il détient toutes les clés pour signer les RPMs, et donc aucun utilisateur ne doit avoir accès directement aux clés, le serveur est le seul système qui connait les clés.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;server_dir=/var/lib/sigul/server&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$server_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $server_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le serveur est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -S -n sigul-server-cert -s &#039;CN=koji.b2pweb.com&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/bug|Répertoire racine de gnupg|Bien que la configuration de sigul puisse être éditée, &lt;br /&gt;
&amp;lt;pre&amp;gt;_default_storage_path = &#039;/var/lib/sigul/server&#039;&lt;br /&gt;
default_gnupg_home = os.path.join(_default_storage_path, &#039;gnupg&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
il faut quand même rajouter un lien symbolique à la racine du répertoire personnel de sigul.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/lib/sigul&lt;br /&gt;
ln -s /var/lib/sigul/server/gnupg gnupg&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le serveur en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/server.conf&amp;lt;/path&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[server]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44333&lt;br /&gt;
max-file-payload-size: 1073741824&lt;br /&gt;
max-memory-payload-size: 1048576&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
server-cert-nickname: sigul-server-cert&lt;br /&gt;
signing-timeout: 60&lt;br /&gt;
&lt;br /&gt;
[database]&lt;br /&gt;
database-path: /var/lib/sigul/server/server.sqlite&lt;br /&gt;
&lt;br /&gt;
[gnupg]&lt;br /&gt;
gnupg-home: /var/lib/sigul/server/gnupg&lt;br /&gt;
gnupg-key-type: DSA&lt;br /&gt;
gnupg-key-length: 1024&lt;br /&gt;
gnupg-subkey-type: ELG-E&lt;br /&gt;
gnupg-subkey-length: 2048&lt;br /&gt;
gnupg-key-usage: sign&lt;br /&gt;
passphrase-length: 64&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/server&lt;br /&gt;
nss-password: **********&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va maintenant créer la base de données pour que le serveur y stocke les informations à propos des utilisateurs et des clés&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_create_db&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va ajouter l&#039;administrateur initial. Celui-ci doit déjà exister localement sur le système. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_add_admin&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_server.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|You should see the first log message in &amp;lt;path&amp;gt;/var/log/sigul_server.log:&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:36:42,154 DEBUG: Waiting for a request&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_server.service&lt;br /&gt;
systemctl enable sigul_server.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_server start&lt;br /&gt;
chkconfig sigul_server on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du Client ==&lt;br /&gt;
&lt;br /&gt;
Le client doit pouvoir s&#039;authentifier sur le pont avec des certificats pour pouvoir envoyer des commandes à celui-ci.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et modification du propriétaire sur celui-ci&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Edition du fichier &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[client]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44334&lt;br /&gt;
client-cert-nickname: sigul-client-cert&lt;br /&gt;
server-hostname: koji.didier-linux.eu&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: ~/.sigul&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur qui utilisera Sigul ===&lt;br /&gt;
&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;client_dir=~/.sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir $client_dir&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$client_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $client_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le login de l&#039;utilisateur pour le système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -S -n sigul-client-cert -s &#039;CN=root&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier de configuration générale des clients &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt; dans son répertoire personnel &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/sigul/client.conf ~/.sigul/client.conf&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Édition du fichier &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt; pour insérer le mot de passe de l&#039;utilisateur dans la section [nss].&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;nss-password: Your NSS PASS&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
Test avec une commande sigul pour valider le bon fonctionnement de toute la chaine&lt;br /&gt;
 sigul list-users&lt;br /&gt;
&lt;br /&gt;
On peut maintenant utiliser pleinement &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Interfacer Sigul et koji ==&lt;br /&gt;
&lt;br /&gt;
=== configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; peut être utiliser pour signer un ou de multiples RPMs dans une instance &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;. Une fois le client Sigul correctement configuré, il suffit juste de configurer l&#039;utilisateur Proxy pour Koji. Quand un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; émet une requête de signature pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; se connecte à &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; en tant qu&#039;utilisateur &#039;&#039;&#039;kojiweb&#039;&#039;&#039;. Il faut juste s&#039;assurer que l&#039;utilisateur demandeur a les droits administrateur sur le &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; s&#039;occupe du reste.&lt;br /&gt;
&lt;br /&gt;
La configuration pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; peut être situer n&#039;importe où, du moment que l&#039;utilisateur sigul a droit de lecture. Les certificats pour &#039;&#039;&#039;kojiweb&#039;&#039;&#039; doivent être copiés dans le même chemin que la configuration &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création du répertoire de configuration de &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p ~/.koji&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie de la configuration par défaut du client &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/koji.conf ~/.koji/config&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie des certificats {{class|Kojiweb}} dans celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/pem/kojiweb.pem .koji/client.pem&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/clientca.crt&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/serverca.crt&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarrer le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, le client doit être capable d&#039;obtenir un RPM depuis Koji et de le signer.&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Pour tester l&#039;interfaçage, on va obtenir un RPM depuis &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le signer et le sauvegarder dans le répertoire de travail actuel. c&#039;est juste pour tester la connxion et l&#039;authentification sur &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul sign-rpm -o signed.rpm key_name unsigned.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si la commande précédente fonctionne, un RPM signé est présent dans le répertoire de travail actuel.&lt;br /&gt;
&lt;br /&gt;
On vérifie sa signature&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rpm --checksig signed.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sigul Client Config Script==&lt;br /&gt;
&lt;br /&gt;
Ce script peut être utilisé pour mettre en place rapidement l’authentification pour un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; quand l’authentification FAS n&#039;est pas utilisée.&lt;br /&gt;
{{Admon/important|L&#039;utilisateur doit déjà être créé sur le serveur|Ce script ne fait que la mise en place des certificats.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #Variables### And initial setup#######&lt;br /&gt;
 mkdir ~/.sigul&lt;br /&gt;
 client_dir=~/.sigul&lt;br /&gt;
 user=$(whoami)  &lt;br /&gt;
 ####################&lt;br /&gt;
 echo&lt;br /&gt;
 ############################Begin Certificate imports&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Setting up NSS Database&amp;quot;&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -N&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Downloading CA Cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 wget http://someurl.com/sigul/sigulca.p12 &amp;lt;-- Substitute with a path or url of your exported .p12&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Importing CA certs&amp;quot;&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 pk12util -d $client_dir -i sigulca.p12&lt;br /&gt;
 certutil -d $client_dir -M -n sigul-ca -t CT,,&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Generating Client cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -S -n sigul-client-cert -s &amp;quot;CN=$user&amp;quot; -c sigul-ca -t u,, -v 120&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 #########End certificate imports########&lt;br /&gt;
 ########################################&lt;br /&gt;
 #########NSS password Saver#############&lt;br /&gt;
 read -p &amp;quot;Would you like to save your nss pass to ~/.sigul/client.conf [y/n]: &amp;quot; nsspasssel&lt;br /&gt;
 #########User Input conditional#########&lt;br /&gt;
 if [ $nsspasssel == &amp;quot;y&amp;quot; -o $nsspasssel == &amp;quot;Y&amp;quot; ]; then&lt;br /&gt;
 echo &amp;quot;Enter your NSS password One more time: &amp;quot;&lt;br /&gt;
 read -s nsspass&lt;br /&gt;
 echo &amp;quot;[nss]&amp;quot; &amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo &amp;quot;nss-password: $nsspass&amp;quot; &amp;gt;&amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 else&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 fi&lt;br /&gt;
 #########################################\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
Utilisation de son [[Koji/SigulUsing|Sigul signing server]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=3107</id>
		<title>Koji/SigulInstall</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=3107"/>
		<updated>2015-04-22T07:37:50Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Opérations sur le client avec l&amp;#039;utilisateur root */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vue d&#039;ensemble ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; est une suite logicielle pour un serveur de signature, qui peut signer les RPMs ou de simple ou multiples fichiers. Toutes les clés [[Security/OpenGPG|GPG]] sont stockés uniquement sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul server), et donc aucun utilisateur n&#039;a accès à aucune clé publique ou privée. Toutes les communications avec le serveur passent par le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul bridge) qui agit comme une passerelle entre le client et le serveur. Cela isole le serveur et interdit tout accès extérieur autre que depuis le pont. Le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, une fois configuré, autorise les utilisateurs à signer les RPMs avec les clés créées (ou importées) sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, en envoyant des commandes au pont, qui lui se chargera de transmettre au serveur.&lt;br /&gt;
[[Fichier:SigulArch.svg|441px|centré|vignette|Architecture de Sigul]]&lt;br /&gt;
{{Admon/bug|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; sur les systèmes el6|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; a un bug récurrent&amp;lt;ref&amp;gt;https://bugzilla.redhat.com/show_bug.cgi?format=multiple&amp;amp;id=894019&amp;lt;/ref&amp;gt; sur les systèmes el6 et a besoin de travailler avec le paquet &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt; au lieu du paquet par défaut &amp;lt;package&amp;gt;gnupg2&amp;lt;/package&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut modifier le fichier &amp;lt;path&amp;gt;/usr/share/sigul/settings.py&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gnupg_bin = &amp;quot;/usr/bin/gpg1&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le paquet &amp;lt;package&amp;gt;sigul&amp;lt;/package&amp;gt; du dépôt B2PWeb intègre déjà les modifications pour travailler avec &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Rien de plus simple, on installe via [[RPM/UsingYum|yum]], puis on créé l&#039;arborescence nécessaire aux composants de &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  {{Admon/smiley|:)}}&lt;br /&gt;
&lt;br /&gt;
La création de l&#039;arborescence est rendue nécessaire par le fait d&#039;installer le pont et le serveur sur le même système (chose qui n&#039;est pas recommandée pour des raisons de sécurité)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install sigul&lt;br /&gt;
su - sigul -s /bin/bash -c &#039;mkdir /var/lib/sigul/{bridge,server}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/tip|Modification permanente pour l&#039;utilisateur sigul|Il peut être pratique de fixer le shell pour l&#039;utilisateur sigul afin de simplifier les commandes d&#039;administrations&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# usermod -s /bin/bash sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
De même, on peut fixer définitivement les variables utilisées dans l&#039;installation en ajoutant au fichier &amp;lt;path&amp;gt;~/.bash_profile&amp;lt;/path&amp;gt; de l&#039;utilisateur sigul&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bridge_dir=/var/lib/sigul/bridge&lt;br /&gt;
server_dir=/var/lib/sigul/server&lt;br /&gt;
export bridge_dir&lt;br /&gt;
export server_dir&lt;br /&gt;
&lt;br /&gt;
gpgagent=$(ps aux | grep gpg | grep sigul | grep -v grep | wc -l)&lt;br /&gt;
[ ${gpgagent} -eq 0 ] &amp;amp;&amp;amp; gpg-agent --homedir=/var/lib/sigul/server --daemon --use-standard-socket 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Admon/note|FAS|FAS est le système de compte de Fedora, nous n&#039;avons pas besoin de FAS pour un système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; personnel.}}&lt;br /&gt;
{{Admon/warning|Mot de passe NSS| Il faut impérativement se rappeler tous les mots de passes utilisés ici.}}&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
&lt;br /&gt;
* Le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  doit pouvoir communiquer avec le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44333 )&lt;br /&gt;
* Tous les clients &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; doivent pouvoir communiquer avec le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44334 )&lt;br /&gt;
&lt;br /&gt;
Naturellement, Le pont peut avoir des accès plus restrictifs ( autorisation de quelques adresses IP )&lt;br /&gt;
* Pour le pont&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 44334 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Pour le serveur (une seule adresse autorisée)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -s 192.168.0.148/32 -p tcp -m state --state NEW -m tcp --dport 44333 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du pont ==&lt;br /&gt;
&lt;br /&gt;
Le pont agit en tant que passerelle centrale su système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;. C&#039;est le seul composant qui dialogue avec le serveur, c&#039;est à dire que les commandes clientes pour le serveur vont être envoyées au pont, qui les relayera au serveur, recevra la réponse et la redistribuera au client. Le pont agit en tant que passerelle pour [[Koji]] pour la signature des paquets, le pont dialogue avec le [[Koji/Installation#Pr.C3.A9sentation|Hub Koji]] avec l’authentification d&#039;un utilisateur Proxy, comme Kojiweb. La partie sur la liaison entre &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; est [[Koji/SigulInstall#Configuration_de_Sigul_pour_koji|ici]].&lt;br /&gt;
&lt;br /&gt;
Pour démarrer la mise en place, on doit générer les certificats qui seront utilisés pour authentifier les différent composants du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; entre eux. Le pont sera utilisé comme Autorité de Certification pour les communications internes du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;bridge_dir=/var/lib/sigul/bridge&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$bridge_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération de l&#039;autorité de certification (CA: Certificate Authority) qui sera utilisée par tous les composants &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-ca -s &#039;CN=Sigul CA&#039; -t CT,, -x -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le pont&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le pont est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-bridge-cert -s &#039;CN=koji.b2pweb.com&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le pont en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/bridge.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[bridge]&lt;br /&gt;
bridge-cert-nickname: sigul-bridge-cert&lt;br /&gt;
client-listen-port: 44334&lt;br /&gt;
server-listen-port: 44333&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/bridge&lt;br /&gt;
nss-password: bridgensspasswd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_bridge -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|Le premier message du fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt; doit être&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:41:42,214 DEBUG: Waiting for the client to connect&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_bridge.service&lt;br /&gt;
systemctl enable sigul_bridge.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_bridge start&lt;br /&gt;
chkconfig sigul_bridge on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du serveur ==&lt;br /&gt;
&lt;br /&gt;
Le serveur est complètement isolé du reste du monde. Toutes les communications depuis l&#039;extérieur doivent être interdites, exception faite des communications avec le pont. De même, les communications sortantes doivent être restreintes au pont pour un maximum de sécurité. Il faut s&#039;assurer qu&#039;aucun accès exterieur est possible (même web). Il détient toutes les clés pour signer les RPMs, et donc aucun utilisateur ne doit avoir accès directement aux clés, le serveur est le seul système qui connait les clés.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;server_dir=/var/lib/sigul/server&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$server_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $server_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le serveur est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -S -n sigul-server-cert -s &#039;CN=koji.b2pweb.com&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/bug|Répertoire racine de gnupg|Bien que la configuration de sigul puisse être éditée, &lt;br /&gt;
&amp;lt;pre&amp;gt;_default_storage_path = &#039;/var/lib/sigul/server&#039;&lt;br /&gt;
default_gnupg_home = os.path.join(_default_storage_path, &#039;gnupg&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
il faut quand même rajouter un lien symbolique à la racine du répertoire personnel de sigul.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/lib/sigul&lt;br /&gt;
ln -s /var/lib/sigul/server/gnupg gnupg&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le serveur en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/server.conf&amp;lt;/path&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[server]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44333&lt;br /&gt;
max-file-payload-size: 1073741824&lt;br /&gt;
max-memory-payload-size: 1048576&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
server-cert-nickname: sigul-server-cert&lt;br /&gt;
signing-timeout: 60&lt;br /&gt;
&lt;br /&gt;
[database]&lt;br /&gt;
database-path: /var/lib/sigul/server/server.sqlite&lt;br /&gt;
&lt;br /&gt;
[gnupg]&lt;br /&gt;
gnupg-home: /var/lib/sigul/server/gnupg&lt;br /&gt;
gnupg-key-type: DSA&lt;br /&gt;
gnupg-key-length: 1024&lt;br /&gt;
gnupg-subkey-type: ELG-E&lt;br /&gt;
gnupg-subkey-length: 2048&lt;br /&gt;
gnupg-key-usage: sign&lt;br /&gt;
passphrase-length: 64&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/server&lt;br /&gt;
nss-password: **********&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va maintenant créer la base de données pour que le serveur y stocke les informations à propos des utilisateurs et des clés&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_create_db&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va ajouter l&#039;administrateur initial. Celui-ci doit déjà exister localement sur le système. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_add_admin&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_server.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|You should see the first log message in &amp;lt;path&amp;gt;/var/log/sigul_server.log:&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:36:42,154 DEBUG: Waiting for a request&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_server.service&lt;br /&gt;
systemctl enable sigul_server.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_server start&lt;br /&gt;
chkconfig sigul_server on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du Client ==&lt;br /&gt;
&lt;br /&gt;
Le client doit pouvoir s&#039;authentifier sur le pont avec des certificats pour pouvoir envoyer des commandes à celui-ci.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et modification du propriétaire sur celui-ci&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Edition du fichier &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[client]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44334&lt;br /&gt;
client-cert-nickname: sigul-client-cert&lt;br /&gt;
server-hostname: koji.didier-linux.eu&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: ~/.sigul&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur qui utilisera Sigul ===&lt;br /&gt;
&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;client_dir=~/.sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir $client_dir&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$client_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $client_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le login de l&#039;utilisateur pour le système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -S -n sigul-client-cert -s &#039;CN=didier&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier de configuration générale des clients &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt; dans son répertoire personnel &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/sigul/client.conf ~/.sigul/client.conf&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Édition du fichier &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt; pour insérer le mot de passe de l&#039;utilisateur dans la section [nss].&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;nss-password: Your NSS PASS&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
Test avec une commande sigul pour valider le bon fonctionnement de toute la chaine&lt;br /&gt;
 sigul list-users&lt;br /&gt;
&lt;br /&gt;
On peut maintenant utiliser pleinement &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Interfacer Sigul et koji ==&lt;br /&gt;
&lt;br /&gt;
=== configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; peut être utiliser pour signer un ou de multiples RPMs dans une instance &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;. Une fois le client Sigul correctement configuré, il suffit juste de configurer l&#039;utilisateur Proxy pour Koji. Quand un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; émet une requête de signature pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; se connecte à &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; en tant qu&#039;utilisateur &#039;&#039;&#039;kojiweb&#039;&#039;&#039;. Il faut juste s&#039;assurer que l&#039;utilisateur demandeur a les droits administrateur sur le &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; s&#039;occupe du reste.&lt;br /&gt;
&lt;br /&gt;
La configuration pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; peut être situer n&#039;importe où, du moment que l&#039;utilisateur sigul a droit de lecture. Les certificats pour &#039;&#039;&#039;kojiweb&#039;&#039;&#039; doivent être copiés dans le même chemin que la configuration &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création du répertoire de configuration de &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p ~/.koji&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie de la configuration par défaut du client &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/koji.conf ~/.koji/config&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie des certificats {{class|Kojiweb}} dans celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/pem/kojiweb.pem .koji/client.pem&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/clientca.crt&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/serverca.crt&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarrer le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, le client doit être capable d&#039;obtenir un RPM depuis Koji et de le signer.&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Pour tester l&#039;interfaçage, on va obtenir un RPM depuis &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le signer et le sauvegarder dans le répertoire de travail actuel. c&#039;est juste pour tester la connxion et l&#039;authentification sur &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul sign-rpm -o signed.rpm key_name unsigned.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si la commande précédente fonctionne, un RPM signé est présent dans le répertoire de travail actuel.&lt;br /&gt;
&lt;br /&gt;
On vérifie sa signature&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rpm --checksig signed.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sigul Client Config Script==&lt;br /&gt;
&lt;br /&gt;
Ce script peut être utilisé pour mettre en place rapidement l’authentification pour un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; quand l’authentification FAS n&#039;est pas utilisée.&lt;br /&gt;
{{Admon/important|L&#039;utilisateur doit déjà être créé sur le serveur|Ce script ne fait que la mise en place des certificats.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #Variables### And initial setup#######&lt;br /&gt;
 mkdir ~/.sigul&lt;br /&gt;
 client_dir=~/.sigul&lt;br /&gt;
 user=$(whoami)  &lt;br /&gt;
 ####################&lt;br /&gt;
 echo&lt;br /&gt;
 ############################Begin Certificate imports&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Setting up NSS Database&amp;quot;&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -N&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Downloading CA Cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 wget http://someurl.com/sigul/sigulca.p12 &amp;lt;-- Substitute with a path or url of your exported .p12&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Importing CA certs&amp;quot;&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 pk12util -d $client_dir -i sigulca.p12&lt;br /&gt;
 certutil -d $client_dir -M -n sigul-ca -t CT,,&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Generating Client cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -S -n sigul-client-cert -s &amp;quot;CN=$user&amp;quot; -c sigul-ca -t u,, -v 120&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 #########End certificate imports########&lt;br /&gt;
 ########################################&lt;br /&gt;
 #########NSS password Saver#############&lt;br /&gt;
 read -p &amp;quot;Would you like to save your nss pass to ~/.sigul/client.conf [y/n]: &amp;quot; nsspasssel&lt;br /&gt;
 #########User Input conditional#########&lt;br /&gt;
 if [ $nsspasssel == &amp;quot;y&amp;quot; -o $nsspasssel == &amp;quot;Y&amp;quot; ]; then&lt;br /&gt;
 echo &amp;quot;Enter your NSS password One more time: &amp;quot;&lt;br /&gt;
 read -s nsspass&lt;br /&gt;
 echo &amp;quot;[nss]&amp;quot; &amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo &amp;quot;nss-password: $nsspass&amp;quot; &amp;gt;&amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 else&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 fi&lt;br /&gt;
 #########################################\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
Utilisation de son [[Koji/SigulUsing|Sigul signing server]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=3106</id>
		<title>Koji/SigulInstall</title>
		<link rel="alternate" type="text/html" href="https://wikiold.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=3106"/>
		<updated>2015-04-22T07:37:11Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Opérations avec l&amp;#039;utilisateur root */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vue d&#039;ensemble ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; est une suite logicielle pour un serveur de signature, qui peut signer les RPMs ou de simple ou multiples fichiers. Toutes les clés [[Security/OpenGPG|GPG]] sont stockés uniquement sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul server), et donc aucun utilisateur n&#039;a accès à aucune clé publique ou privée. Toutes les communications avec le serveur passent par le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul bridge) qui agit comme une passerelle entre le client et le serveur. Cela isole le serveur et interdit tout accès extérieur autre que depuis le pont. Le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, une fois configuré, autorise les utilisateurs à signer les RPMs avec les clés créées (ou importées) sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, en envoyant des commandes au pont, qui lui se chargera de transmettre au serveur.&lt;br /&gt;
[[Fichier:SigulArch.svg|441px|centré|vignette|Architecture de Sigul]]&lt;br /&gt;
{{Admon/bug|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; sur les systèmes el6|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; a un bug récurrent&amp;lt;ref&amp;gt;https://bugzilla.redhat.com/show_bug.cgi?format=multiple&amp;amp;id=894019&amp;lt;/ref&amp;gt; sur les systèmes el6 et a besoin de travailler avec le paquet &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt; au lieu du paquet par défaut &amp;lt;package&amp;gt;gnupg2&amp;lt;/package&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut modifier le fichier &amp;lt;path&amp;gt;/usr/share/sigul/settings.py&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gnupg_bin = &amp;quot;/usr/bin/gpg1&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le paquet &amp;lt;package&amp;gt;sigul&amp;lt;/package&amp;gt; du dépôt B2PWeb intègre déjà les modifications pour travailler avec &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Rien de plus simple, on installe via [[RPM/UsingYum|yum]], puis on créé l&#039;arborescence nécessaire aux composants de &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  {{Admon/smiley|:)}}&lt;br /&gt;
&lt;br /&gt;
La création de l&#039;arborescence est rendue nécessaire par le fait d&#039;installer le pont et le serveur sur le même système (chose qui n&#039;est pas recommandée pour des raisons de sécurité)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install sigul&lt;br /&gt;
su - sigul -s /bin/bash -c &#039;mkdir /var/lib/sigul/{bridge,server}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/tip|Modification permanente pour l&#039;utilisateur sigul|Il peut être pratique de fixer le shell pour l&#039;utilisateur sigul afin de simplifier les commandes d&#039;administrations&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# usermod -s /bin/bash sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
De même, on peut fixer définitivement les variables utilisées dans l&#039;installation en ajoutant au fichier &amp;lt;path&amp;gt;~/.bash_profile&amp;lt;/path&amp;gt; de l&#039;utilisateur sigul&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bridge_dir=/var/lib/sigul/bridge&lt;br /&gt;
server_dir=/var/lib/sigul/server&lt;br /&gt;
export bridge_dir&lt;br /&gt;
export server_dir&lt;br /&gt;
&lt;br /&gt;
gpgagent=$(ps aux | grep gpg | grep sigul | grep -v grep | wc -l)&lt;br /&gt;
[ ${gpgagent} -eq 0 ] &amp;amp;&amp;amp; gpg-agent --homedir=/var/lib/sigul/server --daemon --use-standard-socket 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Admon/note|FAS|FAS est le système de compte de Fedora, nous n&#039;avons pas besoin de FAS pour un système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; personnel.}}&lt;br /&gt;
{{Admon/warning|Mot de passe NSS| Il faut impérativement se rappeler tous les mots de passes utilisés ici.}}&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
&lt;br /&gt;
* Le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  doit pouvoir communiquer avec le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44333 )&lt;br /&gt;
* Tous les clients &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; doivent pouvoir communiquer avec le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44334 )&lt;br /&gt;
&lt;br /&gt;
Naturellement, Le pont peut avoir des accès plus restrictifs ( autorisation de quelques adresses IP )&lt;br /&gt;
* Pour le pont&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 44334 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Pour le serveur (une seule adresse autorisée)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -s 192.168.0.148/32 -p tcp -m state --state NEW -m tcp --dport 44333 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du pont ==&lt;br /&gt;
&lt;br /&gt;
Le pont agit en tant que passerelle centrale su système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;. C&#039;est le seul composant qui dialogue avec le serveur, c&#039;est à dire que les commandes clientes pour le serveur vont être envoyées au pont, qui les relayera au serveur, recevra la réponse et la redistribuera au client. Le pont agit en tant que passerelle pour [[Koji]] pour la signature des paquets, le pont dialogue avec le [[Koji/Installation#Pr.C3.A9sentation|Hub Koji]] avec l’authentification d&#039;un utilisateur Proxy, comme Kojiweb. La partie sur la liaison entre &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; est [[Koji/SigulInstall#Configuration_de_Sigul_pour_koji|ici]].&lt;br /&gt;
&lt;br /&gt;
Pour démarrer la mise en place, on doit générer les certificats qui seront utilisés pour authentifier les différent composants du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; entre eux. Le pont sera utilisé comme Autorité de Certification pour les communications internes du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;bridge_dir=/var/lib/sigul/bridge&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$bridge_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération de l&#039;autorité de certification (CA: Certificate Authority) qui sera utilisée par tous les composants &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-ca -s &#039;CN=Sigul CA&#039; -t CT,, -x -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le pont&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le pont est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-bridge-cert -s &#039;CN=koji.b2pweb.com&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le pont en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/bridge.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[bridge]&lt;br /&gt;
bridge-cert-nickname: sigul-bridge-cert&lt;br /&gt;
client-listen-port: 44334&lt;br /&gt;
server-listen-port: 44333&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/bridge&lt;br /&gt;
nss-password: bridgensspasswd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_bridge -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|Le premier message du fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt; doit être&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:41:42,214 DEBUG: Waiting for the client to connect&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_bridge.service&lt;br /&gt;
systemctl enable sigul_bridge.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_bridge start&lt;br /&gt;
chkconfig sigul_bridge on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du serveur ==&lt;br /&gt;
&lt;br /&gt;
Le serveur est complètement isolé du reste du monde. Toutes les communications depuis l&#039;extérieur doivent être interdites, exception faite des communications avec le pont. De même, les communications sortantes doivent être restreintes au pont pour un maximum de sécurité. Il faut s&#039;assurer qu&#039;aucun accès exterieur est possible (même web). Il détient toutes les clés pour signer les RPMs, et donc aucun utilisateur ne doit avoir accès directement aux clés, le serveur est le seul système qui connait les clés.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;server_dir=/var/lib/sigul/server&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$server_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $server_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le serveur est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -S -n sigul-server-cert -s &#039;CN=koji.b2pweb.com&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/bug|Répertoire racine de gnupg|Bien que la configuration de sigul puisse être éditée, &lt;br /&gt;
&amp;lt;pre&amp;gt;_default_storage_path = &#039;/var/lib/sigul/server&#039;&lt;br /&gt;
default_gnupg_home = os.path.join(_default_storage_path, &#039;gnupg&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
il faut quand même rajouter un lien symbolique à la racine du répertoire personnel de sigul.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/lib/sigul&lt;br /&gt;
ln -s /var/lib/sigul/server/gnupg gnupg&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le serveur en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/server.conf&amp;lt;/path&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[server]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44333&lt;br /&gt;
max-file-payload-size: 1073741824&lt;br /&gt;
max-memory-payload-size: 1048576&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
server-cert-nickname: sigul-server-cert&lt;br /&gt;
signing-timeout: 60&lt;br /&gt;
&lt;br /&gt;
[database]&lt;br /&gt;
database-path: /var/lib/sigul/server/server.sqlite&lt;br /&gt;
&lt;br /&gt;
[gnupg]&lt;br /&gt;
gnupg-home: /var/lib/sigul/server/gnupg&lt;br /&gt;
gnupg-key-type: DSA&lt;br /&gt;
gnupg-key-length: 1024&lt;br /&gt;
gnupg-subkey-type: ELG-E&lt;br /&gt;
gnupg-subkey-length: 2048&lt;br /&gt;
gnupg-key-usage: sign&lt;br /&gt;
passphrase-length: 64&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/server&lt;br /&gt;
nss-password: **********&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va maintenant créer la base de données pour que le serveur y stocke les informations à propos des utilisateurs et des clés&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_create_db&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va ajouter l&#039;administrateur initial. Celui-ci doit déjà exister localement sur le système. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_add_admin&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_server.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|You should see the first log message in &amp;lt;path&amp;gt;/var/log/sigul_server.log:&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:36:42,154 DEBUG: Waiting for a request&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_server.service&lt;br /&gt;
systemctl enable sigul_server.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_server start&lt;br /&gt;
chkconfig sigul_server on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du Client ==&lt;br /&gt;
&lt;br /&gt;
Le client doit pouvoir s&#039;authentifier sur le pont avec des certificats pour pouvoir envoyer des commandes à celui-ci.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et modification du propriétaire sur celui-ci&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Edition du fichier &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[client]&lt;br /&gt;
bridge-hostname: koji.b2pweb.com&lt;br /&gt;
bridge-port: 44334&lt;br /&gt;
client-cert-nickname: sigul-client-cert&lt;br /&gt;
server-hostname: koji.b2pweb.com&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: ~/.sigul&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur qui utilisera Sigul ===&lt;br /&gt;
&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;client_dir=~/.sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir $client_dir&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$client_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $client_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le login de l&#039;utilisateur pour le système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -S -n sigul-client-cert -s &#039;CN=didier&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier de configuration générale des clients &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt; dans son répertoire personnel &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/sigul/client.conf ~/.sigul/client.conf&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Édition du fichier &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt; pour insérer le mot de passe de l&#039;utilisateur dans la section [nss].&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;nss-password: Your NSS PASS&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
Test avec une commande sigul pour valider le bon fonctionnement de toute la chaine&lt;br /&gt;
 sigul list-users&lt;br /&gt;
&lt;br /&gt;
On peut maintenant utiliser pleinement &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Interfacer Sigul et koji ==&lt;br /&gt;
&lt;br /&gt;
=== configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; peut être utiliser pour signer un ou de multiples RPMs dans une instance &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;. Une fois le client Sigul correctement configuré, il suffit juste de configurer l&#039;utilisateur Proxy pour Koji. Quand un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; émet une requête de signature pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; se connecte à &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; en tant qu&#039;utilisateur &#039;&#039;&#039;kojiweb&#039;&#039;&#039;. Il faut juste s&#039;assurer que l&#039;utilisateur demandeur a les droits administrateur sur le &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; s&#039;occupe du reste.&lt;br /&gt;
&lt;br /&gt;
La configuration pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; peut être situer n&#039;importe où, du moment que l&#039;utilisateur sigul a droit de lecture. Les certificats pour &#039;&#039;&#039;kojiweb&#039;&#039;&#039; doivent être copiés dans le même chemin que la configuration &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création du répertoire de configuration de &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p ~/.koji&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie de la configuration par défaut du client &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/koji.conf ~/.koji/config&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie des certificats {{class|Kojiweb}} dans celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/pem/kojiweb.pem .koji/client.pem&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/clientca.crt&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/serverca.crt&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarrer le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, le client doit être capable d&#039;obtenir un RPM depuis Koji et de le signer.&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Pour tester l&#039;interfaçage, on va obtenir un RPM depuis &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le signer et le sauvegarder dans le répertoire de travail actuel. c&#039;est juste pour tester la connxion et l&#039;authentification sur &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul sign-rpm -o signed.rpm key_name unsigned.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si la commande précédente fonctionne, un RPM signé est présent dans le répertoire de travail actuel.&lt;br /&gt;
&lt;br /&gt;
On vérifie sa signature&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rpm --checksig signed.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sigul Client Config Script==&lt;br /&gt;
&lt;br /&gt;
Ce script peut être utilisé pour mettre en place rapidement l’authentification pour un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; quand l’authentification FAS n&#039;est pas utilisée.&lt;br /&gt;
{{Admon/important|L&#039;utilisateur doit déjà être créé sur le serveur|Ce script ne fait que la mise en place des certificats.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #Variables### And initial setup#######&lt;br /&gt;
 mkdir ~/.sigul&lt;br /&gt;
 client_dir=~/.sigul&lt;br /&gt;
 user=$(whoami)  &lt;br /&gt;
 ####################&lt;br /&gt;
 echo&lt;br /&gt;
 ############################Begin Certificate imports&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Setting up NSS Database&amp;quot;&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -N&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Downloading CA Cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 wget http://someurl.com/sigul/sigulca.p12 &amp;lt;-- Substitute with a path or url of your exported .p12&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Importing CA certs&amp;quot;&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 pk12util -d $client_dir -i sigulca.p12&lt;br /&gt;
 certutil -d $client_dir -M -n sigul-ca -t CT,,&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Generating Client cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -S -n sigul-client-cert -s &amp;quot;CN=$user&amp;quot; -c sigul-ca -t u,, -v 120&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 #########End certificate imports########&lt;br /&gt;
 ########################################&lt;br /&gt;
 #########NSS password Saver#############&lt;br /&gt;
 read -p &amp;quot;Would you like to save your nss pass to ~/.sigul/client.conf [y/n]: &amp;quot; nsspasssel&lt;br /&gt;
 #########User Input conditional#########&lt;br /&gt;
 if [ $nsspasssel == &amp;quot;y&amp;quot; -o $nsspasssel == &amp;quot;Y&amp;quot; ]; then&lt;br /&gt;
 echo &amp;quot;Enter your NSS password One more time: &amp;quot;&lt;br /&gt;
 read -s nsspass&lt;br /&gt;
 echo &amp;quot;[nss]&amp;quot; &amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo &amp;quot;nss-password: $nsspass&amp;quot; &amp;gt;&amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 else&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 fi&lt;br /&gt;
 #########################################\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
Utilisation de son [[Koji/SigulUsing|Sigul signing server]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
</feed>