Обезбедување на OpenVPN клиент со фази што запираат при грешка
Пет фази спречуваат скрипта за обезбедување да остави половина инсталација: провери влезови, подготви го множеството, замени атомски, активирај еден сопственик, планирај повлекување.
Скриптите за обезбедување што пријавуваат грешка и продолжуваат се полоши од скриптите што никогаш не се извршуваат. Поставувањето на клиентот допира заштитени клучеви, идентитет на портата и служба што може веќе да служи сообраќај. Секое од овие бара услов за запирање, а скриптата мора да знае до која фаза стигнала кога застанала.
Третирај ја целата работа како една трансакција со пет контролни точки и направи секоја контролна точка сама да одбие да продолжи.
Поправи ги влезовите пред да го допреш датотечниот систем
Започни со експлицитен договор: еден идентитет, еден извор на профил, еден предвиден сопственик на службата. Провери дека профилот постои, дека сертификатот и клучот на кои упатува се читливи и дека целната папка припаѓа на очекуваниот пакет. Патека што се разрешува не е доказ дека материјалот зад неа е целосен.
Одбиј празни променливи рано. Непоставена $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 за разрешувачот што го инсталираше тунелот. Заврши со достигнување на еден ресурс поради кој постои тунелот.
Процес што работи и зелена икона во системската лента се факти за процесот, а не доказ дека идентитетот и политиката за сообраќај го преживеале предавањето.
Повторното извршување и повлекувањето се одделни работни текови
Второто извршување треба да се приближи кон истите прегледани датотеки и истиот сопственик, а не да создаде втора сметка или втор демон. Повлекувањето е сопствена постапка: запре го точниот сопственик, архивирај или избриши го локалниот профил според политиката и отповикај го идентитетот на портата. Бришењето на локална датотека со клуч не отповикува копија што веќе ја напуштила машината.
Задржи пат за враќање што не зависи од тунелот, како пристап до конзола или втора маршрута за управување. Промена во обезбедувањето што те заклучува надвор од машината е неуспешна промена, дури и кога секоја фаза пријавила успех.
Скриптата што вреди да се задржи е трансакција околу сопственоста и доказите. Краток список на привилегирани команди за копирање не е истото.