10.3.3. 为 APT 创建包存储库
现在您有了一个自定义包,您可以通过 APT 包存储库分发它。 用 惩戒 创建所需的存储库并填充它。 这个工具相当强大,它的手册页当然值得一读。
包存储库通常托管在服务器上。 要将其与服务器上运行的其他服务正确分开,最好创建一个专用于此服务的用户。 在专用用户帐户中,您将能够托管存储库文件以及将用于对包存储库进行签名的 GnuPG 密钥:
# apt安装reprepro gnupg
[...]
# 添加用户 --system --group pkgrepo
添加系统用户 'pkgrepo' (UID 136) ... 添加新组 'pkgrepo' (GID 142) ...
使用组“pkgrepo”添加新用户“pkgrepo”(UID 136)……创建主目录“/home/pkgrepo”……
# chown pkgrepo $(tty)
# su - -s /bin/bash pkgrepo
$ gpg --gen-key
gpg (GnuPG) 2.1.11; 版权所有 (C) 2016 Free Software Foundation, Inc。这是免费软件:您可以自由更改和重新分发它。
在法律允许的范围内,不提供任何保证。
gpg: 目录 '/home/pkgrepo/.gnupg' 创建
gpg:新配置文件“/home/pkgrepo/.gnupg/dirmngr.conf”创建 gpg:新配置文件“/home/pkgrepo/.gnupg/gpg.conf”创建 gpg:密钥箱“/home/pkgrepo/.gnupg/” pubring.kbx' 已创建
注意:使用“gpg --full-gen-key”获取全功能密钥生成对话框。 GnuPG 需要构造一个用户 ID 来标识您的密钥。
真正的名字: 攻击性安全存储库签名密钥
电子邮件地址: [电子邮件保护]
您选择了此用户 ID:
”进攻性安全存储库签名密钥[电子邮件保护]>”
# apt安装reprepro gnupg
[...]
# 添加用户 --system --group pkgrepo
添加系统用户 'pkgrepo' (UID 136) ... 添加新组 'pkgrepo' (GID 142) ...
使用组“pkgrepo”添加新用户“pkgrepo”(UID 136)……创建主目录“/home/pkgrepo”……
# chown pkgrepo $(tty)
# su - -s /bin/bash pkgrepo
$ gpg --gen-key
gpg (GnuPG) 2.1.11; 版权所有 (C) 2016 Free Software Foundation, Inc。这是免费软件:您可以自由更改和重新分发它。
在法律允许的范围内,不提供任何保证。
gpg: 目录 '/home/pkgrepo/.gnupg' 创建
gpg:新配置文件“/home/pkgrepo/.gnupg/dirmngr.conf”创建 gpg:新配置文件“/home/pkgrepo/.gnupg/gpg.conf”创建 gpg:密钥箱“/home/pkgrepo/.gnupg/” pubring.kbx' 已创建
注意:使用“gpg --full-gen-key”获取全功能密钥生成对话框。 GnuPG 需要构造一个用户 ID 来标识您的密钥。
真正的名字: 攻击性安全存储库签名密钥
电子邮件地址: [电子邮件保护]
您选择了此用户 ID:
”进攻性安全存储库签名密钥[电子邮件保护]>”
更改 (N)ame、(E)mail 或 (O)kay/(Q)uit? o
我们需要生成很多随机字节。 在素数生成期间执行一些其他操作(在键盘上键入、移动鼠标、使用磁盘)是个好主意; 这使随机数生成器有更好的机会获得足够的熵。
[...]
gpg:/home/pkgrepo/.gnupg/trustdb.gpg:trustdb 创建 gpg:标记为最终受信任的密钥 B4EF2D0D
gpg: 目录 '/home/pkgrepo/.gnupg/openpgp-revocs.d' 创建
gpg:吊销证书存储为 '/home/pkgrepo/.gnupg/openpgp-revocs.d/
➥ F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D.rev’
创建并签名的公钥和私钥。
gpg:检查信任数据库
gpg:需要的边际:需要 3 个完成:1 个信任模型:PGP
gpg:深度:0 有效:1 签名:0 信任:0-、0q、0n、0m、0f、1u pub rsa2048/B4EF2D0D 2016-06-17 [S]
密钥指纹 = F8FE 22F7 4F1B 714E 38DA 6181 B27F 74F7 B4EF 2D0D
uid [终极] 进攻性安全存储库签名密钥[电子邮件保护]> 子 rsa2048/38035F38 2016-06-17 []
更改 (N)ame、(E)mail 或 (O)kay/(Q)uit? o
我们需要生成很多随机字节。 在素数生成期间执行一些其他操作(在键盘上键入、移动鼠标、使用磁盘)是个好主意; 这使随机数生成器有更好的机会获得足够的熵。
[...]
gpg:/home/pkgrepo/.gnupg/trustdb.gpg:trustdb 创建 gpg:标记为最终受信任的密钥 B4EF2D0D
gpg: 目录 '/home/pkgrepo/.gnupg/openpgp-revocs.d' 创建
gpg:吊销证书存储为 '/home/pkgrepo/.gnupg/openpgp-revocs.d/
➥ F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D.rev’
创建并签名的公钥和私钥。
gpg:检查信任数据库
gpg:需要的边际:需要 3 个完成:1 个信任模型:PGP
gpg:深度:0 有效:1 签名:0 信任:0-、0q、0n、0m、0f、1u pub rsa2048/B4EF2D0D 2016-06-17 [S]
密钥指纹 = F8FE 22F7 4F1B 714E 38DA 6181 B27F 74F7 B4EF 2D0D
uid [终极] 进攻性安全存储库签名密钥[电子邮件保护]> 子 rsa2048/38035F38 2016-06-17 []
请注意,当系统提示您输入密码时,您应该输入一个空值(并确认您不想保护您的私钥),因为您希望能够以非交互方式对存储库进行签名。 还要注意的是 GPG 需要对终端的写访问权限才能安全地提示输入密码:这就是为什么您在启动 shell 之前更改了虚拟终端的所有权(自从您最初以该用户身份连接以来,它由 root 拥有) PKGrepo.
现在您可以开始设置存储库。 需要专门的目录 惩戒 在该目录中,您必须创建一个 配置/分布 文件记录了包存储库中可用的发行版:
$ mkdir -p reprepro/conf
$ 光盘重播
$ 猫 > conf/分布 <
起源:进攻性安全
说明:Offsec 的内部包架构:源 amd64 i386 组件:主要
SignWith: F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D END
$ mkdir -p reprepro/conf
$ 光盘重播
$ 猫 > conf/分布 <
起源:进攻性安全
说明:Offsec 的内部包架构:源 amd64 i386 组件:主要
SignWith: F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D END
必填字段是 代码名称,给出分布的名称, 架构,这表明哪些架构将在发行版中可用(并在输入端接受),以及 组件,表示发行版中可用的各种组件(com-
组件是分发的一种子部分,可以在 APT 的 sources.list 中单独启用)。 这 起源 和 描述 字段仅提供信息,它们按原样复制到 发布 文件。 的 签到 场问 惩戒 使用列出了标识符的 GnuPG 密钥签署存储库(将完整指纹放在这里以确保您使用正确的密钥,而不是另一个与短标识符冲突的密钥)。 这 也接受 设置不是必需的,但可以处理 。变化 其分布字段具有此处列出的值的文件(没有此值,它将只接受该字段中的分布代号)。
有了这个基本设置,你可以让 惩戒 生成一个空的存储库:
$ 代表出口
导出索引...
$ 找 。
.
。/D b
./db/版本
./db/references.db
./db/contents.cache.db
./db/校验和.db
./db/packages.db
./db/release.caches.db
./conf
./conf/分布
./分布
./dists/offsec-内部
./dists/offsec-internal/Release.gpg
./dists/offsec-internal/发布
./dists/offsec-internal/main
./dists/offsec-internal/main/source
./dists/offsec-internal/main/source/Release
./dists/offsec-internal/main/source/Sources.gz
./dists/offsec-internal/main/binary-amd64
./dists/offsec-internal/main/binary-amd64/Packages
./dists/offsec-internal/main/binary-amd64/Release
./dists/offsec-internal/main/binary-amd64/Packages.gz
./dists/offsec-internal/main/binary-i386
./dists/offsec-internal/main/binary-i386/Packages
./dists/offsec-internal/main/binary-i386/Release
./dists/offsec-internal/main/binary-i386/Packages.gz
./dists/offsec-internal/InRelease
$ 代表出口
导出索引...
$ 找 。
.
。/D b
./db/版本
./db/references.db
./db/contents.cache.db
./db/校验和.db
./db/packages.db
./db/release.caches.db
./conf
./conf/分布
./分布
./dists/offsec-内部
./dists/offsec-internal/Release.gpg
./dists/offsec-internal/发布
./dists/offsec-internal/main
./dists/offsec-internal/main/source
./dists/offsec-internal/main/source/Release
./dists/offsec-internal/main/source/Sources.gz
./dists/offsec-internal/main/binary-amd64
./dists/offsec-internal/main/binary-amd64/Packages
./dists/offsec-internal/main/binary-amd64/Release
./dists/offsec-internal/main/binary-amd64/Packages.gz
./dists/offsec-internal/main/binary-i386
./dists/offsec-internal/main/binary-i386/Packages
./dists/offsec-internal/main/binary-i386/Release
./dists/offsec-internal/main/binary-i386/Packages.gz
./dists/offsec-internal/InRelease
正如你可以看到, 惩戒 在一个中创建存储库元信息 分区 子目录。 它还初始化了一个内部数据库 db 子目录。
现在是添加您的第一个包的时候了。 首先,复制构建生成的文件 offsec- 默认值 包装offsec-defaults_1.0.dsc, offsec-defaults_1.0.tar.xz,
offsec-defaults_1.0_all.deb 和 offsec-defaults_1.0_amd64.changes) 到 /tmp
在托管包存储库的服务器上并询问 惩戒 包括包:
$ reprepro 包括 offsec-internal /tmp/offsec-defaults_1.0_amd64.changes
导出索引...
$ 查找池 池池/主池/主/o
池/主/o/offsec-defaults
pool/main/o/offsec-defaults/offsec-defaults_1.0.dsc pool/main/o/offsec-defaults/offsec-defaults_1.0.tar.xz pool/main/o/offsec-defaults/offsec-defaults_1.0。 XNUMX_all.deb
$ reprepro 包括 offsec-internal /tmp/offsec-defaults_1.0_amd64.changes
导出索引...
$ 查找池 池池/主池/主/o
池/主/o/offsec-defaults
pool/main/o/offsec-defaults/offsec-defaults_1.0.dsc pool/main/o/offsec-defaults/offsec-defaults_1.0.tar.xz pool/main/o/offsec-defaults/offsec-defaults_1.0。 XNUMX_all.deb
如您所见,它将文件添加到自己的包池中 池 子目录。
这个 分区 和 池 目录是您需要通过 HTTP(公开)可用以完成 APT 存储库设置的两个目录。 它们包含 APT 想要下载的所有文件。
假设您想在名为的虚拟主机上托管它 pkgrepo.offsec.com,你可以创建如下的Apache配置文件,保存到 /etc/apache2/sites-available/pkgrepo.conf offsec.com.conf,并启用它 a2ensite pkgrepo.offsec.com):
服务器名称 pkgrepo.offsec.com ServerAdmin [电子邮件保护]
错误日志 /var/log/apache2/pkgrepo.offsec.com-error.log
CustomLog /var/log/apache2/pkgrepo.offsec.com-access.log ”%h %l %u %t \”%r\” %>s %O” DocumentRoot /home/pkgrepo/reprepro
选项索引 FollowSymLinks MultiViews 要求所有授予
全部设置AllowOverride
服务器名称 pkgrepo.offsec.com ServerAdmin [电子邮件保护]
错误日志 /var/log/apache2/pkgrepo.offsec.com-error.log
CustomLog /var/log/apache2/pkgrepo.offsec.com-access.log ”%h %l %u %t \”%r\” %>s %O” DocumentRoot /home/pkgrepo/reprepro
选项索引 FollowSymLinks MultiViews 要求所有授予
全部设置AllowOverride
以及相应的 sources.list文件 在需要来自该存储库的包的机器上添加的条目如下所示:
deb http://pkgrepo.offsec.com offsec-internal main
# 如果您也想访问源包,请启用下一行
# deb-src http://pkgrepo.offsec.com offsec-internal main
deb http://pkgrepo.offsec.com offsec-internal main
# 如果您也想访问源包,请启用下一行
# deb-src http://pkgrepo.offsec.com offsec-internal main
您的软件包现已发布,应该可供您的联网主机使用。
虽然这是一个漫长的设置,但现在已经完成了“繁重的工作”。 您可以通过 PXE 启动联网机器,借助网络提供的预种子安装定制版本的 Kali Linux,无需交互,配置 SaltStack 以管理您的配置(并控制 Minion!),创建分叉的自定义包,并通过您的系统分发这些包。自己的软件包存储库。 这提供了对多个 Kali Linux 安装的集中管理和企业级控制。 简而言之,由于 Kali 对所有软件包更新的(半自动)安装,您现在可以快速部署为您的特定需求预先配置的高度安全的 Kali 系统并保持它们同步。