İçeriğe atla
ColliePWA

08/Documentation

Dayanıklı bir aracının güvenliği

Dayanıklı bir aracının neleri yapıp neleri yapamayacağı, soketin ve belirtecin güven kuralları, Collie'nin dayanıklı bir aracının metnine ne yaptığı ve denetim günlüğünün neleri tuttuğu

Deneysel. Kablo protokolü, SDK ve bu sayfa sonraki bir alt sürümde değişebilir ya da özellik kaldırılabilir. Kalıp kalmayacağını neyin belirlediği Dayanıklı aracılar içinde açıklanmaktadır.

Kalıcı ajan, çalıştırdığınız veya dağıttığınız koddur; Collie onun ifadelerini güvenilmeyen metin olarak kabul eder. Bu sayfa bir kalıcı ajanın nelere erişebileceğini, başkalarının ona erişmesini neyin engellediğini, Collie'nin onun metnine ne yaptığını ve denetim günlüğünün neleri sakladığını açıklar. Güvenlik belgesi bir bütün olarak Collie'yi kapsar.

Bir kalıcı ajanın yapabilecekleri ve yapamayacakları

Kalıcı bir aracı sorar, eşleştirilmiş bir cihaz karar verir. Kalıcı bir aracı, yanıtladığınız ve kendisine gönderdiğiniz şeyleri ve kablodan gelen istekleri alır. Collie, terminallerinize erişmesi için ona hiçbir yol vermez.

kalıcı bir aracının yapabileceklerikalıcı bir aracının yapamayacakları
Bir soru yöneltmek: evet veya hayır, bir seçenek, bir metin satırı veya kısa bir formCollie aracılığıyla kendi sorusunu yanıtlamak
Başlatıcıları listelemek ve kemere kendi butonlarından en fazla dört adet yerleştirmekTerminallerinize yazı yazmak veya bir ekran göstermek
Bir konuşmaya metin, kod ve https:// bağlantıları yerleştirmekHam HTML, bir resim veya web adresi olmayan bir bağlantı göstermek
Sınırlar dahilinde, kendi bildiriminin metnini seçmekKorumacının izin verdiğinden daha fazla bildirim göndermek

Bir soruyu yalnızca bir kişinin dokunuşu yanıtlar. Yanıt rotası, yazma kapısının arkasındaki eşleştirilmiş bir cihaz için çalışır ve köprüdeki hiçbir şey bunu kalıcı bir aracı, kanca veya model çıktısı için çağırmaz. Telefonda, Her zaman izin ver seçeneği ikinci bir dokunuş gerektirir. Bunu sunan kalıcı bir aracı, en çok dikkat gerektiren yetkiye sahiptir; çünkü saldırgan bir aracın vereceği tek bir yanıt, sonraki tüm çağrıların soru sorulmadan geçmesine izin verir.

Onaylanan bir eylemin ne yapacağını Collie değil, kalıcı aracı uygular. Kalıcı aracının bir butonu, kalıcı aracının yetkileriyle çalışır ve Collie yalnızca dokunma eylemini iletir.

Kalıcı bir aracı kilit ekranınızı bildirim yağmuruna tutamaz. Collie, kalıcı aracıya ve araç çağrısına göre anahtarlayarak her soruya bir kez karar verir ve en fazla bir kez bildirir. Konuşma başına dakikada 3, ana makine başına dakikada 10 ve ana makine başına saatte 30 bildirime izin verir. 31. olacak bildirim tek bir özet bildirime dönüşür ve ana makine bundan sonraki bir saat boyunca başka bildirim göndermez. Kart her zaman gösterilir.

Dikkat. Aynı kullanıcı bir soket üzerindeki soruyu yanıtlayabilir. Soket diğer kullanıcıları dışarıda tutar; aracınızın çalıştırdığı bir araç da dahil olmak üzere kendi kullanıcınızın bir sürecini dışarıda tutmaz. Alt süreç kontrolü, kalıcı aracının kendi savunmasıdır ve Collie, kalıcı bir aracının bunu çalıştırıp çalıştırmadığını bilemez.

Bu kontrol ile kalıcı bir aracı; kendisinden, başlattığı herhangi bir süreçten ve bunlardan ayırt edemediği bir çağırıcıdan gelen answer, send, abort, action, rename, close, reopen ve starter isteklerini reddeder. Reddetme yanıtı 403 caller-refused şeklindedir ve okumalar açık kalır. Bu kontrol, SDK'nin soketin çağırıcısını okuduğu Linux üzerinde Bun gerektirir. Tablo, kalıcı aracının çalıştığı yere göre neyin uygulandığını gösterir:

