Megosztás csatolása a Tunnelblickből root nélkül
Egy nyitva maradó AppleScript figyelhet egy Tunnelblick-profilt, és a bejelentkezett felhasználóként csatolhat egy SMB-megosztást, root-hook és jelszó nélküli sudo nélkül.
A VPN-kliensnek privileged segítségre van szüksége a hálózat újrakonfigurálásához, és ez a tény túl széles körben terjed át mindenre, ami körülötte van. Egy fájlmegosztást csatoló szkriptnek nincs szüksége rootra, mert a megosztás a bejelentkezett felhasználó munkamenetéhez és annak hitelesítő adataihoz tartozik. A csatolás kiemelése a privileged útvonalból megszünteti a sudo-szabályok, a root-hookok és a mellékelt alkalmazások módosításának szükségességét. Ami marad, az egy kis, nyitva maradó applet, amely egy profilt figyel, és egyetlen kísérletet tesz.
Miért tartozik ez a felhasználói munkamenethez
Egy csatolt kötet annak a munkamenetnek a tulajdonsága, amely csatolta. Egy másik felhasználó munkamenete nem látja, és a root tulajdonában lévő csatolás másképp viselkedik, mint a Finder által létrehozott. A csatolás felhasználói munkamenetben tartása megőrzi ezt a szemantikát.
Privileged segédprogramok azokhoz a részekhez léteznek, amelyeknek valóban szükségük van rájuk: alagút-interfész létrehozása, útvonalak módosítása, a resolver frissítése. Az SMB-megosztás csatolása nem tartozik ezek közé. Úgy kezelni, mintha az lenne, választásra kényszerít a jelszó nélküli sudo és egy olyan root-szkript között, amely akkor fut, amikor senki sincs jelen. Mindkettő nagyobb kockázat, mint amit a probléma indokol, és a felhasználói munkamenet megközelítése teljesen elkerüli a választást.
A Tunnelblick saját kapcsolódási hookjai itt nem helyettesítők, mert az asztali munkameneten kívül futnak, és a kliens szkriptjeihez viszonyított sorrendjük nincs meghatározva. Az állapot lekérdezése egy felhasználói appletből kisebb mechanizmus kevesebb feltevéssel.
Először kézzel bizonyítsd, hogy a megosztás működik
Az automatizálás nem tud olyan útvonalat, engedélyt vagy fiókot biztosítani, amely nem létezik. Csatlakozz a VPN-hez manuálisan, és nyisd meg a megosztást a Finderben, mielőtt bármilyen szkriptet írnál. Ha ez nem sikerül, a szkript zavaróbb módon fog meghiúsulni.
Jegyezd fel a három értéket, amelyet a szkript használni fog: a profil nevét pontosan úgy, ahogy a Tunnelblick listázza, a megosztás URL-jét és a kötet nevét, amelyet a Finder a csatolás után mutat. A kötet neve azért számít, mert a meglévő csatolás ellenőrzése ezt használja, és a csak névre épülő ellenőrzés kényelmi védőkorlát, nem a kiszolgáló személyazonosságának bizonyítéka. Használj a gépen egyedi nevet. Ezután erősítsd meg, hogy a kiszolgáló egyáltalán válaszol.
smbutil view //files.corp.example
osascript -e 'tell application "Tunnelblick" to get state of first configuration whose name is "Office"'
mount | grep -i smbfs
Az első parancs bizonyítja, hogy a kiszolgáló válaszol, a második, hogy a profilnév feloldódik, a harmadik pedig megmutatja, milyen egy sikeres csatolás. Rögzítsd mindhármat, mielőtt bármit automatizálnál.
Olvasd ki a profil állapotát a Tunnelblickből
A Tunnelblick AppleScripten keresztül teszi elérhetővé a konfigurációit és azok állapotait, és ez az egyetlen hook, amelyre ennek a tervnek szüksége van. Az állapot, amely számít, az adott profilhoz jelentett karakterlánc, nem az alkalmazás jelenléte.
A lekérdezésnek vannak következményei, amelyeket érdemes megemlíteni. Az intervallumnál rövidebb újracsatlakozás észrevétlenül elhaladhat, és az applet egyáltalán nem látja az átmenetet. Ez elfogadható egy csatolásfigyelőnek, és elfogadhatatlan bárminek, aminek minden eseményre reagálnia kell. Ha eseményhűségre van szükséged, ez a rossz mechanizmus, nem pedig olyan mechanizmus, amelynek rövidebb időzítőre lenne szüksége. Válaszd meg az intervallumot ezzel a kompromisszummal a szem előtt tartva.
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
Exportáld alkalmazásként a nyitva maradás lehetőségével, majd indítsd el a bejelentkezett munkamenetben sudo helyett.
Egyszer csatolj, aztán ne próbálkozz tovább
A megpróbált jelző az, ami megakadályozza, hogy ez hitelesítő adatokat kitaláló hurokká váljon. Miután az applet megpróbálta, megvárja, hogy a kapcsolat állapota megváltozzon, mielőtt újra próbálkozna.
Ez a viselkedés szándékos. Egy megosztás, amely elutasítja a csatolást, általában olyan okból utasítja el, amelyet egy újabb próbálkozás nem tud orvosolni, és az ismételt próbálkozások egyetlen kérésből azok áradatát csinálják. A jelző akkor áll vissza, amikor a profil elhagyja a csatlakozott állapotot, így egy valódi újracsatlakozás pontosan egy új próbálkozást eredményez. Az applet kilépése és újraindítása szintén visszaállítja, és ez a kézi felülírás. Egyik út sem rejti el a hibát; mindkettő láthatóvá teszi a Finderben.
A szkript nem tartalmaz jelszót, és ennek így kell maradnia. Hagyd, hogy a csatolási művelet kérdezzen, és hagyd, hogy a kulcskarikán tegye azt, amit a szervezet támogat. A hitelesítő adat URL-be ágyazása egy kényelmi szkriptet forgatandó titokká változtat.
Amit a segédprogram nem tud
Három korlátot érdemes az applet mellé írni. Nem tud kivonni egy foglalt kötetet hálózati hiba után, nem tudja garantálni, hogy a DNS és a kiszolgáló készen áll, amikor az állapot csatlakozottat jelez, és nem reagál minden újracsatlakozásra.
Az első korlát a gyakorlatban a legfontosabb. Egy megosztás, amelynek kiszolgálója eltűnik, olyan kötetet hagy hátra, amely csatoltnak látszik és hozzáféréskor blokkol, és az udvarias megoldás a fájlműveletek befejezése és a kivonás egy tervezett leválasztás előtt. A második magyarázza a legtöbb sikertelen első próbálkozást: az alagút áll, miközben a resolver még nem érte utol, ezért várj, majd csatolj kézzel egyszer a megerősítéshez. A harmadik a korábbi lekérdezési kompromisszum, nem pedig javítandó hiba.
Felügyelet nélküli géphez vagy kezelt flottához ez a terv rossz forma. Használj adminisztrátor tulajdonában lévő csatolási szabályzatot ahelyett, hogy egy asztali appletet privileged szolgáltatássá bővítenél.