OpenVPN-ის script-security დონეები 0-დან 3-მდე და რას ხსნის თითოეული
script-security-ის ყოველი დონე აფართოებს იმას, რისი შესრულებაც პროფილს შეუძლია: ჯერ ადმინისტრაციული დამხმარეები, შემდეგ მომხმარებლის სკრიპტები, ბოლოს პაროლები გარემოში. წაიკითხეთ ინსტრუქციები.
შემოიტანეთ პროფილი დესკტოპის კლიენტში და პირველი მარცხი ხშირად ის ხაზია, რომლის შესრულებაზეც კლიენტი უარს ამბობს: სკრიპტის კაუჭი, რომელსაც არ გაუშვებს, ან script-security-ის მნიშვნელობა, რომელსაც ზედმეტად დასაშვებად მიიჩნევს. რიცხვის გაზრდა დიალოგს აქრობს. მაგრამ ის ასევე აფართოებს იმას, რისი შესრულებაც ამ პროფილს თქვენს მანქანაზე შეუძლია, რაც უცნაური საჩუქარია მხოლოდ გაფრთხილების დასახურად. მიჰყევით იმპორტს ინსტრუქციამდე და გადაწყვეტილება ხელშესახები გახდება.
იმპორტის დიალოგიდან ინსტრუქციამდე
პროფილი არის ტექსტური ფაილი ინსტრუქციებით და კლიენტი მათ კითხულობს ჯერ კიდევ მაშინ, როცა არცერთი გვირაბი არ არსებობს. ინსტრუქცია, როგორიცაა up, down ან tls-verify, ასახელებს გარე პროგრამას, რომელიც OpenVPN-მა გარკვეულ მომენტში უნდა გაუშვას. თუ OpenVPN მზადაა მის გასაშვებად, ეს ცალკე პარამეტრია სახელად script-security და პროფილი, როგორც წესი, მასაც აყენებს.
ასე რომ, გაფრთხილება არ ეხება კრიპტოგრაფიას ან სერტიფიკატებს. ის ეხება კონფიგურაციის ფაილს, რომელიც კლიენტს სთხოვს ჰოსტზე რაღაც შეასრულოს, და კლიენტს, რომელიც ამოწმებს, უშვებს თუ არა მისი მიმდინარე ნებართვის დონე ამ მოთხოვნას.
ამ ეტაპზე ორი განსხვავებული მარცხი ერთნაირად გამოიყურება. პროფილი, რომელიც ითხოვს დონეს, რომელსაც კლიენტი არ მისცემს, წარმოქმნის უარის. პროფილი, რომელიც ითხოვს დონეს, რომელსაც კლიენტი აძლევს, მაგრამ სკრიპტი აკლია, სამაგიეროდ წარმოქმნის მარცხს გაშვების დროს და ორივე ერთმანეთში აირია მხარდაჭერის თემებში. ერთი ნებართვის საკითხია, მეორე კი შეფუთვის.
რას ხსნის სინამდვილეში თითოეული დონე
დონე 0 მთლიანად კრძალავს გარე პროგრამების გამოძახებას, რაც თანმიმდევრულია იმ კლიენტისთვის, რომელიც საკუთარ ინტერფეისს დახმარების გარეშე აყენებს, და არათანმიმდევრულია იმისთვის, რომელიც ოპერაციულ სისტემას მიმართავს. დონე 1, ნაგულისხმევი, უშვებს ჩაშენებულ გაშვებად ფაილებს, რომლებიც ინტერფეისისა და მარშრუტის კონფიგურაციას სჭირდება. არც ერთი დონე არ უშვებს იმას, რაც მომხმარებელს მიუწოდებია.
| Level | What OpenVPN may execute | What it exposes |
|---|---|---|
| 0 | No external programs at all | Interface and route setup must not depend on helpers |
| 1 (default) | Built-in helpers such as ip, ifconfig, route or netsh | Privileged commands the platform already ships |
| 2 | Built-in helpers plus user-defined scripts | Whatever the named script does with the client's privileges |
| 3 | Everything above, plus passwords in environment variables | Credentials visible to child processes and their logs |
დონე 2 საინტერესო ზღვარია, რადგან უშვებს მომხმარებლის მიერ განსაზღვრულ სკრიპტებს. ამ წერტილიდან კლიენტის უფლებამოსილებები ვრცელდება კოდზე, რომელიც შეიძლება არასოდეს წაგიკითხავთ, გამოძახებულს იმ მომენტებში, რომლებიც თქვენ არ აგირჩევიათ, გარემოში, რომელიც შეიცავს კავშირის დეტალებს. დონე 3 უფრო შორს მიდის და უშვებს პაროლების გადაცემას გარემოს ცვლადებით, ამიტომ სახელმძღვანელო მას პოტენციურად არაუსაფრთხოდ აღწერს.
ამ რიცხვებიდან არც ერთი სიძლიერის პარამეტრი არ არის. დონე 3-ის პროფილს არ აქვს უკეთესი დაშიფვრა, ვიდრე დონე 1-ისას; მას უბრალოდ უფრო დიდი აღსრულების ზედაპირი აქვს და გვირაბი იდენტურია.
გადაწყვიტეთ, რისი ღირსია პროფილი
იკითხეთ, რისთვისაა სკრიპტი, სანამ იკითხავთ, რომელი დონე სჭირდება. კაუჭი, რომელიც DNS-ის პარამეტრებს უბიძგებს ან დაკავშირების შემდეგ მარშრუტს არემონტებს რაღაცის გაშვების ლეგიტიმური მიზეზია. კაუჭი, რომელიც დროებით საქაღალდეში უცნობ ბინარულ ფაილს იძახებს, გაჩერების მიზეზია.
სკრიპტის გზა ისეთივე მნიშვნელოვანია, როგორც თავად სკრიპტი. ფარდობითი გზა წყდება იმ საქაღალდის მიმართ, რომელსაც კლიენტი იყენებს, და ჩასაწერი საქაღალდე ერთჯერად იმპორტს მუდმივ აღსრულების ადგილად აქცევს. აბსოლუტური გზები საქაღალდეში, რომლის შეცვლაც მომხმარებელს არ შეუძლია, სასურველი ფორმაა.
სკრიპტები ასევე მემკვიდრეობით იღებენ კლიენტის გარემოს, სადაც ცხოვრობს საიდენტიფიკაციო მონაცემები და კავშირის მეტამონაცემები. სწორედ ეს მემკვიდრეობა ხდის დონე 3-ს საშიშს იმ სკრიპტთან ერთად, რომელიც საკუთარ გარემოს ლოგავს, და ამიტომ სკრიპტებით ჩართული კლიენტის დიაგნოსტიკური ამონაწერი მეორე შეხედვის ღირსია ბილეთში ჩასმამდე. მოხსენით გარემო, სანამ გააზიარებთ.
grep -nE 'script-security|^up |^down |tls-verify' client.ovpnშეცვალეთ ერთი რამ, შემდეგ დააკვირდით დაშლასაც
თუ პროფილს ნამდვილად სჭირდება სკრიპტი, შეცვალეთ მხოლოდ დონე და მხოლოდ ამ პროფილისთვის. გაუშვით კლიენტი წინა პლანზე დეტალური გამოტანით, რომ სკრიპტის საკუთარი შეცდომები ჩანდეს და სერვისის მენეჯერმა არ ჩაყლაპოს ისინი.
openvpn --config client.ovpn --script-security 2 --verb 3
ip route show default
გამოსცადეთ მთელი სასიცოცხლო ციკლი და არა მხოლოდ დაკავშირება. წარუმატებელი გათიშვის კაუჭი მარშრუტებს მკვდარ გვირაბზე მიმართულს ტოვებს, რაც ქმნის მანქანას, რომელიც დაკავშირებულად გამოიყურება და ვერსად აღწევს. სანამ ცვლილებას დასრულებულად გამოაცხადებთ, ერთხელ ხელახლა დაუკავშირდით და ერთხელ გათიშეთ, და ყოველის შემდეგ შეამოწმეთ მარშრუტიზაციის ცხრილი.
შეინახეთ ორიგინალი პროფილის ასლი. თუ პლატფორმის კლიენტი არ ახორციელებს იმავე სკრიპტულ მოდელს, ინსტრუქციების წაშლამ იმპორტის წარმატებამდე შეიძლება მოხსნას ის DNS ან მარშრუტის ინტეგრაცია, რომელიც გვირაბს სჭირდებოდა, და მიღებული კავშირი უნაკლოდ ავთენტიფიცირდება, სამაგიეროდ ვერაფერს გადაწყვეტს.
ჩასაწერი გადაწყვეტილება ვიწროა: რომელი სკრიპტი, რომელ გზაზე, რომელ დონეზე დაშვებული, რომელი პროფილისთვის. პროფილში დანარჩენი ყველაფერი უცვლელი რჩება და ეს არის წინადადება, რომლის შემოწმებაც რეცენზენტს შეუძლია.