Capability & İzinler
saQut programları varsayılan olarak reddet prensibiyle bir korumalı alanda çalıştırır. Programın dosya sistemine, ağa veya sistem çağrılarına erişimi yoktur; sen açıkça izin vermedikçe olmaz. Bu sayfa gerçek programlar yazan pratisyenler için izin modelini açıklar.
Üç capability
Bölüm başlığı “Üç capability”| Capability | Bayrak | Açtıkları |
|---|---|---|
| Dosya sistemi | --allow fs |
readFile, writeFile, readDir, exists, remove |
| Ağ | --allow net |
HTTP istekleri, soketler (planlanan 0.9) |
| Sistem | --allow sys |
random, randomRange, env, args, sleep, date::now() |
Birden fazla capability virgülle ayrılır:
saqut run --allow fs,net prog.sqtsaqut run --allow fs --allow sys prog.sqt // tekrarlanan bayrak da çalışırDenetim nasıl çalışır
Bölüm başlığı “Denetim nasıl çalışır”saQut iki katmanlı bir model (A+B) kullanır:
A Katmani: derleme zamani. Capability gerektiren bir fonksiyonu import
ettiğinde (örn. readFile fs ister), derleyici eşleşen --allow bayrağının
verilip verilmediğini kontrol eder. Verilmediyse program hiç çalışmadan
derleme hatası alırsın.
B Katmani: calisma zamani guvencesi. A katmanı geçse bile, VM her
capability-kapılı çağrıdan önce tekrar kontrol eder. Bu, caps::drop() ile
program ortasında capability kaldırma gibi uç durumları yakalar. Çağrı
engellenirse program yakalanabilir bir E_CAP_MISSING hatası fırlatır.
Capability sorgulama
Bölüm başlığı “Capability sorgulama”Bir programın hangi capability’lere ihtiyaç duyduğunu çalıştırmadan derleyiciye sorabilirsin:
saqut ir --capabilities prog.sqtÇıktı:
fs, sysBu, import edilen tüm fonksiyonları tarar ve bildirdikleri her capability’yi raporlar.
caps modülü
Bölüm başlığı “caps modülü”caps modülü programının kendi izinlerini çalışma zamanında denetlemesini ve
yönetmesini sağlar:
import { has, drop } from caps;
if (caps::has("fs")) { string veri = readFile("gizli.txt"); caps::drop("fs"); // programın geri kalanı için fs'ten vazgeç}caps::has(ad)capability şu anda aktifsetruedöndürürcaps::drop(ad)kalıcı olarak kaldırır; geri alma yolu yoktur
Bu, en az yetki prensibini uygulamanı sağlar: bir capability’yi yalnızca ihtiyacın olduğu sürece tutarsın.
Pratisyenler için neden önemli
Bölüm başlığı “Pratisyenler için neden önemli”- Derleme betiğin kaynak dosyaları okuyup çıktı yazabilir ama soket acamaz;
--allow fsyeterlidir - HTTP istemci programin aga ihtiyac duyar ama dosya sistemine dokunmamalidir;
yalnizca
--allow netver - Ortam değişkeni ve komut satırı argümanı okuyan bir araç yalnızca
--allow sysister
Her program tam olarak neye ihtiyacı olduğunu beyan eder. Derleyici ve çalışma zamanı bunu denetler. Gizli yetki yoktur.
