Ìjẹ́rìí nípasẹ̀ PAM lè ṣàṣeyọrí nígbà tí o bá ń ṣiṣẹ́ kíkúnránṣẹ́ náà pẹ̀lú ọwọ́, tí ó sì lè kùnà pẹ̀lú AUTH_FAILED ní kété tí systemd bá bẹ̀rẹ̀ profáìlì kan náà. Ọ̀rọ̀ ìkọ̀kọ̀ kò yí padà láàrín àwọn ìṣiṣẹ́ yẹn; ohun tí ó yí padà ni àkójọ àwọn ìdíwọ́ yí ká ìlànà tí ń béèrè ìbéèrè lọ́wọ́ PAM. PAM ń dáhùn nípasẹ̀ olùrànlọ́wọ́ kan tí agbára rẹ̀ láti yí àwọn ẹ̀rí ìdánimọ̀ tirẹ̀ padà jẹ́ gan-an ohun tí unit tí a fi kíkún ṣe ń yọ kúrò. Wá olùrànlọ́wọ́ yẹn àti àlà tí ó nílò kí o tó fọwọ́ kan àkójọ agbára.

unix_chkpwd ni fáìlì binary tí ń dáhùn ìbéèrè PAM

Pẹ̀lú ìjẹ́rìí ọ̀rọ̀ ìkọ̀kọ̀ àdúgbò, pam_unix kì í fi bẹ́ẹ̀ ka fáìlì hash fúnra rẹ̀. Ó ń ṣiṣẹ́ unix_chkpwd, tí àwọn ìpínkiri ń fi sínú gẹ́gẹ́ bí setuid root tàbí setgid shadow kí a lè ṣàyẹ̀wò ọ̀rọ̀ ìkọ̀kọ̀ kan ní orúkọ ìlànà tí kò yẹ kí ó ka /etc/shadow. Yọ agbára láti gba ìdánimọ̀ yẹn kúrò, olùrànlọ́wọ́ kò lè parí àyẹ̀wò náà, nítorí náà module ń dá ìkùnà ìjẹ́rìí lasan padà.

Ìkùnà náà wá dàbí ìṣòro ẹ̀rí ìdánimọ̀ nínú gbogbo àkọsílẹ̀ tí kíkúnránṣẹ́ lè rí. Ìyẹn ni ìdẹ̀kùn náà: kíkúnránṣẹ́ ń ròyìn ohun tí PAM sọ fún un, PAM sì ń ròyìn kìkì pé àkójọ náà sọ rárá. Ṣíṣe olùrànlọ́wọ́ pẹ̀lú ọwọ́ gẹ́gẹ́ bí root kò tún fi ohunkóhun hàn, nítorí ó ń lo ipa ẹ̀tọ́ tí iṣẹ́ náà kì í lò rárá. Ka unit tí systemd kó sínú gan-an, lẹ́yìn náà ka àkọsílẹ̀ ẹ̀rọ fún ìgbìyànjú tí ó ṣe. Àwọn ìwòye méjì yẹn ń ya ìṣòro sandbox sọ́tọ̀ kúrò nínú ìṣòro ọ̀rọ̀ ìkọ̀kọ̀ tí kò tọ́.

Ka unit kí o tó ka àkọsílẹ̀ àwọn ọ̀rọ̀ ìkọ̀kọ̀

Unit tí a ti ṣe àkópọ̀ lè gbé drop-in tí ìwọ kò kọ, ìṣètò tí ń ṣiṣẹ́ sì ni àpapọ̀ àbájáde. Tẹ̀ unit náà jáde gẹ́gẹ́ bí systemd ti ń rí i, pẹ̀lú àwọn ètò sandbox tí ń pinnu bóyá olùrànlọ́wọ́ lè gbé ara rẹ̀ ga. Àyẹ̀wò kíkà nìkan tó ní ìpele yìí.

systemctl cat [email protected]
systemctl show [email protected] -p User -p Group -p CapabilityBoundingSet -p AmbientCapabilities -p NoNewPrivileges
journalctl -u [email protected] -b

Àṣẹ àkọ́kọ́ fi ibi tí unit àti àwọn drop-in rẹ̀ ti wá hàn, èyí ṣe pàtàkì nítorí ìfagilé tí a fi kún ní ọ̀ṣẹ̀ bíi mélòó kan sẹ́yìn ń gbé pẹ́ ju ìrántí ìdí tí ó fi wà lọ. Èkejì ń tẹ àwọn iye sandbox jáde tí àwọn abala méjì tí ń bọ̀ gbára lé.

