# Kryptograficzny System Plików pod Linuxem - Jak To Zrobić

## Autor: Alexander O. Yuriev, alex@bach.cis.temple.edu
Wersja polska: Krzysztof G. Baranowski KGB@rubikon.net.pl
v1.1 12 Maja 1997

W dokumencie opisano jak skompilować, zainstalować i ustawić Kryptograficzny System Plików (zwany dalej CFS - przyp. tłumacza), który został napisany przez Matta Blaze z AT&T, pod Linuxa.

## 1. Wprowadzenie

Następujące oświadczenie skopiowane zostało bezpośrednio z CFS 1.12 i opisuje zastrzeżenia co do używania CFS.

- Autorem tego oprogramowania jest Matt Blaze.
- Copyright (c) 1992, 1993, 1994 by AT&T.
- Zezwala się używać, kopiować i modyfikować niniejsze oprogramowanie bez żadnych opłat, pod warunkiem, że zostanie dołączona do wszystkich kopii oprogramowania pełna dokumentacja, uwagi i ostrzeżenia autora.
- To oprogramowanie podlega kotroli eksportu ze Stanów Zjednoczonych.
- Nie wolno eksportować go, w części lub w całości, albo pomagać w eksporcie, bez zgody rządu USA i pisemnego zezwolenia od AT&T. W szczególności nie wolno udostępniać żadnej części tego oprogramowania i jego nieograniczonych dystrybucji innym osobom, niż obywatele USA i Kanady.
- To oprogramowanie jest dostarczane "Takie jakie jest", bez żadnej gwarancji i ani autorzy, ani AT&T nie udzielają żadnej gwarancji jakiegokolwiek rodzaju dotyczącej dopasowania oprogramowania do jakichkolwiek potrzeb.
- Pomimo, że informacje w tym dokumencie uważa się za poprawne, ani autor, ani Laboratoria CIS, ani Uniwersytet Temple nie udzielają żadnych gwarancji i nie są odpowiedzialni za to, co się stanie kiedy będziesz stosował się do niniejszego instruktażu. Informacja zawarta w tym dokumencie jest udostępniana, taka jaka jest.

## 2. O CFS

CFS umożliwia niezależne od aplikacji szyfrowanie/deszyfrowanie danych na powłoce struktury plików i nie wymaga modyfikacji kodu istniejącego już systemu plików, ani żadnych modyfikacji jądra systemu. Symetryczne szyfrowanie zawarte w głównym strumieniu CFS bazuje na zmodyfikowanym standardzie DES pracującym w trybie CBC, który czyni brutalny atak przeciwko 56-bitowemu kluczowi DES prawie niemożliwym. Struktura CFS zastępuje główny strumień DES, szyfrem Fast-DES albo jakimkolwiek innym szyfrem, w doskonały, bezpośredni sposób. Gdybyś był zainteresowany przeczytaj Białą stronę o CFS.

## 3. KOMPILACJA I INSTALACJA CFS.

CFS nie skompiluje się "samo" pod Linuxem. Podążaj za niniejszymi instrukcjami, jeśli chcesz uruchomić CFS na swoim Linuxie. Jest kilka metod osiągnięcia tego celu, ale najprostsza bazuje na modyfikacjach przeprowadzonych przez Olafa Kircha. Jego wersja CFS jest dostępna z: ftp.mathematic.th-darmstadt.de.

Olaf podpisał zmodyfikowane archiwum. Podpis PGP dla zmodyfikowanej wersji cfs-1.1.2 można otrzymać z: ftp.mathematic.th-darmstadt.de.

W trybie jednego użytkownika, skompiluj cfs za pomoca komendy "make". (przeczytaj najpierw odpowiednie pliki, tzn. README, Changes itp. - przyp. autora). Po kompilacji, zainstaluj: cfsd, cdetach, ccat, cmkdir, cname i cattach do katalogu `/usr/local/sbin` - właścicielem tych plikow niech będzie root, a grupa, do której muszą one należeć to wheel. Nadaj plikom atrybuty 551.

