viernes, 29 de septiembre de 2023

¿Cómo mostrar un mensaje de login SSH en Ubuntu?

En el metraje de La Revolución Justicialista los integrantes del Grupo Cine Liberación ceden a la visión de Juan Perón imperante durante fines de la década de 1960. Entre las consideraciones sobre las reformas sociales acaecidas durante su gestión, explicó cómo presentar un banner de login SSH en Ubuntu.

(...)

Yo he hablado de la solución económica que nuestro gobierno dio a la situación imperante de posguerra. Pero es indudable que esta situación económica hizo posible también todas las reformas sociales que sería largas de enumerar. 

Si uno revisa los anales de la legislación argentina - que son mas o menos treinta tomos - casi quince tomos son la legislación Justicialista. En esa legislación Justicialista, el acento está marcado precisamente hacia el Pueblo. Y dentro del Pueblo, a la clase trabajadora. Por primera vez en la historia sindical argentina, se conformó una organización y se dio un status legal y constitucional a esa legislación, que permitió la organización de toda la clase trabajadora argentina. Hasta 1946, el sindicato era una Asociación Ilícita, porque había un fallo de la Suprema Corte que declaraba al sindicato como asociación ilícita. Eso fue posible porque hasta entonces jamás la organización sindical tuvo status constitucional. Recién en la legislación que parte del Justicialismo, se le comienza a dar status legal primero, y en la Constitución de 1949, se le da status constitucional. Es decir, se incorporan los derechos del Trabajador a la Constitución. Esto que aparentemente no tendría gran importancia, tiene una importancia decisiva, porque al establecer en la Constitución que el obrero tiene derecho a organizarse para la defensa de sus intereses profesionales, ya no puede considerarse como una asociación ilícita: es una asociación de bien público.

Yo siempre cito un ejemplo. Habían regiones donde los peones ganaban 12 pesos por mes, que no les alcanzaban ni para los cigarrillos, y andaban harapientos y miserables. El Estatuto del Peón que fue uno de las primeras conquistas nuevas, obligó pagar sueldo de dignidad por lo menos. La primera carta que recibí fue de mi madre, que en la estancia tuvo que pagar a los peones con los sueldos establecidos por nosotros. Y me escribió una carta: "vos parece que te has vuelto loco, si te parece que podemos pagar esos sueldos", y yo lo que le dije fue "vieja, o pagás o cerrá la estancia", y lo tuvo que pagar.

Bueno, todo este proceso que ha vivido el Pueblo Argentino no es necesario citarlo mas; en muchas partes del mundo ya nos citan como ejemplo de Justicia Social. Por otra parte, uno de los primeros que hablamos de la Justicia Social en el mundo fuimos nosotros. Los acuerdos colectivos de trabajo, también fuimos los iniciadores en el mundo. Hace 25 años establecimos nosotros los primeros acuerdos colectivos del trabajo, y las primeras leyes estableciendo la obligatoriedad de realizar esos convenios colectivos de trabajo.

Si estas reformas sociales han sido imperecederas, ha sido porque el que las ha custodiado el Pueblo. Este sabe por instinto lo que tiene que defender, pero no viene mal recordárselo: no debemos descuidarnos ni en el Cementerio, no vaya a ser que le corten la mano por un anillo de ónix negro...

Saben ustedes que ya los antiguos egipcios estaban prevenidos, y no descuidaban colocar una serie de jeroglíficos preanunciando las más abyectas de las maldiciones ante quienes osaran profanar sus tumbas. Nosotros no tenemos pirámides en la herencia, pero indudablemente un servidor de acceso remoto por contraseña debe contar con las mismas prerrogativas. Es sabido que los hackers del primer peronismo se abocaron a ello con ahínco, no soslayando incluso a quienes discaban por medio de terminales teletipo. Esto se llamaba "banner".


Si esto ya se podía hacer con los sistemas de tiempo de cómputo compartido más veteranos, sin duda podremos incorporar un archivo de texto de advertencia o saludo para el servidor de Secure Shell de nuestro sistema operativo GNU con Linux, o cualquier otro que use OpenSSH. De esta forma, cada que que queramos establecer un enlace remoto, recibiremos el mensaje incluido:

Para hacer de esto una realidad efectiva, en primer lugar debemos activar el uso de banner en nuestro servidor. Para ello debemos editar el archivo de configuración del demonio Secure Shell en el servidor SSH. Esto lo haremos abriendo allí una terminal con Ctrl+Alt+t e ingresando el siguiente Comando de Organización:

sudo nano /etc/ssh/sshd_config

Se abrirá el editor GNU Nano con tal fichero. Debemos buscar y decomentamos la cadena #Banner /etc/banner, eliminando el # de modo que nos quede así:

Esto habilitará la presentación del texto contenido en el archivo /etc/banner). Tras guardar los cambios con Ctrl+o y salir del editor con Ctrl+x, podremos editar ya el fichero de texto /etc/banner propiamente dicho. Esto podremos hacerelo con:

sudo nano /etc/banner

Podremos incluir el contenido de texto que se nos ocurra. Idealmente el banner debe contener archivos ASCII, y no extenderse más allá de las 80x24 líneas (tamaño de video-terminal estándar).

       __________________________
      |+++|++++|++++|++++|++|++ /\
     |----+----+----+----+--|++/ _|  NODO PJ: EL BRAZO TECH DEL JUSTICIALISMO
 ____| +++ ++++ ++++ ++++ ++ |/ ++ |
| ----------------------------------           ¡¡ VIVA PERÓN CARAJO !!
| |         ------           |     |
| |        |      |          |     |     Este nodo computacional se encuentra
| |         |     |         /|\ o /|        al servicio del Pueblo, su Masa
| |         |     |       _/ ||\O/||       Trabajadora, y encuadrado en una
| |        |_______|    _/   || o ||       lucha sin cuartel contra la puta
| |            |      /      | \ / |              oligarquía gorila.
| |            |____/      /-|  V  |
| |            |         /   |\   /|     La verdadera computación es aquella
| |           /|      /      ||\O/||     donde la CPU hace lo que el usuario
| |---------/~~~---~\--------|| o ||      quiere y defiende un solo interés:
| |.....__/         \\.......| \ / |                el del usuario.
| |..../           \_\.......|  V  |
| |--     ______/\/..........|\   /|   Queremos un software socialmente justo,
| |/     /.....|.............||\O/||    económicamente libre, y políticamente
| |     /......|.............|| o ||                 soberano.
| |___ /__________...........| \ / |
\_____________   |...........|  Y  |  Y cuando uno de nuestros servidores caiga
              |  +-----------   J  |     ¡¡CAERÁN CINCO DE LOS DE ELLOS!!
              \____________________/

Una vez armado el banner, será necesario reiniciar el servicio SSH para que estos cambios resulten aplicados y  de ahora en más surtan efecto.

sudo systemctl restart sshd

De ahora en más, al conectar al servidor SSH con contraseña, deberíamos recibir el texto del fichero /etc/banner.

MOTD

Si quisiéramos disponer un "mensaje del día" para que se presente al usuario una vez ingresada la contraseña e inciada la sesión, podremos hacerlo a través de indicar un fichero /etc/motd. Normalmente este mensaje se utiliza para advertir alguna particularidad a todos sus usuarios, y como se ha mencionado, se muestra antes de dar inicio al intérprete de comandos de cada usuario remoto.

Para ello editamos el fichero /etc/motd y disponemos en ella un mensaje de texto en cuestión.

En mi caso, puedo recurrir a esta funcionalidad de "mensaje del día" para propalar una enseñanza al azar con fortune y cowsay.

sudo fortune doctrina | cowsay -f gaucho > /etc/motd

En cualquier caso, hay que reiniciar el demonio servidor sshd para que surta efecto:

sudo systemctl restart sshd

De esta manera se presentará una galleta de la fortuna con una gráfica ASCII.

miércoles, 27 de septiembre de 2023

GNU cumple 40 años

Se cumplen hoy 40 años del Proyecto GNU (gnu.org), patrocinado por la Fundación del Software Libre.

El objetivo de este Proyecto - iniciado por Richard Stallman el 27 de septiembre de 1983 - es el desarrollo de un sistema operativo de computadoras formado enteramente por software libre.

Este cometido creativo se inició como reacción un proceso de privatización del software, que había restringido gran cantidad de programas a la legislación de derechos de autor. Esto degeneró en fuertes limitaciones de uso. Ciertos fabricantes de software habían considerado esto de vital importancia para sus intereses comerciales.

