Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[HOWTO] Szyfrowany system + TrueCrypt + własny initramfs
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Polskie forum (Polish)
View previous topic :: View next topic  
Author Message
manwe_
l33t
l33t


Joined: 01 Feb 2006
Posts: 632
Location: Kraków/Cracow, Poland

PostPosted: Mon Oct 29, 2007 3:39 am    Post subject: [HOWTO] Szyfrowany system + TrueCrypt + własny initramfs Reply with quote

1. Wstęp
Wersja: 0.0.1
Ostatni update: 29.10.2007 05:29


Trochę z nudów, trochę z chęci podzielenia się doświadczeniem [ale głównie z nudów], postanowiłem spłodzić swoje drugie howto. Tym razem o mojej, póki co, największej zabawie z przeróbkami systemu – szyfrowaniu całości. Na gentoo-wiki można znaleźć howto jak to zrobić za pomocą DM-Crypt'a, moje po części będzie podobne. Co do różnic - po pierwsze ja stwierdziłem, że skorzystam z TrueCrypt'a, do którego już przez dłuższy okres używania [odległe lata M$okien] nabrałem zaufania. Po drugie chciałem mieć podwójny system dostępu, za pomocą pendrive'a, który w całości tego howto pełni rolę punktu wyjścia – zawiera niezaszyfrowane dane, klucze, a jego strata kładzie wszystko, oraz za pomocą haseł. I po trzecie, powód już nie dla mnie - osoby, które mają M$Win na dysku, mogą zaszyfrować partycję fat|ntfs z jakimiś danymi, będą one dalej dostępne spod okien.

2. Wymagania

Potrzebne są:
- wiedza, nie będę tutaj opisywał wszystkiego od podstaw, pewna znajomość systemu, skryptów bash'owych, kompilacji, busybox'a, etc. jest wymagana,
- pendrive, karta pamięci, lub cokolwiek "zewnętrznego" co wędruje zawsze z nami i nigdy nie jest zostawione razem z komputerem [w moim przypadku notebookiem] bez naszej uwagi,
- czysta partycja [lub kilka], która zostanie zakodowana TrueCrypt'em i gdzie zostanie przeniesiony cały system
- niezaszyfrowany /boot, gdzie wyląduje jajko, grub i własny initramfs - niestety na to łatwego obejścia chyba nie ma, sam bootloader nie odszyfruje partycji, musi to zrobić jajko, które skądś trzeba odczytać, na dobrą sprawę można je trzymać również na pendrive, ale nie ma też co kombinować, tego nie ma chyba potrzeby ukrywania :)
- truecrypt [ # emerge truecrypt ],
- device mapper i niektóre algorytmy szyfrujące w jajku [ale o to powinien zakrzyczeć sam truecrypt przy emerge], dobrze jest to wszystko mieć wkompilowane statycznie, będzie mniej problemów przy tworzeniu initramfs.

3. Tworzenie partycji i kluczy
Obsługa truecrypt'a jest prosta jak konstrukcja cepa. Tworzenie zaszyfrowane partycji sprowadza się do odpalenia:
Code:
# truecrypt -c /dev/sda2

i odpowiedzenia na kilka pytań. Co do wyboru algorytmu, wszystko dobrze opisane jest na stronie TC, ja wybrałem Blowfish - ma mocny 448-bitowy klucz i jest cholernie szybki [chyba najszybszy z dostepnych]. Dla kompletnych maniaków bezpieczeństwa polecam kombinacje, np. Serpent-Twofish-AES ;) W tej konfiguracji szyfrujemy za pomocą mocnego hasła, na razie bez klucza. To hasło jest naszą ostatnią deską ratunku, kiedy np. pendrive wypierze się w pralce ze spodniami. Następnie tworzymy kluczyk:
Code:
# truecrypt --keyfile-create ~/true_key

Teraz trochę wytłumaczenia "o co biega". W pierwszym kilobajcie danego urządzenia TC za pomocą naszego hasła|klucza szyfruje klucz właściwy, którym kodowane są wszystkie dane na dysku. Taka kombinacja pozwala nam dowolnie modyfikować nasze hasła|klucze, wystarczy, że TC odkoduje klucz główny i zapisze go zakodowanego na nowo w początkowych obszarach.
A po co to wszystko? Musimy mieć dwa takie nagłówki - pierwszy, który będzie na dysku przez większość czasu, z kluczem zakodowanym za pomocą podanego wcześniej hasła, i drugi za pomocą true_key. Mam nadzieję, że nie namieszałem, jakby co to krzyczeć :)
Do rzeczy. Najpierw robimy zrzut do pliku pierwszego nagłówka, gdzie klucz główny jest zaszyfrowany za pomocą hasła:
Code:
# truecrypt --type normal --backup-headers ~/header_pass /dev/sda2

Teraz generujemy nowy nagłówek, gdzie klucz główny zaszyfrowany zostanie za pomocą true_key [w kolejnych pytaniach podajemy puste hasło i ścieżkę true_key]:
Code:
# truecrypt -C /dev/sda2

Backup nowego nagłówka:
Code:
# truecrypt --type normal --backup-headers ~/header_key /dev/sda2

I na koniec przywracamy stary:
Code:
# truecrypt --type normal --restore-header ~/header_pass /dev/sda2


W ten sposób mamy zaszyfrowaną partycję oraz 3 pliki: true_key, header_key i header_pass - wszystkie znajdą swoje miejsce @pendrive.

4. Przenoszenie danych
Ten akapit pominę, ta umiejętność jest wymagana, wraz ze zdrowym rozsądkiem, od użytkownika :) Montujemy partycję TC, tworzymy na niej system plików i przenosimy [póki co, kopiujemy] wszystkie dane. Jeżeli system podzielony jest na kilka patrycji, wszystkie kroki z tworzeniem kluczy, żonglowaniem nagłówkami, etc. z punktu 3. powtarzamy dla każdej z nich.

5. fstab
Niewielka zmiana tutaj, zamiast /dev/sdaX wpisujemy /dev/mapper/truecryptX [licząc od zera, w kolejności odkodowywania partycji, czyli root będzie to truecrypt0].

6. uvesafb + splash
Żeby całość wyglądała ładnie, używam uvesafb [x86_64, nie mogłem poprzednika - vesafb_tng] oraz fbcondecor, który pozwala już pod koniec ładowania jajka ustawić tło. Działający uvesafb, lub inny sterownik fb, oraz skompilowanie splashutils i znalezienie wymarzonego theme wyrzucam poza ramy tego tekstu.

7. initramfs
Najwięcej zabawy i przekleństw czeka w tym punkcie. Nie będę tłumaczył tutaj co to jest initramfs, praktyczną wiedzę o nim dorwałem na gentoo-wiki, więć tam również odsyłam. Chciałem osiągnąć pełne zintegrowanie szyfrowania z init'em. Opiszę od końca, jak całość wygląda: komputer się włącza, pokazuje grub, uruchamia jajko [tryb quiet, nic nie widać], które b. szybko [~2 sek.] zmienia rozdzielczość z użyciem uvesafb oraz ustawia tło [fbcondecor]. Po chwili pokazuje się zmodyfikowane przeze mnie przywitanie
Code:
   Gentoo/Linux; Preloader by manwe; http://www.gentoo.org/
   Copyright 1999-2007 Gentoo Foundation; Distributed under the GPLv2

Dalej skrypt czeka chwilę na pojawienie się pendrive'a, jeżeli go znajdzie - montuje, szuka na nim kluczy, odkodowuje partycję główną i dalej przekazuje działanie do oryginalnego init'a. Jeżeli pendrive się nie pojawi, prosi o hasło lub jego włożenie i klepnięcie enter'a - i tak do skutku, aż dostanie coś poprawnego. Całość jest ubrana jak skrypty Gentoo, krótkie komunikaty, z zieloną gwiazdką na początku, więc nie widać tak naprawdę gdzie kończy się initramfs, a gdzie zaczyna właściwy init :) Brzmi i wygląda ładnie, ale teraz trzeba do tego dojść. Pamiętam, że podczas pisania tego, w ciągu 2 dni [tyle łącznie zajęła mi cała zabawa z szyfrowaniem] restartowałem system chyba z 40 razy ;)

Do rzeczy. Co potrzebujemy w initramfs:
- busybox - na czymś to musi działać
- truecrypt - chodzi o binarkę
- dmsetup, losetup - wymagane przez truecrypt'a
- setfont - o tym później
- kilka urządzeń w /dev
- moduł truecrypt.ko i modules.dep
- v86d [jeżeli używasz uvesafb] i fbcondecor_helper [ze splashutils]
- splash theme
- czcionkę, która jest w systemie [u mnie: lat2-14.psfu.gz]

