Apt : ajout correct d'une clé GPG

En fait ce répertoire est pour ceux qui sont « dignes de confiances » !
C’est à dire qu’ils fournissent correctement leurs clés… donc, à-priori, au-travers des dépôts officiels.

Il semble que pour les autres la recommandation soit l’utilisation du répertoire /usr/share/keyrings, dixit la page DebianRepository/UseThirdParty - Debian Wiki (en anglais)

À noter aussi que les clés « dignes de confiance » sont aussi déposés dans ce répertoire.


Tiens, voici un projet qui restitue des informations « à-jour » :


⇒ Par exemple, pour le projet « Element » :

Types: deb
URIs: https://packages.riot.im/debian/
Suites: default
Architectures: amd64
Components: main
Signed-By: /usr/local/share/keyrings/element.gpg

PS : le premier post est basculé en mode wiki !

1 J'aime
echo "deb [signed-by=/usr/share/keyrings/riot-im-archive-keyring.gpg] https://packages.riot.im/debian/ default main" | sudo tee /etc/apt/sources.list.d/riot-im.list

Mettre la référence de la clé dans le fichier sources.list c’est vraiment la ceinture et les bretelles :rofl:

Ça fonctionne ce truc ?

Oui !
(mais tu n’es pas obligé de le mettre, ça fonctionne aussi sans ; j’ai testé les deux)

Voici ce qui est écrit dans le man sources.list :

Signed-By (signed-by) est une option pour demander la vérification d’un dépot par apt-secure(8) avec un certain jeu de clés plutôt qu’avec la totalité des clés de confiance
configurées par apt. Elle est définie comme une liste de chemins absolus vers des fichiers de trousseau de clés (qui doivent être accessibles en lecture pour l’utilisateur
_apt, et donc, il faut s’assurer que tout le monde a le droit de lecture sur le fichier) et des empreintes de clés à sélectionner dans ces trousseaux. Si aucun fichier de
clés n’est défini, le trousseau trusted.gpg et tous les trousseaux du répertoire trusted.gpg.d/ sont sélectionnés par défaut (voir apt-key fingerprint). Si aucune empreinte
n’est définie, toutes les clés des trousseaux sont sélectionnées. Une empreinte acceptera aussi toutes les signatures de sous clés de cette clé, et si ce n’est pas désiré, un
point d’exclamation (!) peut être ajouté à l’empreinte pour désactiver ce comportement. Elle possède la valeur par défaut de l’option du même nom si elle a été définie dans
le fichier Release de ce dépôt récupéré auparavant (seules des empreintes peuvent être définies par ce biais). Autrement, toutes les clés des trousseaux de confiance sont
considérées comme des signatures valables pour ce dépôt.

Donc, c’est la manière de lui dire d’aller chercher à tel endroit la signature, plutôt que d’aller la chercher dans le répertoire de signatures de confiances, tel trusted.gpg(.d) :wink:

Attention, cela ne fait que de s’assurer de la signature, soit la correspondance du dépôt avec la clé GPG, mais ne la définit pas comme étant sûre et digne de confiance ; un peu comme quand tu utilises gpg avec le mode signed, où tu émets à l’autre que ton message est « signé » par ta clé, donc qu’il vient normalement bien de toi…


Oh, tu peux te moquer… et faire comme tu veux. Là, je « construis »/restitue les informations de la manière la plus recommandée ; après il est toujours possible de moduler.

En effet la vraie question c’est quel sens on donne au mot confiance

Celui utilisé dans le contexte de sécurité, tout comme pour GPG. Tu sais très bien que la confiance est très relative.

Exemple :
⇒ si c’est dans les dépôts officiels, on peut estimer à juste titre avoir confiance car cela a du être « analysé » par une équipe Debian ou l’autre, s’il y a un risque ou quelque chose qui cloche, l’équipe fait le nécessaire pour que le tir soit rectifié, jusqu’à refuser l’inclusion du projet… ;
⇒ en dehors de ça, c’est la « confiance » personnelle que tu offres au projet X, Y, Z, sachant qu’il y a toujours un risque ; personnellement, je n’ai pas ou prou confiance en des projets tiers, d’autant si en plus les informations affichées sont incorrectes, pas mises-à-jour, etc

