Memasang berbagi pakai dari Tunnelblick tanpa berjalan sebagai root
AppleScript yang tetap terbuka dapat memantau satu profil Tunnelblick dan memasang berbagi pakai SMB sebagai pengguna yang masuk, tanpa kait root atau sudo tanpa kata sandi.
Klien VPN membutuhkan bantuan berhak istimewa untuk mengonfigurasi ulang jaringan, dan fakta itu diterapkan terlalu luas pada segala hal di sekitarnya. Skrip yang memasang berbagi pakai berkas tidak memerlukan root, karena berbagi pakai itu milik sesi pengguna yang masuk dan kredensial pengguna tersebut. Memindahkan pemasangan keluar dari jalur berhak istimewa menghilangkan kebutuhan akan aturan sudo, kait root, dan penyuntingan aplikasi bawaan. Yang tersisa adalah applet kecil yang tetap terbuka, memantau satu profil, dan melakukan satu percobaan.
Mengapa ini termasuk dalam sesi pengguna
Volume yang dipasang adalah properti sesi yang memasangnya. Sesi pengguna lain tidak melihatnya, dan pemasangan milik root berperilaku berbeda dari yang dibuat Finder. Menjaga pemasangan di sesi pengguna mempertahankan semantik itu.
Pembantu berhak istimewa ada untuk bagian yang benar-benar membutuhkannya: membuat antarmuka terowongan, mengubah rute, memperbarui resolver. Memasang berbagi pakai SMB bukan salah satu bagian itu. Memperlakukannya seolah-olah demikian memaksa pilihan antara sudo tanpa kata sandi dan skrip root yang berjalan tanpa ada orang di tempat. Keduanya risiko yang lebih besar daripada yang dibenarkan masalahnya, dan pendekatan sesi pengguna menghindari pilihan itu sepenuhnya.
Kait koneksi Tunnelblick sendiri bukan pengganti di sini, karena berjalan di luar sesi desktop dan urutannya terhadap skrip klien tidak ditentukan. Menanyakan status dari applet pengguna adalah mekanisme yang lebih kecil dengan lebih sedikit asumsi.
Buktikan dulu secara manual bahwa berbagi pakai berfungsi
Otomasi tidak dapat menyediakan rute, izin, atau akun yang tidak ada. Hubungkan VPN secara manual dan buka berbagi pakai di Finder sebelum menulis skrip apa pun. Jika itu gagal, skrip akan gagal dengan cara yang lebih membingungkan.
Catat tiga nilai yang akan digunakan skrip: nama profil persis seperti yang didaftarkan Tunnelblick, URL berbagi pakai, dan nama volume yang ditampilkan Finder setelah pemasangan. Nama volume penting karena pemeriksaan pemasangan yang ada menggunakannya, dan pemeriksaan hanya berdasarkan nama adalah penjaga kenyamanan, bukan bukti identitas server. Gunakan nama yang unik di mesin tersebut. Lalu pastikan server menjawab sama sekali.
smbutil view //files.corp.example
osascript -e 'tell application "Tunnelblick" to get state of first configuration whose name is "Office"'
mount | grep -i smbfs
Perintah pertama membuktikan server menjawab, yang kedua membuktikan nama profil terurai, dan yang ketiga menunjukkan seperti apa pemasangan yang berhasil. Catat ketiganya sebelum mengotomatiskan apa pun.
Baca status profil dari Tunnelblick
Tunnelblick memaparkan konfigurasi dan statusnya melalui AppleScript, dan itulah satu-satunya kait yang dibutuhkan rancangan ini. Status yang penting adalah string yang dilaporkan untuk profil itu, bukan keberadaan aplikasi.
Penanyaan memiliki konsekuensi yang perlu disebut. Penyambungan ulang yang lebih pendek dari interval dapat berlalu tanpa terlihat, dan applet tidak melihat peralihannya sama sekali. Itu dapat diterima untuk penjaga pemasangan dan tidak dapat diterima untuk apa pun yang harus bereaksi terhadap setiap peristiwa. Jika Anda memerlukan kesetiaan peristiwa, ini mekanisme yang salah, bukan mekanisme yang membutuhkan pengatur waktu lebih pendek. Pilih interval dengan pertukaran itu dalam pikiran.
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
Ekspor sebagai aplikasi dengan opsi tetap terbuka, lalu jalankan di sesi yang masuk, bukan melalui sudo.
Pasang sekali, lalu berhenti mencoba
Bendera sudah dicoba adalah yang mencegah ini menjadi perulangan yang menebak kredensial. Setelah applet mencoba, ia menunggu status koneksi berubah sebelum mencoba lagi.
Perilaku itu disengaja. Berbagi pakai yang menolak pemasangan biasanya menolaknya karena alasan yang tidak dapat diperbaiki oleh percobaan ulang, dan percobaan berulang mengubah satu permintaan menjadi aliran permintaan. Bendera disetel ulang ketika profil meninggalkan status tersambung, jadi penyambungan ulang yang nyata menghasilkan tepat satu percobaan baru. Keluar dan menjalankan ulang applet juga menyetel ulangnya, dan itulah pengesampingan manual. Tidak ada jalur yang menyembunyikan kegagalan; keduanya membiarkannya terlihat di Finder.
Skrip tidak membawa kata sandi, dan seharusnya tetap begitu. Biarkan operasi pemasangan meminta, dan biarkan gantungan kunci melakukan apa yang didukung organisasi. Menanamkan kredensial dalam URL mengubah skrip kenyamanan menjadi rahasia yang harus dirotasi.
Apa yang tidak dapat dilakukan pembantu
Tiga batas perlu ditulis di samping applet. Ia tidak dapat mengeluarkan volume yang sibuk setelah kegagalan jaringan, ia tidak dapat menjamin DNS dan server siap ketika status mengatakan tersambung, dan ia tidak bereaksi terhadap setiap penyambungan ulang.
Batas pertama paling penting dalam praktik. Berbagi pakai yang servernya hilang meninggalkan volume yang tampak terpasang dan memblokir saat diakses, dan perbaikan yang sopan adalah menyelesaikan operasi berkas lalu mengeluarkannya sebelum pemutusan terencana. Yang kedua menjelaskan sebagian besar percobaan pertama yang gagal: terowongan sudah naik sementara resolver belum menyusul, jadi tunggu lalu pasang secara manual sekali untuk memastikan. Yang ketiga adalah pertukaran penanyaan tadi, bukan bug yang harus ditambal.
Untuk mesin tanpa pengawasan atau armada terkelola, rancangan ini bentuk yang salah. Gunakan kebijakan pemasangan milik administrator alih-alih memperluas applet desktop menjadi layanan berhak istimewa.