Ders 04 / 16
Uygulama İzin Listeleri
İzin listesi 25 kalemlik bir çalıştırma kümesinde değerlendirilir: yol tabanlı ve imza tabanlı kuralın aynı sayıda ama farklı kalemleri kaçırdığı, birleşim biçiminin yanlış engeli 1'den 7 kaleme çıkardığı, filodaki 1038 tutunma noktasının 972'sinin onaylanmamış kod çalıştıramaz hâle geldiği ve 66'sının açık kaldığı sayılır.
İçindekiler
Önceki dersin en pahalı maddesi yazılım kaynağı kısıtlamasıydı: 96 noktanın yazma yetkisini daraltıyor, yedi meşru işi elle adıma düşürüyordu. Maddenin arkasında tek satırla anılan bir karar var — uçta hangi yazılımın çalışabileceğine önceden karar verilmesi. Uygulama izin listesi bu kararı bir yapılandırma maddesi olmaktan çıkarıp her çalıştırma denemesinde verilen bir karara dönüştürür.
Bir yapılandırma maddesi bir kez uygulanır ve uyumluluğu sorulur. Bir izin listesi her çalıştırmada yeniden değerlendirilir ve doğruluğu ancak gerçek bir çalıştırma kümesi üzerinde ölçülebilir: bir dönemde uçlarda çalışan kalemler tek tek listeye sorulur ve iki tür yanlış sayılır — engellenen meşru kalem ve geçen meşru olmayan kalem.
İki Kural Türü
İzin listesi kuralları iki eksende yazılır. Yol tabanlı kural, çalıştırılan dosyanın hangi dizin sınıfında durduğuna bakar: sistem dizini ve program dizini izinli, kullanıcı dizini, geçici dizin, ağ payı ve taşınabilir ortam değil. İmza tabanlı kural, dosyayı kimin imzaladığına bakar: işletim sistemi sağlayıcısı, iş yazılımı sağlayıcısı ve kurum içi imza izinli, imzasız ve bilinmeyen imzalı kalemler değil.
İki kural birleştirilebilir. Ya da biçiminde bir kalem tek bir ölçütten geçmesi yeterlidir; ve biçiminde ikisinden de geçmesi gerekir. Aynı iki kural, iki farklı birleşimle çok farklı sonuç üretir ve fark ancak bir kümede ölçüldüğünde görünür.
- SS19. Yirmi beş kalemlik çalıştırma kümesi, dönem ve koşum sayıları modeldir; gerçek bir uçta çalıştırma engellenmiyor.
- SS20. Meşru olmayan kalemler yalnız tür, yol sınıfı ve imza sınıfıyla anılır; ne yaptıkları ve nasıl geldikleri yazılmaz.
- SS21. Yol sınıfı altı, imza sınıfı beş değerlidir. Gerçekte alt dizin ve sertifika ayrıntısı kalem sayısını büyütür, kuralların birbirine göre davranışını değiştirmez.
- SS22. Karar ikilidir: geçer ya da engellenir. Yalnız uyaran, engellemeyen kip modellenmiyor.
- SS23. Betik kalemlerinde karar çalıştırılan yorumlayıcı üzerinde verilir; betik denetimi açıkken betiğin kendisi de aynı kuralla değerlendirilir.
- SS24. Betik denetiminin iki sınıfta uygulanamaz olması önceki dersten gelir: o iki sınıfta iş betikle yürüyor.
// izin/liste.mjs — uygulama izin listesinin bir calistirma kumesi uzerinde degerlendirilmesi // MODELIDIR. Gercek bir uc noktada calistirma engellenmez; kalemler tur duzeyinde yazilir. export const YOL_IZIN = ['sistem', 'program']; export const IMZA_IZIN = ['isletim', 'is-saglayici', 'ic-imza']; // satir: ad | tur | yol sinifi | imza sinifi | mesru mu | kac makinede kostu | donemdeki kosum export const KALEM = ` olcut-ajani ikili sistem isletim e 102 91800 gunluk-aktarici ikili sistem isletim e 102 3060 yama-ajani ikili program is-saglayici e 102 408 surucu-guncelleyici ikili program isletim e 102 204 arsiv-araci ikili program is-saglayici e 102 1224 belge-duzenleyici ikili program is-saglayici e 84 5040 saha-olcum-uygulamasi ikili program is-saglayici e 60 7200 veri-tabani-istemcisi ikili program is-saglayici e 18 540 ic-rapor-araci ikili program imzasiz e 24 480 bakim-betigi betik sistem ic-imza e 102 3060 tanilama-araci ikili gecici ic-imza e 30 90 yeni-surum-yukleyici ikili gecici is-saglayici e 40 40 ic-yardimci-arac ikili kullanici imzasiz e 18 360 sayac-okuma-araci ikili tasinabilir is-saglayici e 12 720 saha-kurulum-betigi betik kullanici imzasiz e 60 180 ceyrek-raporu-betigi betik ag-payi ic-imza e 24 96 bilinmeyen-ikili-1 ikili gecici imzasiz h 4 11 bilinmeyen-ikili-2 ikili kullanici imzasiz h 7 23 bilinmeyen-ikili-3 ikili ag-payi bilinmeyen h 2 4 bilinmeyen-ikili-4 ikili tasinabilir bilinmeyen h 1 1 yorumlanan-kalem-1 betik kullanici imzasiz h 6 19 yorumlanan-kalem-2 betik gecici imzasiz h 3 8 imzali-arac-kotuye-kullanim ikili program is-saglayici h 2 5 izinli-yolda-imzasiz ikili program imzasiz h 5 14 imzali-kalem-kullanici-yolunda ikili kullanici is-saglayici h 3 9` .trim().split('\n').map((r) => { const [ad, tur, yol, imza, m, makine, kosum] = r.trim().split(/\s+/); return { ad, tur, yol, imza, mesru: m === 'e', makine: Number(makine), kosum: Number(kosum) }; }); export const KURAL = { yol: { satir: YOL_IZIN.length, gecer: (k) => YOL_IZIN.includes(k.yol) }, imza: { satir: IMZA_IZIN.length, gecer: (k) => IMZA_IZIN.includes(k.imza) }, 'yol-veya-imza': { satir: YOL_IZIN.length + IMZA_IZIN.length, gecer: (k) => YOL_IZIN.includes(k.yol) || IMZA_IZIN.includes(k.imza) }, 'yol-ve-imza': { satir: YOL_IZIN.length + IMZA_IZIN.length, gecer: (k) => YOL_IZIN.includes(k.yol) && IMZA_IZIN.includes(k.imza) }, }; // Betik kalemleri: karar calistirilan yorumlayici uzerinde verilir, betigin kendisi degerlendirilmez. // Betik denetimi acikken betik de ayni kuralla degerlendirilir. export const gecer = (k, kural, betikDenetimi) => (k.tur === 'betik' && !betikDenetimi ? true : KURAL[kural].gecer(k)); export function olc(kural, betikDenetimi) { const engel = KALEM.filter((k) => k.mesru && !gecer(k, kural, betikDenetimi)); const kacan = KALEM.filter((k) => !k.mesru && gecer(k, kural, betikDenetimi)); const say = (l, alan) => l.reduce((a, k) => a + k[alan], 0); return { engelKalem: engel.length, engelMakine: say(engel, 'makine'), engelKosum: say(engel, 'kosum'), kacanKalem: kacan.length, kacanMakine: say(kacan, 'makine'), kacanKosum: say(kacan, 'kosum'), satir: KURAL[kural].satir + (betikDenetimi ? 1 : 0) + engel.length }; } // Filodaki tutunma noktalarinin kaci izin listesiyle kullanilamaz hale geliyor. // Betik tasiyabilen nokta, izinli bir yorumlayiciyi cagirabildigi icin kapanmaz. export const SINIF = [ { ad: 'saha-dizustu', makine: 60, kalan: 9, betikli: 3, betikDenetimi: true }, { ad: 'sube-ucu', makine: 24, kalan: 12, betikli: 3, betikDenetimi: true }, { ad: 'toplayici', makine: 12, kalan: 12, betikli: 4, betikDenetimi: false }, { ad: 'islem-sunucusu', makine: 6, kalan: 11, betikli: 3, betikDenetimi: false }, ]; export const noktaOlc = (s) => ({ nokta: s.kalan * s.makine, kapanan: (s.betikDenetimi ? s.kalan : s.kalan - s.betikli) * s.makine, acik: (s.betikDenetimi ? 0 : s.betikli) * s.makine, });
Dört Kural Kümesi, Aynı Küme
// izin/olc.mjs — dort kural kumesi ayni calistirma kumesinde degerlendirilir import { KALEM, KURAL, SINIF, gecer, olc, noktaOlc } from './liste.mjs'; const y = (g, ...s) => console.log(s.map((v, i) => (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join('').trimEnd()); const say = (f, alan) => KALEM.filter(f).reduce((a, k) => a + k[alan], 0); console.log(`${KALEM.length} calistirma kalemi, ${say(() => true, 'kosum')} kosum; ` + `${KALEM.filter((k) => !k.mesru).length} kalem mesru degil, ` + `${KALEM.filter((k) => k.tur === 'betik').length} kalem betik`); const A = [-16, 7, 10, 14, 10, 14, 13, 8]; console.log('\n1. kural kumeleri (betik denetimi yok / var)'); y(A, 'kural', 'betik', 'engel k.', 'engel makine', 'kacan k.', 'kacan makine', 'kacan kosum', 'satir'); for (const kural of Object.keys(KURAL)) for (const bd of [false, true]) { const o = olc(kural, bd); y(A, kural, bd ? 'var' : 'yok', o.engelKalem, o.engelMakine, o.kacanKalem, o.kacanMakine, o.kacanKosum, o.satir); } const B = [-32, 8, 13, 14, 8, 9]; console.log('\n2. yol-veya-imza kuralinda yanlis karar verilen kalemler (betik denetimi var)'); y(B, 'kalem', 'tur', 'yol', 'imza', 'mesru', 'sonuc'); for (const k of KALEM) { const g = gecer(k, 'yol-veya-imza', true); if (g === k.mesru) continue; // dogru karar verilen kalemler atlanir y(B, k.ad, k.tur, k.yol, k.imza, k.mesru ? 'evet' : 'hayir', g ? 'gecti' : 'engel'); } const C = [-16, 8, 10, 8, 16]; console.log('\n3. izin listesinin tutunma noktalarina etkisi'); y(C, 'sinif', 'nokta', 'kapanan', 'acik', 'betik denetimi'); let t = { nokta: 0, kapanan: 0, acik: 0 }; for (const s of SINIF) { const o = noktaOlc(s); for (const a of Object.keys(t)) t[a] += o[a]; y(C, s.ad, o.nokta, o.kapanan, o.acik, s.betikDenetimi ? 'var' : 'yok'); } y(C, 'toplam', t.nokta, t.kapanan, t.acik, ''); console.log('\nsecilen kural kumesi: yol-veya-imza'); for (const bd of [false, true]) { const v = olc('yol-veya-imza', bd); console.log(` betik denetimi ${bd ? 'var' : 'yok'}: engel ${v.engelKalem} kalem / ` + `${v.engelMakine} makine / ${v.engelKosum} kosum; kacan ${v.kacanKalem} kalem / ` + `${v.kacanMakine} makine; ${v.satir} satir`); } console.log(` betik denetimi uygulanabilen sinif: ` + `${SINIF.filter((s) => s.betikDenetimi).length}/${SINIF.length}`);
25 calistirma kalemi, 114596 kosum; 9 kalem mesru degil, 5 kalem betik 1. kural kumeleri (betik denetimi yok / var) kural betik engel k. engel makine kacan k. kacan makine kacan kosum satir yol yok 4 100 4 16 46 6 yol var 6 184 2 7 19 9 imza yok 2 42 4 14 41 5 imza var 3 102 2 5 14 7 yol-veya-imza yok 1 18 5 19 55 6 yol-veya-imza var 2 78 3 10 28 8 yol-ve-imza yok 5 124 3 11 32 10 yol-ve-imza var 7 208 1 2 5 13 2. yol-veya-imza kuralinda yanlis karar verilen kalemler (betik denetimi var) kalem tur yol imza mesru sonuc ic-yardimci-arac ikili kullanici imzasiz evet engel saha-kurulum-betigi betik kullanici imzasiz evet engel imzali-arac-kotuye-kullanim ikili program is-saglayici hayir gecti izinli-yolda-imzasiz ikili program imzasiz hayir gecti imzali-kalem-kullanici-yolunda ikili kullanici is-saglayici hayir gecti 3. izin listesinin tutunma noktalarina etkisi sinif nokta kapanan acik betik denetimi saha-dizustu 540 540 0 var sube-ucu 288 288 0 var toplayici 144 96 48 yok islem-sunucusu 66 48 18 yok toplam 1038 972 66 secilen kural kumesi: yol-veya-imza betik denetimi yok: engel 1 kalem / 18 makine / 360 kosum; kacan 5 kalem / 19 makine; 6 satir betik denetimi var: engel 2 kalem / 78 makine / 540 kosum; kacan 3 kalem / 10 makine; 8 satir betik denetimi uygulanabilen sinif: 2/4
Aynı Sayı, Farklı Kalemler
Betik denetimi kapalıyken yol tabanlı kural 4 meşru olmayan kalemi kaçırıyor; imza tabanlı kural da 4 kaçırıyor. İki sayı eşit, kalemler değil. Yol kuralı, izinli bir dizinde duran imzasız bir kalemi geçiriyor — izinli yol sınıfı içinde yazılabilir bir alt dizin bulunduğu anda kural o alt dizini de kapsar. İmza kuralı ise kullanıcı dizininde duran, tanınan bir imzayla imzalanmış bir kalemi geçiriyor — imza dosyanın kim tarafından üretildiğini söyler, nereye konduğunu değil.
Bu, “hangi kural türü daha iyi” sorusunun yanıtsız olduğu anlamına gelir. Sorulacak soru hangi kalemleri kaçırdıklarıdır ve iki liste birbirini kapsamaz. İki kuralı ve ile birleştirmek kaçan kalemi 4’ten 3’e indiriyor; her iki ölçütten de geçmek gerektiği için tek başına birinden geçenler duruyor.
Birleşim biçiminin bedeli aynı satırlarda okunuyor. Ya da biçimi yanlış engeli 1 kaleme ve 18 makineye indiriyor ama kaçan kalemi 5’e çıkarıyor. Ve biçimi kaçanı 3’e indirirken yanlış engeli 5 kaleme ve 124 makineye çıkarıyor. Aynı iki kural, aynı beş satır, iki farklı birleşimle beş kat farklı yanlış engel üretiyor. Kural sayısı bu kararı hiç anlatmaz; anlatan şey birleşim biçimidir.
Her İki Kuralın da Geçirdiği Kalem
İkinci tablo seçilen kural kümesinde yanlış karar verilen beş kalemi listeliyor. Üçüncü satır bu
dersin sınırıdır: izinli bir dizinde duran ve tanınan bir imzayla imzalanmış bir aracın kötüye
kullanımı. Bu kalem yol-ve-imza dâhil bütün kural kümelerinden geçiyor ve betik denetimi de onu
durdurmuyor.
Nedeni kuralda bir eksiklik değil, sorunun kendisidir. İzin listesi “bu ikili çalışabilir mi” sorusuna yanıt verir; “bu ikili şu anda ne yapıyor” sorusuna bakmaz. Onaylı bir aracın onaylanmamış bir iş için çağrılması, izin listesinin tanım gereği göremediği kalemdir. Sayısı küçüktür — iki makine, beş koşum — ama bütün kural kümelerinde aynı kalır ve daha sıkı bir liste onu azaltmaz. Bu kalemin ölçümü sonraki konuya, davranışa bakan denetimlere aittir.
Engellenen Meşru İş
En sıkı yapılandırma — yol-ve-imza artı betik denetimi — kaçan kalemi 1’e, kaçan koşumu 5’e
indiriyor. Aynı satırda yanlış engel 7 kaleme ve 208 makineye çıkıyor. Yüz iki makinelik bir filoda
208 makine-kalem, bazı makinelerin birden çok engelle karşılaştığı anlamına gelir.
Engellenen kalemler adıyla okunduğunda hepsinin bir gerekçesi var. Tanılama aracı geçici dizinden çalışıyor, çünkü olay sırasında oraya indiriliyor. Yeni sürüm yükleyicisi tanım gereği geçici dizindedir. Sayaç okuma aracı taşınabilir ortamdan çalışıyor, çünkü sahada ağ yok. Kurum içi rapor aracı imzasız, çünkü imzalayacak bir süreç kurulmamış. Saha kurulum betiği kullanıcı dizininde ve imzasız. Bunların hiçbiri bir hata değil; hepsi listenin varsaydığı düzenin dışında kalan gerçek işlerdir.
Her engellenen kalem bir istisna satırı ya da her koşumda bir elle onay üretir. Satır sütunu bunu sayıyor: en gevşek yapılandırmada 6 satır, en sıkısında 13. Bakım maliyeti listenin kendisinden değil, istisnalardan gelir ve her yeni araç, her yeni sürüm ve her yeni saha yordamı bu listeyi yeniden açar.
Yorumlanan Kalem ve Tutunma Noktası
Beş kalem betiktir ve bunların kararı çalıştırılan yorumlayıcı üzerinde verilir. Betik denetimi
kapalıyken her kural kümesi bu beş kalemi geçirir, çünkü yorumlayıcı izinli bir ikilidir ve listeye
sorulan şey odur. Betik denetimi açıldığında kaçan kalem her kural kümesinde yarıya iniyor: yol
kuralında 4’ten 2’ye, ve kuralında 3’ten 1’e.
Üçüncü tablo bunun tutunma noktalarına karşılığını veriyor ve ilk dersten beri ilk kez kapatılan sütununa büyük bir sayı yazılıyor. Filodaki 1038 noktanın 972’si onaylanmamış kod çalıştıramaz hâle geliyor: bir açılış girişi, servis tanımı ya da zamanlanmış görev yerinde durur ama çağırdığı şey listeden geçmezse çalışmaz.
Açık kalan 66 nokta ise iki sınıftan geliyor. Toplayıcı makinede ve işleme sunucusunda betik denetimi uygulanamıyor, çünkü önceki derste ölçüldüğü gibi o iki sınıfta işin kendisi betikle yürüyor. Bu sınıflarda betik taşıyabilen noktalar izinli bir yorumlayıcıyı çağırarak listeyi atlayabilir. Sayı küçüktür (1038’in yüzde 6’sı) ve tam olarak listenin uygulanamadığı yerde durur. Kapatılamayan noktanın kuralı burada da geçerlidir: 66 nokta en azından taban çizgisine yazılır ve değişip değişmediği karşılaştırılır.
Özet
- İzin listesi bir yapılandırma maddesi değil, her çalıştırmada verilen bir karardır; doğruluğu ancak gerçek bir çalıştırma kümesinde ölçülür. Yirmi beş kalemin 9’u meşru değil, 5’i betiktir.
- Yol tabanlı ve imza tabanlı kural aynı sayıda (4) kalem kaçırır ama aynı kalemleri değil: biri izinli dizindeki imzasız kalemi, öteki kullanıcı dizinindeki imzalı kalemi geçirir.
- Birleşim biçimi kural sayısından daha çok karar taşır: aynı beş satır ya da biçiminde 1 kalem yanlış engelleyip 5 kaçırır, ve biçiminde 5 kalem yanlış engelleyip 3 kaçırır.
- En sıkı yapılandırma kaçan kalemi 1’e indirir, karşılığında 7 meşru kalemi 208 makinede engeller ve istisna satırını 6’dan 13’e çıkarır. Engellenen kalemlerin hepsinin geçerli bir gerekçesi vardır.
- İzinli dizinde duran ve tanınan bir imzayla imzalanmış bir aracın kötüye kullanımı bütün kural kümelerinden geçer; izin listesi “ne çalışabilir” sorusuna bakar, “ne yapıyor” sorusuna değil.
- İzin listesi 1038 tutunma noktasının 972’sini onaylanmamış kod çalıştıramaz hâle getirir; 66’sı betik denetiminin uygulanamadığı iki sınıfta açık kalır ve yalnız taban çizgisine yazılabilir.
Sonraki Adım
Bu ders bir kalemin çalışıp çalışamayacağına yol ve imzaya bakarak karar verdi. Her iki ölçüt de kalemin ne yaptığını hiç sormuyor ve tam olarak orada kaçıran bir kalem bıraktı. Bir kalemin ne yaptığını öğrenmenin tek yolu onu çalıştırmaktır — ama uçta çalıştırmak, kararın kendisini gereksiz kılar. Sonraki dersin konusu bu çıkmazın karşılığıdır: sanal alan, şüpheli bir kalemi üretim ortamından yalıtılmış bir yerde çalıştırıp davranışını gözlemleme kararıdır. Ölçülecek olan yalıtımın gücü değil — o önceki kursta ölçüldü ve burada girdi olarak alınır — çalıştırma kararının kendisidir: kaç şüpheli kalem yalıtımda gerçekten çalıştırılabiliyor, gözlem penceresinde kaç davranış görünüyor, kaç davranış hiç ortaya çıkmıyor ve karar kaç kalemde elle incelemeye düşüyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.