si je me souviens bien le manpage apt-secure en parle assez bien…

Un peu de lecture :

Et aussi cet article bien fait :

Et il est préférable de mettre les clés dans /usr/local/share pour respecter la FSH.

1 J'aime

???


Quand je lis dans le premier lien, sudoedit pour éditer les sources apt… suis un peu sceptique.
Y’a quand même l’option native à apt. Soit.

Oui, l’intérêt étant de déclarer qu’une clé donnée n’est considérée comme « de confiance » que pour un dépôt donné. Comme souvent, c’est beaucoup moins moche si on utilise des fichiers .sources au format deb822 :

Types: deb
URIs: http://www.bchemnet.com/suldr
Suites: debian
Architectures: amd64
Components: extra
Signed-By: /etc/apt/trusted.gpg.d/suldr-keyring.gpg

(bon, ici c’est un mauvais exemple parce que la clé est dans un répertoire où elle est déjà considérée globablement comme valide pour tout dépôt, mais c’est l’exemple que j’avais sous la main sur cette machine)


Sur le sujet de /usr/share/keyrings, je ne suis pas d’accord avec la doc du wiki Debian (qui mérite probablement d’être corrigé).

/usr/share est censé être le territoire exclusif de dpkg, on ne devrait pas avoir à y ajouter/modifier des fichiers à la main. Pour ce genre d’utilisation, je privilégierais sans hésitation /usr/local/share/keyrings.

Sans la typo, ça donne FHS :wink:

3 J'aime

Quelque soit l’endroit où on pose sa clé…

A bon entendeur…

Tu es le deuxième ici à référer à cette idée.
Je n’ai aucun soucis avec… si ce n’est que par défaut ce répertoire semble ne pas exister ; il faut donc le créer.
Je peux rajouter l’instruction correspondante et modifier le premier post.

Dans ce cas-là, pourquoi ne pas créer un répertoire ~/keyrings et l’utiliser, ce qui serait moins contraignant pour l’utilisateur !?


le second lien que fournit @anon70622873 semble vouloir dire que :

  • l’usage de /usr/share/keyrings n’est qu’un effet de mode publicitaire,
  • c’est quand même la meilleure approche pour ceux qui fournissent des .deb et qui ont leur propre dépôt
  • qu’il n’y a pas de gain réel à utiliser l’option signed-by.

Si je comprends bien, le mieux serait de fournir un fichier au format deb822 que tu n’as plus qu’à placer dans le répertoire sources.list.d ; à bon entendeur - pour reprendre l’expression ci-dessus…
Un nom-projet.sources suffirait ?!


Ce qui est sûr, c’est que le manpage d’apt-key nous dit clairement qu’après Debian 11, byebye !

apt-key(8) will last be available in Debian 11 and Ubuntu 22.04.

De même, je ne vois aucune mention d’un répertoire à privilégier… sauf dans le man d’apt-key, dont toutes les déclarations sont obsolètes - et donc amener à disparaître.


Ce qui me semble pertinent est que si nous ne voulons pas utiliser, par convention, le répertoire /usr/share/keyrings mais plutôt /usr/local/share/keyrings voire $HOME/keyrings, si l’option signed-by n’est pas utilisé, comment l’outil apt pourrait s’y référer, puisque ce sont des répertoires hors analyse ! ?
(en effet, je rappelle ici la lecture du man sources.list qui explique que par défaut, seuls trusted.gpg{.d} sont sélectionnés pour « lecture »)

Pour remettre 1 € dans le nourin , la commande gpg utilise ses trousseaux dans ~/.gnupg pour un utilisateur lamba ou /root/.gnupg pour l’utilsateur root

ce qui fait que l’utilisation par exemple de la commande

 gpg --keyserver pgpkeys.mit.edu --recv-key D1742AD60D811D58

rempli des trousseaux à l’insu du plein gré de l’utilisateur. Lister par la commande

gpg --list-keys

Donc pour avoir une clé valide pour apt j’utilise mes 3 commandes en passant par /tmp
Exemple pour Spotify:

  • Récupérer la clé du site
