Nega OpenVPN ilgagi o'z skripti yonidagi faylni topa olmaydi
Ilgakdagi nisbiy yo'llar skriptga emas, jarayonga nisbatan hal qilinadi. Ularni __file__ bilan bog'lang, so'ng ruxsatlardan oldin nomlar maydoni va identifikatsiyani tekshiring.
Xatosiz ishlab, baribir yo'q fayl haqida xabar beradigan ilgaklar odatda noto'g'ri joyga qaraydi, o'z ishida muvaffaqiyatsiz bo'lmaydi. Skriptdagi nisbiy yo'llar jarayonning ish katalogiga nisbatan hal qilinadi va xizmat siz tanlamagan ish katalogi bilan boshlanadi. Skript yonidagi fayl va jarayon ochadigan fayl faqat biror narsa ularni bog'laganda bir xil bo'ladi. Shu tafovut ruxsat muammosi deb noto'g'ri o'qiladigan ilgak nosozliklarining katta qismini tushuntiradi.
Yo'lni ruxsatlardan oldin tekshiring, chunki noto'g'ri fayldagi ruxsat xatosi baribir noto'g'ri fayl.
Nisbiy yo'l faylga emas, jarayonga nisbatan hal qilinadi
Skript open("policy.json") ni chaqirganda, yadro nomni jarayonning joriy ish katalogiga nisbatan hal qiladi. Skriptning o'z joyidan hech narsa bu qidiruvda qatnashmaydi. OpenVPN ilgaklarni o'zi tanlagan katalogdan boshlaydi va cd parametri uni o'zgartirishi mumkin, shuning uchun o'z jildidan qo'lda sinab ko'rilgan skript demon uni ishga tushirganda boshqacha harakat qiladi. Qo'lda sinov o'tadi, xizmatni ishga tushirish muvaffaqiyatsiz bo'ladi va jurnal satri faqat yo'q nomni eslatadi.
Python skriptning joyini __file__ sifatida ochib beradi va aynan shu bog'lashni mumkin qiladi. Path(__file__).resolve().parent / "policy.json" yo'lni jarayondan emas, fayldan quradi. Shu bir satr imtiyozlarda hech narsani o'zgartirmasdan ish katalogiga bog'liqlikni olib tashlaydi.
Yo'lni ataylab bog'lang, so'ng resolve nima qilishini tekshiring
resolve() ramziy havolalarga ergashadi, shuning uchun ilgakni o'z joyiga bog'laydigan o'rnatish havolaning nishonida bog'lanadi, havolani ushlab turgan katalogda emas. Bu odatda versiyalangan joylashtirish uchun kerakli narsa va ramziy havola yonida ma'lumot kutadigan tartib uchun noto'g'ri. Joylashtirish nimani nazarda tutishini hal qiling va farqni ishlab chiqarishda kashf qilish o'rniga shunga mos kod yozing. Path(__file__).parent resolve() bo'lmasa havolaning o'z katalogini saqlaydi.
Agar ma'lumot dasturga emas, nusxaga tegishli bo'lsa, konfiguratsiyadan mutlaq yo'l oling. Joyni qattiq kodlash ilgakni bitta xost tartibiga bog'laydi.
To'rt chegarani tartib bilan o'ting
Ish katalogidan boshlang: birlikning WorkingDirectory, OpenVPN ning cd parametri va exec oldidan katalogni almashtiradigan har qanday o'ramni solishtiring. So'ng hal qilingan joyni tasdiqlang, chunki boshqa joylashtirishdagi o'xshash nomli fayl qidiruvga javob berib xatoni yashirishi mumkin. Keyingi fayl tizimi ko'rinishi: chroot yoki xizmatning mount nomlar maydoni xostning mutlaq yo'lini shunchaki yo'q qilishi mumkin. Oxirgisi kirish identifikatsiyasi, bu ko'rinishdan alohida savol.
ProtectHome va PrivateTmp turli joylarni yashiradi va ikkalasi ham xostdan olingan katalog ro'yxatida ko'rinmaydi. Shell ichida root uchun mavjud yo'l birlikning nomlar maydoni ichida ko'rinmas bo'lishi mumkin, shuning uchun xizmatdan tashqarida o'sha buyruqni sinash juda oz narsani isbotlaydi.
Qidiruvni xizmatni kengaytirmasdan tuzating
Yo'lni bog'lash faqat birinchi chegarani hal qiladi. U xizmat yashiradigan katalogni ochmaydi va imtiyozsiz hisobga faqat root uchun bo'lgan faylga kirish bermaydi. script-security oshirish OpenVPN qaysi skriptlarni ishga tushirishini o'zgartiradi; nisbiy nom qayerda hal qilinishiga hech qanday ta'siri yo'q. Butun xizmat uchun ish katalogini almashtirish muammodan kengroq, chunki har bir boshqa nisbiy sertifikat, jurnal yoki yordamchi yo'l u bilan birga ko'chadi.
Tor tuzatishni afzal ko'ring: skriptda deterministik yo'l, nusxa ma'lumotlari uchun aniq konfiguratsiya qiymati va ilgak haqiqatan ishlaydigan hisobga mos fayl egaligi.
Chegarani nomlaydigan dalillarni yozing
Foydali nosozlik hisobotida uch narsa bor: ilgak urinib ko'rgan aniq yo'l, uni keltirib chiqargan muhit va qaysi chegara rad etgani. Fayl mazmunini to'kmasdan hal qilingan yo'l va istisnoni chop eting. Bu uchlik noto'g'ri bog'lashni yashirin mountdan va ruxsat rad etishdan ajratadi, ular esa uch xil tuzatishdir.
root terminaldan faylni o'qiy oladi degan da'vo o'sha savollardan faqat biriga javob beradi, qolganlariga hech biriga emas. Buning o'rniga xizmatning o'z kontekstidan sinang.