Autor Zpráva
xaverista
Profil
Zdravím,

vím že hesla uživatelů není žádoucí ukládat do databáze v plain textu, avšak

Jak bych měl ukládat přístupové údaje do databáze (popř. někde jinde) od jiných "strojů" resp. VPS serverů abych se mohl pomocí PHP připojovat přes ssh2 a pracovat se serverem?

Děkuji Xave
Martin2
Profil *
xaverista:
Jak bych měl ukládat přístupové údaje do databáze (popř. někde jinde) od jiných "strojů" resp. VPS serverů abych se mohl pomocí PHP připojovat přes ssh2 a pracovat se serverem?
Záleží na míře zabezpečení, které od aplikace očekáváš. Pokud bys chtěl riziko ztráty dat minimalizovat, tak můžeš přístupové údaje symetricky šifrovat (AES), klíč uschovat u sebe a vložit (odemknout) vždy před použitím.
xaverista
Profil
Martin2:
Záleží na míře zabezpečení, které od aplikace očekáváš.
Na toto bych chtěl dostatečné zabezpečení...

můžeš přístupové údaje symetricky šifrovat (AES), klíč uschovat u sebe a vložit (odemknout) vždy před použitím
S tímto jsem bohužel nikdy nepracoval... Znamená to tedy že jméno a heslo zašifruji a poté klíč uložím do databáze a pripojuji se k serveru samotným klíčem, nebo ten klíč musím opět dešifrovat?
juriad
Profil
xaverista:
Já bych se nepřihlašoval pomocí jména a hesla, ale pomocí klíče. Takto nikde nebude uložené heslo, jen klíč použítelný pro tohoto klienta (ano, každý klient má svůj vlastní). Kdyby klíč unikl, stačí na všech serverech tento klíč odstranit, a to neovlivní ostatní klienty. Klíč je navíc silnější než heslo, co se brute-force útoků.
Privátní klíč je typicky šifrovaný, ale PHP bylo v tomto zabugovaté, takže to musíš ozkoušet sám. K odemknutí potřebuješ passphrase, což je jediná citlivá informace. K passphrase se budeš chovat stejně jako k hesku k databázi.
Martin2
Profil *
juriad:
Já bych se nepřihlašoval pomocí jména a hesla, ale pomocí klíče
Pokud to cílový stroj umožňuje, tak ideálně.

xaverista:
Znamená to tedy že jméno a heslo zašifruji a poté klíč uložím do databáze
Klíč nemůže být v databázi, ale u uživatele (ať už formou souboru nebo hesla). Klíč od bytu taky nenecháváš ležet před vchodem.
xaverista
Profil
Martin2:
Takže pokud to chápu, soubor s klíčem si uložím na server (VPS) a pri PHP SSH2 autentifikaci tento soubor použiji, tudíž jediné nebezpečí je že se mi někdo dostane do složky serveru, jeho SFTP?
Martin2
Profil *
xaverista:
Ne. Obáváš se kompromitace přihlašovacích údajů na svém serveru – tím pádem tam nemůžeš nechat klíč, který je má chránit. Logicky. Klíč bude muset vložit uživatel při každém použití.
TomášK
Profil
Pokud útočník ovládne php aplikaci (rozuměj dokáže vykonávat svůj kód s právy uživatele php), dokáže se přihlásit na druhý server. S tím nic neuděláš, protože požaduješ, aby se php aplikace na druhý server přihlásila. Pokud jsi ochotný přistoupit na to, že budeš při každém (re)startu zadávat heslo, pak mít ten klíč zaheslovaný. Problém nastane, pokud někdo bude moc do složky serveru (přidat si vlastní php skript nebo přečíst klíč) nebo pokud někdo najde díru a dokáže pod php uživatelem vykonávat svůj kód. A pochopitelně taky od kohokoliv, kdo má na tom serveru roota nebo fyzický přístup k serveru.
xaverista
Profil
Hlavně to má sloužit k tomu, že v uživatelské administraci chce uživatel spustit službu na druhém serveru -> potřebuji se na server přihlásit pomocí PHP a vykonat příkaz který mi spustí start.sh avšak uživatel nemá přímý přístup k tomu serveru, nezná žádné údaje od něj, tudíž doteď jsem fungoval na vytahnuti Jména a Hesla od stroje z databáze (např; user, pass: demo), podle IP adresy serveru na kterém měl uživatel svoji službu a pomocí php knihovny SSH2 jsem se přihlásil k serveru a spustil start.sh avšak jsem toto chtěl nějak zabezpečit

$connection = ssh2_connect
('XX.XX.XX.XX', 22);
    ssh2_auth_password
($connection, 'user', 'demo');

Údaje user a demo jsem si vytáhl z DB

SELECT name, pass FROM masters WHERE ip = xx.xx.xx.xx
TomášK
Profil
Na druhém serveru nastav start.sh jako login shell, aby případný útočník na tom stroji nedokázal udělat nic jiného než spustit ten skript.
xaverista
Profil
TomášK:
No uživatelé pouze kliknout např na tlačítko spustit a start.sh spouštím já pomocí scriptu, více uživatelů může mít více služeb, tedy start.sh na jednom serveru, obsah start.sh a jeho spuštění obsluhuje script a není možnost jej nijak měnit
Každopádně díky za rady
Martin2
Profil *
TomášK:
Pokud útočník ovládne php aplikaci…
Samozřejmě. Pak může odchytit i jakékoliv privátní klíče.
Je ale velký rozdíl mezi ztrátou dat a ovládnutím serveru. To druhé vyžaduje mnohem hrubější chybu zabezpečení.

xaverista:
Nemáš moc možností na výběr. Uživatelský master password/klíč je v podstatě jediná možnost, jak chránit přístupové parametry na serveru. Nebo nějaký secure-element/keychain na serveru, který by tato data byl schopen uchovat a řídit jejich použití – ale to už se pohybujeme asi na dost teoretické úrovni, nic takového jsem v praxi nepotkal.
TomášK
Profil
Martin2
Je ale velký rozdíl mezi ztrátou dat a ovládnutím serveru.
Spuštění skriptu jako php uživatel by mělo mít k ovládnutí serveru daleko. Ale je pravda, že data unikají asi častěji.
Proti tomu existuje jedna obrana, mít klíč/heslo jen v paměti. php-démon se spustí pod rootem, načte se do paměti klíč a přepne se pod php-uživatele. Z paměti data obvykle neunikají a php ani web server nemají ke klíči přístup, tedy ani nemůže uniknout.
Martin2
Profil *
TomášK:
A odkud chceš ten klíč načíst? Z disku ne, to jsme si ujasnili. Takže by každému restartu serveru asistoval nějaký pohůnek s klíčem? Nevím no…
TomášK
Profil
Martin2:
Z disku, ale tam bude uložený tak, aby k němu měl přístup jenom root, ne php nebo webserver nebo kdokoliv jiný. Zas je o úroveň jinde získání dat uživatele a získání všech dat ze serveru.

Vaše odpověď

Mohlo by se hodit

Příspěvky nesouvisející s webem budou odstraněny.

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: