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
评论区