Stations de travail en ligne OnWorks Linux et Windows

Logo

Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

10.3.3. Création d'un référentiel de packages pour APT‌


Maintenant que vous disposez d'un package personnalisé, vous pouvez le distribuer via un référentiel de packages APT. Utilisation réprimande pour créer le référentiel souhaité et le remplir. Cet outil est plutôt puissant et sa page de manuel vaut certainement la peine d'être lue.

Un référentiel de packages est généralement hébergé sur un serveur. Pour bien le séparer des autres services s'exécutant sur le serveur, il est préférable de créer un utilisateur dédié à ce service. Dans le compte utilisateur dédié, vous pourrez héberger les fichiers du référentiel ainsi que la clé GnuPG qui servira à signer le référentiel du package :


# apt installer reprepro gnupg

[...]

# adduser --system --group pkgrepo

Ajout de l'utilisateur système 'pkgrepo' (UID 136) ... Ajout du nouveau groupe 'pkgrepo' (GID 142) ...

Ajout du nouvel utilisateur 'pkgrepo' (UID 136) avec le groupe 'pkgrepo'... Création du répertoire personnel '/home/pkgrepo'...

# chown pkgrepo $(tty)

# su - -s /bin/bash pkgrepo

$ gpg --gen-clé

gpg (GnuPG) 2.1.11; Copyright (C) 2016 Free Software Foundation, Inc. Il s'agit d'un logiciel libre : vous êtes libre de le modifier et de le redistribuer.

Il n'y a AUCUNE GARANTIE, dans la mesure permise par la loi.


gpg : répertoire '/home/pkgrepo/.gnupg' créé

gpg : nouveau fichier de configuration '/home/pkgrepo/.gnupg/dirmngr.conf' créé gpg : nouveau fichier de configuration '/home/pkgrepo/.gnupg/gpg.conf' créé gpg : keybox '/home/pkgrepo/.gnupg/ pubring.kbx' créé

Remarque : utilisez « gpg --full-gen-key » pour une boîte de dialogue de génération de clé complète. GnuPG doit créer un identifiant utilisateur pour identifier votre clé.

Vrai nom: Clé de signature de référentiel de sécurité offensive

Adresse de courriel : [email protected]

Vous avez sélectionné cet USER-ID :

"Clé de signature du référentiel de sécurité offensive[email protected]> "

# apt installer reprepro gnupg

[...]

# adduser --system --group pkgrepo

Ajout de l'utilisateur système 'pkgrepo' (UID 136) ... Ajout du nouveau groupe 'pkgrepo' (GID 142) ...

Ajout du nouvel utilisateur 'pkgrepo' (UID 136) avec le groupe 'pkgrepo'... Création du répertoire personnel '/home/pkgrepo'...

# chown pkgrepo $(tty)

# su - -s /bin/bash pkgrepo

$ gpg --gen-clé

gpg (GnuPG) 2.1.11; Copyright (C) 2016 Free Software Foundation, Inc. Il s'agit d'un logiciel libre : vous êtes libre de le modifier et de le redistribuer.

Il n'y a AUCUNE GARANTIE, dans la mesure permise par la loi.


gpg : répertoire '/home/pkgrepo/.gnupg' créé

gpg : nouveau fichier de configuration '/home/pkgrepo/.gnupg/dirmngr.conf' créé gpg : nouveau fichier de configuration '/home/pkgrepo/.gnupg/gpg.conf' créé gpg : keybox '/home/pkgrepo/.gnupg/ pubring.kbx' créé

Remarque : utilisez « gpg --full-gen-key » pour une boîte de dialogue de génération de clé complète. GnuPG doit créer un identifiant utilisateur pour identifier votre clé.

Vrai nom: Clé de signature de référentiel de sécurité offensive

Adresse de courriel : [email protected]

Vous avez sélectionné cet USER-ID :

"Clé de signature du référentiel de sécurité offensive[email protected]> "


