random hackery

2007-03-28

bazė – wifi – ralink

Filed under: base, wifi — Almantas Karvelis @ 21:49

Ralink kortoms draiverius imame iš rt2x00 projekto.

USB – rt2570:

root@base:~# cd /usr/src/
root@base:/usr/src# wget -c \\
http://rt2x00.serialmonkey.com/rt2570-cvs-daily.tar.gz
root@base:/usr/src# tar -zxvf rt2570-cvs-daily.tar.gz
root@base:/usr/src# cd rt2570-cvs-2007032813/Module
root@base:/usr/src/rt2570-cvs-2007032813/Module# make
root@base:/usr/src/rt2570-cvs-2007032813/Module# make install

CardBus – rt2500:

root@base:~# cd /usr/src/
root@base:/usr/src# wget -c \\
http://rt2x00.serialmonkey.com/rt2500-cvs-daily.tar.gz
root@base:/usr/src# tar -zxvf rt2500-cvs-daily.tar.gz
root@base:/usr/src# cd rt2500-cvs-2007032813/Module
root@base:/usr/src/rt2500-cvs-2007032813/Module# make
root@base:/usr/src/rt2500-cvs-2007032813/Module# make install

Abiem atvejais viskas identiška, išskirus interfeisų vardus – USB atveju atsiranda interfeisas rausb0, CardBus atveju – ra0. Žemiau pvz. su ra0, su rausb0 – viskas analogiška.

Jungiantis prie atviro AP:

root@base:~# iwconfig ra0 essid lab00
root@base:~# ifconfig ra0 up

WEP:

root@base:~# ifconfig ra0 down
root@base:~# iwconfig ra0 essid lab02 key restricted `cat wep.txt`
root@base:~# ifconfig ra0 up

WPA:

root@base:~# ifconfig ra0 down
root@base:~# iwconfig ra0 essid lab01
root@base:~# iwpriv ra0 set AuthMode=WPAPSK
root@base:~# iwpriv ra0 set EncrypType=TKIP
root@base:~# iwpriv ra0 set WPAPSK="MySecretPass"
root@base:~# ifconfig ra0 up

2007-03-27

bazė – wifi – atheros

Filed under: base, wifi — Almantas Karvelis @ 09:36

Integruotam Atheros interfeisui naudosime MadWifi draiverį:

root@base:~# cd /usr/src/
root@base:/usr/src# wget -c \\
http://downloads.sourceforge.net/madwifi/madwifi-0.9.3.tar.bz2
root@base:/usr/src# tar -jxvf madwifi-0.9.3.tar.bz2
root@base:/usr/src# cd madwifi-0.9.3
root@base:/usr/src/madwifi-0.9.3# make
root@base:/usr/src/madwifi-0.9.3# make install

Kaip naudotis moduliu ir jungtis prie AP gan paprastai aprašyta dokumentacijoje.

Čia norėčiau tik pakomentuoti keleta niuansų jungiantis prie WEP ir WPA apsaugotu AP.

Mano WEP AP essid yra “lab02”, o jo WEP raktas (26 simbolių 16tainis skaičius) guli wep.txt faile. Norėdamas prisijungti darau taip:

root@base:~# iwconfig ath0 essid "lab02" key `cat wep.txt`
root@base:~# iwpriv ath0 authmode 2
root@base:~# ifconfig ath0 up

Reikia atkreipti dėmesį į “iwpriv ath0 authmode 2” eilutę, kuri nurodo draiveriui naudoti “shared-key” autentifikacijos modą. Be šios opcijos prisijungti prie WEP AP man nepavyko.

Draiveris palaiko WPA per papildomą programą, vadinamą wpa_supplicant. “lab01” yra mano WPA AP, ir norėdamas prie jo prisijungti darau taip:

root@base:~# apt-get install wpasupplicant
root@base:~# wpa_passphrase lab01 "MySecretPass" > /root/ws-lab01.cfg
root@base:~# cat /root/ws-lab01.cfg
network={
        ssid="lab01"
        #psk="MySecretPass"
        psk=a0cf1b2f6a6c3c0898d6f2dd2fc2ddf3247c2c970141469a29c9a0e9eba1ada6
}

root@base:~# wpa_supplicant -B -iath0 -c /root/ws-lab01.cfg -Dwext -w

