LINUX.ORG.RU

keyctl_read_alloc IMA/EVM

 , , ,


0

2

Пытаюсь подключить IMA/EVM основываясь на вики: https://sourceforge.net/p/linux-ima/wiki/Home/#compiling-the-kernel-with-evmima-appraisal-enabled

TPM у меня нет, ибо виртуалка (а может и совсем нет), поэтому для генерации мастер ключа поступаю следующим образом:

# To create and save the kernel master key (user type):
$ su -c 'modprobe trusted encrypted'
$ su -c 'keyctl add user kmk-user "`dd if=/dev/urandom bs=1 count=32 2>/dev/null`" @u'
$ su -c 'keyctl pipe `keyctl search @u user kmk-user` > /etc/keys/kmk-user.blob'
# Create the EVM encrypted key
$ su -c 'keyctl add encrypted evm-key "new user:kmk-user 32" @u'
$ su -c 'keyctl pipe `keyctl search @u encrypted evm-key` >/etc/keys/evm-user.blob'

Однако

$ su -c 'keyctl add user kmk-user "`dd if=/dev/urandom bs=1 count=32 2>/dev/null`" @u'
Password: 
24606028
$ su -c 'keyctl pipe `keyctl search @u user kmk-user` > /etc/keys/kmk-user.blob'
Password: 
keyctl_read_alloc: Permission denied

При этом

$ systemctl show root@ubuntu | grep KeyringMode
KeyringMode=private

Не могу ничего сделать, ключи сгенерены, файлы через evmctl sign можно подписать, но толку то, EVM не включается. Где-то натыкался на формуе, что это systemd блокирует keyctl, но как поменять режим keyring’ов я не знаю.

Скрипт из initramfs обваливается, потому что (почему-то) не может прочитать файл сертификата x509, хотя он явно лежит в нужной папке

/etc/keys$ ls
kmk-user.blob    privkey_ima.pem  x509_evm.der
privkey_evm.pem  pubkey_evm.pem   x509_ima.der

Может кто-то занимался этой технологией без сборки ядра с нуля? Флаги в последней доступной для скачивания убунте все соответствуют. А то получается ни ключи не поэкспортировать, ни запустить EVM в принципе - не могу понять в чем причина

Скрипт из initramfs обваливается, потому что (почему-то) не может прочитать файл сертификата x509, хотя он явно лежит в нужной папке

Файл внутри самого initramfs лежит?

mironov_ivan ★★★★★ ()
Последнее исправление: mironov_ivan (всего исправлений: 1)
Ответ на: комментарий от Gunburgender

Возможно, на момент запуска этого скрипта реальный корень ещё не примонтирован и, соответственно, файлы читать неоткуда. Так что надо класть их вместе со скриптом внутрь initramfs.

mironov_ivan ★★★★★ ()
Ответ на: комментарий от Gunburgender

Хук лежит в папке с хуками, в общем, все по гайду, как говорится /etc/initramfs-tools/hooks/ima.sh:

```bash #!/bin/sh

. /usr/share/initramfs-tools/hook-functions

copy_exec /etc/keys/evm-key copy_exec /etc/keys/pubkey_evm.pem copy_exec /etc/ima_policy copy_exec /bin/keyctl copy_exec /usr/bin/evmctl /bin/evmctl ```

Gunburgender ()
Ответ на: комментарий от Gunburgender

У меня не убунта, но судя по ману, copy_exec - это функция специально для копирования исполнимых бинарников. Она автоматически копирует все библиотеки, нужные бинарнику. Не факт, что он работает и имеет смысл для произвольных файлов. И ещё ей похоже надо указывать путь назначения вторым аргументом.

mironov_ivan ★★★★★ ()
Ответ на: комментарий от mironov_ivan

В итоге после долгих попыток все-таки проблема решилась. В одном из issue’s на гитхабе systemd по поводу keyctl мелькнул коммент, как решить траблу - при настройке EVM, где угодно, хоть в initramfs, связать кольца юзер сессии с текущей сессией:

$ keyctl link @us @s

Теперь не могу понять как настроить запрет на чтение, запись и исполнение с помощью одной только ima policy

Gunburgender ()