По намалувањето на привилегиите: кои 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Не заклучувајте дека компромитиран демон веќе не може да менува датотеки само затоа што привилегиите биле намалени. Што сè уште може зависи од преостанатите акредитиви, неговите способности, папките во кои може да пишува и секоја запишлива рачка што сè уште ја држи. Намалувањето на привилегиите ја стеснува власта, а списокот на отворања во време на извршување покажува колку. Запишете ја таа граница до конфигурацијата за следната личност да не мора повторно да ја открива.