Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[howto] Gentoo na pen-kluczyk
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: Wed Nov 29, 2006 7:01 pm    Post subject: [howto] Gentoo na pen-kluczyk Reply with quote

Howto na prośbę ludzi z forum.
Wersja 0.1.
Ostatni update: 29.11.2006
Jest to moje pierwsze howto, więc proszę nie oczekiwać zbyt wiele ;)


Gentoo na pen-kluczyk

Cel?
Chcemy, żeby nasze Gentoo było mocno przywiązane do jakiegoś pendrive'a [lub innego nośnika który można łatwo zabrać ze sobą, a przy okazji generuje zdarzenie udev'a (dyskietka z tego powodu odpada), w moim przypadku jest to karta microSD - dlatego będę pisał w odniesieniu do niej]. Przychodzimy do komputera, wkładamy kartę i nie potrzebne jest już wpisywanie większości haseł, ekran zostaje odblokowany, etc. Odchodzimy - zabieramy kluczyki logowania ze sobą, ekran zostaje zablokowany, ... lista możliwości jest bardzo duża.

Co potrzebujemy?
1. udev - obsługa akcji plug/unplug
2. xscreensaver - blokowanie ekranu
3. pam_usb - logowanie i su bez haseł
4. Xdialog - upiększacz

udev po raz pierwszy
Ogólnie o obsłudze można poczytać na stronie http://www.gentoo.org/doc/pl/udev-guide.xml i http://www.reactivated.net/writing_udev_rules.html . Ja skupię się tylko na niezbędnym minimum. Tworzymy swój plik, gdzie będą nowe regułki w katalogu /etc/udev/rules.d/, najlepiej z niskim numerem, wtedy będą one wywołane jako pierwsze.
Code:
$ cat /etc/udev/rules.d/00-manwe.rules
#ca, own
ACTION=="add", DRIVERS=="mmcblk", ATTRS{serial}=="0x00d80029", RUN+="/usr/bin/sudo -u manwe /bin/mount /mnt/ca"
ACTION=="add", DRIVERS=="mmcblk", ATTRS{serial}=="0x00625787", RUN+="/usr/bin/sudo -u manwe /bin/mount /mnt/ca"
ACTION=="mount", DRIVERS=="mmcblk", ATTRS{serial}=="0x00d80029", RUN+="/root/scripts/screen-locker-add"
ACTION=="mount", DRIVERS=="mmcblk", ATTRS{serial}=="0x00625787", RUN+="/root/scripts/screen-locker-add"

ACTION=="umount", KERNEL=="mmcblk0p1", RUN+="/root/scripts/screen-locker-remove"
ACTION=="remove", KERNEL=="mmcblk0", RUN+="/bin/umount -l /mnt/ca"

To w zasadzie wszystko ;) Co my tu mamy?
Code:
ACTION=="add", DRIVERS=="mmcblk", ATTRS{serial}=="0x00d80029", RUN+="/usr/bin/sudo -u manwe /bin/mount /mnt/ca"

Czytamy po kolei: jeżeli otrzymaliśmy akcję dodania urządzenia [ == to if ], użytym sterownikiem do obsługi urządzenia jest mmcblk [czytnik kart SD, w przypadku pendrive'a będzie to usb-storage], oraz numer seryjny karty to 0x00...., uruchom polecenie w RUN+="". Tutaj po prostu zrobiliśmy automount karty. Ktoś zapyta po co robię to przez sudo? Nie chciało mi się pisać całego mount z opcjami, a user manwe ma pozwolenie na montowanie do /mnt/ca. Poza tym przy zmianie wpisów w fstab, nie będę musiał modyfikować tej linijki.

Teraz jeszcze pobranie numeru seryjnego karty [akurat automount można zrobić dla każdej i pominąć ATTRS, ale ja tego nie chciałem]. Najpierw uruchamiamy
Code:
udevinfo -q path -n /dev/mmcblk0
Polecenie to odpytuje udev o ścieżkę [w /sys] dla urządzenia /dev/mmcblk0 [dla pendrive będzie to prawdopodobnie /dev/sda]. Otrzymujemy /block/mmcblk0 [dla pendrive coś koło /block/sda]. Teraz pytamy o właściwości urządzenia
Code:
udevinfo -a -p /block/mmcblk0
Spośród tego co dostaliśmy wygrzebujemy ATTRS{serial}=="0x....". Jak widać, właściwości jest sporo, pewnie można by warunkować regułki jeszcze na podstawie innych, ale serial jest dobry.

udev once again
No dobra, to mamy automount. Teraz kolejna akcja
Code:
ACTION=="mount", DRIVERS=="mmcblk", ATTRS{serial}=="0x00d80029", RUN+="/root/scripts/screen-locker-add"
Zmieniło się porównanie ACTION i wywołanie RUN. To zdarzenie wywołane zostanie zaraz po poprawnym zamontowaniu partycji urządzenia [zaskakujące, co nie? ;)]. Co robi skrypt?
Code:

