OpenVPN გასაღების შესაქმნელად დროებითი ფაილი არ გჭირდებათ
გასაღების მასალის მეხსიერებაში შენახვა აირიდებს ფაილის სასიცოცხლო ციკლს და არა გაჟონვას. გამოყავით გამოტანისა და შეცდომის ნაკადები, და შემდეგ გასაღებს საიდუმლოდ მოექეცით.
გასაღების გენერაციას დროებითი ფაილი არ სჭირდება, და მისი გამოტოვება ნაკლებს ასწორებს, ვიდრე უმეტესი სახელმძღვანელო მიანიშნებს. რასაც ის შლის არის ფაილის სასიცოცხლო ციკლი და მის გარშემო არსებული გასუფთავების რბოლა. რასაც ხელუხლებლად ტოვებს არის ყოველი შესაძლებლობა საიდუმლო მოგვიანებით გაჟონოს. სისწორის პრობლემა ამ სკრიპტებში ჩვეულებრივ სხვაგან ზის, რადგან დიაგნოსტიკა და გასაღების მასალა სხვადასხვა ნაკადებში მოგზაურობს.
ფაილი არასდროს იყო ის გამომჟღავნება, რომელსაც ფიქრობდით
დროებითი ფაილი კონკრეტული რისკია, როცა ის ყველასთვის წაკითხვადია, როცა ის გადაურჩება ავარიას, ან როცა გამონაკლისის შემდეგ გასუფთავების ნაბიჯი გამოტოვებულია. ეს რეალურია და ღირს მათი გამოსწორება. ისინი ასევე ლოკალური, ხილული და ადვილად შესამოწმებელია. დაასახელეთ თითოეული საკუთარ სკრიპტში, სანამ დაასკვნით, რომ ცვლილება მხოლოდ კოსმეტიკური იყო.
უფრო მშვიდი რისკები დინების ქვემოთ ზის: გამართვის დროს დაბეჭდილი გასაღები, გამონაკლისი, რომელიც მთელ შედეგის ობიექტს ასერიალებს, ავარიის დამმუშავებელი, რომელიც ბირთვულ დამპს წერს, ჟურნალების შემგროვებელი, რომელიც ჯერ ფაილის ბილიკს და შემდეგ შიგთავსს იღებს. დროებითი ფაილის აცილება არც ერთ მათგანისთვის არაფერს აკეთებს, და საწინააღმდეგოს რწმენა ის გზაა, რომლითაც კეთილგანწყობილი გადაწერა საიდუმლოს წინანდელზე უფრო ღიად ტოვებს. ცვლილებას შეხედეთ როგორც ერთ გაუმჯობესებას რიგში, და არა როგორც გადაწყვეტას.
რას წერს კლიენტი, როცა ფაილის სახელი არ არის მოცემული
კლიენტის მიმდინარე ვერსიები გენერირებულ გასაღებს სტანდარტულ გამოტანაზე აგზავნიან, როცა გასაღების ბრძანება გამოტანის ბილიკის გარეშეა მოცემული. სწორედ ეს დოკუმენტირებული ქცევა ხდის მეხსიერებაში მიდგომას სიცოცხლისუნარიანს, და ის შლის იმ ძველი ხრიკის საჭიროებას, რომ ინსტრუმენტი მოწყობილობის ბილიკზე მივმართოთ.
import subprocess
proc = subprocess.run(
["openvpn", "--genkey", "tls-crypt"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True,
)
key_material = proc.stdout
გადაეცით ბრძანება სიის სახით. აქ გარსის გაფართოება არ არის საჭირო, და გარსის ჩართვა არგუმენტების საზღვარს დამოკიდებულს გახდიდა იმ ბრჭყალებზე, რომლებსაც თქვენ არ აკონტროლებთ. გამოიყენეთ განზრახული შესრულებადი ფაილი აბსოლუტური ბილიკით, თუ სკრიპტი შეიძლება სხვა საძიებო ბილიკით გაეშვას, ვიდრე ელით.
დაბრუნების კოდის შემოწმება ხელს უშლის წარმატების ბილიკს გაგრძელდეს წარუმატებელი გამოძახების შემდეგ. მის გარეშე ცარიელ ბაიტთა სტრიქონს შეუძლია წინ დაიდინოს და მარცხი მხოლოდ გაცილებით გვიან განიცადოს, იმ წერტილში, სადაც გასაღები გამოიყენება და შეცდომის შეტყობინება უკვე საერთოდ არ იხსენიებს გენერაციას.
ორი ნაკადი, ორი მნიშვნელობა
სტანდარტული გამოტანა გასაღებს ატარებს. სტანდარტული შეცდომა ატარებს ყველაფერს, რაც ინსტრუმენტს სურს გითხრათ, მათ შორის გაფრთხილებებს კონფიგურაციის, ვერსიისა და გასაღების ტიპის შესახებ. ორივეს ერთ ბუფერში გადამისამართება ის შეცდომაა, რომელიც დამაჯერებლად გამომხედავ გასაღებს ქმნის, შუაში ჩაკერებული წინადადებით.
ცალკე შეინახეთ ასევე მარცხის ბილიკი. როცა გამოძახება მარცხდება, მოხსენდით წარუმატებელი ბრძანება და გასვლის სტატუსი, და შემდეგ შეგნებულად გადაწყვიტეთ, უსაფრთხოა თუ არა სტანდარტული შეცდომის რომელიმე ნაწილის ჩვენება. მთელი შედეგის ობიექტის ჟურნალში ჩაყრა ჩვეული მოკლე გზაა, და მას გასაღები თან წაუღოს შეიძლება.
ორობითისთვის უსაფრთხო კითხვა მნიშვნელოვანია, თუ მოგვიანებით მასალას ჰეშავთ ან ადარებთ. ტექსტური რეჟიმი მოულოდნელი კოდირებით შეიძლება შეცვალოს ბაიტები, რომლებიც არასდროს უნდა ყოფილიყო ტექსტი, და შეცვლილი გასაღები არ გაირჩევა არასწორისგან, სანამ ხელის ჩამორთმევა არ ჩავარდება.
თუ მაინც ინახავთ, გააკეთეთ ეს შეგნებულად
განლაგებათა უმეტესობას საბოლოოდ გასაღები დისკზე, კარიბჭეზე ან საიდუმლოთა საცავში სჭირდება. დაწერეთ ის ერთხელ, შეზღუდვითი უფლებებით შექმნის მომენტიდან და არა გვიანდელი chmod-ით, და გახადეთ ჩაწერა ატომური, რომ ნაწილობრივი ფაილი არასდროს გახდეს ის, რასაც სერვისი გაშვებისას კითხულობს. იმავე საქაღალდეში ბილიკიდან გადარქმევა ამისთვის ჩვეულებრივ საკმარისია. წაშალეთ მოსამზადებელი ბილიკი მარცხის ტოტში, რადგან წარუმატებელი ჩაწერა ზუსტად ის ასლია, რომელსაც ადამიანები ივიწყებენ.
დააყენეთ ფაილის რეჟიმი მისი შექმნისას, და შეინარჩუნეთ საქაღალდის რეჟიმიც შემზღუდველი. მოერიდეთ ნებისმიერ ბილიკს იმ ადგილის ქვეშ, რომელსაც სარეზერვო სამუშაო ფიქრის გარეშე წმენდს, რადგან ღამის სარეზერვო ასლში არსებული საიდუმლო საიდუმლოა ამ ასლის ყოველ კოპიაში. იგივე მსჯელობა ეხება საერთო მოცულობას, რომლის წაკითხვაც სხვა სერვისებს შეუძლიათ.
საერთო გასაღები იდენტობა არ არის
ამ მასალის გენერაცია არ გასცემს სერტიფიკატს, არ არეგისტრირებს კლიენტს და არ ადგენს, ვინ უკავშირდება. საერთო გასაღები იცავს არხს უკვე ერთმანეთის მიმართ მოტივტივე მხარეებს შორის; იდენტობა მაინც სერტიფიკატიდან და მის წინ მდგარი ნებისმიერი ავთენტიფიკაციიდან მოდის.
გასაღების ტიპებიც არ არიან ურთიერთშემცვლელი. ერთი ფუნქციისთვის სიმეტრიული გასაღები მეორისთვის მზა შემცვლელი არ არის, და უფრო ახალი გამოშვებები საკუთარ ვარიანტებს სძენენ, თითოეულ ბოლოში განსხვავებული ფაილებით. დააგენერირეთ ის ტიპი, რომელსაც თქვენი კონფიგურაცია ნამდვილად ასახელებს, და შემდეგ გამოიყენეთ ის იმ როლში, რომელსაც ეს ტიპი განსაზღვრავს.
შედეგი შეამოწმეთ ნამდვილი კავშირით და არა ფაილის ზომის დათვალიერებით. თუ ხელის ჩამორთმევა სრულდება და ჟურნალები გასაღების გაფრთხილებებს არ აჩვენებენ, გენერაციის გზა სწორია; გასაღები შერწყმული ნაკადით რომ მოჭრილიყო, კავშირი ჩავარდებოდა ისე, რომ მიუთითებდა არა სკრიპტზე, არამედ მეორე მხარეს.