Générer des articles de contrôle signés
You will find in this page information about the use of the
signcontrol.py script and
its configuration file I wrote for Usenet hierarchy administrators to sign the control articles they send. It can also be used to manage PGP keys: generation, import, export, removal, and revokal. The script works on every platform on which Python and GnuPG are available (Windows, Linux, etc.). You only have to download and install
Python and
GnuPG. Then, edit the
configuration file and modify its few variables to fit your installation. You can finally run the script and enjoy it!
More information can be found in the
Usenet hierarchy administration FAQ.
Afin de gérer correctement une hiérarchie sur Usenet, des articles de contrôle doivent régulièrement être envoyés pour annoncer les créations et suppressions de groupes, ainsi que récapituler la liste officielle et à jour des groupes de la hiérarchie. Le script signcontrol.py que j'ai écrit en Python permet de facilement réaliser cela avec n'importe quel système d'exploitation où Python et GnuPG sont utilisables.
Installation
Téléchargez Python et GnuPG en prenant soin de noter le répertoire d'installation de ce dernier. Puis téléchargez le script signcontrol.py avec son fichier de configuration et éditez ce dernier fichier. Plusieurs variables sont à modifier :
- PROGRAM_GPG doit contenir le chemin jusqu'au programme GnuPG installé. C'est usuellement « C:\Progra~1\GNU\GnuPG\gpg.exe » ou « /usr/bin/gpg » ;
- PGP2_COMPATIBILITY indique si les articles de contrôle doivent être générés dans un format compatible avec l'implémentation MIT PGP 2.6.2 (ou équivalent). Bien que ce format soit désormais obsolète, quelques serveurs ne savent toujours pas traiter des articles de contrôle signés avec un algorithme plus récent et plus sûr. Or les serveurs actuels commencent à refuser de traiter les articles de contrôle signés avec l'algorithme peu sécurisé MD5. Ainsi, si cette variable vaut True, signcontrol.py générera deux articles de contrôle : l'un dans un format compatible avec l'implémentation MIT PGP 2.6.2 (ou équivalent), l'autre dans un format plus récent et plus sûr. Si cette variable vaut False (la valeur par défaut), signcontrol.py générera des articles de contrôle uniquement dans un format plus récent et plus sûr. Si cette variable vaut Only, signcontrol.py générera des articles de contrôle uniquement dans un format compatible avec l'implémentation MIT PGP 2.6.2 (ou équivalent) ;
- ID est l'un des identifiants (UID) de la clef que vous utilisez pour signer les messages de contrôle. Cet identifiant est le contenu complet d'une ligne uid de la clef secrète. Notez que si vous n'avez pas encore de clef, vous pourrez la générer avec le script ;
- MAIL est l'adresse électronique utilisée pour envoyer les articles de contrôle ;
- HOST est la deuxième partie des Message-ID des articles de contrôle que vous générez. Vous pouvez par exemple mettre le nom d'un serveur de news ;
- ADMIN_GROUP doit être un groupe existant de votre hiérarchie (qui sera utilisé pour y envoyer les checkgroups). Si vous en avez un d'administration, vous pouvez le mettre ; sinon, n'importe lequel fait l'affaire ;
- NAME est votre nom. Utilisez uniquement des caractères ASCII (pas d'accents) ou bien encodez ce champ en MIME (par exemple =?ISO-8859-15?Q?Julien_=C9LIE?=) ;
- CHECKGROUPS_SCOPE représente l'étendue de votre hiérarchie. Par exemple « fr » indique la hiérarchie fr.* et « de !de.alt » la hiérarchie de.* privée de la sous-hiérarchie de.alt.* ;
- URL est une ou plusieurs adresses web relatives à votre hiérarchie (page web ou l'URL de la clef publique par exemple). Si vous n'avez pas d'URL particulière à renseigner, laissez la page par défaut. Vous pouvez indiquer plusieurs adresses en les listant sur plusieurs lignes commençant chacune, à l'exception de la première, par une tabulation ;
- NEWGROUP_MESSAGE_MODERATED, NEWGROUP_MESSAGE_UNMODERATED et RMGROUP_MESSAGE contiennent les textes qui apparaîtront dans les corps des articles de contrôle correspondants. Toute occurrence de « $GROUP$ » sera remplacée par le nom du groupe en question. Si vous souhaitez utiliser le guillemet « " » dans un de ces messages, il faut l'échapper de la sorte : « \" » ;
- PRIVATE_HIERARCHY est une variable (True ou False) qui indique le statut de votre hiérarchie. Si elle est privée (c'est-à-dire si elle n'est présente que sur un seul serveur dont l'accès est privé et qu'elle n'est pas propagée à d'autres serveurs sur Usenet), alors la valeur de cette variable doit être True, de sorte que les checkgroups ne soient pas crucipostés dans news.admin.hierarchies ;
- CHECKGROUPS_FILE est le nom du fichier qui contiendra en permanence la liste des groupes (au format checkgroups) de votre hiérarchie. Veillez à ce qu'il soit correctement encodé en UTF-8 s'il contient des caractères non-ASCII ;
- ENCODING est l'encodage utilisé par votre système pour générer les articles de contrôle. La valeur par défaut est « UTF-8 », qui est le charset devant être utilisé selon la Section 4.2 de la RFC 5537. Assurez-vous également de configurer votre terminal en UTF-8 pour la saisie de caractères.
Maintenant que tout est paramétré, vous pouvez lancer le script.
Utilisation
L'interface d'utilisation est normalement très simple et plutôt bien détaillée. Elle permet de générer les articles de contrôle pour la création d'un nouveau groupe ou son changement de statut/description, pour la suppression d'un groupe et pour le récapitulatif de la liste des groupes actuels.
Il vous est aussi possible de gérer vos clefs PGP. Si vous n'en avez actuellement pas, vous pouvez en générer une et l'utiliser immédiatement. Toutes les explications pour cela sont données lors de l'exécution du programme. Lisez bien tout ce qu'il dit !
Si vous avez déjà une clef PGP pour administrer votre hiérarchie Usenet, vous pouvez l'importer dans le programme.
Si vous possédez votre propre serveur de news, vous pouvez envoyer les articles de contrôle générés par le script (avec le serveur INN, la commande « inews -P -h < article.sig » peut par exemple être utilisée à cette fin). Autrement, il vous faudra trouver un serveur de news et voir avec son administrateur les modalités d'injection d'articles de contrôle.
Il est même possible d'appeler le script depuis d'autres scripts. Cela se fait très facilement. Par exemple :
#!/usr/bin/python3
import signcontrol
conf = signcontrol.read_configuration(signcontrol.CONFIGURATION_FILE)
checkgroups = signcontrol.read_checkgroups(conf["CHECKGROUPS_FILE"])
# Si le fichier ne contient que des noms de groupes, leur statut de
# modération et les descriptions seront interactivement demandés.
for groupe in open("liste-de-groupes-pour-ajout"):
signcontrol.generate_newgroup(checkgroups, conf, groupe.rstrip())
# Si le fichier contient aussi les statuts de modération et les
# descriptions de chaque groupe, ces informations seront directement
# utilisées.
for groupe in open("liste-de-groupes-pour-ajout"):
(nom, statut, descr) = groupe.split(' ', 2)
signcontrol.generate_newgroup(
checkgroups, conf, nom, statut, descr.rstrip()
)
# Un exemple de suppression en masse.
for groupe in open("liste-de-groupes-pour-suppression"):
signcontrol.generate_rmgroup(checkgroups, conf, groupe.rstrip())
On peut ainsi générer de manière aisée un grand nombre d'articles de contrôle ! Et si le statut ou la description ne sont pas fournies, le script vous les demandera interactivement. Un sixième argument (optionnel) à generate_newgroup et un quatrième argument (optionnel) à generate_rmgroup peuvent être utilisés pour indiquer un message différent de celui par défaut pour le corps des articles de contrôle générés.
Conseils
Je vous recommande vivement de lire intégralement la FAQ sur l'administration d'une hiérarchie Usenet. Il est notamment conseillé de posséder un site web d'administration sur lequel sont disponibles au moins le checkgroups actuel de votre hiérarchie et votre clef PGP. N'oubliez pas d'annoncer la création de votre hiérarchie sur news.admin.hierarchies !
↑ Retour au haut de cette page