Daemon náà gbasilẹ ìkùnà chroot kan, profáìlì sì ti dàbí ẹni tí ó gbòòrò tẹ́lẹ̀, nítorí náà ojútùú tí ó fani mọ́ra ni láti mú òfin ọ̀nà kan gbòòrò kí ó sì tún bẹ̀rẹ̀. Ìyẹn kì í sábà yí ohunkóhun padà, nítorí pé chroot wà lábẹ́ àǹfààní kan tí profáìlì kò tíì lè fún ni rárá. Láti pinnu ìpele tí o yẹ kí o fọwọ́ kàn, àwọn àyẹ̀wò mẹ́ta ni ó nílò, wọ́n sì rọ́pò: ohun tí wọ́n gbà láàyè fún ìlànà ìṣiṣẹ́ láti dá mú, ohun tí ìlànà gbà láàyè, àti ohun tí ẹni tí ó bẹ̀rẹ̀ iṣẹ́ yọ kúrò kí ọ̀kan nínú àwọn méjèèjì tó di pàtàkì.

Ẹnu-ọ̀nà méjì ọ̀tọ̀ọ̀tọ̀, ọ̀kan ṣoṣo sì ni ó jẹ́ ti AppArmor

chroot nílò CAP_SYS_CHROOT nínú àyè orúkọ oníṣe tí ìlànà ìṣiṣẹ́ ń ṣiṣẹ́ nínú rẹ̀. Ìyẹn jẹ́ àǹfààní Linux àtọwọ́dá, tí kérnẹ́lì ń yẹ̀wò kí ìpè tó ṣe ohunkóhun pẹ̀lú àwọn ọ̀nà. Lọ́tọ̀ọ̀tọ̀, profáìlì AppArmor tí ń fipá mú lè kọ agbára náà pàápàá nígbà tí ìlànà ìṣiṣẹ́ bá ní í, nítorí pé ìlànà àfipá mú ni wọ́n ń wò ní àfikún sí àwọn ẹ̀rí ìdánimọ̀, kì í ṣe ní àrọ́wọ́tó wọn. Ìyàtọ̀ yìí ṣe pàtàkì ní ìgbàgbọ́: àwọn ìpele méjèèjì wà nínú àwọn fáìlì oríṣiriṣi, wọ́n sì sábà jẹ́ ìtọ́jú àwọn ènìyàn oríṣiriṣi.

Àwọn ẹnu-ọ̀nà méjèèjì kùnà pẹ̀lú errno kan náà. Àwọn méjèèjì ń mú EPERM jáde, àwọn méjèèjì sì farahàn gẹ́gẹ́ bí ẹ̀sùn àṣẹ gbogbogbò nínú àkọsílẹ̀ daemon, ìdí nìyẹn tí wíwá nínú àwọn àkóónú profáìlì fi ń gbà àkókò púpọ̀. Òfin ọ̀nà tí o fẹ́ fi kún ń ṣàkóso ìwọlé fáìlì lẹ́yìn tí chroot bá ṣàṣeyọrí; kò ní í ṣe pẹ̀lú bóyá wọ́n gbà iṣẹ́ náà láàyè rárá.

Ẹnu-ọ̀nà kẹta wà lókè àwọn méjèèjì. Tí olùdarí iṣẹ́ tàbí ìbòrí kan bá bẹ̀rẹ̀ ìlànà ìṣiṣẹ́ láìsí agbára yẹn nínú ẹgbẹ́ ààlà rẹ̀, kò sí àyípadà AppArmor tí ó lè dá a padà, fífi àwọn agbára kún profáìlì sì ń gbasilẹ èrò kan tí kérnẹ́lì kò ní í mú ṣẹ.

Ka ipò àǹfààní kí o tó ṣàtúnṣe ìlànà

Bẹ̀rẹ̀ láti inú ìlànà ìṣiṣẹ́ tí ń ṣiṣẹ́, kì í ṣe láti inú ètò tí o gbà pé ó ń ṣiṣẹ́. Fáìlì ipò ń fi àwọ̀n agbára márùn-ún àti àmì no-new-privileges hàn, wọ́n sì ń dá ìdáhùn fún àwọn ìbéèrè oríṣiriṣi:

grep -E '^(CapInh|CapPrm|CapEff|CapBnd|CapAmb|NoNewPrivs):' /proc/$(pidof openvpn)/status
sudo aa-status | grep -i openvpn