Changer de (P)nom, (E)mail, ou (O)kay/(Q)uit ? o

Nous devons générer beaucoup d'octets aléatoires. C'est une bonne idée d'effectuer une autre action (taper sur le clavier, déplacer la souris, utiliser les disques) pendant la génération principale ; cela donne au générateur de nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.

[...]

gpg : /home/pkgrepo/.gnupg/trustdb.gpg : trustdb créé gpg : clé B4EF2D0D marquée comme étant de confiance ultime

gpg : répertoire '/home/pkgrepo/.gnupg/openpgp-revocs.d' créé

gpg : certificat de révocation stocké sous '/home/pkgrepo/.gnupg/openpgp-revocs.d/

F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D.rev’

clé publique et secrète créée et signée.


gpg : vérification de la base de données de confiance

gpg : marginaux nécessaires : 3 complétions nécessaires : 1 modèle de confiance : PGP

gpg : profondeur : 0 valide : 1 signé : 0 confiance : 0-, 0q, 0n, 0m, 0f, 1u pub rsa2048/B4EF2D0D 2016-06-17 [S]

Empreinte digitale de la clé = F8FE 22F7 4F1B 714E 38DA 6181 B27F 74F7 B4EF 2D0D

uid [ultime] Clé de signature du référentiel de sécurité offensive[email protected]> sous rsa2048/38035F38 2016-06-17 []

Changer de (P)nom, (E)mail, ou (O)kay/(Q)uit ? o

Nous devons générer beaucoup d'octets aléatoires. C'est une bonne idée d'effectuer une autre action (taper sur le clavier, déplacer la souris, utiliser les disques) pendant la génération principale ; cela donne au générateur de nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie.

[...]

gpg : /home/pkgrepo/.gnupg/trustdb.gpg : trustdb créé gpg : clé B4EF2D0D marquée comme étant de confiance ultime

gpg : répertoire '/home/pkgrepo/.gnupg/openpgp-revocs.d' créé

gpg : certificat de révocation stocké sous '/home/pkgrepo/.gnupg/openpgp-revocs.d/

F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D.rev’

clé publique et secrète créée et signée.


gpg : vérification de la base de données de confiance

gpg : marginaux nécessaires : 3 complétions nécessaires : 1 modèle de confiance : PGP

gpg : profondeur : 0 valide : 1 signé : 0 confiance : 0-, 0q, 0n, 0m, 0f, 1u pub rsa2048/B4EF2D0D 2016-06-17 [S]

Empreinte digitale de la clé = F8FE 22F7 4F1B 714E 38DA 6181 B27F 74F7 B4EF 2D0D

uid [ultime] Clé de signature du référentiel de sécurité offensive[email protected]> sous rsa2048/38035F38 2016-06-17 []


Notez que lorsque vous êtes invité à saisir une phrase secrète, vous devez saisir une valeur vide (et confirmer que vous ne souhaitez pas protéger votre clé privée) car vous souhaitez pouvoir signer le référentiel de manière non interactive. Notez également que gpg nécessite un accès en écriture au terminal pour pouvoir demander en toute sécurité une phrase secrète : c'est pourquoi vous avez changé la propriété du terminal virtuel (qui appartient à root puisque vous vous êtes initialement connecté en tant qu'utilisateur) avant de démarrer un shell en tant que pkgrepo.

Vous pouvez maintenant commencer à configurer le référentiel. Un répertoire dédié est nécessaire pour réprimande et à l'intérieur de ce répertoire, vous devez créer un conf/distributions fichier documentant les distributions disponibles dans le référentiel de packages :


$ mkdir -p reprepro/conf

$ reprépro de cd

$ cat >conf/distributions <

Origine : Sécurité offensive

Description : Packages internes d'Offsec Architectures : source amd64 i386 Composants : main

SignWith: F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D END

$ mkdir -p reprepro/conf

$ reprépro de cd

$ cat >conf/distributions <

Origine : Sécurité offensive

