Libro Linukso en Ago

Libro Linukso en Ago Saluton, loĝantoj de Khabro! En la libro, David Clinton priskribas 12 realajn projektojn, inkluzive de aŭtomatigi vian rezervan kaj reakigan sistemon, starigi Dropbox-stilan personan dosiernubon kaj krei vian propran MediaWiki-servilon. Vi esploros virtualigon, katastrofan reakiron, sekurecon, sekurkopion, DevOps kaj sistemajn problemojn per interesaj kazesploroj. Ĉiu ĉapitro finiĝas per revizio de plej bonaj praktikoj, glosaro de novaj terminoj kaj ekzercoj.

Eltiraĵo “10.1. Kreante OpenVPN-tunelon"

Mi jam multe parolis pri ĉifrado en ĉi tiu libro. SSH kaj SCP povas protekti datumojn transdonitajn per foraj konektoj (Ĉapitro 3), dosiero ĉifrado povas protekti datumojn dum ĝi estas konservita en la servilo (Ĉapitro 8), kaj TLS/SSL-atestiloj povas protekti datumojn transdonitajn inter retejoj kaj klientretumiloj (Ĉapitro 9) . Sed foje viaj datumoj devas esti protektitaj tra pli larĝa gamo da konektoj. Ekzemple, eble kelkaj el viaj teamanoj laboras survoje dum konektas al Wi-Fi per publikaj retpunktoj. Vi certe ne devus supozi, ke ĉiuj tiaj alirpunktoj estas sekuraj, sed viaj homoj bezonas manieron konektiĝi al firmaaj rimedoj—kaj tie VPN povas helpi.

Ĝuste dizajnita VPN-tunelo disponigas rektan ligon inter foraj klientoj kaj la servilo en maniero kiel kiu kaŝas datumojn dum ĝi vojaĝas tra nesekura reto. Do kio? Vi jam vidis multajn ilojn, kiuj povas fari tion per ĉifrado. La vera valoro de VPN estas, ke malfermante tunelon, vi povas konekti forajn retojn kvazaŭ ili estus ĉiuj lokaj. Iasence, vi uzas pretervojon.

Uzante ĉi tiun plilongigitan reton, administrantoj povas plenumi sian laboron sur siaj serviloj de ie ajn. Sed pli grave, firmao kun rimedoj disvastigitaj tra pluraj lokoj povas igi ilin ĉiujn videblajn kaj alireblajn por ĉiuj grupoj kiuj bezonas ilin, kie ajn ili estas (Figuro 10.1).

La tunelo mem ne garantias sekurecon. Sed unu el la ĉifradaj normoj povas esti inkluzivita en la retostrukturo, kio signife pliigas la nivelon de sekureco. Tuneloj kreitaj per la malfermfonta OpenVPN-pakaĵo uzas la saman TLS/SSL-ĉifradon, pri kiu vi jam legis. OpenVPN ne estas la nura tunela opcio disponebla, sed ĝi estas unu el la plej konataj. Ĝi estas konsiderata iomete pli rapida kaj sekura ol la alternativa Tunelprotokolo de Tavolo 2, kiu uzas IPsec-ĉifradon.

Ĉu vi volas, ke ĉiuj en via teamo komunikiĝu sekure unu kun la alia dum survoje aŭ laborante en malsamaj konstruaĵoj? Por fari tion, vi devas krei OpenVPN-servilon por permesi aplikaĵon kundividon kaj aliron al la loka reto medio de la servilo. Por ke ĉi tio funkciu, vi nur devas funkcii du virtualajn maŝinojn aŭ du ujojn: unu por funkcii kiel la servilo/gastiganto kaj unu por funkcii kiel la kliento. Konstrui VPN ne estas simpla procezo, do verŝajne indas preni kelkajn minutojn por memorigi la grandan bildon.

Libro Linukso en Ago

10.1.1. Agordo de OpenVPN-Servilo

