ലോഗ് ചേർക്കപ്പെടുന്നു പക്ഷേ വീണ്ടും സൃഷ്ടിക്കാനാകുന്നില്ല: ഡയറക്ടറിയുടെ ACL പരിശോധിക്കുക
ഒരു ഫയലിലേക്ക് ചേർക്കാൻ അതിന്റെ ഡയറക്ടറിയിൽ പുതിയ പേര് ആവശ്യമില്ല; സൃഷ്ടിക്കാൻ ആവശ്യമാണ്. എന്തെങ്കിലും വിപുലീകരിക്കുന്നതിന് മുമ്പ് ആക്സസ് ACL അനന്തരാവകാശ ഡീഫോൾട്ടുകളുമായി താരതമ്യം ചെയ്യുക.
തുടർച്ചയായി വളരുന്ന ഒരു ലോഗ്, എന്തെങ്കിലും അതിനെ വീണ്ടും സൃഷ്ടിക്കുന്ന നിമിഷത്തിൽ വളരുന്നത് നിർത്തുന്നു, പിശക് അനുമതി നിഷേധിക്കപ്പെട്ടു എന്ന് പറയുന്നു. ലോഗ് ഫയലിന് തന്നെ കൂടുതൽ അനുമതികൾ വേണം എന്നതാണ് പ്രലോഭിപ്പിക്കുന്ന നിഗമനം, എന്നാൽ ഫയൽ ഇതിനകം അതേ അക്കൗണ്ടിന് എഴുതാവുന്നതായിരിക്കാം. നിലവിലുള്ള പേരിലേക്ക് ചേർക്കുന്നതും പുതിയ പേര് സൃഷ്ടിക്കുന്നതും രണ്ട് വ്യത്യസ്ത പരിശോധനകളാണ്, രണ്ടാമത്തേത് മാത്രമാണ് ഡയറക്ടറിയെ സമീപിക്കുന്നത്.
ചേർക്കലും സൃഷ്ടിക്കലും വ്യത്യസ്ത പരിശോധനകളാണ്
നിലവിലുള്ള ഒരു ഫയൽ ചേർക്കാൻ തുറക്കുന്നതിന് ആ ഫയലിൽ എഴുത്ത് ആക്സസും അതിന്റെ പാതയിലെ ഓരോ ഡയറക്ടറിയിലും തിരയൽ ആക്സസും വേണം. ഫയൽ സൃഷ്ടിക്കാൻ അത് ഉൾക്കൊള്ളുന്ന ഡയറക്ടറിയിൽ എഴുത്തും തിരയലും വേണം, കാരണം പ്രവർത്തനം അതിൽ ഒരു പേര് ചേർക്കുന്നു. പേരുമാറ്റത്തിലൂടെ ഫയൽ മാറ്റിസ്ഥാപിക്കുന്നത് രണ്ട് ഡയറക്ടറികളെയും അവയുടെ സ്റ്റിക്കി-ബിറ്റ് നിയമങ്ങളെയും സ്പർശിക്കുന്നു.
| Operation | What must permit it | Typical failure message |
|---|---|---|
| Append to an existing log | File write access, path traversal | Permission denied on the file |
| Create a missing log | Directory write and search access | Permission denied on the path |
| Rename a replacement into place | Both directories, plus sticky restrictions | Permission denied or operation not permitted |
ഇതിനകം തുറന്ന ഡിസ്ക്രിപ്റ്റർ നാലാമത്തെ കേസ് ചേർക്കുന്നു. ഒരു പ്രോസസ്സിന് പ്രിവിലേജുകൾ ഉപേക്ഷിക്കുന്നതിന് മുമ്പ് തുറന്ന എഴുത്ത് ഹാൻഡിൽ കൈവശം വയ്ക്കാം, എന്നിട്ടും അതിന്റെ പിന്നീടുള്ള ഐഡന്റിറ്റിയിൽ അതേ പാത വീണ്ടും തുറക്കാൻ പരാജയപ്പെടാം. വിജയകരമായ ചേർക്കലുകളും പരാജയപ്പെട്ട സൃഷ്ടിക്കലും ഒരേ പ്രോസസ്സിന്, ഒരേ നിമിഷത്തിൽ, രണ്ടും സത്യമായിരിക്കാം.
ഡീഫോൾട്ട് ACL-കൾ അനന്തരാവകാശമായി വരുന്നു, അവ നൽകുന്നില്ല
ഡീഫോൾട്ട് പ്രിഫിക്സിൽ തുടങ്ങുന്ന ഒരു എൻട്രി പുതിയ ഒബ്ജക്റ്റുകൾ ഡയറക്ടറിയിൽ നിന്ന് എന്ത് അനന്തരാവകാശമായി സ്വീകരിക്കുന്നു എന്ന് വിവരിക്കുന്നു. അത് ഡയറക്ടറിക്ക് തന്നെ ഒന്നും നൽകുന്നില്ല, ഇതിനകം നിലവിലുള്ള ഫയലിന്റെ ACL അത് നന്നാക്കുന്നുമില്ല.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
ആക്സസ് എൻട്രികൾ ഡീഫോൾട്ടുകളിൽ നിന്ന് വേർതിരിച്ച് വായിക്കുക, മാസ്കും വായിക്കുക. പൂർണ്ണ അവകാശങ്ങൾ ലിസ്റ്റ് ചെയ്യുന്ന പേരുള്ള എൻട്രി പോലും മാസ്ക് ഉപയോഗിച്ച് പരിമിതപ്പെടുത്താം, അതുകൊണ്ടാണ് ആദ്യ വരിയിലെ അക്ഷരങ്ങളേക്കാൾ ഇഫക്റ്റീവ് കമന്റ് പ്രധാനമാകുന്നത്.
കോൺഫിഗറേഷനിലെ പാതയ്ക്ക് പകരം പരിഹരിച്ച പാത ഉപയോഗിക്കുക. ഒരു സിംബോളിക് ലിങ്ക്, മൗണ്ട് പോയിന്റ് അല്ലെങ്കിൽ കറക്കിയ ഡയറക്ടറി യഥാർത്ഥ ഫയലിനെ നിങ്ങൾ നൽകിയ അനുമതി ഒരിക്കലും എത്താത്ത ഇടത്ത് ഇടാം. ആദ്യം പേര് ഉപകരണം ഉപയോഗിച്ച് പാതയിലൂടെ നടക്കുക, തുടർന്ന് ഓരോ നിലവാരവും ബന്ധപ്പെട്ട അക്കൗണ്ടുമായി താരതമ്യം ചെയ്യുക. മുകളിലെ ഡയറക്ടറി ഊഹിക്കുന്നതാണ് ഒരു തിരുത്ത് ഒരു നിലവാരം അധികം ഉയരത്തിൽ ഇറങ്ങുന്ന വഴി.
ആ നിമിഷം ആരാണ് എഴുതുന്നതെന്ന് തിരിച്ചറിയുക
എന്തെങ്കിലും മാറ്റുന്നതിന് മുമ്പ് സേവന യൂണിറ്റ്, അതിന്റെ ഡ്രോപ്പ്-ഇന്നുകൾ, ഡീമണിന്റെ സ്വന്തം അക്കൗണ്ട് ക്രമീകരണങ്ങൾ എന്നിവ പരിശോധിക്കുക. ചേർക്കുന്ന പ്രോസസ്സും വീണ്ടും സൃഷ്ടിക്കുന്ന പ്രോസസ്സും വ്യത്യസ്തമായിരിക്കാം: റൊട്ടേഷൻ സഹായി, സ്റ്റാറ്റസ് എഴുത്തുകാരൻ, വെബ് വായനക്കാരൻ എന്നിവർ ഐഡന്റിറ്റി അപൂർവ്വമായേ പങ്കിടൂ.
root ഷെല്ലിൽ നിന്ന് നടത്തിയ പരിശോധന നിയന്ത്രിത സേവനത്തെ പുനർനിർമ്മിക്കുന്നില്ല, സേവനം പരാജയപ്പെട്ടുകൊണ്ടിരിക്കുമ്പോൾ അത് വിജയിക്കും. പരാജയപ്പെട്ട പ്രവർത്തനം അതേ യൂണിറ്റിന് കീഴിൽ, അതേ അക്കൗണ്ടും അതേ സാൻഡ്ബോക്സ് ക്രമീകരണങ്ങളും ഉപയോഗിച്ച് പുനർനിർമ്മിക്കുക. സാധ്യമല്ലെങ്കിൽ, താൽക്കാലിക ഷെല്ലുമായി യൂണിറ്റ് ആരംഭിച്ച് അത് റിപ്പോർട്ട് ചെയ്യുന്ന ഐഡന്റിറ്റി പരിശോധിക്കുക. മറ്റെന്തും സേവനത്തെയല്ല, നിങ്ങളുടെ ടെർമിനലിനെയാണ് അളക്കുന്നത്.
സൃഷ്ടിക്കൽ ശരിക്കും ആവശ്യമാണെങ്കിൽ, എഴുത്തുകാരന് സമർപ്പിത ലോഗ് ഡയറക്ടറിയിലേക്ക് ആക്സസ് നൽകുക, ഉപഭോക്താക്കൾക്കുള്ള വായനാ ആക്സസ് വേർതിരിച്ച് നിർത്തുക. ഒരു ലോഗിംഗ് കോൾ തൃപ്തിപ്പെടുത്താൻ പങ്കിട്ട അക്കൗണ്ടോ മുഴുവൻ ആപ്ലിക്കേഷൻ ട്രീയോ എഴുതാവുന്നതാക്കുന്നത് ചെറിയ പ്രശ്നത്തെ വലിയതുമായി കൈമാറുന്നു.
വീണ്ടും കൊണ്ടുവരാതെ റൊട്ടേറ്റ് ചെയ്യുക
ഫയൽ വീണ്ടും സൃഷ്ടിക്കുന്നവരാണ് അടുത്ത ചക്രത്തിന് അതിന്റെ ഉടമയും മോഡും തീരുമാനിക്കുന്നത്, അതിനാൽ തിരുത്ത് റൊട്ടേഷൻ കോൺഫിഗറേഷനുമായി ഏകോപിപ്പിക്കുക. മറ്റൊരു അക്കൗണ്ടിന് കീഴിലോ പുതിയ ACL-നോടെയോ സൃഷ്ടിച്ച പകരം വയ്പ്പ് വിജയകരമായ തിരുത്തലിന് ശേഷം പരാജയം തിരികെ കൊണ്ടുവരുന്നു.
മോഡും ഗ്രൂപ്പും സൃഷ്ടിക്കുമ്പോൾ തന്നെ സജ്ജീകരിക്കുക, പിന്നീടല്ല, അടുത്ത ചേർക്കലിന് പകരം അടുത്ത റൊട്ടേഷൻ പരിശോധിക്കുക. ചേർക്കൽ ഇതിനകം വിജയിച്ച പരിശോധന ആവർത്തിക്കുന്നു മാത്രം. റൊട്ടേഷൻ ഉപകരണം ഒരു ക്രിയേറ്റ്-മോഡ് ക്രമീകരണം വാഗ്ദാനം ചെയ്യുന്നുവെങ്കിൽ, സൃഷ്ടിക്കലിന് ശേഷമുള്ള chmod-ന് പകരം അത് ഉപയോഗിക്കുക. സൃഷ്ടിക്കലും chmod-നും ഇടയിലുള്ള ഇടവേളയാണ് അടുത്ത എഴുത്ത് പരാജയപ്പെടാനിടയുള്ള കൃത്യമായ നിമിഷം.
വെട്ടിച്ചുരുക്കൽ എങ്ങനെയും പരാജയപ്പെട്ടാൽ, അനുമതികൾ ചേർക്കുന്നത് നിർത്തുക
നിങ്ങൾക്ക് എഴുതാവുന്ന ഒരു ഫയൽ വെട്ടിച്ചുരുക്കുന്നതിലെ പരാജയം ഡയറക്ടറി അനുമതികളാൽ വിശദീകരിക്കപ്പെടുന്നില്ല, അവ കൂടുതൽ ചേർത്താലും സഹായിക്കില്ല. പകരം ആട്രിബ്യൂട്ടുകളും നിയന്ത്രണവും നോക്കുക: append-only ആട്രിബ്യൂട്ട് ചേർക്കൽ മോഡിൽ മാത്രം എഴുത്ത് അനുവദിക്കുന്നു, കൂടാതെ വായനയ്ക്ക് മാത്രമുള്ള മൗണ്ടോ സേവന സാൻഡ്ബോക്സോ ACL അനുവദിക്കുന്ന ഒരു പ്രവർത്തനം നിഷേധിച്ചേക്കാം.
യൂണിറ്റിന്റെ ഫയൽസിസ്റ്റം നിയന്ത്രണങ്ങളും പാതയുടെ മൗണ്ട് ഓപ്ഷനുകളും പരിശോധിക്കുക, തുടർന്ന് പരാജയപ്പെട്ട കൃത്യമായ പ്രവർത്തനം പുനർനിർമ്മിക്കുക. ഒരിക്കലും സമീപിക്കാത്ത ഒരു അനുമതി വിപുലീകരിക്കുന്നത് ഏത് നിയന്ത്രണമാണ് യഥാർത്ഥമായിരുന്നതെന്ന് മറയ്ക്കുന്നു മാത്രം. വലിച്ചെറിയാവുന്ന ഒരു യൂണിറ്റിൽ ഒരു സമയത്ത് ഒരു നിയന്ത്രണം നീക്കം ചെയ്യുക, സ്ഥിരമായ എന്തെങ്കിലും മാറ്റുന്നതിന് മുമ്പ് അത് തിരികെ വയ്ക്കുക.