Hook-yada isku xirka ee daemon-ka VPN waxay ku shaqeeyaan sida daemon-ka, taasna badanaa macneheedu waa inay ku shaqeeyaan sida root. Daqiiqadda mid ka mid ah hook-yadan uu wax ku qoro galka guriga qof ama uu dib u bilaabo caawiye desktop-ka, waxaad dhacdo shabakadeed siisay awood ay ku dhaqanto sida isticmaale maxalli ah oo kasta. Jidka gaaban ee caadiga ah, oo ah in magaca isticmaalaha laga akhriyo doorsoome deegaan oo la gudbiyo, taas ma hagaajinayso. Waxay kaliya dib u sumcaddaynaysaa ficilka iyada oo aan beddelin koontada fulinaysa. Waxa shaqeeya waa wareejin saddex qaybood leh, halkaas oo tallaabada mudnaanta leh ay sheegto waxa dhacay, unug gaar ahna uu ficilka ku fuliyo aqoonsiga saxda ah.

Magaca isticmaalaha ee deegaanka maaha beddelka aqoonsiga

Unix waxay go'aansataa waxa habsocodku taaban karo iyada oo ku saleysan aqoonsiga isticmaalaha ee waxtarka leh, ma aha sida ku saleysan xargaha deegaankiisa. Dejinta USER=alice ama dhoofinta LOGNAME waxay beddeshaa waxa software taxadar la'aan ah ku daabaco soo-saarkeeda; waxba kama beddesho hubinta lahaanshaha faylasha. Hook ku shaqeeya sida root oo leh doorsoomahaas ayaa wali u furaya faylasha Alice sida root.

Magacyaduna isku mid maaha. Gelitaanka gelitaanka fog, koontada Unix-ka maxalliga ah iyo magaca guud ee shahaadada waa saddex aqoonsi oo inta badan isku beelmaala mararka qaarna aan isku beelmaalin. Isticmaalaha isu caddeeya sida a.smith waxaa laga yaabaa inuusan haysan wax koonto maxalli ah ama lagu khariideeyo asmith iyada oo loo marayo adeeg hagaha. Naqshad kasta oo u malaysa in hal xarig ay u adeegto saddexda door ayaa ku burburi doonta qandaraaslaha koowaad.

Marka su'aasha koowaad maaha «isticmaale kee ayaa ku xiran» ee waa «koonto maxalli ah oo kee ayaa loo ogolaaday inuu sameeyo ficilkan». Ka jawaab taas keydka xogta koontadaada, ma aha waxa macmiilku soo diray:

id -u alice
getent passwd alice | cut -d: -f1,3,6
stat -c '%U:%G %a %n' /home/alice/.local/state/vpn-status.json

Amarka saddexaad waa kan dadku ka boodaan. Haddii faylka bartilmaameedka ah uu leeyahay root sababtoo ah hook-kii hore ayaa abuuray, ficil isticmaale si sax ah loo habeynayay wuu dhici doonaa iyada oo leh khalad fasax oo u eg dhibaato systemd oo aan ahayn.

Daemon-ku wuu sii joogaa meeshiisa

Beddelka User= ee adeegga VPN laftiisa oo loo beddelo Alice waa kabaalka khaldan. Waxay beddeshaa sida daemon-ku u xiro is-dhexgalka, u akhriyo furayaasha, u qoro faylka xaaladdiisa oo u maamulo dariiqa, waxayna khatartaas oo dhan u rartaa unug shaqaynayay. Daemon-ku wuxuu u baahan yahay mudnaantiisa; ficilka xiga ma baahna.

Fiiri waxa unuggu dhab ahaan sameynayo ka hor inta aanad taaban. Laba amar ayaa kuu sheegaya aqoonsiga fulinta iyo sadarka amarka saxda ah ee dhaqan galay, oo ay ku jiraan wax kasta oo ka sarreeya lagu daray:

systemctl show -p User -p Group -p ExecStart openvpn-server@server
systemctl cat openvpn-server@server

Ku rakibidda xirmo caadi ah daemon-ku waa root, skriptiga --up na wuu dhaxlaa taas. Xaqiiji taas halkii aad ka malayn lahayd, sababtoo ah qaybsi adag ayaa laga yaabaa inuu u raray koonto u gooni ah, iyo drop-in gacan lagu qoray ayaa laga yaabaa inuu hook-ga ku socodsiiyo duubis leh sharciyo kale.

Saddex qaybood oo magac leh, hal kicin cidhiidhi ah

Habaynta ka badbaadda under-hawleed waxay leedahay dhacdo, kicin iyo ficil. Daemon-ku wuxuu soo sheegaa in fadhi magac leh uu soo kacay. Kicin-ku wuu aqbalaa xaqiiqdaas yar oo wuxuu codsadaa hal ficil go'an. Ficilku wuxuu ku shaqeeyaa koontada maxalliga ah ee leh faylasha uu taabanayo. Waxba silsiladda kama aqbalaan dariiqa amar aan loo baahnayn.

Ficilka laftiisu waa unug adeeg caadi ah, aqoonsiguna waa hal tilmaame gudihiisa:

[Service]
Type=oneshot
User=alice
Group=alice
ExecStart=/usr/local/bin/refresh-vpn-status --slot %i

Ogow User=alice wuxuu khuseeyaa unugga oo dhan, systemd-na waxay diiwaangelisaa hal ka reebban oo mudan in la ogaado: amarka leh horgalaha + wuxuu ku shaqeeyaa mudnaan buuxda iyada oo aan taas danayn. Horgalahaas waa qalab sharci ah hal tallaabo oo mudnaan leh, waana dariiqa fudud ee lagu baajiyo kala-soocidda aad hadda dhistay, marka qabo wax kasta oo + ah oo ku jira unuggaas sida wax u baahan in lagu caddeeyo dib u eegista.

Hayso gelinta kicinta mid yar oo aan sir ahayn. Aqoonsiga fadhiga, koontada la khariideeyay iyo sumadda waqtiga ayaa badanaa ah waxa loo baahan yahay. Weligaa ha ka gudbin xadka qayb shell, dariiqa fayl la fulin karo ama block deegaan uu macmiilku bixiyay, sababtoo ah dhinaca qaata ma haysto dariiqa lagu kala saaro qiimo sharci ah iyo mid la mudo.

Xaqiiji aqoonsiga dhab ahaan socday

Dib u eegista habeynta maaha caddayn. Ka dib isku xir tijaabo la ansixiyay, xaqiiji UID-ga taabtay faylka iyo UID-ga daemon-ku wali isticmaalayo:

stat -c '%U %G %y %n' /home/alice/.local/state/vpn-status.json
ps -o user=,pid=,cmd= -p "$(pgrep -o -f 'openvpn --daemon')"
systemd-run --uid=alice --pipe /usr/local/bin/refresh-vpn-status --dry-run

Sadarka koowaad waa inuu muujiyaa Alice iyo sumad waqti gudaha daaqadda tijaabadaada. Kan labaad waa inuu wali muujiyaa root ama koontada adeegga xirmada, taas oo caddaynaysa in daemon-ku uusan dhaqaaqin. Kan saddexaad waa dariiqa ugu jaban ee lagu tijaabiyo fasaxyada ficilka iyada oo aan la sugayn isku xir dib u noqosho dhab ah.

Haddii milkiilaha faylku yahay Alice laakiin kooxdiisa ama qaabkiisu uu is beddelay socodka dhexdooda, raadi UMask= ama farqiq fasax galka halkii aad ka raadin lahayd khalad macquul ah. Haddii sumadda waqtigu aanay waxba dhaqaaqin, kicin-ku waligiis ma dhicin, tallaabada xigta ee waxtarka lehna waa journalctl -u ee unugga ficilka, ma aha isku xir kale oo macmiil.

Waxa dhacdada isku xirka wali aanay caddayn

Tunnel la aasaasay waa hal xaqiiq. Micnaheedu maaha in fadhiga desktop-ka uu furan yahay, in baska fadhiga la gaari karo ama in kheyraadka gaarka ah ee ficilku rabo uu hadda diyaar yahay. Unug oneshot oo hoos yimaada UID-ga Alice wuxuu leeyahay aqoonsigeeda oo waxba kama hayo fadhigeeda, marka wax kasta oo u baahan bas garaaf ah waa inuu maraa habka fadhiga isticmaalaha ee la taageeray oo uu qeexo waxa dhaca marka ay ka baxdo.

Isku xirka dib u noqoshada ayaa sidoo kale soo noqnoqda. Laptop ku seexda tareen wuxuu saacad gudaheed soo saari karaa darsin dhacdooyin isku xir, hookna sadar ku daraya mar kasta wuxuu faylka xaaladda u beddelaa diiwaan aan cidna akhrin karin. Ficilka ka dhig mid idempotent ah, ama u ogolow inuu beddelo hal diiwaan oo fadhi ku fureysan.

Ugu dambeyntii, xaddid baaxadda waxyeellada unugga laftiisa: aragtida nidaamka faylka akhris kaliya oo ka baxsan galka xaaladda, wax mudnaan cusub ma jiro, iyo waqti xad cad. Kala-soocidda daemon-ka iyo ficilka isticmaalaha ayaa qiimo leh lafteeda, laakiin aad bay uga qiimo badan tahay marka ficilku aanu sameyn karin wax kale oo aan ahayn waxa kaliya ee aad ansixisay.

Maqaallo la xiriira