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!