Systemd – это программное обеспечение, которое на протяжении многих лет вызывало множество споров в сообществе Linux. Несмотря на это, оно стало стандартной и необходимой частью почти всех дистрибутивов Linux.
Помимо хорошо известной роли менеджера сервисов в Linux, он предоставляет множество других возможностей. Одной из таких возможностей является команда systemd-tmpfiles
. Согласно man-странице, она кратко гласит: Создает, удаляет и очищает непостоянные и временные файлы и каталоги.
«Отличная возможность очистить каталог /var/tmp_», – так, вероятно, подумал один пользователь Linux, используя недавно выпущенный systemd 256, прежде чем запустить systemd-tmpfiles --purge
, и произошло следующее:
Стало появляться множество предупреждений, в том числе о путях в /home (не удавалось восстановить время модификации…?). Что делает инструмент временной очистки в моем домашнем каталоге? Это нехорошо. Мое сердце начало биться быстрее, и я нажал Ctrl + C так быстро, как только мог
Несмотря на его быструю реакцию, некоторые файлы были безвозвратно утеряны. Конечно, первой реакцией было оповещение разработчиков systemd на странице проекта на GitHub о проблеме.
Сразу же после этого был получен ответ от разработчика systemd, сотрудника Microsoft, в котором говорилось следующее:
Значит, опция, которая в буквальном смысле слова гласит: «Все файлы и каталоги, созданные записью tmpfiles.d/, будут удалены», о которой вы ничего не знали, показалась вам «хорошей идеей»? Вы хотя бы посмотрели, какие записи в tmpfiles.d у вас были до этого? Может быть, не стоит просто запускать случайные команды, о которых вы ничего не знаете, игнорируя то, что говорит вам документация?»
Делайте выводы о таком отношении. Хорошо то, что этому вопросу было уделено должное внимание, что привело к значительным дебатам с участием Леннарта Поттеринга, сотрудника Microsoft и вдохновителя создания systemd.
Чтобы прояснить проблему, ее подробное обсуждение привело бы к тому, что объяснение превратилось в длинный и сложный технический документ. Если говорить проще, то основные проблемы связаны с тем, как systemd-tmpfiles
обрабатывает конфигурационные файлы, расположенные в «/usr/lib/tmpfiles.d/», в частности файл «home.conf».
Важная часть заключается в том, что пользователи, особенно те, кто не знаком с глубокими тонкостями конфигурации systemd, могут не знать о широких возможностях этой команды, выходящих далеко за рамки простой очистки временных файлов.
Более того, документация команды усугубляет эту ситуацию, не предупреждая должным образом о возможных последствиях использования опции --purge
без детального знания настроенных путей. И последнее, но не менее важное: давайте посмотрим правде в глаза – systemd-tmpfiles
– это очень обманчивое название для тех функций, которыми она обладает.
Эта оплошность привела к призывам улучшить документацию, чтобы предотвратить подобные опасные злоупотребления в будущем.
В обсуждениях на GitHub предлагается добавить более четкие предупреждения или изменить поведение команды, чтобы она не выполнялась без указания явных путей конфигурации. Такие изменения помогут снизить риски и сделать прозрачнее работу этого инструмента для конечных пользователей.
Хорошей новостью является то, что после появления сообщений об этой проблеме разработчики systemd и лично Леннарт Поттеринг быстро предложили изменения в конфигурации systemd-tmpfiles
.
Был отправлен ключевой запрос на исправление, чтобы уточнить область действия команды, гарантируя, что она явно исключает домашние каталоги или любые критические области, если они явно не указаны системными администраторами.
Результатом всего этого стал скорый выпуск systemd 256.1 с внесенными в него необходимыми изменениями. Вы можете следить за ходом обсуждения здесь, а также найти комментарии по этой теме на X и Mastodon.
Комментарии (0)