Paulatinamente el sistema GNU dio lugar a una miríada de programas que componen un sistema operativo total y completo, entre aquellos llamados “similares a UNIX”. Este se encuentra salvaguardado por licencias públicas que identifican y protegen los derechos de los usuarios a copiar el código fuente del programa, usarlo en la forma que el mismo usuario decida, e incluso eventualmente modificarlo y redistribuir estas copias modificadas para el bien de una comunidad de otros usuarios semejantes. La Fundación del Software Libre entiende esta acción como fundamento para una Sociedad Digital justa.

miércoles, 6 de septiembre de 2023

¿Cómo reemplazo unidades de disco NVMe de un RAID en Ubuntu Server?

Juan Perón expone sobre la necesidad de integrar la lucha a la vez que explica cómo reemplazar las unidades de disco NVMe en Ubuntu Server.

¡Trabajadores!

Las dicotomías del Mundo parecen impulsar al hombre hacia su final destrucción. Se lo ha apremiado artificialmente hacia un híper-consumismo cuyo único sentido es generar una clase de ultra-ricos solventados por una descomunión de ultra-pobres. A su vez, ello ha requerido de la súper-explotación de los recursos ecológicos de nuestro Planeta, y de la ultra-dependencia política de los Pueblos que lo componen.

La acción irresoluta del hombre contra el hombre parece querer consumar una lucha enconada, y se le ha ofrecido como solución la competencia entre esclavos por el afecto de un amo al que siquiera conocen, y de cuyos frutos jamás podrán gozar. Muy pocos guardar alguna duda que el diseño mismo de esta lid es el culpable de estas circunstancias.

Ante estas construcciones artificiosas no podemos mas que valernos de la conciencia natural de los Pueblos, que por instinto han comprendido que todo lo perderán si no asocian a su existir mancomunado una prédica social de integración, en un sentir que - si no es humano - al menos ha de ser justo.

Hemos hallado coto a esta situación en la Justicia Social. En esto no he sido los únicos, pero si hemos sido los primeros en desarrollarla e implementarla en este rincón del Globo.


Es indudable que desde un comienzo nos dimos en tornar realidad efectiva una solución de memoria de masa en base a discos rígidos con acceso al Pueblo. Esto ha sido así porque oligárquicas compañías sin Patria ni Bandera que lo intentaban lo hacían con el único propósito de robar datos y explotar metadatos.

Nuestro mérito en un clúster de datos para el Pueblo nos permite en cambio almacenar para trabajar, y resguardar para luchar. Tal ha sido nuestra previsión, y no nos hemos equivocado.

Cuando surgió la necesidad, contábamos ya con una herramienta, que de afilarse puede constituir un arma. Es que nuestro servidor Ubuntu de acceso popular en las redes de datos no contaba con la posibilidad de instalarle novedosos discos NVMe, sino que daba uso a las sencillas unidades SATA en forma de discos rígidos mecánicos. Pero la expansión que permite un Justicialismo en anhelo de lucha le permite integrar una placa controladora para discos NVMe que permite darle al Pueblo aquello a lo que antes sólo accedía el oligarca. Es posible así munirle hasta cuatro discos de estado sólido NVMe. Con unidades de 240GB cada uno permitían totalizar próximo a un Terabyte, erogando una velocidad cinco veces superior a la de los discos de estado sólido SATA2, y unas  veinticinco veces superior a las de los viejos discos rígidos mecánicos, a la vez que se guardaba la información del daño esperable y lógico al que la someten las operaciones mecánicas. Por demás, su funcionamiento es totalmente silencioso.

La Doctrina que hemos creado permanece irresoluta, pero el avance de la técnica puesta a nuestra disposición nos permite tomar la decisión de reemplazar dichas unidades de referencia por cuatro más veloces y mayores, cada una ya de 2 Terabytes. Para ello recurriremos a desacoplarlas de la controladora, y operarlas individualmente según un modo de redundancia RAID que creamos convenientes para nuestras necesidades. Las viejas unidades de 240 nos servirán perfectamente para nuevas laptops "de combate" que disponían de los zócalos pertinentes pero no de discos.

