VPN კლიენტს სჭირდება პრივილეგირებული დახმარება ქსელის ხელახლა კონფიგურაციისთვის და ეს ფაქტი ზედმეტად ფართოდ გამოიყენება ყველაფერზე მის გარშემო. სკრიპტს, რომელიც ფაილურ გაზიარებას ამონტაჟებს, root არ სჭირდება, რადგან გაზიარება ეკუთვნის შესული მომხმარებლის სესიას და მის საიდენტიფიკაციო მონაცემებს. მონტაჟის პრივილეგირებული გზიდან გატანა აუქმებს sudo წესების, root კაუჭების და ჩაშენებული აპლიკაციების შეცვლის საჭიროებას. რაც რჩება, არის პატარა applet, რომელიც ღია რჩება, აკონტროლებს ერთ პროფილს და ერთ მცდელობას აკეთებს.

რატომ ეკუთვნის ეს მომხმარებლის სესიას

დამონტაჟებული ტომი არის იმ სესიის თვისება, რომელმაც ის დაამონტაჟა. სხვა მომხმარებლის სესია ვერ ხედავს მას, და root-ის საკუთრებაში არსებული მონტაჟი სხვანაირად იქცევა, ვიდრე Finder-ის მიერ შექმნილი. მონტაჟის მომხმარებლის სესიაში შენარჩუნება ინარჩუნებს ამ სემანტიკას.

პრივილეგირებული დამხმარეები არსებობს იმ ნაწილებისთვის, რომლებსაც ნამდვილად სჭირდებათ: გვირაბის ინტერფეისის შექმნა, მარშრუტების შეცვლა, resolver-ის განახლება. SMB გაზიარების დამონტაჟება არ არის ერთ-ერთი ასეთი ნაწილი. მასთან ისე მოპყრობა, თითქოს არის, აიძულებს არჩევანს უპაროლო sudo-სა და root სკრიპტს შორის, რომელიც მაშინ სრულდება, როცა არავინ არის. ორივე უფრო დიდი რისკია, ვიდრე პრობლემა ამართლებს, და მომხმარებლის სესიის მიდგომა სრულად გვაშორებს ამ არჩევანს.

Tunnelblick-ის საკუთარი კავშირის კაუჭები აქ შემცვლელი არ არის, რადგან ისინი დესკტოპის სესიის გარეთ სრულდება და მათი რიგი კლიენტის სკრიპტებთან მიმართებით არ არის განსაზღვრული. მდგომარეობის გამოკითხვა მომხმარებლის applet-იდან უფრო მცირე მექანიზმია ნაკლები დაშვებებით.

ჯერ ხელით დაამტკიცეთ, რომ გაზიარება მუშაობს

ავტომატიზაცია ვერ მოგვცემს მარშრუტს, ნებართვას ან ანგარიშს, რომელიც არ არსებობს. ხელით დაუკავშირდით VPN-ს და გახსენით გაზიარება Finder-ში, სანამ რომელიმე სკრიპტს დაწერთ. თუ ეს ვერ მოხერხდა, სკრიპტი უფრო დამაბნეველი გზით ჩავარდება.

ჩაწერეთ სამი მნიშვნელობა, რომელსაც სკრიპტი გამოიყენებს: პროფილის სახელი ზუსტად ისე, როგორც Tunnelblick მას ჩამოთვლის, გაზიარების URL და ტომის სახელი, რომელსაც Finder მონტაჟის შემდეგ აჩვენებს. ტომის სახელი მნიშვნელოვანია, რადგან არსებული მონტაჟის შემოწმება მას იყენებს, და მხოლოდ სახელზე დაფუძნებული შემოწმება მოხერხებულობის დაცვაა, არა სერვერის იდენტობის დამტკიცება. გამოიყენეთ მანქანაზე უნიკალური სახელი. შემდეგ დაადასტურეთ, რომ სერვერი საერთოდ პასუხობს.

smbutil view //files.corp.example
osascript -e 'tell application "Tunnelblick" to get state of first configuration whose name is "Office"'
mount | grep -i smbfs

პირველი ბრძანება ამტკიცებს, რომ სერვერი პასუხობს, მეორე — რომ პროფილის სახელი წყდება, და მესამე აჩვენებს, როგორ გამოიყურება წარმატებული მონტაჟი. დააფიქსირეთ სამივე, სანამ რამეს ავტომატიზებთ.

წაიკითხეთ პროფილის მდგომარეობა Tunnelblick-იდან

Tunnelblick ამჟღავნებს თავის კონფიგურაციებს და მათ მდგომარეობებს AppleScript-ის მეშვეობით, და ეს არის ერთადერთი კაუჭი, რომელიც ამ დიზაინს სჭირდება. მნიშვნელოვანი მდგომარეობა არის სტრიქონი, რომელიც სწორედ ამ პროფილისთვის მოხსენდება, და არა აპლიკაციის არსებობა.

