Jurnal o'sadi, lekin uni qayta yaratib bo'lmaydi: katalog ACL'ini tekshiring
Faylga qo'shish uning katalogida yangi nom talab qilmaydi; yaratish talab qiladi. Biror narsani kengaytirishdan oldin kirish ACL'ini meros qolgan standart qiymatlar bilan solishtiring.
Doimiy o'sib borayotgan jurnal biror narsa uni qayta yaratgan paytda o'sishni to'xtatadi va xato ruxsat berilmaganini aytadi. Jurnal faylining o'ziga ko'proq ruxsat kerak degan xulosa jozibali, ammo fayl o'sha hisob uchun allaqachon yoziladigan bo'lishi mumkin. Mavjud nomga qo'shish va yangi nom yaratish ikki xil tekshiruvdir va faqat ikkinchisi katalogga murojaat qiladi.
Qo'shish va yaratish ikki xil tekshiruv
Mavjud faylni qo'shish uchun ochish o'sha faylga yozish huquqini va uning yo'lidagi har bir katalogda qidirish huquqini talab qiladi. Fayl yaratish uni saqlovchi katalogda yozish va qidirishni talab qiladi, chunki amal unga nom qo'shadi. Faylni qayta nomlash orqali almashtirish ikkala katalogga va ularning sticky-bit qoidalariga ham ta'sir qiladi.
| 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 |
Allaqachon ochilgan deskriptor to'rtinchi holatni qo'shadi. Jarayon imtiyozlardan voz kechishdan oldin ochilgan yozish tutqichini ushlab turib, keyingi o'zligida o'sha yo'lni qayta ocha olmasligi mumkin. Muvaffaqiyatli qo'shishlar va muvaffaqiyatsiz yaratish bir jarayon uchun bir vaqtning o'zida ikkalasi ham to'g'ri bo'lishi mumkin.
Standart ACL'lar meros qoladi, ular bermaydi
Standart prefiks bilan boshlanadigan yozuv yangi obyektlar katalogdan nima meros olishini tavsiflaydi. U katalogning o'ziga hech narsa bermaydi va allaqachon mavjud faylning ACL'ini tuzatmaydi.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
Kirish yozuvlarini standartlardan alohida o'qing va maskani o'qing. To'liq huquqlarni sanab o'tuvchi nomlangan yozuv ham maska bilan cheklanishi mumkin, shuning uchun samarali izoh birinchi satrdagi harflardan muhimroq.
Konfiguratsiyadagi yo'l o'rniga hal qilingan yo'ldan foydalaning. Simvolik havola, ulash nuqtasi yoki aylantirilgan katalog haqiqiy faylni siz bergan ruxsat hech qachon yetmaydigan joyga qo'yishi mumkin. Avval nomlar asbobi bilan yo'lni bosib o'ting, so'ng har bir darajani tegishli hisob bilan solishtiring. Yuqori darajadagi katalogni taxmin qilish — tuzatishning bir daraja juda baland tushishining sababi.
O'sha paytda kim yozayotganini aniqlang
Biror narsani o'zgartirishdan oldin xizmat birligini, uning drop-inlarini va demonning o'z hisob sozlamalarini tekshiring. Qo'shuvchi jarayon va qayta yaratuvchi jarayon boshqacha bo'lishi mumkin: aylantirish yordamchisi, holat yozuvchisi va veb o'quvchi kamdan-kam bir xil o'zlikni bo'lishadi.
root qobig'idan ishga tushirilgan sinov cheklangan xizmatni qayta hosil qilmaydi, va xizmat muvaffaqiyatsizlikda davom etayotganda u muvaffaqiyatli bo'ladi. Muvaffaqiyatsiz amalni o'sha birlik ostida, o'sha hisob va o'sha sandbox sozlamalari bilan qayta hosil qiling. Agar qila olmasangiz, birlikni vaqtinchalik qobiq bilan ishga tushiring va u e'lon qilgan o'zlikni tekshiring. Boshqa hamma narsa xizmatni emas, terminalingizni o'lchaydi.
Agar yaratish chindan ham zarur bo'lsa, yozuvchiga maxsus jurnal katalogiga kirish bering, iste'molchilar uchun o'qish kirishini alohida saqlang. Bitta log yozish chaqirig'ini qondirish uchun umumiy hisobni yoki butun dastur daraxtini yoziladigan qilish kichik muammoni katta bilan almashtiradi.
Uni qayta kiritmasdan aylantiring
Faylni qayta yaratgan kishi keyingi sikl uchun uning egasi va rejimini belgilaydi, shuning uchun tuzatishni aylantirish konfiguratsiyasi bilan muvofiqlashtiring. Boshqa hisob ostida yoki yangi ACL bilan yaratilgan almashtiruvchi muvaffaqiyatli tuzatishdan keyin nosozlikni qaytaradi.
Rejim va guruhni yaratish paytida o'rnating, keyin emas, va keyingi qo'shish o'rniga keyingi aylantirishni tekshiring. Qo'shish faqat allaqachon o'tgan sinovni takrorlaydi. Agar aylantirish asbobi yaratish rejimi sozlamasini taklif qilsa, yaratishdan keyingi chmod o'rniga undan foydalaning. Yaratish va chmod orasidagi bo'shliq keyingi yozish muvaffaqiyatsiz bo'lishi mumkin bo'lgan aynan o'sha payt.
Kesish baribir muvaffaqiyatsiz bo'lsa, ruxsat qo'shishni to'xtating
Siz yoza oladigan faylni kesishdagi muvaffaqiyatsizlik katalog ruxsatlari bilan izohlanmaydi va ularni ko'proq qo'shish yordam bermaydi. Buning o'rniga atributlar va cheklovga qarang: append-only atributi faqat qo'shish rejimida yozishga ruxsat beradi, faqat o'qish uchun ulash yoki xizmat sandbox'i ACL ruxsat bergan amalni rad etishi mumkin.
Birlikning fayl tizimi cheklovlarini va yo'lning ulash imkoniyatlarini tekshiring, so'ng muvaffaqiyatsiz bo'lgan aniq amalni qayta hosil qiling. Hech qachon so'ralmagan ruxsatni kengaytirish faqat qaysi cheklov haqiqiy bo'lganini yashiradi. Bir martalik birlikda bir vaqtning o'zida bitta cheklovni olib tashlang va doimiy biror narsani o'zgartirishdan oldin uni qaytaring.