Išsamus wpa_supplicant konfigūracijos failo aprašymas yra čia, dokumentacija – čia.

MadWifi draiveris turi daug funkcijų, tačiau yra pakankamai gliučnas – pvz. turi problemų jungiantis prie AP, kurie netransliuoja savo essid (#734). Be standartinių wireless extensions valdymo priemonių draiveris turi ir savo įrankių.

2007-03-25

bazė – ryšys

Filed under: base — Almantas Karvelis @ 20:25

Mūsų bazė yra mobili, todėl ryšys yra labai svarbus sąrangos komponentas.

Ryšiui naudosiu WiFi ir GPRS/EDGE/3G mobiliajame telefone per bluetooth. Laptopas turi integruotą wifi kortą su Atheros čipsetu ir bluetooth įrenginį. Taip pat papildomai turiu Asus WL-167g USB WiFi adapterį su Ralink čipsetu ir Asus WL-107G CardBus WiFi adapterį, irgi su Ralink čipu.

Dėl virtualizacijos – VMware virtualioje mašinoje integruotas pci WiFi adapteris ar CardBus adapteris yra nepasiekiami – juos atstos virtualus ethernet interfeisas, tačiau USB įrenginys gali būti įjungtas tiesiai į virtualią mašiną. Taigi iš VM galėsiu naudoti USB WiFi ir bluetooth (nors jis ir integruotas – iš tikrųjų yra USB) – tereikia pridėti USB kontrolerį į mūsų virtualią mašiną.

bazė – branduolys

Filed under: base — Almantas Karvelis @ 04:08

Susikompiliuojame naują branduolį (semi-debian-way).
Paskutinė stable versija www.kernel.org rašymo momentu – 2.6.20.4

root@base:~# apt-get install bzip2 make gcc \\
kernel-package libc6-dev linux-kernel-headers

root@base:~# cd /usr/src/
root@base:/usr/src# wget -c \\
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.4.tar.bz2
root@base:/usr/src# tar -jxvf linux-2.6.20.4.tar.bz2
root@base:/usr/src# ln -sf linux-2.6.20.4 linux
root@base:/usr/src# cd linux
root@base:/usr/src/linux# cp /boot/config-2.6.18-4-686 .config
root@base:/usr/src/linux# make oldconfig

(“m” kur įmanoma, “default” kur ne)

Pakeičiame CONFIG_LOCALVERSION=”b1″ .config faile.
Paleidžiame

root@base:/usr/src/linux# make-kpkg --initrd -rev 1 linux-image

ir einame gerti kavos. Kai kompiliavimas baigėsi:

root@base:/usr/src/linux# ls ../*.deb
../linux-image-2.6.20.4b1_1_i386.deb

root@base:/usr/src/linux# dpkg -i ../linux-image-2.6.20.4b1_1_i386.deb

rebootiname į naują branduolį, ir pasitikriname, ar viskas OK. Jei viskas OK, mažytis kosmetinis tiuningas:

root@base:~# cd /boot/
root@base:/boot# for a in vmlinuz initrd.img System.map config; \\
do ln -sf ${a}-2.6.20.4b1 $a; done

ir išmetame visas šiukšles iš /boot/grub/menu.lst

2007-03-24

bazė – crypto 2 – home

Filed under: base, crypto — Almantas Karvelis @ 03:58

Taigi, tęsiant temą – namų kriptokonteineriai.

Aš naudosiu 500MB konteinerį – home’ui pilnai pakaks. Jei reikės saugoti didesnius duomenų masyvus – pasidarysiu papildomus konteinerius, be to, noriu turėti galimybę bakupuoti konteinerio failą į CD-RW (DVD mano laptopas tik skaito, bet nerašo). Konteinerio šifravimui naudosime Dm-crypt su LUKS infrastruktūrą – ji leidžia neskausmingai pakeisti kriptokonteinerio slaptažodį. Viską konfigūruosiu root vartotojo naudojimui – kaip jau minėjau – tai nėra serveris ir laptopo saugumo reikalavimai kiek kiti – linux’e viską darysiu root teisėm – dėl daugelio planuojamų veiksmų techninių reikalavimų (pvz. darbas su branduoliu ar raw socket), na ir šiaip iš idėjos ;] plėšrūno o ne aukos mentaliteto skatinimui.