Wszystkie binarki muszą być statyczne [gdyby zacząć dodawać wszystkie lib'y - archiwum rozrosło by się za bardzo], niektóre jak busybox, czy fbcondecor_helper już powinny być, o resztę musisz zadbać sam(a). Pełna struktura folderów i plików wygląda tak:
Code:

./bin/
./bin/sh -> busybox - symlink
./bin/mount -> busybox - symlink
./bin/init-early.sh - skrypt, opisze później
./bin/dmsetup
./bin/setfont
./bin/losetup
./bin/truecrypt
./bin/pendrive - skrypt
./bin/busybox
./dev/
./dev/fb0 - to jak i pozostałe urządzenia blokowe, do zrobienia za pomocą mknod
./dev/mem
./dev/sr0
./dev/tty
./dev/null
./dev/ram0
./dev/tty1
./dev/zero
./dev/console
./dev/mapper/
./etc/
./etc/mtab
./etc/splash/
./etc/splash/default -> gentoo - symlink
./etc/splash/gentoo/
./etc/splash/gentoo/Vera.ttf
./etc/splash/gentoo/images/
./etc/splash/gentoo/images/verbose-1024x768.png
./etc/splash/gentoo/1024x768.cfg
./lib/
./lib/rcscripts/
./lib/rcscripts/console/
./lib/rcscripts/console/font
./lib/rcscripts/console/lat2-14.psfu.gz
./lib/modules/
./lib/modules/name/
./lib/modules/name/block/
./lib/modules/name/block/truecrypt.ko
./lib/modules/name/modules.dep
./lib/splash/
./lib/splash/sys/
./lib/splash/proc/
./proc/
./proc/self/
./proc/self/exe -> ../../bin/busybox - symlink
./sbin/
./sbin/v86d
./sbin/fbcondecor_helper
./init - skrypt


Sporo :) Tak jak napisałem, wszystko co w /bin i /sbin, a nie jest skryptem, trzeba uprzednio skopiować|skompilować, a urządzenia w /dev/ zrobić. Teraz poszczególne pliki:
/etc/mtab:
Code:
proc /proc proc  0 0


/lib/rcscripts/console/font:
Code:
lat2-14.psfu.gz


W zasadzie poza skryptami jest to już wszystko. Niektóre foldery w powyższym spisie są puste. Dla przykładu bez /lib/splash/sys/ i /lib/splash/proc/ nie działa ustawianie tła, a bez /proc/mapper/ truecrypt nie był w stanie stworzyć urządzeń odkodowanych partycji. Skrypt, po kolei od najmniejszego.

/bin/init-early.sh - jest to kopia z init'a serwowanego przez Gentoo, ustawia czcionkę konsoli. Odpalamy go zanim cokolwiek się pojawi na ekranie, dzięki temu unikniemy brzydkiego wyczyszczenia konsoli w trakcie ładowania stage boot:
Code:
#!/bin/sh

# Try and set a font and as early as we can
termencoding="(K"
[ -e "${RC_LIBDIR}"/console/unicode ] && termencoding="%G"
printf "\033%s" "${termencoding}"
if [ -r "${RC_LIBDIR}"/console/font -a -x /bin/setfont ] ; then
        font="$(cat "${RC_LIBDIR}"/console/font)"
        CONSOLE="${CONSOLE:-/dev/console}"
        [ -c "${CONSOLE}" ] && cons="-C ${CONSOLE}"
        setfont ${cons} "${RC_LIBDIR}"/console/"${font}"
fi

Nic wymyślnego :) Dalej zaczyna się pod górkę, skrypt /bin/pendrive szuka urządzenia, stara się je zamontować i odkodować partycję /. Od razu powstał problem. W tak okrojonej wersji systemu jaką funduje nam jajko + busybox nie ma udev, czy innych wspomagaczy, które pozwoliły by wykryć obecność urządzenia i literę sdX, którą otrzymał - o bloki dla /dev/ tutaj trzeba zadbać samemu. Jedyny sposób jaki znalazłem, jak wydłubać informacje o tym czym pendrive faktycznie jest na miejscu i gdzie, to podanie w parametrach startowych jego nazwy i numeru partycji, za którą przegrzebywany jest dmesg. U mnie jest to: "pen_name=IntelligentStick pen_part=3". Aha, moje skrypty mogą być trochę nieudane, po pierwsze nie znam za dobrze awk|sed, po drugie nie starałem się ich pisać jakoś super ładnie.

/bin/pendrive:
Code:

#!/bin/sh

X=`dmesg | grep -C 1 $1 | tail -n 1 | awk -F\[ '{ print $2 }' | awk -F\] '{ print $1 }'`
[ -z "$X" ] && exit 1
mount /dev/${X}${2} /pen 2> /dev/null
[ $? -ne 0 ] && exit 1

