UEFI/보안 부팅을 사용하여 Fedora 27에서 zfs 모듈을 서명하는 데 몇 가지 문제가 있습니다. 여기 누군가가 도움을 줄 수 있기를 바랍니다.
일반적으로 이 작업을 수행하는 방법에 대해 간략하게 설명하기 위해 이미 생성하고 다음 명령을 사용하여 efibootmgr에 등록한 키를 사용하여 VirtualBox 모듈에 서명합니다.
# /usr/src/kernels/$(uname -r)/scripts/sign-file sha256 ./key.priv ./key.der $(modinfo -n vboxdrv)
vboxdrv가 일반 커널 모듈로 존재하고 모든 커널 업데이트에 대해 동일한 작업을 성공적으로 수행하고 프로세스가 zfs를 사용하여 동일한 작업을 수행할 수 있을 만큼 충분히 일반적이기 때문에 잘 작동합니다. 그러나 그렇게 하려는 시도는 실패했습니다. 확인해 # modinfo -n zfs
보니 zfs 커널 모듈이 압축 파일로 존재하는 것 같습니다. /lib/modules/4.15.17-300.fc27.x86_64/extra/zfs.ko.xz
(현재 커널 버전에 맞는 것입니다.)
다른 모듈이 있는지 확인하기 위해 실행했지만 # find / -name zfs.ko
아무것도 반환되지 않았으므로 이 .xz 파일이 사용 가능한 유일한 zfs 모듈입니다. 좋아요, 그래서 # 을 실행합니다 xz --decompress zfs.ko.xz
. 이는 데이터가 손상되었음을 알려줍니다(xz 유틸리티는 이 오류를 반환하여 해당 파일이 xz 압축 파일이 아니거나 최소한 내장 xz에서 처리할 수 없는 방식으로 수정되었음을 나타냅니다).
# modinfo zfs
zfs.ko.xz 경로와 modinfo 오류만 반환됩니다.
그래서 나는 지금 헤매고 있습니다. 보안 부팅 비활성화는 실제로 고려하고 싶은 옵션이 아닙니다. 먼저 파일의 압축을 풀 수 없는 경우 압축된 모듈에 어떻게 서명합니까? 아니면 다운로드할 수 있는 키로 이미 서명되어 있으므로 등록해야 합니까?
답변1
압축된 모듈의 압축을 풀고 서명한 후 다시 압축할 수 있습니다.
unxz zfs.ko.xz
sign-file sha1 "${key}" "${x509}" "zfs.ko"
xz -f zfs.ko
또는 좀 더 일반적인 것입니다(저는 evdi에 사용합니다.https://gist.github.com/dop3j0e/2a9e2dddca982c4f679552fc1ebb18df)
for module in $(dirname $(modinfo -n evdi))/*.ko*; do
module_basename=${module:0:-3}
module_suffix=${module: -3}
if [[ "$module_suffix" == ".xz" ]]; then
unxz $module
echo sign-file sha1 "${key}" "${x509}" "${module_basename}"
sign-file sha1 "${key}" "${x509}" "${module_basename}"
xz -f ${module_basename}
elif [[ "$module_suffix" == ".gz" ]]; then
gunzip $module
sign-file sha1 "${key}" "${x509}" "${module_basename}"
gzip -9f $module_basename
else
sign-file sha1 "${key}" "${x509}" "${module_basename}"
fi
done
그냥 실행하면 sudo depmod -a
modprobe evdi
됩니다 :)