wget -O /tmp/0D811D58.gpg https://download.spotify.com/debian/pubkey_0D811D58.gpg
  • Convertir dans un trousseau temporaire
gpg --no-default-keyring --keyring /tmp/spotify-keyring.gpg --import /tmp/0D811D58.gpg
  • Créer une clé valide pour apt
gpg --no-default-keyring --keyring /tmp/spotify-keyring.gpg --export --output /etc/apt/trusted.gpg.d/spotify.gpg
  • Vérification
apt-key list

/etc/apt/trusted.gpg.d/spotify.gpg

----------------------------------

pub rsa4096 2020-09-08 [SC] [expire : 2021-12-02]

8FD3 D9A8 D380 0305 A9FF F259 D174 2AD6 0D81 1D58

uid [ inconnue] Spotify Public Repository Signing Key <[tux@spotify.com](mailto:tux@spotify.com)>*

type de fichier

/etc/apt/trusted.gpg.d$ file spotify.gpg

spotify.gpg: PGP/GPG key public ring (v4) created Tue Sep 8 13:35:47 2020 RSA (Encrypt or Sign) 4096 bits MPI=0xd0ff0bba75deda92…

Car pour moi il s’agit d’utiliser le dépôt spotify pour utiliser spotify

apt policy spotify-client
spotify-client:
  Installé : 1:1.1.55.498.gf9a83c60
  Candidat : 1:1.1.55.498.gf9a83c60
 Table de version :
 *** 1:1.1.55.498.gf9a83c60 500
        500 http://repository.spotify.com stable/non-free amd64 Packages
        100 /var/lib/dpkg/status

Non, pour root, c’est aussi ~/.gnupg. C’est /root/.gnupg seulement si le home de root est /root (ce qui est le cas la majorité du temps).
Sinon, si tu n’es pas root, tu as le chemin avec ~root/.gnupg.

AMHA, les clés GPG des dépôts tiers n’ont rien à faire dans $HOME. $HOME ne doit contenir que les éléments de configuration propres à l’utilisateur.
Elles doivent être soit dans un dossier sous /usr/local/share (/keyrings ou /apt-keys ou ce que vous voulez) et référencées par signed-by (sinon cela ne fonctionne pas), soit directement dans le fichier truc.sources (solution idéale). Et l’usage du dépôt tiers doit être limité avec un fichier de configuration (apt pinning).
Le problème de avec les clés dans/etc/apt/trusted.gpg.d/, c’est qu’elles sont valables pour tous les dépôts comme expliqué dans les liens données et le Wiki Debian.
Les fournisseurs de dépôts tiers devraient donc idéalement fournir un fichiers truc.sources contenant la clé GPG et un fichier de préférences.

2 J'aime

Un vrai travail de bénédictin


Err :7 https://cdn-aws.deb.debian.org/debian bookworm InRelease
  Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 648ACFD622F3D138 NO_PUBKEY 0E98404D386FA1D9
Err :8 https://cdn-aws.deb.debian.org/debian sid InRelease
  Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 648ACFD622F3D138 NO_PUBKEY 0E98404D386FA1D9

c’est la clé de bullseye

gpg --keyserver pgpkeys.mit.edu --search-keys 0E98404D386FA1D9
gpg: data source: http://pgpkeys.mit.edu:11371
(1)	Debian Archive Automatic Signing Key (11/bullseye) <ftpmaster@debian.o
	  4096 bit RSA key 73A4F27B8DD47936, créé : 2021-01-17, expire : 2029-01-15
Keys 1-1 of 1 for "0E98404D386FA1D9".  Entrez le ou les nombres, (S)uivant, ou (Q)uitter > Q