for A in /pen /pen/.keys /pen/.keys/true_key /pen/.keys/h_key /pen/.keys/h_pass; do
        if [ ! -f $A -a ! -d $A  ]; then
                echo '^[[01;31m * ^[[0m'"Pen found, but missing ${A}!"
                umount /pen
                exit 1
        fi
done

echo -n '^[[01;32m * ^[[0mPen found. Loading key header. '
X=`truecrypt --type normal --restore-header /pen/.keys/h_key /dev/sda2 2>&1`
[ $? -ne 0 ] && exit 1
echo "$X"

echo -n '^[[01;32m * ^[[0mMounting partition using key. '
X=`truecrypt -p '' -k /pen/.keys/true_key $3 2>&1`
[ $? -ne 0 ] && exit 1
echo "$X"


echo -n '^[[01;32m * ^[[0mRestoring password header. '
X=`truecrypt --type normal --restore-header /pen/.keys/h_pass /dev/sda2 2>&1`
[ $? -ne 0 ] && exit 1
echo "$X"

umount /pen
exit 0


Skrypt jest wywoływany z parametrami "IntelligentStick 3 /dev/sda2", czyli $1=IntelligentStick, $2=3, $3=/dev/sda2. Najpierw w dmesg'u wyszukiwana jest informacja o $1 i jakie sdX dostał [linijka poniżej nazwy], w nawiasach kwadratowych. Potem mount do /pen, dalej sprawdzenie czy pliki z kluczami i nagłówkami są na miejscu [moje nazwy plików są trochę inne, niż opisywałem na początku przy rozdziale o TC, ale chyba widać wyraźnie o co biega], przywrócenie nagłówka z kluczem głównym zakodowanym kluczem @pendrive, odszyfrowanie partycji, przywrócenie pierwotne nagłówka [hasłowego] i odmontowanie /pen - tutaj chwilowo jego rola się kończy. Mała uwaga od razu, ^[ to escape char, a nie ^ i [ :)

No i ostatni, najdłuższy skrypt /init. On robi prawie wszystko, jest wywoływany przez jajko, musi pociągnąć całe przygotowanie i na koniec przekazać robotę do właściwego /sbin/init z Gentoo:
Code:
#!/bin/sh

#basic
/bin/busybox mount -t proc proc /proc 2> /dev/null
mkdir /new
mkdir /pen
mkdir /root

#get params
CMD=`cat /proc/cmdline | sed 's/silent/verbose/g'`
ROOT=`cat /proc/cmdline | tr ' ' '\n' | grep -E '^root=' | awk -F= '{ print $2 }'`
PEN=`cat /proc/cmdline | tr ' ' '\n' | grep -E '^pen_name=' | awk -F= '{ print $2 }'`
PART=`cat /proc/cmdline | tr ' ' '\n' | grep -E '^pen_part=' | awk -F= '{ print $2 }'`
[ -z "$ROOT" ] && echo '^[[01;31m ROOT is empty. I have to commit suicide.' && exit

#mknod
cd /dev
for N in 0 16 32 48; do
        case $N in
                0)  X='a' ;;
                16) X='b' ;;
                32) X='c' ;;
                48) X='d' ;;
        esac
        mknod sd${X} b 8 ${N} &> /dev/null
        for M in 1 2 3 4 5 6 7 8 ; do
                let Y=${N}+${M}
                mknod sd${X}${M} b 8 ${Y} &> /dev/null
        done
done
cd /

#modules
cd /lib/modules
mv name `uname -r`
cd /
modprobe truecrypt

#setfont
export RC_LIBDIR="/lib/rcscripts/"
/bin/init-early.sh

#shell hack
if [ "$ROOT" = "shell" ]; then
        exec /bin/sh
fi

#banner
clear
echo; echo '^[[01;32m   Gentoo/Linux; ^[[01;33mPreloader by manwe; ^[[01;34mhttp://www.gentoo.org/';
echo '^[[0m   Copyright 1999-2007 Gentoo Foundation; Distributed under the GPLv2'; echo;

#try mount
mount $ROOT /new 2> /dev/null

#wait for usb
if [ ! -f /new/sbin/init ]; then
        echo -n '^[[01;32m * ^[[0mWaiting for usb devices'
        for X in 1 2 3 4 5 6; do
                echo -n '.'
                sleep 1
        done
        echo