kalıcı aracının çalıştığı yeralt süreç kontrolünün uyguladığı şey
Linux üzerinde BunVarsayılan olarak çalışır. SDK her bağlantının çağırıcısını okur ve kalıcı aracıdan, onun alt süreçlerinden veya tanımlayamadığı bir çağırıcıdan gelen bir eylemi 403 caller-refused ile reddeder
macOS gibi başka bir yerde BunÇalışamaz. Kalıcı aracı callerCheck: "off" değerini iletmedikçe openCollie başlangıçta bir hata ile durur. off ile kullanıcınızın herhangi bir süreci yanıt verebilir
NodeÇalışamaz. Kalıcı aracı başlar ve tek bir uyarı satırı yazar. Kullanıcınızın herhangi bir süreci yanıt verebilir

Aracın araçlarını sokete erişemeyen bir korumalı alana yerleştirin, kartı bir kapıdan ziyade bir bildirim olarak ele alın veya kalıcı aracıyı Bun üzerinde çalıştırın. callerCheck: "off", kalıcı aracının kontrol olmadan çalışmaya yönelik kendi tercihidir.

Soket aktarımı

Özel bir soket diğer tüm kullanıcıları dışarıda tutar ve tek kapısı yoldur.

ls -ld /run/user/1000 /run/user/1000/desk /run/user/1000/desk/app.sock

Soket hiçbir belirteç ve hiçbir Authorization üstbilgisi taşımaz. Collie yalnızca tüm yol özel olduğunda bağlanır ve hiçbir bağlantıyı izlememek için her bağlantıdan önce / dizininden aşağıya lstat ile bu taramayı çalıştırır:

parçaCollie'nin gerektirdiği şeynedenin belirttiği
Soket dahil olmak üzere yolun her parçasıDüzgün bir yeri işaret etse dahi sembolik bağ olmamalıdırsocket-not-private: <path> is a symlink
Soketin kendi klasörüİzin modu tam olarak 0700 olan, size ait gerçek bir klasörthe socket's folder <path> has mode 0755, not 0700, belongs to user <a>, not to <b> veya <path> is not a directory
Üstündeki her klasörGrubun ve diğerlerinin yazamayacağı gerçek bir klasör. /tmp gibi sticky biti olan bir klasöre orada izin verilir, ancak asla soketin kendi klasörü olarak izin verilmez. Özel /tmp kullanan bir servis root klasörlerini 65534 kullanıcısı olarak gösterdiğinden sahibi denetlenmez<path> has mode 0775, so group or others can write to it
SoketGrup veya diğer izinleri bulunmayan, size ait bir soketthe path is not a socket, the socket belongs to user <a>, not to <b>, the socket has mode 0666, not 0600
Kullanıcı kimlikleri bulunmayan bir platformGüvenli tarafta kalarak başarısız olur: Collie asla arama yapmazthis platform shows no file owner
WindowsYalnızca HTTPS aktarımı kullanılabilir: collie durable attach --socket yazmadan önce reddedera private socket needs Unix user ids; on Windows use --url <https://...> --token-env VAR

Başarısız olan bir yola, hiçbir tolerans tanınmadan anında erişilemez. collie doctor, durable-socket satırında aynı denetimi adlandırır ve düzeltmeyi sunar. İçinde hiçbir şey olmayan bir yol no socket at <path> olarak okunur; bu bir gizlilik hatası değildir.

SDK ile derlenmiş kalıcı bir ajan, soketin klasörü mevcut olmadığında onu 0700 moduyla oluşturur. Başka bir modla mevcut olan bir klasörde başlamayı reddeder. Soketi 0600 moduna ayarlar ve dinlemeye başlamadan önce kullanım dışı soket dosyasını kaldırır.

Soket aktarımı Linux ve macOS içindir. Windows'ta soket aktarımı yoktur, bu nedenle orada token aktarımını kullanın.

Token aktarımı

Bir URL ve bir token, başka bir ana makinedeki kalıcı ajana ulaşır; token tek güvenlik kapısıdır.

openssl rand -hex 32
kuraldeğer
BelirteçKırpmadan sonra 32 ila 4096 bayt, boşluksuz yazdırılabilir ASCII
URLBu makinedeki kalıcı bir ajan için https://, http://127.0.0.1:<port> veya http://localhost:<port>. En fazla 2048 bayt. Kullanıcı adı, parola, sorgu veya parça içeremez
SertifikaHerhangi bir istemcinin denetlediği gibi denetlenir. Collie'de bunu atlayacak bir seçenek yoktur
YönlendirmelerCollie hiçbirini izlemez, bu nedenle token asla başka bir ana makineye ulaşmaz

