| Summary: | integrity-sign script possible leaves immutable files | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | Nikolay A. Fetisov <naf> | ||||
| Component: | ima-evm-integrity-check | Assignee: | manowar <manowar> | ||||
| Status: | NEW --- | QA Contact: | qa-sisyphus | ||||
| Severity: | major | ||||||
| Priority: | P5 | CC: | manowar, nbr | ||||
| Version: | unstable | ||||||
| Hardware: | all | ||||||
| OS: | Linux | ||||||
| Attachments: |
|
||||||
Created attachment 15097 [details]
Patch for /usr/sbin/integrity-sign script
|
Для 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() - соответствующий патч приложен.