CapEff ni ẹgbẹ́ tí ó ṣe pàtàkì fún ìpè náà: agbára tí ó wà nínú CapBnd ṣùgbọ́n tí kò sí nínú CapEff ni ààlà gbà láàyè tí a kò sì dá mú ní àkókò náà. CapAmb ṣe pàtàkì nígbà tí bínárì kò ní àǹfààní ní ìtumọ̀ setuid àtọwọ́dá, nítorí pé àwọn agbára àyíká ni ọ̀nà tí iṣẹ́ fi ń dá àǹfààní mú kọjá exec láìsí àwọn agbára fáìlì. CapInh ń dá àwọn bítì mú tí wọ́n lè jogún kọjá exec, ṣùgbọ́n kìkì nígbà tí ẹgbẹ́ jogún fáìlì tí a ń ṣiṣẹ́ bá gbà láàyè, nítorí náà bítì kan níbẹ̀ kò fúnni ní ohunkóhun fúnrarẹ̀.

Lẹ́yìn náà ṣe ìdánilójú profáìlì wo ni wọ́n so mọ́ gan-an. Wọ́n lè fi orúkọ profáìlì tí o kò retí dè ìlànà ìṣiṣẹ́, pàápàá nígbà tí ìpín kan bá pèsè unit tirẹ̀ àti profáìlì tirẹ̀ papọ̀, kíkà /proc/PID/attr/current sì ń yanjú ìyẹn ní ìlà kan. Fífi fáìlì tí o ṣàtúnṣe wé profáìlì tí kérnẹ́lì ń ròyìn ni ìyàtọ̀ láàrin fífi ìdí hànhẹ̀ àti ṣíṣàtúnṣe fáìlì tí kò sí ẹnìkan tí ń gbé wọlé.

Fi òfin agbára kún kìkì nígbà tí ìtọ́pa audit sọ bẹ́ẹ̀

Àwọn àkọsílẹ̀ kérnẹ́lì àti audit ń dárúkọ ìpele tí ó kọ̀. Wá ìkọ̀ kan tí ó gbé iṣẹ́ capable àti orúkọ sys_chroot pẹ̀lú, papọ̀ pẹ̀lú profáìlì tí ó bí i. Tí àkọsílẹ̀ bẹ́ẹ̀ bá wà, ìlànà ìṣiṣẹ́ ti ní agbára náà tẹ́lẹ̀, AppArmor sì ti kọ̀ ọ́, àyípadà tí a dójú kọ̀ sì ni òfin agbára kan nínú profáìlì gidi:

capability sys_chroot,

Dá a mú gẹ́gẹ́ bí àjáku nínú profáìlì tí wọ́n so mọ́ gan-an, kí o sì yẹ̀wò kókò-ọ̀rọ̀ náà pẹ̀lú ìtọ́kasí profáìlì apparmor.d dípò kíkọ̀wé òfin kan láti inú ìkẹ́kọ̀ọ́ tí kò ní ìbáṣepọ̀. Fífi í sínú include tí wọ́n ń pín ń fún gbogbo ètò tí wọ́n dè ní agbára náà tí ó bá gbé fáìlì yẹn wọlé, yíyí profáìlì padà sí ipò complain sì ń fi ìkọ̀ tó kàn pamọ́ dípò yíyanjú èyí. Òfin nínú profáìlì ń yọ ìkọ̀ ìlànà kúrò; kò ṣẹ̀dá àǹfààní, nítorí náà ìlànà ìṣiṣẹ́ tí kò tíì ní CAP_SYS_CHROOT nínú ẹgbẹ́ tí ń ṣiṣẹ́ yóò ṣì kùnà pẹ̀lú òfin náà lórí ipò.

Tí àkọsílẹ̀ audit kò bá fi ìkọ̀ AppArmor kankan hàn rárá, dá ṣíṣàtúnṣe profáìlì dúró. O ń kojú ìṣòro ẹ̀rí ìdánimọ̀, iṣẹ́ tó kù sì wà nínú unit tàbí nínú ìlànà ìṣiṣẹ́ òbí, kì í ṣe nínú èdè ìlànà.

Olùdarí iṣẹ́ ń dá ààlà tirẹ̀ mú

systemd ń ṣètò ẹgbẹ́ ààlà agbára fún iṣẹ́ kọ̀ọ̀kan, àti ní àkọ́kọ́ ẹgbẹ́ yẹn kò gbòòrò. Ohunkóhun tí wọ́n yọ kúrò níbẹ̀ kò sí fún ìlànà ìṣiṣẹ́ bí profáìlì bá ti sọ, ìdí nìyẹn tí àwọn unit tí wọ́n ti mú le lè kùnà nínú iṣẹ́ tí ó ń ṣiṣẹ́ nígbà tí wọ́n fi ọwọ́ bẹ̀rẹ̀ daemon. Àwọn ìtọ́ni tó yẹ rọ̀rùn kíkà nínú unit, wọ́n sì rọ̀rùn kí a gbàgbé nígbà tí ètò náà fúnra rẹ̀ bá ròyìn ìkùnà. Àwọn drop-in tí àpò ìpín ń pèsè ni orísun àtọwọ́dá ààlà kan tí kò sí ẹnikẹ́ni tí ó rántí pé ó ṣètò rẹ̀.

