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

De TartareFR
Aller à la navigation Aller à la recherche
 
Ligne 243 : Ligne 243 :


On peut maintenant utiliser pleinement <class>Sigul</class>.
On peut maintenant utiliser pleinement <class>Sigul</class>.
== 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>


==Sigul Client Config Script==
==Sigul Client Config Script==

Dernière version du 22 avril 2015 à 07:41

Vue d'ensemble

<class>Sigul</class> est une suite logicielle pour un serveur de signature, qui peut signer les RPMs ou de simple ou multiples fichiers. Toutes les clés GPG sont stockés uniquement sur le serveur <class>Sigul</class> (Sigul server), et donc aucun utilisateur n'a accès à aucune clé publique ou privée. Toutes les communications avec le serveur passent par le pont <class>Sigul</class> (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 <class>Sigul</class>, une fois configuré, autorise les utilisateurs à signer les RPMs avec les clés créées (ou importées) sur le serveur <class>Sigul</class>, en envoyant des commandes au pont, qui lui se chargera de transmettre au serveur.

Architecture de Sigul
Bug.png
<class>Sigul</class> sur les systèmes el6
<class>Sigul</class> a un bug récurrent[1] sur les systèmes el6 et a besoin de travailler avec le paquet <package>gnupg1</package> au lieu du paquet par défaut <package>gnupg2</package>.

Il faut modifier le fichier <path>/usr/share/sigul/settings.py</path>

gnupg_bin = "/usr/bin/gpg1"
Le paquet <package>sigul</package> du dépôt B2PWeb intègre déjà les modifications pour travailler avec <package>gnupg1</package>.

Installation

Rien de plus simple, on installe via yum, puis on créé l'arborescence nécessaire aux composants de <class>Sigul</class> Face-smile.png