#main loop
        /bin/pendrive $PEN $PART $ROOT
        if [ $? -ne 0 ]; then
                while [ -z "$END" ]; do

                        echo '^[[01;32m * ^[[0mInsert pendrive or enter the password...'
                        S=`stty -g`; stty -echo
                        read P
                        stty $S

                        if [ "${P}" ]; then
                                echo -n '^[[01;32m * ^[[0mMounting partition using given password. '
                                T=`truecrypt -p "$P" -k '' $ROOT 2>&1`
                                [ $? -eq 0 ] && END="end"
                                echo "$T"
                        else
                                /bin/pendrive $PEN $PART $ROOT
                                [ $? -eq 0 ] && END="end"
                        fi
                done
        fi
fi

#end
#umount /proc 2> /dev/null
if [ -b /dev/mapper/truecrypt0 ]; then
        mount /dev/mapper/truecrypt0 /new
        exec /bin/busybox switch_root /new /sbin/init $CMD
else
        if [ -f /new/sbin/init ]; then
                exec /bin/busybox switch_root /new /sbin/init $CMD
        else
                echo '^[[01;31m * ^[[0m'"No /dev/mapper/truecrypt0 or /sbin/init! What the fuck? Well... I'll die now ;-)"
        fi
fi


Ponieważ całość jest podzielona komentarzami na działy, tak to też opiszę.
#basic - brak komentarza ;)
#ger params - tutaj zbierane są informacje przekazane jako parametry dla jajka, jak root=, pen_name=, czy pen_part
#mknod - tworzenie nodów które pokrywają większość zapotrzebowania na /dev/sdX [nie umieszczałem ich statycznie w /dev initramfs, zaśmiecały czytelność]
#modules - zmiana nazwy folder /lib/modules/name na nazwę jaką ma jajko, to również jak poprzedni punkt powstało z wygodny tworzenia initramfs, nie muszę zmieniać z nowym jajkiem nazwy folderu
#setfont - zmiana czcionki zanim cokolwiek wypiszemy na ekran [tak, jeszcze nic się nie pojawiło!]
#shell hack - taki mały myk który sobie zostawiłem, jeżeli w parametrach gruba jako root= zostanie wpisane shell, skrypt poprzestanie w tym miejscu i uruchomi sh, świetne miejsce na np. naprawę uszkodzonego systemu plików, żadna partycja dyskowa nie jest w tym momencie używana
#banner - wypisujemy zmodyfikowany banner
#try mount - całość starałem się napisać uniwersalnie, jeżeli jako root zostanie podana "zwykła" niezaszyfrowana partycja, mount tutaj się uda, warunek [ ! -f /new/sbin/init ] nawali i cała zabawa z TC zostanie pominięta
#wait for usb - skrypt czeka 6 sekund na pojawienie się pendrive [tyle zajmuje w moim jajku wykrycie] i jeżeli go znajdzie od razu przejdzie do /bin/pendrive, dzięki czemu jeżeli pen został wpakowany w port już wcześniej całość zotanie załatwiona bez interakcji z użyszkodnikiem, system wstanie zwyczajnie jak każdy inny [tylko kilka sekund dłużej mu to zajmie]
#main loop - nie wykryto pendrive, odczytanie hasła od użytkownika i próba odkodowania z jego użyciem [truecrypt -p "$P"] lub, przy klepnięciu enter, ponowne sprawdzenie /bin/pendrive - i tak w kółko, aż się uda
#end - jeżeli jest urządzenie /dev/mapper/truecrypt0 [odszyfrowane /dev/sda2], mount - switch_root, czyli przekazanie pałeczki do /sbin/init z Gentoo, w przeciwnym wypadku sprawdzenie czy jest już może /new/sbin/init [sytuacja montowania partycji bez TC] i znów switch_root, albo ... die - skrypt nie może znaleźć init'a

No to ufff :) To wszystko razem zebrane tworzy cały initramfs. Na koniec z tych wszystkich folderów trzeba stworzyć jeden plik:
Code:
cd ~/initramfs/ [czy tam inny folder gdzie pracowałeś]
find . -print | cpio -o -H newc | gzip -9 > ../initramfs
cp ../initramfs /boot/



8. Grub
Po ciężkim pkt. 7, chwila odpoczynku - niewielkie zmiany w grub.conf. Trzeba dodać parametry identyfikujące pendrive: pen_name=IntelligentStick pen_part=3 oraz polecenie initrd.
Code:
title  Gentoo Linux kernel-2.6.23-kamikaze4-ev18
kernel (hd0,0)/kernel-2.6.23-kamikaze4-ev18 splash=verbose,theme:gentoo quiet video=uvesafb:1024x768-24,mtrr:3,ypan pen_name=IntelligentStick pen_part=3 root=/dev/sda2
initrd (hd0,0)/initramfs-2.6.23-kamikaze4-ev18

Tak to wygląda u mnie.

