Bug 48556

Summary: integrity-sign script possible leaves immutable files
Product: Sisyphus Reporter: Nikolay A. Fetisov <naf>
Component: ima-evm-integrity-checkAssignee: Anton V. Boyarshinov <boyarsh>
Status: NEW --- QA Contact: qa-sisyphus
Severity: major    
Priority: P5 CC: boyarsh
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
Patch for /usr/sbin/integrity-sign script none

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