Huduma huanza, husoma wasifu bila malalamiko na kisha hufa kwenye mstari ambao hauonekani kuhusiana: haiwezi kufungua ca.crt. Hakuna kilichobadilika kwenye cheti, na njia ya wasifu katika faili ya unit ni kamili. Mchanganyiko huo ndio kidokezo. Njia uliyotoa huonyesha faili moja, na majina ndani ya faili hiyo hutatuliwa mahali pengine kabisa, kwa hivyo uzinduzi unaoonekana kuwa kamili bado unaweza kusoma funguo zake kutoka kwenye saraka ambayo hakuna aliyekusudia.

Kushindwa kuna sababu chache, na inafaa kuzitenganisha kwa mpangilio: saraka ya msingi ambayo mchakato ulikuwa nayo kwa kweli, muktadha wa uzinduzi wa huduma, na ruhusa au sandbox kuzunguka faili baada ya njia kuwa sahihi. Kila moja huacha alama tofauti — katika unit, katika mchakato na kwenye mfumo wa faili.

Njia ya wasifu si saraka ya msingi

Fikiria mchakato unaoanza katika /tmp na kupewa /etc/vpn/prod/tenant-a.ovpn. Ndani ya wasifu huo, mstari ca ca.crt unataja njia linganifu. Hakuna katika hoja iliyopata wasifu kinachoandika upya jina hilo, kwa hivyo mchakato hutafuta /tmp/ca.crt na kuripoti faili iliyokosekana.

Kinachochanganya ni mpangilio wa makosa. OpenVPN huchanganua usanidi kwanza na hufungua faili zilizotajwa inapozifikia, kwa hivyo makosa ya kuandika kwenye wasifu huripotiwa kabla ya kugusa ufunguo wowote, wakati cheti kinachokosekana huonekana tu pale uchanganuzi unapofikia hapo. Kwa hivyo wasifu unaopakiwa ni ushahidi kwamba sintaksia ni sahihi, si kwamba faili unazozitaja zimepatikana.

Kile mwongozo hutenganisha: --config na --cd

Mwongozo wa OpenVPN 2.6 unaeleza chaguo mbili tofauti. Moja hupakia faili ya usanidi. Nyingine hubadilisha saraka ya mchakato kabla ya usanidi, ufunguo, skripti na faili nyingine kusomwa, na inahitaji saraka kamili bila marejeleo yoyote kwa ile ya sasa.

openvpn --cd /etc/vpn/prod --config tenant-a.ovpn

Wito huo ni umbo, si maagizo ya kuzindua wasifu wa mtu mwingine. Kinachokupa ni uhakika: msingi wa kila jina linganifu katika mnyororo huelezwa kwenye amri badala ya kurithiwa kutoka kwa ganda au msimamizi yeyote aliyeanzisha mchakato. Njia mbadala ni halali vile vile na mara nyingi bora kwa huduma: acha saraka ya kazi kama ilivyo na ufanye kila faili inayotajwa kuwa kamili ndani ya wasifu.

Chochote unachochagua, kagua mnyororo mzima na si kushindwa kwa kwanza. Wasifu unaweza kuvuta faili nyingine ya usanidi, na majina linganifu ya faili iliyojumuishwa hutatuliwa kwa saraka hiyo hiyo ya mchakato, si kwa saraka ya faili iliyoyajumuisha. Njia za kumbukumbu, faili za uthibitishaji na skripti saidizi hufuata kanuni hiyo hiyo.

Huduma huanza mahali pengine

Ganda la maingiliano katika saraka ya wasifu huthibitisha chochote kuhusu unit iliyofungashwa. Wasimamizi huweka saraka yao ya kazi, na skripti ya kufunika inaweza kuibadilisha tena kabla ya faili ya binary kuendeshwa. Unit inayoshindwa ndio uzinduzi pekee unaostahili kufikiriwa.

systemctl show -p WorkingDirectory -p ExecStart --value openvpn@tenant-a
ls -l /proc/$(pgrep -n openvpn)/cwd

Amri ya pili huonyesha saraka ambayo mchakato hai unashikilia kwa kweli, na hiyo ni ya kuaminika zaidi kuliko faili ya unit wakati kifuniko kinahusika. Ikiwa zote mbili hazikubaliani, kifuniko ni jibu lako na unit ni alama ya kupotosha.

Baada ya utafutaji: ruhusa, chroot na sandbox

Saraka sahihi ya msingi bado inaweza kutoa ujumbe huo huo, kwa sababu utatuzi na ufikiaji ni hatua tofauti. Mchakato unahitaji ruhusa ya utekelezaji kwenye kila saraka mzazi na ruhusa ya kusoma kwenye faili, na unit ya huduma inayoficha sehemu ya mfumo wa faili hubadilisha kile mchakato unaweza kuona kabisa.

Aina tatu za kawaida hutoa kosa lile lile. Faili inasomwa na root pekee wakati huduma inaachia mapendeleo kabla ya kuifungua. Unit huweka mwonekano wa kinga wa mfumo wa faili ambao haujumuishi saraka ya wasifu. Daemon huendeshwa na chroot, kwa hivyo njia iliyopo kwenye mwenyeji haipo ndani ya mwonekano huo.

Tambua kwa umiliki wa faili na utambulisho wa mchakato, si kwa kulegeza ruhusa. Kufanya ufunguo wa faragha usomwe na kila mtu ili kunyamazisha kosa hili hubadilisha kushindwa kwa sauti na kunyamaza, na ufunguo ndio sehemu ya saraka ambayo unataka kuifichua kwa kiwango cha chini kabisa.

Thibitisha marekebisho kwa uzinduzi wako mwenyewe

Anzisha upya unit halisi kutoka saraka isiyohusiana na wasifu na uangalie mstari huo huo wa kuanza. Kisha thibitisha kuwa mchakato unashikilia saraka iliyokusudiwa unapofanya kazi, na cheti ulichopakia ni kile unachotarajia.

systemctl restart openvpn@tenant-a
systemctl status openvpn@tenant-a --no-pager
journalctl -u openvpn@tenant-a -n 20 --no-pager

Pakiaji la njia linapofaulu, uthibitishaji na uelekezaji bado ni hatua tofauti na kushindwa kwao, na muunganisho unaoinuka lakini haupitishi trafiki ni uchunguzi mwingine. Marekebisho hapa yanahusu tu saraka ambayo faili zilitoka, na yanapaswa kuonekana kwenye wito badala ya kukumbukwa na aliyekuwa wa mwisho kuendesha kwa mkono.

Ikiwa wasifu unawekwa na msimamizi wa usanidi, weka hapo pia saraka ya msingi au majina kamili ya faili. Marekebisho ya mkono kwenye mwenyeji mmoja ni toleo la tatizo hili linalorudi baada ya ujenzi upya unaofuata.

Makala zinazohusiana