« Koji/SigulUsing » : différence entre les versions

De TartareFR
Aller à la navigation Aller à la recherche
 
(2 versions intermédiaires par le même utilisateur non affichées)
Ligne 90 : Ligne 90 :


{{Admon/faq|ERROR: I/O error: Unexpected EOF in NSPR|
{{Admon/faq|ERROR: I/O error: Unexpected EOF in NSPR|
* S'assurer que le répertoire des clés existe et a les bons propriétaires et droits ( owner et group: '''sigul''' )<br>Ce chemin est déclaré dans le fichier <path>/etc/sigul/server.conf</path><pre>gnupg-home: /var/lib/sigul/server/gnupg</pre>
* S'assurer que le répertoire des clés existe. Ce chemin est déclaré dans le fichier <path>/etc/sigul/server.conf</path><pre>gnupg-home: /var/lib/sigul/server/gnupg</pre>
** Propriétaire: '''sigul'''
** Groupe: '''sigul'''
** Droits: 0700 '''rwx------'''
** Lien symbolique '''/var/lib/sigul/gnupg''' pointant sur <path>/var/lib/sigul/server/gnupg</path>
* S'assurer qu'il y a suffisamment d'espace disque ( en gros deux fois la taille du plus gros paquet RPM )
* S'assurer qu'il y a suffisamment d'espace disque ( en gros deux fois la taille du plus gros paquet RPM )
* S'assurer que les daemons sigul_bridge et sigul_server sont démarrés<pre>service sigul_server status && service sigul_bridge status</pre>
* S'assurer que les daemons sigul_bridge et sigul_server sont démarrés<pre>service sigul_server status && service sigul_bridge status</pre>
* S'assurer que le pont peut se connecter au serveur ( [[Koji/SigulInstall#Firewall| Configure firewall]] )}}
* S'assurer que le pont peut se connecter au serveur ( [[Koji/SigulInstall#Firewall| Configure firewall]] )}}
{{Admon/faq|Error: Unknown error|
Vérifier les journaux du serveur, l'erreur est surement plus explicite
* <pre>/usr/bin/rpmsign: No such file or directory</pre>Il suffit d'installer le paquet <package>rpm-sign</package> qui n'est pas installé par défaut sur centos 7. Un simple <code>yum provides /usr/bin/rpmsign</code> donne le paquet à installer.}}


{{Admon/faq|Unknown error on creating key process|
{{Admon/faq|Unknown error on creating key process|
Ligne 102 : Ligne 110 :
{{Admon/faq|Certificats client expirés|
{{Admon/faq|Certificats client expirés|
Une fois le certificat client expiré, il faut le désactiver localement<pre>certutil -d ~/.sigul -D -n sigul-client-cert</pre> et refaire une génération de certificat client.}}
Une fois le certificat client expiré, il faut le désactiver localement<pre>certutil -d ~/.sigul -D -n sigul-client-cert</pre> et refaire une génération de certificat client.}}
== Interfacer Sigul et koji ==
=== configuration ===
<class>Sigul</class> peut être utiliser pour signer un ou de multiples RPMs dans une instance <class>Koji</class>. Une fois le client Sigul correctement configuré, il suffit juste de configurer l'utilisateur Proxy pour Koji. Quand un client <class>Sigul</class> émet une requête de signature pour <class>Koji</class>, le pont <class>Sigul</class> se connecte à <class>Koji</class> en tant qu'utilisateur '''kojiweb'''. Il faut juste s'assurer que l'utilisateur demandeur a les droits administrateur sur le <class>Koji</class> et <class>Sigul</class> s'occupe du reste.
La configuration pour <class>Koji</class> peut être situer n'importe où, du moment que l'utilisateur sigul a droit de lecture. Les certificats pour '''kojiweb''' doivent être copiés dans le même chemin que la configuration <class>Koji</class>
* Comme toutes '''les commandes de cette partie doivent être lancées par l'utilisateur sigul''', on va donc devenir cet utilisateur<syntaxhighlight lang="bash">su - sigul</syntaxhighlight>
* Création du répertoire de configuration de <class>Koji</class><syntaxhighlight lang="bash">mkdir -p ~/.koji</syntaxhighlight>
* Copie de la configuration par défaut du client <class>Koji</class><syntaxhighlight lang="bash">cp /etc/koji.conf ~/.koji/config</syntaxhighlight>
* Copie des certificats {{class|Kojiweb}} dans celui-ci<syntaxhighlight lang="bash">cp /etc/pki/koji/pem/kojiweb.pem .koji/client.pem</syntaxhighlight><syntaxhighlight lang="bash">cp /etc/pki/koji/kojica.crt .koji/clientca.crt</syntaxhighlight><syntaxhighlight lang="bash">cp /etc/pki/koji/kojica.crt .koji/serverca.crt</syntaxhighlight>
Après avoir redémarrer le pont <class>Sigul</class>, le client doit être capable d'obtenir un RPM depuis Koji et de le signer.
=== Test ===
Pour tester l'interfaçage, on va obtenir un RPM depuis <class>Koji</class>, le signer et le sauvegarder dans le répertoire de travail actuel. c'est juste pour tester la connxion et l'authentification sur <class>Koji</class> et <class>Sigul</class>.
<syntaxhighlight lang="bash">sigul sign-rpm -o signed.rpm key_name unsigned.rpm</syntaxhighlight>
Si la commande précédente fonctionne, un RPM signé est présent dans le répertoire de travail actuel.
On vérifie sa signature
<syntaxhighlight lang="bash">rpm --checksig signed.rpm</syntaxhighlight>


== Script sigulsign_unsigned.py ==
== Script sigulsign_unsigned.py ==

Dernière version du 23 avril 2015 à 08:53

Sigul

après une installation de Sigul, on peut l'utiliser.

Note.png
Commandes disponible
$ sigul --help-commands
delete-key          Delete a key
modify-key-user     Modify user's key access
list-users          List users
grant-key-access    Grant key access to a user
sign-text           Output a cleartext signature of a text
import-key          Import a key
new-user            Add a user
sign-rpm            Sign a RPM
list-keys           List keys
sign-data           Create a detached signature
revoke-key-access   Revoke key acess from a user
user-info           Show information about a user
change-passphrase   Change key passphrase
list-key-users      List users that can access a key
new-key             Add a key
modify-user         Modify a user
sign-rpms           Sign one or more RPMs
modify-key          Modify a key
delete-user         Delete a user
key-user-info       Show information about user's key access
get-public-key      Output public part of the key

Créer une nouvelle clé

Une fois le client Sigul capable d'envoyer des commandes à <class>Sigul</class>, on peut créer une nouvelle clé nommée centos-5-key.

sigul new-key --name-real='CentOS-5-B2PWeb' --name-comment='CentOS 5 B2PWeb Signing Key' --name-email='srs@b2pweb.com' --key-admin root centos-5-key
Note.png
Générer beaucoup d'entropie durant le génération de la clé
La génération de la clé nécessite beaucoup d'entropie sur le serveur Sigul. On peut donc occuper le serveur et paradoxalement accélerer la génération de la clé.

La commande suivant génère assez d'entropie pour 2 minutes:

find / > /dev/null 2>&1
$ sigul new-key --help
usage: client.py new-key [options] key

Add a key

options:
  -h, --help            show this help message and exit
  --key-admin=USER      Initial key administrator
  --name-real=NAME_REAL
                        Real name of key subject
  --name-comment=NAME_COMMENT
                        A comment about of key subject
  --name-email=NAME_EMAIL
                        E-mail of key subject
  --expire-date=YYYY-MM-DD
                        Key expiration date

Import d'une clé existante

sigul import-key 'CentOS-5-B2PWeb' ~/.gnupg/secring.gpg

Changer le nom de la clé

Changer le nom de la clé centos5 en centos-5-key

sigul modify-key --new-name centos-5-key centos5

Ajout d'un utilisateur

  • Ajout d'un utilisateur administrateur
    sigul new-user --admin --with-password didier

Autoriser l'utilisation d'une clé existante à un utilisateur

sigul grant-key-access centos-5-key didier
sigul grant-key-access --help
usage: client.py grant-key-access key user

Grant key access to a user

options:
  -h, --help  show this help message and exit

Modifier la phrase de passe

sigul change-passphrase centos-5-key
sigul change-passphrase --help
usage: client.py change-passphrase key

Change key passphrase

options:
  -h, --help  show this help message and exit

FAQ

FaqQuestion.png
ERROR: I/O error: Unexpected EOF in NSPR
  • S'assurer que le répertoire des clés existe. Ce chemin est déclaré dans le fichier <path>/etc/sigul/server.conf</path>
    gnupg-home: /var/lib/sigul/server/gnupg
    • Propriétaire: sigul
    • Groupe: sigul
    • Droits: 0700 rwx------
    • Lien symbolique /var/lib/sigul/gnupg pointant sur <path>/var/lib/sigul/server/gnupg</path>
  • S'assurer qu'il y a suffisamment d'espace disque ( en gros deux fois la taille du plus gros paquet RPM )
  • S'assurer que les daemons sigul_bridge et sigul_server sont démarrés
    service sigul_server status && service sigul_bridge status
  • S'assurer que le pont peut se connecter au serveur ( Configure firewall )


FaqQuestion.png
Error: Unknown error
Vérifier les journaux du serveur, l'erreur est surement plus explicite
  • /usr/bin/rpmsign: No such file or directory
    Il suffit d'installer le paquet <package>rpm-sign</package> qui n'est pas installé par défaut sur centos 7. Un simple yum provides /usr/bin/rpmsign donne le paquet à installer.


FaqQuestion.png
Unknown error on creating key process


FaqQuestion.png
Certificats client expirés
Une fois le certificat client expiré, il faut le désactiver localement
certutil -d ~/.sigul -D -n sigul-client-cert
et refaire une génération de certificat client.

Interfacer Sigul et koji

configuration

<class>Sigul</class> peut être utiliser pour signer un ou de multiples RPMs dans une instance <class>Koji</class>. Une fois le client Sigul correctement configuré, il suffit juste de configurer l'utilisateur Proxy pour Koji. Quand un client <class>Sigul</class> émet une requête de signature pour <class>Koji</class>, le pont <class>Sigul</class> se connecte à <class>Koji</class> en tant qu'utilisateur kojiweb. Il faut juste s'assurer que l'utilisateur demandeur a les droits administrateur sur le <class>Koji</class> et <class>Sigul</class> s'occupe du reste.

La configuration pour <class>Koji</class> peut être situer n'importe où, du moment que l'utilisateur sigul a droit de lecture. Les certificats pour kojiweb doivent être copiés dans le même chemin que la configuration <class>Koji</class>

  • Comme toutes les commandes de cette partie doivent être lancées par l'utilisateur sigul, on va donc devenir cet utilisateur
    su - sigul
    
  • Création du répertoire de configuration de <class>Koji</class>
    mkdir -p ~/.koji
    
  • Copie de la configuration par défaut du client <class>Koji</class>
    cp /etc/koji.conf ~/.koji/config
    
  • Copie des certificats Kojiweb dans celui-ci
    cp /etc/pki/koji/pem/kojiweb.pem .koji/client.pem
    
    cp /etc/pki/koji/kojica.crt .koji/clientca.crt
    
    cp /etc/pki/koji/kojica.crt .koji/serverca.crt
    

Après avoir redémarrer le pont <class>Sigul</class>, le client doit être capable d'obtenir un RPM depuis Koji et de le signer.

Test

Pour tester l'interfaçage, on va obtenir un RPM depuis <class>Koji</class>, le signer et le sauvegarder dans le répertoire de travail actuel. c'est juste pour tester la connxion et l'authentification sur <class>Koji</class> et <class>Sigul</class>.

sigul sign-rpm -o signed.rpm key_name unsigned.rpm

Si la commande précédente fonctionne, un RPM signé est présent dans le répertoire de travail actuel.

On vérifie sa signature

rpm --checksig signed.rpm

Script sigulsign_unsigned.py

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

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:

  • Changer l'URL du HUB Koji (2 fois): KOJIHUB
  • Spécifier nos propres fichiers de certificats: SERVERCA, CLIENTCA, CLIENTCERT
  • Ajout de nos clés de signature: KEYS
Warning.png
Casse de l'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.

Pour obtenir l'ID de nos clés:

  • exporter de la clé
    sigul get-public-key centos-5-key > centos-5-key.asc
  • importer dans GPG
    gpg --import centos-5-key.asc
  • Lister nos clé GPG
    gpg --list-keys
/root/.gnupg/pubring.gpg
------------------------
pub   1024D/773DF357 2013-08-20
uid                  CentOS-5-B2PWeb (CentOS 5 B2PWeb Signing Key) <srs@b2pweb.com>
sub   2048g/EBC96FF2 2013-08-20

L'ID de notre clé centos-5-key est 773DF357

Change koji hostname, certificate files and add B2PWeb signing keys
diff -u a/sigulsign_unsigned.py b/sigulsign_unsigned.py
--- a/sigulsign_unsigned.py	2013-08-21 10:05:57.418032284 +0200
+++ b/sigulsign_unsigned.py	2013-08-21 10:13:11.683976970 +0200
@@ -38,11 +38,11 @@ rpmdict = {}
 unsigned = []
 loglevel = ''
 passphrase = ''
-KOJIHUB = 'https://koji.fedoraproject.org/kojihub'
+KOJIHUB = 'http://koji.b2pweb.com/kojihub'
 # Should probably set these from a koji config file
-SERVERCA = os.path.expanduser('~/.fedora-server-ca.cert')
-CLIENTCA = os.path.expanduser('~/.fedora-upload-ca.cert')
-CLIENTCERT = os.path.expanduser('~/.fedora.cert')
+SERVERCA = os.path.expanduser('~/.koji/serverca.crt')
+CLIENTCA = os.path.expanduser('~/.koji/clientca.crt')
+CLIENTCERT = os.path.expanduser('~/.koji/client.pem')
 # Setup a dict of our key names as sigul knows them to the actual key ID
 # that koji would use.  We should get this from sigul somehow.
 KEYS = {'fedora-12-sparc': {'id': 'b3eb779b', 'v3': True},
@@ -67,7 +67,9 @@ KEYS = {'fedora-12-sparc': {'id': 'b3eb7
         'fedora-10': {'id': '4ebfc273', 'v3': False},
         'fedora-10-testing': {'id': '0b86274e', 'v3': False},
         'epel-6': {'id': '0608b895', 'v3': True},
-        'epel-5': {'id': '217521f6', 'v3': False}}
+        'epel-5': {'id': '217521f6', 'v3': False},
+        'centos-5-key' : {'id': '773df357', 'v3': True},
+        'centos-6-key' : {'id': 'd3f3c56a', 'v3': True}}
 
 def exit(status):
     """End the program using status, report any errors"""
@@ -213,7 +215,7 @@ if not (opts.just_list or opts.just_writ
 
 # Reset the KOJIHUB if the target is a secondary arch
 if opts.arch:
-    KOJIHUB = 'http://%s.koji.fedoraproject.org/kojihub' % opts.arch
+    KOJIHUB = 'http://%s.koji.b2pweb.com/kojihub' % opts.arch
 # setup the koji session
 logging.info('Setting up koji session')
 kojisession = koji.ClientSession(KOJIHUB)

Signature d'un ou plusieurs paquets

C'est utile afin de signer des paquets qui ne sont pas les derniers construits (dernier N-V-R)

sigulsign_unsigned.py -v --password="motdepasse" --inherit centos-6-key <N-V-R>

exemple:

sigulsign_unsigned.py -v --password="$(cat /root/.sigul/centos-6-key)" --inherit centos-6-key appliance-tools-007.0-1.el6