უნდა დავთმოთ chroot თუ iproute2 ციხეში გადავაკოპიროთ?
არასრული ციხე იტეხება გაშვების შემდეგ და არა ჩატვირთვისას. აირჩიეთ გამაგრების შესუსტებასა და ბინარული ფაილებისა და ბიბლიოთეკების ახალ ფესვში კოპირებას შორის.
სერვისი იწყება, კლიენტი უერთდება და სერვერის მხარეს მარშრუტი არასდროს ჩნდება. ან დემონი უარს ამბობს გაშვებაზე და ასახელებს ბრძანებას, რომელიც ვერ შეასრულა. ორივე შედეგი მიჰყვება იმავე სამ ხაზს, რომლებიც ჩვეულებრივ ერთად კოპირდება გამაგრების სახელმძღვანელოდან: არაპრივილეგირებულ ანგარიშზე გადასვლა, ჯგუფის მიტოვება და ფაილური სისტემის ფესვის შეცვლა. სამიდან მხოლოდ ერთი მალავს ფაილებს და მხოლოდ ერთი მათგანი ართმევს მარშრუტიზაციის ცხრილის შეცვლის უფლებას. მათი გამოყოფა არის გზა გაიგოთ, რომელი ხაზი გჭირდებათ სინამდვილეში.
რას ართმევს ციხე, რაც დემონს ჯერ კიდევ სჭირდება
ფესვის შეცვლა ხდება გაშვების შემდეგ, ამიტომ დემონი ინარჩუნებს ყველაფერს, რაც უკვე გახსნა და კარგავს ყველაფერს, რასაც მოგვიანებით გახსნიდა. ნებისმიერი დამხმარე, რომელსაც კავშირი ამ წერტილის შემდეგ გაუშვებს, უნდა არსებობდეს ახალი ფესვის შიგნით, მის მიერ ჩატვირთული საერთო ბიბლიოთეკებითურთ. კონფიგურაციის ფაილისა და სერტიფიკატისგან აშენებულ ციხეს არც ერთი აქვს.
არაპრივილეგირებულ ანგარიშზე გადასვლა ცალკე შეზღუდვაა. პროცესმა, რომელმაც root-ს თავი დაანება, შეიძლება ვერ შეძლოს მარშრუტების შეცვლა ან ინტერფეისის აწევა მაშინაც კი, როცა ბინარული ფაილი სწორედ იქ არის, ამიტომ ორი ხარვეზი ცალკე უნდა დიაგნოსტირდეს.
რომელი შესწორება გჭირდებათ, ამას სამი პირობა წყვეტს
პირველი პირობაა, როგორ აყენებს თქვენი აწყობა მარშრუტებს. ახალი OpenVPN გამოშვებები ინტერფეისსა და მარშრუტიზაციის ცხრილს პროცესის შიგნით აწყობს, ხოლო ძველი პაკეტები და საკუთარი კონფიგურაციები გარე ხელსაწყოებს ან up და down სკრიპტებს ეყრდნობიან. თუ ჟურნალი ბრძანებას ასახელებს, გარე ხელსაწყოა ჩართული და ციხე მალავს მას. თუ ჟურნალი სამაგიეროდ უფლების შეცდომას აჩვენებს, პრობლემა ანგარიშშია.
მეორე არის მოვლა. კოპირებული ბინარული ფაილებით ციხე უნდა განახლდეს ყოველ ჯერზე, როცა მათ მიმწოდებელი პაკეტი განახლდება, თორემ პირველი განახლება უკან გატეხილ გვირაბს დატოვებს. მესამე არის, ნამდვილად სჭირდება თუ არა კონკრეტულ კონტროლს chroot; თუ მოთხოვნა სინამდვილეში პრივილეგიების გამოყოფას ეხება, ანგარიშის შეცვლა მარტო შეიძლება საკმარისი იყოს.
| Signal in the log | Other side of the boundary | Repair direction |
|---|---|---|
| Command not found after startup | Binary and its libraries absent inside the new root | Populate the jail, or drop the chroot line |
| Operation not permitted | Account lost the privilege to edit routes | Keep the account privileged, or pre-create routes elsewhere |
| No such device | Jail lacks the tun device node | Create the node inside, or open it before the root change |
რა უნდა შეიცავდეს მომუშავე ციხე
ბრძანებების გამშვებ ციხეს სჭირდება ბინარული ფაილი, ყოველი ბიბლიოთეკა, რომელზეც ლინკდება და ყოველი მოწყობილობის კვანძი, რომელსაც დემონი გვიან ხსნის. დააკოპირეთ ნაწილები და გამოსცადეთ ისინი VPN-ის გარეშე სურათში:
ldd /usr/sbin/ip
chroot /etc/openvpn/jail /sbin/ip route show
chroot /etc/openvpn/jail /sbin/ip link set tun0 up
პირველი ბრძანება ჩამოთვლის დამოკიდებულებებს და სწორედ მას გამოტოვებენ ხალხი. კოპირებული ბინარული ფაილი, რომელიც ბიბლიოთეკას ვერ პოულობს, სხვა შეტყობინებით იტეხება, ვიდრე დაკარგული ბინარული ფაილი, და ორივე OpenVPN-ის ხარვეზად გამოიყურება კლიენტის მხრიდან წაკითხვისას. ბრძანების ხელით გაშვება ციხის შიგნით ამრავლებს ხარვეზს სერვისის გადატვირთვის გარეშე.
ასევე დააკოპირეთ ციხეში კონფიგურაცია, სერტიფიკატები და ნებისმიერი CRL, რადგან ფაილი, რომლის ხელახლა წაკითხვასაც დემონი გაშვების შემდეგ ელის, ვერ მოიძებნება ფესვის შეცვლის შემდეგ. ჩაწერეთ, რა დააკოპირეთ, ვინაიდან ქსელური პაკეტის შემდეგი განახლება ორიგინალებს ჩაანაცვლებს და ციხეს ძველ ასლზე დატოვებს.
სამაგიეროდ შეამცირეთ გამაგრება
თუ ციხე მხოლოდ იმიტომ არსებობს, რომ სახელმძღვანელომ ასე თქვა, ამ ერთი ხაზის მოცილება ანგარიშის შეზღუდვების შენარჩუნებით დასაცავი შედეგია. დემონი ინარჩუნებს თავის ხედვას ფაილურ სისტემაზე და კარგავს პრობლემას, ხოლო პრივილეგიების დაწევა კვლავ ართმევს root-ს ხანგრძლივ პროცესს.
ჩაწერეთ, რა რჩება და რატომ. კონფიგურაცია, რომელმაც ჩუმად დაკარგა კონტროლი შენიშვნის გარეშე, არის გზა, რომლითაც გამაგრება იხრება და შემდეგი აუდიტი იკითხავს, რატომ გაქრა ხაზი.
არჩევამდე გაყავით სამი ხაზი
დააკოპირეთ კონფიგურაცია, გამორთეთ სამივე დირექტივა და დაადასტურეთ, რომ კლიენტი უერთდება და მოსალოდნელი მარშრუტები ჩნდება. შემდეგ კვლავ ჩართეთ მხოლოდ ანგარიშის ხაზები, შემდეგ კი მხოლოდ chroot. საფეხური, სადაც გვირაბი ტყდება, საზღვარს მიუთითებს, და თავს ირიდებთ იმ ციხის ხელახლა აშენებას, რომელიც არასდროს ყოფილა მიზეზი.
როცა ისევ მარშრუტიზაციას აკეთებს, გაუშვით ერთი კლიენტის სესია უფრო მაღალი დეტალურობით და წაიკითხეთ ხაზი, რომელიც ასახელებს ბრძანებას ან წარუმატებელ უფლებას. ის ხაზი უფრო ღირებულია, ვიდრე ვადა, რომელსაც კლიენტი საბოლოოდ აცნობებს.