侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux apt-key命令教程:如何管理APT软件包签名密钥(附实例详解和注意事项)

Linux apt-key命令介绍

apt-key是一个用于管理APT软件包签名密钥的命令,它可以添加、删除、列出或验证APT源的公钥。APT是Advanced Packaging Tool的缩写,它是一个用于安装、升级和删除软件包的工具,主要用于基于Debian的Linux发行版,如Ubuntu、Mint等。APT软件包签名密钥是一种用于验证软件包来源和完整性的机制,它可以防止软件包被篡改或伪造。apt-key命令可以帮助用户管理这些密钥,以确保软件包的安全性。

Linux apt-key命令适用的Linux版本

apt-key命令主要适用于基于Debian的Linux发行版,如Ubuntu、Mint、Debian等,它们都使用APT作为软件包管理工具。其他的Linux发行版,如Red Hat、CentOS、Fedora等,使用的是YUM或DNF作为软件包管理工具,它们有自己的密钥管理方式,不需要使用apt-key命令。如果你想在这些发行版上使用apt-key命令,你需要先安装APT,但这并不推荐,因为可能会导致软件包的冲突或依赖问题。如果你确实需要安装APT,你可以使用以下命令:

  • 在Red Hat、CentOS或Fedora上,你可以使用以下命令安装APT:
[linux@bashcommandnotfound.cn ~]$ sudo yum install apt
  • 在CentOS 8上,你需要使用以下命令安装APT:
[linux@bashcommandnotfound.cn ~]$ sudo dnf install apt

Linux apt-key命令的基本语法

apt-key命令的基本语法如下:

apt-key [options] command [arguments]

其中,options是可选的参数,用于控制apt-key的行为,command是要执行的操作,如add、del、list等,arguments是要传递给command的参数,如密钥文件名、密钥ID等。

Linux apt-key命令的常用选项或参数说明

apt-key命令的常用选项或参数如下表所示:

选项或参数说明
-h, --help显示帮助信息
--version显示版本信息
--keyring file指定要操作的密钥环文件,默认为/etc/apt/trusted.gpg
--readonly以只读模式打开密钥环文件,不进行任何修改
add file从文件中添加密钥到密钥环
del keyid从密钥环中删除指定的密钥,keyid是密钥的ID或指纹
list列出密钥环中的所有密钥
finger显示密钥环中的所有密钥的指纹
adv传递高级选项给gpg命令,gpg是GNU Privacy Guard的缩写,它是一个用于加密和签名的工具
export keyid导出指定的密钥到标准输出
export-all导出所有的密钥到标准输出
update更新过期的密钥
net-update从网络上更新过期的密钥
verify file signature验证文件的签名

Linux apt-key命令的实例

以下是一些apt-key命令的实例,它们展示了如何使用apt-key命令来管理APT软件包签名密钥。

  • 从文件中添加密钥到密钥环
[linux@bashcommandnotfound.cn ~]$ sudo apt-key add /tmp/keyfile.gpg
OK

这个命令会将/tmp/keyfile.gpg文件中的密钥添加到默认的密钥环文件/etc/apt/trusted.gpg中,如果添加成功,会输出OK。

  • 从密钥环中删除指定的密钥
[linux@bashcommandnotfound.cn ~]$ sudo apt-key del 3B4FE6ACC0B21F32
OK

这个命令会从默认的密钥环文件/etc/apt/trusted.gpg中删除ID为3B4FE6ACC0B21F32的密钥,如果删除成功,会输出OK。

  • 列出密钥环中的所有密钥
[linux@bashcommandnotfound.cn ~]$ sudo apt-key list
/etc/apt/trusted.gpg
--------------------
pub   rsa4096 2012-05-11 [SC]
      790B C727 7767 219C 42C8  6F93 3B4F E6AC C0B2 1F32
uid           [ unknown] Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>
sub   rsa4096 2012-05-11 [S] [expires: 2022-05-11]

pub   rsa4096 2018-09-17 [SC]
      D94A A3F0 EDF8 23D6 4951  9ED0 7E53 1418 9D7D 44EA
uid           [ unknown] Ubuntu Archive Automatic Signing Key (2018) <ftpmaster@ubuntu.com>
sub   rsa4096 2018-09-17 [S] [expires: 2028-09-15]

...

这个命令会列出默认的密钥环文件/etc/apt/trusted.gpg中的所有密钥,包括它们的ID、类型、日期、用户等信息。

  • 显示密钥环中的所有密钥的指纹
[linux@bashcommandnotfound.cn ~]$ sudo apt-key finger
/etc/apt/trusted.gpg
--------------------
pub   rsa4096 2012-05-11 [SC]
      790B C727 7767 219C 42C8  6F93 3B4F E6AC C0B2 1F32
      Key fingerprint = 790B C727 7767 219C 42C8  6F93 3B4F E6AC C0B2 1F32
uid           [ unknown] Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>
sub   rsa4096 2012-05-11 [S] [expires: 2022-05-11]

