Access Server უგულებელყოფს post_auth სკრიპტს, რომელიც დისკზე შეასწორეთ
post_auth ფაილის დისკზე რედაქტირება არაფერს აკეთებს: Access Server ასრულებს კოპიას მის კონფიგურაციის მონაცემთა ბაზაში. მიჰყევით გადაწყვეტილების გზას და sacli ბრძანებებს.
შესწორებული mac.py, რომელიც არაფერს ცვლის, ჩვეულებრივი პირველი სიმპტომია. დისკზე არსებული ფაილი არ არის ის, რასაც Access Server ასრულებს; აუთენტიფიკაციის სერვისი სკრიპტს სერვერის კონფიგურაციის მონაცემთა ბაზიდან ტვირთავს და სწორედ ეს შენახული კოპია განსაზღვრავს შესვლას. სანამ შენახული მნიშვნელობა არ შეიცვლება, ყოველი ტესტი მხოლოდ იმას ადასტურებს, რომ ძველი სკრიპტი ჯერ კიდევ მუშაობს.
სამი პირობა განსაზღვრავს სამუშაოს: ღირებულება ოდესმე ჩაიდო თუ არა კონფიგურაციის მონაცემთა ბაზაში, მიეცა თუ არა სერვისს მისი ხელახლა ჩატვირთვის ბრძანება, და მართლა სრულდება თუ არა თქვენ მიერ შეცვლილი კოდი ყოველ კავშირზე. თითოეულს განსხვავებული სიმპტომი აქვს და არასწორის გასწორება ტექნიკური მომსახურების ფანჯარას კარგავს.
ფაილი წყაროა და არა მოქმედი კოპია
Access Server post-auth სკრიპტს auth.module.post_auth_script გასაღების ქვეშ ინახავს. ფაილის რედაქტირება მხოლოდ თქვენს სამუშაო კოპიას აახლებს. დემონი შენახულ მნიშვნელობას კითხულობს, ამიტომ ცვლილება უხილავი რჩება, სანამ ძველ ჩანაწერს არ წაშლით და ახალ ფაილს მის ადგილას არ ჩასვამთ. სწორედ ეს შენახული მნიშვნელობაა ერთადერთი კოპია, რომელსაც აუთენტიფიკაციის სერვისი ამოწმებს.
წაიკითხეთ იგი შეცვლამდე. თუ ის უკვე ემთხვევა იმ ფაილს, რომელიც შეასწორეთ, პრობლემა შენახვაში არ არის და გადადით მოცულობის კითხვაზე. თუ ის ძველ ვერსიას აჩვენებს, ცვლილება სერვისამდე არ მიუღწევია.
./sacli -k auth.module.post_auth_script ConfigGetშეცვალეთ შენახული კოპია, შემდეგ გამოიყენეთ იგი
წერამდე წაშლა მორთულობა არ არის. ConfigPut --value_file-თან ერთად მნიშვნელობას ერთ ნაბიჯში ცვლის, ხოლო თავიდან ConfigDel გახდის შეუძლებელს ძველი ან დაზიანებული ჩანაწერის დარჩენას. დაწყებამდე შეინახეთ მოქმედი სკრიპტის კოპია სკრიპტების საქაღალდის გარეთ.
./sacli -k auth.module.post_auth_script ConfigDel
# store the file, then apply it
./sacli -k auth.module.post_auth_script --value_file=/root/post_auth.py ConfigPut
./sacli startsacli start ცვლილებულ კონფიგურაციას შიდა სერვისებზე იყენებს და სწორედ ეს ააქტიურებს ახალ სკრიპტს. ეს არ არის იგივე, რაც მთელი მანქანის ან დემონის გადატვირთვა, და არ უნდა შეიცვალოს ამით, თუ თქვენი ცვლილება ამას არ მოითხოვს.
გამოიყენეთ აბსოლუტური გზა მნიშვნელობის ფაილისთვის და დარწმუნდით, რომ root-ს შეუძლია მისი წაკითხვა. გზა, რომელიც თქვენი გარსიდან იხსნება, მაგრამ სერვისის ანგარიშიდან არა, იძლევა შენახულ მნიშვნელობას, რომელიც ConfigGet-ში სწორად გამოიყურება და პირველ შესვლაზე ფარსდება. შეამოწმეთ შენახული შედეგი კიდევ ერთხელ sacli start-ის შემდეგ და არა მანამდე.
მოდულის მოცულობა თუ თითო კავშირზე: სად უნდა იყოს მოთხოვნა
Python მოდულის დონის დებულებებს ერთხელ ასრულებს, სკრიპტის ჩატვირთვისას. ამიტომ ფაილის თავში დაწერილი მონაცემთა ბაზის მოთხოვნა ცხრილს ჩატვირთვის დროს კითხულობს და ამ პასუხს ყოველი მომდევნო კავშირისთვის ინახავს. ეს არის მეორე მიზეზი, რის გამოც ცვლილება თითქოს არაფერს აკეთებს: კოდი სრულდება, მაგრამ არა მაშინ, როცა ელოდებით.
მოათავსეთ მოთხოვნა post_auth დამმუშავებლის შიგნით, რათა ის ყოველ აუთენტიფიკაციაზე შესრულდეს. შეინარჩუნეთ დოკუმენტირებული ხელმოწერა, მოარგეთ დამმუშავებლის მიერ მიღებული აუთენტიფიკაციის შედეგი და დააბრუნეთ იგივე ობიექტი და არა შიშველი რიცხვი.
კავშირის მართვაც დამმუშავებლის შიგნით შეინახეთ. იმპორტის დროს გახსნილი კავშირი სერვერმა შეიძლება დახუროს პირველი მომხმარებლის შესვლამდე და წარმოქმნილი შეცდომა უარყოფილ რწმუნებულებას ჰგავს და არა გატეხილ სკრიპტს.
უარის ორი გზა, ერთი მფლობელი
თუ გადაწყვეტილება ლოკალური მოთხოვნაა, შედეგის მფლობელი Python დამმუშავებელია. თუ ეს გარე HTTP შემოწმებაა, ნება მიეცით ბრძანების გასვლის სტატუსს ატაროს პასუხი: არანულოვანი კოდით გამომავალი გარსი შესვლას უარყოფს და ბოლო ბრძანების სტატუსი ხდება სკრიპტის სტატუსი ცხადი exit-ის გარეშე.
შეინახეთ საიდუმლო პროცესების სიის გარეთ. root-ისთვის წაკითხვადი ფაილი ან სერვისის მიერ გადაცემული გარემოს მნიშვნელობა უფრო უსაფრთხოა, ვიდრე არგუმენტი, რომელსაც ნებისმიერი ლოკალური მომხმარებელი ps-იდან წაიკითხავს. გამოძახებამდე დაამაგრეთ საბოლოო წერტილი ცვლადში, რათა ბეჭდვითი შეცდომა კონფიგურაციის დროს ჩავარდეს და არა ვიღაცის შესვლისას. შეცვალეთ ეს საიდუმლო ისევე, როგორც ნებისმიერი სხვა რწმუნებულება.
აირჩიეთ ერთი მფლობელი თითო შემოწმებაზე. სკრიპტს, რომელიც ერთდროულად იკითხავს მონაცემთა ბაზას და იძახებს HTTP სერვისს, სჭირდება გამოცხადებული უპირატესობის წესი იმ შემთხვევისთვის, როცა ეს ორი არ ემთხვევა, თორემ ჟურნალში უარის მიზეზი არ დაემთხვევა მომხმარებლისთვის ნათქვამს.
გამოიყენეთ ადმინისტრატორის ჩაკეტვის გარეშე
ორი დაცვა ცვლილებას შექცევადს ხდის: მეორე ადმინის ანგარიში, რომელიც სკრიპტზე არ არის დამოკიდებული, და ცნობილი კარგი კოპია სკრიპტების საქაღალდის გარეთ. გამოიყენეთ ცვლილება ტექნიკური მომსახურების ფანჯარაში, შემდეგ გამორთვამდე დააკვირდით ერთ საცდელ შესვლას და ერთ განზრახ უარს. თუ ჟურნალი აუთენტიფიკაციის გადაწყვეტილების ნაცვლად სინტაქსურ შეცდომას აჩვენებს, შენახული სკრიპტი გატეხილია და ყოველი შესვლა ჩავარდება.
ორი პირობა ამბობს დაელოდეთ: ვერ ახერხებთ მნიშვნელობის ფაილის root-ად წაკითხვას, ან არ გაქვთ მეორე გზა ადმინის ინტერფეისში. ორივე პატარა ცვლილებას ჩაკეტვად აქცევს და არც ერთი არ ღირს წარმოების სერვერზე გამოცდად დღის ბოლოს. Access Server-ის დოკუმენტაცია მოიცავს post-auth ინტერფეისს და მის მხარდაჭერილ ველებს.