Посилила ізоляцію systemd для кожного юніта
Знизила оцінку відкритості (exposure) у пісочниці systemd для кожного юніта, який встановлює платформа: служба dead man's switch — з 9,6 UNSAFE до 1,5, відкритий в інтернет git‑сервер — з 8,3 EXPOSED до 1,5, — і додала перевірку парсером під час converge, після того як знайшла директиву з орфографічною помилкою, яку мовчки ігнорували три шаблони юнітів.
Роботу виконано: вересень 2026

Фото: Pexels / Pixabay 
Фото: daschorsch / Pixabay
кожен юніт у пісочниці — і друкарська помилка, яку ігнорували
Ситуація. Тринадцять юніт‑файлів встановлював цей репозиторій, і на продакшн‑хості вони працювали з привілеями, які супервізор надає за замовчуванням, тобто майже з усіма. Оцінка захищеності дала службі dead man’s switch 9,6 і назвала її небезпечною; git‑сервер, доступний з інтернету, отримав 8,3 і позначку «відкритий». Обидва числа були точними, і жодне ні до чого не спонукало, бо оцінка без порога — це число, яке люди звикають пропускати.
Завдання. Кожен юніт потребував пісочниці, співмірної з тим, що він насправді робить, а самі пісочниці — перевірки, бо хибна пісочниця відмовляє так: юніт запускається, а потім ламається там, де парсер цього не бачить.
Дія. Обмеження привілеїв додано до кожного шаблону юніта — верхня межа привілеїв на рівні власних привілеїв юніта, фільтр системних викликів, обмежені сімейства адрес і пам’ять, яка може бути записуваною або виконуваною, але ніколи водночас. Виміряні результати: dead man’s switch — з 9,6 до 1,5, git‑сервер — з 8,3 до 1,5, обидва юніти резервного копіювання — з 9,6 до 2,3 і 2,5. Під час роботи над ними знайшлося дещо цінніше за оцінки. Одна директива відтоді, як існують ці ролі, була написана з помилкою у трьох шаблонах юнітів — правдоподібна на вигляд назва, якої не існує; супервізор відповідає на неї записом у журналі, що не розпізнає ключ, і все одно запускає юніт. Пошук директиви через grep доводить лише, що її написали; що вона набула чинності, доводить тільки парсер. Тому тепер окрема роль перевірки під час converge проганяє кожен юніт через вбудований верифікатор супервізора, і її підключає кожна роль, що встановлює юніт. Чого ця перевірка досі не бачить, прямо сказано в тих самих документах: кожна директива, здатна зламати ці юніти, ламає їх під час виконання, а не під час розбору, а оцінка не скаже, чи скрипт досі доходить до останнього рядка.
Результат. Кожен юніт працює з тими привілеями, які йому потрібні, і без зайвих, числа виміряно, а не задекларовано, а клас дефектів, де описка непомітно перетворюється на відсутній засіб контролю, тепер обриває прогін. Межі вимірювання записано поруч із ним, і саме це вбереже наступного читача від надмірної довіри до зеленої зони.
Попередня робота: Побудувала моніторинг хоста з dead man's switch. Читати далі: Побудувала 7 ролей звітності лише для читання. Або перегляньте повне портфоліо.
Одна частина довшого переліку — і він увесь на цьому сайті.
Кожен запис написано однаково: ситуація, завдання, що ми зробили і що змінилося.