Gbígbé ààlà sókè àti fífún ní agbára jẹ́ àyípadà méjì, kì í ṣe ọ̀kan. Àkọsílẹ̀ nínú ẹgbẹ́ ààlà sọ pé ìlànà ìṣiṣẹ́ lè dá agbára náà mú; kò fi í kún ẹgbẹ́ tí ń ṣiṣẹ́, NoNewPrivs sì lè dí ìgbésókè tó tẹ̀le láti ṣàṣeyọrí pàápàá nígbà tí gbogbo ohun mìíràn bá bára mu. Fi kìkì ohun tí iṣẹ́ nílò kún, dá àwọn ìmú-lẹ́gbẹ́ tó kù mú bí ó ti wà, kí o sì tako ọ̀nà kúkúrú fífún ní gbogbo agbára kí ìpè kan lè kọjá.

Ìtòlẹ́sẹẹsẹ ṣe pàtàkì níbí pẹ̀lú. Yí ààlà unit padà kọ́kọ́, ṣe ìdánilójú pé CapEff ti ní bítì náà, lẹ́yìn náà nìkan pinnu bóyá AppArmor ṣì ń kọ̀. Ṣíṣe àyípadà méjèèjì lẹ́ẹ̀kan náà yóò jẹ́ kí o máa wá nínú àìdánilójú lẹ́ẹ̀kan sí i tí ìkùnà bá tẹ̀síwájú.

Nígbà tí ìkọ̀ bá lọ, ṣàyẹ̀wò ọgbà náà fúnra rẹ̀

chroot tí ó ṣàṣeyọrí ń gbé gbòǹgbò lọ, nítorí náà gbogbo ọ̀nà tí daemon bá fọwọ́ kàn lẹ́yìn náà ni a ń yanjú nínú igi tuntun. Ètò tí ó ṣáàlù, orí ẹ̀rọ tí kò sí, tàbí àpò ìwé-ẹ̀rí tí a kò dà sitẹ̀ yóò farahàn gẹ́gẹ́ bí àṣìṣe fáìlì, àṣìṣe yẹn sì jẹ́ ìṣòro ìṣètò, kì í ṣe ti agbára. Ka ìṣẹ̀lẹ̀ tó kàn dípò fífi àṣẹ gbòòrò mìíràn kún. Gbígbé náà tún yí ìtumọ̀ ọ̀nà ìbáṣepọ̀ padà, ìdí nìyẹn tí àwọn ìtọ́sọ́nà ìmú-lẹ́gbẹ́ fi ń tẹnu mọ́ àwọn ọ̀nà pípé nínú ètò daemon.

Ó tún ṣe ìrànlọ́wọ́ láti rántí ohun tí chroot kò ṣe. Ó jẹ́ ààlà ọ̀nà, kì í ṣe sandbox: ìlànà ìṣiṣẹ́ tí ó dá àǹfààní mú lè sá kúrò nínú rẹ̀, ìdí nìyẹn tí wọ́n fi ń ju agbára náà nù lẹ́yìn ìpè àti ìdí tí ìdènà yẹ kí ó wà yí ká daemon. Dídá profáìlì AppArmor, ẹgbẹ́ ààlà agbára àti àwọn ìdènà ẹ̀rọ fáìlì papọ̀ mú ni èròǹgbà ìdánilẹ́kọ̀ọ́ yìí, kì í ṣe àṣẹ́kù láti yọ kúrò lẹ́yìn tí iṣẹ́ bá bẹ̀rẹ̀.

Òfin ìpinnu kúkúrú. Tí àkọsílẹ̀ audit bá dárúkọ AppArmor, fi òfin agbára kan kún profáìlì tí wọ́n so mọ́. Tí ẹgbẹ́ tí ń ṣiṣẹ́ bá ṣófo, tún ààlà unit àti ìtòlẹ́sẹẹsẹ jíjù àǹfààní ṣe. Tí profáìlì kì í bá ṣe èyí tí o ṣàtúnṣe, dá ṣíṣàtúnṣe dúró kí o sì wá èyí gidi.

Àwọn àpilẹ̀kọ tó jọra