valószínűleg marginális érdeklõdésre tart számot a smart
kártya (chipkártya) - fetisizmusom. már nagyon-nagyon régen szerettem
volna rendes bejelentkezést, telepítettem win 2003-ra ad-t meg ca-t meg
keresztbe-kasul mindenfélét. aztán feladtam egy jó ideig. egészen
addig, amíg fel nem fedeztem magamnak a linuxot, és amíg meg nem jelent
egy kulcs
howto (majdnem) az összes szükséges részlettel. lelkes amatõrként még
izzadtam kis vért, de végül csak sikerült. mivel az eredménnyel nagyon
elégedett vagyok, úgy gondoltam megosztom a megoldást.
a dolog ott kezdõdik, hogy ubuntu 10.04. ez lehet, hogy elavult, meg
régi meg ilyesmi, de a 2.6.32 phc kernel fél wattal kevesebbet fogyaszt
a 3.x-nél, ami nálam a minimálszerveren csaknem 6-8% különbség.
elegendõ tapasztalat van hozzá, ismert és kiismert rendszer, amin az
általam használt dolgok hibamentesen futnak. ahogy a 2003-at azóta is a
legjobb / leghatékonyabb / legtökéletesebb windowsnak tartom, úgy nem
váltanék soha vissza rá, mert a 10.04-en (persze sok tanulás és
küzdelem árán) mindent magasabb színvonalon tudtam megvalósítani. de
inkább elkezdem.
hardver
mégpedig azzal, hogy a kártyázáshoz kell egy kártya. mégpedig nem
mindegy milyen chippel. miután az összes általam fellelhetõ kártyáról
kiderült, hogy nem alkalmasak, végül beadtam a derekam. itt lehet kapni kártyát és olvasót is. itt
már fel lehet szisszenni, hogy ezeket nem adják olcsón. szerencsés
esetben a banktól kapott az ember valamilyen olvasót, nekem a notikba
praktikusan expresscard került. hozzáteszem ezek a használt gemplushoz
képest olcsó eszközök, és sokkal kényelmesebbek is. kevésbé kell
bedugni a(z esetleg csonkított) kártyát, és a fogadó nyílás sem olyan
idétlen, hogy a család folyton mellé dugdossa. a gemplus megoldása elég
ótvar, na.
ott kezdünk, hogy egy kártya nem kártya. ilyen vagy olyan okból ezek a
kártyák nálam néha megmakkannak, ami ugyan szoftveresen javítható, de
azt meg nehéz ha az ember nem tud belépni a gépbe. én legalább 2
kártyát javaslok, vagy gépenként / családtagonként / loginonként egyet
+ legalább 1 pót. alapvetõen akármennyi ugyanolyan kártyát csinálhat az
ember, ha úgy tartja kedve. a fentebb vásárolt kártyák tök fehér,
szimpla bankkártyák. persze van usb-s sim foglalatos kütyü is, ami
érdekes de szerintem elég uncsi pölö kulccsomóval küzdeni a
bejelentkezéshez.
a kártya nálam jellemzõen folyamatosan a gépben van, gyerkõc egyiknek a
kiálló részét le is törte, úgyhogy ki sem lóg. alapvetõen nincs is
szükség folyton cibálni. persze ez ebben a formában elvileg kiváltható
lenne a gépbe épített tpm chippel, de egyrészt ez szükség esetén
mégiscsak kivehetõ, meg amint írtam van belõle pót. nem nagyon találtam
leírást a tpm kulcsok bakupolására, hacsak nem csinál az ember wines
domain enrollmentet meg mittoménmit. akkor meg ha megmakkan az alaplap
nem annyira jó. de továbbra is vérkezdõ vagyok, lehet hogy az infóim és
a következtetéseim totál rosszak.
driver
oké, megvan a kártya, megvan az olvasó, telepíthetjük a csomagokat:
apt-get install
opensc pcsc-tools libccid libengine-pkcs11-openssl libpam-pkcs11
nano
/etc/opensc/opensc.conf
provider_library =
/lib/libpcsclite.so.1
az error_file kezdetű
sort /dev/null -ra
irányítjuk, egyébként mindenféle piros szövegeket kapunk normál
működéskor is.
reader_drivers = pcsc;
ezt követõen kicsit át kell írnunk a démonok sorrendjét, egyébként a
login ablakra nem szedi össze magát, csak második nekifutásra:
update-rc.d -f pcscd
remove
update-rc.d -f pcscd
defaults 21
az adott cardman és gemalto pcie olvasó plug & play volt, a másik
gép pcmcia-s gemplus kütyüjéhez az alábbi varázslat kellett:
nano /etc/reader.conf.d/gem.conf
FRIENDLYNAME
"GEMplus
PCMCIA Reader"
DEVICENAME
/dev/ttyS1
LIBPATH
/usr/lib/pcsc/drivers/serial/libccidtwin.so
CHANNELID
0x2f8
aztán (ez még mindig csak a pcmcia-hoz)
update-reader.conf
/etc/init.d/pcscd
restart
az alapvetõ működés tesztje elõször kártya nélkül, majd bedugott
kártyával:
lapa@inox:~$ pcsc_scan
PC/SC device scanner
V 1.4.16 (c)
2001-2009, Ludovic Rousseau <ludovic.rousseau@free.fr>
Compiled with PC/SC
lite version: 1.5.3
Scanning present
readers...
0: OmniKey CardMan
4321 00 00
Wed Nov 28 22:46:05
2012
Reader 0:
OmniKey CardMan 4321 00 00
Card state:
Card removed,
Wed Nov 28 22:46:08
2012
Reader 0:
OmniKey CardMan 4321 00 00
Card state:
Card inserted,
ATR: 3B 9F 9...
ha ez van akkor örülünk, mert a hardverek működnek.
kulcsok
elõször minden kártyát inicializálunk. hogy teljes legyen a kép inkább
ott kezdem, hogy a kártyát akárhányszor újra tudjuk építeni, de minden
újrainicializálás elõtt törölni kell. ezt a törlést az elsõ esetben
nyilván nem kell megtennünk, de ez a teljes folyamat:
lapa@inox:~$
pkcs15-init -E
Using reader with a
card: OmniKey CardMan 4321 00 00
lapa@inox:~$
ezzel töröltük a kártyát, jöhet az inicializálás. az elsõ lényeges,
hogy a névnek két tagból kell állnia, nekem legalábbis a késõbbi
certifika-csinálásokkor nem sikerült anélkül. a második, hogy meg kell
adnunk egy pin kódot. amennyire én értettem a pin kód szükségessége
kártyafüggõ, és ennél a kártyánál 4-8 szám és asszem betű is lehet. én
a klasszik 4 számjegyet választottam. harmadikként meg lehet adni egy
puk kódot (unblock code), én ezt mindig becsülettel meg is tettem. a
kártya 3 rossz pin után tilt.
pkcs15-init -C
--label "lapa juzer"
Using reader with a
card: Feitian SCR301 00 00
New User PIN.
Please enter User
PIN:
Please type again to
verify:
Unblock Code for New
User PIN (Optional - press return for no PIN).
Please enter User
unblocking PIN (PUK):
Please type again to
verify:
ha 3-szor elrontanánk a pint, akkor
gnome-terminal -e
'pkcs15-tool --unblock-pin'
több ugyanolyan kártyához jobb külsõ kulcsot csinálni. ez a
következõképp néz ki:
lapa@inox:~$ openssl
genrsa -des3 -out /tmp/mykey.key 2048
Generating RSA
private key, 2048 bit long modulus
....................................+++
..............+++
e is 65537 (0x10001)
Enter pass phrase for
/tmp/mykey.key:
Verifying - Enter
pass phrase for /tmp/mykey.key:
lapa@inox:~$
a generált kulcsot visszatuszkoljuk a kártyára. valamiért sokszor kéri
a pint. (most látom a tündér nem csinál csúszkát a hosszú sorokhoz,
milyen jópofa. a \ jel lesz a sortörés, az ilyeneket egy sornak kérem
értelmezni a jövõben, \ nélkül)
lapa@inox:~$
pkcs15-init -S /tmp/mykey.key --auth-id ff --label "scpk" \
--public-key-label
"scpuk"
Using reader with a
card: OmniKey CardMan 4321 00 00
Please enter
passphrase to unlock secret key:
User PIN required.
Please enter User
PIN:
User PIN required.
Please enter User
PIN:
User PIN required.
Please enter User
PIN:
User PIN required.
Please enter User
PIN:
lapa@inox:~$
ezután ellenõrizzük mi történt:
lapa@inox:~$
pkcs15-tool -D
...
Public RSA Key [scpuk]
Com.
Flags : 2
Usage
:
[0x4], sign
Access Flags:
[0x0]
ModLength
:
2048
Key
ref : 0
Native
:
no
Path
:
3f0050153045
Auth
ID :
ID
:
45
...
itt feljegyezzük a kulcsok ID-jét (utolsó sor, 45). következõnek
lekérünk egy certifikát a kártyáról:
lapa@inox:~$ openssl
OpenSSL> engine
dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so \
-pre ID:pkcs11 -pre
LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so
(dynamic) Dynamic
engine loading support
[Success]:
SO_PATH:/usr/lib/engines/engine_pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]:
MODULE_PATH:opensc-pkcs11.so
Loaded: (pkcs11)
pkcs11 engine
OpenSSL>
oké, betöltöttük a kártyaizélgetést, jön a tényleges lekérés:
OpenSSL> req -new
-x509 -days 3650 -keyform engine -engine pkcs11 \
-key id_45 -out
/tmp/cert
engine "pkcs11" set.
PKCS#11 token PIN:
You are about to be
asked to enter information that will be incorporated
into your certificate
request.
What you are about to
enter is what is called a Distinguished Name or a DN.
There are quite a few
fields but you can leave some blank
For some fields there
will be a default value,
If you enter '.', the
field will be left blank.
-----
Country Name (2
letter code) [AU]:HU
State or Province
Name (full name) [Some-State]:
Locality Name (eg,
city) []:
Organization Name
(eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit
Name (eg, section) []:
Common Name (eg, YOUR
name) []:lapa juzer
Email Address
[]:lapa@juzer.hu
OpenSSL>
itt érdemes megnézni a 3650-es számot, ami 10 év minõségmegõrzési idõt
jelent. nem volt vicces ugyanis, mikor egy év múltán az egész család
visszament neandervölgyibe egy lejárt certifika miatt.
kilépünk az openssl-bõl, és visszamásoljuk a fikát a kártyára:
OpenSSL> ^C
lapa@inox:~$
pkcs15-init -X /tmp/cert --auth-id ff --id 45 --format pem
Using reader with a
card: OmniKey CardMan 4321 00 00
User PIN required.
Please enter User
PIN:
User PIN required.
Please enter User
PIN:
lapa@inox:~$
nemsokára készen vagyunk. elmondjuk a rencörnek, hogy ne zárolja a
kártyát, egyébként nem tudnánk több mindenre használni egymás után.
sudo nano
/etc/opensc.conf
itt ki kell venni a komment jelet az alábbi sor elõl:
lock_login = false;
bejelentkezés
elsõnek a bejelentkezést varázsoljuk meg:
sudo mkdir
/etc/pam_pkcs11
zcat
/usr/share/doc/libpam-pkcs11/examples/pam_pkcs11.co\
nf.example.example.gz
| sudo tee /etc/pam_pkcs11/pam_pkcs11.conf
mkdir
/etc/pam_pkcs11/cacerts /etc/pam_pkcs11/crls
nano
/etc/pam_pkcs11/pam_pkcs11.conf
use_mappers = pwent;
(a többi törölhetõ)
következik a certifika másolása
sudo cp /tmp/cert
/etc/pam_pkcs11/cacerts
cd
/etc/pam_pkcs11/cacerts
sudo
pkcs11_make_hash_link
nano /etc/passwd
lapa:x:1000:1000:lapa
juzer:/home/lapa:/bin/bash
itt fontos, hogy "lapa juzer" egyezzen a kártya cn-jével és ne legyen
mögötte ,,,
addgroup scard
adduser lapa scard
sudo nano
/etc/pam.d/common-auth
...
# pam-auth-update to
manage selection of other modules. See
# pam-auth-update(8)
for details.
auth
[success=3
default=ignore] pam_pkcs11.so
# here are the
per-package modules (the "Primary" block)
auth
[success=2
default=ignore] pam_unix.so nullok_secure
...
ezzel készen vagyunk. elméletileg ezen a ponton az ubuntu bejelentkezõ
képernyõje már "Enter User PIN for lapa juzer" -rel fogad, és a pint
beírva beléphetünk. mindazonáltal itt még megmarad a lehetõség a
jelszavas belépésre is.
kisebb üröm az örömben, hogy bár beenged a gépszörny, de nem nyitja ki
nekünk a keyringet. ez pölö wifi jelszavaknál kellemetlen (ethernetet
kell használni, ugye), de a kevésbé paranoidok lenullázhatják a keyring
jelszót. természetesen ez nagyon nem ajánlott. ugyanígy nem nyitja ki a
tündér a titkol ecryptfs partíciókat sem. erre majd úgyis truecrypt
lesz mindjárt.
elõtte azonban a talán leggyakrabban használt sudo bigyóztatást
csináljuk meg, az alábbiak szerint:
sudo nano
/etc/pam.d/sudo
#%PAM-1.0
auth sufficient
pam_pkcs11.so
@include common-auth
@include
common-account
ezután teszt (sudo -k sudotlanít):
lapa@inox:/etc/pam_pkcs11/cacerts$
sudo
-k
lapa@inox:/etc/pam_pkcs11/cacerts$
sudo
-i
Please insert your
Smart card or enter your username.
Found the Smart card.
Welcome lapa juzer
(User PIN)!
Smart card PIN:
root@inox:~#
bár a grafikus felületen a sudo jelszó kérésnél "password"-öt kér, a
pint elfogadja.
ssh bejelentkezés
jöhetnek az izgalmasabb dolgok, például a svájci bicska ssh. sajnos a
10.04-ben lévõ ssh kliens még nem támogatja a kártyázást, legegyszerűbb
egy újabbat letölteni és felrakni:
apt-get install
zlib1g-dev
dpkg -i
/l/app/vnc/ssh/libssl1.0.0_1.0.0d-2ubuntu1_amd64.deb
dpkg -i
/l/app/vnc/ssh/openssh-server_5.8p1-7ubuntu1_amd64.deb
dpkg -i
/l/app/vnc/ssh/openssh-client_5.8p1-7ubuntu1_amd64.deb
ha megvan az új ssh (amúgy minimum 5.4), akkor
pkcs15-tool
--read-ssh-key 45
ahol 45 a korábban már használt ID. eztán a szerveren az rsa-val
kezdõdõ sor(ok) megy
~/.ssh/authorized_keys
-be, egyetlen új sorba. ezután lehet tesztelni:
lapa@inox:/etc/pam_pkcs11/cacerts$
ssh
localhost
The authenticity of
host '[localhost]:22 ([127.0.0.1]:22)' can't be established.
RSA key fingerprint
is ....
Are you sure you want
to continue connecting (yes/no)? yes
Warning: Permanently
added '[localhost]:22' (RSA) to the list of known hosts.
Enter PIN for 'lapa
juzer (User PIN)':
Linux inox
2.6.32-31-generic-phc #61~phc0-Ubuntu SMP...
Ubuntu 10.04.4 LTS
...
lapa@inox:~$ exit
logout
Connection to
localhost closed.
lapa@inox:/etc/pam_pkcs11/cacerts$
távoli könyvtár csatolása
és ha már ez az ssh-zás ilyen egyszerűen négygombosan megy, én
elkezdtem ezt használni a helyi hálózati meghajtók csatolására is.
mivel a jegyzeteim kicsit kuszák a pontos protokollt nem tudom
elmondani, de ezek vannak fenn a kliensen (azaz sshfs és fuse):
lapa@inox:/etc/pam_pkcs11/cacerts$
sshfs
-V
SSHFS version 2.2
FUSE library version:
2.8.6
fusermount version:
2.8.6
using FUSE kernel
interface version 7.12
lapa@inox:/etc/pam_pkcs11/cacerts$
a hálózati meghajtó csatolása így néz ki:
sshfs -o ro
lapa@szerver:/konytar /media/valami/ -p 22
a -o ro írásvédetté teszi
a megosztást, a becsatolás a /media/ könytárba pedig meg fogja
jeleníteni egy meghajtóként a távoli kütyüt. nyilván paranoid lan-on
titkolni, de sebességben még a hardveresen nem gyorsított 1.6 ghz c2d
cpu-val is csak brutál átviteleknél van különbség sambához képest (35
vs. 28 MB/s). viszont így transzparens, ugyanezzel a módszerrel a
világon bárhol becsatolom az otthoni meghajtót. nem tudom, hogy ez
mennyire magától értetõdõ, de jól bírja a kábel kihúzás-bedugást is egy
darabig.
távoli asztal
belemelegedve az ssh-ba elég sokat sírtam a távoli asztal miatt. a
linuxos kliensekkel nekem sehogyse jött össze rendesen a dolog, az
egyikben semmit nem tudtam állítani, a másik döglassú volt valami
miatt. vagy féltucat kliens kipróbálása után végre megtaláltam az
ssvnc-t, ami azóta is remekül szolgál. elõször is le kell tölteni az
1.0.29 verziót, mert már nem tudom miért, de kell valamihez. ezután a
távoli gépre is pin kóddal jlentkezhetünk be, valahogy így:
env
SSVNC_ONCE_ONLY=1, SSVNC_FINISH_SLEEP=0, SS\
VNC_SCALE='0.63'
/usr/lib/ssvnc/Unix/tsvnc lapa@masikgep
itt csak skálázás van, mert a másik gép képernyõje nagyobb. kis
sávszélességnél lehet mindenféle egyszerűsítéssel élni:
env
VNCVIEWERCMD_EXTRA_OPTS='-use64 -grey' SSVNC_ONCE_ON\
LY=1,
SSVNC_FINISH_SLEEP=0, SSVNC_SCALE='0.93' /usr/lib/ssvnc/Unix/ts\
vnc lapa@masikgep
ezen kívül van még vagy félezer kapcsoló, amihez lövésem sincs. többek
között azt sem sikerült kiderítenem, hogy hogyan tudom windowsosan már
a login képernyõtõl uralni a távolt, a fejlesztõ meg megunta, hogy
értetlenkedek. ha valaki rájön hogyan lehet megcsinálni nyert egy üveg
pezsgõt tõlem.
nem tartozik a tárgyhoz, de ha nagyon kell, akkor lehet rendes
terminálszervert is csinálni a gépbõl:
apt-get install
neatx-server
paranccsal, amihez a nomachine klienssel
windows-lájk terminálkliensként csatlakozhatunk. bár ssh-n megy ez is,
sajnos nem támogatja a smart kártyázást.
titkolt partíció
végszóként összefoglalom az adatok titkolását is. az ubuntu beépített
megoldása ahogy írtam nem támogatja a harvderkulcsot, úgyhogy részemrõl
a truecrypt mellett tettem le a voksom. ez teljes mértékben támogatja a
tokeneket, és elég egyértelmű a korábban linkelt eredeti leírás is.
címszavakban azonban összefoglalom, mert ha nincs minden jól belõve
klikkolgatni kell:
preferences --> security tokens: /usr/lib/opensc-pkcs11.so és close
session.
tools --> keyfile generator (akár bármilyen létezõ fájl is lehet, de
nem szerencsés olyat választani, ami valaha is létezett ramon meg a
kártyákon kívül valahol titkosítatlanul. a dolog másik fele, hogy a
truecrypt partíciót a fájl nélkül a jósisten se nyitja ki, úgyhogy
érdemes egy (azaz több) biztonsági mentést csinálni, pölö gpg-vel és
egy rettentõ hosszú jelszóval betitkolva.
preferences --> manage token keyfiles --> import --> pin
--> megjelenik --> cancel.
preferences --> keyfiles --> add token files --> pin -->
kiválaszt. ugyanitt "use keyfiles by default" pipa.
ha minden igaz innentõl az adott token kulccsal titkolt partíció az
alábbiak szerint nyílik:
truecrypt --> auto-mount devices --> kis ablak --> enter
--> pin --> örülünk.
természetesen kombinálható jelszóval, más fájlokkal, satöbbi. meglévõ
truecrypt meghajtók gyorsan átállíthatók erre a kulcsra.
viszont ez még mindig kézimatyizás, meg (nálam legalábbis) sudo. hogy a
titkolt partíció egyszerűen csatlakoztatható legyen én az alábbi
primitív parancsot tákoltam össze:
sudo gnome-terminal
-x truecrypt -t --verbose --auto-mount=dev\
ices
--keyfiles=token://slot/0/file/x --token-lib=/usr/lib/opensc/open\
sc-pkcs11.so
--password=""
ez két terminált nyit egymás után, elsõben a sudo, másodikban a
truecrypt részére kéri a pint, ezzel csatlakoztatja a fellelhetõ
partíciókat.
|