pub   rsa4096 2018-09-17 [SC]
      D94A A3F0 EDF8 23D6 4951  9ED0 7E53 1418 9D7D 44EA
      Key fingerprint = D94A A3F0 EDF8 23D6 4951  9ED0 7E53 1418 9D7D 44EA
uid           [ unknown] Ubuntu Archive Automatic Signing Key (2018) <ftpmaster@ubuntu.com>
sub   rsa4096 2018-09-17 [S] [expires: 2028-09-15]

...

这个命令会显示默认的密钥环文件/etc/apt/trusted.gpg中的所有密钥的指纹,指纹是一种用于唯一标识密钥的字符串,它可以用于验证密钥的真实性。

  • 导出指定的密钥到标准输出
[linux@bashcommandnotfound.cn ~]$ sudo apt-key export 3B4FE6ACC0B21F32
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBFIFvZ4BEAC0wNf0xPnWzG4vPEotxbo16wzK+JLLw0rLmGIkZ2/e+GZ7+GZM
...
=2ZPj
-----END PGP PUBLIC KEY BLOCK-----

这个命令会导出ID为3B4FE6ACC0B21F32。

  • 导出所有的密钥到标准输出
[linux@bashcommandnotfound.cn ~]$ sudo apt-key export-all
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBFIFvZ4BEAC0wNf0xPnWzG4vPEotxbo16wzK+JLLw0rLmGIkZ2/e+GZ7+GZM
...
=2ZPj
-----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBFIFvZ4BEAC0wNf0xPnWzG4vPEotxbo16wzK+JLLw0rLmGIkZ2/e+GZ7+GZM
...
=2ZPj
-----END PGP PUBLIC KEY BLOCK-----
...

这个命令会导出默认的密钥环文件/etc/apt/trusted.gpg中的所有密钥到标准输出,每个密钥都用BEGIN和END标记包裹。

  • 更新过期的密钥
[linux@bashcommandnotfound.cn ~]$ sudo apt-key update
gpg: refreshing 4 keys from hkp://keyserver.ubuntu.com
gpg: requesting key 3B4FE6ACC0B21F32 from hkp server keyserver.ubuntu.com
gpg: requesting key D94AA3F0EDF823D6 from hkp server keyserver.ubuntu.com
...
gpg: key 3B4FE6ACC0B21F32: "Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>" not changed
gpg: key D94AA3F0EDF823D6: "Ubuntu Archive Automatic Signing Key (2018) <ftpmaster@ubuntu.com>" not changed
...
gpg: Total number processed: 4
gpg:              unchanged: 4

这个命令会从默认的密钥服务器hkp://keyserver.ubuntu.com上更新过期的密钥,如果没有过期的密钥,会显示not changed。

  • 从网络上更新过期的密钥
[linux@bashcommandnotfound.cn ~]$ sudo apt-key net-update
gpg: refreshing 4 keys from hkp://keyserver.ubuntu.com
gpg: requesting key 3B4FE6ACC0B21F32 from hkp server keyserver.ubuntu.com
gpg: requesting key D94AA3F0EDF823D6 from hkp server keyserver.ubuntu.com
...
gpg: key 3B4FE6ACC0B21F32: "Ubuntu Archive Automatic Signing Key (2012) <ftpmaster@ubuntu.com>" not changed
gpg: key D94AA3F0EDF823D6: "Ubuntu Archive Automatic Signing Key (2018) <ftpmaster@ubuntu.com>" not changed
...
gpg: Total number processed: 4
gpg:              unchanged: 4

这个命令和apt-key update命令的效果相同,只是使用了不同的方法来更新密钥,它会从APT源列表中的密钥服务器上更新过期的密钥,如果没有过期的密钥,会显示not changed。

  • 验证文件的签名
[linux@bashcommandnotfound.cn ~]$ sudo apt-key verify /tmp/file.deb /tmp/file.deb.asc
gpg: Signature made Tue 12 Dec 2023 03:35:41 PM UTC using RSA key ID 9D7D44EA
gpg: Good signature from "Ubuntu Archive Automatic Signing Key (2018) <ftpmaster@ubuntu.com>"

这个命令会验证/tmp/file.deb文件的签名,它需要提供一个签名文件/tmp/file.deb.asc,它会显示签名的日期、类型、ID和用户,如果签名有效,会显示Good signature。

Linux apt-key命令的注意事项

在使用apt-key命令时,有以下几点需要注意:

  • apt-key命令需要root权限,所以需要使用sudo或su命令来执行。
  • apt-key命令不会自动更新密钥,所以需要定期使用apt-key update或apt-key net-update命令来更新密钥,以防止密钥过期或被撤销。
  • apt-key命令不会检查密钥的真实性,所以需要在添加密钥时,使用apt-key finger命令来验证密钥的指纹,或者从可信的来源获取密钥,以防止添加伪造或篡改的密钥。
  • apt-key命令不会检查APT源的安全性,所以需要在添加APT源时,使用https协议或者验证签名,以防止添加恶意或不可靠的APT源。
  • 如果在使用APT时,出现了bash: apt-key: command not found的错误,说明apt-key命令没有安装,需要使用以下命令来安装:
[linux@bashcommandnotfound.cn ~]$ sudo apt install apt
0

评论区