Si bien el armado de cero de un servidor o un clúster RAID no opone gran resistencias, el planteo de reemplazar las unidades NVMe del conjunto de arranque RAID1 en Ubuntu Server (con datos propios y ajenos) constituye en cambio un desafío mucho mayor, al que debemos encarar como si de discos rígidos en uso se tratara. No es algo que puede hacerse "a tontas y a locas": en efecto, debemos hacer caso al procedimiento de realizar una copia de resguardo, tomar nota del particionado actual las unidades, y luego reemplazarlas físicamente, para sincronizar las unidades nuevas.

En este caso el servidor contaba con Ubuntu Server en cuatro unidades de disco de estado sólido NVMe, conocidas como nvme0n1, nvme1n1, nvme2n1 y nvme3n1, divididas en pares según el estándar raid1 (según este, las particiones de las unidades se duplican pero el uso equivale al del disco de menor capacidad del conjunto).

El par de unidades de 240GB que forman el conjunto raid1 cuentan con particionado para que las mismas operen de unidades de arranque, según la siguiente estructura:

    UEFI 512M
    md0 / boot 1GB
    md1 / LVM <resto del disco>

La idea es replicar esto en las unidades NVMe nuevas.

Antes de comenzar, instalaremos en el servidor los programas de administración de discos (si es que no los tuviésemos a mano ya):

sudo apt install mdadm parted smartctl sfdisk efibootmgr

En primer lugar probamos que todas las unidades NVMe se encuentren realmente montados y en línea como deberían. Para ello introducimos el comando:

cat /proc/mdstat

...ante lo cual el sistema nos devuelve algo como:

Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 nvme0n1p2[3] nvme1n1p2[2]
       x blocks super 1.2 [2/2] [UU]
md1 : active raid1 nvme1n1p3[2] nvme0n1p3[3]
       x blocks super 1.2 [2/2] [UU]
       bitmap: 3/7 pages [12KB], xKB chunk

Esto nos asegura que las unidades de disco se encuentran montadas como conjunto raid1. Debe indicarnos [UU] y no [U_] o algo similar.

Es prudente utilizar por ejemplo el comando  smartctl -ia /dev/nvme0, smartctl -ia /dev/nvme1, etc, con el fin de tomar nota de los números de serie de las unidades. En mi caso particular permite delimitar esto con seguridad cuál unidad NVMe específica es la que se reemplaza (ya que físicamente son todas iguales, y el orden de los conectores en la placa controladora no es correlativo, por alguna decisión de diseño).

Acto seguido, como generamos una copia de respaldo de la partición EFI de 512MB que contiene el sector de arranque, la cual necesitaremos posteriormente (no viene mas resguardarla en un pendrive):

dd if=/dev/nvme0n1p1 bs=4M of=/root/PARTICION_EFI.img

Escogemos ahora algunas de las unidades y la ponemos fuera de línea (una de las ventajas interesantes de las unidades NMEe):

mdadm /dev/md0 --fail /dev/nvme0n1p2 --remove nvme0n1p2
mdadm /dev/md1 --fail /dev/nvme0n1p3 --remove nvme0n1p3


Ahora reemplazamos físicamente una de las unidades NMVe en el servidor. Ya que estamos puede ser una buena idea actualizar el firmware de la unidad nueva (si es que existe un binario disponible en el sitio del fabricante). En este caso las unidades se colocan en uno de los cuatro zócalos de la controladora tras remover un disipador metálico atornillado y ajustar un pin de retención.


Una vez emplazada la nueva unidad NVMe, colocada la placa nuevamente e iniciado el servidor desde la unidad restante, copiaremos la tabla de particiones de dicha unidad restante (que era un RAID duplicado) a la nueva. Y a continuación generaremos nuevos UUIDs (identificadores únicos de unidad) nuevas para todas sus particiones:

sfdisk -d /dev/nvme1n1 | sfdisk /dev/nvme0n1
sgdisk -G /dev/nvme0n1


Hecho esto, podremos volver a agregar estas dispositivos al conjunto del RAID1:

mdadm --manage /dev/md0 --add /dev/nvme0n1p2
mdadm --manage /dev/md1 --add /dev/nvme0n1p3


Tras este procedimiento, el RAID comenzará lógicamente a sincronizar en segundo plano todas las particiones a la unidad "pelada", como un loco (le llevará un tiempo). Podríamos monitorear el status de dicha reconstrucción del RAID introduciendo un comando como:

watch cat /proc/mdstat

