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 yapabilecekleri | kalı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 form | Collie aracılığıyla kendi sorusunu yanıtlamak |
| Başlatıcıları listelemek ve kemere kendi butonlarından en fazla dört adet yerleştirmek | Terminallerinize yazı yazmak veya bir ekran göstermek |
Bir konuşmaya metin, kod ve https:// bağlantıları yerleştirmek | Ham HTML, bir resim veya web adresi olmayan bir bağlantı göstermek |
| Sınırlar dahilinde, kendi bildiriminin metnini seçmek | Korumacı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ığı yer | alt süreç kontrolünün uyguladığı şey |
|---|---|
| Linux üzerinde Bun | Varsayı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.sockSoket 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ça | Collie'nin gerektirdiği şey | nedenin belirttiği |
|---|---|---|
| Soket dahil olmak üzere yolun her parçası | Düzgün bir yeri işaret etse dahi sembolik bağ olmamalıdır | socket-not-private: <path> is a symlink |
| Soketin kendi klasörü | İzin modu tam olarak 0700 olan, size ait gerçek bir klasör | the 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ör | Grubun 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 |
| Soket | Grup veya diğer izinleri bulunmayan, size ait bir soket | the 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 platform | Güvenli tarafta kalarak başarısız olur: Collie asla arama yapmaz | this platform shows no file owner |
| Windows | Yalnızca HTTPS aktarımı kullanılabilir: collie durable attach --socket yazmadan önce reddeder | a 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| kural | değer |
|---|---|
| Belirteç | Kırpmadan sonra 32 ila 4096 bayt, boşluksuz yazdırılabilir ASCII |
| URL | Bu 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 |
| Sertifika | Herhangi bir istemcinin denetlediği gibi denetlenir. Collie'de bunu atlayacak bir seçenek yoktur |
| Yönlendirmeler | Collie 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:
- 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.
- 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.
- 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.
| metin | sı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ı etiketi | 128 bayt |
| Bir kemer düğmesi etiketi | 16 karakter |
| Bir sorunun gerekçesi | 2048 bayt |
| Bir araç çağrısının çıktısı | 16384 bayt |
| Bir iletinin veya yanıtın metni | 65536 bayt |
Bir markdown veya code öğesinin metni | 32768 bayt |
| Kalıcı bir aracıya gönderdiğiniz metin | 1 ila 32768 bayt, gönderilmeden önce reddedilir |
| Kalıcı bir aracıdan gelen tek bir yanıt | hello 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ı |
|---|---|---|
answer | Bir 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 |
send | Metin gönderdiniz veya yönlendirdiniz | İstek kimliği, adlandırdığı tur veya soru, steer, sonuç ve 120 karakterlik önizleme olarak metin |
abort | Bir turu durdurdunuz | İstek kimliği, adlandırdığı tur veya soru ve sonuç |
action | Bir kemer düğmesine dokundunuz | İstek kimliği, eylem kimliği, tur ve sonuç |
starter.start | Bir başlatıcıya dokundunuz | Başlatıcı kimliği, istek kimliği ve sonuç |
durable.reopen | Kapatılmış bir konuşmayı yeniden açtınız | Konuşma kimliği |
space.rename | Bir çalışma alanını yeniden adlandırdınız | Alan 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