Michal Čihař - Blog Archives for Howto

Update PGP klíčů

Už mě začalo silně štvát, že na jednom počítači se některé klíče tváří jako důvěryhodné a druhém ne a rozhodl se, že je konečně na čase napsat nějaké rozumné updatování PGP klíčů včetně těch co je podepisují.

Předpokládám, že vynalézám kolo a něco takového už napsalo mnoho lidí přede mnou, ale nějak jsem to nebyl schopný najít a napsat to nezabralo zas tolik času :-).

 #!/bin/sh -e

if [ "$#" -ne 1 ] ; then
    echo usage `basename $0` ID
    exit 1
fi

# function used for grabbing keys, we limit number of keys received at once
# not to flood keyserver and connection.
getkeys()
{
    echo $1 | xargs -n 50 gpg --recv-keys --no-auto-check-trustdb
}

# Download key we're updating
getkeys "$1"

# List signatures of that key
sigs=`gpg --list-sigs $1 | grep '^sig' | awk '{print $2}' | grep '[A-F0-9]\{8\}' | sort -u`

# Dowload keys that sign updated key
getkeys "$sigs"

# List signatures of keys that sign updated key
sigs=`gpg --list-sigs $sigs | grep '^sig' | awk '{print $2}' | grep '[A-F0-9]\{8\}' | sort -u`

# Download all those signatures
getkeys "$sigs"

# Check trustdb at the end, this is long operation
gpg --check-trustdb

PS: Když na to teď koukám, tak je mi jasné, že nějaký ten grep by se dal ušetřit, ale na to jsem moc líný :-).

Neznámé programy – dmidecode

Po tom co se mě několik lidí zeptalo na dotaz, jehož odpověď je název programu, rozhodl jsem se takovým programům věnovat trochu prostoru v blogu.

První na řadě je program dmidecode . Ten zobrazí různé informace o hardware počítače.

Takže třeba pokud nevíte jaké paměťi máte v počítači, stačí se podívat na jeho výpis:

 Handle 0x0008
        DMI type 6, 12 bytes.
        Memory Module Information
                Socket Designation: DIMM1                           
                Bank Connections: 1 0
                Current Speed: Unknown
                Type: DIMM SDRAM
                Installed Size: 256 MB (Single-bank Connection)
                Enabled Size: 256 MB (Single-bank Connection)
                Error Status: OK
Handle 0x0009
        DMI type 6, 12 bytes.
        Memory Module Information
                Socket Designation: DIMM2                           
                Bank Connections: 3 2
                Current Speed: Unknown
                Type: DIMM SDRAM
                Installed Size: 256 MB (Double-bank Connection)
                Enabled Size: 256 MB (Double-bank Connection)
                Error Status: OK
Handle 0x000A
        DMI type 6, 12 bytes.
        Memory Module Information
                Socket Designation: DIMM3                           
                Bank Connections: 5 4
                Current Speed: Unknown
                Type: Unknown
                Installed Size: Not Installed
                Enabled Size: Not Installed
                Error Status: OK

A hned je jasné, že máme obsazení dva sloty paměti a jeden zbývá volný. Podobné informace můžeme získat o PCI sběrnici a u novějšího hardware i o integrovaných portech:

 Handle 0x0016
        DMI type 8, 9 bytes.
        Port Connector Information
                Internal Reference Designator:  
                Internal Connector Type: None
                External Reference Designator: PARALLEL PORT
                External Connector Type: DB-25 female
                Port Type: Parallel Port ECP
Handle 0x0017
        DMI type 8, 9 bytes.
        Port Connector Information
                Internal Reference Designator:  
                Internal Connector Type: None
                External Reference Designator: EXTERNAL MONITOR PORT
                External Connector Type: DB-15 female
                Port Type: Other
Handle 0x0018
        DMI type 8, 9 bytes.
        Port Connector Information
                Internal Reference Designator:  
                Internal Connector Type: None
                External Reference Designator: BUILT-IN MODEM PORT
                External Connector Type: RJ-11
                Port Type: Modem Port
Handle 0x0019
        DMI type 8, 9 bytes.
        Port Connector Information
                Internal Reference Designator:  
                Internal Connector Type: None
                External Reference Designator: BUILT-IN LAN PORT
                External Connector Type: RJ-45
                Port Type: Network Port
