[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

experimental .deb packages using "signed-by"



We have experimental packages and instructions for .deb packages which support
"signed-by" repositories.  This is relevant for people using Debian, Ubuntu,
Mint, ElementaryOS, Pop!_OS, etc.

The old method (using apt-key) is marked as deprecated, and is planned to be
removed from new distributions in mid-2022.  As far as I'm aware, any existing
installation should be fine in the future -- this isn't something that they
would change in the middle of a stable release's lifetime.  (For example, if
you're running Ubuntu 18.04, don't worry.)

We're currently testing:
- a new tarsnap-archive-keyring package.
- installation instructions which depend on the user's version of apt.
https://www.tarsnap.com/pkg-deb.html#experimental

If there's no reports of problems, we'll migrate them to the real packages in a
week.


History
- before apt 1.1~exp9 2015-08-18, gpg keys for third-party
  repositories had to either be added to /etc/apt/trusted.gpg directly,
  or added to /etc/apt/trusted.gpg.d/ as a separate file.  These keys
  are completely trusted by the system.

  Hypothetically, if a third-party repository includes a package called
  "passwd" which has a higher version number than the normal "passwd"
  package, the distro would happily install the third-party package.
  I leave the security implications of this as an exercise for the reader.

- after apt 1.1~exp9 (related stable release: apt 1.1 2015-11-26),
  repositories entries in sources.list could be marked as "signed-by".
  For example,
    deb http://pkg.tarsnap.com/deb/stretch ./
  turns into:
    deb [signed-by=/usr/share/keyrings/tarsnap-archive-keyring.gpg] http://pkg.tarsnap.com/deb/stretch ./
  (all on one line)

  As a result, the system no longer needs to completely trust
  third-party keys; a malicious third-party "passwd" package would not
  be viewed as an upgrade to the base system "passwd" package.

- apt 2.1.8 2020-08-04 marked "apt-key" (which manages
  /etc/apt/trusted.g) as deprecated; scheduled for removal in Q2/2022.


What does that mean for us?

- people using old (2015 or earlier) distros still need the
  tarsnap-archive-keyring package to write the keyring to
  /etc/apt/trusted.gpg.d/
- people using the most recent (2021 or later) distros should use the
  "signed-by" method for new installations.
- people using distros between 2016 and 2021 could use either method for
  new installations.  (We will tell them to use the newer method.)
- if at all possible, people with existing tarsnap installations should
  not need to know about any changes.
  (i.e. `apt-get update && apt-get upgrade` should just work.)

Our solution for the tarsnap-archive-keyring packate is:
- if the system already has a
    /etc/apt/trusted.gpg.d/tarsnap-archive-keyring.gpg
  then copy the new archive keyring over that existing file.
- otherwise, don't write to /etc/apt/trusted.gpg/

This requires the use of postinst / postrm scripts, which is discouraged by the
Debian New Maintainer's Guide, but I can't see an alternate solution which
would work for new installations and existing installations at the same time
(without requiring existing users to manually edit files in /etc/).


For more details, here's the initial discussion:
https://github.com/Tarsnap/tarsnap/issues/475
and here's the commit in the tarsnap-public-keys repository:
https://github.com/Tarsnap/tarsnap-public-keys/commit/cc32d2b5fc2c3e955efe651dbeb65a6c708b8fab

Cheers,
- Graham Percival