Dla bezpieczeństwa można wygenerować sumy kontrolne MD5, na czystych binariach. Następnie skopiuj te pliki razem z "md5sum", na media takie jak płyta CD, albo dyskietka i zabezpiecz ją przed zapisem.

Utwórz katalog /.cfsfs, który będzie używany przez serwer CFS. Niech właścicielem katalogu będzie root, grupa root, a jego atrybuty niech wynoszą: 000. Utwórz katalog /securefs, ktory stanie się korzeniem drzewa Kryptograficznego Systemu Plików.

Dodaj nastepującą linię do /etc/rc.d/rc.local:

    echo -n "Inicjacja Kryptograficznego Systemu Plików: "
    if [ -x /usr/local/sbin/cfsd ]; then
    /usr/local/sbin/cfsd > /dev/null
    echo -n "cfsd "
    /bin/mount -o
    port=3049,intr localhost:/.cfsfs /securefs
    echo -n "loopback"
    echo "done"
    else
    echo "Nie zainstalowano poprawnie Kryptograficznego System Plików"
    fi

Użytkownicy Red Hata powinni dodać plik "cfsfs", który znajduje się na końcu tego dokumentu do katalogu /etc/rc.d/init.d. Następnie utworzyć dołączenie symboliczne "S65cfsfs" i umieścić go w odpowiednim katalogu startowym, np. rc3.d używając komendy:

    ln -s /etc/rc.d/init.d/cfsfs S65cfsfs

we właściwym katalogu startowym. Następnie należy dodać linię:

    /.cfsfs localhost

w pliku /etc/exports. Na końcu dodaj linię:

    portmap: 127.0.0.1

do pliku /etc/hosts.allow.

Teraz powinieneś zrestartować komputer. Po jego uruchomieniu, użyj komendy mount żeby sprawdzić, czy CFS pracuje. Jeśli wszystko zadziałało, powinieneś zobaczyć nową następującą linię po wykonaniu komendy mount.

    localhost:/.cfsfs on /securefs type nfs(rw,port=3049,intr,addr=127.0.0.1)

## 4. TWORZENIE KATALOGU CFS

Żeby utworzyć szyfrowany katalog o nazwie "sekret" użyj komendy:

    cmkdir sekret

Zostaniesz poproszony o podanie i zweryfikowanie hasła. Jeżeli to sie uda, utworzony zostanie katalog "sekret", który pojawi sie w bieżącym katalogu. Katalog ten będzie zawierał zaszyfrowane dane, które będzie można normalnie przeglądać pod warunkiem, że dołączymy ten katalog do drzewa CFS.

Żeby można było swobodnie korzystać z informacji zawartych w katalogu, trzeba dołączyć go do drzewa katalogów zarządzanych przez CFS za pomoca komendy:

    cattach sekret Tajne

CFS poprosi Cię o podanie hasła dostępu. Jeżeli będzie się ono zgadzało z hasłem podanym przy tworzeniu katalogu "sekret", dane zawarte w tym katalogu będą dostępne w niezakodowanej formie w /securefs/Tajne, TYLKO dla użytkownika, który podał właściwe hasło dostępu. (nawet root nie może odczytać tych plików ;-) - przyp. tłumacza)

Zauważ, że dołączenie katalogu do drzewa CFS, może zająć nawet minutę. (u mnie na P133/16MB RAM zajmuje nie więcej niż 5 sekund). Od tej pory możemy korzystać z katalogu /securefs/Tajne jak z każdego innego katalogu.

Kiedy skończymy pracę powinniśmy użyć komendy:

    cdetach Tajne

żeby uniemożliwić dostęp do danych. Komenda ta usuwa katalog "sekret" z listy katalogów zarządzanych przez CFS, co uniemożliwia odczytanie informacji w tym katalogu, gdyż są one zakodowane. Aby znowu umożliwić sobie dostęp do danych należy użyć komendy "cattach".

## 5. OCHRONA CFS

Aby umożliwić użytkownikom dostęp do zaszyfrowanych danych, CFS wymaga od użytkownika hasła, które jest używane do wygenerowania zestawów kluczy.

