PrivateTmp: hook-от ја запиша датотеката, но каде отиде таа?
Приватен привремен именски простор ја крие датотеката наместо да ја избрише. Проверете го коренот на процесот пред да ја смените единицата, потоа дајте им вистинска патека на споделените податоци.
Hook-овите пријавуваат успех, а истата патека сѐ уште изгледа празна од shell. Двете тврдења можат да бидат точни истовремено, бидејќи systemd услугата може да живее во сопствен mount именски простор со приватен привремен директориум. Кога тоа ќе се разбере, интересното прашање станува дали запишувањето воопшто успеало.
Два привремени директориуми, една патека
Поставката за изолација ѝ дава на единицата приватен поглед на привремените директориуми наместо да ги направи само за читање. Процесите надвор од единицата не можат да видат што пишува таму, а сѐ што ќе остави се отфрла кога единицата ќе запре. Затоа патеката што ја печати hook-от и патеката проверена од shell можат да укажуваат на различни објекти со исто име.
Ова е проблем на видливост, и изгледа како проблем на губење податоци. Ништо не е избришано, бидејќи датотеката едноставно е во именски простор чиј член shell не е. Истата команда се однесува поинаку кога се извршува во единицата, и токму тоа набљудување обично го решава спорот. Прочитајте ги поставките на единицата пред да заклучите нешто за запишувањето.
Одделете го невидливото од незапишливото
Успешното запишување и неуспешното отворање даваат различен доказ, и таа разлика ја одредува поправката. Ако hook-от каже дека датотеката е создадена, но надворешен читач не може да ја најде, имате прашање за именскиот простор. Ако hook-от пријави грешка со дозвола или неуспешно отворање, датотеката никогаш не е запишана и никаква промена на именскиот простор нема да помогне.
systemctl show [email protected] -p PrivateTmp -p User -p Group -p RuntimeDirectory
systemctl show [email protected] -p MainPID --value
sudo ls -l /proc/PID/root/tmp/client-stateПатеката низ коренот на процесот го покажува сопствениот поглед на услугата на датотечниот систем, предмет на проверки на дозволите на тој процес додека сѐ уште работи. Читајте го журналот на единицата во истата сесија, бидејќи грешка при запишување и недостигачка датотека лесно се мешаат откако некој веќе одлучил за причината.
Дајте им на споделените податоци јасно место
Податоците што ѝ се потребни само на услугата припаѓаат во нејзиниот приватен привремен директориум. Податоците што друг процес мора да ги чита бараат патека дефинирана за двата, со наведен сопственик, режим и рок на важност. Одлучете кој од двата случаи го имате пред да ја уредите единицата. Повеќето од овие инциденти доаѓаат од третирање на приватна датотека како споделена.
[Service]
RuntimeDirectory=openvpn-hook-office
RuntimeDirectoryMode=0750Директориумот за извршување ја става папката под системската област за извршување, го создава за конфигурираниот корисник и група на единицата и го отстранува кога единицата запира. Додајте го преку drop-in за да остане единицата на пакетот недопрена, потоа превчитајте го менаџерот и рестартирајте ја таа инстанца, прифаќајќи дека нејзините клиенти повторно ќе се поврзат.
Зачувајте го секој директориум за извршување што веќе го бара инсталираната единица. Заменувањето на списокот наместо додавање кон него е чест начин да се скрши неповрзана функција што никој не ја поврзува со промената.
Два слоја привилегии можат да не се согласат
Менаџерот на услуги го создава директориумот за конфигурираниот корисник на единицата, додека VPN демонот може одделно да се спушти на сопствената сметка пред да изврши hook за поврзување. Тоа се различни слоеви, и тие можат да именуваат различни идентитети.
Директориум во сопственост на root со ограничувачки режим е целосно видлив за демон што веќе се откажал од привилегиите, а сепак незапишлив за него. Грешката тогаш се чита како проблем со дозволи, иако патеката постои точно таму каде што очекувавте. Споредете го сопственикот на директориумот со идентитетот што го пријавува hook-от. Кога тие се разликуваат, режимот никогаш не бил прашањето.
Проверете со кој идентитет hook-от навистина работи пред да го смените сопствеништвото. Менувањето на извршниот корисник на услугата за да се поправи директориум може да го промени пристапот до уреди и мрежните привилегии на друго место, што е висока цена за мал проблем.
Проверете го целото предавање
Потврдете четири работи одеднаш: hook-от пишува под својот вистински идентитет, предвидениот читач може да ја консумира датотеката, неповрзаните корисници не можат, и запирањето на единицата чисти како што е проектирано. Појавувањето на датотека во споделениот привремен директориум на домаќинот не е услов, и тоа обично е знак дека размената никогаш не добила сопствена патека. Тестирајте го читачот по рестарт, не само за време на првото извршување. Однесувањето при чистење е дел од дизајнот, затоа набљудувајте го наместо да го претпоставувате.
Трајната состојба припаѓа на место со соодветен животен век, бидејќи директориумот за извршување е наменет да исчезне. Изберете ја локацијата според животниот век, а не според удобноста. Таа навика ја спречува следната верзија на истото истражување.