Шифрування бази даних
Libre WebUI шифрує конфіденційні значення на рівні застосунку до запису в сховище.
Метод шифрування
Сервер використовує AES-256-GCM через crypto Node.js. Ключ має містити 32 байти у вигляді 64-символьного шістнадцяткового рядка:
ENCRYPTION_KEY=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
Створення ключа:
openssl rand -hex 32
Зберігання ключа
Libre WebUI завантажує ключ у такому порядку:
ENCRYPTION_KEYіз середовища.- Збережений файл
.encryption_keyу вибраномуDATA_DIR. - Лише для нового сховища — щойно створений ключ, надійно записаний у
DATA_DIR/.encryption_keyдо запуску бази.
Якщо ключ є і в середовищі, і у файлі, значення мають збігатися, інакше запуск завершується помилкою. Наявний зашифрований стан без початкового ключа також безпечно блокує запуск; Libre ніколи не створює заміну для наявного сховища.
Важливі правила
- Створюйте резервну копію
ENCRYPTION_KEYразом із базою. - Не змінюйте ключ без плану міграції зашифрованих значень.
- Втрата ключа означає неможливість відновити дані.
- Зміна без повторного шифрування зробить наявні значення нечитабельними.
Що захищено
Шифрування застосовується шляхами коду, які використовують службу шифрування або її допоміжні функції. Воно призначене для конфіденційних значень, як-от облікові дані та приватні дані користувача, які проходять цими шляхами.
Це не повнодискове шифрування, не шифрування сторінок SQLite і не наскрізне шифрування між користувачем і браузером. Для цих рівнів використовуйте шифрування диска й HTTPS.
Дані Work
Шифрування застосунку не шифрує все завдання Work. Вихідні файли й залежності є звичайними файлами в іменованих томах Docker. Розмови, результати інструментів, вивід команд і метадані зберігаються в SQLite й не стають автоматично зашифрованими лише через шифрування деяких шляхів облікових даних.
За потреби захищайте корінь даних Docker і DATA_DIR контролем доступу та шифруванням диска. Разом копіюйте базу, ENCRYPTION_KEY і керовані томи Work. Надсилання завдання віддаленій моделі також може розкрити провайдеру контекст, файли або вивід команд; шифрування сховища не змінює цієї мережевої межі.
Docker і Kubernetes
Для промислового середовища явно задайте стабільний ключ:
ENCRYPTION_KEY=replace-with-64-hex-characters
DATA_DIR=/data
Підключіть DATA_DIR до постійного сховища. У Kubernetes зберігайте ключ у Secret, а дані — на PersistentVolume.
Усунення неполадок
Неправильна довжина ключа
Ключ повинен мати рівно 64 шістнадцяткові символи. Створіть новий:
openssl rand -hex 32
Дані не розшифровуються після повторного розгортання
Перевірте той самий ENCRYPTION_KEY і підключення того самого тому DATA_DIR.
Під час розробки створено новий ключ
Зберігайте DATA_DIR/.encryption_key разом із базою. Можна також задати те саме значення через ENCRYPTION_KEY; за наявності обох вони мають збігатися.