La création de l'arborescence est rendue nécessaire par le fait d'installer le pont et le serveur sur le même système (chose qui n'est pas recommandée pour des raisons de sécurité)

yum install sigul
su - sigul -s /bin/bash -c 'mkdir /var/lib/sigul/{bridge,server}'
Idea.png
Modification permanente pour l'utilisateur sigul
Il peut être pratique de fixer le shell pour l'utilisateur sigul afin de simplifier les commandes d'administrations
# usermod -s /bin/bash sigul

De même, on peut fixer définitivement les variables utilisées dans l'installation en ajoutant au fichier <path>~/.bash_profile</path> de l'utilisateur sigul

bridge_dir=/var/lib/sigul/bridge
server_dir=/var/lib/sigul/server
export bridge_dir
export server_dir

gpgagent=$(ps aux | grep gpg | grep sigul | grep -v grep | wc -l)
[ ${gpgagent} -eq 0 ] && gpg-agent --homedir=/var/lib/sigul/server --daemon --use-standard-socket 1>/dev/null 2>&1
Note.png
FAS
FAS est le système de compte de Fedora, nous n'avons pas besoin de FAS pour un système <class>Sigul</class> personnel.
Warning.png
Mot de passe NSS
Il faut impérativement se rappeler tous les mots de passes utilisés ici.

Firewall

  • Le pont <class>Sigul</class> doit pouvoir communiquer avec le serveur <class>Sigul</class> ( default: TCP port 44333 )
  • Tous les clients <class>Sigul</class> doivent pouvoir communiquer avec le pont <class>Sigul</class> ( default: TCP port 44334 )

Naturellement, Le pont peut avoir des accès plus restrictifs ( autorisation de quelques adresses IP )

  • Pour le pont
    iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 44334 -j ACCEPT
    
  • Pour le serveur (une seule adresse autorisée)
    iptables -A INPUT -s 192.168.0.148/32 -p tcp -m state --state NEW -m tcp --dport 44333 -j ACCEPT
    

Mise en place du pont

Le pont agit en tant que passerelle centrale su système <class>Sigul</class>. C'est le seul composant qui dialogue avec le serveur, c'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 Hub Koji avec l’authentification d'un utilisateur Proxy, comme Kojiweb. La partie sur la liaison entre <class>Sigul</class> et <class>Koji</class> est ici.

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 <class>Sigul</class> entre eux. Le pont sera utilisé comme Autorité de Certification pour les communications internes du système <class>Sigul</class>.

Opérations avec le compte sigul

  • Comme toutes les commandes de cette partie doivent être lancées par l'utilisateur sigul, on va donc devenir cet utilisateur
    # su - sigul
    
  • Définition du répertoire de destination
    bridge_dir=/var/lib/sigul/bridge
    
  • 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 $bridge_dir
    certutil -d $bridge_dir -N
    
  • Génération de l'autorité de certification (CA: Certificate Authority) qui sera utilisée par tous les composants <class>Sigul</class>
    certutil -d $bridge_dir -S -n sigul-ca -s 'CN=Sigul CA' -t CT,, -x -v 120
    
  • Génération d'un certificat pour le pont
    Le champs CN doit être le nom complet de l'hôte (fqdn) sur lequel le pont est hebergé
    certutil -d $bridge_dir -S -n sigul-bridge-cert -s 'CN=koji.b2pweb.com' -c sigul-ca -t u,, -v 120
    

Opérations avec le compte root

Il est temps de configurer le pont en éditant le fichier <path>/etc/sigul/bridge.conf</path>

[bridge]
bridge-cert-nickname: sigul-bridge-cert
client-listen-port: 44334
server-listen-port: 44333
max-rpms-payload-size: 10737418240

[koji]
koji-config: ~/.koji/config

[daemon]
unix-user: sigul
unix-group: sigul

[nss]
nss-dir: /var/lib/sigul/bridge
nss-password: bridgensspasswd

Test

Lancement en mode debug, les logs se trouvant dans le fichier <path>/var/log/sigul_bridge.log</path>

sigul_bridge -v -v

Vérification du fichier journal et s'il n'y a pas d'erreur, on peut continuer.

Note.png
Le premier message du fichier <path>/var/log/sigul_bridge.log</path> doit être
2011-11-24 16:41:42,214 DEBUG: Waiting for the client to connect

Arrêt du pont sigul CRTL-C

Démarrage

On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.

systemd

systemctl start sigul_bridge.service
systemctl enable sigul_bridge.service

sysVinit

service sigul_bridge start
chkconfig sigul_bridge on

Mise en place du serveur

Le serveur est complètement isolé du reste du monde. Toutes les communications depuis l'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'assurer qu'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.

Opérations préalables sur le pont avec l'utilisateur sigul

  • Export de l'autorité de certification dans le fichier <path>sigulca.p12</path>
    pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca
    
  • Copie du fichier <path>sigulca.p12</path> sur le serveur <class>Sigul</class>
  • Destruction de l'export
    rm -f sigulca.p12
    

Opérations avec l'utilisateur sigul

  • Comme toutes les commandes de cette partie doivent être lancées par l'utilisateur sigul, on va donc devenir cet utilisateur
    # su - sigul
    
  • Définition du répertoire de destination
    server_dir=/var/lib/sigul/server
    
  • 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 $server_dir
    certutil -d $server_dir -N
    
  • Import de l'autorité de certification (CA: Certificate Authority)
    pk12util -d $server_dir -i sigulca.p12
    
    certutil -d $server_dir -M -n sigul-ca -t CT,,
    
  • Génération d'un certificat pour le serveur
    Le champs CN doit être le nom complet de l'hôte (fqdn) sur lequel le serveur est hebergé
    certutil -d $server_dir -S -n sigul-server-cert -s 'CN=koji.b2pweb.com' -c sigul-ca -t u,, -v 120
    
  • Suppression de l'export de l'autorité de certification
    rm -f sigulca.p12
    
Bug.png
Répertoire racine de gnupg
Bien que la configuration de sigul puisse être éditée,
_default_storage_path = '/var/lib/sigul/server'
default_gnupg_home = os.path.join(_default_storage_path, 'gnupg')

il faut quand même rajouter un lien symbolique à la racine du répertoire personnel de sigul.

cd /var/lib/sigul
ln -s /var/lib/sigul/server/gnupg gnupg

Opérations avec l'utilisateur root

Il est temps de configurer le serveur en éditant le fichier <path>/etc/sigul/server.conf</path>.

[server]
bridge-hostname: koji.didier-linux.eu
bridge-port: 44333
max-file-payload-size: 1073741824
max-memory-payload-size: 1048576
max-rpms-payload-size: 10737418240
server-cert-nickname: sigul-server-cert
signing-timeout: 60

[database]
database-path: /var/lib/sigul/server/server.sqlite

[gnupg]
gnupg-home: /var/lib/sigul/server/gnupg
gnupg-key-type: DSA
gnupg-key-length: 1024
gnupg-subkey-type: ELG-E
gnupg-subkey-length: 2048
gnupg-key-usage: sign
passphrase-length: 64

[daemon]
unix-user: sigul
unix-group: sigul

[nss]
nss-dir: /var/lib/sigul/server
nss-password: **********

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

sigul_server_create_db

On va ajouter l'administrateur initial. Celui-ci doit déjà exister localement sur le système.

sigul_server_add_admin

Test

Lancement en mode debug, les logs se trouvant dans le fichier <path>/var/log/sigul_server.log</path>

sigul_server -v -v

Vérification du fichier journal et s'il n'y a pas d'erreur, on peut continuer.

Note.png
You should see the first log message in <path>/var/log/sigul_server.log:</path>
2011-11-24 16:36:42,154 DEBUG: Waiting for a request

Arrêt du pont sigul CRTL-C

Démarrage

On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.

systemd

systemctl start sigul_server.service
systemctl enable sigul_server.service

sysVinit

service sigul_server start
chkconfig sigul_server on

Mise en place du Client

Le client doit pouvoir s'authentifier sur le pont avec des certificats pour pouvoir envoyer des commandes à celui-ci.

Opérations préalables sur le pont avec l'utilisateur sigul

  • Export de l'autorité de certification dans le fichier <path>sigulca.p12</path>
    pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca
    
  • Copie du fichier <path>sigulca.p12</path> sur le client <class>Sigul</class> et modification du propriétaire sur celui-ci
  • Destruction de l'export
    rm -f sigulca.p12
    

Opérations sur le client avec l'utilisateur root

Edition du fichier <path>/etc/sigul/client.conf</path>

[client]
bridge-hostname: koji.didier-linux.eu
bridge-port: 44334
client-cert-nickname: sigul-client-cert
server-hostname: koji.didier-linux.eu

[koji]
koji-config: ~/.koji/config

[nss]
nss-dir: ~/.sigul

Opérations sur le client avec l'utilisateur qui utilisera Sigul

  • Définition du répertoire de destination
    client_dir=~/.sigul
    
  • Création de celui-ci
    mkdir $client_dir
    
  • 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 $client_dir
    certutil -d $client_dir -N
    
  • Import de l'autorité de certification (CA: Certificate Authority)
    pk12util -d $client_dir -i sigulca.p12
    
    certutil -d $client_dir -M -n sigul-ca -t CT,,
    
  • Génération d'un certificat pour le serveur
    Le champs CN doit être le login de l'utilisateur pour le système <class>Sigul</class>
    certutil -d $client_dir -S -n sigul-client-cert -s 'CN=root' -c sigul-ca -t u,, -v 120
    
  • Suppression de l'export de l'autorité de certification
    rm -f sigulca.p12
    
  • Copie du fichier de configuration générale des clients <path>/etc/sigul/client.conf</path> dans son répertoire personnel <path>~/.sigul/client.conf</path>
    cp /etc/sigul/client.conf ~/.sigul/client.conf
    
  • Édition du fichier <path>~/.sigul/client.conf</path> pour insérer le mot de passe de l'utilisateur dans la section [nss].
    nss-password: Your NSS PASS
    

Test

Test avec une commande sigul pour valider le bon fonctionnement de toute la chaine

sigul list-users

On peut maintenant utiliser pleinement <class>Sigul</class>.

Sigul Client Config Script

Ce script peut être utilisé pour mettre en place rapidement l’authentification pour un client <class>Sigul</class> quand l’authentification FAS n'est pas utilisée.

Important.png
L'utilisateur doit déjà être créé sur le serveur
Ce script ne fait que la mise en place des certificats.
 #!/bin/bash
 #Variables### And initial setup#######
 mkdir ~/.sigul
 client_dir=~/.sigul
 user=$(whoami)  
 ####################
 echo
 ############################Begin Certificate imports
 echo "======================="
 echo "Setting up NSS Database"
 echo "======================="
 certutil -d $client_dir -N
 echo
 echo "==================="
 echo "Downloading CA Cert"
 echo "==================="
 wget http://someurl.com/sigul/sigulca.p12 <-- Substitute with a path or url of your exported .p12
 echo
 echo "=================="
 echo "Importing CA certs"
 echo "=================="
 pk12util -d $client_dir -i sigulca.p12
 certutil -d $client_dir -M -n sigul-ca -t CT,,
 echo
 echo "======================"
 echo "Generating Client cert"
 echo "======================"
 certutil -d $client_dir -S -n sigul-client-cert -s "CN=$user" -c sigul-ca -t u,, -v 120
 echo
 echo "======================"
 #########End certificate imports########
 ########################################
 #########NSS password Saver#############
 read -p "Would you like to save your nss pass to ~/.sigul/client.conf [y/n]: " nsspasssel
 #########User Input conditional#########
 if [ $nsspasssel == "y" -o $nsspasssel == "Y" ]; then
 echo "Enter your NSS password One more time: "
 read -s nsspass
 echo "[nss]" > ~/.sigul/client.conf
 echo "nss-password: $nsspass" >> ~/.sigul/client.conf
 echo
 echo "==========="
 echo "Cleaning up"
 echo "==========="
 rm sigulca.p12
 else
 echo
 echo "==========="
 echo "Cleaning up"
 echo "==========="
 rm sigulca.p12
 fi
 #########################################\

Utilisation

Utilisation de son Sigul signing server

Références