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

Bug#322120: apt: No documentation available on use of release signatures? (No apt-secure(8)?)



tags 322120 patch
thanks

On Tue, Aug 09, 2005 at 11:34:17AM +0200, Michael Vogt wrote:
> It would be nice if you could write a manpage (preferably in XML like
> the other man pages). 

Ok. How about the attached patch? It might need a little bit of 
proofreading but I believe the facts are straight. It also needs
clearance from the people that wrote the online documentation
I based on it (in CC:) since they don't provide a copyright in the manpage.

Issac, Colin, and Florian, could you please relicense your documents
using the GPL so we can include this manpage in the Apt sources?
[ Note: I don't know who to give credit for http://wiki.debian.net/?apt06
and there is no license statement in Debian's kwiki, what should we do
about that? ]

With their clearance, and the "AUTHORS" section of this manpage
crediting them (well, and me too :- ) I believe it's set to go.


Also notice I've patched apt-key to include more information in the
terse manpage currently available.

I've also taken some time to update the Securing Debian Manual (which
I maintain). You will see a shameless plug there in the manpage :-)

Regards

Javier
diff -Nru apt-0.6.40.1/debian/apt.manpages apt-0.6.40.2/debian/apt.manpages
--- apt-0.6.40.1/debian/apt.manpages	2005-08-05 11:58:39.000000000 +0200
+++ apt-0.6.40.2/debian/apt.manpages	2005-08-10 16:37:06.000000000 +0200
@@ -3,6 +3,7 @@
 doc/apt-config.8
 doc/apt-get.8
 doc/apt-key.8
+doc/apt-secure.8
 doc/apt.8
 doc/apt.conf.5
 doc/apt_preferences.5
