Projekt BrmLib

Hlavním cílem projektu je vytvořit jednotnou základní modulární dokumentovanou opensource platformu, která splňuje naše vysoké bezpečnostní standardy a poskytne základ pro celou řadu rozšíření a projektů integrovaných v rámci BrmLabu

Tato specifikace je otevřená, ale toto není místo pro diskuzi, pokud vám na aktuálním návrhu něco extrémně vadí nebo se chcete poradit/diskutovat o možných úpravách, použijte kanál #brmlab na IRC

Název BrmLib je finální a definitivní, o názvu se žádná diskuze vést nebude

Základní charakteristiky

  • Knihovna slouží především k evidenci uživatelů a jejich autorizaci
    • uživatel != člen, může to být host, nebo bot, uživatel nebo systemova role
  • Poskytuje veřejné dokumentované API pro veškeré dostupné funkce
    • Přenosová technologie je irelevantní, překlad do XML, JSON, CSV objektu je na urovni API interpreta
    • V průběhu vývoje bude na přidružených repozitářích zveřejněna implementace API v dalších jazycích
    • Defaultně dostupná bude knihovna v jazyce ve kterém se vyvíjí BrmLib
  • Knihovna bude démon sandboxovaný do vlastního virtuálního stroje
    • Bezpečnost na všech úorvních je ke specifikaci v nižší kapitole
  • Základní součásti
    • Databáze členů (Včetně všech různých přístupových objektů aka. ssh klice, certifikaty, name/pass, …)
    • Firewall k datům a návazným modulům
    • ACL (Access Control Layer)
    • Webový interface
    • Shell interface
    • API

Bezpečnost

Obecně předpokládám že na tomhle tématu se bude vést nejbouřlivější diskuze prosím veškeré návrhy do seznamu níže: Jednotlivé kroky prověření bezpečnosti systému jsou k dispozici jako free tasks

  • Fuzz testing API
  • Minimalizace napadnutelných vektorů
  • Předpokládám otevření pouze portů 80,22
  • Pentesting všech funkcí ( i napadnutelnost interne z modulu)

Architektura

  • Základem celého systému je BrmLib VM, ten zajišťuje
    • Autentifikace uživatele
    • Správu validity tokenu
    • Správa uživatelů a přístupových oprávnění
    • Validace a Autorizace každé akce provedené přímo na BrmLib nebo na podřízených modulech
    • Validace dat ukádaných do databáze
  • Veškeré moduly jsou registrovány do BrmLib pomocí API volání Ad-Hoc, není potřeba jejich autorizace
    • Každý modul musí implementovat interface, pomocí kterého probíhá komunikace a kterým může být modul validován
    • Většinou se modul dá považovat za poskytovatele dat (eg. Sklad je poskytovatel položek na skladě, účetní systém bude mít interní API pro zjištění zda má člen BrmLab dluh, etc..)
  • Každý modul by měl být schopen definovat nové ACL prvky (attributy, skupiny)
    • ACL pravidla budou mít úrovně (modul ji může pouze zvýšit, ne však snížit pod sys. hranici), tak že modul nemůže přepsat ACL daná BrmLib nebo Core Modules
    • eg. přidělit danému uživateli dodatečné attributy, které mu poskytují dodatečné pravomoce v rámci modulů (eg. více modulů na dohodnutým attributem poskytuje různou funkčnost, ale autorizace je pouze jedna)
  • V systému bude možné definovat posluchače pro události, a cílové akce které se mají provést
    • Modul může definovat jak “Hook ID” (tj. název akce na kterou se poslouchá, ve stylu tld.modulename.hookid), tak registraci posluchače pro konkrétní ID
    • Hook je chráněn ACL, a vykonává se v rámci uživatelských pravomocí které vytvořily událost
    • eg. V případě že se objeví nová uživatelská skupina tak modul Sklad si zaktualizuje interní databázi skupin, pro svojí validní funkčnost

Technologie realizace

  • Systém bude realizován jako webová aplikace v PHP
  • Jako databázový podklad bude PostgreSQL
  • Jak vrstva persistence (ukládání dat) tak vrstva přenosová (API) budou generické, tj. interpretace interních objektů bude závislá na interpretu (serializace/deserializace JSON/XML/… stejně jako persistence POPO* )
  • Databáze je s ohledem na generičnost řešení pro potřeby BrmLab built-in do BrmLib VM, BrmLib však přebírá ODBC konektor, tedy nezávislý na lokaci a technologii DB
  • Jednotlivé moduly mohou komunikovat mezi sebou, veškeré akce musí znovu autorizovat BrmLib (eg. ACL, validita pozadavku, existence ciloveho modulu, validace odpovedi, …)

Technologie byla zvolena s ohledem na jednoduchost jazyka a budoucí možnosti ořezání a poskytnutí široké veřejnosti jako základ modulárního IS To samozřejmě neznamená že by klient neměl použít alespoň VPS pro hosting funkčnosti, tj. nejsme omezeni v použití platform-specific řešení/hacků

*POPO - Plain Old PHP Object (viz. POJO koncept)

Core Modules

moduly nezbytné pro potřeby BrmLab, ale ne nezbytné pro běh BrmLib

  • Dokumenty
    • sklad všech dokumentů s aplikováním ACL i na úrovni FS a katalogizačním systémem
  • Účetní systém
    • Správa pokladny (transakce, etc..)
    • Implementace kontroly členskcýh poplatků
    • Správa financování grantů, etc..
  • BrmBüro
    • správa veškerých “legal” záležitostí BrmLab
    • napojeno na systém dokumentů
    • napojeno na finance
    • generování dokumentů
    • katalogizace smluv a faktur
  • Sklad
    • Nový skladový systém, napojený na finance, dokumenty
    • Muze poskytovat API pro naskladneni produktu
  • BrmBar
    • Napojený na sklad, účetní systém
    • Klient (screen+scanner v kuchyni) bude thin-client nad BrmBar API

Optional Modules

Přidávejte prosím jakékoli nápady na využití tohoto projektu, aby se při jeho realizaci daly odhalovat nesrovnalosti s jeho plánovaným využitím

  • BrmDoor
  • AccessLogging
  • LDAP interface
  • Automatická správa SSH klíčů na brmlabích strojích
  • ???
 
Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki