Након укидања привилегија: који OpenVPN фајлови још раде?
Дескриптори отворени пре укидања настављају да раде; путање које се касније поново отварају не. Одредите који од три фајла у време извршавања ваша поставка мора поново да отвори.
Дуго време рада доказује само да је покретање успело са привилегијама које је демон имао у том тренутку. Откази који су овде важни долазе касније: нови клијент се повезује, листа опозива се замењује, помоћна скрипта мора да упише датотеку. Сваки од њих је ново отварање које изводи налог без привилегија, са сопственим питањем о дозволама и сопственом поруком о грешци. Три одлуке раздвајају поставку која наставља да ради од оне која пада на следећем догађају.
Одвојте оно што је учитано рано од онога што се отвара касније
Дескриптор је ручка на отвореном опису датотеке, а режим приступа је утврђен при стварању тог описа. Каснија промена корисника процеса не затвара ручку, зато кључна датотека прочитана као root наставља да ради после укидања. Ни режим се не мења: ручка отворена за читање не постаје уписна, а уписна ручка се не опозива само зато што је налог изгубио права на путањи. Те две чињенице објашњавају већину неочекиваног понашања у овим извештајима.
Друга половина је меморија. Демон може да рашчлани сертификат, задржи рашчлањени материјал и затвори датотеку; у употреби остају подаци, а не отворена датотека. Зато стални саобраћај не доказује ни да је дескриптор отворен ни да је назив путање достижан. Доказује само да је материјал потребан за тренутну сесију прибављен раније.
Касније отварање је друга трансакција. Изводи се под тренутним акредитивима, тренутним безбедносним контекстом и тренутним приказом монтирања, па путања која је била читљива при покретању може бити одбијена при следећој вези. Ротација додаје замку: упис нове датотеке преко истог назива путање оставља постојећи дескриптор везан за стари објекат, па поновно учитавање може изгледати успешно док демон још користи претходни садржај. Упоредите inode који процес држи са оним на диску пре него што поверујете у ротацију.
Именујте три читања у време извршавања и када се свако догађа
Три ресурса се обично отварају знатно после иницијализације и падају у различитим тренуцима. Конфигурациона датотека одређеног клијента чита се када се тај клијент повеже, па се може покварити за једног корисника док остали настављају. Подаци о опозиву проверавају се током аутентикације партнера и поново када се датотека замени. Привремени директоријум се дира само када скрипта или додатак нешто упише.
Ниједан од три не припада путу покретања, зато сервер који је недељама здрав може пасти при следећој вези. Категорија именује и власника исправке: прва два су дозволе читања конфигурације под налогом демона, а трећи је уписно место уске намене.
| Path reopened later | What triggers the open | First sign when it fails |
|---|---|---|
| Client configuration file | A connection for that client identity | One client rejected while others connect |
| Revocation data | Peer authentication, including after replacement | Revoked and valid peers both refused |
| Script or plugin temporary directory | A helper needs to create a file | The helper exits with a path error |
persist-key одговара на уже питање него што већина претпоставља. Он држи кључну датотеку отвореном кроз документована ресетовања SIGUSR1 и ping-restart, и не чини ништа за CCD датотеке, податке о опозиву, помоћне извршне датотеке или потпуно поновно покретање процеса. Они и даље следе сопствене путање отварања, под оним налогом који тада ради.
Потврдите налог и приказ који заиста има
Питајте демон који ради који налог користи уместо да верујете датотеци unit, па упоредите одговор са оним што unit поставља. Несклад је прво што треба решити, јер свака каснија провера дозвола ради као онај који процес заиста јесте. Затим прођите путању компоненту по компоненту; пролаз се процењује на сваком нивоу, па читљива датотека у директоријуму кроз који се не може проћи остаје нечитљива. Коначни режим датотеке је последње питање, а не прво.
Именски простори и сервисне пешчаре додају границе које власништво и битови режима не описују. Путања видљива у вашој љусци може недостајати или бити само за читање унутар chroot, именског простора монтирања или unit који скрива кућне директоријуме. Безбедносни модули додају још један слој, па датотека која изгледа читљиво ипак може бити одбијена при отварању.
ps -o user:12,pid,args -C openvpn
systemctl show -p User -p Group -p ProtectHome -p RootDirectory [email protected]
sudo -u openvpn namei -l /etc/openvpn/ccd/aliceУспешно читање у љусци администратора не проверава ниједан од тих спојених услова. Изведите проверу под налогом демона, са истим именским простором и пешчаром, или прихватите да резултат описује вашу љуску, а не сервер. Трећа наредба је јефтина верзија тог теста: исписује режим сваке компоненте и пада на првој кроз коју налог демона не може да прође.
Дајте упису у време извршавања сопствени директоријум
Читање је само половина списка. Помоћна скрипта може затражити стварање статусне датотеке, додатак може затражити упис стања поред своје конфигурације, а ти уписи нису покривени тиме што стабло конфигурације постаје уписно. Дајте конкретном директоријуму дозволу уписа коју његова функција тражи, са власником и режимом које можете да објасните. Претпоставите приступ само за читање свему што се само чита.
Држите дозволе приватног кључа одвојено од датотека политике. Кључ који мора поново да се прочита после ресетовања има другачији захтев од клијентске датотеке која се чита при свакој вези, а један попустљив режим за обоје даје више приступа него што проблем тражи. Посвећен налог демона са уским власништвом лакше се ревидира од широке групе. Када кључ мора да преживи ресетовања, persist-key уклања поновно читање уместо да прошири директоријум.
Одлучите на основу догађаја који можете да репродукујете
Живи тунел доказује један пут кроз код. Догађај коме је потребна датотека једини је тест који покрива отварање које вас занима, било да је нова веза клијента, замењена датотека опозива, дозвољено меко ресетовање или планирано поновно покретање. Изаберите догађај, изведите га и задржите прву грешку, а не последњу.
За меко ресетовање један сигнал и дневник unit показују да ли је кључ поново прочитан. Пошаљите сигнал, затим прочитајте последње редове које је unit уписао:
systemctl kill -s SIGUSR1 [email protected]
journalctl -u [email protected] -n 40 --no-pagerНе закључујте да компромитовани демон више не може да мења датотеке само зато што су привилегије спуштене. Шта још може зависи од преосталих акредитива, његових способности, директоријума у које може да пише и сваке уписне ручке коју још држи. Смањење привилегија сужава овлашћења, а списак отварања у време извршавања показује докле. Запишите ту границу поред конфигурације да је следећа особа не би поново откривала.