Kí ni ìdí tí èékàn OpenVPN kò fi rí fáìlì tó wà lẹ́gbẹ̀ẹ́ script rẹ̀
Àwọn ọ̀nà ìbátan nínú èékàn ni a ń yanjú pẹ̀lú ìlànà, kì í ṣe script. Fi __file__ so wọ́n, kí o sì yẹ ààyè orúkọ àti ìdánimọ̀ wò kí o tó wo àwọn àṣẹ.
Àwọn èékàn tí wọ́n ń ṣiṣẹ́ láìsí àṣìṣe tí wọ́n sì ń sọ pé fáìlì kò sí máa ń wo ibi tí kò tọ́, kì í ṣe pé wọ́n kùnà nínú iṣẹ́ wọn. Àwọn ọ̀nà ìbátan nínú script ni a ń yanjú pẹ̀lú àkójọpọ̀ iṣẹ́ ti ìlànà, àti pé iṣẹ́ kan máa ń bẹ̀rẹ̀ pẹ̀lú àkójọpọ̀ iṣẹ́ tí ìwọ kò yàn. Fáìlì tó wà lẹ́gbẹ̀ẹ́ script àti fáìlì tí ìlànà ń ṣí jẹ́ ohun kan náà nígbà tí ohun kan bá so wọ́n pọ̀. Àlàfo yẹn ni ó ń ṣàlàyé ọ̀pọ̀lọpọ̀ ìkùnà èékàn tí a ń kà ní àṣìṣe sí ìṣòro àṣẹ.
Yẹ ọ̀nà wò kí o tó wo àwọn àṣẹ, nítorí àṣìṣe àṣẹ lórí fáìlì tí kò tọ́ ṣì jẹ́ fáìlì tí kò tọ́.
A ń yanjú ọ̀nà ìbátan pẹ̀lú ìlànà, kì í ṣe fáìlì
Nígbà tí script bá pe open("policy.json"), kẹ́nẹ́lì máa ń yanjú orúkọ náà pẹ̀lú àkójọpọ̀ iṣẹ́ lọ́wọ́lọ́wọ́ ti ìlànà. Kò sí ohun kan láti ibi script fúnra rẹ̀ tí ó ń kópa nínú wíwá yẹn. OpenVPN máa ń bẹ̀rẹ̀ àwọn èékàn láti inú àkójọpọ̀ tí ó fúnra rẹ̀ yàn, àti pé àṣàyàn cd lè yí i padà, nítorí náà script tí a dán wò pẹ̀lú ọwọ́ láti inú fódà rẹ̀ yóò hùwà lọ́nà mìíràn nígbà tí daemon bá ń ṣiṣẹ́ rẹ̀. Ìdánwò ọwọ́ máa ń kọjá, ṣíṣe iṣẹ́ máa ń kùnà, àti pé ìlà àkọsílẹ̀ kò mẹ́nukan àyàfi orúkọ tó ṣègbé.
Python máa ń fi ibi script hàn gẹ́gẹ́ bí __file__, ìyẹn sì ni ó ń jẹ́ kí sísopọ̀ ṣeéṣe. Path(__file__).resolve().parent / "policy.json" máa ń kọ́ ọ̀nà láti inú fáìlì dípò ìlànà. Ìlà kan náà yẹn máa ń yọ ìgbẹ́kẹ̀lé àkójọpọ̀ iṣẹ́ kúrò láìyí ohunkóhun padà nínú àwọn àǹfààní.
Mọ̀ọ́mọ̀ so ọ̀nà pọ̀, kí o sì yẹ ohun tí resolve ń ṣe wò
resolve() máa ń tẹ̀lé àwọn ìsopọ̀ àpẹẹrẹ, nítorí náà ìfilọ́lẹ̀ tí ó so èékàn mọ́ ibi rẹ̀ máa ń sopọ̀ mọ́ ibi àfojúsùn ìsopọ̀, kì í ṣe àkójọpọ̀ tó ń di ìsopọ̀ mú. Ìyẹn sábà ni ohun tí o fẹ́ fún ìgbékalẹ̀ oní-ẹ̀yà, ó sì jẹ́ àṣìṣe fún ìtòlẹ́sẹẹsẹ tí ó retí dátà lẹ́gbẹ̀ẹ́ ìsopọ̀ àpẹẹrẹ. Pinnu ohun tí ìgbékalẹ̀ ń sọ, kí o sì kọ kóòdù bá a mu dípò kí o ṣàwárí ìyàtọ̀ nínú iṣẹ́ àgbéjáde. Path(__file__).parent láìsí resolve() máa ń pa àkójọpọ̀ ti ìsopọ̀ fúnra rẹ̀ mọ́.
Bí dátà bá jẹ́ ti ẹ̀dá-ìṣẹ́ tí kì í ṣe ti ètò, gba ọ̀nà pípé láti inú ìṣètò. Sísisọ ibi kan di ohun tí kò yípadà máa ń so èékàn mọ́ ìtòlẹ́sẹẹsẹ olùgbàlejò kan ṣoṣo.
La àwọn ààlà mẹ́rin kọjá lẹ́sẹẹsẹ
Bẹ̀rẹ̀ pẹ̀lú àkójọpọ̀ iṣẹ́: fi WorkingDirectory, àṣàyàn cd ti OpenVPN àti gbogbo ìbòrí tí ó ń yí àkójọpọ̀ padà kí exec tó ṣẹlẹ̀ wé. Lẹ́yìn náà jẹ́rìí ibi tí a yanjú, nítorí fáìlì tí orúkọ rẹ̀ jọra nínú ìgbékalẹ̀ mìíràn lè dáhùn ìwákiri náà kí ó sì fi àṣìṣe pamọ́. Ní ìtẹ̀lé, ìwòye ètò fáìlì wá: chroot tàbí ààyè orúkọ mount ti iṣẹ́ lè sọ ọ̀nà pípé ti olùgbàlejò di aláìsí lásán. Níkẹyìn ni ìdánimọ̀ ìwọlé, tí ó jẹ́ ìbéèrè tí ó yàtọ̀ sí híhàn.
ProtectHome àti PrivateTmp máa ń fi àwọn ibi oríṣiríṣi pamọ́, kò sì sí èyíkéyìí nínú wọn tí ó farahàn nínú àkọsílẹ̀ àkójọpọ̀ tí a gbà láti olùgbàlejò. Ọ̀nà tí ó wà fún root nínú shell lè jẹ́ aláìrí nínú ààyè orúkọ ti ẹ̀ka, ìyẹn sì ni ìdí tí dídánwò pẹ̀lú àṣẹ kan náà ní ìta iṣẹ́ ń fi kéréńké hàn.
Tún ìwákiri ṣe láìfẹ̀ iṣẹ́ gbòòrò
Sísopọ̀ ọ̀nà máa ń yanjú ààlà àkọ́kọ́ nìkan. Kò fi àkójọpọ̀ tí iṣẹ́ ń pa mọ́ hàn, kò sì fún àkọsílẹ̀ tí kò ní àǹfààní ní ààyè sí fáìlì tí ó jẹ́ ti root nìkan. Gbígbé script-security ga máa ń yí àwọn script tí OpenVPN yóò ṣiṣẹ́ padà; kò ní ipa kankan lórí ibi tí a ti ń yanjú orúkọ ìbátan. Yíyí àkójọpọ̀ iṣẹ́ padà fún gbogbo iṣẹ́ gbòòrò ju ìṣòro náà lọ, nítorí gbogbo ọ̀nà ìbátan mìíràn ti ẹ̀rí-ìdánilójú, àkọsílẹ̀ tàbí olùrànlọ́wọ́ ń lọ pẹ̀lú rẹ̀.
Yàn àtúnṣe tóóró: ọ̀nà tí ó dájú nínú script, iye ìṣètò tí ó ṣe kedere fún dátà ẹ̀dá-ìṣẹ́, àti nǹkan-ìní fáìlì tí ó bá àkọsílẹ̀ tí èékàn ń ṣiṣẹ́ lábẹ́ rẹ̀ mu.
Kọ ẹ̀rí tí ó dárúkọ ààlà náà
Ìròyìn ìkùnà tí ó wúlò ní ohun mẹ́ta: ọ̀nà pípé tí èékàn gbìyànjú, àyíká tí ó dá a, àti ààlà tí ó kọ̀. Tẹ ọ̀nà tí a yanjú àti ìyàsọ́tọ̀ jáde láìda ìkórajọ àkóónú fáìlì síta. Mẹ́tẹẹta yẹn máa ń ya sísopọ̀ tí kò tọ́ sọ́tọ̀ kúrò nínú mount tí ó pamọ́ àti nínú kíkọ̀ àṣẹ, tí wọ́n jẹ́ àtúnṣe mẹ́ta oríṣiríṣi.
Ìsọ pé root lè ka fáìlì náà láti terminal dáhùn ọ̀kan nínú àwọn ìbéèrè yẹn, kò sì dáhùn èyíkéyìí nínú àwọn yòókù. Dípò bẹ́ẹ̀, dánwò láti inú àyíká iṣẹ́ fúnra rẹ̀.