გამოკითხვას აქვს შედეგები, რომელთა ხსენებაც ღირს. ინტერვალზე მოკლე ხელახალი დაკავშირება შეიძლება შეუმჩნევლად ჩაიაროს, და applet საერთოდ ვერ ხედავს გადასვლას. ეს მისაღებია მონტაჟის დაცვისთვის და მიუღებელია ყველაფრისთვის, რაც ყოველ მოვლენაზე უნდა რეაგირებდეს. თუ მოვლენების სიზუსტე გჭირდებათ, ეს არასწორი მექანიზმია და არა მექანიზმი, რომელსაც უფრო მოკლე ტაიმერი სჭირდება. აირჩიეთ ინტერვალი ამ კომპრომისის გათვალისწინებით.

property attempted : false

on idle
    set profileName to "Office"
    set shareURL to "smb://files.corp.example/OfficeTeam"
    set volName to "OfficeTeam"
    tell application "Tunnelblick" to set vpnState to state of first configuration whose name is profileName
    if vpnState is not "CONNECTED" then
        set attempted to false
        return 20
    end if
    tell application "Finder" to set mounted to (exists disk volName)
    if (not mounted) and (not attempted) then
        set attempted to true
        try
            mount volume shareURL
        end try
    end if
    return 20
end idle

დააექსპორტეთ როგორც აპლიკაცია ღიად დარჩენის პარამეტრით, შემდეგ გაუშვით შესულ სესიაში და არა sudo-ს მეშვეობით.

დაამონტაჟეთ ერთხელ და შემდეგ შეწყვიტეთ ცდა

მცდელობის დროშა არის ის, რაც ხელს უშლის ამის საიდენტიფიკაციო მონაცემების გამომცნობ ციკლად გადაქცევას. მას შემდეგ, რაც applet სცადა, ის ელოდება კავშირის მდგომარეობის შეცვლას, სანამ ხელახლა სცდის.

ეს ქცევა განზრახ არის. გაზიარება, რომელიც მონტაჟს უარყოფს, ჩვეულებრივ უარყოფს იმ მიზეზით, რომელსაც ახალი მცდელობა ვერ გამოასწორებს, და განმეორებითი მცდელობები ერთ მოთხოვნას მათ ნაკადად აქცევს. დროშა აღდგება, როცა პროფილი დაკავშირებულ მდგომარეობას ტოვებს, ამიტომ ნამდვილი ხელახალი დაკავშირება ზუსტად ერთ ახალ მცდელობას იძლევა. applet-იდან გასვლა და ხელახლა გაშვება ასევე აღადგენს მას, და ეს არის ხელით გადაფარვა. არც ერთი გზა არ მალავს უკმარისობას; ორივე მას Finder-ში ხილულს ტოვებს.

სკრიპტი არ შეიცავს პაროლს, და ასე უნდა დარჩეს. მიეცით მონტაჟის ოპერაციას კითხვის უფლება, და გასაღების კრებულს — გააკეთოს ის, რასაც ორგანიზაცია მხარს უჭერს. საიდენტიფიკაციო მონაცემის URL-ში ჩადგმა მოხერხებულობის სკრიპტს აქცევს საიდუმლოდ, რომელიც უნდა შეიცვალოს.

რა ვერ შეძლო დამხმარემ

სამი შეზღუდვა ღირს applet-ის გვერდით ჩაწერად. მას არ შეუძლია დაკავებული ტომის ამოღება ქსელური ჩავარდნის შემდეგ, ვერ უზრუნველყოფს, რომ DNS და სერვერი მზად არიან, როცა მდგომარეობა ამბობს დაკავშირებულია, და არ რეაგირებს ყოველ ხელახალ დაკავშირებაზე.

პირველი შეზღუდვა პრაქტიკაში ყველაზე მნიშვნელოვანია. გაზიარება, რომლის სერვერიც ქრება, ტოვებს ტომს, რომელიც დამონტაჟებულად გამოიყურება და წვდომისას ბლოკავს, და ზრდილობიანი შესწორებაა ფაილური ოპერაციების დასრულება და მისი ამოღება დაგეგმილ გათიშვამდე. მეორე ხსნის უმეტეს წარუმატებელ პირველ მცდელობას: გვირაბი აწეულია, სანამ resolver ჯერ არ დაეწია, ამიტომ დაელოდეთ და შემდეგ ერთხელ ხელით დაამონტაჟეთ დასადასტურებლად. მესამე არის ადრე ნახსენები გამოკითხვის კომპრომისი და არა გამოსასწორებელი შეცდომა.

უყურადღებო მანქანისთვის ან მართული პარკისთვის ეს დიზაინი არასწორი ფორმაა. გამოიყენეთ ადმინისტრატორის საკუთრებაში არსებული მონტაჟის პოლიტიკა და არა სამუშაო მაგიდის applet-ის პრივილეგირებულ სერვისად გაფართოება.

დაკავშირებული სტატიები