diff -Nru apt-0.6.40.1/debian/changelog apt-0.6.40.2/debian/changelog
--- apt-0.6.40.1/debian/changelog	2005-08-05 13:34:35.000000000 +0200
+++ apt-0.6.40.2/debian/changelog	2005-08-10 17:22:32.000000000 +0200
@@ -1,3 +1,11 @@
+apt (0.6.40.2) unstable; urgency=low
+
+  * Added a first version of an apt-secure.8 manpage, and modified
+    apt-key and apt.end accordingly. Also added the 'update'
+    argument to apt-key which was previously not documented (Closes: #322120)
+
+ -- Javier Fernandez-Sanguino Pen~a <jfs@computer.org>  Wed, 10 Aug 2005 17:21:38 +0200
+
 apt (0.6.40.1) unstable; urgency=low
 
   * bugfix in the parsing code for the apt<->dpkg communication. apt 
diff -Nru apt-0.6.40.1/doc/apt.ent apt-0.6.40.2/doc/apt.ent
--- apt-0.6.40.1/doc/apt.ent	2005-08-05 11:58:35.000000000 +0200
+++ apt-0.6.40.2/doc/apt.ent	2005-08-10 17:35:47.000000000 +0200
@@ -44,6 +44,25 @@
   </citerefentry>"
 >
 
+<!ENTITY apt-key "<citerefentry>
+    <refentrytitle><command>apt-key</command></refentrytitle>
+    <manvolnum>8</manvolnum>
+  </citerefentry>"
+>
+
+<!ENTITY apt-secure "<citerefentry>
+    <refentrytitle>apt-secure</refentrytitle>
+    <manvolnum>8</manvolnum>
+  </citerefentry>"
+>
+
+<!ENTITY apt-archive "<citerefentry>
+    <refentrytitle><filename>apt-archive</filename></refentrytitle>
+    <manvolnum>1</manvolnum>
+  </citerefentry>"
+>
+
+
 <!ENTITY sources-list "<citerefentry>
     <refentrytitle><filename>sources.list</filename></refentrytitle>
     <manvolnum>5</manvolnum>
@@ -91,6 +110,36 @@
     <manvolnum>8</manvolnum>
   </citerefentry>"
 >
+
+<!ENTITY aptitude "<citerefentry>
+    <refentrytitle><command>aptitude</command></refentrytitle>
+    <manvolnum>8</manvolnum>
+  </citerefentry>"
+>
+
+<!ENTITY synaptic "<citerefentry>
+    <refentrytitle><command>synaptic</command></refentrytitle>
+    <manvolnum>8</manvolnum>
+  </citerefentry>"
+>
+
+<!ENTITY debsign "<citerefentry>
+    <refentrytitle><command>debsign</command></refentrytitle>
+    <manvolnum>1</manvolnum>
+  </citerefentry>"
+>
+
+<!ENTITY debsig-verify "<citerefentry>
+    <refentrytitle><command>debsig-verify</command></refentrytitle>
+    <manvolnum>1</manvolnum>
+  </citerefentry>"
+>
+
+<!ENTITY gpg "<citerefentry>
+    <refentrytitle><command>gpg</command></refentrytitle>
+    <manvolnum>1</manvolnum>
+  </citerefentry>"
+>
     
 <!-- Boiler plate docinfo section -->
 <!ENTITY apt-docinfo "
diff -Nru apt-0.6.40.1/doc/apt-key.8 apt-0.6.40.2/doc/apt-key.8
--- apt-0.6.40.1/doc/apt-key.8	2005-08-05 13:35:29.000000000 +0200
+++ apt-0.6.40.2/doc/apt-key.8	2005-08-10 17:36:42.000000000 +0200
@@ -47,6 +47,33 @@
 list
 List trusted keys\&.
 
+.TP
+update
+Update the local keyring with the keyring of Debian archive keys and removes from the keyring the archive keys which are no longer valid\&.
+
+.SH "FILES"
+
+.TP
+\fI/etc/apt/trusted\&.gpg\fR
+Keyring of local trusted keys, new keys will be added here\&.
+
+.TP
+\fI/etc/apt/trustdb\&.gpg\fR
+Local trust database of archive keys\&.
+
+.TP
+\fI/usr/share/keyrings/debian\-archive\-keyring\&.gpg\fR
+Keyring of Debian archive trusted keys\&.
+
+.TP
+\fI/usr/share/keyrings/debian\-archive\-removed\-keys\&.gpg\fR
+Keyring of Debian archive removed trusted keys\&.
+
+.SH "SEE ALSO"
+
+.PP
+ \fB\fBapt\-get\fR\fR(8), \fBapt\-secure\fR(8) 
+
 .SH "BUGS"
 
 .PP
diff -Nru apt-0.6.40.1/doc/apt-key.8.xml apt-0.6.40.2/doc/apt-key.8.xml
--- apt-0.6.40.1/doc/apt-key.8.xml	2005-08-05 11:58:35.000000000 +0200
+++ apt-0.6.40.2/doc/apt-key.8.xml	2005-08-10 17:36:02.000000000 +0200
@@ -68,6 +68,20 @@
      <para>
 
        List trusted keys.
+
+     </para>
+
+     </listitem>
+     </varlistentry>
+
+     <varlistentry><term>update</term>
+     <listitem>
+     <para>
+
+       Update the local keyring with the keyring of Debian archive
+       keys and removes from the keyring the archive keys which are no
+       longer valid.
+
      </para>
 
      </listitem>
@@ -75,10 +89,35 @@
    </variablelist>
 </refsect1>
 
-<!--  <refsect1><title>See Also</title> -->
-<!--    <para> -->
-<!--    &apt-conf;, &apt-get;, &sources-list; -->
-<!--  </refsect1> -->
+ <refsect1><title>Files</title>
+   <variablelist>
+     <varlistentry><term><filename>/etc/apt/trusted.gpg</filename></term>
+     <listitem><para>Keyring of local trusted keys, new keys will be added here.</para></listitem>
+     </varlistentry>
+
+     <varlistentry><term><filename>/etc/apt/trustdb.gpg</filename></term>
+     <listitem><para>Local trust database of archive keys.</para></listitem>
+     </varlistentry>
+
+     <varlistentry><term><filename>/usr/share/keyrings/debian-archive-keyring.gpg</filename></term>
+     <listitem><para>Keyring of Debian archive trusted keys.</para></listitem>
+     </varlistentry>
+
+     <varlistentry><term><filename>/usr/share/keyrings/debian-archive-removed-keys.gpg</filename></term>
+     <listitem><para>Keyring of Debian archive removed trusted keys.</para></listitem>
+     </varlistentry>
+
+
+
+   </variablelist>
+
+</refsect1>
+
+<refsect1><title>See Also</title>
+<para>
+&apt-get;, &apt-secure;
+</para>
+</refsect1>
 
  &manbugs;
  &manauthor;
diff -Nru apt-0.6.40.1/doc/apt-secure.8 apt-0.6.40.2/doc/apt-secure.8
--- apt-0.6.40.1/doc/apt-secure.8	1970-01-01 01:00:00.000000000 +0100
+++ apt-0.6.40.2/doc/apt-secure.8	2005-08-10 17:45:07.000000000 +0200
@@ -0,0 +1,111 @@
+.\"Generated by db2man.xsl. Don't modify this, modify the source.
+.de Sh \" Subsection
+.br
+.if t .Sp
+.ne 5
+.PP
+\fB\\$1\fR
+.PP
+..
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Ip \" List item
+.br
+.ie \\n(.$>=3 .ne \\$3
+.el .ne 3
+.IP "\\$1" \\$2
+..
+.TH "APT-SECURE" 8 "14 December 2003" "Linux" ""
+.SH NAME
+apt-secure \- Archive authentication support for APT
+.SH "DESCRIPTION"
+
+.PP
+Starting with version 0\&.6, \fBapt\fR contains code that does signature checking of the Release file for all archives\&. This ensures that packages in the archive can't be modified by people who have no access to the Release file signing key\&.
+
+.PP
+If a package comes from a archive without a signature or with a signature that apt does not have a key for that package is considered untrusted and installing it will result in a big warning\&. \fBapt\-get\fR will currently only warn for unsigned archives, future releases might force all sources to be verified before downloading packages from them\&.
+
+.PP
+The package frontends \fB\fBapt\-get\fR\fR(8), \fB\fBaptitude\fR\fR(8) and \fB\fBsynaptic\fR\fR(8) support this new authentication feature\&.
+
+.SH "TRUSTED ARCHIVES"
+
+.PP
+The chain of trust from an apt archive to the end user is made up of different steps\&. \fBapt\-secure\fR is the last step in this chain, trusting an archive does not mean that the packages that you trust it do not contain malicious code but means that you trust the archive maintainer\&. Its the archive maintainer responsibility to ensure that the archive integrity is correct\&.
+
+.PP
+apt\-secure does not review signatures at a package level\&. If you require tools to do this you should look at \fBdebsig\-verify\fR and \fBdebsign\fR (provided in the debsig\-verify and devscripts packages respectively)\&.
+
+.PP
+The chain of trust in Debian starts when a maintainer uploads a new package or a new version of a package to the Debian archive\&. This upload in order to become effective needs to be signed by a key of a maintainer within the Debian maintainer's keyring (available in the debian\-keyring package)\&. Maintainer's keys are signed by other maintainers following pre\-established procedures to ensure the identity of the key holder\&.
+
+.PP
+Once the uploaded package is verified and included in the archive, the maintainer signature is stripped off, an MD5 sum of the package is computed and put in the Packages file\&. The MD5 sum of all of the packages files are then computed and put into the Release file\&. The Release file is then signed by the archive key (which is created once a year and distributed through the FTP server\&. This key is also on the Debian keyring\&.
+
+.PP
+Any end user can check the signature of the Release file, extract the MD5 sum of a package from it and compare it with the MD5 sum of the package he downloaded\&. Prior to version 0\&.6 only the MD5 sum of the downloaded Debian package was checked\&. Now both the MD5 sum and the signature of the Release file are checked\&.
+
+.PP
+Notice that this is distinct from checking signatures on a per package basis\&. It is designed to prevent two possible attacks:
+
+.TP 3
+\(bu
+Network "man in the middle" attacks\&. Without signature checking, a malicious agent can introduce himself in the package download process and provide malicious software either by controlling a network element (router, switch, etc\&.) or by redirecting traffic to a rogue server (through arp or DNS spoofing attacks)\&.
+.TP
+\(bu
+Mirror network compromise\&. Without signature checking, a malicious agent can compromise a mirror host and modify the files in it to propage malicious software to all users downloading packages from that host\&.
+.LP
+
+.PP
+However, it does not defend against a compromise of the Debian master server itself (which signs the packages) or against a compromise of the key used to sign the Release files\&. In any case, this mechanism can complement a per\-package signature\&.
+
+.SH "USER CONFIGURATION"
+
+.PP
+ \fBapt\-key\fR is the program that manages the list of keys used by apt\&. It can be used to add or remove keys although an installation of this release will automatically provide the default Debian archive signing keys used in the Debian package repositories\&.
+
+.PP
+In order to add a new key you need to first download it (you should make sure you are using a trusted communication channel when retrieving it), add it with \fBapt\-key\fR and then run \fBapt\-get update\fR so that apt can download and verify the \fIRelease\&.gpg\fR files from the archives you have configured\&.
+
+.SH "ARCHIVE CONFIGURATION"
+
+.PP
+If you want to provide archive signatures in an archive under your maintenance you have to:
+
+.TP 3
+\(bu
+Create a toplevel Release file\&. if it does not exist already\&. You can do this by running \fBapt\-ftparchive\fR (provided in apt\-utils)\&.
+.TP
+\(bu
+Sign it\&. You can do this by running \fBgpg \-abs \-o Release\&.gpg Release\fR\&.
+.TP
+\(bu
+Publish the key fingerprint, that way your users will know what key they need to import in order to authenticate the files in the archive\&.
+.LP
+
+.PP
+Whenever the contents of the archive changes (new packages are added or removed) the archive maintainer has to follow the first two steps previously outlined\&.
+
+.SH "SEE ALSO"
+
+.PP
+ \fB\fIapt\&.conf\fR\fR(5), \fB\fBapt\-get\fR\fR(8), \fB\fIsources\&.list\fR\fR(5), \fB\fBapt\-key\fR\fR(8), \fB\fIapt\-archive\fR\fR(1), \fB\fBdebsign\fR\fR(1)  \fB\fBdebsig\-verify\fR\fR(1), \fB\fBgpg\fR\fR(1) 
+
+.PP
+For more backgound information you might want to review the Debian Security Infrastructure: \fIhttp://www.debian.org/doc/manuals/securing-debian-howto/ch7.en.html\fR chapter of the Securing Debian Manual (available also in the harden\-doc package) and the Strong Distribution HOWTO: \fIhttp://www.cryptnet.net/fdp/crypto/strong_distro.html\fR by V\&. Alex Brennen\&.
+
+.SH "BUGS"
+
+.PP
+APT bug page: \fIhttp://bugs.debian.org/src:apt\fR\&;. If you wish to report a bug in APT, please see \fI/usr/share/doc/debian/bug\-reporting\&.txt\fR or the \fB\fBreportbug\fR\fR(1) command\&.
+
+.SH "AUTHOR"
+
+.PP
+APT was written by the APT team <apt@packages\&.debian\&.org>\&.
+
+.SH AUTHOR
+Jason Gunthorpe.
diff -Nru apt-0.6.40.1/doc/apt-secure.8.xml apt-0.6.40.2/doc/apt-secure.8.xml
--- apt-0.6.40.1/doc/apt-secure.8.xml	1970-01-01 01:00:00.000000000 +0100
+++ apt-0.6.40.2/doc/apt-secure.8.xml	2005-08-10 17:45:02.000000000 +0200
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"; [
+
+<!ENTITY % aptent SYSTEM "apt.ent">
+%aptent;
+
+]>
+
+<refentry>
+ &apt-docinfo;
+ 
+ <refmeta>
+   <refentrytitle>apt-secure</refentrytitle>
+   <manvolnum>8</manvolnum>
+ </refmeta>
+
+<!-- NOTE: This manpage has been written based on the
+     Securing Debian Manual ("Debian Security
+     Infrastructure" chapter) and on documentation
+     available at the following sites:
+     http://wiki.debian.net/?apt06
+     http://www.syntaxpolice.org/apt-secure/
+     http://www.enyo.de/fw/software/apt-secure/
+-->
+<!-- TODO: write a more verbose example of how it works with 
+     a sample similar to 
+     http://www.debian-administration.org/articles/174
+     ?
+--> 
+
+ 
+ <!-- Man page title -->
+ <refnamediv>
+    <refname>apt-secure</refname>
+    <refpurpose>Archive authentication support for APT</refpurpose>
+ </refnamediv>
+
+ <refsect1><title>Description</title>
+   <para>
+   Starting with version 0.6, <command>apt</command> contains code
+   that does signature checking of the Release file for all
+   archives. This ensures that packages in the archive can't be
+   modified by people who have no access to the Release file signing
+   key.
+   </para>
+
+   <para>
+   If a package comes from a archive without a signature or with a
+   signature that apt does not have a key for that package is
+   considered untrusted and installing it will result in a big
+   warning. <command>apt-get</command> will currently only warn
+   for unsigned archives, future releases might force all sources
+   to be verified before downloading packages from them.
+   </para>
+
+   <para>
+   The package frontends &apt-get;, &aptitude; and &synaptic; support this new
+   authentication feature.
+   </para>
+</refsect1>
+
+ <refsect1><title>Trusted archives</title> 
+
+   <para> 
+   The chain of trust from an apt archive to the end user is made up of
+   different steps. <command>apt-secure</command> is the last step in
+   this chain, trusting an archive does not mean that the packages
+   that you trust it do not contain malicious code but means that you
+   trust the archive maintainer. Its the archive maintainer
+   responsibility to ensure that the archive integrity is correct.
+   </para>
+
+   <para>apt-secure does not review signatures at a
+   package level. If you require tools to do this you should look at
+   <command>debsig-verify</command> and
+   <command>debsign</command> (provided in the debsig-verify and
+   devscripts packages respectively).</para>
+
+   <para>
+   The chain of trust in Debian starts when a maintainer uploads a new
+   package or a new version of a package to the Debian archive. This
+   upload in order to become effective needs to be signed by a key of
+   a maintainer within the Debian maintainer's keyring (available in
+   the debian-keyring package). Maintainer's keys are signed by
+   other maintainers following pre-established procedures to
+   ensure the identity of the key holder.
+   </para>
+
+   <para>
+   Once the uploaded package is verified and included in the archive,
+   the maintainer signature is stripped off, an MD5 sum of the package
+   is computed and put in the Packages file. The MD5 sum of all of the
+   packages files are then computed and put into the Release file. The
+   Release file is then signed by the archive key (which is created
+   once a year and distributed through the FTP server. This key is
+   also on the Debian keyring.
+   </para>
+
+   <para>
+   Any end user can check the signature of the Release file, extract the MD5
+   sum of a package from it and compare it with the MD5 sum of the
+   package he downloaded. Prior to version 0.6 only the MD5 sum of the
+   downloaded Debian package was checked. Now both the MD5 sum and the
+   signature of the Release file are checked.
+   </para>
+
+   <para>Notice that this is distinct from checking signatures on a
+   per package basis. It is designed to prevent two possible attacks:
+   </para>
+
+    <itemizedlist>
+       <listitem><para><literal>Network "man in the middle"
+       attacks</literal>. Without signature checking, a malicious
+       agent can introduce himself in the package download process and
+       provide malicious software either by controlling a network
+       element (router, switch, etc.) or by redirecting traffic to a
+       rogue server (through arp or DNS spoofing
+       attacks).</para></listitem>
+ 
+       <listitem><para><literal>Mirror network compromise</literal>.
+        Without signature checking, a malicious agent can compromise a
+        mirror host and modify the files in it to propage malicious
+        software to all users downloading packages from that
+        host.</para></listitem>
+    </itemizedlist>
+
+   <para>However, it does not defend against a compromise of the
+   Debian master server itself (which signs the packages) or against a
+   compromise of the key used to sign the Release files. In any case,
+   this mechanism can complement a per-package signature.</para>
+</refsect1>
+
+ <refsect1><title>User configuration</title>
+   <para>
+   <command>apt-key</command> is the program that manages the list
+   of keys used by apt. It can be used to add or remove keys although
+   an installation of this release will automatically provide the
+   default Debian archive signing keys used in the Debian package
+   repositories.
+   </para>
+   <para>
+   In order to add a new key you need to first download it
+   (you should make sure you are using a trusted communication channel
+   when retrieving it), add it with <command>apt-key</command> and
+   then run <command>apt-get update</command> so that apt can download
+   and verify the <filename>Release.gpg</filename> files from the archives you
+   have configured.
+   </para>
+</refsect1>
+
+<refsect1><title>Archive configuration</title>
+   <para>
+   If you want to provide archive signatures in an archive under your
+   maintenance you have to:
+   </para>
+
+     <itemizedlist>
+       <listitem><para><literal>Create a toplevel Release
+       file</literal>.  if it does not exist already. You can do this
+       by running <command>apt-ftparchive</command> (provided in
+       apt-utils).</para></listitem>
+   
+      <listitem><para><literal>Sign it</literal>. You can do this by running
+      <command>gpg -abs -o Release.gpg Release</command>.</para></listitem>
+
+      <listitem><para><literal>Publish the key fingerprint</literal>,
+      that way your users will know what key they need to import in
+      order to authenticate the files in the
+      archive.</para></listitem>
+
+    </itemizedlist>
+
+    <para>Whenever the contents of the archive changes (new packages
+    are added or removed) the archive maintainer has to follow the
+    first two steps previously outlined.</para>
+
+</refsect1>
+
+<refsect1><title>See Also</title> 
+<para> 
+&apt-conf;, &apt-get;, &sources-list;, &apt-key;, &apt-archive;,
+&debsign; &debsig-verify;, &gpg;
+</para>
+
+<para>For more backgound information you might want to review the
+<ulink
+url="http://www.debian.org/doc/manuals/securing-debian-howto/ch7.en.html";>Debian
+Security Infrastructure</ulink> chapter of the Securing Debian Manual
+(available also in the harden-doc package) and the
+<ulink url="http://www.cryptnet.net/fdp/crypto/strong_distro.html";
+>Strong Distribution HOWTO</ulink> by V. Alex Brennen.  </para>
+
+</refsect1>
+
+ &manbugs;
+ &manauthor;
+
+</refentry>
+
diff -Nru apt-0.6.40.1/doc/makefile apt-0.6.40.2/doc/makefile
--- apt-0.6.40.1/doc/makefile	2005-08-05 11:58:35.000000000 +0200
+++ apt-0.6.40.2/doc/makefile	2005-08-10 17:25:36.000000000 +0200
@@ -14,7 +14,8 @@
 # XML man pages
 SOURCE = apt-cache.8 apt-get.8 apt-cdrom.8 apt.conf.5 sources.list.5 \
          apt-config.8 apt_preferences.5  \
-         apt-sortpkgs.1 apt-ftparchive.1 apt-extracttemplates.1 apt-key.8
+         apt-sortpkgs.1 apt-ftparchive.1 apt-extracttemplates.1 \
+	 apt-key.8 apt-secure.8
 INCLUDES = apt.ent	 
 include $(XML_MANPAGE_H)
 

Attachment: signature.asc
Description: Digital signature


Reply to: