Bug 48556 - integrity-sign script possible leaves immutable files
Summary: integrity-sign script possible leaves immutable files
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: ima-evm-integrity-check (show other bugs)
Version: unstable
Hardware: all Linux
: P5 major
Assignee: Anton V. Boyarshinov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-11-22 23:51 MSK by Nikolay A. Fetisov
Modified: 2023-11-22 23:55 MSK (History)
1 user (show)

See Also:


Attachments
Patch for /usr/sbin/integrity-sign script (311 bytes, patch)
2023-11-22 23:55 MSK, Nikolay A. Fetisov
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Nikolay A. Fetisov 2023-11-22 23:51:18 MSK
Для ima-evm-integrity-check 0.5.0-alt1, создание подписей IMA/EVM выполняется в скрипте integrity-sign.

Для данного скрипта установлены флаги '-eu', т.е. выполнение прерывается в случае возникновения ошибки.


При создании подписи файла в функции sign_one_file(), после подписывания файла через "evmctl sign" на файл
ставится флаг "immutable".
Задание подписей для всех файлов системы в функции sign_files() идёт в цикле

        verbose "Signing files..."
        while read file; do
                sign_one_file "$file" || message "Can't sign file $file"
        done

Соответственно, если при создании подписи какого-либо файла возникает ошибка в sign_one_file(),
то выдаётся сообщение и продолжается обработка списка файлов.


После завершения создания подписей ранее установленные флаги "immutable" сбрасываются в функции 
no_immutable_files() в цикле

        while read file; do
                chattr -i "$file"
        done

Если при вызове chattr возникает ошибка, то выполнение функции no_immutable_files() прерывается,
что оставляет в системе часть файлов с установленным ранее флагом "immutable".



Файлы для подписывания ищутся в т.ч. в /var/lib/ . Как минимум для LXC/LXD в /var/lib/lxcfs/ монтируется файловая система lxcfs, которая не поддерживает ни обычные, ни расширенные атрибуты файлов.
При попытке создать подписи для файлов в ней возникающие в sign_one_file() ошибки _пропускаются_, 
а при сбросе флагов "immutable" в no_immutable_files() ошибка в chattr вызывает _прерывание выполнения_ цикла 
по списку файлов - в итоге часть файлов, обработанных sign_files(), остаётся с установленными флагами "immutable".


Сразу на работе системы это не сказывается, но при следующем запуске updater-start такие файлы вызывают
ошибки при работе apt-get dist-upgrade, с невозможностью установки части пакетов, частичной установкой
пакетов, дублированием установленных пакетов и т.п.


Соответственно, имеет смысл обрабатывать в no_immutable_files() ошибки аналогично тому, как это делается
в sign_files() - соответствующий патч приложен.
Comment 1 Nikolay A. Fetisov 2023-11-22 23:55:42 MSK
Created attachment 15097 [details]
Patch for /usr/sbin/integrity-sign script