Эмне үчүн OpenVPN илгичи өз скриптинин жанындагы файлды таба албайт
Илгичтеги салыштырмалуу жолдор скриптке эмес, процесске карата чечилет. Аларды __file__ менен бекемдеп, андан кийин уруксаттарга чейин ат мейкиндигин жана инсандыгын текшериңиз.
Катасыз иштеп, бирок жок файл тууралуу кабарлаган илгичтер адатта туура эмес жерди карашат, өз ишинде ийгиликсиз болушпайт. Скрипттеги салыштырмалуу жолдор процесстин жумуш каталогуна карата чечилет, ал эми кызмат сиз тандабаган жумуш каталогу менен башталат. Скрипттин жанындагы файл менен процесстин ачкан файлы бир нерсе болуп гана калат, эгер бир нерсе аларды бекемдесе. Бул айырма уруксат маселеси деп туура эмес окулган илгич бузулуштарынын чоң бөлүгүн түшүндүрөт.
Жолду уруксаттардан мурун текшериңиз, анткени туура эмес файлдагы уруксат катасы баары бир туура эмес файл.
Салыштырмалуу жол файлга эмес, процесске карата чечилет
Скрипт open("policy.json") чакырганда, өзөк атты процесстин учурдагы жумуш каталогуна карата чечет. Скрипттин өз ордунан эч нерсе бул издөөгө катышпайт. OpenVPN илгичтерди өзү тандаган каталогдон баштайт жана cd опциясы аны өзгөртө алат, ошондуктан өз папкасынан кол менен текшерилген скрипт демон аны иштеткенде башкача жүрүм-турум көрсөтөт. Кол текшерүү өтөт, кызматты иштетүү ийгиликсиз болот, ал эми журнал сабы жок атты гана эскерет.
Python скрипттин ордун __file__ катары ачат, жана дал ушул бекемдөөгө мүмкүндүк берет. Path(__file__).resolve().parent / "policy.json" жолду процесстен эмес, файлдан курат. Ошол бир сап артыкчылыктарда эч нерсени өзгөртпөстөн жумуш каталогуна көз карандылыкты алып салат.
Жолду атайын бекемдеп, андан кийин resolve эмне кылаарын текшериңиз
resolve() символдук шилтемелерди ээрчийт, ошондуктан илгичти ордуна байлаган орнотуу шилтеменин максатында бекемделет, шилтемени кармаган каталогдо эмес. Бул адатта версияланган жайгаштыруу үчүн керектүү жүрүм-турум, ал эми символдук шилтеменин жанында маалымат күткөн жайгашуу үчүн туура эмес. Жайгаштыруу эмнени билдирерин чечип, айырманы өндүрүштө ачуунун ордуна ошого жараша код жазыңыз. Path(__file__).parent resolve() жок болгондо шилтеменин өз каталогун сактайт.
Эгер маалымат программага эмес, үлгүгө таандык болсо, конфигурациядан абсолюттук жол алыңыз. Орду катуу коддоо илгичти бир хост жайгашуусуна байлайт.
Төрт чекти ирети менен өтүңүз
Жумуш каталогунан баштаңыз: бирдиктин WorkingDirectory, OpenVPNдин cd опциясын жана exec алдында каталогду алмаштырган ар кандай каптоону салыштырыңыз. Андан кийин чечилген орунду ырастаңыз, анткени башка жайгаштыруудагы окшош аттуу файл издөөгө жооп берип, катаны жашыра алат. Кийинкиси файлдык система көрүнүшү: chroot же кызматтын mount ат мейкиндиги хосттун абсолюттук жолун жөн эле жок кыла алат. Акыркысы — жетүү инсандыгы, бул көрүнүүдөн өзүнчө маселе.
ProtectHome жана PrivateTmp ар башка орундарды жашырат, жана экөө тең хосттон алынган каталог тизмесинде көрүнбөйт. Shell ичинде root үчүн бар жол бирдиктин ат мейкиндигинде көрүнбөй калышы мүмкүн, ошондуктан кызматтан тышкары ошол эле буйрукту текшерүү абдан аз нерсени далилдейт.
Издөөнү кызматты кеңейтпей оңдоңуз
Жолду бекемдөө биринчи чекти гана чечет. Ал кызмат жашырган каталогду ачпайт жана артыкчылыгы жок эсепке root үчүн гана болгон файлга жетүү бербейт. script-security көтөрүү OpenVPN кайсы скрипттерди иштетерин өзгөртөт; бул салыштырмалуу аттын кайда чечилишине эч таасир этпейт. Бүткүл кызматтын жумуш каталогун өзгөртүү маселеден кеңири, анткени калган ар бир салыштырмалуу сертификат, журнал же жардамчы жол аны менен бирге жылат.
Тар оңдоону тандаңыз: скрипттеги детерминдүү жол, үлгү маалыматтары үчүн ачык конфигурация мааниси жана илгич чынында иштеген эсепке туура келген файл ээлиги.
Чекти атаган далилдерди жазыңыз
Пайдалуу бузулуу отчётунда үч нерсе бар: илгич аракет кылган так жол, аны жараткан чөйрө жана кайсы чек баш тартканы. Файлдын мазмунун төкпөстөн чечилген жолду жана өзгөчөлүктү басып чыгарыңыз. Бул үчтүк туура эмес бекемдөөнү жашыруун mountтан жана уруксаттан баш тартуудан ажыратат, ал эми алар үч башка оңдоо.
root терминалдан файлды окуй алат деген ырастоо ошол суроолордун бирине жооп берет, калгандарынын бирине да эмес. Анын ордуна кызматтын өз контекстинен текшериңиз.