Připojení sdílené složky z Tunnelblick bez běhu jako root
AppleScript, který zůstává otevřený, může sledovat jeden profil Tunnelblick a připojit SMB sdílení jako přihlášený uživatel, bez root háku a bez sudo bez hesla.
Klient VPN potřebuje privilegovanou pomoc s rekonfigurací sítě a tento fakt se aplikuje příliš široce na vše kolem. Skript, který připojuje souborové sdílení, root nepotřebuje, protože sdílení patří do relace přihlášeného uživatele a k jeho přihlašovacím údajům. Přesunutí připojování mimo privilegovanou cestu odstraňuje potřebu pravidel sudo, root háčků a úprav přiložených aplikací. Co zůstává, je malý applet, který zůstává otevřený, sleduje jeden profil a provede jeden pokus.
Proč to patří do uživatelské relace
Připojený svazek je vlastnost relace, která ho připojila. Relace jiného uživatele ho nevidí a připojení vlastněné rootem se chová jinak než to, které vytvořil Finder. Zachování připojení v uživatelské relaci tuto sémantiku zachovává.
Privilegovaní pomocníci existují pro části, které je skutečně potřebují: vytvoření tunelového rozhraní, změnu tras, aktualizaci resolveru. Připojení SMB sdílení mezi ně nepatří. Zacházet s ním, jako by patřilo, vynucuje volbu mezi sudo bez hesla a root skriptem, který běží, když nikdo není přítomen. Obojí je větší riziko, než problém ospravedlňuje, a přístup přes uživatelskou relaci se té volbě zcela vyhýbá.
Vlastní háčky připojení Tunnelblick zde nejsou náhradou, protože běží mimo relaci plochy a jejich pořadí vůči skriptům klienta není definováno. Dotazování stavu z uživatelského appletu je menší mechanismus s méně předpoklady.
Nejprve dokažte ručně, že sdílení funguje
Automatizace nemůže dodat trasu, oprávnění ani účet, který neexistuje. Připojte VPN ručně a otevřete sdílení ve Finderu, než napíšete jakýkoli skript. Pokud to selže, skript selže matoucnějším způsobem.
Zapište tři hodnoty, které skript použije: název profilu přesně tak, jak ho Tunnelblick uvádí, URL sdílení a název svazku, který Finder po připojení zobrazí. Název svazku je důležitý, protože kontrola existujícího připojení ho používá, a kontrola pouze podle názvu je pohodlná pojistka, nikoli důkaz totožnosti serveru. Použijte název, který je na stroji jedinečný. Poté potvrďte, že server vůbec odpovídá.
smbutil view //files.corp.example
osascript -e 'tell application "Tunnelblick" to get state of first configuration whose name is "Office"'
mount | grep -i smbfs
První příkaz dokazuje, že server odpovídá, druhý, že se název profilu vyřeší, a třetí ukazuje, jak vypadá úspěšné připojení. Zaznamenejte všechny tři, než cokoli zautomatizujete.
Přečtěte stav profilu z Tunnelblick
Tunnelblick zpřístupňuje své konfigurace a jejich stavy přes AppleScript, a to je jediný háček, který tento návrh potřebuje. Stav, na kterém záleží, je řetězec hlášený pro tento jeden profil, nikoli přítomnost aplikace.
Dotazování má důsledky, které stojí za zmínku. Opětovné připojení kratší než interval může projít nepovšimnuto a applet přechod vůbec nevidí. To je přijatelné pro pojistku připojení a nepřijatelné pro cokoli, co musí reagovat na každou událost. Pokud potřebujete věrnost událostí, je to špatný mechanismus, nikoli mechanismus, který potřebuje kratší časovač. Zvolte interval s tímto kompromisem na mysli.
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
Exportujte jej jako aplikaci s volbou zůstat otevřená a poté jej spusťte v přihlášené relaci namísto přes sudo.
Připojte jednou, potom přestaňte zkoušet
Příznak pokusu je to, co brání tomu, aby se z tohoto stala smyčka hádající přihlašovací údaje. Jakmile applet zkusí, čeká na změnu stavu připojení, než to zkusí znovu.
Toto chování je záměrné. Sdílení, které připojení odmítá, ho obvykle odmítá z důvodu, který nový pokus nemůže napravit, a opakované pokusy mění jeden dotaz v jejich proud. Příznak se resetuje, když profil opustí připojený stav, takže skutečné opětovné připojení vytvoří přesně jeden nový pokus. Ukončení a opětovné spuštění appletu ho také resetuje, a to je ruční přepnutí. Ani jedna cesta selhání neskrývá; obě ho nechávají viditelné ve Finderu.
Skript nenese žádné heslo a tak by to mělo zůstat. Nechte operaci připojení zeptat se a nechte klíčenku dělat to, co organizace podporuje. Vložení pověření do URL mění pohodlný skript na tajemství, které je nutné rotovat.
Co pomocník nedokáže
Tři omezení stojí za to napsat vedle appletu. Nedokáže vysunout zaneprázdněný svazek po selhání sítě, nedokáže zaručit, že DNS a server jsou připraveny, když stav říká připojeno, a nereaguje na každé opětovné připojení.
První omezení je v praxi nejdůležitější. Sdílení, jehož server zmizí, zanechá svazek, který vypadá připojeně a při přístupu blokuje, a zdvořilou opravou je dokončit operace se soubory a vysunout před plánovaným odpojením. Druhé vysvětluje většinu neúspěšných prvních pokusů: tunel je nahoře, zatímco resolver ještě nedohonil, takže počkejte a potom jednou připojte ručně pro potvrzení. Třetí je dřívější kompromis dotazování, nikoli chyba k opravě.
Pro stroj bez dozoru nebo spravovanou flotilu je tento návrh špatný tvar. Použijte zásady připojování vlastněné správcem místo rozšiřování appletu plochy na privilegovanou službu.