Документація
Оновлення агента
Агент оновлюється за розкладом, який ви задаєте, або тієї миті, коли ви натискаєте кнопку. Ця сторінка пояснює, що робить випуск надійним, коли платформа роздає його сама й як установити випуск вручну.
Що робить випуск надійним
Перш ніж новий виконуваний файл запуститься на вашому хості, мають збігтися два незалежні факти: його хеш має дорівнювати значенню, яке опублікувала платформа, і він має нести чинний підпис своїх сирих байтів, зроблений ключем випусків платформи.
- Контрольна сума доводить, що завантажене не пошкоджене. Про те, хто його зробив, вона не каже нічого.
- Підпис доводить, хто його зробив. Його перевіряє агент, перш ніж щось буде підготовлено, а потім ще раз перевіряє скрипт, який може змінити лише root, перш ніж виконуваний файл буде встановлено.
- Відкритий ключ, яким користується ця друга перевірка, належить root. Службовий обліковий запис, від імені якого працює агент, підмінити його не може, тож навіть компрометація агента не дасть виконати чужий файл від імені root.
- Випуск без підпису відхиляється. Так само відхиляється випуск, чий підпис не збігається, навіть якщо контрольна сума збігається.
Оновлення з панелі
Коли агент відстає, панель повідомляє про це вгорі його сторінки та у списку агентів. Натисніть кнопку, і платформа передасть агенту короткочасне посилання на завантаження тим зʼєднанням, яке вже відкрите.
- Один агент: банер на його сторінці або картка оновлення на вкладці налаштувань.
- Кілька одразу: оберіть їх у списку агентів і оновіть вибране. Число на кнопці враховує лише тих агентів, яких справді можна оновити просто зараз.
- На сторінці «Огляд» для кожного відсталого агента є окрема кнопка, тож шукати нічого не доведеться.
- Хід виконання переживає перезавантаження сторінки: він зчитується з команди, яка виконується, а не з того, що памʼятає браузер.
Нічний розклад
Кожен агент має розклад, і з коробки він увімкнений о 03:00 за центральноєвропейським часом. Якщо на одну з ваших годин є новіший випуск, платформа передає його агентові так само, як це робить кнопка. Решта не змінюється: той самий підписаний файл, ті самі перевірки на вузлі, те саме повернення до старого.
- Кілька годин на агента, щонайбільше шість, на сітці по пʼять хвилин. Шести вистачає на кожні чотири години й водночас достатньо мало, щоб прочитати одним поглядом.
- Години читаються за тим самим настінним годинником, що й решта панелі. Година, якої немає тієї ночі, коли годинник переводять уперед, виконується на годину пізніше, а не пропускається, а година, яка існує двічі, виконується один раз.
- Є вікно надолуження на пʼятнадцять хвилин і не більше. Оновлення, задумане на 03:00, о 09:00 вам не потрібне: ніч було обрано навмисне.
- Агент, який о своїй годині був поза мережею, пропускає ніч, не витрачаючи свого місця, і бере наступне. Агент, до якого можна було достукатися, але вже свіжий, місце таки витрачає, щоб його історія показала, що хтось дивився.
- Щонайбільше пʼять агентів одного облікового запису вирушають за хвилину. Флот із сорока завантажує приблизно по 22 МБ кожен, з однієї мережі, і розтягнути це на вісім хвилин уміщується у вікно надолуження.
- Ви отримуєте сповіщення, коли заплановане оновлення вдається і коли якесь не вдається, згруповане за обліковим записом. Агент, у якого не виходить, озивається щонайбільше раз на добу, щоб застряглий вузол не заповнював ваші сповіщення тим самим реченням.
Що відбувається на хості
Агент завантажує новий виконуваний файл поруч із собою, перевіряє контрольну суму й підпис і лише тоді завершує роботу. Systemd перезапускає службу, крок, що виконується від імені root, ще раз перевіряє підготовлений файл, встановлює його атомарно й переконується, що той справді запускається, перш ніж залишити його. Якщо щось із цього не вдається, старий файл лишається на місці, і служба піднімається на ньому.
Як зробити це вручну
Користуватися панеллю не обовʼязково. Усе, що робить кнопка, — це також кілька окремих команд, і панель друкує їх для вас із уже підставленими поточними контрольною сумою та підписом. Два кроки, які варто зберегти, якщо ви пишете власний скрипт, — це кроки перевірки:
Перевірте контрольну суму того, що ви завантажили.
echo "<sha256-from-the-panel> provibr-agent-linux-x86_64" | sha256sum -c -Перевірте підпис за відкритим ключем на хості. Саме цього кроку просте завантаження вам не дає, і саме він має значення.
openssl pkeyutl -verify -pubin -inkey /usr/local/lib/provibr-agent/license-signing.pub -rawin \
-in ./provibr-agent-linux-x86_64 -sigfile ./provibr-agent-linux-x86_64.sig