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 пише под својим стварним идентитетом, предвиђени читач може да користи датотеку, неповезани корисници не могу, и заустављање јединице чисти како је пројектовано. Појављивање датотеке у дељеном привременом директоријуму хоста није услов, и обично је знак да размена никада није добила сопствену путању. Тестирајте читача после рестарта, не само током првог покретања. Понашање при чишћењу део је пројекта, зато га посматрајте уместо да га претпостављате.
Трајно стање припада месту са одговарајућим животним веком, јер је директоријум за извршавање намењен да нестане. Изаберите локацију по животном веку, а не по удобности. Та навика спречава следећу верзију истог истраживања.