FileGuards czyli implementacja operacji na plikach przez użytkownika

16
FileGuards czyli implementacja operacji na plikach przez użytkownika Rafal @ Wijata . com

description

FileGuards czyli implementacja operacji na plikach przez użytkownika. [email protected]. Strażnik - wprowadzenie. Tradycyjne systemy plików – obsługa w jądrze OS Nikłe (jeśli w ogóle) możliwości rozszerzenia funkcjonalności i zachowań plików. - PowerPoint PPT Presentation

Transcript of FileGuards czyli implementacja operacji na plikach przez użytkownika

Page 1: FileGuards czyli implementacja operacji na plikach przez użytkownika

FileGuardsczyli implementacja operacji na plikach przez użytkownika

[email protected]

Page 2: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik - wprowadzenie

Tradycyjne systemy plików – obsługa w jądrze OSNikłe (jeśli w ogóle) możliwości rozszerzenia

funkcjonalności i zachowań plików.

Strażnik – wyprowadzenie obsługi plików poza jądro OSNieuprzywilejowane programy mogą obsługiwać

pliki (lub katalogi)Więcej kosztują tylko podmienione funkcje na

metryczkach (przełączenia kontekstu, kopiowanie, szeregowanie, opóźnienia w czytaniu z dysku, itp).

Rozwiązanie transparentne dla programów!

Page 3: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – jak ?

Dodatkowa funkcja systemowa fglink.Funkcje rejestracji strażników [un]register_fgfunc

Parametry = nazwa + file_operations

W strukturze file dodatkowa file_operationsFunkcja open() podmienia f_ops jeśli plik pilnowany.Tak uzyskujemy transparencję dla klientów

sys_openUser process

Request Open() If (guarded & module_registered) { remember orig f_ops; f_ops = our_f_ops;};

Requests Read(), Write(), etc.Calls our wrappers !

Page 4: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – właściwości

Minimalna modyfikacja jądraTylko 16 nowych/zmodyfikowanych linii kodu !

Na razie całość ma 2000 linii.

Włączanie w konfiguracji jądra.Automatyczne ładowanie modułówFlaga fg_allow (/proc/fs)

Page 5: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – akcje

Co może podmieniona funkcja ?Wykonać operację i zwrócić wynik.Zwrócić błąd.Wykonać jakąś czynność, wywołać oryginalną funkcję

z jądra, zmodyfikować wynik.Poprosić jądro o wykonanie funkcji jak zwykle. [ Jeśli brak funkcji , jądro wykonuje standardowy kod ]

Page 6: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – moduł użytkownika

Osobne struktury (działa jako moduł)

Sam rejestruje procedury obsługi w jądrze w imieniu procesów użytkownika

Zajmuje się wymianą danych między jądrem i procesami

Page 7: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – komunikacja z procesami

Komunikacja za pomocą urządzeń /dev/fguX Restrykcyjny protokół = bezpieczeństwo ? Komunikacja: żądanie – odpowiedź.

Jądro nie przyjmuje żądań – tylko odpowiedzi. Ścisłe komunikaty

{ magic, cmd, nr, sid, pid, datalen, data } Dane również maja strukturę zależną od funkcji.

Kolejki komunikatów: do wysłania i do odebrania

Page 8: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – proces

Odczytaj MINOR z /dev/fgu0

Zarejestruj nazwę i obsługiwane funkcje poprzez /dev/fguMINOR

Zamknij /dev/fgu0

While (true) {

odczytaj komunikat

sprawdź typ komunikatu, wykonaj odpowiednie akcje

wygeneruj komunikat odpowiedzi i wyślij do jądra

}

Cała komunikacja odbywa się przez urządzenie /dev/fguMINOR,

Jądro nie zaakceptuje danych od innego procesu niż ten, który otworzył urządzenie.

Page 9: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – moduł

Proces

Strażniksystemowa tablica otwartych plików

/dev/fguX

STRZEŻONY PLIK

systemowa tablica sesji

Struktura FGU_DATA

KomunikatyWygeneruj żądanie

Page 10: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – moduł

Proces

Strażniksystemowa tablica otwartych plików

/dev/fguX

STRZEŻONY PLIK

systemowa tablica sesji

Struktura FGU_DATA

KomunikatyOdczytaj odpowiedź

Page 11: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – czego brak ?

Podmiany inode_operations, a przynajmniej permission()

W module użytkownika nie ma jak zaimplementować niektórych funkcji (mmap).

readv/writev – ale to nie jest brak !

Page 12: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – Wydajność

CPU = 572 743 000 Hz

Przykładowo: 170 = 0.29 microsek, 426 = 0.74 microsek

Open() in kernel_spaceBez

strażnikaStrażnik bez funkcji Strażnik z funkcją

pustą

Nazwa relatywna

125/111112

404(440)/261380

440(488)/380395

Nazwa absolutna

198/166170

430(460)/275399

472(499)/380426

Page 13: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – Wydajność

170 = 0.29 microsek, 19305 = 33 microsek

Open() in user_spaceBez

strażnikabez funkcji funkcja

pustafunkcja z sesją

Nazwa absolutna

198166170

1086867918

240303218

19305

152880227

17441

Page 14: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – Wydajność

Read() – czytanie datykernel user

388627093279

340433284433183

Page 15: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – Wydajność

Read() – czytanie cryptnone kernel user

Max 4K 281782819(285)

6043

4192923532(313)

26338

720409395(835)

36900

Page 16: FileGuards czyli implementacja operacji na plikach przez użytkownika

Strażnik – Dalsze plany

Rozwijanie projektu Utrzymywanie patchy Może nawiązanie kontaktu z ludźmi od MonaFS http://www.wijata.com/fileguard

Obrona pracy