Validační server - automatická kontrola semestrálních prací

Zabezpečení validačního serveru

Zpět na hlavní stránku

Tato stránka popisuje různé aspekty týkající se zabezpečení validačního serveru.

Požadavky vlastní aplikace

Samotný validační server nemusí běžet jako root či jinak privilegovaný uživatel a také se to samozřejmě silně nedoporučuje. Ideální situace je vytvořit speciálního uživatele, pod nímž server poběží. Konkrétně mějme tedy:

Server potřebuje read/write přístup do svých podadresářů, dále potřebuje mít možnost čekání na portu určeném pro RMI (tedy obvykle 1099), což nevyžaduje žádné extra starosti (pouze již nesmí být port obsazen).

V případě, že se například výstupní HTML či XML soubory exportují do nějakého jiného adresáře, musí mít samozřejmě i tam právo zápisu (typicky /var/www). Případně je toto možno řešit opačně s použitím symlinků.

Zabezpečení validovaných souborů

Mnohem větší důraz je logicky kladen na zabezpečení souborů, které validační server přijímá od svých klientů, překládá a poté spouští. Předpokládejme tedy, že máme doménu:

Doména funguje tak, že přijímá JAVA zdrojové soubory, překládá je a spouští, přičemž kontroluje výstupy programů. Z pohledu bezpečnosti je v tomto procesu pro nás kritický pouze krok "spouštění". Spuštění překladače považujeme za bezpečný úkon, který není třeba nijak zabezpečovat (pokud by však bylo požadováno zabezpečení i překladu, není nejmenší problém) .

Při spouštění jakýchkoliv souborů (ať binárních či Java) platí stejná pravidla. Java soubory se spouští jako jakékoliv jiné binární - pro ně se totiž spouští binární příkaz "java" (jehož cesta je zadána v konfiguraci serveru/domény). Proto se nejprve zaměříme na způsob zabezpečení spouštění binárních souborů:

Zabezpečení spouštění binárních souborů

Zabezpečení je řešeno tak, že je umožněno spouštět soubory pod jiným uživatelem, než pod kterým běží vlastní validační server. Tento uživatel může mít zcela minimalizována veškerá oprávnění na systém, zdroje či paměť, což silně snižuje možnost nějakého většího úmyslného poškození systému.

V tomto okamžiku bude validační server podporovat zabezpečené spouštění všech spustitelných souborů.

Poznámka: Tento způsob zabezpečení se týká pouze operačního systému Linux (či příbuzných - podobných), ve Windows nebude fungovat. Fungoval by v případě, že by uživatel sehnal/naprogramoval jednoduchou utilitku "sudo" pro Windows - tedy program, který by spustil zadaný program pod jiným uživatelem. Bude-li zájem, mohu tuto utilitku naprogramovat.

Zabezpečení Javovských programů

Předchozí kapitola platí samozřejmě i pro spouštění Javovských programů, protože ty se spouštějí příkazem 'java' - a ten je tedy spouštěn pod uživatelem 'vs-nobody'. Pro případ spouštění Java tříd je však k dispozici ještě další úroveň zabezpečení - Java Policies.

Je možno definovat standardním způsobem Java Policies pro spouštěné Javovské programy:

Poznámka: Tento způsob zabezpečení se týká jakéhokoliv operačního systému, na kterém validační server běží.

Zpět na hlavní stránku

autor: Lukáš Valenta, září 2007 (lukas.valenta at seznam.cz)