Fi ohun tí o rí wé ẹ̀rọ tí ń ṣiṣẹ́ tí ó ní ìpínkiri àti ẹ̀yà kan náà. Ìyàtọ̀ nínú User, CapabilityBoundingSet tàbí NoNewPrivileges jẹ́ àmì gbígbé; ìyàtọ̀ nínú àwọn àlàyé ọ̀rọ̀ kì í ṣe bẹ́ẹ̀. Kọ àwọn iye sílẹ̀ kí o tó yí ohunkóhun padà, nítorí ìfiwéra tí ó wáyé lẹ́yìn pẹ̀lú àfojúsùn tí ń rìn kò fi ohunkóhun hàn. Tí iṣẹ́ náà bá ń ṣiṣẹ́ gẹ́gẹ́ bí àkọsílẹ̀ tí kò ní ẹ̀tọ́ pẹ̀lú àkójọ àlà tí ó ṣófo, olùrànlọ́wọ́ kò ní fẹ́rẹ̀ẹ́ jẹ́ ohun tí yóò fi ṣiṣẹ́.

Ìyípadà ẹ̀rí ìdánimọ̀, ààyè fáìlì àti ìlànà jẹ́ àlà mẹ́ta

Bẹ̀rẹ̀ pẹ̀lú ohun tí ń ṣẹlẹ̀ nígbà exec. Fáìlì binary setuid tàbí fáìlì tí ó gbé file capabilities ń dá ìyípadà ẹ̀rí ìdánimọ̀ sílẹ̀, nítorí náà ìdánimọ̀ tí ó jáde kì í ṣe ìtẹ̀síwájú ẹni tí ó pè. Àkójọ àlà ń dín ohun tí irú binary bẹ́ẹ̀ lè gbà kù, NoNewPrivileges sì ń dí gbígba setuid, setgid àti file capabilities mọ́ pátápátá. Ọ̀kan nínú àwọn mẹ́ta yẹn lè dá olùrànlọ́wọ́ dúró nígbà tí gbogbo iṣẹ́ mìíràn ti iṣẹ́ náà wà ní àìfarapa.

Lẹ́yìn náà, ya àrékọjá àṣẹ-ẹni tí ó gbòòrò sọ́tọ̀ kúrò nínú ààyè kíkà tí ó há. CAP_DAC_OVERRIDE ń rékọjá àwọn àyẹ̀wò àṣẹ-ẹni níbi gbogbo, nígbà tí CAP_DAC_READ_SEARCH ń bo kíkà àti rírìn káàkiri àkójọ pẹ̀lú àwọn agbára àfikún tirẹ̀. Irinṣẹ́ ọ̀tọ̀ọ̀tọ̀ ni wọ́n pẹ̀lú ìwọ̀n ipa ọ̀tọ̀ọ̀tọ̀, kò sì sí ọ̀kan nínú wọn tí ó jẹ́ ọ̀nà láti kọ jẹ́ kí PAM ka fáìlì shadow.

Níkẹyìn, béèrè bóyá ìlànà àfimúṣẹ ń gba ìgbésẹ̀ náà láàyè rárá. Agbára Linux kì í borí SELinux, gbígba rẹ̀ kò sì fi ohunkóhun hàn nípa òfin ìmúṣẹ irú. Wo ìkọ̀sílẹ̀ ààyè fáìlì àti ìkọ̀sílẹ̀ agbára gẹ́gẹ́ bí ẹ̀rí ọ̀tọ̀ọ̀tọ̀, nítorí wọ́n ń dárúkọ àwọn àtúnṣe ọ̀tọ̀ọ̀tọ̀ àti ní ọ̀pọ̀ ìgbà àwọn oníni ọ̀tọ̀ọ̀tọ̀. Ka gbogbo pápá àkọsílẹ̀ náà dípò ọ̀rọ̀ kan ṣoṣo denied. Èwo ni fáìlì ìṣiṣẹ́ tí ó ṣe ìgbésẹ̀ náà, èwo ni agbègbè tí ó ti ṣiṣẹ́, irú àfojúsùn wo ni ó fọwọ́ kàn, ẹ̀ka ohun wo ni ó kópa àti èwo ni àṣẹ tí ìlànà náà kọ̀ - ọ̀kọ̀ọ̀kan wọ́n ń dín ìdáhùn kù ní ọ̀nà ọ̀tọ̀ọ̀tọ̀.