#!/bin/bash

        killall -9 Xdialog &
        killall xscreensaver morph3d
        sleep 1
        killall -9 xscreensaver morph3d

Niewiele. Zabija wszystkie Xdialog'i [o tym później] oraz grzecznie prosi wygaszacz ekanu żeby sobie poszedł w cholerę. Po sleep 1 ubija go na dobre [gdyby nam się uchował]. Czyli tak. Wkładamy kartę, jest montowana, odpowiednie symlinki są już poprawne [o tym również później], a ekran odblokowany. Tutaj oczywiście możesz dopisać sobie jeszcze stos akcji, jak na przykład odegranie jakiegoś wave "whazzzup".

udev po raz ostatni
I na koniec, odejście od komputera
Code:
ACTION=="umount", KERNEL=="mmcblk0p1", RUN+="/root/scripts/screen-locker-remove"
ACTION=="remove", KERNEL=="mmcblk0", RUN+="/bin/umount -l /mnt/ca"
. Pierwsze co się rzuca w oczy to brak sprawdzania serial, niestety udev już nie serwuje nam informacji o urządzeniu kiedy zostanie wyjęte [a szkoda ;)]. Przy ACTION=="remove" robimy odmontowanie [o opcji -l więcej w man]. W tym miejscu dobrze mieć na uwadze, że akcja umount zostaje wywołana po wyjęciu karty, więc jeżeli coś na niej mieszaliśmy, warto wywołać wcześniej sync, żeby dane zostały zsynchronizowane.
I jeszcze skrypt, który zostaje uruchomiony po umount.
Code:
#!/bin/bash

        if [ `ps aux | grep xscreensaver | grep -v grep | wc -l` -gt 0 ]; then exit; fi
        if [ $# -eq 0 ]; then
                /root/scripts/screen-locker-remove x &
                disown %1
                exit
        fi

        for ((a=0;a<=100;a++)); do echo $a; sleep 0.049; done | DISPLAY=:0.0 Xdialog --title "Screen locker" --gauge "Close window to avoid locking screen" 6 40; if [ $? -eq 255 ]; then exit; fi
        sudo -u manwe /usr/bin/xscreensaver -display :0.0 -no-splash &
        sleep 1
        /usr/bin/xscreensaver-command -lock

Najpierw upewniamy się że screensaver nie działa, bo i po co wtedy uruchamiać. Potem fork w tło [udev wstrzymuje swoje działanie dopóki skrypt nie skończy, w tym przypadku to jest zbyt długo]. Dalej prosty Xdialog który wisi nam na ekranie z progressbar'em przez ~5 sekund. Jeżeli go zamkniemy [ zmienna $? dostanie wartość 255 ] skrypt wyjdzie i nie zablokuje ekranu, w przeciwnym wypadku uruchomi demona xscreensaver, a zaraz potem zablokuje ekran. Tutaj widać po co było zabijanie Xdialog przy ACTION=="mount" - dla wygody, kiedy szybko wyciągniemy i włożymy kartę, dialog zostanie ubity nie zablokuje ekranu.
I tyle. Gdyby skończyć howto w tym miejscu mamy (od)blokowanie ekranu komputera. Ale przecież chcemy więcej ;)

pam_usb
Nie będę tutaj się rozpisywał jak tworzyć klucze pam_usb i uzupełniać regułki pam, od tego są inne howto, jak na przykład http://www.pamusb.org/quickstart.html . Wszystko sprowadza się do katalogów ~/.auth i klucza publicznego w środku, dla użytkowników do których chcemy logować się bez hasła [nie dotyczy do oczywiście ssh] oraz .auth i kluczy prywatnych na karcie. Mała uwaga, klucze muszą mieć niskie prawa [0400, bo i po co nam więcej] oraz muszą należeć do użytkownika, którego obsługują. Czyli co? To znaczy, że każdy musi mieć swój, na dobrą sprawę może być i ten sam.
Na koniec małe modyfikacje w /etc/pam.d/login:
Code:

auth       required     pam_securetty.so
auth       sufficient   pam_usb.so fs=ext3 check_if_mounted !check_device force_device=/dev/mmcblk0p1 log_file=/var/log/pam_usb.log
auth       include      system-auth
....