Antaŭ ol vi komencos, mi donos al vi kelkajn utilajn konsilojn. Se vi faros ĝin mem (kaj mi tre rekomendas, ke vi faru), vi verŝajne trovos vin labori kun pluraj finaj fenestroj malfermitaj sur via Labortablo, ĉiu konektita al malsama maŝino. Estas risko, ke iam vi enigos la malĝustan komandon en la fenestron. Por eviti ĉi tion, vi povas uzi la komandon de gastiga nomo por ŝanĝi la maŝinnomon montritan sur la komandlinio al io, kio klare diras al vi, kie vi estas. Post kiam vi faros tion, vi devos elsaluti el la servilo kaj reensaluti por ke la novaj agordoj ekvalidu. Jen kiel ĝi aspektas:

Libro Linukso en Ago
Sekvante ĉi tiun aliron kaj donante taŭgajn nomojn al ĉiu el la maŝinoj kun kiuj vi laboras, vi povas facile konservi trakon de kie vi estas.

Post uzi gastigan nomon, vi eble renkontos ĝenajn mesaĝojn pri Nekapabla Solvi Gastiganta OpenVPN-Servilo dum plenumado de postaj komandoj. Ĝisdatigi la /etc/hosts dosieron kun la taŭga nova gastiga nomo devus solvi la problemon.

Preparante vian servilon por OpenVPN

Por instali OpenVPN sur via servilo, vi bezonas du pakaĵojn: openvpn kaj easy-rsa (por administri la procezon de generado de ĉifrada ŝlosilo). CentOS-uzantoj unue devus instali la epel-release-deponejon se necese, kiel vi faris en Ĉapitro 2. Por povi testi aliron al la servila aplikaĵo, vi ankaŭ povas instali la Apache-retservilon (apache2 ĉe Ubuntu kaj httpd ĉe CentOS).

Dum vi agordas vian servilon, mi rekomendas aktivigi fajroŝirmilon, kiu blokas ĉiujn havenojn krom 22 (SSH) kaj 1194 (la defaŭlta haveno de OpenVPN). Ĉi tiu ekzemplo ilustras kiel ufw funkcius en Ubuntu, sed mi certas, ke vi ankoraŭ memoras la programon CentOS firewalld de Ĉapitro 9:

# ufw enable
# ufw allow 22
# ufw allow 1194

Por ebligi internan vojigon inter retaj interfacoj sur la servilo, vi devas malkomenti unu linion (net.ipv4.ip_forward = 1) en la /etc/sysctl.conf dosiero. Ĉi tio permesos al malproksimaj klientoj esti alidirektitaj laŭbezone post kiam ili estas konektitaj. Por ke la nova opcio funkciu, rulu sysctl -p:

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

Via servila medio nun estas plene agordita, sed ankoraŭ estas ankoraŭ unu afero por fari antaŭ ol vi estos preta: vi devos plenumi la sekvajn paŝojn (ni detale kovros ilin poste).

  1. Kreu aron de ĉifradaj ŝlosiloj de publika ŝlosilo infrastrukturo (PKI) sur la servilo uzante la skriptojn provizitajn per la pako easy-rsa. Esence, la OpenVPN-servilo ankaŭ funkcias kiel sia propra atesta aŭtoritato (CA).
  2. Preparu taŭgajn ŝlosilojn por la kliento
  3. Agordu la server.conf dosieron por la servilo
  4. Agordu vian OpenVPN-klienton
  5. Kontrolu vian VPN

Generante ĉifrajn ŝlosilojn

Por simpligi aferojn, vi povas agordi vian ŝlosilan infrastrukturon sur la sama maŝino, kie funkcias la OpenVPN-servilo. Tamen, sekurecaj plej bonaj praktikoj tipe sugestas uzi apartan CA-servilon por produktaddeplojoj. La procezo de generado kaj distribuado de ĉifradaj ŝlosilaj rimedoj por uzo en OpenVPN estas ilustrita en Fig. 10.2.

Libro Linukso en Ago
Kiam vi instalis OpenVPN, la dosierujo /etc/openvpn/ estis aŭtomate kreita, sed ankoraŭ estas nenio en ĝi. La pakoj openvpn kaj easy-rsa venas kun ekzemploj de ŝablonoj dosieroj, kiujn vi povas uzi kiel bazon por via agordo. Por komenci la atestan procezon, kopiu la ŝablonan dosierujon easy-rsa de /usr/share/ al /etc/openvpn kaj ŝanĝu al la dosierujo easy-rsa/:

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