Mú ìkọ̀sílẹ̀ náà jáde nínú àkọsílẹ̀ àyẹ̀wò

Lórí ẹ̀rọ tí ó wà ní ipò enforcing, ipa àyẹ̀wò ni ibi kan ṣoṣo tí ń ṣàkọsílẹ̀ ìkọ̀sílẹ̀. Béèrè nípa àwọn ìṣẹ̀lẹ̀ àìpẹ́ yìí kí o sì kà wọ́n ní ìbámu pẹ̀lú àmì àkókò ìwọlé tí ó kùnà, kì í ṣe àkókò tí o bẹ̀rẹ̀ ìwádìí.

ausearch -m AVC,USER_AVC -ts recent

Àbájáde tí ó ṣófo kì í ṣe ẹ̀rí àìsẹ̀ẹ́. Ó túmọ̀ sí bóyá àyẹ̀wò kò ń kó, tàbí fèrèsé rẹ ti kọjá ìgbìyànjú náà, àti pé àwọn àṣeyọrí méjèèjì gbọ́dọ̀ yọkúrò kí o tó yọ ìlànà náà kúrò.

Ìtọ́sọ́nà Red Hat fún yíyanjú ìṣòro SELinux ń fi àyẹ̀wò àmì àti ìṣètò síwájú ṣíṣe àwọn òfin ààyè, èyí tí ó tún jẹ́ ìtẹ̀lé títọ́ fún ìṣòro yìí. Fáìlì binary olùrànlọ́wọ́ tí a fi àmì tí kò tọ́ àti àlà nínú ìlànà ń mú àwọn ìkọ̀sílẹ̀ tí ó jọra jáde ṣùgbọ́n wọ́n nílò àwọn àtúnṣe ọ̀tọ̀ọ̀tọ̀. Ṣíṣe òfin ààyè fún àṣìṣe àmì ń fi àbùkù náà pamọ́ ó sì ń jẹ́ kí ìmúdójúìwọ̀n package tí ó tẹ̀lé mú un wá padà. Jẹ́rìí àmì tí ó wà lórí olùrànlọ́wọ́ tí a fi sínú kí o tó kọ ìlànà kankan.

Fi ìyípadà náà hàn pẹ̀lú ìwọlé kan tí a gbà àti ọ̀kan tí a kọ̀

Yí àlà tí o ti fi hàn nìkan padà, lẹ́yìn náà dán àbájáde méjèèjì wò. Àkọsílẹ̀ tí ó yẹ kí ó jẹ́rìí gbọ́dọ̀ ṣàṣeyọrí, àkọsílẹ̀ tí ó ní ọ̀rọ̀ ìkọ̀kọ̀ tí kò tọ́ sì gbọ́dọ̀ máa kùnà síbẹ̀. Ìyípadà tí ó mú kí gbogbo ìgbìyànjú ṣàṣeyọrí ti yọ ìjẹ́rìí kúrò dípò kí ó tún un ṣe.

Ṣe ìgbìyànjú ìsopọ̀ gidi kan kí o sì ka àkọsílẹ̀ náà lẹ́sẹ̀kẹsẹ̀ lẹ́yìn náà. Ìlà tí ń fi àtúnṣe náà hàn ni àkọsílẹ̀ pam_unix(openvpn:auth) fún ìgbìyànjú yẹn: ó gbọ́dọ̀ sọ pé ìjẹ́rìí ṣàṣeyọrí, kò sì sí àkọsílẹ̀ AVC tí ó gbọ́dọ̀ gbé ìṣẹ́jú àáyá kan náà.

journalctl -u [email protected] -n 30 --no-pager
ss -tnp | grep openvpn

Tunnel tí ń ṣiṣẹ́ tún nílò ìsopọ̀padà, nítorí àwọn ìyípadà sandbox ń ba ìsopọ̀ kejì jẹ́ ní ọ̀pọ̀ ìgbà ju ti àkọ́kọ́ lọ. Ṣàyẹ̀wò socket tí a ti gbé kalẹ̀ lẹ́yìn ìsopọ̀padà kí o sì jẹ́rìí pé unit kan náà ṣì ń sìn ín.

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