Description : Packages internes d'Offsec Architectures : source amd64 i386 Composants : main

SignWith: F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D END


Les champs obligatoires sont Nom de code, qui donne le nom de la distribution, Architectures, qui indique quelles architectures seront disponibles dans la distribution (et acceptées en entrée), et Composantes, qui indique les différents composants disponibles dans la distribution (com-

les composants sont une sorte de sous-section de la distribution, qui peut être activée séparément dans le fichier sources.list d'APT). Les Origine ainsi que Description les champs sont purement informatifs et ils sont copiés tels quels dans le Libération fichier. le SignerAvec le champ demande réprimande pour signer le dépôt avec la clé GnuPG dont l'identifiant est répertorié (mettez l'empreinte complète ici pour vous assurer d'utiliser la bonne clé, et pas une autre entrant en collision avec l'identifiant court). Les AussiAccepterPour le réglage n'est pas obligatoire mais permet de traiter .changements fichiers dont le champ Distribution a une valeur répertoriée ici (sans cela, il n'accepterait que le nom de code de la distribution dans ce champ).

Avec cette configuration de base en place, vous pouvez laisser réprimande générer un dépôt vide :


$ exportation reprepro

Exportation des indices...

$ trouver .

.

./db

./db/version

./db/références.db

./db/contents.cache.db

./db/sommes de contrôle.db

./db/paquets.db

./db/release.caches.db

./conf

./conf/distributions

./dist

./dists/offsec-interne

./dists/offsec-internal/Release.gpg

./dists/offsec-internal/Release

./dists/offsec-interne/main

./dists/offsec-interne/main/source

./dists/offsec-internal/main/source/Release

./dists/offsec-internal/main/source/Sources.gz

./dists/offsec-internal/main/binary-amd64

./dists/offsec-internal/main/binary-amd64/Packages

./dists/offsec-internal/main/binary-amd64/Release

./dists/offsec-internal/main/binary-amd64/Packages.gz

./dists/offsec-internal/main/binary-i386

./dists/offsec-internal/main/binary-i386/Packages

./dists/offsec-internal/main/binary-i386/Release

./dists/offsec-internal/main/binary-i386/Packages.gz

./dists/offsec-internal/InRelease

$ exportation reprepro

Exportation des indices...

$ trouver .

.

./db

./db/version

./db/références.db

./db/contents.cache.db

./db/sommes de contrôle.db

./db/paquets.db

./db/release.caches.db

./conf

./conf/distributions

./dist

./dists/offsec-interne

./dists/offsec-internal/Release.gpg

./dists/offsec-internal/Release

./dists/offsec-interne/main

./dists/offsec-interne/main/source

./dists/offsec-internal/main/source/Release

./dists/offsec-internal/main/source/Sources.gz

./dists/offsec-internal/main/binary-amd64

./dists/offsec-internal/main/binary-amd64/Packages

./dists/offsec-internal/main/binary-amd64/Release

./dists/offsec-internal/main/binary-amd64/Packages.gz

./dists/offsec-internal/main/binary-i386

./dists/offsec-internal/main/binary-i386/Packages

./dists/offsec-internal/main/binary-i386/Release

./dists/offsec-internal/main/binary-i386/Packages.gz

./dists/offsec-internal/InRelease


Comme vous pouvez le voir, réprimande créé les méta-informations du référentiel dans un dist sous-répertoire. Il a également initialisé une base de données interne dans un db sous-répertoire.

Il est maintenant temps d'ajouter votre premier package. Tout d'abord, copiez les fichiers générés par la construction du offsec- valeurs par défaut paquet (offsec-defaults_1.0.dsc, offsec-defaults_1.0.tar.xz,

offsec-defaults_1.0_all.deb et offsec-defaults_1.0_amd64.changes) dans /tmp

sur le serveur hébergeant le référentiel de packages et demandez réprimande pour inclure le paquet :


$ reprepro inclut offsec-internal /tmp/offsec-defaults_1.0_amd64.changes

Exportation des indices...

$ trouver la piscine piscine piscine/piscine principale/principale/o

pool/main/o/offsec-defaults

pool/main/o/offsec-defaults/offsec-defaults_1.0.dsc pool/main/o/offsec-defaults/offsec-defaults_1.0.tar.xz pool/main/o/offsec-defaults/offsec-defaults_1.0. XNUMX_all.deb

$ reprepro inclut offsec-internal /tmp/offsec-defaults_1.0_amd64.changes

Exportation des indices...

$ trouver la piscine piscine piscine/piscine principale/principale/o

pool/main/o/offsec-defaults

pool/main/o/offsec-defaults/offsec-defaults_1.0.dsc pool/main/o/offsec-defaults/offsec-defaults_1.0.tar.xz pool/main/o/offsec-defaults/offsec-defaults_1.0. XNUMX_all.deb


Comme vous pouvez le voir, il a ajouté les fichiers dans son propre pool de packages dans un pool sous-répertoire.

Les dist ainsi que pool Les répertoires sont les deux répertoires que vous devez rendre (publiquement) disponibles sur HTTP pour terminer la configuration de votre référentiel APT. Ils contiennent tous les fichiers qu'APT voudra télécharger.

En supposant que vous souhaitiez l'héberger sur un hôte virtuel nommé pkgrepo.offsec.com, vous pouvez créer le fichier de configuration Apache suivant, l'enregistrer dans /etc/apache2/sites-available/pkgrepo. offsec.com.conf, et activez-le avec a2ensite pkgrepo.offsec.com):


Nom du serveur pkgrepo.offsec.com Administrateur du serveur [email protected]


Journal des erreurs /var/log/apache2/pkgrepo.offsec.com-error.log

CustomLog /var/log/apache2/pkgrepo.offsec.com-access.log ”%h %l %u %t \”%r\” %>s %O” DocumentRoot /home/pkgrepo/reprepro

Options Index FollowSymLinks MultiViews Exiger tout accordé

AllowOverride All

Nom du serveur pkgrepo.offsec.com Administrateur du serveur [email protected]


Journal des erreurs /var/log/apache2/pkgrepo.offsec.com-error.log

CustomLog /var/log/apache2/pkgrepo.offsec.com-access.log ”%h %l %u %t \”%r\” %>s %O” DocumentRoot /home/pkgrepo/reprepro

Options Index FollowSymLinks MultiViews Exiger tout accordé

AllowOverride All


Et le correspondant sources.list L'entrée à ajouter sur les machines qui ont besoin de packages de ce référentiel ressemblerait à ceci :


deb http://pkgrepo.offsec.com offsec-interne principal


# Activez la ligne suivante si vous souhaitez également accéder aux packages sources

# deb-src http://pkgrepo.offsec.com offsec-internal principal

deb http://pkgrepo.offsec.com offsec-interne principal


# Activez la ligne suivante si vous souhaitez également accéder aux packages sources

# deb-src http://pkgrepo.offsec.com offsec-internal principal


Votre package est maintenant publié et devrait être disponible pour vos hôtes en réseau.

Bien que cette configuration ait été longue, le « levage des charges lourdes » est maintenant terminé. Vous pouvez démarrer vos machines en réseau via PXE, installer une version personnalisée de Kali Linux sans interaction grâce à une préconfiguration fournie par le réseau, configurer SaltStack pour gérer vos configurations (et contrôler les minions !), créer des packages personnalisés fork et distribuer ces packages via votre propre référentiel de packages. Cela fournit une gestion centralisée et un contrôle au niveau de l'entreprise sur plusieurs installations Kali Linux. En bref, vous pouvez désormais déployer rapidement des systèmes Kali hautement sécurisés préconfigurés pour vos besoins spécifiques et les maintenir synchronisés grâce à l'installation (semi-automatique) de Kali de toutes les mises à jour des packages.


Meilleur système d'exploitation Cloud Computing chez OnWorks :