Zdobycie hasła przez niepowołane osoby pozwala intruzom odczytać zaszyfrowane dane, dlatego jest niezwykle ważne, aby użytkownik we własnym interesie chronił hasło dostępu. Istnieją dwie możliwości zdobycia Twojego hasła przez intruzów:

1. Sniffing
2. Atak przeciwko protokołowi.

Informacje zawarte poniżej mogą zostać użyte, aby zmniejszyć prawdopodobieństwo skutecznego ataku przeciwko CFS.

1. Upewnij się, że binaria CFS są oryginalne:
   1. upewnij się, że: cattach, ccat, cmkdir, cname, cfsd i cdetach nie zostały zastąpione "koniami trojańskimi", które zapisują hasła dostępu,
   2. upewnij się, że CFS serwer (cfsd), nie został w jakiś sposób zmodyfikowany i że szyfruje dane poprawnie,
   3. atak przeciwko "cdetach" zazwyczaj wymaga małej modyfikacji kodu, która chroni klucze dostępu przed zniszczeniem i pozwala intruzowi uzyskać kontrolę nad zakodowanymi danymi. Najprostszym sposobem na upewnienie się, ze binaria nie zostały podmienione, jest zlinkowanie ich statycznie i umieszczenie na płycie CD. Inny sposób, to zlinkowanie statyczne, wygenerowanie sum kontrolnych za pomocą programu MD5 i umieszczenie ich na dyskietce zabezpieczonej przed zapisem. Przed użyciem CFS w systemie, zamountuj dyskietkę i sprawdź czy sumy kontrolne zgadzają się; w razie potrzeby zastępując podmienione programy ich oryginalnymi wersjami.
2. Uważaj na programy zapisujące do pliku dane wpisywane z klawiatury, tzw. keyboard grabbers i zawsze stosuj się do poniższych zasad:
   1. kiedy wpisujesz hasło w oknie xterm-a, upewnij się, że xterm jest oryginalny i używaj bezpiecznej klawiatury "Secure keyboard". To uniemożliwi przechwycenie hasła przez wyżej opisane programy,
   2. wpisuj hasła do terminali przyłączonych bezpośrednio do portów szeregowych systemu, gdy są one dostępne,
   3. upewnij się, że konsole (pty i tty) są ustawione tak, aby uniemożliwić innym odczytanie twojego hasła.
3. Nigdy nie wpisuj hasła poprzez sieć, nawet jeśli znajduje się ona za firewallem i wiesz, że nikt podłączony do sieci nie używa sniffera. Tyczy się to także sieci używających, tzw. scramble routers, ponieważ nie masz pewności, ze routery używają odpowiednio silnej enkrypcji, nie mają "tylnych drzwi" albo innych dziur, które pozwoliłyby intruzowi pokonać enkrypcję routera. Jeżeli jednak musisz podać hasło poprzez sieć, rób to tylko zaszyfrowanym kanałem pomiędzy hostami. (najbardziej znany i popularny jest (ssh) secure shell - przyp. autora)
4. Zawsze używaj komendy cdetach, kiedy nie pracujesz z danymi. Nawet kiedy przerywasz pracę na kilka minut.

## 5.1 ZNANE PROBLEMY Z CFS

W tym momencie jedyny znany problem, to komunikat "Permission denied", kiedy próbujesz dostać się do plików na płycie CD.

## 6. PODZIĘKOWANIA