9. Dopieszczanie
To by było w zasadzie wszystko. Partycje zaszyfrowane, initramfs działa, system wstaje, jest jeszcze tylko kilka drobnych poprawek:

1. Ponieważ initramfs+pendrive zaopiekowały się tylko /, trzeba podmontować pozostałe partycje [o ile są]. U mnie odstawiają to dwa takie bloki kodu [w /etc/conf.d/local.start]:
Code:
if [ -f /mnt/flash/pqi3/.keys/h_key_home -a -f /mnt/flash/pqi3/.keys/true_key_home -a -f /mnt/flash/pqi3/.keys/h_pass_home ]; then
        truecrypt --type normal --restore-header /mnt/flash/pqi3/.keys/h_key_home /dev/sda3 &> /dev/null
        truecrypt -p '' -k /mnt/flash/pqi3/.keys/true_key_home /dev/sda3 /home
        truecrypt --type normal --restore-header /mnt/flash/pqi3/.keys/h_pass_home /dev/sda3 &> /dev/null
fi

Robi to prawie to samo co /bin/pendrive powyżej, ale już w prostszej formie, pendrive został wykryty w trakcie startu systemu i podmontowany do /mnt/flash/pqi3 - nie musimy się martwić o jego obsługę.

2. Jajko nie słucha parametru quiet. A dokładniej obsługa scsi. Pomimo próby wyciszenia go tak, aby pierwszą linijką, która pokazuje się już na kolorowym tle, był baner Gentoo - dostawałem 3 linijki informacji "Assuming drive cache: write through". Jedyny sposób to po prosty je wykomentować w drivers/scsi/sd.c i przekompilować jajco.

3. Banner gentoo i "INIT 2.xx" - oryginalny banner Gentoo i informacja o wersji init'a pojawią się w momencie przekazania sterownia do /sbin/init przez initramfs. Tutaj również trzeba komentować, ja robię to patch'ami dodawanymi do ebuild'ów:
Code:

$ cat init_silent.patch
--- src/init.old.c      2004-07-30 14:16:20.000000000 +0200
+++ src/init.c          2007-08-11 16:21:10.000000000 +0200
@@ -762,12 +762,12 @@

        /*
         *      And log to the console.
-        */
+
        if (loglevel & L_CO) {
                print("\rINIT: ");
                print(buf);
                print("\r\n");
-       }
+       }*/
 }

$ cat baselayout_silent.patch
--- src/rc.old.c        2007-10-12 16:59:31.693372287 +0200
+++ src/rc.c    2007-10-12 16:59:55.698710122 +0200
@@ -932,12 +932,12 @@

                        uname (&uts);

-                       printf ("\n");
+                       /*printf ("\n");
                        printf ("   %sGentoo/%s; %shttp://www.gentoo.org/%s"
                                        "\n   Copyright 1999-2007 Gentoo Foundation; "
                                        "Distributed under the GPLv2\n\n",
                                        ecolor (ECOLOR_GOOD), uts.sysname, ecolor (ECOLOR_BRACKET),
-                                       ecolor (ECOLOR_NORMAL));
+                                       ecolor (ECOLOR_NORMAL));*/

                        if (rc_env_bool ("RC_INTERACTIVE"))
                                printf ("Press %sI%s to enter interactive boot mode\n\n",


10. Podsumowanie
To w zasadzie wszystko. W ten sposób otrzymujemy ładny system, ze zintegrowaną procedurą ładowania, obsługą zarówno kluczy @pendrive, jak i haseł. TC + Blowfish zapewniają szybkie działanie [pojedyńcze % zużycia CPU u mnie, nie wpłynęły w żaden sposób na wygodę pracy], a w razie skradzenia laptopa, lub zwinięcia go przez CBA, możemy spać spokojnie :) Dla dopełnienia ważności tego pendrive'a i przyjemności pracy z systemem, można tam wrzucić klucze pam_usb, ssh i inne wspomagacze [część z tego opisałem w swoim pierwszym HOWTO]. Sam trzymam na nim jeszcze backup najważniejszych danych, takich jak mail'e czy kody źródłowe - codziennie o 04:00 rsync robi swoje.

Pewnie nikt nie porwie się na odstawianie całości, którą ja z ciekawości popełniłem, ale może nauczy się czegoś nowego, jak np. obsługa initramfs i co można zrobić z systemem, jeszcze zanim ten rozpocznie procedurę ładowania. Podziękowania składam wolnemu czasowi, dzięki któremu miałem okazję to wszystko zrobić ;)
Back to top
View user's profile Send private message
Poe
Bodhisattva
Bodhisattva


