Скрипти за осигуряване, които съобщават грешка и продължават, са по-лоши от скрипти, които никога не се изпълняват. Настройката на клиента докосва защитени ключове, идентичност на шлюза и услуга, която може вече да обслужва трафик. Всяко от тях се нуждае от условие за спиране, а скриптът трябва да знае до кой етап е стигнал, когато е спрял.

Третирайте цялото нещо като една транзакция с пет контролни точки и накарайте всяка контролна точка да откаже да продължи сама.

Фиксирайте входните данни, преди да пипате файловата система

Започнете с явен договор: една идентичност, един източник на профил, един предвиден собственик на услугата. Проверете, че профилът съществува, че сертификатът и ключът, към които сочи, са четими, и че целевата директория принадлежи на очаквания пакет. Път, който се разрешава, не е доказателство, че материалът зад него е пълен.

Отхвърляйте празните променливи рано. Недефинирана $DEVICE, която се разгръща до нищо, превръща install -m 400 $KEY /etc/openvpn/client/ в копие, насочено към директория, и повредата идва по-късно като услуга, която не може да прочете своя ключ.

Сглобете набора от профили в подготвителна директория

Първо изградете пълния набор на частно място: профил, CA, клиентски сертификат, ключ и всеки помощен инструмент, който профилът извиква. Копирайте с install -m 400 -o root -g root, така че правата да се задават при създаването, а не след това. След това проверете препратките вътре в профила, защото относителен ред ca или key се разрешава спрямо работната директория на юнита, щом услугата стартира. Нищо не бива да се записва в живата директория, докато целият набор не се валидира.

Запишете несекретен отпечатък от това, което е произвело това изпълнение, например sha256sum office.conf до маркер за версия. Точно тази една стойност позволява на повторно изпълнение да различи обновяване от бездействие.

Заменяйте атомарно и пазете предишния набор

Преместете подготвения набор на мястото му с една операция, където файловата система позволява, и пазете прегледания предишен набор под име с времева марка. Частично копие, което оставя нов профил до стар ключ, създава услуга, която се автентикира с грешна идентичност и не записва нищо полезно за причината. Ако замяната не може да е атомарна, подредете преместванията така, че профилът да кацне последен.

Когато целта вече съществува, решете изрично дали това изпълнение е обновяване, идентично повторение или конфликт с профила на друго устройство. Тихото презаписване на профил, който принадлежи на друга идентичност, е начинът, по който две машини започват да споделят един сертификат. Вместо това откажете изпълнението и назовете конфликтния собственик.

Активирайте един собственик и го докажете

Изберете един път за активиране — инстанцията на systemd или NetworkManager — и го използвайте последователно. Стартирането на неуправляван процес openvpn до включен юнит дава два тунела, конкуриращи се обновявания на DNS и никакъв ясен отговор кой от тях е цел на команда за спиране. След активиране проверете systemctl is-active openvpn-client@office, после маршрута до отдалечения префикс, после resolvectl status за резолвера, който тунелът е инсталирал. Завършете, като достигнете един ресурс, заради който съществува тунелът.

Работещ процес и зелена икона в трея са факти за процеса, а не доказателство, че идентичността и политиката за трафик са преживели предаването.

Повторното изпълнение и извеждането са отделни работни потоци

Второ изпълнение трябва да се сближи до същите прегледани файлове и същия собственик, а не да създаде втори акаунт или втори демон. Извеждането е отделна процедура: спрете точния собственик, архивирайте или изтрийте локалния профил според политиката и отменете идентичността на шлюза. Изтриването на локален файл с ключ не отменя копие, което вече е напуснало машината.

Пазете път за възстановяване, който не зависи от тунела, например достъп до конзола или втори маршрут за управление. Промяна в осигуряването, която ви заключва извън машината, е неуспешна промяна, дори когато всеки етап е съобщил успех.

Скриптът, който си заслужава да се пази, е транзакция около собствеността и доказателствата. Кратък списък с привилегировани команди за копиране не е същото нещо.

Подобни статии