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 лежит?

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

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

Deleted
()
Ответ на: комментарий от 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
 #!/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 - это функция специально для копирования исполнимых бинарников. Она автоматически копирует все библиотеки, нужные бинарнику. Не факт, что он работает и имеет смысл для произвольных файлов. И ещё ей похоже надо указывать путь назначения вторым аргументом.

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

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

$ keyctl link @us @s

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

Gunburgender
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.