Evilham

Evilham.com

FreeBSD: Installieren

Introducció

He hagut de fer servir les meves paraules d’estiu per qüestions personals i professionals; així que la continuació d’aquell fil d’idees ha trigat una mica en arribar.

Per coses de la vida, aquests dies ha arribat un mini-server a les meves mans. Així que agafarem un petit desviament en coses “tècniques” abans de tornar al per què, que és segurament la única cosa que importa al final.

Aquí agafarem aquest mini-server i hi instal·larem FreeBSD com a sistema operatiu.

Per què és interessant? Doncs aquesta màquina tindrà certs serveis digitals que sempre està bé tenir sota el nostre control.

I el procés, des de zero, no és una cosa que es documenti habitualment en aquesta llengua ;-).

Taula de continguts

Què és FreeBSD?

FreeBSD és un “Sistema Operatiu obert i gratuït, semblant o compatible amb Unix”.

Això, pels que som resultat dels mitjans i l’educació digital que ens forma per ser consumidors passius, potser implica directament hores i hores de lectura.

Anem a fer-ho una mica més fàcil:

  • Sistema operatiu: sense això, un ordinador és un aparell més aviat inútil. No ens permetria engegar cap programa, llegir cap correu, no hi podríem fer res. El sistema operatiu és necessari, perquè és el que “sap parlar” amb els components físics que conformen l’ordinador. Tot i ser necessari, no sempre és evident; en general, el que volem com a usuaris és fer servir els programes que necessitem. Però en algun moment veurem que tenir la possibilitat de modificar el sistema a la nostra voluntat, també te els seus avantatges.
  • Obert i gratuït: aquest és un gran tema, i el món està dividit en interpretacions. Bàsicament, obert, vol dir que tenim accés al codi font del sistema, és a dir als fitxers de text que ha escrit algun humà, molt sovint de manera altruista, que després un ordinador processa per convertir-ho en instruccions que pugui executar. I gratuït, vol dir que no cal pagar res per fer-ho servir. El món es divideix en interpretacions per la manera en que el programari pot ser obert i gratuït. Pels que tinguin curiositat, internet està plena de diverses perspectives en el tema de les llicències, per exemple BSD (permissives) o GPL (copyleft).
  • Semblant a Unix: Unix és un sistema operatiu que es va crear vora els anys 1970, amb unes idees molt clares que han marcat el desenvolupament del món dels ordinadors. Aquell sistema, era comercial i requeria unes llicències, però es distribuïa amb el codi font, cosa que va fer que es fes molt popular a les universitats. En particular, a Berkeley (d’aquí la B de BSD – la distribució de programari de Berkeley). Per qüestions de llicència i propietat intel·lectual, el codi de BSD ja no està basat en el codi de Unix, però sí que manté les idees bàsiques i un alt nivell de compatibilitat (una cosa que es diu compatibilitat POSIX).

Per què FreeBSD?

Perquè funciona, funciona bé, i és senzill d’administrar.

Això no vol dir que altres sistemes no funcionin bé o siguin difícils d’administrar; fins a un cert punt, el tema va “a gustos”.

Bàsicament, en aquest punt de la meva vida professional, me’n surto força bé amb el sistema que em posin davant; ara, també tinc clar que FreeBSD (i OpenBSD en alguns casos) és el que em permet fer més, més ràpid, i sense preocupar-me gaire del com perquè la càrrega mental associada és mínima.

Naturalment hi ha altres alternatives que compleixin amb “obert i gratuït”, per exemple Linux; però hi ha tendències preocupants al món de Linux actualment.

Un altre factor per no fer servir Linux és que la experiència ja m’ha portat a “aprendre Linux” tres vegades a la meva vida (sense comptar haver fet servir diverses distribucions, que fins a cert punt són cadascuna un món). És a dir, canvia massa ràpid i en general sense prou bons motius; o bé perquè els canvis es fan massa ràpid i s’arriba a solucions poc ideals o bé perquè els problemes que s’hi estan solucionant, són els problemes de quatre empreses, i no els problemes dels usuaris.