oraz /etc/pam.d/su:
Code:

auth       required     pam_wheel.so use_uid
auth       sufficient   pam_usb.so fs=ext3 check_if_mounted !check_device force_device=/dev/mmcblk0p1 log_file=/var/log/pam_usb.log
auth       include              system-auth


Krótkie wytłumaczenie jak to działa [więcej w help dla usb_pam], spełnienie warunku pam_usb uznajemy za wystarczające do zalogowania/su [równie dobrze możemy dać required, wtedy do zalogowania się będzie potrzebne zarówno hasło jak i klucz - bardzo dobrze zabezpieczenie]. (Nie)stety pam_usb chce domyślnie montować urządzenie na chwilę sprawdzania kluczy, a nasze już jest zamontowane, stąd takie, a nie inne opcje.

I tyle, tak działa, a raczej powinno :)

kluczyk ssh
Ostatnia rzeczą jaką uznałem za niezbedną do zabezpieczenia jest mój klucz prywatny ssh. Pozwala on na zalogowanie się na około 20 innych komputerów, więc nie mogę pozwolić sobie na utratę. Tutaj sprawa jest banalna, przenosimy ~/.ssh/id_dsa na kartę, a na dysku tworzymy symlink. Openssh na szczęście nie krzyczy kiedy nie może odczytać pliku wskazywanego przez symlink, więc nawet bez karty, będziemy mogli spokojnie się wszędzie logować, ale z hasłem.

ctrl+shift+backspace || ctrl+c
Przy okazji całego tego zabezpieczania [nie używam xdm'a] wyszedł problem obejścia xscreensaver'a. Wystarczy przejść na konsolę gdzie jestem zalogowany [ctrl+alt+F1], nacisnąć ctrl+c, X'y zostają zamknięte i ktoś ma darmowy dostęp do mojego konta. Na szczęście rozwiązanie przyszło dość szybko, dodajemy do .bashrc:
Code:
alias x="/usr/bin/startx; exit"

Proste, łatwe i przyjemne. W momencie kiedy X'y skończą pracę [lub zostaną przerwane] następuje natychmiastowe wylogowanie, a przy okazji oszczędzamy pisania pięciu liter ;)

koniec?
W zasadzie to tyle. Tak jak pisałem u góry, to moje pierwsze howto, więc pewnie nie jest zbyt ładne i składne. Na pewno wszystko da się zrobić ładniej/lepiej/efektywniej, no ale były prośby o, to spisałem co zrobiłem w jeden nudny wieczór :)
Jeżeli będą chętni, to następne co mogę napisać, jak zrobić samorestartującą-samorekonfigurującą się alsę w momencie wpięcia/wypięcia głośników usb - czyli jak hotplug może być przydatny.
Back to top
View user's profile Send private message
Yatmai
Veteran
Veteran


Joined: 12 Nov 2005
Posts: 1501
Location: Kraków

PostPosted: Wed Nov 29, 2006 7:34 pm    Post subject: Reply with quote

