ولې د 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 بېلابېل ځایونه پټوي، او هېڅ یو یې په هغه لړلیک لړ کې نه ښکاري چې له کوربه څخه اخیستل شوی۔ هغه لاره چې په شیل کې د root لپاره شته، کېدای شي د واحد د نومونو فضا دننه نه لیدل کېدونکې وي، او ځکه همدا لامل دی چې له خدمت بهر د همدې امر ازموینه دومره لږ ثابتوي۔
لټون پرته له دې چې خدمت پراخ کړئ سم کړئ
د لارې تړل یوازې لومړۍ پوله حل کوي۔ دا هغه لړلیک نه ښکاره کوي چې خدمت یې پټوي، او بې امتیازه حساب ته د یوازې root لپاره فایل ته لاسرسی نه ورکوي۔ script-security لوړول بدلوي چې OpenVPN کوم سکریپټونه چلوي؛ د دې لپاره چې نسبي نوم چېرته حل کېږي هېڅ اغېزه نه لري۔ د ټول خدمت لپاره کاري لړلیک بدلول له ستونزې پراختر دی، ځکه چې هر بل نسبي سند، لاګ یا مرستندویه لاره ورسره ځي۔
نرۍ سمون غوره کړئ: په سکریپټ کې ټاکلې لاره، د بېلګې ډاټا لپاره ښکاره ترتیبي ارزښت، او د فایل مالکیت چې د هغه حساب سره سم وي چې هوک واقعاً ترې چلېږي۔
هغه شواهد ثبت کړئ چې پوله نوموي
ګټور د ناکامۍ راپور درې شیان لري: هغه دقیقه لاره چې هوک هڅه کړې، هغه چاپېریال چې جوړه کړې، او کومه پوله چې رد کړې۔ حل شوې لاره او استثنا چاپ کړئ پرته له دې چې د فایل منځپانګه توی کړئ۔ همدا درېګڼه غلط تړل له پټ mount او له اجازې ردولو څخه بېلوي، او هغه درې بېلابېل سمونونه دي۔
دا ادعا چې root کولای شي فایل له ټرمینل څخه ولولي، یوازې د هغو پوښتنو له یوې سره ځواب وایي او د نورو له هېڅ یوې سره نه۔ پرځای یې د خدمت له خپل چاپېریال څخه ازموینه وکړئ۔