Diferències de desenvolupament amb Linux

Els sistemes BSD es desenvolupen en conjunt, és a dir que quan obtenim el codi font o un binari, realment estem obtenint tot el que ens cal per compilar o instal·lar un sistema operatiu sencer amb: kernel (o nucli, més o menys la part que parla amb allò físic), i utilitats d’usuari (o world).

Sense les utilitats d’usuari, no tindríem manera d’interactuar amb el kernel, i per tant amb l’ordinador.

I, sense el kernel, els programes no poden parlar amb la part física, i per tant són capaços ni d’ensenyar-nos alguna cosa per pantalla (és una aproximació més o menys intuïtiva i no 100% acurada).

Això sembla una diferència menor, però realment és un gran avantatge; en tenir control de les utilitats d’usuari i també del kernel, hi ha també una co-responsabilitat, és a dir, si es vol introduir un canvi en el kernel, es fa necessari fer en paral·lel els canvis adients a les utilitats d’usuari.

I també si es fan canvis en una utilitat d’usuari, cal assegurar-se que les altres utilitats que fan part del sistema operatiu, mantinguin una compatibilitat i consistència general.

Això, al món de Linux no és possible, perquè les utilitats d’usuari solen ser “GNU” (o busybox) i Linux és únicament el kernel. D’aquesta manera, la responsabilitat pels canvis es mou d’una banda a l’altra, i, molt sovint, els canvis no tenen lloc, i s’acaben generant noves eines per salvaguardar les limitacions de les eines existents.

Per exemple, ifconfig, la comanda tradicional per administrar interfícies de xarxa, a Linux es considera arcaica, perquè ara existeix ip. I no és que ip sigui dolent, és que és un canvi, que només és necessari, perquè els problemes inherents al sistema de desenvolupament no són adreçables.

En canvi, als BSD, ifconfig és molt més potent del que mai ho va ser a Linux i també te molt més sentit; aquest desenvolupament conjunt del kernel i les utilitats d’usuari hi te molt a veure.

Instal·lant FreeBSD

Com sempre, el primer pas és descarregar l’instal·lador, això en en aquest cas es fa al web de FreeBSD.

Ens trobem amb la primera decisió: quina versió triem? Depèn de l’ús de cada, així que anem a entendre com funcionen.

Versions / línies de suport

Hi ha 3 línies del sistema operatiu suportades. Per mantenir-se al dia, recomanaria subscriure’s a la llista d’anuncis de FreeBSD.

Com a regla general, per un sistema que vulguem que funcioni sense problemes, recomanaria fer servir sempre l’última versió suportada de RELEASE.

CURRENT – Futur 13.0

Aquesta és la línia de desenvolupament, literalment és on vénen a parar tots els canvis, tant al kernel com a les utilitats d’usuari. Per aquest motiu, no es recomana per usuaris novells, sinó per aquells que vulguin ajudar el desenvolupament, encara que sigui només provant i trobant problemes. Havent dit això, la línia de desenvolupament sol ser molt estable, hi ha empreses com Netflix que actualitzen un parell de vegades al mes a la línia de desenvolupament i jo ho faig gairebé a diari al meu sistema principal.

Al món de BSD hi ha una dita, i és que si no vols que els bugs/problemes t’arribin, els has de trobar tu abans. Com més persones ajudin a provar la línia de desenvolupament, més segurs podem estar que les altres línies de suport no tenen grans problemes.

Quan ja ha passat un temps (mínim dos anys) i les persones que desenvolupen el sistema troben que és el moment, aquesta línia es “congela” i després d’una feina de solucionar problemes diversos, acabar d’actualitzar documentació i demés, s’acaba convertint en una versió RELEASE.

RELEASE – Actualment 12.1

Aquesta és l’última versió major (en aquest cas 12, amb 1 essent la versió menor). Des del moment en que es va publicar la versió 12.0, aquesta línia de desenvolupament te garantit el suport (actualitzacions de seguretat, disponibilitat de binaris oficials, …) un mínim de 5 anys.