Handle 0x001A
        DMI type 8, 9 bytes.
        Port Connector Information
                Internal Reference Designator:  
                Internal Connector Type: None
                External Reference Designator: INFRARED PORT
                External Connector Type: Infrared
                Port Type: Other
Handle 0x001B
        DMI type 8, 9 bytes.
        Port Connector Information
                Internal Reference Designator:  
                Internal Connector Type: None
                External Reference Designator: USB PORT
                External Connector Type: Access Bus (USB)
                Port Type: USB
[...]
Handle 0x001E
        DMI type 8, 9 bytes.
        Port Connector Information
                Internal Reference Designator:  
                Internal Connector Type: None
                External Reference Designator: HEADPHONE JACK
                External Connector Type: Mini Jack (headphones)
                Port Type: Other
Handle 0x001F
        DMI type 8, 9 bytes.
        Port Connector Information
                Internal Reference Designator:  
                Internal Connector Type: None
                External Reference Designator: 1394 PORT
                External Connector Type: IEEE 1394
                Port Type: Firewire (IEEE P1394)
Handle 0x0020
        DMI type 8, 9 bytes.
        Port Connector Information
                Internal Reference Designator:  
                Internal Connector Type: None
                External Reference Designator: MICROPHONE JACK
                External Connector Type: Other
                Port Type: Other
Handle 0x0021
        DMI type 8, 9 bytes.
        Port Connector Information
                Internal Reference Designator:  
                Internal Connector Type: None
                External Reference Designator: VIDEO-OUT JACK
                External Connector Type: Other
                Port Type: Other
Handle 0x0022
        DMI type 8, 9 bytes.
        Port Connector Information
                Internal Reference Designator:  
                Internal Connector Type: None
                External Reference Designator: WIRELESS LAN
                External Connector Type: Other
                Port Type: Network Port

Snad se to někomu bude hodit :-).

KMail, Kleopatra, gpgsm a kořenové certifikáty

Hledáním způsobu, jak označit certifikát za důvěryhodný pro použití v KMailu jsem strávil poměrně dost času, tak se o něj podělím.

KDE používají na spravování X.509 certifikátů program Kleopatra. To ovšem není nic jiného než klikátko pro gpgsm. Kleopatra sama o sobě neumí nastavit certifikát jako důvěryhodný, to je potřeba řešit přímo v gpgsm. Důvěryhodné certifikáty (tedy jejich fingerprinty) si uživatel zapisuje do souboru ~/.gnupg/trustlist.txt ručně (je možné povolit spravovnání pomocí gpg-agenta, ale to není z bezpečnostních důvodů doporučováno, lidi moc často všechno odklikají :-).

Formát souboru je jednoduchý – kromě komentářů a prázdných řádek, každá obsahuje fingerprint klíče a za ním jeden znak (P, S nebo *), který asi určuje k čemu se certifikát může používat. Ve všech příkladech jsem našel jenom S a žádné vysvětlení a zdrojáky se mi zatím číst nechtělo :-)).

Nejdříve potřebujeme zjistit a ověřit fingerprint klíče. Pokud ho již máme naimportovaný, můžeme ho najít ve výpisu všech klíčů pomocí gpgsm --list-keys :

 Serial number: 00
       Issuer: /CN=CA Cert Signing Authority/OU=http:\x2f\x2fwww.cacert.org/O=Root CA/EMail=support@cacert.org
      Subject: /CN=CA Cert Signing Authority/OU=http:\x2f\x2fwww.cacert.org/O=Root CA/EMail=support@cacert.org
     validity: 2003-03-30 12:29:49 through 2033-03-29 12:29:49
     key type: 4096 bit RSA
 chain length: unlimited
  fingerprint: 13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33

Pak nějakou důvěryhodnou cestou ověříme jeho správnost a můžeme ho přidat do seznamu důvěryhodných:

 # /CN=CA Cert Signing Authority/OU=http:\x2f\x2fwww.cacert.org/O=Root CA/EMail=support@cacert.org
13:5C:EC:36:F4:9C:B8:E9:3B:1A:B2:70:CD:80:88:46:76:CE:8F:33 S

