Linux akcióban könyv

Linux akcióban könyv Sziasztok Khabro lakosai! A könyvben David Clinton 12 valós projektet ír le, beleértve a biztonsági mentési és helyreállítási rendszer automatizálását, egy Dropbox-stílusú személyes fájlfelhő beállítását és a saját MediaWiki szerver létrehozását. Érdekes esettanulmányokon keresztül felfedezheti a virtualizációt, a katasztrófa utáni helyreállítást, a biztonságot, a biztonsági mentést, a DevOps-t és a rendszerhibaelhárítást. Minden fejezet a bevált gyakorlatok áttekintésével, az új kifejezések szószedetével és gyakorlatokkal zárul.

Kivonat „10.1. OpenVPN alagút létrehozása"

Ebben a könyvben már sokat beszéltem a titkosításról. Az SSH és az SCP védheti a távoli kapcsolatokon átvitt adatokat (3. fejezet), a fájltitkosítás védheti az adatokat, amíg azok a szerveren vannak (8. fejezet), a TLS/SSL-tanúsítványok pedig védhetik a helyek és a kliensböngészők között továbbított adatokat (9. fejezet). . Néha azonban adatait a kapcsolatok szélesebb körében kell védeni. Például előfordulhat, hogy néhány csapattag útközben dolgozik, miközben nyilvános hotspotokon keresztül csatlakozik a Wi-Fi-hez. Egyáltalán nem szabad azt feltételezni, hogy minden ilyen hozzáférési pont biztonságos, de az embereknek szükségük van egy módra, hogy csatlakozzanak a vállalati erőforrásokhoz – és ebben segíthet a VPN.

A megfelelően megtervezett VPN-alagút közvetlen kapcsolatot biztosít a távoli kliensek és a szerver között oly módon, hogy elrejti az adatokat, amikor azok egy nem biztonságos hálózaton haladnak át. És akkor mi van? Sok olyan eszközt látott már, amely titkosítással megteheti ezt. A VPN valódi értéke abban rejlik, hogy egy alagút megnyitásával távoli hálózatokat csatlakoztathat, mintha azok mind helyiek lennének. Bizonyos értelemben Ön egy bypass-t használ.

Ezzel a kiterjesztett hálózattal a rendszergazdák bárhonnan elvégezhetik munkájukat szervereiken. De még ennél is fontosabb, hogy a több helyen elosztott erőforrásokkal rendelkező vállalat mindezt láthatóvá és elérhetővé teheti minden olyan csoport számára, akiknek szükségük van rájuk, bárhol is legyenek (10.1. ábra).

Maga az alagút nem garantálja a biztonságot. De az egyik titkosítási szabvány beépíthető a hálózati struktúrába, ami jelentősen növeli a biztonsági szintet. A nyílt forráskódú OpenVPN csomaggal létrehozott alagutak ugyanazt a TLS/SSL titkosítást használják, amelyről már olvasott. Az OpenVPN nem az egyetlen elérhető alagútkezelési lehetőség, de az egyik legismertebb. Valamivel gyorsabbnak és biztonságosabbnak tekinthető, mint az IPsec titkosítást használó alternatív 2. rétegbeli alagútprotokoll.

Szeretnéd, ha a csapatodban mindenki biztonságosan kommunikálna egymással, miközben úton vagy különböző épületekben dolgozik? Ehhez létre kell hoznia egy OpenVPN-kiszolgálót, amely lehetővé teszi az alkalmazások megosztását és a szerver helyi hálózati környezetéhez való hozzáférést. Ahhoz, hogy ez működjön, mindössze két virtuális gépet vagy két tárolót kell futtatnia: az egyiket kiszolgálóként/gazdagépként, a másikat pedig ügyfélként kell használnia. A VPN felépítése nem egyszerű folyamat, ezért valószínűleg érdemes néhány percet szánni arra, hogy az átfogó képet szem előtt tartsa.

Linux akcióban könyv

10.1.1. OpenVPN-kiszolgáló konfigurációja