És a dir, que FreeBSD 12 te suport, com a mínim, fins el 30 de Juny de 2024.

Ara, quan es publica una versió menor, com ara la 12.2 que vindrà aviat, la versió menor anterior (l’actual 12.1) deixa de ser suportada 3 mesos després.

És a dir, que tenim un període de 3 mesos per fer una actualització menor; és una cosa que cal tenir en compte. Normalment s’avisa amb mesos d’antelació.

STABLE – Actualment 11.4 [i 11.3]

Les versions STABLE són antigues RELEASE que encara estan suportades, és a dir, des que es va publicar FreeBSD 11.0, s’ha publicat la 12.0.

Però com que la versió FreeBSD 11 te suport garantit de 5 anys, seguirà existint, com a mínim, fins el 10 d’octubre de 2021.

Ara, veiem que a data d’avui hi ha dues versions de FreeBSD 11, això vol dir que fa menys de 3 mesos que es va publicar la versió 11.4 i, per tant, la versió 11.3 encara està suportada.

En efecte, FreeBSD 11.4 es va publicar el 16 de juny de 2020, i per tant FreeBSD 11.3 deixa de tenir suport el 30 de setembre de 2020.

Muntant un USB d’instal·lació

A data d’avui, amb el criteri que he explicat anteriorment, ens decidiríem per FreeBSD 12.1, així que podem descarregar la imatge d’instal·lació (també hi ha imatges per màquines virtuals pre-instal·lades).

En general, voldrem descarregar el fitxer -disc1.iso de la nostra arquitectura de hardware, si no sabem el que és, segurament sigui amd64. És a dir que volem el fitxer FreeBSD-12.1-RELEASE-amd64-disc1.iso.

Pels paranòics entre nosaltres, els anuncis d’una nova versió també es publiquen signats. I el llistat de claus PGP del projecte es troba al famòs Handbook de FreeBSD.

Comprovant la signatura, i després la integritat del fitxer, podem estar segurs que el fitxer que hem descarregat, és el fitxer que les persones que desenvolupen el sistema operatiu han generat.

Un cop l’hem descarregat, hi ha utilitats que ens ajuden a gravar aquesta imatge en un CD o, molt millor, en un USB.

Si heu descarregat la imatge sota Windows, rufus és un programa molt bo per fer-ho.

Si, en canvi, ho heu fet en Linux o en un Mac, el més senzill és fer-ho amb la comanda dd (si algú te un mètode més “gràfic”, que m’avisi ;-)). En particular:

# dd if=FreeBSD-12.1-RELEASE-amd64-disc1.iso \
     of=/dev/EL_MEU_USB bs=1m conv=sync

Cal que us assegureu de reemplaçar EL_MEU_USB amb el nom del vostre USB, recordeu que si us equivoqueu molt, això pot voler dir perdre les vostres dades!

Instal·lant!

Havent escrit la imatge al meu USB, engego el micro-server iniciant des de l’USB.