Visų pirma susikuriame reikiamo dydžio failą konteineriui:

base:~# mkdir /data
base:~# dd if=/dev/urandom of=/data/c.img bs=1M count=500

Pasitikriname, koks yra laisvas loopback įrenginys:

base:~# losetup -f
/dev/loop0

Pasidarome kriptokonteinerį (slaptažodis turi atitikti root vartotojo slaptažodį):

base:~# losetup /dev/loop0 /data/c.img
base:~# cryptsetup luksFormat /dev/loop0

WARNING!
========
This will overwrite data on /dev/loop0 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

base:~# cryptsetup luksOpen /dev/loop0 cr
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.

Pasitikriname, ar atsirado mapper įrenginys:

base:~# ls /dev/mapper/cr
/dev/mapper/cr

Suformatuojame konteinerį ir jį primontuojame:

base:~# mkfs.ext3 /dev/mapper/cr
base:~# mount /dev/mapper/cr /mnt
base:~# df -h | grep /mnt
/dev/mapper/cr        484M   11M  449M   3% /mnt

Kaip matome, viskas OK, taigi, galime atmontuoti ir iškonfigūruoti įrenginį:

base:~# umount /mnt/
base:~# cryptsetup luksClose /dev/mapper/cr
base:~# losetup -d /dev/loop0

Dabar mums reikia, kad konteineris būtų montuojamas, kai prisijungiame prie sistemos, ir atmontuojamas, kai atsijungiame. Tam idealiausiai tinka pam-mount:

base:~# apt-get install libpam-mount

Sukonfigūruojame konteineri montavimui per pam-mount:

base:~# echo "volume root crypt - /data/c.img /root loop - -" \
>> /etc/security/pam_mount.conf

Belieka pridėti eilutę “@include common-pammount” į atitinkamą failą /etc/pam.d/ direktorijoje, tačiau dabar – mažytis lyrinis nukrypimas:

Kažkada buvo toks senas tarybinis filmas Variantas “Omega” , pastatytas pagal to paties pavadinimo romaną. Jeigu aš gerai prisimenu – tame filme buvo labai geras “kontrolės požymio” koncepcijos pavyzdys: tarybinis žvalgas siusdamas radiogramas į centrą nenaudodavo punktuacijos – nedėdavo taškų sakinių gale. Jeigu centras gautu pranešimą su taškais sakiniuose – tai reikštų kad žvalgas suimtas, jo eteris kontroliuojamas, ir pranešimas – priešo siunčiama dezinformacija.

Kažkokį panašų, iš šalies sunkiai atspėjamą “kontrolės požymį” kartais pravartu turėti ir dirbant su savo sistema, kad kompiuteris (bet tik jis) suprastų, kad jo šeimininko veiksmai kontroliuojami ir pats imtųsi iniciatyvos apsaugoti save ir savo šeimininką.

Tokio “kontrolės požymio” pavyzdį galima realizuoti su mūsų kriptokonteineriu:

base:~# echo "@include common-pammount" >> /etc/pam.d/su

Dabar konteineris montuosis tik tuo atveju, jei vartotojas sėkmingai su’inasi į root’ą

user@base:~$ df -h | grep root
user@base:~$ su -
Password:
key slot 0 unlocked.
root@base:~# df -h | grep root
/dev/mapper/_data_c.img  484M   11M  449M   3% /root
root@base:~# exit
logout
user@base:~$ df -h | grep root
user@base:~$

Tačiau kai root’u loginames tiesiai, konteineris nemontuojamas:

base login: root
Password:
root@base:~# df -h | grep root
root@base:~#

Dabar reikėtų root’o namų direktorijoje diske sukurti start-skriptus, kurie ištrins kriptokonteinerio failą, visas jo konfigūracijas ir patys save. Normaliam darbui reikia jungtis prie sistemos paprastu vartotoju ir su’intis į root’ą. pam-mount primontuos konteinerį į root’o namų direktoriją, start-skriptai esantys fiziniame diske liks paslėpto mount’o ir nebus vykdomi. Kontrolės atveju galima drąsiai jungtis tiesiai root’u, o tada jau sistema pati viskuo pasirupins ;].

Aišku, čia tik pavyzdys, nes tokio tipo konfigūracijos visada remiasi Security through obscurity principu ir jų detalės neturėtų būti viešinamos.

