PostgreSQL

Docela dlouho jsem požíval MySQL, ale když jsem začínal psát jeden větší projekt, tak jsem se rozhodl, že zkusím PostgreSQL.Postupně tu bude návod na instalaci, takovej menší tahák na správu a pak základy SQL.

Pro vlastní kompilaci je potřeba soubor se zdrojáky, ten je ke stažení na stránce www.posrgresql.org, z českého mirroru jsem si stáhnul soubor postgresql-7.4beta2.tar.bz2. Jěště jsem si stáhnul pgadmin3, chtěl jsem si ho taky zkompilovat, ale narážel jsem na miliony chyb, tak jsem si nakonec sosnul balíček pro slacka.

Kompilace

Soubor postgresql-7.4beta2.tar.bz2 rozbalíme, vlezeme do něj a provedeme magickou trojkombinaci…

tar -xjf postgresql-7.4beta2.tar.bz2
cd postgresql-7.4beta2
./configure --with-openssl --prefix=/usr
make
make install

Místo make install pouštím checkinstall, kterým si dělám balíčky.

Je potřeba udělat uživatele pod kterým se bude databáze spouštět:

groupadd pgsql
useradd -g pgsql -d /home/pgsql_data/ pgsql
mkdir /home/pgsql_data/

chown pgsql:pgsql /home/pgsql_data/
chmod 0700 /home/pgsql_data/

Spuštění

Dalím krokem je inicializace prostoru pro databáze(provedeme jako user pgsql):

initdb /home/pgsql_data/

vytvoření naší pokusné databáze:


createdb test

v souboru /home/pgsql_data/pg_hba.conf si změnte/přidejte nastavení pro ověřování. Soubor /home/pgsql_data/postgresql.conf obsahuje nastaveni databáze.
Pro spouštění databáze jsem si udělal rc.pgsql skript. Nyní můžeme spustit databázi příkazem /etc/rc.d/rc.pgsql start

Tahák na SQL

PostgreSQL ma program psql, který nám umožní ovládání databáze pomocí příkazového řádku. Také můžete použít program pgadmin3, je docela pěkný, grafický a klikací…

Uživatelé

Vytvoření uživatele:
CREATE USER username;

Smazání uživatele:

DROP USER username;

Vlastnosti uživatele:

  • superuser
  • Má práva na všechno, pouze on může vytvářet nové uživatele.
    Pro vytvoření superuživatele použij: CREATE USER username CREATEUSER
  • zakládání databáze
  • Má právo na zakládání nových databází
    CREATE USER username CREATEDB
  • heslo
  • Heslo do databáze je oddělené od systému, takže se musí natsavit zvlášť. Nastavení hesla:CREATE USER username PASSWORD 'heslo'

Parametry zadávané při použití příkazu CREATE se dají upravit příkazem ALTER, takže například změna hesla se provede takto:
ALTER USER username PASSWORD 'noveheslo';

Skupiny

Přidání skupiny:
CREATE GROUP groupname;

Přidání uživatele do skupiny:
ALTER GROUP groupname ADD USER username1, ...

Odstranění uživatele ze skupiny:
ALTER GROUP groupname DROP USER username1, ...

Práva

Práva, která je možné nastavit:
SELECT, INSERT, UPDATE, DELETE, RULE, REFERENCES, TRIGGER, CREATE, TEMPORARY, EXECUTE, USAGE a ALL PRIVILEGES

Pro nastavení práv se používá příkaz GRANT:
GRANT INSERT ON tabulka TO username;
Uživatel provádějící tento příkaz musí být majitelem tabulky.

Přiřazení práv skupině:
GRANT SELECT ON tabulka TO GROUP groupname;

Přiřazení práv speciálnímu uživatelskému jménu PUBLIC přiřadíme práva všem uživatelům databáze.

To revoke a privilege, use the fittingly named REVOKE command:
REVOKE ALL ON accounts FROM PUBLIC;

Vytvoření databáze

CREATE DATABASE databasename;
případně
CREATE DATABASE databasename OWNER username;
nebo z prostředí shellu:

createdb -O username databasename

Výroba tabulek

CREATE TABLE (nazev_pole typ_pole [NULL|NOT NULL][UNIQUE|PRIMARY KEY][REFERENCES tabulka][DEFAULT hodnota][,...])

  • NULL – určuje, zda může byt pole prázdné
  • UNIQUE – hodnota se v tabulce může vyskytovat pouze jednou
  • PRIMARY KEY – primární klíč, automaticky je UNIQUE
  • REFERENCES – použijeme pokud je sloupec tabulky zároveň cizím klíčem (vytvoříme referenční integritu)
  • DEFAULT – pokud není při zadávání do tabulky pole známo, použije se tato hodnota

Vkládání dat

INSERT INTO tabulka [(pole[,...])] VALUES (hodnota[,...])

Při vkládání lze definovat pořadí polí. Pokud vynecháme definici polí vložíme data v pořadí v jakém jsme vytvořili tabulku.

Výběr dat