Nakonec je ještě potřeba dát vědět gpg-agentovi o této změne signálem HUP. A nyní by již maily podepsané certifikáty podepsanými touto autoritou měly být v KMailu zelené :-).

gpg-agent aneb proč pořád zadávat heslo?

No vypadá to, že gpg-agent je poměrně neznámá věc, tak tomu uděláme trochu reklamy v blogu :-). gpg-agent je (podobně jako ssh-agent) nástroj pro cachování hesla, aby ho uživatel nemusel zadávat pořád dokola pokud třeba podepisuje více věcí najednou.

Jak na to?

Předpokládám že používáte správnou distribuci (což je Debian Sid :-)), takže instalace bude jednoduchá:

 # apt-get install gnupg-agent

Ostatní distribuce na tom asi budou podobně, jenom je nepoužívám a tudíž neznám.

Pak již stačí aktivovat používání agenta v GnuPG:

 $ echo use-agent >> ~/.gnupg/gpg.conf

A protože se agent spouští podobně jako ssh-agent, je potřeba všem procesům kde ho budeme používat předat informace v proměnné prostředí. Takže nejjednodušší je znovu spustit Xka a agent se spustí automaticky.

Pokud by se nám nelíbilo defaultní konzolové zadávání hesla, můžeme nainstalovat nějaké pěkné grafické. Třeba balíčky pinentry-gtk2 nebo pinentry-qt by mohlo vyhovovat, podle použitého desktopu. Pak jen nastavit jaký budeme používat zapsáním pinentry-program /usr/bin/pinentry-gtk-2 do ~/.gnupg/gpg-agent.conf .

V tomto konfiguračním souboru můžeme i nastavit jak dloho si má agent hesla pamatovat (600 s = 10 minut je výchozí hodnota):

 default-cache-ttl 600
max-cache-ttl 600

Zvětšení filesystému s LVM2

Při instalaci počítače v nové práci jsem se rozhodl že už se konečně přestanu trápit s tím, jak rozdělit disk, protože mi výsledek stejně nikdy nevyhovoval a někde místo přebývalo, jinde zase chybělo. Instalátor Debianu 3.1 podporuje LVM2 bez problémů, tak proč nevyužít možností, které LVM2 nabízí? Instalace byla snadná a když nastala potřeba zvětšit root filesystém, začal jsem hledat jak vlastně na to :-).

Ukázalo se, že je to vskutku triviální operace:

 #
 
  lvextend -L+5G disk0/root
 
 Extending logical volume root to 12.00 GB
  Logical volume root successfully resized
#
 
  xfs_growfs /
 
 meta-data=/                      isize=256    agcount=8, agsize=229376 blks
         =                       sectsz=512
data     =                       bsize=4096   blocks=1835008, imaxpct=25
         =                       sunit=0      swidth=0 blks, unwritten=1
naming   =version 2              bsize=4096
log      =internal               bsize=4096   blocks=2560, version=1
         =                       sectsz=512   sunit=0 blks
realtime =none                   extsz=65536  blocks=0, rtextents=0
data blocks changed from 1835008 to 3145728

OpenVPN – snazší, než jsem čekal

Konečně jsem rozběhal OpenVPN pro připojení do domácí sítě. Jak na to se můžete dočíst v tomto zápise…

Postup je vcelku triviální (pokud nechceme nic víc, než jen propojit dva počítače):

  1. Mít v kernelu podporu pro TUN device
  2. Vygenerovat klíč pomocí openvpn --genkey --secret static.key , ten přenést na obě strany spoje
  3. Vytvořit konfiguraci pro server:
       dev tun
    ifconfig 192.168.3.1 192.168.3.10
    secret static.key
      
  4. Nastavit klienta:
       remote domaci.server.cz
    dev tun
    ifconfig 192.168.3.10 192.168.3.1
    secret static.key
    route 192.168.1.0 255.255.255.0
      
  5. Vytvořit na obou koncích ve firewallu díru (1194/udp)
  6. Spustit OpenVPN

Při troše štěstí to bude fungovat hned, jinak se (jako já) budete trápit s nastavením firewallu, aby všechny pakety dorazily tak kam mají.

Čerpáno z dokumentace OpenVPN .