如何在由dracut为centOS 7创建的initramfs映像中执行tpm2_nvread?

西班牙口香糖

我想在启动时使用TPM 2.0加载对LUKS分区(根文件系统)的解锁。

keyscript=/path/to/script/etc/crypttab文件中使用a并没有成功,但是使用在这里找到的方法却取得了进步

我正在使用dracut构建初始ram fs图像。

因此,在中/usr/lib/dracut/modules.d/90crypt,我对几个文件进行了修改(根据我链接的指南):

module-setup.sh

# gives me access to these binaries at boot time in initramfs
function install() {
    # existing code
    # ...
    inst /sbin/tpm2_nvread
    inst /bin/tail
    inst /bin/perl
    inst /sbin/resourcemgr
}

cryptroot-ask.sh

resourcemgr &
# yum is only at tpm2-tools 1.1.0, so I can't read keys to a file
# this is my solution to grab from tpm, and convert the spaced out hex to binary
function gettpmkeyfile() {
    key=`tpm2_nvread -x 0x1500001 -a 0x40000001 -s 32 -o 0 | tail -n 1`
    key=${key//[[:blank:]]/}
    key=`echo $key | /bin/perl -ne 's/([0-9a-f]{2})/print chr hex $1/gie'`
    printf $key
}
gettpmkeyfile | cryptsetup luksOpen $device $luksname --key-file=-

/etc/dracut.conf

omit_dracutmodules+="systemd"
add_dracutmodules+="crypt"

我知道二进制文件已正确加载,并且使用luksAddKey从TPM添加了密钥,并且在使用密码短语引导后在外壳程序的命令行中测试了我的功能。

我的问题是,tpm2_nvread它引发了有关资源管理器无法初始化的错误(error 0x1)。

但是,我注意到,在正常启动中,资源管理器也会在此处失败,但不会阻止我使用tpm2-tools命令。

我尝试从elrepo(4.something)升级到最新的内核,并且添加了带有dracut的内核drievrs,如下所示:

dracut --add-drivers tpm_crb --force

这似乎没有帮助。

关于如何tpm2_nvread在initrd中工作的任何建议

西班牙口香糖

我找到了解决方案!

我将其添加/sbin/strace到已安装的二进制文件中,module-setup.sh以便可以tpm2_nvread在dracut shell中手动检查命令。原来的错误是我的网络无法访问。

tpm2命令用于libtcti与tpm通信,后者使用处的套接字127.0.0.1:2323

现在,至于为什么环回下降了,我不确定。我的猜测是90crypt在网络可用之前就进行了快速的运行,或者与我禁用了该事实有关systemd

所以我添加/sbin/ifupmodule-setup.sh,并将其添加到我的cryptroot-ask.sh

ifup lo inet loopback
sleep 3

不知道我是否需要睡觉,但我还是把它放了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在centos 7上创建救援initramfs映像?

如何在initramfs中获取/ dev / tpm *?

如何在Centos 7上为mongodb禁用THP

如何在CentOS上为PHP 7安装json扩展?

如何在CentOS中为用户指令设置目录

如何在虚拟框5.0.2中创建符号链接,以CentOS 7为来宾,以Windows 7为主机

如何在CentOS7中为python3安装python软件包

如何在CentOS 7中为Terminal制作键盘快捷键

如何在CentOS 7 Mate中为所有用户更改键盘布局?

如何在CentOS 7中为用户添加`cap_sys_admin`权限?

如何在BigQuery中为每条记录(由ID标识)找到所有不同的值?

如何在由代理模型处理的模型中为多个列设置项目委托?

如何在centos 7上为我的tomcat 7绑定端口80

如何在centos 7的桌面中创建目录

如何在CentOS 5.10上为已安装的STUNNEL创建服务

如何在CentOS 7上专门为Python3安装pip?

如何在Centos 7机器上为vim 7.4添加python支持?

如何在centOS 7上为所有用户安装WP-CLI

如何在VMWare工作站中运行的CentOS 7映像中增加屏幕锁定超时

如何在python2中打印出由双引号表示的大小为n的空字符串列表

如何在CentOS上禁用应急启动映像的创建?

如何在CentOS中创建SFTP用户?

如何在CentOS 7中安装pip?

如何在centOS 7中启动Apache

如何在 Centos 7 上为 root 用户安装 AWS CLI - /usr/local/bin 不在 root 用户的 PATH 中

如何在Centos 7中为SceneBuilder-8.3.0-1.x86_64找到并安装libXtst.so.6

如何在 Bash 中执行由数组表示的命令

如何在docker Registry API中为映像名称及其标签创建map [string] [] string?

如何在无头的CentOS Docker容器中启用secret-tool命令(由gnome-keyring,libsecret和dbus支持)?