I ara ve la part “fàcil”, on un menú ens anirà guiant per instal·lar FreeBSD; la majoria de les decisions es poden canviar un cop instal·lat el sistema, així que no és molt crític, i els valors per defecte són raonables en general.

  1. Sense tocar res veig una pantalla de benvinguda que em dóna a triar entre Install, Shell i LiveCD; volem Install.
  2. Configuro el meu teclat
  3. Li dono un nom a la màquina
  4. Desactivo kernel-dbg i lib32 que no em fan falta (tampoc fa mal deixar-los)
  5. Trio instal·lació automàtica amb ZFS (Auto (ZFS))
  6. Vaig a Pool Type/Disks i trio stripe en el disc dur que vull
  7. Configuro Encrypt Swap com YES
  8. Vaig a Install: Proceed with installation
  9. Confirmo els canvis al disc dur (si m’he equivocat, podria perdre dades!)
  10. Espero aproximadament 2 minuts mentre el sistema s’instal·la
  11. Configuro una contrasenya pel super usuari (no hi ha feedback visual, però està agafant els vostres caracters. Després desactivarem la contrasenya)
  12. Trio la interfície de xarxa principal (en tinc dues)
  13. Confirmo que vull IPv4 amb DHCP (és el més habitual)
  14. Confirmo que vull IPv6 amb SLAAC (hauria de ser més habitual)
  15. Confirmo la configuració que hem obtingut de la xarxa
  16. La hora interna de la meva màquina és UTC (així no hi ha problemes de canvis horaris)
  17. Configuro la meva zona horària
  18. Confirmo la data i l’hora
  19. Com a serveis activo sshd, ntpd i powerd, desactivo dumpdev (es pot canviar a posteriori)
  20. Activo totes les opcions de seguretat a System Hardening (es pot canviar a posteriori)
  21. No afegeixo usuaris, ho faig a posteriori
  22. Trio Exit per indicar que ja hem instal·lat el sistema
  23. Trio que vull una consola (shell) al nou sistema abans de reiniciar
  24. Edito /etc/sshd/sshd.conf amb vi /etc/sshd/sshd.conf per habilitar les sessions remotes de super usuari canviant #PermitRootLogin no per PermitRootLogin yes (ho canviarem tot seguit, no és una configuració gens segura)
  25. Tanco aquesta consola amb exit
  26. Trio Reboot i trec l’USB d’instal·lació
  27. El sistema inicia i ja el puc acabar de configurar remotament

És a dir, que esperem un total de 2 minuts i contestem preguntes majoritàriament senzilles; el procès triga en total uns 5 minuts si ja coneixem les preguntes i uns 20 minuts si no.

Assegurant el sistema una mica

Compte! Durant la instal·lació hem près una decició temporal que cal desfer tan aviat com sigui possible: hem de deshabilitar l’inici de sessió remot amb contrasenya.

Si no ho fem, com que hem deixat accés de super usuari remot amb contrasenya, potencialment, algú a la nostra xarxa podria intentar esbrinar la contrasenya i fer-se amb el control de l’equip.

El motiu d’aquesta decisió és, que jo faig servir autenticació amb claus públiques, però configurar aquesta autenticació només amb un teclat és una mica farragós.

Per això inicio sessió al micro-server amb usuari root i la contrasenya que he configurat abans. Executo:

# ifconfig
bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
    options=c019b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,VLAN_HWTSO,LINKSTATE>
    ether XX:XX:XX:XX:XX:XX
    inet6 fe80::9640:XXXX:XXXX:XXXX%bge0 prefixlen 64 scopeid 0x1
    inet6 2a0f:de00:X:X:X:X:X:X prefixlen 64 autoconf
    inet 192.168.1.12 netmask 0xfffff000 broadcast 192.168.1.255
    media: Ethernet autoselect (1000baseT <full-duplex>)
    status: active
    nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>

Que em diu que la IP local de la màquina és 192.168.1.12.

I llavors des del meu ordinador:

> ssh root@192.168.1.12
root@host:~ # mkdir .ssh; chmod 700 .ssh
root@host:~ # echo 'ssh-rsa AAAAB3NzaC1yc2EAAA[..] evilham.pgp_auth' \
    > .ssh/authorized_keys
root@host:~ # chmod 400 .ssh/authorized_keys

És a dir, configuro la meva clau pública per iniciar sessió (els detalls… són tema d’un altre dia).

I ara ja puc desactivar l’inici de sessió amb contrasenya amb vi /etc/ssh/sshd_config i canviant PermitRootLogin yes per PermitRootLogin without-password i reiniciant el servei amb service sshd restart.

Conclusió

Fins aquí avui, ara tenim un sistema FreeBSD instal·lat de nou, que servirà com a base per fer-hi “qualsevol cosa”.

Abans d’això caldrà configurar el sistema d’una manera una manera més segura, i d’una manera automatizada, per si mai cal reinstal·lar-ho.

Totes aquestes coses les configuro automàticament amb cdist, que és un tema prou gran per per un altre dia.

PS: 2826 paraules han estat escrites pels micos infinits.