Mielőtt elkezdené, adok néhány hasznos tanácsot. Ha saját maga csinálja meg (és ezt nagyon ajánlom), akkor valószínűleg több terminálablakkal fog dolgozni az Asztalon, amelyek mindegyike más-más géphez csatlakozik. Fennáll annak a veszélye, hogy egy ponton rossz parancsot ír be az ablakba. Ennek elkerülése érdekében a hostname paranccsal módosíthatja a parancssorban megjelenő gépnevet olyasmire, amely egyértelműen jelzi, hogy éppen hol tartózkodik. Miután ezt megtette, ki kell jelentkeznie a szerverről, majd újra be kell jelentkeznie, hogy az új beállítások életbe lépjenek. Így néz ki:

Linux akcióban könyv
Ha követi ezt a megközelítést, és megfelelő nevet ad minden egyes gépnek, amellyel dolgozik, könnyen nyomon követheti, hol van.

A gazdagépnév használata után a következő parancsok végrehajtásakor bosszantó Nem sikerül megoldani a Host OpenVPN-Server üzeneteket. Az /etc/hosts fájl megfelelő új gazdagépnévvel történő frissítése megoldja a problémát.

Szerver előkészítése az OpenVPN-hez

Az OpenVPN szerverre való telepítéséhez két csomagra van szükség: openvpn és easy-rsa (a titkosítási kulcs létrehozási folyamatának kezelésére). A CentOS-felhasználóknak először telepíteniük kell az epel-repository-t, ha szükséges, ahogy azt a 2. fejezetben tette. A kiszolgálóalkalmazáshoz való hozzáférés teszteléséhez telepítheti az Apache webszervert is (apache2 Ubuntu és httpd rendszer CentOS rendszeren).

A kiszolgáló beállítása közben azt javaslom, hogy aktiváljon egy tűzfalat, amely blokkolja az összes portot, kivéve a 22-es (SSH) és az 1194-es portot (az OpenVPN alapértelmezett portja). Ez a példa bemutatja, hogyan működne az ufw az Ubuntun, de biztos vagyok benne, hogy még emlékszel a 9. fejezet CentOS tűzfalprogramjára:

# ufw enable
# ufw allow 22
# ufw allow 1194

A kiszolgáló hálózati interfészei közötti belső útválasztás engedélyezéséhez törölnie kell egy sor megjegyzését (net.ipv4.ip_forward = 1) az /etc/sysctl.conf fájlban. Ez lehetővé teszi a távoli ügyfelek szükség szerinti átirányítását, miután csatlakoztak. Az új beállítás működéséhez futtassa a sysctl -p parancsot:

# nano /etc/sysctl.conf
# sysctl -p

Szerverkörnyezete most már teljesen konfigurálva van, de még egy dolgot kell tennie, mielőtt készen állna: el kell végeznie a következő lépéseket (ezekkel a következőkben részletesen foglalkozunk).

  1. Hozzon létre nyilvános kulcsú infrastruktúra (PKI) titkosítási kulcsokat a kiszolgálón az easy-rsa csomagban található parancsfájlok segítségével. Lényegében az OpenVPN szerver saját tanúsító hatóságként (CA) is működik.
  2. Készítse elő a megfelelő kulcsokat az ügyfél számára
  3. Állítsa be a server.conf fájlt a kiszolgálóhoz
  4. Állítsa be az OpenVPN-klienst
  5. Ellenőrizze a VPN-jét

Titkosító kulcsok generálása

Az egyszerűség kedvéért beállíthatja kulcsfontosságú infrastruktúráját ugyanazon a gépen, ahol az OpenVPN-kiszolgáló fut. A legjobb biztonsági gyakorlatok azonban általában külön CA-kiszolgáló használatát javasolják az éles telepítésekhez. Az OpenVPN-ben használható titkosítási kulcs-erőforrások generálásának és elosztásának folyamatát az ábra szemlélteti. 10.2.

Linux akcióban könyv
Az OpenVPN telepítésekor az /etc/openvpn/ könyvtár automatikusan létrejött, de még nincs benne semmi. Az openvpn és easy-rsa csomagokhoz példa sablonfájlok tartoznak, amelyeket a konfiguráció alapjául használhat. A tanúsítási folyamat elindításához másolja át az easy-rsa sablonkönyvtárat a /usr/share/ mappából az /etc/openvpn könyvtárba, és váltson át az easy-rsa/ könyvtárra:

# cp -r /usr/share/easy-rsa/ /etc/openvpn
$ cd /etc/openvpn/easy-rsa

Az easy-rsa könyvtár most jó néhány szkriptet tartalmaz majd. táblázatban A 10.1 felsorolja a kulcsok létrehozásához használt eszközöket.

Linux akcióban könyv

A fenti műveletek root jogosultságokat igényelnek, ezért a sudo su-n keresztül kell root felhasználóvá válni.

Az első fájl, amellyel dolgozni fog, a vars neve, és tartalmazza azokat a környezeti változókat, amelyeket az easy-rsa a kulcsok generálásakor használ. Szerkesztenie kell a fájlt, hogy saját értékeit használja a már meglévő alapértelmezett értékek helyett. Így fog kinézni a fájlom (10.1-es lista).

Felsorolás 10.1. Az /etc/openvpn/easy-rsa/vars fájl fő töredékei

export KEY_COUNTRY="CA"
export KEY_PROVINCE="ON"
export KEY_CITY="Toronto"
export KEY_ORG="Bootstrap IT"
export KEY_EMAIL="[email protected]"
export KEY_OU="IT"

A vars fájl futtatása átadja értékeit a shell-környezetnek, ahol bekerülnek az új kulcsok tartalmába. Miért nem működik önmagában a sudo parancs? Ugyanis első lépésben a vars nevű scriptet szerkesztjük, majd alkalmazzuk. Az és alkalmazása azt jelenti, hogy a vars fájl átadja értékeit a shell-környezetnek, ahol azok bekerülnek az új kulcsok tartalmába.

A befejezetlen folyamat befejezéséhez feltétlenül futtassa újra a fájlt egy új shell használatával. Ha ez megtörtént, a szkript felszólít egy másik szkript futtatására, a clean-all, hogy eltávolítson minden tartalmat az /etc/openvpn/easy-rsa/keys/ könyvtárból:

Linux akcióban könyv
Természetesen a következő lépés a clean-all szkript futtatása, majd a build-ca, amely a pkitool szkriptet használja a gyökértanúsítvány létrehozásához. Meg kell erősítenie a vars által megadott identitásbeállításokat:

# ./clean-all
# ./build-ca
Generating a 2048 bit RSA private key

Ezután jön a build-key-server szkript. Mivel ugyanazt a pkitool szkriptet használja az új gyökértanúsítvánnyal együtt, ugyanazokat a kérdéseket fogja látni a kulcspár létrehozásának megerősítéséhez. A kulcsok elnevezése az átadott argumentumok alapján történik, amelyek, hacsak nem több VPN-t futtat ezen a gépen, általában szerverek lesznek, mint a példában:

# ./build-key-server server
[...]
Certificate is to be certified until Aug 15 23:52:34 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

Az OpenVPN a Diffie-Hellman algoritmus által generált paramétereket (a build-dh használatával) használja az új kapcsolatok hitelesítésének egyeztetésére. Az itt létrehozott fájlnak nem kell titkosnak lennie, hanem a build-dh parancsfájl használatával kell előállítani az aktuálisan aktív RSA-kulcsokhoz. Ha a jövőben új RSA-kulcsokat hoz létre, frissítenie kell a Diffie-Hellman fájlt is:

# ./build-dh

A szerveroldali kulcsok most az /etc/openvpn/easy-rsa/keys/ könyvtárba kerülnek, de az OpenVPN ezt nem tudja. Alapértelmezés szerint az OpenVPN az /etc/openvpn/ mappában keresi a kulcsokat, ezért másolja ki őket:

# cp /etc/openvpn/easy-rsa/keys/server* /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/dh2048.pem /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn

Kliens titkosítási kulcsok előkészítése

Amint azt már láthatta, a TLS-titkosítás több egyező kulcsot használ: egyet a kiszolgálóra, egyet pedig a távoli kliensre. Ez azt jelenti, hogy szüksége lesz ügyfélkulcsokra. Régi barátunk, a pkitool pontosan az, amire szüksége van. Ebben a példában, amikor a programot az /etc/openvpn/easy-rsa/ könyvtárban futtatjuk, egy kliens argumentumot adunk át a client.crt és a client.key nevű fájlok létrehozásához:

# ./pkitool client

A két kliensfájlt, valamint az eredeti ca.crt fájlt, amely még mindig a keys/ könyvtárban van, biztonságosan át kell vinni az ügyfélre. Tulajdonjoguk és hozzáférési jogaik miatt ez nem biztos, hogy olyan egyszerű. A legegyszerűbb megoldás, ha manuálisan másoljuk át a forrásfájl tartalmát (és mást csak ezen a tartalomon kívül) a számítógép asztalán futó terminálba (jelöljük ki a szöveget, kattintsunk rá jobb gombbal, és válasszuk a menü Másolás parancsát). Ezután illessze be ezt egy új fájlba ugyanazzal a névvel, mint amelyet az ügyfélhez csatlakoztatott második terminálban hozott létre.

De bárki vághatja és beillesztheti. Ehelyett gondolkodjon rendszergazdaként, mert nem mindig lesz hozzáférése ahhoz a grafikus felhasználói felülethez, ahol lehetséges a kivágás/beillesztés. Másolja a fájlokat a felhasználó saját könyvtárába (hogy a távoli scp művelet hozzáférhessen), majd a chown segítségével módosítsa a fájlok tulajdonjogát root-ról normál nem root felhasználóra, hogy végrehajthassa a távoli scp műveletet. Győződjön meg arról, hogy minden fájlja telepítve van és elérhető. Egy kicsit később áthelyezi őket az ügyfélhez:

# cp /etc/openvpn/easy-rsa/keys/client.key /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/ca.crt /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/client.crt /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/client.key
# chown ubuntu:ubuntu /home/ubuntu/client.crt
# chown ubuntu:ubuntu /home/ubuntu/ca.crt

Amikor a titkosítási kulcsok teljes készlete készen áll, meg kell adnia a szervernek, hogyan kívánja létrehozni a VPN-t. Ez a server.conf fájl segítségével történik.

A billentyűleütések számának csökkentése

Túl sok a gépelés? A zárójelekkel történő bővítés segít csökkenteni ezt a hat parancsot kettőre. Biztos vagyok benne, hogy tanulmányozhatja ezt a két példát, és megértheti, mi történik. Ennél is fontosabb, hogy megértheti, hogyan alkalmazhatja ezeket az elveket a több tíz vagy akár több száz elemből álló műveleteknél:

# cp /etc/openvpn/easy-rsa/keys/{ca.crt,client.{key,crt}} /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/{ca.crt,client.{key,crt}}

A server.conf fájl beállítása

Honnan tudhatod, hogy nézzen ki a server.conf fájl? Emlékszel az easy-rsa címtársablonra, amelyet a /usr/share/ könyvtárból másoltál? Amikor telepítette az OpenVPN-t, maradt egy tömörített konfigurációs sablonfájl, amelyet átmásolhat az /etc/openvpn/ mappába. Arra építek, hogy a sablon archiválva van, és bemutatok egy hasznos eszközt: a zcat.

Már ismeri a fájl szöveges tartalmának kinyomtatását a képernyőre a cat paranccsal, de mi van akkor, ha a fájl tömörítése gzip használatával történik? Mindig kicsomagolhatja a fájlt, és a cat boldogan kiadja, de ez egy-két lépéssel több a szükségesnél. Ehelyett, ahogy azt sejteni lehetett, kiadhatja a zcat parancsot, amellyel a kicsomagolt szöveget egy lépésben betöltheti a memóriába. A következő példában a szöveg képernyőre történő nyomtatása helyett átirányítja azt egy új, server.conf nevű fájlba:

# zcat 
  /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz 
  > /etc/openvpn/server.conf
$ cd /etc/openvpn

Tegyük félre a fájlhoz mellékelt kiterjedt és hasznos dokumentációt, és nézzük meg, hogyan fog kinézni, ha végzett a szerkesztéssel. Vegye figyelembe, hogy a pontosvessző (;) azt mondja az OpenVPN-nek, hogy ne olvassa el és ne hajtsa végre a következő sort (10.2-es lista).