Na ir pabaigai pora žodžių apie konteinerių rezervinį kopijavimą – kaip tikras asfalto vaikas darysiu tai po windows, paėmęs failą iš linux arba scp/sftp per VMware, arba pvz. šituo. Jeigu man reikėtų pasiekti konteinerio turinį iš windows, naudočiau FreeOTFE + ext2ifs. Plačiau – FreeOTFE dokumentacijoje.

2007-03-23

bazė – crypto

Filed under: base, crypto — Almantas Karvelis @ 05:15

Just because you’re paranoid, doesn’t mean they’re not after you.

Tikslas:
– šifruotas swap
– sistemos logai TMPFS’e
home kriptokonteineris

Šifravimui naudosime Dm-crypt .
Sudedame įrankius ir įkraunam modulį (po reboot’o modulis bus užkrautas automatiškai):

base:~# apt-get install cryptsetup
base:~# modprobe dm_crypt

Patikriname, ar viską turime:

base:~# ls /dev/mapper/control
/dev/mapper/control

base:~# dmsetup targets | grep crypt
crypt            v1.1.0 

base:~# grep ENABLE /etc/default/cryptdisks
CRYPTDISKS_ENABLE=Yes

– sutvarkome swap šifravimą

Įtraukiame swap eilutę į /etc/crypttab (hda5 yra mūsų swap particija):

cswap /dev/hda5 /dev/urandom swap

Pakeičiame swap eilutę /etc/fstab , kad naudotų Dm įrenginį:

/dev/mapper/cswap none swap sw 0 0

Profilaktiškai pravalome esamą swap’ą:

base:~# swapoff /dev/hda5
base:~# dd if=/dev/urandom of=/dev/hda5 bs=1M

perkrauname sistemą ir pradedame naudoti šifruotą swap particiją.

– perkeliame /var/log į TMPFS.
kadangi tai nėra serveris tik aktualūs logai turi prasmę. Jų perkėlimas i TMPFS padidins sistemos anonimiškumą, o kadangi swap jau šifruotas, galime nepergyventi kad ten kas nors nutekės.

Pridedame eilutę į /etc/fstab:

tmpfs /var/log tmpfs defaults 0 0

Kai kurie logų failai ar direktorijos turi jau egzistuoti prieš jų panaudojimą, todėl parašome mažą pagalbinį skriptą, paleidžiamą prieš syslog demoną:

base:~# vi /etc/init.d/logs
#!/bin/sh
LD="exim4 fsck" # direktorijos
LF="wtmp btmp" # failai
for ld in $LD
do
 if [ ! -d /var/log/${ld} ]; then
  /bin/mkdir /var/log/${ld}
fi
done
for lf in $LF
do
 /usr/bin/touch /var/log/${lf}
done

base:~# chmod +x /etc/init.d/logs
base:~# for link in /etc/rc{2,3,4,5}.d/S10logs; \
do ln -sf ../init.d/logs  $link; done

viską aktyvuojame:

base:~# /etc/init.d/sysklogd stop
base:~# rm -rf /var/log/*
base:~# mount -a
base:~# /etc/init.d/logs
base:~# /etc/init.d/sysklogd start

sekantis žingsnis – home kriptokonteineineris

tinklo interfeisų vardai

Filed under: base, emu — Almantas Karvelis @ 02:08

Žaisdamas su Linux pastebėjau vieną dalyką – kraunant sistemą tiesiai iš disko, vienintelis tinklo interfeisas gauna vardą eth0, o kraunant sistemą iš VMware – eth1.
Pasirodo, Debian ‘etch’ naudoja udev , ir sistemos starto metu /etc/udev/persistent-net-generator.rules skriptas suriša tinklo interfeisų MAC adresus su interfeisų vardais ir išsaugo juos faile /etc/udev/rules.d/z25_persistent-net.rules
Kadangi fizinio ir virtualaus tinklo interfeisų MAC adresai skiriasi, gavosi kad fiziniam priskirtas pastovus vardas eth0 , o virtualiam – eth1. Man tokio funkcionalumo nereikia ;] – pataisiau /etc/udev/rules.d/z25_persistent-net.rules failą, kad ir vienas ir kitas interfeisai gautų tą patį – eth0 vardą.