Token'a sahip olan herkes telefonunuz gibi hareket eder. Her görüşmeyi okuyabilir, her soruyu yanıtlayabilir, metin gönderebilir, bir sırayı durdurabilir, yeniden adlandırabilir veya kapatabilir ve bir başlatıcı çalıştırabilir. İnternetten gelen bir TLS bağlantısının denetlenecek bir arayanı yoktur, bu nedenle alt süreç denetimi burada mevcut değildir. Bu yolla ulaşılan kalıcı bir ajan, her zaman izin ver seçeneğini asla sunmamalı, yalnızca İzin Ver ve Reddet seçeneklerini sunmalıdır.

Ana makine metni görür. TLS ana makinede sonlanır, bu nedenle başlığındaki token da dahil olmak üzere her isteği görür ve görüşmeler ana makinenin depolama alanında tutulur.

Collie, token'ı iki yerde düz metin olarak saklar. sources.json onu bir girdi için tutar; yapılandırma klasörünün yedeği veya senkronizasyonu onu taşır. Collie bu dosyayı 0600 modunda tutar, başlangıçta daha geniş izinli olanı günlüğüne bir satır ekleyerek daraltır ve collie doctor, grubun veya diğerlerinin okuyabileceği bir dosya için kırmızı bir sources satırı gösterir. Yalnızca kalıcı olan biçim onu .env veya config.toml içinde tutar ve onu barındıran dosyanın modu 0600 olmalıdır. Collie token'ı asla yazdırmaz. collie durable list, (token set) der, collie doctor, set, <n> bytes der ve hiçbir hata veya günlük satırı bu değeri taşımaz. attach onu --token-env adlı değişkenden okur, bu nedenle hiçbir komut satırında yer almaz.

Token'ın süresi dolmaz. Yenilemek için, Collie'yi yeniden başlatmadan önce kalıcı ajana yeni token'ı verin; aksi takdirde telefon kalıcı ajanın bunu reddettiğini bildirir. Kalıcı bir ajan, yenileme yürütülürken ikinci bir token'ı kabul edebilir: beklemeye alınmış Cloudflare örneği COLLIE_TOKEN alır ve ayarlandığı süre boyunca COLLIE_TOKEN_NEXT (ADR 0103) alır. Adımlar Belirteçler içindedir.

Bu, Collie'nin yapılandırdığınız URL'ye yaptığı giden bir çağrıdır ve hiçbir şey eklenmeyerek reddedilir. Her istek Authorization: Bearer <token> değerini, kablo sürümünü, son okumanın ETag değerini ve bir dokunma işlemi için yanıtladığınız veya gönderdiğiniz içeriğin gövdesini taşır. Okuma işlemi gövdesi olmayan bir GET işlemidir.

HTTPS üzerinden yapılan her yoklama, ana makinenizin faturalandırabileceği bir istektir; "hiçbir şey değişmedi" yanıtı da buna dahildir. Açık telefon olmadığında boşta yoklama her 10 sn'de bir çalışır, bu nedenle Collie günde 8.640 kez ve bir telefon izlerken her 2 sn'de bir sorar. Çalışmayan veya token'ı reddeden kalıcı bir ajana en fazla 10 sn'de bir soru sorulur ve bu istekler de faturalandırılır. Collie'nin gün boyu yokladığı kalıcı bir ajan için ücretli bir plan kullanın.

Collie'nin kalıcı bir aracının metnine uyguladığı işlemler

Collie, başka herhangi bir şey okumadan önce kalıcı bir aracıdan gelen her dizeyi temizler ve metin olarak çizer.

Kalıcı bir aracının dizeleri sınırlar içinde göndermesi gerekir. Collie bunu yaptığına güvenmez. Her dize üç adımdan geçer:

  1. Denetimler kaldırılır. Collie C0 denetimlerini, DEL ve C1 denetimlerini kaldırır. Birden fazla satır içeren alanlar yeni satır ve sekme karakterini korur: bir öğenin metni, bir araç çağrısının çıktısı ile özeti ve bir sorunun gerekçesi.
  2. Görünmez karakterler ve yön karakterleri kaldırılır. Collie U+200E, U+200F ve U+061C yön işaretlerini, U+202A - U+202E ve U+2066 - U+2069 arası geçersiz kılma ve yalıtıcıları, U+200B - U+200D arası sıfır genişlikli karakterleri, U+2060 sözcük birleştiriciyi, U+FEFF bayt sırası işaretini ve görünmez bir cümlenin tamamını taşıyabilen U+E0000 - U+E007F arası etiket karakterlerini kaldırır.
  3. Dize kesilir. Collie dizeyi tam bir karakter sınırında bayt sınırına kadar keser ve … ile sonlandırır.

