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!