Niżej wymienieni ludzie przyczynili się do powstania tego dokumentu: Topher Hughes z Dickinson College, Elie Rosenblum z Montgomery Blair High School, Mario D. Santana z Florida State University, Daniel P Zepeda i Olaf Kirch.

    ====================[początek pliku cfsfs]======================
    #!/bin/sh
    #
    # $Header: /Secure/secure-doc/linux/CFS/RCS/CFS-Doc,v 1.
    4 1996/03/15 04:49:37 alex Exp alex $
    #
    # cfsfs Kryptograficzny System Plików
    #
    # Autor: Alexander O. Yuriev <alex@bach.cis.temple.edu>
    #
    # Derived from cron
    # Source function library.

    . /etc/rc.d/init.d/functions

    # See how we were called.

    case "$1" in
     start)
            echo -n "Uruchamianie Kryptograficznego Systemu Plików: "
            if [ -x /usr/local/sbin/cfsd ]; then
                    /usr/local/sbin/cfsd > /dev/null
                    /bin/mount -o port=3049,intr localhost:/.cfsfs /securefs
                    echo "done"
            else
             echo -n "Nie zainstalowano poprawnie Kryptograficznego Systemu Plików"
            fi
            touch /var/lock/subsys/cfsfs
            ;;
     stop)
            echo -n "Zamykanie Kryptograficznego Systemu Plików: "
            umount /securefs
            killproc cfsd
            echo
            rm -f /var/lock/subsys/cfsfs
            ;;
     *)
            echo "Użycie: cfsfs {start|stop}"
            exit 1
    esac

    exit 0

    ====================[koniec pliku cfsfs]======================

## 7. DODATEK A

Jak najwygodniej posługiwać się CFS...

Copyright (C) 1997 by Krzysztof G. Baranowski (KGB@rubikon.net.pl)

Ponieważ ciągłe używanie komend "cattach","cdetach" i przechodzenie pomiędzy wieloma odległymi od siebie katalogami może być na dłuższą metę męczące i może zniechęcić użytkownika od używania CFS, postanowiłem napisać ten dodatek, w którym przedstawię naprawdę bardzo proste porady, dzięki którym będzie można zhumanizować pracę z CFS.

A zatem zacznijmy od początku. Najwygodniej jest utworzyć w domowym katalogu użytkownika ukryty katalog, w którym będziemy trzymać wszystkie zakodowane pliki. Wiąże się to jednak z ryzykiem. Bo jeżeli ktoś pozna nasze hasło dostępu to będzie mógł swobodnie manipulować naszymi plikami.

Z drugiej strony posiadanie wielu katalogów może przyprawić użytkownika o ból głowy, gdyż będzie on musiał zapamiętać ogromną ilość haseł. A minimalna długość hasła dostępu do każdego katalogu wynosi 16 (szesnaście) znaków. ;-)

Pozostańmy więc przy jednym katalogu. Zatem piszemy:

    /home/kris$ cmkdir .xfiles

Zakładam, że użytkownik ma login: kris, a jego katalog domowy to /home/kris i używa bash'a jako domyślnego shella. Następnie CFS poprosi nas o hasło, które musi składać się przynajmniej z 16 znaków. Po weryfikacji hasła nasz tajny katalog ".xfiles" zostanie utworzony:

Następnie dopiszmy dwa aliasy do pliku ".bashrc":

    alias dekoduj='cattach /home/kris/.xfiles tajne'
    alias koduj='cdetach tajne'

W tym przypadku katalog, w którym będziemy mogli przeglądać odkodowane pliki posiada nazwę "tajne", a jego scieżka dostępu to: `/securefs/tajne`.

Oczywiście nazwę możemy sobie wybrać dowolną. :-)

Następnie w naszym domowym katalogu utwórzmy dołączenie symboliczne do katalogu `/securefs/tajne` za pomocą komendy:

    /home/kris$ ln -s /securefs/tajne tajne

Wybór nazwy dołączenia także zależy od użytkownika. I to wszystko. Od tej pory używanie CFS staje się dziecinnie proste.

Jeśli chcemy dostać się do naszego zakodowanego katalogu wpisujemy:

    /home/kris$ dekoduj

i podajemy hasło. Komenda "cd tajne" od razu przenosi nas tam gdzie trzeba, gdzie możemy buszować sobie do woli :-), a "cd .." przenosi nas z powrotem do katalogu domowego. Proste i praktyczne. Po zakończeniu pracy wpisujemy:

    /home/kris$ koduj

I już nikt nie odczyta naszych danych, włącznie z nami, chyba że użyjemy jeszcze raz komendy "dekoduj".

Na koniec mała uwaga. Kopiowanie, przenoszenie plików, przechodzenie do katalogów będących pod kontrolą CFS może być trochę opóźnione. Związane jest to z enkrypcją/dekrypcją dokonywaną w czasie rzeczywistym. No to bawcie się dobrze.