PrivateTmp: хук запісаў файл, дык дзе ён?
Прыватная часовая прастора імёнаў хавае файл, а не выдаляе яго. Праверце корань працэсу перад зменай юніта, а затым дайце супольным даным сапраўдны шлях.
Хукі паведамляюць пра поспех, а той жа шлях з абалонкі ўсё яшчэ выглядае пустым. Абодва сцверджанні могуць быць праўдзівымі адначасова, бо служба systemd можа жыць у сваёй прасторы мантавання з прыватным часовым каталогам. Калі гэта зразумела, цікавае пытанне ў тым, ці ўдаўся запіс наогул.
Два часовыя каталогі, адзін шлях
Налада ізаляцыі дае юніту прыватны від на часовыя каталогі, а не робіць іх толькі для чытання. Працэсы па-за юнітам не бачаць, што ён там піша, а ўсё пакінутае ім адкідваецца, калі юніт спыняецца. Таму шлях, які друкуе хук, і шлях, які правяраюць з абалонкі, могуць адносіцца да розных аб'ектаў з аднолькавай назвай.
Гэта праблема бачнасці, і яна выглядае як праблема страты даных. Нічога не выдалілі, бо файл проста знаходзіцца ў прасторы імёнаў, членам якой абалонка не з'яўляецца. Тая ж каманда паводзіць сябе інакш пры запуску ўнутры юніта, і менавіта гэта назіранне звычайна вырашае спрэчку. Прачытайце налады юніта, перш чым рабіць высновы пра запіс.
Аддзяліце нябачнае ад незапісвальнага
Паспяховы запіс і няўдалае адкрыццё даюць розныя доказы, і гэтае адрозненне вызначае рамонт. Калі хук кажа, што файл створаны, але знешні чытач не можа яго знайсці, у вас пытанне прасторы імёнаў. Калі хук паведамляе пра памылку доступу або няўдалае адкрыццё, файл ніколі не запісваўся, і ніякая змена прасторы не дапаможа.
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 можа асобна апасці да свайго ўласнага ўліковага запісу перад запускам хука злучэння. Гэта розныя ўзроўні, і яны могуць называць розныя асобы.
Каталог ва ўласнасці root з абмежавальным рэжымам цалкам бачны дэману, які ўжо скінуў прывілеі, і ўсё ж недаступны яму для запісу. Тады памылка чытаецца як праблема правоў, хоць шлях існуе менавіта там, дзе вы чакалі. Параўнайце ўладальніка каталога з асобай, якую паведамляе хук. Калі яны розныя, рэжым ніколі не быў пытаннем.
Праверце, ад імя якой асобы насамрэч працуе хук, перад зменай уласнасці. Змена карыстальніка выканання службы, каб выправіць каталог, можа змяніць доступ да прылад і сеткавыя прывілеі ў іншых месцах, што вялікая цана за малую праблему.
Праверце ўсю перадачу
Пацвердзіце чатыры рэчы адразу: хук піша ад імя сваёй рэальнай асобы, прызначаны чытач можа спажыць файл, староннія карыстальнікі не могуць, а спыненне юніта прыбірае ўсё як задумана. З'яўленне файла ў супольным часовым каталозе хоста не з'яўляецца патрабаваннем, і звычайна гэта знак, што абмен так і не атрымаў уласнага шляху. Праверце чытача пасля перазапуску, а не толькі падчас першага запуску. Паводзіны ачысткі — частка задумы, таму назірайце за імі, а не ўяўляйце іх.
Пастаянны стан належыць туды, дзе тэрмін жыцця супадае, бо каталог часу выканання павінен знікаць. Выбірайце месца па тэрміне жыцця, а не па зручнасці. Гэтая звычка прадухіляе наступную версію гэтага ж расследавання.