1 / 16

FileGuards czyli implementacja operacji na plikach przez użytkownika

FileGuards czyli implementacja operacji na plikach przez użytkownika. Rafal@Wijata.com. 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.

base
Download Presentation

FileGuards czyli implementacja operacji na plikach przez użytkownika

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. FileGuardsczyli implementacja operacji na plikach przez użytkownika Rafal@Wijata.com

  2. 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. • Strażnik – wyprowadzenie obsługi plików poza jądro OS • Nieuprzywilejowane 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!

  3. Strażnik – jak ? • Dodatkowa funkcja systemowa fglink. • Funkcje rejestracji strażników [un]register_fgfunc • Parametry = nazwa + file_operations • W strukturze file dodatkowa file_operations • Funkcja open() podmienia f_ops jeśli plik pilnowany. • Tak uzyskujemy transparencję dla klientów User process sys_open Request Open() If (guarded & module_registered) { remember orig f_ops; f_ops = our_f_ops; }; Requests Read(), Write(), etc. Calls our wrappers !

  4. Strażnik – właściwości • Minimalna modyfikacja jądra • Tylko 16 nowych/zmodyfikowanych linii kodu ! • Na razie całość ma 2000 linii. • Włączanie w konfiguracji jądra. • Automatyczne ładowanie modułów • Flaga fg_allow (/proc/fs)

  5. 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 ]

  6. 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

  7. 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

  8. 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.

  9. Strażnik – moduł Strażnik systemowa tablica otwartych plików Proces /dev/fguX STRZEŻONY PLIK systemowa tablica sesji Struktura FGU_DATA Wygeneruj żądanie Komunikaty

  10. Strażnik – moduł Strażnik systemowa tablica otwartych plików Proces /dev/fguX STRZEŻONY PLIK systemowa tablica sesji Struktura FGU_DATA Odczytaj odpowiedź Komunikaty

  11. 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 !

  12. Strażnik – Wydajność CPU = 572 743 000 Hz Przykładowo: 170 = 0.29 microsek, 426 = 0.74 microsek

  13. Strażnik – Wydajność 170 = 0.29 microsek, 19305 = 33 microsek

  14. Strażnik – Wydajność

  15. Strażnik – Wydajność

  16. 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

More Related