La dosierujo easy-rsa nun enhavos sufiĉe multajn skriptojn. En tablo 10.1 listigas la ilojn, kiujn vi uzos por krei ŝlosilojn.

Libro Linukso en Ago

La supraj operacioj postulas radikajn privilegiojn, do vi devas fariĝi root per sudo su.

La unua dosiero, kun kiu vi laboros, nomiĝas vars kaj enhavas la mediovariablojn, kiujn easy-rsa uzas dum generado de ŝlosiloj. Vi devas redakti la dosieron por uzi viajn proprajn valorojn anstataŭ la defaŭltajn valorojn, kiuj jam estas tie. Jen kiel mia dosiero aspektos (Listo 10.1).

Listo 10.1. Ĉefaj fragmentoj de la dosiero /etc/openvpn/easy-rsa/vars

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"

Ruli la vars-dosieron transdonos ĝiajn valorojn al la ŝela medio, kie ili estos inkluzivitaj en la enhavo de viaj novaj ŝlosiloj. Kial la sudo-komando per si mem ne funkcias? Ĉar en la unua paŝo ni redaktas la skripton nomitan vars kaj poste aplikas ĝin. Apliki kaj signifas, ke la vars-dosiero transdonas siajn valorojn al la ŝela medio, kie ili estos inkluzivitaj en la enhavo de viaj novaj ŝlosiloj.

Nepre rerulu la dosieron uzante novan ŝelon por kompletigi la nefinitan procezon. Kiam ĉi tio estas farita, la skripto petos vin ruli alian skripton, clean-all, por forigi ajnan enhavon en la dosierujo /etc/openvpn/easy-rsa/keys/:

Libro Linukso en Ago
Kompreneble, la sekva paŝo estas ruli la clean-all-skripton, sekvitan de build-ca, kiu uzas la pkitool-skripton por krei la radikan atestilon. Oni petos vin konfirmi la identecajn agordojn provizitajn de vars:

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

Poste venas la skripto build-key-server. Ĉar ĝi uzas la saman pkitool-skripton kune kun la nova radika atestilo, vi vidos la samajn demandojn por konfirmi la kreadon de la ŝlosila paro. La ŝlosiloj estos nomitaj laŭ la argumentoj, kiujn vi transdonas, kiuj, krom se vi rulas plurajn VPN-ojn sur ĉi tiu maŝino, kutime estos serviloj, kiel en la ekzemplo:

# ./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

OpenVPN uzas parametrojn generitajn de la Diffie-Hellman-algoritmo (uzante build-dh) por negoci aŭtentigon por novaj konektoj. La dosiero kreita ĉi tie ne bezonas esti sekreta, sed devas esti generita per la build-dh-skripto por la RSA-ŝlosiloj kiuj estas nuntempe aktivaj. Se vi kreos novajn RSA-ŝlosilojn estonte, vi ankaŭ devos ĝisdatigi la Diffie-Hellman-dosieron:

# ./build-dh

Viaj servilaj flankoŝlosiloj nun finiĝos en la dosierujo /etc/openvpn/easy-rsa/keys/, sed OpenVPN ne scias tion. Defaŭlte, OpenVPN serĉos ŝlosilojn en /etc/openvpn/, do kopiu ilin:

# 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

Preparado de Klientaj Ĉifradaj Ŝlosiloj

Kiel vi jam vidis, TLS-ĉifrado uzas parojn de kongruaj ŝlosiloj: unu instalita sur la servilo kaj unu instalita sur la fora kliento. Ĉi tio signifas, ke vi bezonos klientajn ŝlosilojn. Nia malnova amiko pkitool estas ĝuste tio, kion vi bezonas por ĉi tio. En ĉi tiu ekzemplo, kiam ni rulas la programon en la dosierujo /etc/openvpn/easy-rsa/, ni pasas al ĝi klientargumenton por generi dosierojn nomitajn client.crt kaj client.key:

# ./pkitool client

La du klientdosieroj, kune kun la originala ca.crt-dosiero, kiu ankoraŭ estas en la ŝlosiloj/dosierujo, nun devus esti sekure transdonitaj al via kliento. Pro ilia posedo kaj alirrajtoj, tio eble ne estas tiel facila. La plej simpla aliro estas mane kopii la enhavon de la fontdosiero (kaj nenio krom tiu enhavo) en terminalon funkciantan sur la labortablo de via komputilo (elektu la tekston, dekstre alklaku ĝin kaj elektu Kopiu el la menuo). Poste algluu ĉi tion en novan dosieron kun la sama nomo, kiun vi kreas en dua terminalo konektita al via kliento.

Sed ĉiu povas tranĉi kaj alglui. Anstataŭe, pensu kiel administranto ĉar vi ne ĉiam havos aliron al la GUI kie tranĉi/alglui operaciojn eblas. Kopiu la dosierojn al la hejma dosierujo de via uzanto (por ke la fora scp-operacio povu aliri ilin), kaj poste uzu chown por ŝanĝi la proprieton de la dosieroj de radiko al regula ne-radika uzanto por ke la fora scp-ago povu esti farita. Certigu, ke ĉiuj viaj dosieroj estas nuntempe instalitaj kaj alireblaj. Vi movos ilin al la kliento iom poste:

# 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

Kun plena aro de ĉifradaj ŝlosiloj preta por iri, vi devas diri al la servilo kiel vi volas krei la VPN. Ĉi tio estas farita per la dosiero server.conf.

Reduktante la nombron da klavopremoj

Ĉu estas tro da tajpado? Ekspansio kun krampoj helpos redukti ĉi tiujn ses komandojn al du. Mi certas, ke vi povas studi ĉi tiujn du ekzemplojn kaj kompreni kio okazas. Pli grave, vi povos kompreni kiel apliki ĉi tiujn principojn al operacioj implikantaj dekojn aŭ eĉ centojn da elementoj:

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

Agordi la server.conf dosieron

Kiel vi povas scii kiel devus aspekti la dosiero server.conf? Memoru la ŝablonon easy-rsa-dosierujo, kiun vi kopiis de /usr/share/? Kiam vi instalis OpenVPN, vi restis kun kunpremita agorda ŝablono-dosiero, kiun vi povas kopii al /etc/openvpn/. Mi konstruos la fakton, ke la ŝablono estas arkivita kaj konigos al vi utilan ilon: zcat.

Vi jam scias pri presi la tekstan enhavon de dosiero al la ekrano per la kata komando, sed kio se la dosiero estas kunpremita per gzip? Vi ĉiam povas malzipi la dosieron kaj tiam kato feliĉe eligos ĝin, sed tio estas unu aŭ du pliaj paŝoj ol necese. Anstataŭe, kiel vi eble divenis, vi povas elsendi la komandon zcat por ŝargi la malpakitan tekston en memoron en unu paŝo. En la sekva ekzemplo, anstataŭ presi tekston al la ekrano, vi redirektos ĝin al nova dosiero nomata server.conf:

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

Ni flankenlasu la ampleksan kaj helpeman dokumentaron kiu venas kun la dosiero kaj vidu kiel ĝi povus aspekti kiam vi finos redaktadon. Notu, ke la punktokomo (;) diras al OpenVPN ne legi aŭ ekzekuti la sekvan linion (Listo 10.2).