/etc/apt/sources.list:deb [signed-by=/usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg] https://cdn-aws.deb.debian.org/debian-security bullseye-security contrib main non-free
/etc/apt/sources.list:deb [signed-by=/usr/share/keyrings/debian-archive-bullseye-stable.gpg] https://cdn-aws.deb.debian.org/debian/ bullseye contrib main non-free
/etc/apt/sources.list:deb [signed-by=/usr/share/keyrings/debian-archive-bullseye-automatic.gpg] https://cdn-aws.deb.debian.org/debian/ bullseye-proposed-updates contrib main non-free
/etc/apt/sources.list:deb [signed-by=/usr/share/keyrings/debian-archive-bullseye-automatic.gpg] https://cdn-aws.deb.debian.org/debian/ bullseye-updates contrib main non-free
/etc/apt/sources.list:deb  [signed-by=/usr/share/keyrings/debian-archive-bullseye-automatic.gpg] https://cdn-aws.deb.debian.org/debian/ bullseye-backports contrib main non-free
/etc/apt/sources.list:deb [signed-by=/usr/share/keyrings/debian-archive-bullseye-automatic.gpg] https://cdn-aws.deb.debian.org/debian/ bookworm contrib main non-free
/etc/apt/sources.list:deb [signed-by=/usr/share/keyrings/debian-archive-bullseye-automatic.gpg] https://cdn-aws.deb.debian.org/debian/ sid contrib main non-free
/etc/apt/sources.list.d/03-spotify.list:deb [arch=amd64 signed-by=/usr/share/keyrings/spotify.gpg] http://repository.spotify.com stable non-free
etc/apt/preferences.d/spotify 
Package: *
Pin: origin repository.spotify.com
Pin-Priority: 1

Package: spotify-client
Pin: origin repository.spotify.com
Pin-Priority: 500

Il était inutile de toucher aux dépôts officiels.
Par contre pour ton dépôt spotify, tu aurais pu virer /etc/apt/sources.list.d/03-spotify.list et le remplacer par un /etc/apt/sources.list.d/spotify.sources contenant :

Types: deb
URIs: http://repository.spotify.com
Suites: stable
Components: non-free
Signed-By:
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBF9XbJMBEADQ/wu6dd7akoE1PrL6WpARdhoHjt2OU5Uj4H2vy2YWuEB8aaqX
+wjMVAAiyf2jz2gJnXnwqcfjRf9hsw9lNh/4llVLL5gI3E/ZtKcOELsm+50/93zT
Ei3THAGylNMylDeBwAzPKnBjMpW40OKbjnq16IZ+jexkvLWhkf9iA0AvkQQ0lgX2
IBJzE2ab+doE3D92R33mnvNjIKqHRNtwV5M/F1jL1rr/FvOIXcT8txBlen+KP2w9
d1vXYbbx/0ObMbWusGdu/BiA422rpWvzED0jtAucwTEwCb+isoW05mXLvLsjmetF
HDfK/XeTyizNO4w6awdXDTAiBPHeqJ4w5JjoX42VsH38DvW3evXztv/5uLuxNXQK
vDPxaxy/DMNLHv5zJyxxU/weigXX5SGoKVATgFB9oZ/P8y+RTOwZiYrt2NgjI7K3
B6Hd9TkqktpUHHSW/REiPG/z+ZY5FqASoJbiU8/nSqn3MUF+xRzrKwPKZF9ekdoC
4o0JPxvIqIN4KndQiCHMfdtoO/PPMR4izXAfYOT1x1KC9fq9uhcaf9FyjgduIGNR
ttlPrfPyM/FABNUZio8jZL5s+eFMRx1b1HIe80+p8GC3vV/oGJ8gqq0Gbdz6HGbR
TQyX7ey3rowlXkyaGTamgPBy4gHrHMCLdpXd35L7zHZH7nuKGW6n4U3HWwARAQAB
tDdTcG90aWZ5IFB1YmxpYyBSZXBvc2l0b3J5IFNpZ25pbmcgS2V5IDx0dXhAc3Bv
dGlmeS5jb20+iQJUBBMBCgA+FiEEj9PZqNOAAwWp//JZ0XQq1g2BHVgFAl9XbJMC
GwMFCQJRQwAFCwkIBwIGFQoJCAsCBBYCAwECHgECF4AACgkQ0XQq1g2BHVg4VhAA
yOAF7yLRjSNrKAmasZCq4+uHwFotg9Y5eJYyPOTjbjq5/W88cXZIazbyFeWhOY9k
Ltpv4fMISxZddlqlN59dwiygJ7mRFjl4U8FdeF9B+ZSz/u5tpAzffB/Vr0MLkBuK
IDNbGeLf/hZ3aGgrnHfoWDlNudt5hjKpZdiZwkIyBuujd1Cz9bkWZ9m6p2aVO3dF
i3+QTF9Cs2u+i0an5xgIMf3W+xWzGnGCGib6PBL4+Q5nx96JixpFDuNnEDogjQOH
xD1svyGefM9AyXegLIz0iapiM9KMRxOwReZraMVH0d/O86vjj2uB9bkF1snlZWpX
WCEEHw3IjmsJQCb4JLIUpIAwiAQt3hB58uNqbARAECeEstx1vfw3yRfDdPhA5lH7
LEDxYI4OpL5EX9WSzLcEAtv9PI7snrBSeuiS7Hy4q8j4jbMdtczV2BQ8iNOcHBEI
/ocjLrdIRylcITqmsMY/4c7SuvXj79dyutQWrDZU8vP/uA0O7FNf4oNZnIC6W0l3
muhZeun8a7MVU+x7RnkME5VjH+OS5/3IBfxp/U8dBBFpPw1gUQYCjmicCsuoT09E
iYNsp2rx/vs5JJgATd0ri3T5QborulPsN4ODXZBUDdry2QeuHCF91HBDsuF2ks0N
6HC1hKCQCAw+TS00sV5Cg/sPq6SPtOcqq/brX+zIqY0=
=8BS2
-----END PGP PUBLIC KEY BLOCK-----