Joined: 03 Apr 2004
Posts: 2155
Location: Mysłowice/Lublin, Poland

PostPosted: Mon Oct 29, 2007 2:57 pm    Post subject: Reply with quote

dla mnie genialne :) moze kiedys bede mial wiecej czasu i drugi dysk, albo cos, bo narazie mam w lapku dysk 80 i nie mam jak i gdzie utworzyc partycji TC jednoczesnie majac normalne partycje, chyba ze jakies inne rozwiązanie?

btw, dodaje do PolishFAQ.
_________________
Hardware:HP Pavilion DV6875SE[C2DT5550@1.83GHz_3GB-DDR2_320GB-SATA_GF8400GS]
http://popularcoffee.blogspot.com - Popkulturowa Kawa
RLU#342333
Back to top
View user's profile Send private message
SlashBeast
Retired Dev
Retired Dev


Joined: 23 May 2006
Posts: 2922

PostPosted: Mon Oct 29, 2007 4:08 pm    Post subject: Reply with quote

fajna sprawa, narazie mam szyfrowane tylko home i montuje z poziomu local.start ale moze i cały rootfs zaszyfruje.
Back to top
View user's profile Send private message
13Homer
Guru
Guru


Joined: 12 Jul 2005
Posts: 461

PostPosted: Mon Oct 29, 2007 5:30 pm    Post subject: Reply with quote

Fajne HOWTO, ale trochę późno :) Jakieś dwa tygodnie temu siedziałem kilka dni, żeby testowo zaszyfrować z hasłem działający system. Udało się, na szczęście. Ale nie korzystałem z TrueCrypta, tylko Luksa.
Poza "zgodnością" z Windowsami ma TrueCrypt jakieś zalety w porównaniu z Luksem?
_________________
Lenovo ThinkPad R61 / C2D@2.6.24 / nVidia Quatro NVS 140M / 2 GB RAM
Back to top
View user's profile Send private message
-BekaS-
n00b
n00b


Joined: 21 Nov 2007
Posts: 3

PostPosted: Wed Nov 21, 2007 10:30 pm    Post subject: Reply with quote

Witam,
Bawię się z tym od jakiegoś czasu małymi krokami. Będzie w sumie już chyba drugi dzień, ale teraz stanąłem w miejscu. W jaki sposób mogę zbudować statyczną binarkę truecrypt ?? Niestety kompilowanie kodu ściągniętego ze strony projektu nic nie dało ( wykonałem polecenie ./build.sh). Takie samo pytanie dotyczy setfont. Jak to zrobić. Google jakoś średnio mi pomogło, a szukałem sporo.

pozdrawiam
Back to top
View user's profile Send private message
13Homer
Guru
Guru


Joined: 12 Jul 2005
Posts: 461

PostPosted: Thu Nov 22, 2007 7:16 am    Post subject: Reply with quote

To może zbuduj dynamicznie wiązaną i dodatkowo skopiuj biblioteki? Nie ma obowiązku korzystania wyłącznie ze statycznych wersji.
_________________
Lenovo ThinkPad R61 / C2D@2.6.24 / nVidia Quatro NVS 140M / 2 GB RAM
Back to top
View user's profile Send private message
SlashBeast
Retired Dev
Retired Dev


Joined: 23 May 2006
Posts: 2922

PostPosted: Thu Nov 22, 2007 7:22 am    Post subject: Reply with quote

przełącznik -static do gcc.
Back to top
View user's profile Send private message
-BekaS-
n00b
n00b


Joined: 21 Nov 2007
Posts: 3

PostPosted: Thu Nov 22, 2007 6:01 pm    Post subject: Reply with quote

13Homer wrote:
To może zbuduj dynamicznie wiązaną i dodatkowo skopiuj biblioteki? Nie ma obowiązku korzystania wyłącznie ze statycznych wersji.


Przyznam szczerze, że akurat w tej kwestii jestem trochę zielony. Cały problem polega na tym, że w tym całym kodzie źródłowym jest pliczek ./build.sh nie ma żadnego configure ani nic w ten deseń. A ja nie za bardzo wiem jak się za to zabrać. Może jakiś bardziej łopatologiczny pomysł. Próbowałem sprawdzić zależności wykorzystując:
Code:
qdepends -a truecrypt
 * DEPEND
app-crypt/truecrypt-4.3a: virtual/linux-sources sys-fs/device-mapper virtual/linux-sources virtual/modutils sys-apps/sed
 * RDEPEND
app-crypt/truecrypt-4.3a: sys-fs/device-mapper virtual/modutils
 * PDEPEND

