Kulcskezelés openssh, 2. rész
Cikk szerkesztése Daniel Robbins OpenSSH kulcsmenedzsment, 2. rész
Számos fejlesztő használja a csodálatos OpenSSH programot az archaikus telnet és rsh parancsok biztonságos titkosítására. Az egyik legizgalmasabb jellemzője OpenSSH, hogy képes a felhasználók hitelesítésére az RSA hitelesítési protokoll és DSA, amelyek alapján egy pár kiegészítő numerikus „kulcsok”. Az RSA és DSA hitelesítés egyik legvonzóbb aspektusa az, hogy potenciálisan képesek-e kapcsolatokat létesíteni távoli rendszerekkel, anélkül, hogy jelszót adnának meg. Ebben a második cikk, Daniel jelent meg az ssh-agent (privát kulcs cache) és kulcstartó - Egyedi szkript bash, amelynek célja, hogy a legfontosabb alapú hitelesítés rendkívül kényelmes és rugalmas.
Az ssh-ügynök ismerete.
Tartalmazza a forgalmazás OpenSSH ssh-agent - egy speciális program célja, hogy a dolgozó RSA és DSA kulcsok kellemes és biztonságos (lásd az első része ennek a kérdésnek, hogy vizsgálja felül a RSA- és DSA-hitelesítés). Ellentétben az ssh. Az ssh-agent egy folyamatosan működő démon, amelyet kizárólag a dekódolt privát kulcsok gyorsítótárának létrehozására hoztak létre.
Az ssh tartalmaz beépített támogató eszközöket, amelyek lehetővé teszik, hogy kommunikálni az ssh-agent „th, és ssh-agent” at - kap a megfejtett titkos kulcsok nem meghívja Önt, hogy adja meg a jelszót, amikor szereplő minden egyes új kapcsolatot. Az ssh-agentrel való munkavégzésnél csak az ssh-add parancsot használja. A privát kulcs hozzáadása az ssh-ügynök gyorsítótárába. Ez egyszer megtörténik; az ssh-add használata után. Az ssh kivonja a privát kulcsot az ssh-ügynöktől, ahelyett, hogy meghívást kapna egy kulcsszó beírására.
Az ssh-agent használatával.
Nézzük meg, hogyan működik az egész ssh-agent gyorsítótár-rendszer. Amikor az ssh-agent elindul. majd mielőtt elválasztaná a héttől és folytatná a háttérmunkát, számos fontos környezeti változót ad ki a hegynek. Íme egy példa arra, hogy az ssh-agent mikor indulhat:
Amint láthatja, az ssh-agent információinak kimenete valójában egy bash-parancs; Ha ezek a parancsok végrehajtásra kerülnek, két környezetváltozót hoznak létre: SSH_AUTH_SOCK és SSH_AGENT_PID. A mellékelt kiviteli parancsoknak köszönhetően ezekhez a környezeti változókhoz minden további, később indított parancs is elérhető. Általánosságban elmondható, hogy mindez pontosan akkor fog megtörténni ebben az esetben, ha a shell valóban értékeli a sorokban lévő adatokat, de ebben az esetben egyszerűen csak a stdout kimenetre kerülnek. A helyzet kijavításához az ssh-agentet az alábbi módon hívhatjuk:
Ez a parancs megmondja a bash-nek az ssh-agent futtatását és számolja ki az általa megjelenített adatokat. Okozott ezen a módon (back-idézetek, nem a szokásos aposztróf jelet) és a változók SSH_AGENT_PID SSH_AUTH_SOCK telepítve lesz, és az exportált a héj, hogy ezeket a változókat elérhetővé olyan új folyamatokat lehet kezdeni működés közben.
Az ssh-agent elindításának legjobb módja, hogy egy sorot adjon a fájl legfelső részére
/.bash_profile. Ebben az esetben a bejelentkezési shellben futó programok láthatják a környezeti változókat, megtalálhatják az ssh-ügynököt, és szükség esetén kulcsokat kérhetnek tőle. Kivételesen fontos környezeti változó SSH_AUTH_SOCK. Az SSH_AUTH_SOCK tartalmazza az UNIX tartománycsatlakozóhoz vezető útvonalat, amelyet ssh és scp használhat az ssh-agentrel való párbeszéd létrehozásához.
Az ssh-add használata.
De persze, ha futtatod az ssh-agentet, és a gyorsítótár nem tartalmaz titkosított titkos kulcsokat. Mielőtt használhatnánk az ssh-ügynököt. meg kell adnunk privát kulcsot az ssh-agent cache-hoz, és használnunk kell az ssh-add parancsot. Az alábbi példában az ssh-add parancsot használom a személyes RSA kulcs hozzáadásához
/.ssh/identitás az ssh-agent cache-ben.
Amint láthatja, az ssh-add kért egy kulcsszót a titkos kulcs dekódolására, amely majd készen áll a használatra, és az ssh-agent cache-jában tárolódik. Most, hogy az ssh-add paranccsal hozzáadta a privát kulcs (oka) t az ssh-agent cache-jához. és az aktuális shellben az SSH_AUTH_SOCK változót definiálják (és meg kell határozni, ha az ssh-ügynököt
/.bash_profile), az scp és az ssh segítségével létrehozhat kapcsolatokat a távoli rendszerekre anélkül, hogy megadná a jelszavát.
Az ssh-ügynök korlátozása.
Az ssh-agent nagyon jó dolog, de alapértelmezett beállításai még mindig vannak kisebb kellemetlenségekkel. Tekintsük őket.
Egy esetben az eval `ssh-agentrel társítva
/.bash_profile, az egyes munkamenetekhez az ssh-agent új példánya indul. és ez nem csak további címkék létrehozását jelenti, hanem azt is, hogy az ssh-add programot hozzá kell adni egy privát kulcs hozzáadásához az ssh-agent minden új példányához. Ez nem jelent nagy problémát, ha egyetlen terminált vagy konzolt nyit a rendszerén, de legtöbben több terminált nyitunk egyszerre, és minden egyes új konzol megnyitásakor meg kell adnunk egy kulcsszót. Formálisan nincs ok arra, hogy miért ezt biztosan meg kell csinálnunk, míg egy ilyen akció az ssh-ügynökben elegendő.
Egy másik probléma az ssh-agent alapértelmezett beállításaival, hogy nem kompatibilis a cron feladatokkal. Miután a cron feladatok futnak cron folyamat, nem örökölnek közöttük a SSH_AUTH_SOCK változó, és ezért nem tudja, sem azt, hogy az ssh-agent folyamat fut, vagy hogyan lehet velük kapcsolatba lépni. Mint kiderült, ez a probléma is megoldódott.
Belépés a kulcstartóba.
Ezeknek a problémáknak a megoldásához egy hasznos bash-alapú klienst írtam az ssh-agent számára. kulcstartó. Egy különleges kulcstartó az a tény, hogy lehetővé teszi különálló ssh-ügynök eljárás használatát minden rendszerhez, nem pedig minden munkamenethez. Ez azt jelenti, hogy minden egyes privát kulcsra szükséged lesz az ssh-add használatára, és ez az. Amint később látni fogjuk, a kulcstartó segíti az ssh-add parancs folyamatának optimalizálását, még akkor is, ha megpróbálják hozzáadásukat hozzáadni a működő ssh-agent cache-hez, amelyek még nincsenek.
Íme egy rövid áttekintés arról, hogyan működik a kulcstartó. Ha fájlt futtat
/.bash_profile, először ellenőrzi, hogy az ssh-agent fut-e vagy sem. Ha nem, az ssh-agentet futtatja, és írja le a SSH_AUTH_SOCK és SSH_AGENT_PID fontos változókat a fájlba
/.ssh-agent a biztonságért és a további felhasználás lehetőségéért. Itt van a legjobb módja a kulcstartó elindításához; mint jó öreg ssh-ügynök használata esetén, elvégezzük a szükséges beállításokat
Amint láthatja, a kulcstartó esetében a forrásfájlt forrásforrásként használjuk
/.ssh-agent, ahelyett, hogy kiértékeli a kimenetet, mint az ssh-agent közvetlen használatával. Bár az eredmény megegyezik: egy rendkívül fontos változó SSH_AUTH_SOCK van definiálva, az ssh-agent fel van állítva és készen áll. És mivel az SSH_AUTH_SOCK egy fájlba van írva
/.ssh-agent, a saját héjunk és a cron feladataik szkriptjei egyszerűen kommunikálhatnak az ssh-agentrel, egyszerűen a fájllal
/.ssh-agent. Maga a kulcstartó is kihasználja ezt a fájlt. Ne feledje, hogy amikor elindul, a kulcstartó ellenőrzi, hogy az ssh-agent fut-e. Ha fut, akkor a kulcstartó használja a fájlt
/.ssh-agent az SSH_AUTH_SOCK változó pontos beállításainak megadásához, ez lehetővé teszi, hogy egy már aktív ügyintézőt használjon, és ne nyisson meg újat. kulcstartó csak akkor indítja el az új ssh-agent folyamatot, ha a fájl
/.ssh-agent elavult (ez egy már létező ssh-ügynökre utal), vagy ha maga a fájl nem létezik.
A kulcstartó felszerelése.
A kulcstartó felszerelése egyszerű. Először menj a kulcstartó projektoldalára, és töltsd le a kulcstartó legújabb verzióját az archívumból. Ezután telepítse a következőket:
Most, amikor a kulcstartó a / usr / bin / könyvtárában van, add hozzá a fájlt
/.bash_profile, megadva a privát kulcsok elérési útját argumentumként. Itt egy jó példa
/.bash_profile az aktív kulcstartóval (kulcstartó engedélyezve)
/.bash_profile érvényes kulcstartóval
Kulcs kulcstevékenység.
Most már felálltál
/.bash_profile hívja a kulcstartót minden bejelentkezéskor, kijelentkezéskor és visszatéréskor. Ha ez megtörténik, a kulcstartó hajtja az ssh-ügynököt, és írja le az ügynök környezeti változójának telepítési jellemzőit a fájlra
/.ssh-agent, majd megkérdezi a kulcshang parancssorában megadott minden egyes kulcsszóhoz tartozó kulcskulcsokat
A kulcstartó első alkalommal indul.
Miután beírta a kulcsszavakat, a privát kulcsok tárolásra kerülnek, és a kulcstartó maga is összeomlik. Akkor fogják használni
/.ssh-agent, ami inicializálja a munkamenetet az ssh-agentrel. Most, ha kilép a rendszerből és újra bejelentkezik, látni fogja, hogy a kulcstartó érzékeli a már működő ssh-ügynök eljárást (nem ér véget, amikor kijelentkezik a rendszerből). Mindemellett a kulcstartó megerősíti az ssh-agent cache-jának meglétét a már megadott privát kulcsokban. Ellenkező esetben meghívást kap a megfelelő kulcsszavak megtartására, de ha minden rendben van, akkor az aktuális ssh-ügynöknek továbbra is tartalmaznia kell az előzőleg hozzáadott kulcsot (ez azt jelenti, hogy nem kell megadnia a jelszót):
A kulcstartó egy érvényes ssh-ügynököt észlel
Gratulálok: most jelentkezett be, és most használhatja az ssh és a scp távoli rendszereket. Nem kell ssh-add-t azonnal felhasználni a bejelentkezés után, és sem ssh, sem scp nem fogja kérni, hogy írjon be egy jelszót. Valójában, amíg az ssh-ügynök kezdeti folyamata fut, akkor be tud jelentkezni és ssh kapcsolatokat létrehozni anélkül, hogy jelszót kellene megadnia. És valószínű, hogy az ssh-agent folyamata tovább fog működni, amíg a gép újraindul. Tekintettel arra, hogy valószínűleg telepítetted ezeket a programokat egy Linux rendszerre, akkor talán nem lesz szükség több hónapra jelszóra! Üdvözöljük a biztonságos jelszavas kapcsolatok világában RSA és DSA hitelesítéssel.
Folytassa ugyanabban a szellemben és hozzon létre több új munkamenetet, és észre fogod venni, hogy a kulcstartó mindig "kötődik" az ugyanazon ssh-ügynök eljáráshoz. Ne felejtsük el, hogy a szkripteket és a cron feladatokat is "nyithatjuk" a már futó ssh-agent folyamathoz. Az ssh- és scp-parancsok shell-parancsfájlokban és cron-feladatokban történő használatához először csak győződjön meg arról, hogy a fájlt az információforrásként használja először
Ezután minden későbbi ssh vagy scp parancs észleli a már futó ssh-ügynököt, és egy biztonságos, jelszó nélküli kapcsolatot hoz létre, ugyanúgy, ahogyan azt a shellből is elvégezheti.
Kulcstartó lehetőségek.
Miután konfigurálta és futtatta a kulcstartót, ne felejtse el felhívni a kulcstartót - segítsen megismerni az összes kulcstartó parancssori opcióit. Most egy különösnek tartjuk: az opció - világos.
Ha emlékszik, 1. rész, elmagyaráztam, hogy a kódolatlan titkos kulcsot rejt magában, mert lehetővé teszi, hogy valaki ellopja a titkos kulcsot, és használja azt, hogy hozzáférjen a távoli számlák bármely rendszer jelszó nélkül. Nos, kulcstartó, és nem sebezhető ebből a szempontból (mint használ titkosított privát kulcs), még mindig az ő munkája van egy gyenge pontja, amely közvetlenül kapcsolódik az a tény, hogy a kulcstartó teszi olyan könnyű „hogy egy kötelező”, hogy folyamatosan dolgozni ssh -agent. azt gondoltam, mi lenne, ha néhány támadó valahogy számítani a jelszót vagy jelmondatot, és adja be a helyi rendszer? Ha tud valahogy be az én nevem alatt, kulcstartó azonnal kinyitja hozzáférés a titkosított titkos kulcsomhoz ozvolit támadók könnyen elérheti az összes én másik számlára.
A - clear opció megadja a lehetőséget, hogy megadja a kulcstartót. hogy figyelembe kell vennie minden új kapcsolatot a fiókjával, mint potenciális biztonsági lyuk, amíg a fordított nem bizonyított. Amikor kulcstartót futtat a "clear" opcióval. akkor miután bejelentkezik, mielőtt elkezdi elvégezni a szokásos feladatait, a kulcstartó azonnal visszaállítja az összes privát kulcsot az ssh-ügynök gyorsítótárából. Így ha betolakodó vagy, a kulcstartó megkéri, hogy írjon be kulcsszavakat, mielőtt hozzáférést biztosít a meglévő gyorsítótárazott kulcsbeállításokhoz. Bár ez lehetővé teszi a védelem mértékének növelését, de a munkát kissé kellemetlenebbé és nagyon hasonlóvá teszi ahhoz, hogy közvetlenül az ssh-ügynökvel dolgozzon, nem kulcstartó nélkül. És ebben az esetben, ahogy gyakran történik, valaki megteheti a választást a nagyobb biztonság érdekében, és valaki a kényelem mellett, de nem együtt.