セキュアブートに使用する圧縮カーネルモジュールの署名

セキュアブートに使用する圧縮カーネルモジュールの署名

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 zfszfs.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です:)

おすすめ記事