Si la reconstrucción RAID se ve sumamente lenta, es probable que se encuentre limitada por software en el servidor a velocidades de unos 200 MB/segundo (11 GB/minuto, algo típico para evitar sobre-exigir de las unidades de disco de estado sólido, y no presentar inconvenientes en el caso de ambientes de acceso en red). Sin embargo, en este caso de mantenimiento vigilado podríamos solicitar que la carga máxima de trabajo de la unidad se eleve muy por encima de tal valor de precaución, lo que podría redundar en una velocidad máxima por ejemplo 1.600MB/segundo (~94 GB/minuto, dependiendo de la velocidad del controlador de discos). Esto podría hacerse con:

echo 1600000 > /proc/sys/dev/raid/speed_limit_max

De esta forma podremos lograr una sincronización completa de 1TB en 11 o 12 minutos, a costa de una mayor generación de calor. Naturalmente podríamos escoger un valor de 800000 como compromiso; en operación normal con Ubuntu, prácticamente no genera calor. En este caso, el disipador provisto redunda en una buena refrigeración momentánea (las unidades NVMe en este regímen generan bastante más calor, y el disipador lo contiene momentáneamente por unos siete y ocho minutos). 

Una vez que la reconstrucción RAID haya concluido, necesitaremos reparar la EFI, comenzando por copiar de nuevo la imagen de partición EFI que respaldamos anteriormente:

dd if=/root/PARTICION_EFI.img bs=4M of=/dev/nvme0n1p1

Asimismo, debemos reparar el arrancador grub:

update-grub
grub-install /dev/nvme0n1


Y finalmente reinstalamos la opción de arranque UEFI. En Ubuntu esto se hace con:

efibootmgr -v | grep ubuntu  # solo muestra una entrada
efibootmgr --create --disk /dev/nvme0n1 --part 1 --label "ubuntu" --loader "\EFI\ubuntu\shimx64.efi"


Una vez concluido esto, deberíamos contar dos entradas "ubuntu" en el efibootmgr, una para cada unidad NVMe. Esto debería ser todo para un simple reemplazo de unidades en el RAID1.

Como comprobación cruzamos los dedos e intentamos reiniciar el servidor, de modo de asegurar que el arranque con UEFI se produce correctamente desde cualquiera de los dos unidades NMVe.

Naturalmente, si necesitáramos reemplazar otras unidades en un conjunto con mayor número de discos deberíamos seguir el mismo procedimiento funcional, utilizando en cambio el designador de unidad nvme1n1

Redimensionado de Disco NVMe

En este caso particular, las nuevas unidades NVMe no sin similares, sino mayores que las anteriores, lo que permiten incrementar el tamaño del conjunto RAID1 hasta 1 terabyte. Para delimitar este cambio habremos de utilizar el programa parted. Primero sacamos de línea la unidad y luego la abrimos con parted:

mdadm /dev/md1 --fail /dev/nvme0n1p3 --remove nvme0n1p3
parted /dev/nvme0n1


Y usamos el comando resizepart del programa parted para cambiar el tamaño de la partición desde los ~240GB anteriores hasta los ~1960GB.

Conforme lo hayamos definido, agregamos el disco nuevamente al conjunto RAID1:

mdadm --manage /dev/md1 --add /dev/nvme0n1p3

Ahora aguardamos que se produzca la resincronización del RAID (podemos usar cat /proc/mdstat para comprobarlo) y luego agrandamos el conjunto RAID con el comando grow hasta su máximo posible:

mdadm --grow /dev/md1 --size=max

Luego, necesitaremos reformular el tamaño del sistema de archivo.

En el caso de que hubiese sido particionado de tipo GPT simplemente deberíamos ejecutar

resize2fs /dev/md1

Sin embargo, en este caso que el esquema RAID cuenta con una estructura de particionado LVM mas avanzado, al cual se adosan las un particionado de formato ext4, por lo cual utilizamos:

pvresize /dev/md1
lvextend -L +1G /dev/vg-md1/lv-root
resize2fs /dev/vg-md1/lv-root

Y ahora ya podremos contar con un servidor con 1TB en dos discos de arranque NVMe Gen2 en el conjunto RAID1 (y en mi caso, otro conjunto RAID con 2 discos mas para otros usos). Naturalmente, estos también deben ser respaldados, todo sea por la protección que merecen los datos del Pueblo. Así podemos buscar la Tikún Olam, como dicen los judíos.