Linux akcióban könyv
Nézzünk át néhány beállítást.

  • Alapértelmezés szerint az OpenVPN a 1194-es porton fut. Módosíthatja ezt például a tevékenységek további elrejtéséhez vagy más aktív alagutak ütközésének elkerüléséhez. Mivel az 1194 minimális egyeztetést igényel az ügyfelekkel, a legjobb ezt így megtenni.
  • Az OpenVPN vagy Transmission Control Protocolt (TCP) vagy User Datagram Protocolt (UDP) használ az adatok továbbítására. Lehet, hogy a TCP egy kicsit lassabb, de megbízhatóbb, és nagyobb valószínűséggel érthető az alagút mindkét végén futó alkalmazások számára.
  • Megadhatja a dev tun beállítást, ha egyszerűbb, hatékonyabb IP-alagutat szeretne létrehozni, amely adattartalmat hordoz, semmi mást. Ha viszont több hálózati interfészt (és az általuk képviselt hálózatokat) kell csatlakoztatnia, Ethernet hidat hozva létre, akkor a dev tap lehetőséget kell választania. Ha nem érti, mit jelent ez az egész, használja a tun argumentumot.
  • A következő négy sor a szerveren lévő három hitelesítési fájl és a korábban létrehozott dh2048 beállításfájl nevét adja meg az OpenVPN számára.
  • A szerversor beállítja azt a tartományt és alhálózati maszkot, amelyet a rendszer az ügyfelek IP-címeinek bejelentkezéskor történő hozzárendelésére használ.
  • Az opcionális "route 10.0.3.0 255.255.255.0" push paraméter lehetővé teszi a távoli ügyfelek számára, hogy hozzáférjenek a szerver mögötti privát alhálózatokhoz. Ennek működéséhez magán a szerveren is be kell állítani a hálózatot, hogy a privát alhálózat tudjon az OpenVPN alhálózatról (10.8.0.0).
  • A port-share localhost 80 sor lehetővé teszi a 1194-es porton érkező kliensforgalom átirányítását egy helyi webszerverre, amely a 80-as porton figyel. (Ez akkor lesz hasznos, ha a webszervert fogja használni a VPN tesztelésére.) Ez csak akkor működik majd a tcp protokoll kiválasztásakor.
  • A felhasználó nobody és group nogroup sorokat engedélyezni kell a pontosvesszők (;) eltávolításával. A távoli kliensek senkiként és csoport nélküliként történő futtatására kényszerítve biztosítja, hogy a kiszolgálón lévő munkamenetek privilegizáltak legyenek.
  • A log azt határozza meg, hogy az aktuális naplóbejegyzések felülírják a régi bejegyzéseket minden OpenVPN indításakor, míg a log-append új bejegyzéseket fűz hozzá a meglévő naplófájlhoz. Maga az openvpn.log fájl az /etc/openvpn/ könyvtárba kerül.

Ezenkívül gyakran hozzáadnak egy kliens-ügyfél értéket a konfigurációs fájlhoz, így az OpenVPN-kiszolgálón kívül több ügyfél is láthatja egymást. Ha elégedett a konfigurációjával, elindíthatja az OpenVPN szervert:

# systemctl start openvpn

Az OpenVPN és a systemd közötti kapcsolat változó jellege miatt néha a következő szintaxisra lehet szükség egy szolgáltatás indításához: systemctl start openvpn@server.

Az ip addr futtatása a szerver hálózati interfészeinek felsorolásához most egy hivatkozást ad ki egy új, tun0 nevű interfészre. Az OpenVPN létrehozza a bejövő ügyfelek kiszolgálására:

$ ip addr
[...]
4: tun0: mtu 1500 qdisc [...]
      link/none
      inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
          valid_lft forever preferred_lft forever

Előfordulhat, hogy újra kell indítania a kiszolgálót, mielőtt minden teljesen működni kezd. A következő állomás az ügyfélszámítógép.

10.1.2. Az OpenVPN kliens konfigurálása

Hagyományosan az alagutak legalább két kijárattal épülnek (különben barlangoknak neveznénk őket). A kiszolgálón megfelelően konfigurált OpenVPN az egyik oldalon irányítja a forgalmat az alagútba és onnan kifelé. De szükség lesz néhány szoftverre is, amely a kliens oldalon, vagyis az alagút másik végén fut.

Ebben a részben bizonyos típusú Linux-számítógépek manuális beállítására fogok összpontosítani, hogy OpenVPN-kliensként működjenek. De ez a lehetőség nem az egyetlen módja. Az OpenVPN támogatja a Windows vagy macOS rendszerű asztali számítógépekre és laptopokra, valamint Android és iOS okostelefonokra és táblagépekre telepíthető és használható kliens alkalmazásokat. A részletekért lásd az openvpn.net oldalt.