2007-03-22

bazė – VMware – Linux fiziniame diske iš Windows.

Filed under: base, emu — Almantas Karvelis @ 19:56

Kaip ir planavau – pasidariau virtualią mašina pasiekti lokalią Linux instaliaciją iš Windows. Konfigūravau iš VMware Server. Keletas niuansų, kad nepamirščiau:
– VM tinklo konfigūracijos tipas – NAT
– 1mas diskas – “Use a physical disk” -> PhysicalDrive0 (Use entire disk)
– 2tras diskas – “new virtual disk” -> SCSI (size 0.1 GB – mažiausias, kuri leidžia sistema)

Švariai instaliuotame Debian’e buvo padarytas šioks toks GRUB’o tiuningas, kad windowsai defaultiškai startuotu pirmi, ir kad sistema pasiimtu einamąjį Linux branduolį ir susijusiuis failus per simlinkus:

base:/boot# for a in vmlinuz initrd.img config; \
do ln -sf  ${a}-2.6.18-4-686 $a; done

O pagrindinis GRUB menu.lst dabar atrodo taip:

default         0
timeout         3
color cyan/blue white/blue

title           WinXP
root            (hd0,0)
savedefault
makeactive
chainloader     +1

title           Linux
root            (hd0,1)
kernel          /boot/vmlinuz root=/dev/hda2 ro
initrd          /boot/initrd.img
savedefault

Kadangi Windowsai startuoja pirmi, leisti tokį setup’ą iš windowsų per VM būtų kiek rizikinga – jei užsižiopsočiau, sistema mėgintų boot’inti jau naudojamą particiją. Tam ir skirtas papildomas SCSI diskas – mes padarysime ji pagrindiniu virtualioje mašinoje ir sudėsime ten GRUB’o kopija, skirtą tik virtualiai mašinai su Linux bootinti.

Taigi, startuojame mūsų Linux’ą per VM’ą ir atliekame šiuos veiksmus:

– pažiūrime ar tikrai turime virtualų SCSI diską:

base:~# fdisk -l /dev/sda

Disk /dev/sda: 107 MB, 107374080 bytes
64 heads, 32 sectors/track, 102 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System

– sukuriame Linux particiją per visą diską ir padarome ja bootable:

base:~# fdisk /dev/sda  <EOF
> n
> p
> 1
>
> a
> 1
> w
> EOF

– patikriname, ar viskas OK:

base:~# fdisk -l /dev/sda

Disk /dev/sda: 107 MB, 107374080 bytes
64 heads, 32 sectors/track, 102 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1           1        1008   83  Linux

– formatuojame naują particiją ir ją primontuojame:

base:~# mkfs.ext3 /dev/sda1 && mount /dev/sda1 /mnt

– sukuriame alternatyvią GRUB instaliaciją VMware’ui:

base:~# mkdir /mnt/{boot,boot/grub}
base:~# cp /boot/grub/{stage1,stage2,menu.lst} /mnt/boot/grub/

– instaliuojame GRUB’ą į mūsų virtualaus SCSI disko MBR. Čia yra keletas niuansų. GRUB nedaro skirtumo tarp SCSI ir IDE diskų ir numeruoja juos pagal BIOS’o boot tvarką. Taigi, pasižiūrime, kaip virtualų diską mato GRUB:

base:~# grub
Probing devices to guess BIOS drives. This may take a long time.

    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

       [ Minimal BASH-like line editing is supported.   For
         the   first   word,  TAB  lists  possible  command
         completions.  Anywhere else TAB lists the possible
         completions of a device/filename. ]

