Не дозволяйте NetworkManager показувати збережений пароль VPN
Питайте щоразу, передайте у зв’язку ключів або тримайте файл лише для root. Кожен вибір має іншу експозицію, і прапорець пароля має їй відповідати.
NetworkManager може тримати пароль VPN, щоб з’єднання піднімалося без будь-чийого введення, і може знову показати це значення в редакторі або через nmcli --show-secrets. Є три моделі володіння, а поведінка показу — лише симптом того, яку ви обрали. Спершу виберіть модель, потім задайте прапорець, що їй відповідає, замість того щоб ховати поле за заповнювачем, який заплутає наступну людину.
Три моделі володіння
Перша модель питає щоразу. Нічого не зберігається, секрет існує лише на час активації, і кожен, хто запускає з’єднання, мусить знати пароль. Це найменш зручний варіант і найпростіший для захисту.
Друга передає секрет у зв’язку ключів, що належить користувачеві. Агент розблоковується на старті сеансу й видає значення на запит, що тримає його поза файлом з’єднання, але прив’язує з’єднання до сеансу цього користувача. Звідси дві умови: агент має працювати й має бути розблокований.
Третя зберігає захищені облікові дані для системного з’єднання. Воно переживає перезавантаження й працює до чийогось входу, а натомість значення лежить на диску під захистом прав файлу, а не шифрування.
Кожна модель розумна в належному контексті. Помилка — змішувати їх, і саме так ноутбук отримує секрет у двох місцях і без ясної відповіді, який із них головний. Запишіть, яку модель використовує профіль. Один рядок у командному посібнику позбавить наступну людину вигадування четвертого місця для пошуку.
Прочитайте поточний стан перед зміною
Погляньте на профіль і на стан секрету як користувач, що керує з’єднанням. Друга команда — та, що каже, чи значення справді читається.
nmcli connection show "Office VPN"
nmcli --show-secrets connection show "Office VPN"
sudo stat -c '%U %a %n' /etc/NetworkManager/system-connections/*.nmconnection
Файл ключа в цьому каталозі зазвичай належить root і має режим 600. Це не пускає звичайних користувачів і не стримує root, що важливо, коли машина спільна або коли резервна копія виконується від root.
Права файлу — це межа, а не шифрування. Хто може прочитати файл від root, той бачить пароль відкритим текстом. Це прийнятний обмін для сервера без нагляду й поганий для спільної робочої станції. Одноразовий запис позбавляє довгої суперечки про те, чи захищене значення.
Що робить кожне значення прапорця
Секрет VPN має властивість flags, і значення не є очевидними лише з чисел.
| Value | Meaning | Practical effect |
|---|---|---|
| 0 | No special flag | Secret is typically saved with the connection |
| 1 | Agent-owned | A keyring or secret agent supplies it |
| 2 | Not saved | Prompted at each activation |
| 4 | Not required | Connection proceeds without asking |
Фактична поведінка залежить також від плагіна й від того, чи працює агент, тож вважайте таблицю договором, а спостережувану поведінку — тим, що ви перевіряєте. Значення, яке працює на одному робочому столі, може поводитися інакше на сервері без сеансу. Саме в цій прогалині живе більшість заплутаних заявок.
Задайте властивість явно, замість того щоб видаляти рядок і сподіватися. Відсутній прапорець — не політика, і наступне оновлення пакета може заповнити його чимось, чого ви не мали на увазі.
Узгодьте модель із моментом, коли запускається з’єднання
Якщо з’єднання запускається лише тоді, коли користувач увійшов, володіння агентом добре пасує й тримає секрет поза файлом. Якщо воно запускається під час завантаження, до появи будь-якого сеансу, агент вам не допоможе.
Для більшості машин це все рішення. Це також пояснює клас заплутаних звітів, де з’єднання працює інтерактивно й зривається після перезавантаження. Прапорець ніколи не змінювався; змінився контекст.
Для випадку без нагляду практична відповідь — обмежений файл, що належить root, або схвалене джерело облікових даних. Тримайте його поза профілем з’єднання, якщо цей профіль колись експортується чи копіюється на іншу машину.
Якщо значення вже було видимим, змініть його
Зміна прапорця не торкається самого пароля. Значення, що з’явилося на знімку екрана, в історії shell, у пакеті, надісланому до підтримки, або у файлі, який могли відкрити інші користувачі, слід вважати розкритим.
Змініть його на сервері, потім виправте клієнт і завершіть будь-який сеанс, що автентифікувався старим. Видалення локального з’єднання нічого не відкликає на тому боці, і саме це люди пропускають.
Потім перестаньте класти пароль у командний рядок. Він потрапляє в історію shell і може з’явитися у списку процесів; використовуйте інтерактивний запит або агент.
Перевірте, підключившись наново
Повторіть команду, що показала секрет, і переконайтеся, що поле більше не виводиться. Потім від’єднайтеся й підключіться знову, а якщо з’єднання запускається автоматично — перезавантажтеся, бо цікавий збій з’являється лише тоді, коли змінюється контекст сеансу.
Якщо секрет усе ще показується, його видає інший профіль або інший агент. Огляньте активне з’єднання й зв’язку ключів замість видалення файлів, доки симптом не зміститься.