client-config-dir იგნორირდება მას შემდეგ, რაც OpenVPN სერვისად იქცა
ფარდობითი client-config-dir წყდება დემონის სამუშაო საქაღალდის მიმართ. წაიკითხეთ unit, გაიარეთ ბილიკის ნებართვები და შემდეგ დაადასტურეთ ძებნა ჟურნალში.
გვირაბი ადის და კლიენტი უკავშირდება, მაგრამ ფიქსირებული მისამართი და ის მარშრუტები, რომლებიც ამ ერთი მომხმარებლისთვის განსაზღვრეთ, აკლია. ჟურნალში “file not found” არ წერია და სწორედ ეს აგზავნის ხალხს სერტიფიკატების ხელახლა გენერირებაზე. ამ შემთხვევების უმეტესობაში დემონი სხვა საქაღალდიდან მუშაობს, ვიდრე ის shell, რომელშიც ტესტავდით, და client-config-dir არასოდეს გადაწყვეტილა ისე, როგორც ვარაუდობდით. გასწორება ბილიკის კორექციაა და არა სერტიფიკატების განულება.
წაიკითხეთ unit კონფიგურაციაზე ხელის დაჭერამდე
დაიწყეთ იმ პროცესით, რომელიც ნამდვილად მუშაობს და არა იმ ფაილით, რომელიც შეასწორეთ. ჰკითხეთ systemd-ს გაშვების ხაზი, სამუშაო საქაღალდე და ის ანგარიში, რომელზეც ის ეშვება. ეს სამი პასუხი ხსნის ამ კლასის უმეტეს ხარვეზს:
systemctl show openvpn-server@server -p ExecStart -p WorkingDirectory -p User -p RootDirectoryცარიელი WorkingDirectory ნიშნავს, რომ unit იწყება /-ში, ამიტომ ფარდობითი client-config-dir ccd იძებნება /ccd-ში. ეს საქაღალდე თითქმის არასოდეს არსებობს და დემონი მის არარსებობას ფატალურად არ მიიჩნევს.
შეადარეთ ეს იმ ინტერაქტიულ გაშვებას, რომელიც ტესტირებისას გამოიყენეთ, სადაც თქვენი shell-ის მიმდინარე საქაღალდე ალბათ კონფიგურაციის საქაღალდე იყო. იგივე ფაილი, იგივე საკვანძო სიტყვები, ორი განსხვავებული შედეგი.
რის მიმართ წყდება ფარდობითი ბილიკი
საკვანძო სიტყვა წყდება პროცესის სამუშაო საქაღალდის მიმართ იმ მომენტში, როცა ოპცია გამოიყენება. ეს არ ნიშნავს “იმ კონფიგურაციის ფაილის გვერდით, რომელიც --config-ით გადავეცი”. OpenVPN სიამოვნებით წაიკითხავს კონფიგურაციას აბსოლუტური ბილიკიდან და მაინც ფარდობით მნიშვნელობებს სხვაგან გადაწყვეტს, და სწორედ ეს არის აქ ხაფანგი. OpenVPN 2.6-ის სახელმძღვანელო წესს აღნიშნავს --client-config-dir-ის ქვეშ და კვლავ --cd-ის ქვეშ.
cd საკვანძო სიტყვა ცვლის ამ კონტექსტს სხვა ფაილების წაკითხვამდე, ამიტომ unit, რომელიც აყენებს cd /etc/openvpn/server და შემდეგ client-config-dir ccd, წყდება /etc/openvpn/server/ccd-ად. თუ დაამატებთ cd, შეამოწმეთ დირექტივების თანმიმდევრობა და გახსოვდეთ, რომ ის გავლენას ახდენს იმავე ფაილის ყველა სხვა ფარდობით მითითებაზე.
გაიარეთ ბილიკი დემონის ანგარიშით
ბილიკი შეიძლება სწორი იყოს და მაინც წაუკითხავი. პრივილეგიების დაწევის შემდეგ დემონი აღარ არის root, ამიტომ ყოველ მშობელ საქაღალდეს სჭირდება ძებნის უფლება ამ ანგარიშისთვის, ხოლო კლიენტის ფაილს — წაკითხვის უფლება. მშობელზე ერთი დაკარგული შესრულების ბიტი საკმარისია ფაილის დასამალად და შეცდომა მხოლოდ იმით ვლინდება, რომ კლიენტი ჩუმად იღებს ნაგულისხმევ აუზს.
namei ბეჭდავს თითოეული კომპონენტის უფლებას რიგრიგობით, რაც უფრო სწრაფია, ვიდრე საქაღალდეების სათითაოდ შემოწმება:
namei -l /etc/openvpn/server/ccd/client1შემდეგ შეამოწმეთ წაკითხვა სერვისის ანგარიშით და არა საკუთარი თავით:
runuser -u openvpn -- test -r /etc/openvpn/server/ccd/client1 && echo readableთუ unit იყენებს chroot, საქაღალდე უნდა არსებობდეს ციხის შიგნით და კონფიგურაციის ბილიკი ინტერპრეტირდება chroot-ის გამოყენების შემდეგ. ფაილი, რომელიც ჰოსტზე ციხის გარეთაა, შიგნიდან უხილავია.
დაადასტურეთ ძებნა და ნუ გამოიცნობთ
ერთი გადატვირთვისთვის აწიეთ ჟურნალის დონე და წაიკითხეთ, რას ამბობს სერვერი კლიენტისთვის დამახასიათებელ ოპციებზე. verb 4-ზე დემონი იტყობინება იმპორტირებულ თითო-კლიენტის კონფიგურაციას, ამიტომ არსებული ხაზის არარსებობა პირდაპირი მტკიცებულებაა, რომ ამ კავშირისთვის არც ერთი ფაილი არ წაკითხულა.
openvpn --config /etc/openvpn/server.conf --verb 4 --client-config-dir /etc/openvpn/server/ccdგაუშვით ეს წინა პლანზე თავისუფალ პორტზე და შეაერთეთ ერთი კლიენტი. ეს systemd-ს სრულიად აშორებს სურათიდან: თუ გადაფარვები აქ ჩნდება და სერვისის ქვეშ არა, განსხვავება unit-ის კონტექსტშია და არა ფაილში.
გადაწყვიტეთ, რა უნდა მოხდეს, როცა არც ერთი ფაილი არ ემთხვევა. ccd-exclusive-ის გარეშე კლიენტი მიიღება მხოლოდ გლობალური აუზის პარამეტრებით და ეს არის ზემოთ აღწერილი ჩუმი ხარვეზი. მასთან ერთად არსებული ფაილი უარყოფილ კავშირად იქცევა და ეს უარი უფრო ადვილი შესამჩნევია, თუმცა დატვირთვის ქვეშ უფრო რთული გასამარკვევი.
გაასწორეთ, გადატვირთეთ, შეამოწმეთ
კონფიგურაციაში საქაღალდე აბსოლუტური გახადეთ და ისე დატოვეთ. ფარდობითი ბილიკები უსაფრთხოა მხოლოდ მაშინ, როცა unit ამაგრებს სამუშაო საქაღალდეს, ხოლო დამაგრება დამატებითი მოძრავი ნაწილია, რომელსაც ვინმე მოგვიანებით მოხსნის.
client-config-dir /etc/openvpn/server/ccd
ccd-exclusiveგადატვირთეთ ინსტანცია, ხელახლა შეაერთეთ ერთი ცნობილი კლიენტი და წაიკითხეთ მიღებული მისამართი მისკენ გაგზავნილ მარშრუტებთან ერთად. თუ მისამართი ემთხვევა ამ კლიენტის ფაილში არსებულ ifconfig-push ხაზს, ძებნამ იმუშავა. თუ კლიენტი კვლავ ზოგად აუზში ხვდება, დაბრუნდით ჟურნალის ხაზების რაოდენობაზე: ნულოვანი იმპორტი ნიშნავს, რომ ბილიკი ან იდენტობა არასწორია, არასწორი შიგთავსის ერთი იმპორტი ნიშნავს, რომ თქვენ სხვა ფაილს ასწორებთ, ვიდრე დემონი კითხულობს.
უკან დაბრუნდით წინა unit-ისა და კონფიგურაციის ერთად აღდგენით, შემდეგ გადატვირთეთ. სერტიფიკატები ამისთვის ხელახლა გაცემას არ საჭიროებს და საქაღალდის პრობლემის სერტიფიკატის პრობლემად მიჩნევა ის გზაა, რომლითაც ხუთწუთიანი გასწორება ტექნიკური მომსახურების ფანჯრად იქცევა.