Libro Linukso en Ago
Ni trarigardu iujn ĉi tiujn agordojn.

  • Defaŭlte, OpenVPN funkcias sur la haveno 1194. Vi povas ŝanĝi ĉi tion, ekzemple, por plu kaŝi viajn agadojn aŭ eviti konfliktojn kun aliaj aktivaj tuneloj. Ĉar 1194 postulas minimuman kunordigon kun klientoj, estas plej bone fari ĝin tiel.
  • OpenVPN uzas aŭ Transmission Control Protocol (TCP) aŭ User Datagram Protocol (UDP) por transdoni datumojn. TCP povas esti iom pli malrapida, sed ĝi estas pli fidinda kaj pli verŝajne komprenebla de aplikaĵoj kurantaj sur ambaŭ finoj de la tunelo.
  • Vi povas specifi dev tun kiam vi volas krei pli simplan, pli efikan IP-tunelon kiu portas datumenhavon kaj nenion alian. Se, aliflanke, vi bezonas konekti plurajn retajn interfacojn (kaj la retojn, kiujn ili reprezentas), kreante Ethernet-ponton, vi devos elekti dev-tapon. Se vi ne komprenas, kion ĉi tio signifas, uzu la tun argumenton.
  • La sekvaj kvar linioj donas al OpenVPN la nomojn de la tri aŭtentikigdosieroj sur la servilo kaj la dh2048-opcia dosiero, kiun vi kreis pli frue.
  • La servila linio fiksas la gamon kaj subretan maskon, kiuj estos uzataj por asigni IP-adresojn al klientoj post ensaluto.
  • La laŭvola puŝparametro "itinero 10.0.3.0 255.255.255.0" permesas al malproksimaj klientoj aliri privatajn subretojn malantaŭ la servilo. Fari ĉi tiun funkcion ankaŭ postulas starigi la reton sur la servilo mem por ke la privata subreto sciu pri la OpenVPN-subreto (10.8.0.0).
  • La port-share localhost 80-linio permesas al vi redirekti klientan trafikon venantan sur la haveno 1194 al loka retservilo aŭskultanta sur la haveno 80. (Ĉi tio estos utila se vi uzos la retservilon por testi vian VPN.) Ĉi tio nur funkcias. tiam kiam la tcp-protokolo estas elektita.
  • La linioj de uzanto nobody kaj group nogroup devas esti ebligitaj per forigo de la punktokomoj (;). Devigi forajn klientojn funkcii kiel neniu kaj neniu grupo certigas ke sesioj sur la servilo estas senprivilegiaj.
  • log specifas, ke nunaj protokoloj anstataŭigos malnovajn enskribojn ĉiufoje kiam OpenVPN estas komencita, dum log-append aldonas novajn enskribojn al la ekzistanta protokolo-dosiero. La openvpn.log dosiero mem estas skribita en la dosierujo /etc/openvpn/.

Aldone, kliento-al-klienta valoro ankaŭ estas ofte aldonita al la agorda dosiero por ke pluraj klientoj povas vidi unu la alian krom la OpenVPN-servilo. Se vi estas kontenta pri via agordo, vi povas komenci la OpenVPN-servilon:

# systemctl start openvpn

Pro la ŝanĝiĝanta naturo de la rilato inter OpenVPN kaj systemd, la sekva sintakso foje povas esti postulata por lanĉi servon: systemctl start openvpn@server.

Ruli ip addr por listigi la retajn interfacojn de via servilo nun devus eligi ligilon al nova interfaco nomata tun0. OpenVPN kreos ĝin por servi alvenantajn klientojn:

$ 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

Vi eble bezonos rekomenci la servilon antaŭ ol ĉio ekfunkcios plene. La sekva halto estas la klienta komputilo.

10.1.2. Agordante la OpenVPN-klienton

Tradicie, tuneloj estas konstruitaj kun almenaŭ du elirejoj (alie ni nomus ilin kavernoj). Taŭge agordita OpenVPN sur la servilo direktas trafikon en kaj el la tunelo unuflanke. Sed vi ankaŭ bezonos iun programaron funkciantan ĉe la klienta flanko, tio estas, ĉe la alia fino de la tunelo.

En ĉi tiu sekcio, mi fokusos permane agordi iun tipon de Linuksa komputilo por funkcii kiel OpenVPN-kliento. Sed ĉi tio ne estas la sola maniero, laŭ kiu ĉi tiu ŝanco disponeblas. OpenVPN subtenas klientajn aplikaĵojn, kiuj povas esti instalitaj kaj uzataj sur labortabloj kaj tekkomputiloj, kiuj funkcias Vindozon aŭ macOS, same kiel Android kaj iOS-poŝtelefonoj kaj tablojdoj. Vidu openvpn.net por detaloj.

