« Koji/SigulUsing » : différence entre les versions
(→FAQ) |
|||
| (8 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
= | == Sigul == | ||
après une [[Koji/SigulInstall|installation de Sigul]], on peut l'utiliser. | |||
{{Admon/note|Commandes disponible|<pre>$ 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 | |||
</pre> | |||
}} | |||
= | === Créer une nouvelle clé === | ||
== | |||
Sigul | 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 | |||
{{Admon/note|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é. | |||
<pre> | La commande suivant génère assez d'entropie pour 2 minutes: | ||
<pre>find / > /dev/null 2>&1</pre>}}<pre> | |||
$ sigul new-key --help | $ sigul new-key --help | ||
usage: client.py new-key [options] key | usage: client.py new-key [options] key | ||
| Ligne 23 : | Ligne 51 : | ||
--expire-date=YYYY-MM-DD | --expire-date=YYYY-MM-DD | ||
Key expiration date | Key expiration date | ||
</pre> | |||
=== 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'''<pre>sigul modify-key --new-name centos-5-key centos5</pre> | |||
=== Ajout d'un utilisateur === | |||
* Ajout d'un utilisateur administrateur<pre>sigul new-user --admin --with-password didier</pre> | |||
=== Autoriser l'utilisation d'une clé existante à un utilisateur === | |||
<pre>sigul grant-key-access centos-5-key didier</pre> | |||
<pre> | |||
sigul grant-key-access --help | |||
usage: client.py grant-key-access key user | usage: client.py grant-key-access key user | ||
| Ligne 31 : | Ligne 73 : | ||
options: | options: | ||
-h, --help show this help message and exit | -h, --help show this help message and exit | ||
</pre> | |||
=== Modifier la phrase de passe === | |||
sigul change-passphrase centos-5-key | |||
<pre> | |||
sigul change-passphrase --help | |||
usage: client.py change-passphrase key | usage: client.py change-passphrase key | ||
| Ligne 41 : | Ligne 87 : | ||
</pre> | </pre> | ||
=== FAQ === | |||
{{Admon/faq|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><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 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]] )}} | |||
<pre> | {{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| | |||
* Installer le paquet <package>gnupg1</package> depuis [ http://people.redhat.com/mitr/rpmsigner/rhel6 ] ou de [ http://infrastructure.stg.fedoraproject.org/repo/builder-rpms/6Server/SRPMS/ ] | |||
* S'assurer que Sigul est configurer pour utiliser <package>gnupg1</package><pre>sed -i -e '/gnupg_bin/s,^.*$,gnupg_bin = "/usr/bin/gpg1",' /usr/share/sigul/settings.py</pre> | |||
* S'assurer que le paquet <package>python-sqlalchemy</package> soit installé}} | |||
<pre> | {{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.}} | |||
</pre> | |||
== 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 == | |||
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: | |||
Koji | * 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 | |||
{{Admon/warning|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é<pre>sigul get-public-key centos-5-key > centos-5-key.asc</pre> | |||
* importer dans GPG<pre>gpg --import centos-5-key.asc</pre> | |||
* Lister nos clé GPG<pre>gpg --list-keys</pre> | |||
<pre> | <pre> | ||
diff - | /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 | ||
</pre> | |||
L'ID de notre clé '''centos-5-key''' est 773DF357 | |||
<syntaxhighlight lang="diff"> | |||
+ | 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) | |||
</syntaxhighlight> | |||
= | |||
=== 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) | ||
<syntaxhighlight lang="bash"> | |||
sigulsign_unsigned.py -v --password="motdepasse" --inherit centos-6-key <N-V-R> | |||
</syntaxhighlight> | |||
exemple: | |||
<syntaxhighlight lang="bash"> | |||
sigulsign_unsigned.py -v --password="$(cat /root/.sigul/centos-6-key)" --inherit centos-6-key appliance-tools-007.0-1.el6 | |||
</syntaxhighlight> | |||
Dernière version du 23 avril 2015 à 08:53
Sigul
après une installation de Sigul, on peut l'utiliser.
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
$ 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
- 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 )
/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 simpleyum provides /usr/bin/rpmsigndonne le paquet à installer.
- Installer le paquet <package>gnupg1</package> depuis [ http://people.redhat.com/mitr/rpmsigner/rhel6 ] ou de [ http://infrastructure.stg.fedoraproject.org/repo/builder-rpms/6Server/SRPMS/ ]
- S'assurer que Sigul est configurer pour utiliser <package>gnupg1</package>
sed -i -e '/gnupg_bin/s,^.*$,gnupg_bin = "/usr/bin/gpg1",' /usr/share/sigul/settings.py
- S'assurer que le paquet <package>python-sqlalchemy</package> soit installé
certutil -d ~/.sigul -D -n sigul-client-certet 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
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