Kumbukumbu inayoendelea kukua huacha kukua mara moja kitu kinapoijenga upya, na hitilafu husema ruhusa imekataliwa. Hitimisho la kuvutia ni kwamba faili yenyewe ya kumbukumbu inahitaji ruhusa zaidi, lakini faili inaweza kuwa tayari inaandikika na akaunti hiyo hiyo. Kuongeza kwenye jina lililopo na kuunda jina jipya ni ukaguzi mbili tofauti, na wa pili tu ndio huuuliza saraka.

Kuongeza na kuunda ni ukaguzi tofauti

Kufungua faili iliyopo kwa ajili ya kuongeza kunahitaji ufikiaji wa kuandika kwenye faili hiyo pamoja na ufikiaji wa kutafuta katika kila saraka kwenye njia yake. Kuunda faili kunahitaji kuandika na kutafuta kwenye saraka inayoihifadhi, kwa sababu operesheni inaongeza jina ndani yake. Kubadilisha faili kwa njia ya kubadilisha jina kunagusa saraka zote mbili na kanuni zao za sticky-bit.

OperationWhat must permit itTypical failure message
Append to an existing logFile write access, path traversalPermission denied on the file
Create a missing logDirectory write and search accessPermission denied on the path
Rename a replacement into placeBoth directories, plus sticky restrictionsPermission denied or operation not permitted

Kielezo kilichofunguliwa tayari kinaongeza hali ya nne. Mchakato unaweza kushikilia kipini cha kuandika kilichofunguliwa kabla ya kuachilia mapendeleo na bado ukashindwa kufungua tena njia hiyo hiyo chini ya utambulisho wake wa baadaye. Ongezeko zilizofanikiwa na uundaji ulioshindwa zinaweza zote kuwa kweli, kwa wakati mmoja, kwa mchakato mmoja.

ACL chaguo-msingi hurithiwa, hazitoi

Kipengele kinachoanza na kiambishi cha chaguo-msingi kinaeleza kile vitu vipya hurithi kutoka kwenye saraka. Hakitoi kitu chochote kwa saraka yenyewe, na hakitengenezi ACL ya faili iliyopo tayari.

namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log

Soma sehemu za ufikiaji kwa tofauti na zile za chaguo-msingi, na soma mask. Kipengele chenye jina kinachoorodhesha haki kamili bado kinaweza kuzuiwa na mask, ndiyo sababu maoni ya ufanisi ni muhimu zaidi kuliko herufi kwenye mstari wa kwanza.

Tumia njia iliyotatuliwa badala ya njia iliyo kwenye usanidi. Kiungo cha mfano, sehemu ya kupachika au saraka iliyozungushwa zinaweza kuweka faili halisi mahali ambapo ruhusa uliyotoa haifiki kamwe. Pitia njia kwa chombo cha majina kwanza, kisha linganisha kila ngazi na akaunti husika. Kukisia saraka ya ngazi ya juu ndiyo njia ambayo marekebisho yanatua ngazi moja juu sana.

Baini nani anaandika wakati huo

Angalia kitengo cha huduma, drop-in zake na mipangilio ya akaunti ya daemon yenyewe kabla ya kubadilisha chochote. Mchakato unaoongeza na mchakato unaounda upya unaweza kuwa tofauti: msaidizi wa mzunguko, mwandishi wa hali na msomaji wa wavuti mara chache hushiriki utambulisho.

Jaribio lililoendeshwa kutoka shell ya root haliunda upya huduma iliyozuiwa, na litafanikiwa wakati huduma ikiendelea kushindwa. Zalisha upya operesheni iliyoshindwa chini ya kitengo kimoja, kwa akaunti moja na mipangilio ile ile ya sandbox. Ikiwa huwezi, anzisha kitengo kwa shell ya muda na uangalie utambulisho inaoripoti. Kitu kingine chochote kinapima terminal yako, si huduma.

Ikiwa uundaji unahitajika kweli, mpe mwandishi ufikiaji wa saraka maalum ya kumbukumbu na uweke ufikiaji wa kusoma kwa watumiaji kando. Kufanya akaunti ya pamoja au mti mzima wa programu uandikike ili kukidhi wito mmoja wa uandishi wa kumbukumbu hubadilisha tatizo dogo kwa kubwa.

Zungusha bila kuirejesha

Yeyote anayeunda faili upya huamua mmiliki na hali yake kwa mzunguko unaofuata, kwa hiyo ratibu marekebisho na usanidi wa mzunguko. Kibadala kilichoundwa chini ya akaunti nyingine, au kwa ACL mpya, hurudisha hitilafu baada ya marekebisho yaliyofanikiwa.

Weka hali na kikundi wakati wa uundaji, si baadaye, na thibitisha mzunguko unaofuata badala ya ongezeko linalofuata. Ongezeko hurudia tu jaribio lililopita tayari. Ikiwa chombo cha mzunguko kinatoa mpangilio wa hali ya uundaji, tumia hiyo badala ya chmod baada ya uundaji. Pengo kati ya uundaji na chmod ni wakati hasa ambapo uandishi unaofuata unaweza kushindwa.

Wakati ukataji unashindwa hata hivyo, acha kuongeza ruhusa

Kushindwa kukata faili unayoweza kuandika hakuelezwi na ruhusa za saraka, na kuongeza zaidi hakutoshi. Badala yake angalia sifa na kizuizi: sifa ya append-only huruhusu kuandika tu katika hali ya kuongeza, na upachikaji wa kusoma tu au sandbox ya huduma zinaweza kukataa operesheni ambayo ACL inaruhusu.

Angalia vizuizi vya mfumo wa faili wa kitengo na chaguo za upachikaji za njia, kisha zalisha upya operesheni kamili iliyoshindwa. Kupanua ruhusa ambayo haikushauriwa kamwe huficha tu kizuizi kipi kilikuwa halisi. Ondoa kizuizi kimoja kwa wakati katika kitengo cha kutupwa, na kirejeshe kabla ya kubadilisha kitu chochote cha kudumu.

Makala zinazohusiana