Iṣẹ́ VPN kùnà ní EXEC: fi unit, binary àti sudoers wé
Ìkùnà ní ìgbésẹ̀ EXEC túmọ̀ sí pé systemd kò lè bẹ̀rẹ̀ binary náà. Fi ọ̀nà unit, ọ̀nà tí a fi sínú ẹ̀rọ àti àṣẹ sudoers wé kí o tó yí ohunkóhun padà.
Àná ni tunnel náà ń ṣiṣẹ́, àti ní àárọ̀ yìí unit ti kú pẹ̀lú Failed at step EXEC spawning /usr/local/bin/vpnclient nínú journal. Àwọn ẹ̀rí ìdánimọ̀, àwọn ọ̀nà àti àkọsílẹ̀ kò kó sínú gbólóhùn yẹn rárá. systemd yí ExecStart padà sí ọ̀nà kan, béèrè lọ́wọ́ kernel kí ó ṣe é, kernel sì kọ̀, ní ọ̀pọ̀ ìgbà nítorí pé kò sí ohunkóhun ní ọ̀nà yẹn tàbí fáìlì kò ṣe é ṣe. Kà á sí àìtọ́ fáìlì àti argv títí tí àṣẹ tí a ti yẹ̀wò yóò fi fi òdì kejì hàn.
Ìdí tí EXEC fi ń kùnà kí ìjẹ́rìí tó bẹ̀rẹ̀
systemd kì í ṣe ExecStart nípasẹ̀ shell. Ó ṣe fork, ó kọ́ vector argumentu láti inú ìlà, ó sì pe execve lórí ẹ̀yà àkọ́kọ́. Bí ìpè yẹn bá kùnà, iṣẹ́ náà kò ní dé inú kóòdù ti ara ẹni ti ẹrọ VPN rárá, nítorí náà yíyí profáìlì padà tàbí ṣíṣàyẹ̀wò àwọn ẹ̀rí ìdánimọ̀ kò lè ràn wá lọ́wọ́.
Kóòdù ipò yà ìdílé yìí sọ́tọ̀ kúrò nínú àwọn ìṣubú lasan. Unit tí ó jáde pẹ̀lú status=203/EXEC kò bẹ̀rẹ̀ ìlànà kankan rárá; unit tí ó bẹ̀rẹ̀ tí ó sì jáde pẹ̀lú status=1 lè ti kùnà ní ìjẹ́rìí, DNS tàbí ọ̀nà ìtọ́sọ́nà. Ka kóòdù náà kí o tó ka àkọsílẹ̀ ẹrọ náà, nítorí ní ipò àkọ́kọ́ àkọsílẹ̀ ẹrọ náà yóò ṣófo.
Ọ̀nà tí ó wà nínú journal ni èyí tí systemd lò, kì í ṣe dandan èyí tí ìwọ yí padà. Àwọn fáìlì drop-in àti ìjáde generator lè borí fáìlì olùtà, daemon-reload àtijọ́ sì fi ìlà àtijọ́ sílẹ̀ nínú ìrántí. Ìdí nìyẹn tí ìwádìí àkọ́kọ́ fi jẹ́ bíbéèrè lọ́wọ́ systemd ohun tí ó ro pé àṣẹ náà jẹ́, dípò ṣíṣí fáìlì tí o rántí pé o yí padà.
Àwọn ibi mẹ́ta tí a ti kọ ọ̀nà binary náà sí
Ẹrọ VPN tí a fi sínú ẹ̀rọ láti inú àpò ìpín, àkọsílẹ̀ olùtà àti tarball ìtẹ̀jáde lè jábọ̀ sí àwọn ìpilẹ̀ mẹ́ta ọ̀tọ̀ọ̀tọ̀. Unit, òfin àǹfààní àti ẹ̀rọ ìfiṣe lọ́wọ́ọkọ̀ọ̀kan kọ ọ̀kan nínú àwọn ìpilẹ̀ náà sílẹ̀, àìtọ́ sì ń farahàn nígbà tí méjì nínú mẹ́ta kò bá faramọ́.
| Record | Common value | How to read it |
|---|---|---|
| Unit or drop-in | /usr/local/bin/vpnclient | systemctl cat vpnclient.service |
| Installed binary | /usr/bin/vpnclient | command -v vpnclient, then ls -l the result |
| Sudoers grant | /opt/vpnclient/bin/vpnclient | sudo grep -r vpnclient /etc/sudoers.d/ |
Àìbáramu pàtó kan rí bẹ́ẹ̀: àkọsílẹ̀ olùtà ń fi sínú /usr/local/bin, a ti tú tarball náà sílẹ̀ lábẹ́ /opt, unit sì ṣì ń dárúkọ ọ̀nà àtijọ́ /usr/bin láti inú àpò tí ó ṣáájú. Ọ̀kan péré nínú àwọn fáìlì yẹn wà, kì í sì í ṣe èyí tí ó wà nínú ExecStart ní ọ̀pọ̀ ìgbà.
Pinnu ọ̀nà tí ó jẹ́ ìdásílẹ̀ kí o tó yí èyíkéyìí nínú àwọn fáìlì padà. Bí àpò ìpín bá ni binary náà, ọ̀nà àpò náà ni ìdásílẹ̀, unit sì gbọdọ̀ tẹ̀lé e. Bí àkọsílẹ̀ olùtà bá ní í, òfin kan náà kan ìpilẹ̀ olùtà náà. Dídaakọ binary láàárín àwọn ìpilẹ̀ ń dá ẹ̀dà méjì tí yóò yà sọ́tọ̀ ní ìgbésẹ̀ ìgbéga tí ń bọ̀.
Nígbà tí àṣẹ inú àmì ọ̀rọ̀ di orúkọ fáìlì
Ọ̀nà ìkùnà kejì ń fi ara pamọ́ sẹ́yìn ìlà journal kan náà. Ẹnìkan kọ èyí sínú unit, ó sì retí pé ẹrọ náà yóò sopọ̀ nígbà ìbẹ̀rẹ̀:
ExecStart=/usr/bin/"vpnclient connect office"systemd pín iye náà sí àwọn ọ̀rọ̀, nítorí náà ọ̀rọ̀ àkọ́kọ́ di /usr/bin/vpnclient connect office, a sì yọ àwọn àmì ọ̀rọ̀ kúrò gẹ́gẹ́ bí ìlànà ìkójọpọ̀. Lẹ́yìn náà kernel ń wá fáìlì tí orúkọ rẹ̀ ní àlàfo, kò sì sí irú rẹ̀. Àṣìṣe náà dà bí ti binary tí ó sọnù bí ó tilẹ̀ jẹ́ pé a ti fi binary náà sínú ẹ̀rọ.
Ọ̀nà tí a ń gbà gbé ni fáìlì ṣíṣe tòótọ́ tí àwọn àríyànjiyàn ọ̀tọ̀ọ̀tọ̀ ń tẹ̀lé, bí àpẹẹrẹ ExecStart=/usr/bin/vpnclient connect office. Bí ìṣàn iṣẹ́ bá nílò pẹ̀pẹ̀ tàbí ẹ̀wọ̀n gan-an, fi sínú àkọsílẹ̀ kí o sì pe àkọsílẹ̀ náà, nítorí pé ExecStart kò ní &&, kò ní pẹ̀pẹ̀, kò sì ní ìgbòkègbodò glob.
Tún unit ṣe, kì í ṣe ẹ̀rọ fáìlì
Àtúnṣe tí ó ń fani mọ́ra ni ìsopọ̀ àpẹẹrẹ láti ọ̀nà tí a retí lọ sí binary gidi. Ó ń ṣiṣẹ́ títí tí a ó fi ṣe àpò náà lẹ́ẹ̀kan sí i tí ìsopọ̀ náà yóò sì tọ́ka sí fáìlì tí a ti yọ kúrò, tàbí títí tí àmì SELinux yóò fi máa bá a lẹ́sẹ̀ mọ́. Yàn láti ṣàtúnṣe unit nípasẹ̀ drop-in kí fáìlì olùtà lè wà láìsí ìfọwọ́kàn, àwọn ìgbéga sì lè wà ní ìfojúsọ́nà.
Òfin àǹfààní gbọdọ̀ bá ọ̀nà kan náà àti àwọn àṣẹ abẹ́ kan náà mu. Àkọsílẹ̀ sudoers fún /usr/local/bin/vpnclient kò fún /usr/bin/vpnclient ní àṣẹ, àkọsílẹ̀ tí ó gbà gbogbo àríyànjiyàn sì ń jẹ́ kí ìlànà àdúgbò kankan lè tún tunnel ṣe tàbí dá a dúró. Fún unit ní àwọn ìṣe méjì tí ó nílò, kí o sì pa ìyọkúrò mọ́ ẹ̀yìn rẹ̀ bí dídá iṣẹ́ náà dúró bá ti ń ti ilẹ̀kùn náà pa.
Níbí ni ìfiwéra náà ń san èrè: unit, ìpamọ́ àpò àti sudoers gbọdọ̀ dárúkọ ọ̀nà kan. Nígbà tí wọ́n bá ṣe bẹ́ẹ̀, àìtọ́ EXEC yóò pòórá láìsí àtúnbẹ̀rẹ̀ àti láìsí ẹ̀dà binary ní ibi kẹta.
Fi àṣẹ tí a yẹ̀wò hàn kí o tó tún bẹ̀rẹ̀
sudo systemctl daemon-reload
sudo systemctl cat vpnclient.service
systemctl show -p ExecStart vpnclient.service
systemd-analyze verify /etc/systemd/system/vpnclient.service
sudo systemctl restart vpnclient.service
systemctl status vpnclient.service --no-pagersystemctl show ni ìjáde ìpinnu nítorí pé ó ń tẹ̀ argv tí systemd yẹ̀wò gan-an jáde, pẹ̀lú drop-in èyíkéyìí. systemd-analyze verify ń mú ọ̀nà tí ó sọnù tàbí tí kò ṣe é ṣe kí o tó tún bẹ̀rẹ̀, àṣẹ status lẹ́yìn àtúnbẹ̀rẹ̀ sì ń sọ bí ìlànà náà wà nísisìyí tàbí rárá.
Bí unit bá bẹ̀rẹ̀ tí ó sì kùnà lẹ́yìn náà, o ti kúrò nínú ìdílé EXEC, o ti wọ inú ìtọ́jú àṣìṣe ti ara ẹrọ náà. Wá ìfiranṣẹ́ ẹrọ náà nínú journal, kì í ṣe ìkùnà execve mìíràn. Pa diff unit àti diff sudoers mọ́ pọ̀ nínú àkọsílẹ̀ ìyípadà, kí ìgbéga tí ń bọ̀ má baà mú ọ̀nà tí a pín padà wá ní ìdákẹ́jẹ́.