SELECT pole [AS nazev][,...] FROM relace zkratka [,...] [WHERE podminka] [ORDER BY poradi]

  • pole – Seznam sloupců, které chceme při výběru dat zobrazit oddělený čáarkami.
  • AS nazev – pokud chceme aby byl sloupec uvozen jiným nadpisem než je název pole, uvede me ho jako nazev
  • Když chceme vybrat všechny pole, můžeme použít znak *
  • relace – Název pole můžeme uvodit jménem relace (resp. její zkratkou), abychom jednoznačně identifikovali dané pole v případě stejných názvů polí ve dvou různých tabulkách

Definování podmínek – WHERE

logické operátory: =, <, >
logické spojky: AND, OR, NOT
porovnání řetězců: znak % zastupuje libovolný počet libovolných znaků

Řazení – ORDER BY

Výsledek dotazu můžeme seřadit podle libovolného výrazu. Nejčastěji řadíme záznamy podle jednoho ze sloupců, ale teoreticky můžeme řadit podle libovolného výrazu využívající jednotlivých polí záznamu.

Sloučení tabulek – JOIN

Často potřebujeme spojit několik tabulek dohromady v jednom dotazu. V našem případě chceme spojit tabulky Ucitel a Predmet pomocí pole ucitel v tabulce Predmet. Máme na výběr dvě možnosti. Buď použijeme úplný kartézský součin těchto dvou relací a vybereme pouze záznamy, které mají sobě odpovídající hodnoty sloupců Ucitel.id a Predmet.ucitel. Nebo můžeme použít klauzuli JOIN v definici relací.

SELECT p.nazev AS "Název", u.prijmeni + ", " + u.jmeno AS "Učitel" FROM Predmet p, Ucitel u WHERE p.ucitel=u.id

Tento dotaz vypíše seznam názvů předmětů a k nim příslušných učitelů. Všimněte si, že jsme v definici zobrazených polí použili sloučení řetězců do jednoho. Jedná o tzv. vnější spojení (z angl. outer join).

SELECT p.nazev AS "Název", u.prijmeni + ", " + u.jmeno AS "Učitel" FROM Predmet p JOIN Ucitel u ON p.ucitel=u.id

Tento dotaz je ve výsledku stejný jako dotaz předcházející, ovšem použili jsme tentokrát tzv. vnitřní spojení (z angl. inner join). Použití tohoto typu spojení nám dává větši flexibilitu při definici spojení, což si ukážeme později.

Vypočtené sloupce

Při definici vypisovaných sloupců či při konstrukci výrazů se nemusíme omezit pouze na počítání s jedním řádkem, ale můžeme též počítat s celou množinou sloupce. Pro toto počítání se používají následující funkce:

  • SUM() – součet hodnot sloupce
  • MIN() – minimální hodnota množiny
  • MAX() – maximální hodnota množiny
  • AVG() – průměrná hodnota
  • COUNT() – počet unikátních hodnot

SELECT min(plat) AS "Minimum", max(plat) AS "Maximum", avg(plat) AS "Průměr" FROM Ucitel

Vypíše minimální, maximální a průměrný plat všech učitelů.

Tahák na CVS

Článků o CVS bylo na českém internetu napsané dostatečné množství, takže tady nečekejte nějaké sáhodlouhé pojednání nebo manuál k CVS. Je to jen souhrn základních příkazů, které jsou potřeba pro požívání CVS.

Jak se přihlásit k mému CVS?

linux, bash:

cvs -d :pserver:cvs@burdazd.sh.cvut.cz:/home/cvsroot login

nebo


export CVSROOT=:pserver:cvs@burdazd.sh.cvut.cz:/home/cvsroot
cvs login

Heslo není takže jen odbouchněte entrem.

Základní příkazy

repository

cvs -d/home/tsunami/cvsroot init

CVSROOT

Proměnnou CVSROOT nastavuju ve svém ~/.bash_profile pomocí příkazu export CVSROOT=/home/tsunami/cvsroot

import modulu

cvs -d/home/tsunami/cvsroot import -m"Initial import." test TSUNAMI INITIAL

  • -d/home/tsunami/cvsroot
  • lze vynechat, když máme nastavenou proměnnou CVSROOT
  • -m
  • log message
  • test
  • jméno modulu, který se vytvoří
  • TSUNAMI
  • značka výrobce 🙂
  • INITIAL
  • značka verze

získání z repository – checkout

cvs co test

  • co
  • také checkout, slouží k vydolování věcí z repository
  • test
  • jméno modulu, jehož poslední verzi chceme získat z repository

další volby

  • -A
  • převod souborů na jinou vývojovou větev, bez zadání -r… převede na aktuální větev(HEAD)
  • -P
  • nevytváří prázdné adresáře
  • -r
  • volí větev, bez zadání je zvolena hlavní(HEAD)
  • -D
  • volí datum, bez zadání se získá nejnovější verze

    datum se zadává třeba takhle: -D"2003-04-30 18:30:00"

  • -z3
  • komprese

uložení do repository – commit