grub> geometry (hd
 Possible disks are:  hd0 hd1

grub> geometry (hd0)
drive 0x80: C/H/S = 65535/15/63, The number of sectors = 78140160, /dev/hda
   Partition num: 0,  Filesystem type unknown, partition type 0x7
   Partition num: 1,  Filesystem type is ext2fs, partition type 0x83
   Partition num: 4,  Filesystem type unknown, partition type 0x82

grub> geometry (hd1)
drive 0x81: C/H/S = 102/64/32, The number of sectors = 209715, /dev/sda
   Partition num: 0,  Filesystem type is ext2fs, partition type 0x83

Taigi, virtualus SCSI (/dev/sda) diskas yra hd1, turintis vienintelę particiją 0. Į jį GRUB’ą ir instaliuojame:

grub> root (hd1,0)
 Filesystem type is ext2fs, partition type 0x83

grub> setup (hd1)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/e2fs_stage1_5" exists... no
 Running "install /boot/grub/stage1 (hd1) /boot/grub/stage2 p /boot/grub/menu.l
st "... succeeded
Done.

grub> quit

– redaguojame /mnt/boot/grub/menu.lst failą, kad jame liktų tik Linux, turėdami omeny, kad pakeisime “boot order” VM biose, ir mūsų virtualus diskas pataps pirmuoju, o tikras fizinis diskas – antruoju. Failas atrodo taip:

default         0
timeout         3
color cyan/blue white/blue

title           Linux
root            (hd1,1)
kernel          /boot/vmlinuz root=/dev/hda2 ro
initrd          /boot/initrd.img

– beliko rebootinti VM’ą, jam startuojant paspausti F2, nueiti į “Boot -> +Hard Drive” meniu ir “pakelti” “Seagate Disk”, kuris yra mūsų virtualusis SCSI diskas virš “VMware Virtual IDE Hard-(PM)”, kuris yra mūsų fizinis diskas. Tada spaudžiame F10, ir stebime, kaip bazė bootinasi į Linux su naujuoju GRUB.

P.S.: Kadangi minimalus virtualus SCSI diskas pakankamai didelis – 100MB – būtų gaila jo neišnaudoti. Ateity planuoju sudėti į jį “rescue” Linux branduolį ir įrankius, jei netyčia sugriaučiau bazinę instaliacija. O kol kas palieku kaip yra. Tiek šiam kartui.

bazė – hw/os/emu

Filed under: base — Almantas Karvelis @ 01:33

Projekto bazei naudosiu seną HP laptopą (1.6 GHz PM, 521 RAM, 40G HDD). Jame įdiegta Windows XP OS. Windows nėra blogai, bet įtariu man reikės daugiau lankstumo ir be Linux’o neapsieisiu. Su GParted LiveCD atsikandau 10G disko gabalą, sudėjau minimalią Debian ‘etch‘ instaliaciją.
Dabar sistema dualboot’ine (XP/Linux), bet kadangi esu asfalto Windawsų vaikas, sumąsčiau, kad būtų gerai turėti galimybę prieiti prie mano linux’o tiesiai iš windows’ų, o padarysiu aš tai VMware pagalba.
Yra 2 nemokamos virtualizacijos alternatyvos – VMware Player ir VMware Server. Plejeris – plain and simple – nedidelis, moka groti virtualias mašinas su fiziniu disku ir nereikalauja parkių su atnaujinimais ir licencijom. Kita vertus – neturi virtualių mašinų kūrimo ir valdymo priemonių. Aišku, galima viską daryti “hacker way” – rankutėmis, bet užtruks ilgai.. Taigi, eisime mažiausio pasipriešinimo keliu. Dabar siunčiuosi abu produktus, ir veiksmų planas būtų toks:
– sumetu VMware Server
– konfigūruoju virtualią mašiną darbui su visu fiziniu disku (jį matys kaip IDE diską)
– sukuriu papildomą _virtualų_ SCSI diską, į kurį diegiu alternatyvią GRUB konfigūracija
– tas pats virtualus diskas ateity gali būti panaudotas kaip rescue, ir kaip trigeris, kad sistema veikia virtualioje mašinoje
– kai virtuali mašina pilnai sutvarkyta – išinstaliuoju VMware Server, ir sumetu VMware Player
– reikalui esant naudoju Plejeri su nauja VM.

2007-03-21

motyvacija

Filed under: reading — Almantas Karvelis @ 14:48

Motyvacija – kiekvieno sėkmingo projekto šerdis, taigi, savęs motyvavimui – šiek tiek skaitalo:

Stealing the Network: How to Own the Box
Stealing the Network: How to Own a Continent
Stealing the Network: How to Own an Identity
Stealing the Network: How to Own a Shadow

Visa tai – grožinė (!!!) literatūra, ir visa tai galima nekomerciniais pagrindais ;] parsisiųsti iš interneto elektronine forma (pradėti paieškas siūlyčiau  čia)

« Newer PostsOlder Posts »

Create a free website or blog at WordPress.com.