Bardzo fajny art :) Kiedyś się bawiłem w coś takeigo, że vman automatycznie montuje pendrive'a, na którym są klucze pam, czyli w konsewkencji bez pen'a nie zalogujesz sie na kompa (nie testowałem na X'ach :D) ale z pewnością wzbogacę swoją metodę o tutejsze rozwiązania :)

A propos hotplug, to nie mam głośników na usb i nie planuje, ale chętnie poczytam o możliwościach tego hotplug'a w ujęciu praktycznym :)
_________________
Desktop: [Ath64 X2 2GB DDR2 GF76GT] [amd64] [2.6.29-gentoo] [nVidia] [KDE 3.5.10]
Lapek: [HP nc6000] [i686] [2.6.29-ARCH] [ati-open] [KDE 3.5.10]
Back to top
View user's profile Send private message
v7n
Guru
Guru


Joined: 24 Jan 2006
Posts: 352

PostPosted: Wed Nov 29, 2006 9:10 pm    Post subject: Reply with quote

gdyby ktoś jeszcze nie wiedział, ew. by mu nieodpowiadał tip podany w ostatnim akapicie, to powiem, że alt+ctrl+backspace i alt_ctrl+fx można zablokować w xorg.conf.
_________________
/~x86 /*-sources /oss /zsh /urxvt /vim /openbox /rox /xmms /Opera
Back to top
View user's profile Send private message
akroplas
Tux's lil' helper
Tux's lil' helper


Joined: 23 Nov 2005
Posts: 87
Location: J-L

PostPosted: Thu Nov 30, 2006 10:41 pm    Post subject: Reply with quote

!Bardzo! dobrze napisane, a może poprostu ja takie lubie ;)

Jedno pytanie:
Czy '/root/scripts/screen-locker-remove' jest wywoływane po odmountowaniu jakiejkolwiek karty? A jezeli nie, to gdzie jest sprawdzany ten warunek ?

Jeszcze raz dzięki za dobre howto
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: Fri Dec 01, 2006 1:12 pm    Post subject: Reply with quote

Jest uruchamiane dla każdej karty, nie wpadłem na szybkie rozwiązanie skoro urządzenia już nie ma w kompie. Trzeba by tworzyć jakiś plik w momencie wpakowania karty o odpowiednim ID, czy cuś. Ale akurat nie przeszkadza mi to, operuję na 3 kartach, przy czym w trakcie zmiany akcja włożenia którejś z głównych zabija ten opóźniający Xdialog, więc problemu prawie nie ma - ekran się nie blokuje.
Back to top
View user's profile Send private message
pancurski
Guru
Guru


Joined: 15 Sep 2005
Posts: 495
Location: Lublin, Poland / Slough, UK

PostPosted: Mon Feb 19, 2007 9:29 am    Post subject: Reply with quote

Mam takie pytanko, czy mozna jakoś połączyc pen-kluczyk z partycja hdd zaszyfrowana np. dm-cryptem?
Chodzi o to ze odczyt i zapis na taką partycje byłby możliwy tylko w przypadku podłączonego pen-kluczyka.
Back to top
View user's profile Send private message
Gabrys
Veteran
Veteran


Joined: 05 Dec 2005
Posts: 1096
Location: Toruń [PL]

PostPosted: Mon Feb 19, 2007 10:41 am    Post subject: Reply with quote

frondziak wrote:
Mam takie pytanko, czy mozna jakoś połączyc pen-kluczyk z partycja hdd zaszyfrowana np. dm-cryptem?
Chodzi o to ze odczyt i zapis na taką partycje byłby możliwy tylko w przypadku podłączonego pen-kluczyka.


Można można, tylko trzeba pamiętać, że jak na takie poważne rozwiązanie, to pen-drive jest zbyt zawodny. Po około 1M użyciu możemy liczyć się z utratą klucza :(.
_________________
Sabayon Professional 1.1 (czyli zdradziłem oryginalne Gentoo)
@ Dell Inspiron 8600 (nVidia, Realtek, Pentium M)
Back to top
View user's profile Send private message
pancurski
Guru
Guru


Joined: 15 Sep 2005
Posts: 495
Location: Lublin, Poland / Slough, UK

PostPosted: Mon Feb 19, 2007 11:02 am    Post subject: Reply with quote

a jest jakies alternatywne rozwiązanie? coś innego niż pen
Back to top
View user's profile Send private message
Gabrys
Veteran
Veteran


Joined: 05 Dec 2005
Posts: 1096
Location: Toruń [PL]

PostPosted: Mon Feb 19, 2007 11:09 am    Post subject: Reply with quote

Oczywiście, szyfrowanie partycji z kluczem "na hasło", to znaczy:

1. generowanie losowego klucza. Klucz => "xyz".
2. szyfrowanie za pomocą "xyz" partycji.
3. zaszyfrowanie za pomocą jakiegoś algorytmu klucza "xyz" z hasłem takie jak masz w systemie ("abc"). I takie zaszyfrowane hasło ląduje na dysk to pliku "abc.key".

I teraz jak się logujesz, to z pomocą pam_mount sprawa wygląda tak:

1. wpisujesz hasło "abc".
2. PAM cię autoryzuje i przekazuje hasło "abc" do programu "X".
3. program "X" bierze Twoje hasło "abc", odkodowuje nim hasło z pliku "abc.key". W ten sposób dostaje klucz "xyz".
4. z kluczem "xyz" montuje zaszyfrowaną partycję (np. /home/twój_user).

Wszystko dzieje się pod maską logowania, więc jest bardzo przyjemne. Link: https://forums.gentoo.org/viewtopic-t-274651.html Trochę stare i są już inne wersje, ale na nowych wszystko chodzi.
_________________
Sabayon Professional 1.1 (czyli zdradziłem oryginalne Gentoo)
@ Dell Inspiron 8600 (nVidia, Realtek, Pentium M)
Back to top
View user's profile Send private message
Mr Adam
Apprentice
Apprentice


Joined: 28 Jun 2006
Posts: 210
Location: Poland Tarnov

PostPosted: Mon Feb 19, 2007 5:00 pm    Post subject: Reply with quote

a nie lepiej wpakować kernela na pen'a? ;-)
_________________
Miły Chomiczek
Back to top
View user's profile Send private message
Gabrys
Veteran
Veteran


Joined: 05 Dec 2005
Posts: 1096
Location: Toruń [PL]

PostPosted: Mon Feb 19, 2007 5:07 pm    Post subject: Reply with quote

Zależy jaki poziom bezpieczeństwa chcemy osiągnąć. W konfiguracji dysk-na-hasło-loginowe (jak opisałem powyżej). Nawet mając fizyczny dostęp do komputera i będąc super mega wypaśnym informatykiem nic nie zrobisz z danymi, bo są zaszyfrowane ;).
_________________
Sabayon Professional 1.1 (czyli zdradziłem oryginalne Gentoo)
@ Dell Inspiron 8600 (nVidia, Realtek, Pentium M)
Back to top
View user's profile Send private message
Johnny_Bit
Apprentice
Apprentice


Joined: 30 Aug 2005
Posts: 246
Location: Poland

PostPosted: Mon Feb 19, 2007 6:29 pm    Post subject: Reply with quote

a jest może taki myk coby na serwer w lanie dało się zalogować tylko jak w serwer wpięty jest pen?
Back to top
View user's profile Send private message
quosek
Apprentice
Apprentice


Joined: 07 Mar 2006
Posts: 269

PostPosted: Mon Feb 19, 2007 7:35 pm    Post subject: Reply with quote

nie wystarczy, ze wlozenie pena = start sshd, wyjecie = wylaczenie sshd ? na podstawie tego howto szybko sie to zrobi
Back to top
View user's profile Send private message
Gabrys
Veteran
Veteran


Joined: 05 Dec 2005
Posts: 1096
Location: Toruń [PL]

PostPosted: Mon Feb 19, 2007 10:16 pm    Post subject: Reply with quote

Wszystko się da (a może nawet i więcej).

Pytanie tylko, czy to jest komuś naprawdę potrzebne, jak bardzo potrzebne i czy ma czas, by to napisać :P.
_________________
Sabayon Professional 1.1 (czyli zdradziłem oryginalne Gentoo)
@ Dell Inspiron 8600 (nVidia, Realtek, Pentium M)
Back to top
View user's profile Send private message
SlashBeast
Retired Dev
Retired Dev


Joined: 23 May 2006
Posts: 2922

PostPosted: Wed Oct 31, 2007 3:08 pm    Post subject: Reply with quote

Fajna sprawa, zaraz zrobie sobie po wsadzeniu pewna montowanie /home po truecrypcie i linkowanie shadow z pendrive, bez pena ani na roota nie wskocze, ani nic. Jakby ktoś ukradł komputer to ani do plików osobistych się nie dostanie, ani johnem nie wykrakuje hasła bo nie ma shadow. :)

PS. Przepraszam, za odkopanie tematu.
Back to top
View user's profile Send private message
BeteNoire
Veteran
Veteran


Joined: 25 Sep 2005
Posts: 1827

PostPosted: Thu Feb 07, 2008 3:24 pm    Post subject: Reply with quote

@manwe, chciałem zrobić sobie coś podobnego, ale utknąłem w czwartej linijce:
Code:
KERNEL=="sda", DRIVERS=="usb", ATTRS{serial}=="000010004666BA000087", NAME="sit"
KERNEL=="sda1", DRIVERS=="usb", ATTRS{serial}=="000010004666BA000087", NAME="sit1"
ACTION=="add", DRIVERS=="usb", ATTRS{serial}=="000010004666BA000087", RUN+="/usr/bin/sudo -u bete /bin/mount /mnt/sit"
ACTION=="mount", DRIVERS=="usb", ATTRS{serial}=="000010004666BA000087", RUN+="/bin/touch /tmp/test"

Czemu ona nie jest wykonywana?
_________________
powered by power plant
Back to top
View user's profile Send private message
matiit
Guru
Guru


Joined: 05 Aug 2007
Posts: 506

PostPosted: Sat Jun 14, 2008 8:16 pm    Post subject: Reply with quote

A czy da się zrobić żeby rozpoznawało mi jakoś bluetootha na usb?
Bo nie wiem co dać.
Code:
ACTION=="add", RUN+="/moj/skrypt"

Ale musi udev wiedzieć, że chodzi o tego dongla... jak się do tego odwołać?
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