Temizleme sırasında başlığı veya gerekçesi değişen bir soru, kartında "Text shortened" işareti taşır. Hiç sözcük kalmayan bir seçenek veya kemer düğmesi atılır; böylece bir düğme asla boş kalmaz. Hiç sözcük kalmayan bir alan id değeriyle adlandırılır.

metinsınır
Bir çalışma alanının, sekmenin, konuşmanın veya sorunun başlığı256 bayt
Bir seçenek, alan veya başlatıcı etiketi128 bayt
Bir kemer düğmesi etiketi16 karakter
Bir sorunun gerekçesi2048 bayt
Bir araç çağrısının çıktısı16384 bayt
Bir iletinin veya yanıtın metni65536 bayt
Bir markdown veya code öğesinin metni32768 bayt
Kalıcı bir aracıya gönderdiğiniz metin1 ila 32768 bayt, gönderilmeden önce reddedilir
Kalıcı bir aracıdan gelen tek bir yanıthello için 16 KiB, anlık görüntü için 4 MiB

Kimlikler asla temizlenmez veya kesilmez. Bir id, denetim karakteri, boşluk karakteri ve /, ? veya # içermeyen 1 ila 128 bayttır; aksi takdirde onu taşıyan nesne atılır.

Collie metni metin olarak çizer. Bir markdown ögesi başlıkları, listeleri, vurguları, kod parçalarını ve bağlantıları gösterir; ham HTML hiçbir zaman işlenmez: etiket kendi karakterleri olarak görünür. Bir markdown ögesi içindeki bağlantı yalnızca bir web adresini açar. Bir link ögesi, kullanıcı adı veya parola içermeyen, boşluk, denetim karakteri veya görünmez karakter barındırmayan ve en fazla 2048 karakterden oluşan bir sunucuya sahip bir https:// adresine ihtiyaç duyar. Aksi takdirde Collie ögeyi atar ve her konuşma için günlüğüne bir satır yazar. Görseller ve dosyalar öge değildir.

Neler günlüğe kaydedilir

Collie, bir telefonun kalıcı bir ajana yaptığı her yazma işlemini <state-dir>/audit.log modunda, 0600 içine yazar.

Her satır kalıcı ajanın adını session olarak, eşleştirilmiş cihazı ve olayı taşır:

olayşu durumda:satırın tuttukları
answerBir dokunma bir soruyu yanıtladıİstek kimliği, soru ve revizyonu, seçenek kimliği veya yanıtın türü (optionIds, text veya values) ve sonuç. Yazdığınız sözcükler hiçbir zaman tutulmaz
sendMetin gönderdiniz veya yönlendirdinizİstek kimliği, adlandırdığı tur veya soru, steer, sonuç ve 120 karakterlik önizleme olarak metin
abortBir turu durdurdunuzİstek kimliği, adlandırdığı tur veya soru ve sonuç
actionBir kemer düğmesine dokundunuzİstek kimliği, eylem kimliği, tur ve sonuç
starter.startBir başlatıcıya dokundunuzBaşlatıcı kimliği, istek kimliği ve sonuç
durable.reopenKapatılmış bir konuşmayı yeniden açtınızKonuşma kimliği
space.renameBir çalışma alanını yeniden adlandırdınızAlan kimliği ve yeni ad

Bir konuşmayı veya sekmeyi kapatma ve yeniden adlandırma işlemleri olağan olayları kullanır: pane.close, pane.rename ve tab.rename. COLLIE_AUDIT_CONTENT=none, istek kimliği gibi adlandırılmış birkaç alan dışında ayrıntıdaki her dizeyi karartır; bu nedenle send önizlemesi de bununla birlikte gider. Günlük, olay gerçekleştikten sonra ne olduğunu gösterir. Hiçbir şeyi durdurmaz.

Collie ayrıca yazılan metin olmadan her yanıt, gönderme, durdurma, düğmeye dokunma ve başlatıcı için bir alındı tutar. Collie'nin bir durable agent'ın verilerini tuttuğu yer ne kadar süre tutulacağını belirtir.

Bu sayfayı GitHub üzerinde düzenleyin

The rest of the documentation