La OpenVPN-pakaĵo devos esti instalita sur la klienta maŝino kiel ĝi estis instalita sur la servilo, kvankam ĉi tie ne bezonas easy-rsa ĉar la ŝlosiloj, kiujn vi uzas, jam ekzistas. Vi devas kopii la ŝablonan dosieron client.conf al la dosierujo /etc/openvpn/, kiun vi ĵus kreis. Ĉi-foje la dosiero ne estos zipita, do la regula cp-komando faros la laboron ĝuste:

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

La plej multaj el la agordoj en via client.conf dosiero estos sufiĉe memklaraj: ili devus kongrui kun la valoroj sur la servilo. Kiel vi povas vidi el la sekva ekzempla dosiero, la unika parametro estas fora 192.168.1.23 1194, kiu diras al la kliento la IP-adreson de la servilo. Denove, certigu, ke ĉi tio estas via servila adreso. Vi ankaŭ devus devigi la klientan komputilon kontroli la aŭtentikecon de la servila atestilo por malhelpi eblan man-en-la-mezan atakon. Unu maniero fari tion estas aldoni la linion remote-cert-tls-servilon (Listo 10.3).

Libro Linukso en Ago
Vi nun povas iri al la dosierujo /etc/openvpn/ kaj ĉerpi la atestajn ŝlosilojn el la servilo. Anstataŭigu la IP-adreson aŭ domajnan nomon de la servilo en la ekzemplo per viaj valoroj:

Libro Linukso en Ago
Nenio ekscita verŝajne okazos ĝis vi rulos OpenVPN sur la kliento. Ĉar vi devas pasi kelkajn argumentojn, vi faros ĝin de la komandlinio. La argumento --tls-client diras al OpenVPN, ke vi agos kiel kliento kaj konektos per TLS-ĉifrado, kaj --config montras al via agorda dosiero:

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

Legu atente la komandan eligon por certigi, ke vi estas ĝuste konektita. Se io misfunkcias la unuan fojon, ĝi povas esti pro miskongruo en agordoj inter la servilo kaj kliento agordaj dosieroj aŭ reto-konekto/fajroŝirmilo problemo. Jen kelkaj problemoj pri solvo.

  • Atente legu la eligon de la operacio OpenVPN sur la kliento. Ĝi ofte enhavas valorajn konsilojn pri kio ĝuste ne povas esti farita kaj kial.
  • Kontrolu la erarmesaĝojn en la dosieroj openvpn.log kaj openvpn-status.log en la dosierujo /etc/openvpn/ sur la servilo.
  • Kontrolu la sistemajn protokolojn ĉe la servilo kaj kliento por OpenVPN-rilataj kaj tempigitaj mesaĝoj. (journalctl -ce montros la plej lastatempajn enskribojn.)
  • Certigu, ke vi havas aktivan retan konekton inter la servilo kaj la kliento (pli pri tio en Ĉapitro 14).

Pri la aŭtoro

David Clinton - sistemadministranto, instruisto kaj verkisto. Li administris, skribis pri, kaj kreis edukajn materialojn por multaj gravaj teknikaj fakoj, inkluzive de Linukso-sistemoj, nuba komputado (precipe AWS), kaj ujteknologioj kiel Docker. Li skribis la libron Lernu Amazon Retajn Servojn en Monato de Tagmanĝoj (Manning, 2017). Multaj el liaj videotrejnadkursoj troveblas ĉe Pluralsight.com, kaj ligiloj al liaj aliaj libroj (pri Linukso-administrado kaj servila virtualigo) estas haveblaj ĉe bootstrap-it.com.

» Pliaj detaloj pri la libro troveblas ĉe retejo de la eldonisto
» Enhavtabelo
» Eltiraĵo

Por Khabrozhiteley 25% rabato uzante kuponon - linux
Post pago de la papera versio de la libro, elektronika libro estos sendita retpoŝte.

fonto: www.habr.com

Aldoni komenton