首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在早期引导期间使用initramfs加载密钥和设置IMA/EVM

在早期引导期间使用initramfs加载密钥和设置IMA/EVM
EN

Stack Overflow用户
提问于 2020-08-11 00:01:10
回答 1查看 316关注 0票数 0

我正在尝试在Debian Buster kernel v5.7.13中创建一个init脚本,该脚本为Linux的IMA子系统加载一些密钥。按照this man page for evmctl上的说明,我在/etc/initramfs-tools/scripts/local-top/ima.sh上编写/复制了一个脚本,如下所示:

代码语言:javascript
运行
复制
#!/bin/sh

# mount securityfs if not mounted
SECFS=/sys/kernel/security
grep -q  $SECFS /proc/mounts || mount -n -t securityfs securityfs $SECFS

# search for IMA trusted keyring, then for untrusted
ima_id="`awk '/\.ima/ { printf "%d", "0x"$1; }' /proc/keys`"
if [ -z "$ima_id" ]; then
    ima_id=`/bin/keyctl search @u keyring _ima 2>/dev/null`
    if [ -z "$ima_id" ]; then
        ima_id=`keyctl newring _ima @u`
    fi
fi
# import IMA X509 certificate
# evmctl import /etc/keys/x509_ima.der $ima_id
evmctl import /etc/keys/x509_evm.der $ima_id

# search for EVM keyring
evm_id=`keyctl search @u keyring _evm 2>/dev/null`
if [ -z "$evm_id" ]; then
    evm_id=`keyctl newring _evm @u`
fi
# import EVM X509 certificate
evmctl import /etc/keys/x509_evm.der $evm_id

# a) import EVM encrypted key
cat /etc/keys/kmk | keyctl padd user kmk @u
keyctl add encrypted evm-key "load `cat /etc/keys/evm-key`" @u

# enable EVM
echo "1" > /sys/kernel/security/evm

在那之后,我通过运行update-initramfs -u更新了我的initramfs镜像,它运行到完成时没有错误。然而,当我尝试引导机器时,我得到了以下错误(从我的VM截图)。

我是不是漏掉了一个步骤?如何使某些文件可用于initramfs脚本?当系统完全启动时,我可以很好地执行脚本。

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-28 01:47:00

我在一段时间之前就想出了解决方案,但一直没有时间回答我自己的问题:)

问题是我没有将evmctlkeyctl二进制文件复制到initramfs中,这就是为什么它找不到它们的原因。为了加载这两个二进制文件,我使用了以下钩子脚本:

代码语言:javascript
运行
复制
#!/bin/sh
# Includes IMA's necessary components in the initramfs image
# Place in /etc/initramfs-tools/hooks

PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case $1 in
    prereqs)
        prereqs
        exit 0
        ;;
esac

. /usr/share/initramfs-tools/hook-functions
# Begin real processing below this line

# Copy executables we need to initramfs
copy_exec /usr/bin/keyctl /usr/bin
copy_exec /usr/bin/evmctl /usr/bin

# Copy other files to initramfs
mkdir -p $DESTDIR/etc/keys
cp -a /etc/keys/x509_ima.der $DESTDIR/etc/keys

exit 0

以及在系统引导期间执行的以下脚本:

代码语言:javascript
运行
复制
#!/bin/sh
# Load keys for IMA
# Place in /etc/initramfs-tools/scripts/local-top

PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case $1 in
    prereqs)
        prereqs
        exit 0
        ;;
esac

. /scripts/functions
# Begin real processing below this line
if [ ! -x "/usr/bin/keyctl" ]; then
    panic "keyctl executable not found"
fi

if [ ! -x "/usr/bin/evmctl" ]; then
    panic "evmctl executable not found"
fi

if [ ! -f "/etc/keys/x509_ima.der" ]; then
    panic "IMA x509 certificate not found"
fi

# Mount securityfs if not mounted
SECFS=/sys/kernel/security
grep -q  $SECFS /proc/mounts || mount -n -t securityfs securityfs $SECFS

# Create an IMA untrusted keyring
ima_id=`keyctl newring _ima @u`

# Import IMA x509 Certificate
evmctl import /etc/keys/x509_ima.der $ima_id

exit 0

然后,为了生成initramfs映像,我使用了mkinitramfs命令。如果将来有任何人访问initramfs-tools(8)手册,并想知道我是如何得到这个答案的,以及我是如何制作我的脚本的,那么这个过程中有很多描述。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63343754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档