La clé publique est la copie du contenu de https://download.spotify.com/debian/pubkey_0D811D58.gpg


Correction fonctionnelle :

Types: deb
URIs: http://repository.spotify.com
Suites: stable
Components: non-free
Signed-By: /usr/local/share/keyrings/spotify.gpg

(ajout par PengouinPdt)

2 J'aime

:astonished: On peut faire ça ?

1 J'aime

ça veut pas jouer

sudo apt edit-sources spotify.sources
E: Le type « Types: » est inconnu sur la ligne 1 dans la liste des sources /etc/apt/sources.list.d/spotify.sources.list
E: La liste des sources ne peut être lue.
Impossible de lire /etc/apt/sources.list.d/spotify.sources.list. Faut-il l'éditer à nouveau ? [O/n] n
E: Le type « Types: » est inconnu sur la ligne 1 dans la liste des sources /etc/apt/sources.list.d/spotify.sources.list
E: La liste des sources ne peut être lue.

apt list --installed | grep apt

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

apt-file/stable,stable,testing,testing,unstable,unstable,now 3.2.2 all  [installé]
apt-rdepends/stable,stable,testing,testing,now 1.3.0-7 all  [installé]
apt-utils/testing,unstable,now 2.3.8 amd64  [installé]
apt/testing,unstable,now 2.3.8 amd64  [installé]
laptop-detect/stable,stable,testing,testing,unstable,unstable,now 0.16 all  [installé, automatique]
laptop-mode-tools/stable,stable,testing,testing,unstable,unstable,now 1.74-1.1 all  [installé]
libapt-pkg-perl/testing,unstable,now 0.1.40 amd64  [installé]
libapt-pkg6.0/testing,unstable,now 2.3.8 amd64  [installé, automatique]
libatk-adaptor/stable,testing,unstable,now 2.38.0-1 amd64  [installé]
libraptor2-0/stable,testing,unstable,now 2.0.14-1.2 amd64  [installé, automatique]
python-apt-common/stable,stable,testing,testing,unstable,unstable,now 2.2.1 all  [installé]
python3-apt/stable,testing,unstable,now 2.2.1 amd64  [installé]
synaptic/testing,unstable,now 0.90.2+b1 amd64  [installé]
xserver-xorg-input-synaptics/stable,testing,unstable,now 1.9.1-2 amd64  [installé]

Ton fichier doit s’appeler :
/etc/apt/sources.list.d/spotify.sources
et non :
/etc/apt/sources.list.d/spotify.sources.list

*.list pour le format classique *.sources pour le format format deb822

1 J'aime