cvs ci -m"Komentar k upravam"

  • ci
  • také commit, aktualizuje soubory v repository
  • -m
  • přidá komentář, když se nezadá, tak se spustí editor

zjištění změn v repository – update

cvs up test

  • up
  • take update, zjistí změny a zaktualizuje soubory

další volby

  • -APrD
  • stejné vlastnosti jako u checkout
  • -d
  • přinutí update aby akceptovalo i nové adresáře

status

cvs status test

další volby

  • -v
  • Vypíše informace o značkách a větvích.

Značka (tag)

cvs -f tag NAZEV_ZNACKY 'jmeno modulu_nebo_souboru'

Zámek

Zamknutí:
cvs -f admin -l 'soubor'

Odemknutí:
cvs -f admin -u 'soubor'

OpenSSH

Krátký návod na SCP-only shell, používání klíčů a ověřování proti MySQL databázi

Používání klíčů pro přilášení k serveru

V případech, kdy není možné(skript, jsme líní:-) zadávat heslo pro přihlášení k SSH serveru, je na řadě použití klíčů.

Klíč je public(veřejný) a private(soukromý), private key je potřeba chrácnit jako oko v hlavě! Pro vygenerování klíčů se použije příkaz
ssh-keygen -t dsa
(preferuji šifru DSA, můžete ještě zvolit RSA, pro více informací man ssh-keygen) po spuštění nás program vyzve k zadání souboru kam má vygenerovaný klíč umístit, doporučuji použít předvolenou (~/.ssh/id_dsa v případě. že zvolíme šifru DSA), dále nás vyzve k zadání hesla, to necháme prázdné(ENTER). Po ukončení programu máme v adresáři ~/.ssh/ dva nové soubory: id_dsa a id_dsa.pub, id_dsa je privátní klíč a id_dsa.pub (pro ty pomalejší 🙂 veřejný klíč.
Veřejný klíč si nakopírujeme na server například pomocí programu scp:
scp ~/.ssh/id_dsa.pub server.domena:~/
potom se na server přihlásíme přez ssh(ještě pořád normálně zadáváme heslo), tam provedem příkazy

cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
rm ~/id_dsa.pub


a od teď už nemusíme zadávat heslo při přihlašování na server pomocí programu ssh ani při používání scp.

Použití scp

scp [volby] co_kopiruju kam_kopiruju

kde zdroj(co_kopiruju) i cíl(kam_kopiruju) má formát:

[[username@]pocitac:]soubor

takže když chci nahrát ze svého počítače soubor na jinej do sveho home(~/), tak to bude takhle nějak:

scp soubor.tar.bz2 tsunami@server.cz:~/

kopírování ze serveru na můj počítač(zasse do meho home):

scp tsunami@jinejserver.cz:~/nejakejsoubor.jpg ~/

vlastně to je jako normální cp, ale přidáváme tam jméno uživatele apočítače. Uživatelské jméno nemusíme zadávat v případě, že je jak na zdrojovém tak i cílovým počítači stejné. (takže bych tam vynechal tsunami@ a napsal jen server.cz:~/)

volby scp

  • -r – rekurzivně kopíruje adresáře
  • -v – program je ukecanější
  • -q – neukazuje řádek se procentuelním vyjádřením části přeneseného souboru (progress meter)
  • -P – port
  • -4 – použije pouze IPv4
  • -6 – použije pouze IPv6
  • další volby jsou popsané v dokumentaci k scp, skoro jsem je nepoužil tak je sem ani neuvádím

scponly shell

Protože nemám rád klasické ftp na serveru a nasadit ssl-ftp si netroufam protoče by s tím klinti mohli mít nemalé problémy, používám scponly shell pro bezpečný přenos souborů na server. Scponly shell umožňuje také provoz v chrootu, takže se uživatel netoulá po systému.

Instalace

Scponly roste na adrese http://www.sublimation.org/scponly/. Zkompilovat ze zdrojových kódů snad zvládnete, pokud ne, tak si najděte balíček přímo pro svůj systém. Pro mě je důležité, že scponly je i v debianu a nemusím nic kompilovat, stačí jen apt-get install scponly. Uživateli kterému chcete dovolit pouze scponly, nastavíte jako shell /usr/bin/scponly. Pokud chcete aby byl uživatel pži používání uzavřen v chrootu, nastavte mu jako shell /usr/sbin/scponlyc. Binarka scponlyc ma nastaveny setuid bit. Oba programy (/usr/bin/scponly a /usr/sbin.scponlyc) musí být zapsaný v souboru /etc/shells.

Ověřování uživatelů proti databázi MySQL

Na serveru si tržím o uživatelích přímo v systému minimum informací. Většinu věcí mám v MySQL. Také hesla jednotlivých uživatelů mám v databázi.

soubor /etc/pam.d/ssh jsem upravil do teto podoby (vím, není to dokonalé, ale je to funkční…):

auth       required     pam_nologin.so
auth       required     pam_env.so
auth       sufficient   pam_unix.so likeauth nullok shadow
auth       sufficient   pam_mysql.so user=postfix passwd=postfix \
host=localhost db=postfix table=domain usercolumn=domena \
passwdcolumn=passwd crypt=2 where=aktivni=1
auth       required     pam_deny.so

account    sufficient   pam_unix.so
account    sufficient   pam_mysql.so user=postfix passwd=postfix \
host=localhost db=postfix table=domain usercolumn=domena \
passwdcolumn=passwd crypt=2 where=aktivni=1
account    required     pam_deny.so

password   sufficient   pam_unix.so nullok use_authtok shadow md5
password   sufficient   pam_mysql.so use_authok user=postfix \
passwd=postfix host=localhost db=postfix table=domain usercolumn=domena \
passwdcolumn=passwd crypt=2 where=aktivni=1
password   required     pam_deny.so

session    required     pam_limits.so
session    required     pam_unix.so
session    optional     pam_mysql.so use_authok user=postfix \
passwd=postfix host=localhost db=postfix table=domain usercolumn=domena \
passwdcolumn=passwd crypt=2 where=aktivni=1

Řádky jsem zalomil kvůli čitelnosti, v konfiguračním souboru je nezalamujte!

Screenshot

Nerad típu obrazovky gimpem, tak jsem si napsal jednoduchý skriptík, který típne obrazovku a uloží do adresáře ~/screenshot

#!/bin/bash
#
#   $Id: screnshot,v 1.1 2004/02/22 19:57:41 tsunami Exp $
#   zdenda@zdenda.com
#

## kam se budou ukladat screenshoty
DIR="$HOME/screenshot"  

## prefix
NAME="scr_"

## typ a zaroven pripona souboru
TYPE="png"

#############################################################################

[ -d "$DIR" ] || echo "Vytvarim adresar $DIR pro snimky." && mkdir -p "$DIR"
[ -d "$DIR" ] && import -window root "${DIR}/${NAME}`date +%s`.${TYPE}" && exit 0
exit 1

Šifrovaný diskový oddíl v linuxu

Tak jsem se rozhodl, že si rozjedu šifrovaný diskový oddíl na svém harddisku. Mám tu pár set mega dat, které bych nerad ukazoval na veřejnosti (žádné nelegální věci, jen nějaké firemní dokumenty a podobně).

Inspiroval jsem se článkem na www.abclinuxu.cz kde autor použil CryptoAPI. Já jsem si vybral Loop-AES, protože loop-aes patch pro util-linux verze 2.12pre, takže nemusím používat nějakou prehistorickou verzi (používám jádro 2.4.22, které už má CryptoAPI implementované, ale nějak se mi líbí loop-aes, hlavně kvůli té verzi util-linux).

Začínáme…

Jako první si stáhněte z adresy http://loop-aes.sourceforge.net/ soubor loop-AES-latest.tar.bz2 a z adresy ftp://ftp.kernel.org/pub/linux/utils/util-linux/ soubor util-linux-2.12pre.tar.bz2. Teď máme vše co budeme potřebovat stažené a můžeme zažít s instalací.

Instalace

Musíte překompilovat jádro s podporou modulů a vypnout modul loop:

CONFIG_MODULES=y
CONFIG_BLK_DEV_LOOP=n

volba CONFIG_KMOD=y se doporučuje ale není nezbytně nutná.
(CONFIG_BLK_DEV_LOOP=y nebo CONFIG_BLK_DEV_LOOP=m nesmí být, protože by se pak nedalo používat šifrování.)

Loop-AES se překládá samostatně, takže při změně Loop-AES se nemusí rekompilovat jádro.
Zdrojové kódy Loop-AES si rozbalíme, přesuneme se do adresáře a spustíme make:

tar -cjf loop-AES-latest.tar.bz2
cd loop-AES-v1.7e
make

tím si vyrobíme modul loop.o, který si nakopírujeme do adresáře s modulama a spustíme depomod

cp loop.o /lib/modules/`uname -r`/kernel/
depmod -a

Instalace util-linux se dela presne podle tohoto postupu:
(předpokládám, že máte adresář loop-AES-v1.7e ve stejném adresáři jako zdrojové kódy k util-linux)

bzip2 -d -c util-linux-2.12pre.tar.bz2 | tar xvf -
cd util-linux-2.12pre
patch -p1 <../loop-AES-v1.7e/util-linux-2.12pre.diff
CFLAGS=-O2 ./configure
make SUBDIRS="lib mount"
cd mount
install -m 4755 -o root mount umount /bin
install -m 755 losetup swapon /sbin
rm -f /sbin/swapoff && ( cd /sbin && ln -s swapon swapoff )
rm -f /usr/share/man/man8/{mount,umount,losetup,swapon,swapoff}.8.gz
install -m 644 mount.8 umount.8 losetup.8 /usr/share/man/man8
install -m 644 swapon.8 swapoff.8 /usr/share/man/man8
rm -f /usr/share/man/man5/fstab.5.gz
install -m 644 fstab.5 /usr/share/man/man5
cd ..

Pro vyzkoušení funkčnosti spustíme přikaz make tests v adresáři loop-AES-v1.7e, když na konci vypadne *** Test results ok *** tak je vše v naprostém pořádku a můžem pokračovat dál.

Loop-AES + GnuPG

Protože používám GnuPG tak jsem se rozhodl pro zkombinování Loop-AES a s gpg klíčem. Postup je pěkně popsaný v README k Loop-AES (to co jsem vlastně doteď napsal je jen výtah a počeštění z README), taky se mi moc nechtělo zadávat minimálně 20ti místné heslo.

Vytvoření klíče pro šifrování:

head -c 45 /dev/random | uuencode -m - | head -n 2 | tail -n 1 \
| gpg -e -a -r "zdenda@zdenda.com" > /namountovany_usb_flash_disk/keyfile.gpg

Místo zdenda@zdenda.com si tam napište svůj identifikátor klíče (hlavně se nespleťte v gpg klíči!). /namountovany_usb_flash_disk/ je adresář s flash diskem, je doporučené skladovat keyfile.gpg mimo počítač se zašifrovaným diskem.
Do /etc/fstab přidejte záznam(vše na jednom řádku):


/dev/hda4 /mnt/crypt ext3 user,defaults,noauto,loop=/dev/loop3,encryption=AES128,\
gpgkey=/namountovany_usb_flash_disk/keyfile.gpg,gpghome=/home/tsunami/.gnupg/ 0 0

Cesty si změnte podle svého.
/home/tsunami/.gnupg/ je adresář s gpg klíčema.
/dev/hda4 je prázdný diskový oddíl, který budeme šifrovat.

Vytvoření souborového systému na šifrovaném oddílu:

losetup -F /dev/loop3
mkfs -t ext3 /dev/loop3
losetup -d /dev/loop3
mkdir /mnt/crypt

Teď už můžete přimountovat šifrovaný diskový oddíl:
mount /mnt/crypt

Loop-AES + normální heslo

Heslo musí být miniálně 20 znaků (kdo si ho má pamatovat? 🙂 Ať žije paranoia.

losetup -e AES128 -T /dev/loop0 /dev/hda4
mkfs -t ext3 /dev/loop0
losetup -d /dev/loop0
mkdir /mnt/crypt

do /etc/fstab přidejte:

/dev/hda4 /mnt/crypt ext3 defaults,user,noauto,loop=/dev/loop0,encryption=AES128 0 0

Šifrovaný “virtuální” disk

Virtuální disk vytvoříme příkazem
dd if=/dev/zero of=mujsifrovanejdisk bs=1M count=50
kde mujsifrovanejdisk je nazev souboru, který bude vytvořený a count=50 znamená, že bude mít 50MiB. zašifrování provádíme stejně jako v případě normální partition, ale do vsech příkazů pířeme cestu k souboru… (v mém případě místo /dev/hda4)

Šifrované CD

Zatím jsem ho neřešil. Teoreticky by to mělo být možné. Zřejmě by šlo vyrobit zašifrovaný “virtuální” disk (soubor) a ten přímo vypálit na CD. Běžně tak vyrábím CD s FS ext2.

Klávesové zkratky programu screen

Výtah nejzajímavějších klávesových zkratek programu screen z jeho manuálové stránky.

screen [volby] [program [volby programu]]

Parametry příkazového řádku při spouštění:

  • -S nazev - vytvoří novou session s danám nazvem
  • -x nazev - připojí se na danou session, lze použít némi zadané jméno nebo třeba pid session(vše je vidět připoužití -list)
  • -list - vypíše všechny session

Ovládání screenu:
(C-a X znamena Ctrl + a a pak X)

  • C-a ? - nápověda
  • C-a c - nové okno
  • C-a n - přepnout na další okno
  • C-a p - přepnout na předchozí okno
  • C-a X - přepnutí na okno s číslem X
  • C-a C-a - přepnout na poslední použité okno
  • C-a " - vypíše všechny okna v aktuální session a nechá některé z nich zvolit jako aktuální
  • C-a F - přizpůsobení velikosti "screen" okna skutecne velikosti okna terminálu
  • C-a d - "odkopnutí" screenu na pozadí (detach)
  • C-a x - zamknutí screenu
  • C-a * - zobrazí vsechny terminály, kde je pouzíván aktuální screen
  • C-a Z - provede reset konzole v aktuálním okně
  • C-a l - refresh zobrazení
  • C-a \ - konec aktuální session, zeptá se jestli chceme opravdu zabít všechny okna
  • C-a [ - kopírování do schránky
  • C-a ] - vložení ze schránky

Jak na GnuPG

Tato stánka není oficiální dokumentací ani manuálovou stránkou, je to jen stručný popis generování klíče a zacházení s ním…

Vygenerování klíče

Klíč pro GnuPG se generuje pomocí příkazu

gpg --gen-key

Po spuštění jsem vybral volbu (1) DSA a ElGamal (implicitní) dále jsem zvolil délku klíče 1024 bajtů (myslím, že bohatě stačí…) Poté se zadá Jméno, email případně nějaká poznámka úplně na konec se zadává heslo 2x za sebou. Nakonec proběhne vygenerování klíčů (private, public). Klíče si vypíšeme příkazem
gpg --list-keys
Přidávání(import) dalších veřejných klíčů (většinou je dostaneme jako textový soubor) se provádí pomocí příkazu
gpg --import file
Mazání klíče:
gpg --delete-key 57548DCD
editace klíče:
gpg --edit-key 57548DCD

Podepisování a ověřování

Podepisování souborů

Na hodně ftp serverech nacházíme kromě vlastního souboru jěště soubor se stejným jménem a příponou .asc, je to podpis. Ověření probíhá pomocí příkazu:

gpg --verify nejakej_soubor-i386.tgz.asc nejakej_soubor-i386.tgz.asc

Podepisování souborů:
gpg -s soubor

vytvoří podepsaný zkomprimovaný soubor s koncovkou .pgp který obsahuje i originální data
gpg --clearsign soubor

vytvoří podepsaný soubor s koncovkou .asc, která obsahuje i originální data a je v kódivání 7 bitové ASCI, lze poslat emailem
gpg -b soubor

vytvoří soubor s příponou .sig, který obsahuje pouze bínární formu podpisu
gpg -b --armor soubor

vytvoří soubor s koncovkou .asc, který obsahuje pouze ASCII podobu podpisu

Podepisování klíčů

Klíče se podepisují pomocí příkazu
gpg --lsign-key identifikator_uzivatele
takze pro podepsání mého (importovaného) klíče je třeba udělat toto:
gpg --lsign-key zdenda@zdenda.com

Šifrování a dešifrování

Šifrování:

gpg -er 0161626E filename
zašifruje soubor veřejným klíčem s ID 0161626E
gpg -esr 0161626E filename
vytvoří soubor šifrovaný veřejným klíčem daného ID a podepsaný vaším vlastním privátním klíčem

Dešifrování:

Pro dešifrování je tento příkaz:

gpg -o vystupni_soubor -d zasiforvany_soubor.gpg

Když se vynechá parametr -o vystupni_soubor, tak se výsledek vypíše na obrazovku.

Podepisování emailů

pine

Pro nainstalování podpory GnuPG do pine je potřeba spustit program(jen jednou!):
pinegpg-install
potom se při odesílání emailu objeví hláška:

Send message (unfiltered)?

pomocí CTRL-p nebo CTRL-n si přepneme na požadovanou akci, toto jsou možnosti:

  • Send message (unfiltered)?
    Odeslání normálního, nepodepsaného a nešifrovaného emailu.
  • Send message (filtered thru "gpg-sign")?
    Odeslání podepsaného emailu.
  • Send message (filtered thru "gpg-encrypt")?
    Odeslání zašifrovaného emailu.
  • Send message (filtered thru "gpg-sign+encrypt")?
    Odeslání zašifrovaného a podepsaného emailu.

Když chceme poslat zašifrovaný email, tak musíme mít pro adresáta naimportovaný jeho veřejný klíč (jinak není pomocí čeho šifrovat…).

mutt

nastavení gpg v muttu je trošku složitější než je to v pine (ale ne o moc 🙂
V první řadě budete potřebovat soubor .gpg.rc, ten si uložíte do svého domácího adresáře (~/.gpg.rc), do svého ~/.muttrc si připíšete řádky:

source ~/.gpg.rc
set fcc_clear
set forward_decrypt
unset pipe_decode
set pgp_ignore_subkeys # On OpenPGP keys only show the main key, not the sub.
unset pgp_autosign # pgp sign every outgoing mail. (send-hook?)
unset pgp_autoencrypt # pgp encrypt every outgoing mail. (send-hook?)
set pgp_create_traditional=ask-no # Use old-style PGP? (don't do it!)
set pgp_replyencrypt # Encrypt replies on encrypted mail
set pgp_replysign # Sign replies on signed mail
set pgp_replysignencrypted # Sign replies on encrypted mail
unset pgp_retainable_sigs # disable retainable signatures.
set pgp_verify_sig=yes # ask me whether I want to check a pgp signature
set pgp_timeout=7200 # forget PGP passphrase after 7200 seconds (=2 hours)
set pgp_strict_enc # allway use QP enc. with PGP.
unset pgp_long_ids # display 64bit PGP key-ids (don't change this!)
set pgp_show_unusable # show unusable PGP keys in menu

## napiste si tam mosto 0161626E id klice kterym chcete podepisovat
set pgp_sign_as=0x0161626E

# %n = number %k = key id %K = key id of the principal key
# %u = user id %a = algorithm %A = algorithm of the princ. key
# %l = length %L = length of the princ. key
# %f = flags %F = flags of the princ. key
# %c = capabilities %C = capabilities of the princ. key
# %t = trust/validity of the key-uid association
set pgp_entry_format="%4n %t%f %[%y/%m/%d] %4l/0x%k %-4a %2c %u"
set pgp_sort_keys=trust

# nesifrovat
send-hook . unset pgp_autoencrypt
# podepsat
send-hook . set pgp_autosign
# prerusit jestli neni subjekt
send-hook . set abort_nosubject=ask-yes

# Now the exceptions:
# Majordomo doesn't care about signatures or subject lines
send-hook Majordomo@ unset pgp_autosign
send-hook Majordomo@ set abort_nosubject=no
# Send encrypted to these people
#send-hook tim@cyberelk\.demon\.co\.uk set pgp_autoencrypt
#send-hook twaugh@redhat.com set pgp_autoencrypt
#send-hook bandregg@redhat\.com set pgp_autoencrypt
# Use the 'twaugh@redhat.com' key for this address
#pgp-hook tim@cyberelk\.demon\.co\.uk 44E96F28


Po napsání emailu múžete v nabídce před odesláním zvolit požadovanou akci gpg, menu se vyvolá stisknutím klávesy p.
Možnosti: (š)ifrovat, (p)odepsat, podepsat (j)ako, (o)bojí, či (n)ic?

V případě, že se zobrazí nezkontrolovaný podpis stiskněte klávesu ESC a pak P (SHIFT-p).
Tohle můžete přidat do ~/.procmailrc, upraví to hlavičku emailu která není úplně korektní.

# Add a "Content-Type: application/pgp" header so Mutt will know the
# mail is encrypted.
:0 fBw
* ^-----BEGIN PGP MESSAGE-----
* !Content-type: multipart
| formail -i "Content-Type: application/pgp; format=text; x-action=encryptsign"

# Add a "Content-Type: application/pgp" header so Mutt will know the
# mail is signed.
:0 fBw
* ^-----BEGIN PGP SIGNED MESSAGE-----
* !Content-type: multipart
| formail -i "Content-Type: application/pgp; format=text; x-action=sign"

Můj .muttrc.

Posílání a čtení emailů telnetem.

Při nastavování poštovních služeb na serveru se hodí ručně ověřit funkčnost, jednoduchý postup který je zde uveden často plně postačuje.

telnet service.sh.cvut.cz smtp

Server odpoví:

Trying 147.32.127.214...
Connected to service.sh.cvut.cz.
Escape character is '^]'.
220 service.sh.cvut.cz Silicon Hill 1st MX

Pozdravíme 🙂

EHLO service.sh.cvut.cz

Server nám odpoví

250-service.sh.cvut.cz
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250 8BITMIME

Začneme se psaním emailu, nejdřívod koho:

MAIL From: emailova@adresa.tld

a server odpoví

250 Ok

Příjemce:

RCPT To: emailova@adresa.tld

Server odpovi:

250 Ok

Chceme psát zprávu

DATA

A server vrátí:

354 End data with <CR><LF>.<CR><LF>

no a ted můžem psát zprávu. Zpráva se odesílá napsáním tečky na samotném řádku.

Ahoj jak se mas?
Tohle je email poslany z telnetu.
.

Pokud se podařilo zprávu zpracovat, vrátí server něco jako:

250 Ok: queued as 1294A1B8BFD

Takže můžeme skončit…

QUIT

Položky hlavičky

From:
Adresa odesilatele
To:
Adresa příjemce
Cc:
Adresa, kam se zasílá kopie, lze napsat více adres oddělených čárkou.
Bcc:
Skrytá kopie, stejné jako Cc:, ale není vidět v hlavičce emailu po doručení.
Reply-To:
Adresa na kterou má jít odpověď na tento email.
Subject:
jasny, ne?
Sender:
Určuje odesilatele zprávy pokud je jiný než From:

Čtení emailů z POP3 přez telnet

Čtení emailů z telnetu sice moc často nevyužijete, ale když je nějaký problém (veliká zpráva v mailboxu a Vy na modemu…) tak pomůže.

Základní příkazy

  • USER xxx – zvolíme mailbox uživatele xxx
  • PASS xxx – zadáme heslo pro přístup k mailboxu
  • LIST – vypíšeme zprávy
  • RETR x – vypíše zprávy číslo x nakonzoli
  • TOP X Y – vypíše y řádků ze zprávy číslo x na konzoli
  • DELE x – označí zprávu číslo x jako smazanou
  • RSET – odznačí všechny zprávy označené jako smazané
  • QUIT – smaže všechny označené zprávy a skončí

$ telnet tsunami.sh.cvut.cz pop3
Trying 147.32.119.186...
Connected to tsunami.sh.cvut.cz.
Escape character is '^]'.
+OK Hello there.
USER tsunami
+OK Password required.
PASS heslo
+OK logged in.
LIST
+OK POP3 clients that break here, they violate STD53.
1 2456
2 3573
3 3241
4 1298
.
RETR 1
+OK 2456 octets follow.
Return-Path: ...
.....
.....
vypise se emailova zprava
.
QUIT

Maturitní práce 4.E 2001/02 SPŠE Pardubice

Podařilo se mi posbírat většinu dokumentace k maturitním pracím našeho ročníku. Když se tak do nich koukám, tak se divím jak jsme mohli dělat takový zvěrstva 🙂

Pavel Bartoš
Pavel Berka – RLC měřič

Jan Bílek – nabíječka Pb aku
Zdeněk Burda – střídavý zdroj 0-255V
Jiří Culek – NF zesilovač 2x20W
Roman Doleček – regulovatelný zdroj

Jan Friedl – hodiny s budíkem
Matěj Gol – nabíječka NiCd aku
Jindřich Gult – digitální teploměr
Radovan Hock – digitální teploměr

Tomáš Hyksa – NF zesilovač
Adam Jančík – NF zesilovač s kanálem pro subwoofer
Aleš Jiráček – automat. nabíječ NiCd aku
Tomáš Jireček – NF zesilovač

Pavel Kopecký – nabíječka Pb aku
Kramář Jan
Krupka Jiří
Radek Laštovica – nabíječka Pb aku s konstantním U
Zbyněk Lefler – ekvalizer

Petr Moštěk – NF zesilovač 2x30W
Tomáš Mrtka – termostat
Jaromír Nedobitý nabíječka NiCd
Jan Pokálený – NF zesilovač

Pavel Rozlívka – nabíječka Pb aku
Petr Šimek – Poplašné zařízení
Petr Sloupenský – NF zesilovač
Ondřej Urbánek – nabíječka Pb aku

Libor Vojáček – nabíječka Pb aku

.tgz je archív souborů zabalený TARem a pak GZIPem, v UNIXových systémech rozbalíte pomocí

tar -xzf archiv.tgz

Lirc – Dálkové ovládání k počítači

Vzhledem k tomu, že mě nebaví tahat si s sebou po pokoji klávenici kvůli ovládání xmms a hlasitosti přehrávání,
jsem si pořídil dálkové ovládání. Mám ho nastavené tak, že funguje hned po prvním nalogování na mašinu.
Konfigurák mám nastaven tak, aby se DO dalo použít i na ovládání mplayeru (pauza, posun ve filmu,
vypnutí mplayeru) a vypnutí PC (to se docela hodilo v době, kdy jsem měl počítač tak hlasitej,
že vysavač v koutku jen tiše záviděl a večer se mi již nechtělo vstávat z postele abych ho vypnul).

Lirc získáte na stránce www.lirc.org, kde je také dokumentace (v angličtině)

Jako přijímač dálkového ovládání jsem použil toto zapojení, které je připojené na sériový port.

Schema IR prijimace podle www.lirc.org

Schema IR prijimace podle www.lirc.org

Obvod SFH506 se dělá ve dvou verzích a mám dojem že je jedno kterou použijete, lze také použít obvod TSOP1738, TSOP1838 nebo SFH5110. Obvod 78L05 je stabilizátor napětí pro proud do 100mA (zapojení: pohled ze strany nožiček, ploška nahoru, zleva je OUT, GND a IN). Kondenzátor 4,7uF je obyžejný elektrolitický kondík a je připojenej minusem a GND. Diodu múžete pouřít jakoukoliv.
Zapojení potřebných vývodý na konektoru typu CANNON 25M neboCANNON 9M

název 	25pin 	9pin
DCD 	8 	1
RTS 	4 	7
GND 	7 	5

Stažený soubor lirc-0.x.y.tar.bz2 (x, y podle verze) nakopírujte například do adresáře /usr/src a rozbalte příkazem tar -xvjf lirc-0.x.y.tar.bz2

příkazem ./configure v adresáři, který vznikl rozbalením archivu, spusťte konfiguraci. Zde je nutné nastavit port, na kterém je zapojen přijímač a potom je třeba zvolit v základním menu volby Save configuration & run configure. Po proběhnutí konfiguračního skriptu zadejte příkazy (k make install potřebujeme práva roota)


make
make install

– lirc máme nainstalované.
Pro správnou funkci je potřeba natáhnout modul lirc_serial:


modprobe lirc_serial

a spusti daemona


lircd

Používaný seriový port nesmí být požíván ničím jiným než lircd.
Test DO provedem příkazem mode2, který zobrazuje data přijímaní z DO na konzoli.
Konfigurace dálkového ovládání se provádí příkazem irrecord:

irrecord lircd.conf

program irrecord provede přiřazení zadávaných názvů k tlačítkům DO. Vzniklý soubor lircd.conf nakopírujeme do adresáře /etc. Daemon lircd jenom předává stisklá tlačítka dalším aplikacím sloužícím provlastní ovládání a spouštění dalších programů. Například irexec spouští programy z konsole. Pro správnou funkci všech programů pracujících s DO je podřeba mít napsán soubor .lircrc, který přiřazuje tlačítka DO k akcím programů. Můj .lircrc a lircd.conf.

Na konec /etc/rc.d/rc.local si přidejte řadek:

/sbin/modprobe lirc_serial

Skriptiky z tohoto adresare nakopirujte do /usr/local/bin a nastavte jim atribut pro spouštění. V souboru .lircrc si je nastavte k jednotlivým tlačítkům.

Do souboru .xinitrc ve svém home si nekam doprostřed napište irexec ~/.lircrc &, tim se bude dalkové ovládání spouštět po startu Xek.