Az OpenVPN-csomagot úgy kell telepíteni az ügyfélgépre, ahogyan a kiszolgálóra telepítették, bár itt nincs szükség easy-rsa-ra, mivel az Ön által használt kulcsok már léteznek. A client.conf sablonfájlt át kell másolnia az imént létrehozott /etc/openvpn/ könyvtárba. Ezúttal a fájl nem lesz tömörítve, így a szokásos cp parancs tökéletesen elvégzi a munkát:

# apt install openvpn
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf 
  /etc/openvpn/

A client.conf fájl legtöbb beállítása magától értetődő lesz: meg kell egyeznie a szerveren található értékekkel. Amint az a következő példafájlból látható, az egyedi paraméter a távoli 192.168.1.23 1194, amely közli az ügyféllel a kiszolgáló IP-címét. Ismét győződjön meg arról, hogy ez a szerver címe. Arra is kényszeríteni kell az ügyfélszámítógépet, hogy ellenőrizze a kiszolgálótanúsítvány hitelességét, hogy megakadályozza az esetleges emberközeli támadást. Ennek egyik módja a remote-cert-tls szerver sor hozzáadása (10.3-as lista).

Linux akcióban könyv
Most beléphet az /etc/openvpn/ könyvtárba, és kibonthatja a hitelesítési kulcsokat a szerverről. Cserélje le a szerver IP-címét vagy tartománynevét a példában a saját értékeivel:

Linux akcióban könyv
Valószínűleg semmi izgalmas nem fog történni, amíg nem futtatja az OpenVPN-t az ügyfélen. Mivel néhány argumentumot át kell adnia, ezt a parancssorból fogja megtenni. A --tls-client argumentum azt mondja az OpenVPN-nek, hogy Ön kliensként fog működni, és TLS titkosítással csatlakozik, a --config pedig a konfigurációs fájlra mutat:

# openvpn --tls-client --config /etc/openvpn/client.conf

Olvassa el figyelmesen a parancs kimenetét, hogy megbizonyosodjon arról, hogy megfelelően van csatlakoztatva. Ha valami elromlik az első alkalommal, annak oka lehet a kiszolgáló és az ügyfél konfigurációs fájljai közötti beállítások eltérése vagy hálózati kapcsolat/tűzfal probléma. Íme néhány hibaelhárítási tipp.

  • Gondosan olvassa el az OpenVPN-művelet kimenetét az ügyfélen. Gyakran tartalmaz értékes tanácsokat arra vonatkozóan, hogy mit nem lehet pontosan megtenni és miért.
  • Ellenőrizze a hibaüzeneteket a szerver /etc/openvpn/ könyvtárában található openvpn.log és openvpn-status.log fájlokban.
  • Ellenőrizze a rendszernaplókat a szerveren és az ügyfélen, hogy vannak-e OpenVPN-nel kapcsolatos és időzített üzenetek. (A Journalctl -ce megjeleníti a legutóbbi bejegyzéseket.)
  • Győződjön meg arról, hogy aktív hálózati kapcsolat van a szerver és a kliens között (erről bővebben a 14. fejezetben olvashat).

A szerzőről

David Clinton - rendszergazda, tanár és író. Számos fontos műszaki tudományághoz adminisztrált, írt és készített oktatási anyagokat, beleértve a Linux rendszereket, a számítási felhőt (különösen az AWS-t) és a konténertechnológiákat, például a Dockert. Megírta a Learn Amazon Web Services in a Month of Lunches (Manning, 2017) című könyvet. Számos videós tanfolyama megtalálható a Pluralsight.com oldalon, és a többi könyvéhez (a Linux-adminisztrációról és a szervervirtualizációról) mutató hivatkozások a következő címen érhetők el: bootstrap-it.com.

» A könyvvel kapcsolatos további információkért látogasson el ide a kiadó honlapján
» tartalomjegyzék
» Részlet

Khabrozhiteli esetében 25% kedvezmény a kuponból - Linux
A könyv papíralapú változatának befizetése után e-könyvet küldünk az e-mail címre.

Forrás: will.com

Hozzászólás