Odtworzyłem w initramfs strukturę katalogów taką, że pliki dmsetup i insmod (oczywiście wersje statyczne) są tam gdzie trzeba. Porobiłem symlinki do bin, już na wszelki wypadek, jednak dalej nic to nie pomogło. Przepisałem ten cały skrypt od nowa bo u mnie nie chciał zadziałać. Zbudowałem initramfs, a teraz stoję w tym jednym miejscu i kaplica. Po proszę o jakieś mini HOW-TO jak rozwalić ten problem. Myślę, że nie tylko mi się przyda :) Może jakaś wcześniejsza wersja truecrypt pozwala na skompilowanie paczki statycznie ??

================================================

SlashBeast wrote:
przełącznik -static do gcc.


Niestety nie jestem biegły w temacie obsługi gcc. Co konkretnie skompilować, z jakimi parametrami ??

pozdrawiam

Arfrever: Połączono posty.
Back to top
View user's profile Send private message
manwe_
l33t
l33t


Joined: 01 Feb 2006
Posts: 632
Location: Kraków/Cracow, Poland

PostPosted: Thu Nov 22, 2007 7:10 pm    Post subject: Reply with quote

Nie pamiętam dokładnie, ale truecrypt w swojej paczce miał chyba folder gdzie robi się binarkę ["cli" czy jakoś tak], jest tam standardowy Makefile, odpalasz
Code:
make EXTRA_LFLAGS=-static

i powinno być.
Back to top
View user's profile Send private message
13Homer
Guru
Guru


Joined: 12 Jul 2005
Posts: 461

PostPosted: Thu Nov 22, 2007 9:59 pm    Post subject: Reply with quote

-BekaS- wrote:
Przyznam szczerze, że akurat w tej kwestii jestem trochę zielony. Cały problem polega na tym, że w tym całym kodzie źródłowym jest pliczek ./build.sh nie ma żadnego configure ani nic w ten deseń. A ja nie za bardzo wiem jak się za to zabrać. Może jakiś bardziej łopatologiczny pomysł.

Nie wiesz jak sprawdzić zależności od dynamicznych bibliotek? Budujesz aplikację i na jej binarce wykonujesz ldd, np. tak:
Code:
ldd /bin/true

co daje:
Code:
~# ldd /bin/true
        linux-gate.so.1 =>  (0xffffe000)
        libc.so.6 => /lib/libc.so.6 (0xb7e4e000)
        /lib/ld-linux.so.2 (0xb7f91000)

Oznacza to, że w celu skorzystania z programu "true" musisz mieć także następujące biblioteki:
- ld-linux.so.2 w katalogu /lib
- libc.so.6 w katalogu /lib
i tyle. Kopiujesz program gdzie uważasz (najlepiej do bin oczywiście), do katalogu lib wrzucasz wymagane biblioteki i jedziesz.
_________________
Lenovo ThinkPad R61 / C2D@2.6.24 / nVidia Quatro NVS 140M / 2 GB RAM
Back to top
View user's profile Send private message
-BekaS-
n00b
n00b


Joined: 21 Nov 2007
Posts: 3

PostPosted: Thu Nov 22, 2007 10:05 pm    Post subject: Reply with quote

manwe_ wrote:
Nie pamiętam dokładnie, ale truecrypt w swojej paczce miał chyba folder gdzie robi się binarkę ["cli" czy jakoś tak], jest tam standardowy Makefile, odpalasz
Code:
make EXTRA_LFLAGS=-static

i powinno być.


I to był tip którego potrzebowałem. Z tą informacją wszystko poszło do przodu i już działa. Co prawda na swoje potrzeby zrobiłem to zupełnie inaczej ale bez tego HOW-TO nie dałbym rady. Wielkie dzięki.

pozdrawiam

================================================

13Homer wrote:
Nie wiesz jak sprawdzić zależności od dynamicznych bibliotek? Budujesz aplikację i na jej binarce wykonujesz ldd, np. tak:
Code:
ldd /bin/true

co daje:
Code:
~# ldd /bin/true
        linux-gate.so.1 =>  (0xffffe000)
        libc.so.6 => /lib/libc.so.6 (0xb7e4e000)
        /lib/ld-linux.so.2 (0xb7f91000)



Właśnie tego mi brakowało. Próbowałem to zrobić za pomocą:

Code:

qdepends -a truecrypt


Jednakże nie zdało się to na zbyt wiele. Teraz już będę wiedział na przyszłość. Dziękuję za porady i pozdrawiam.

-BekaS-

Arfrever: Połączono posty.
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Polskie forum (Polish) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum