19 июня 2024 года вышла подсистема инициализации и управления службами в Linux systemd 256.1, где исправлена проблема в systemd-tmpfiles —purge, приводившая к удалению всех домашних каталогов раздела /home при выполнении команды systemd-tmpfiles —purge, добавленной в systemd 256 для удаления всех файлов и каталогов, созданных через настройки в tmpfiles.d. Релиз стабильной версии systemd 256 состоялся 11 июня.
По информации OpenNET и Phoronix, в примечании к выпуску systemd 256 и в man-руководстве systemd-tmpfiles было указано, что опция «—purge» удаляет все файлы и каталоги, созданные через настройки tmpfiles.d, но название «tmpfiles» в названии утилиты вводило в заблуждение и создавало впечатление, что удаление касается только временных файлов. При этом настройки tmpfiles.d не ограничиваются временными файлами и также используются для автоматического создания несуществующих каталогов с данными. В частности, удаление содержимого домашних каталогов объясняется тем, что при помощи файла «/usr/lib/tmpfiles.d/home.conf» создавался раздел «/home» и, соответственно, команда «systemd-tmpfiles —purge» приводила к его удалению.
Примечательно, что первоначальное сообщение об этой ошибке не было принято Лукой Боккасси (Luca Boccassi), разработчиком systemd из Microsoft. Он заявил в ответ по этой проблеме, что «таким образом, функция, которая буквально задокументирована как «все файлы и каталоги, созданные записью tmpfiles.d/, будут удалены», о чём вы ничего не знали, звучала как «хорошая идея»? Вы хотя бы пошли и посмотрели, какие записи tmpfiles.d у вас были заранее? Может быть, не стоит просто запускать случайные команды, о которых вы ничего не знаете, игнорируя при этом то, что вам говорит документация? Просто мысль, ага».
В ответ на такую реплику Боккасси в сообществе разработчиков проекта указали на то, что в документации утилита systemd-tmpfiles до сих пор описывается как «инструмент для создания, удаления и очистки непостоянных и временных файлов и каталогов», несмотря на то, что это давно не соответствует действительности.
В конечном итоге, после долгих обсуждений в последние несколько дней, поведение systemd-tmpfiles всё таки было признано ошибочным и изменено.
В начале для исключения ошибочного удаления домашних каталогов разработчики systemd запланировали удалить опцию «—purge». Но после обсуждения ситуации они приняли изменение, ограничивающее область действия команды systemd-tmpfiles —purge. Эта команда теперь может быть выполнена только при явном указании в командной строке конкретного файла конфигурации из tmpfiles.d/ и приведёт к удалению лишь связанных с ним файлов и каталогов. Кроме того, в man-руководство systemd-tmpfiles добавлено более подробное описание опции и предупреждение о возможных последствиях.
Источник: habr.com