Dos formas de habilitar sudo para una cuenta en GNU/Linux

Hoy en día, lo normal al instalar GNU/Linux en un sistema es que la primera cuenta que se configura durante la instalación esté considerada como cuenta administradora. Con el comando sudo puede identificarse para confirmar que realmente al otro lado del teclado está la persona que dice estar y no un impostor, y así ejecutar comandos o cambiar opciones que requieren permisos elevados porque introducen cambios al funcionamiento del sistema operativo, como instalar programas nuevos.

Sin embargo, ¿qué hacemos cuando queremos darle estos permisos a otra cuenta? Por ejemplo, en un entorno de trabajo grande donde tengamos varias personas que puedan administrar un sistema. No querríamos que toda la administración de la máquina caiga sobre una misma persona en una gran empresa. Tal vez haya varias personas para administrar los servidores e instalar comandos, según se pongan de acuerdo.

En ese caso, lo que tendremos que hacer es convertir una cuenta de usuario en administradora. Este es un proceso casi chamánico que requiere la intervención de otra cuenta que ya sea administradora, para darle la bienvenida a la nueva cuenta al club. Sin embargo, la forma en la que se hace este proceso depende un poco de la instalación.

El grupo de sudoers

Por lo general, hoy en día casi cualquier distribución GNU/Linux utiliza un grupo de usuarios para identificar a estas cuentas. Así, al agregar o quitar personas del grupo, se les puede dar o revocar estos permisos sin involucrar más configuración.

Este grupo llevará uno de los dos nombres. Históricamente, el grupo se denominaba wheel. Existen varias teorías sobre el origen de este nombre, ninguna posiblemente importe en este momento. Lo clave es que, a pesar de ser el nombre usado en el UNIX tradicional, muchas distribuciones GNU/Linux continúan usando este nombre a día de hoy. Red Hat y Arch Linux, por ejemplo. Esto incluye derivadas: Fedora, Manjaro, EndeavourOS…

Sin embargo, en el caso de Debian, el nombre de este grupo es sudo. Esto es importante porque también afecta a todas las distribuciones que emanan de Debian. Así, distribuciones como Ubuntu o Linux Mint también usan sudo como nombre de este grupo.

Una vez identifiques el nombre del grupo, deberás agregar al usuario que quieras dar permiso de superusuario a este grupo. En el caso de las distros que tengan un script groupadd, podrías usar ese script. Sin embargo, por lo general se da por hecho que el programa alternativo usermod es casi universal y que permite agregar a un usuario a un grupo con la siguiente invocación de terminal:

sudo usermod -aG grupo usuario

No te olvides de poner los flags -aG. El primero sirve para agregar grupos en vez de sustituirlo. Más te vale no olvidar ponerlo, o podrías borrar los grupos a los que pertenezca la cuenta en este momento. El segundo parámetro sirve para especificar precisamente esos grupos. grupo será wheel o sudo según el tipo de distribución que uses, y usuario es el nombre de la cuenta que quieres agregar.

Por ejemplo, para meter a julian al grupo de administradores en Debian, usaríamos:

sudo usermod -aG sudo julian

Y para agregar a laura al grupo de administradores de Fedora, usaríamos:

sudo usermod -aG wheel laura

Para los casos más exagerados: modificar manualmente el archivo sudoers

El archivo sudoers guarda la configuración de sudo. Es importante modificar este archivo utilizando el comando visudo, para que tras editarlo se valide. La razón de esto es que si el archivo /etc/sudoers tiene errores, es posible que sudo deje de funcionar. visudo se ocupará de avisarte si está mal configurado antes de cerrar sesión, potencialmente bloqueando el sistema.

Para modificar este archivo, generalmente basta con escribir lo siguiente en una terminal para abrir el archivo con tu editor por defecto en estos casos (nano, vim…):

sudo visudo

La forma más rápida de agregar una cuenta a este archivo es incorporando una línea que contenga lo siguiente:

[usuario] ALL=(ALL:ALL) ALL

La razón por la que hay que escribir tantas veces la palabra ALL es compleja de contar ahora y no viene al caso, pero lo podría dejar para el futuro. También puede que aprendas algo al respecto si miras el manpage que define este archivo, con man 5 sudoers.

Por ejemplo, para agregar manualmente a julian como sudoer, podrás agregar lo siguiente a tu archivo de configuración:

julian ALL=(ALL:ALL) ALL

Sin embargo, en cualquier caso, generalmente es más flexible si agregas todo un grupo de usuarios y luego usas usermod para agregar y quitar personas de un grupo.

Para permitir a todo un grupo utilizar sudo, puedes usar un formato parecido, pero poniendo un símbolo de porcentaje como prefijo. Es decir, algo como esto:

%[grupo] ALL=(ALL:ALL) ALL

Es raro que no esté, pero debería haber una línea en tu archivo de configuración que tenga este formato:

%sudo ALL=(ALL:ALL) ALL

Esta es la línea que permite a cualquier cuenta que forme parte del grupo sudo ejecutar cualquier comando del sistema como superusuario.

¿Grupos o edición manual?

Sobre qué es mejor, diría que el grupo. Es más flexible, no te obliga a editar el archivo sudoers manualmente, que siempre trae riesgos, y es más rápido. Además, un grupo te permite hacer cosas como dar permisos para leer o escribir en archivos, lo que también permite a esa cuenta poder conceder o restringir el acceso a logs y otros archivos relacionados.

Sin embargo, existen algunas situaciones donde puede venir bien editar manualmente el archivo sudoers. Este archivo es realmente complejo y puede usarse para permitir cosas como limitar qué comandos puede ejecutar una cuenta mediante sudo, e incluso permitir que una cuenta que no sea administradora pueda ejecutar algunos comandos concretos. Esto tiene casos de usos específicos, como permitir que una cuenta pueda ejecutar ciertos comandos sin darle acceso global a toda la máquina.

El código fuente de Winamp ahora se puede leer, pero no esperes una versión nativa para GNU/Linux

Hubo una época en la que Windows no traía reproductor de música. Así que si conectabas tu ordenador recién actualizado a Windows 98 o Windows 2000 a internet y querías escuchar alguno de esos archivos de audio que te habías descargado mediante módem, tenías que traerte tu propio reproductor de audio.

El éxito y la caída de Winamp explicado para zoomers

Winamp triunfó porque era ligero, reproducía cualquier tipo de archivo, tenía ecualizador, visualizadores y una capacidad de cambiar su tema e instalar mods que ningún otro programa de la época podía superar, y porque su modelo de distribución era un programa de instalación de pequeño tamaño que se podía descargar desde su web oficial, o cualquier otra página de descargas, o incluso compartir con familiares o amigos copiándolo en un disquete, sin problemas legales.

Este éxito les duró 10 años. En 2007, presentaron una nueva interfaz de usuario con cambios tan drásticos que los usuarios más tradicionales no aceptaron, incluso aunque el botón para volver al aspecto tradicional seguía estando ahí. El equipo original había dejado de trabajar en el reproductor y sus nuevos propietarios empezaron a tomar malas decisiones de gestión en un mal momento.

Windows ya traía reproductor de música así que la demanda por un programa separado para reproducir audio había disminuido. Winamp trató de subirse al carro de los reproductores portables agregando un modo para sincronizar canciones con un iPod, reproductores MP3 y hasta sincronización con Android. Pero en los años siguientes, la llegada del streaming y dejar de poseer la música cambió las cosas. Sus propietarios seguían sin saber qué hacer con el producto y finalmente lo pusieron a dormir a finales de 2013.

La marca Winamp actualmente sigue siendo usada, pero ahora es un reproductor diferente orientado a escuchar música en streaming, con características como NFTs, Ethereums, Blockchain, Winchy, Friskies, en fin, que no está colando por lo que sea. Wimamp Legacy sigue existiendo porque sigue siendo posible descargar desde su web la última versión de Winamp 5 tradicional para Windows. Y ahora ese código está disponible en GitHub.

Este Winamp no puede ser considerado software libre

La licencia que le han puesto al código no permite distribuir compilaciones modificadas del código fuente. Impone demasiadas restricciones y busca unificar los esfuerzos colaborativos al repositorio central.

You are granted the right to view, access, and study the source code of the software. You are granted the right to Modify the software for private use only.

You are encouraged to contribute improvements, enhancements, and bug fixes back to the project. Contributions must be submitted to the official repository and will be reviewed and incorporated at the discretion of the maintainers.

You may not distribute modified versions of the software, whether in source or binary form.

You may not create, maintain, or distribute a forked version of the software.

Only the maintainers of the official repository are allowed to distribute the software and its modifications.

La forma en la que en su página web describen la existencia de este repositorio Github también es bastante peculiar:

Do you want to be part of the community of developers who improve and maintain the historic Winamp player? Join the team that contributes to future versions of Winamp.

The contract is specific to the use of Winamp and must respect several fundamental aspects, including the fact that no commercial use is permitted. This is why Winamp will release 2 official versions each year, which will guarantee the user complete security and respect the fact that the product is free.

Casi se siente más como una oferta de trabajo que como un proyecto de código abierto honesto. La comunidad no se lo está tomando bien, aunque quienes más están molestando en el repositorio son niños rata intentando trollear a golpe de ticket o de pull request.

Sin embargo, la clave es que derivar Winamp, modernizar su código fuente, y posiblemente llevarlo a otras plataformas serían ejemplos de cosas que estarían prohibidas bajo estos términos, que sólo da permiso para acceder, leer y estudiar el código fuente, y modificarlo para consumo privado, prohibiendo distribuir código fuente o ejecutables modificados. Cualquier mejora debe ser enviada de vuelta al repositorio, y será integrada bajo criterio de los dueños del mismo.

Por lo tanto, no conviene esperar por el momento una versión de Winamp para GNU/Linux. Ya no sólo porque ahora mismo utiliza demasiados componentes propios de Windows, como DirectX o una interfaz gráfica muy ligada al entorno gráfico de Windows, sino porque cualquier esfuerzo por modernizarlo y hacerlo más compatible con otro sistema operativo tendría que ser previamente aprobado.

Lo único que nos queda con esto es el recuerdo de una era que probablemente ya fue, que hacía más apetecible explorar y descubrir cosas y donde las posibilidades parecían ilimitadas.

¿Para qué sirve sudo? Lo esencial a saber para administrarlo de forma segura

El modelo de seguridad de las distribuciones Linux y de UNIX en general, se basa en tener una cuenta administrativa, denominada root, que tiene acceso completo a la máquina y que puede cambiar toda la configuración del sistema; y cuentas locales que no tienen tantos permisos para que en el día a día se pueda usar de forma segura el sistema sabiendo que ni por accidente este se podría comprometer.

Incluso aunque seas la única persona que usa tu ordenador personal, este modelo de seguridad resulta útil, porque requiere que seas consciente cuando vas a cambiar ajustes cambian el funcionamiento del sistema operativo. Así evitas por accidente desinstalar un paquete esencial para que funcione la máquina, como el cargador de arranque. Incluso impedirá que ejecutes por accidente un script malintencionado (por ejemplo, un código que hayas descargado de internet sin leer antes de ejecutar) que trate de hacer cosas maliciosas que puedan dañar tu máquina, como borrar el directorio /usr.

Con sudo, forma corta de super user do, puedes hacer el salto de una cuenta local a una cuenta privilegiada. Por ejemplo, para ejecutar el comando privilegiado systemctl stop networking, que detendría la red, necesitarás elevar tus privilegios, para evitar que por accidente desconectes un servidor. Necesitas anteponerle la palabra sudo, y entonces al ejecutar sudo systemctl stop networking ejecutarías ese comando de forma privilegiada.

Para adquirir esos privilegios, debes estar en una lista de usuarios autorizados. Así podrás elegir quiénes pueden realmente ejecutar esos privilegios. Un administrador de un laboratorio podría estar en la lista de usuarios autorizados para preparar los ordenadores de sus estudiantes antes de una clase, pero los estudiantes podrían quedar fuera de la lista para evitar que ejecuten sudo y hagan de las suyas.

Para confirmar que realmente eres tú, sudo te pide por lo general que escribas tu contraseña antes de lanzar el comando. De este modo, verifica tu identidad. Y si en cualquier caso escribes bien la contraseña de tu cuenta, pero los administradores de tu sistema han decidido que no debes estar en la lista para ejecutar comandos privilegiados, no te va a dar permiso, mostrándote el famoso mensaje El usuario no está en el archivo sudoers; este incidente será reportado.

Por lo general sudo recuerda tu presencia durante unos minutos para que no tengas que volver a escribir la contraseña si vuelves a ejecutar inmediatamente otro comando que empiece por sudo, pero en su forma general, deberías asumir que cuando trates de ejecutar un comando privilegiado con sudo, te va a pedir la contraseña para ver que realmente eres tú y no otra persona entrando en tu ordenador porque te has dejado el portátil desbloqueado cuando has ido a por un café o al baño en un lugar con más personas.

La forma de configurar esta lista de usuarios es modificando el archivo /etc/sudoers. Y la forma correcta de hacerlo, es mediante el programa visudo, usando el comando sudo visudo. El comando visudo abre inmediatamente el archivo /etc/sudoers con tu editor de textos de terminal favorito, como Vim o Emacs, y te permite modificar su contenido. Sin embargo, cuando guardes y cierres el archivo, visudo inmediatamente validará que el archivo sea correcto, y te avisará de errores si está mal configurado.

La razón por la que debes usar visudo en vez de modificar manualmente el archivo /etc/sudoers es, porque si cometes un error en ese archivo, podrías dañar el funcionamiento de sudo. Y en sistemas donde no haya una forma alternativa de recuperar el control (por ejemplo, en esas distros GNU/Linux que directamente desactivan el inicio de sesión como root), dañar sudo podría suponer que bloquees tu ordenador. visudo siempre validará que el archivo esté correcto, y sólo guardará tus cambios si están bien y si no hay manera de bloquear el sistema.

Evidentemente, para usar visudo necesitarás ser un usuario privilegiado, así que la invocación completa es sudo visudo. Así evitamos que una persona que no tenga permisos trate de modificar la lista de usuarios privilegiados, que es algo que rompería completamente el sistema de seguridad. Solamente alguien que tenga permisos suficientes debería poder modificar la lista.

De todos modos, hay formas de configurar sudo para que se pueda dar permisos privilegiados a un usuario para ejecutar únicamente comandos concretos. De este modo, podrías darle permisos a un usuario, físico o automatizado, para que ejecute comandos como sudo systemctl restart docker, pero que a la vez le falten permisos para ejecutar otros comandos como sudo poweroff. También existen forma de configurar sudo para que ciertas cuentas de usuario o ciertos comandos no pidan contraseña.

Bram Moolenaar, desarrollador y BDFL de Vim, ha fallecido

Se cierra un ciclo y una época. Vim ha marcado y dejado huella en una manera de crear, ser productivo y fabricar una comunidad. Gracias por todo y perdón por tan poco.

La familia de Bram, quien creó el proyecto Vim y quien lleva todo este tiempo detrás del editor de textos, implementando nuevas funciones y aceptando parches, ha compartido la siguiente nota en la lista de difusión de anuncios de Vim:

Es con gran pesar que tenemos que informarle de que Bram Moolenaar falleció el 3 de agosto de 2023. Bram sufría de una condición médica que progresó rápidamente en las últimas semanas.

Varias generaciones de desarrolladores han aprendido, usado y tratado de dominar Vim. Teniendo una base de usuarios tan grande e inesperada, Vim probablemente habrá manipulado archivos pintorescos e interesantes, desde sistemas operativos hasta aplicaciones web que miles de personas usen a diario.

Vim es charity-ware. Su pantalla de inicio implora a hacer donaciones a la fundación ICCF, dedicada a ayudar a los niños desfavorecidos de Uganda y haciendo lo posible por proporcionarles educación y cuidados médicos. Incluso el dinero enviado al proyecto Vim en forma de patrocinio es destinado a esta causa benéfica.

Hasta siempre, Brad, y gracias por todo y por dar tanto.

Ejecutar comandos en el arranque de GNU/Linux con systemd

Si tienes que ejecutar un comando cuando se enciende el ordenador, como iniciar manualmente un servicio o hacer un ajuste sobre un driver, puedes orquestarlo con systemd.

En este ejemplo vamos a ver cómo ejecutar un comando, como un script, cuando se enciende el ordenador. El objetivo es que durante el proceso de arranque, se invoque el comando; por ejemplo, que si el comando es un script que debe escribir algo en un archivo, lo haga. Para ello, nos estaremos apoyando en systemd, y crearemos una unidad personalizada que ejecute ese comando durante el arranque.

Esto contrasta con otras formas de ejecutar programas al encender el ordenador, como ponerlo en el autostart de nuestro entorno de escritorio o agregarlo al .bashrc, de que se hará durante el proceso de arranque, así que normalmente se ejecutará mientras el ordenador está iniciando, antes siquiera de que pongamos la contraseña.

Creamos un script de apoyo

En este ejemplo, fabricaré un script auxiliar que será el que defina lo que quiera que ocurra cuando se encienda el ordenador. Para este caso particular, haré que mi script escriba algo sobre uno de los archivos del directorio /sys, una operación típica para modificar el funcionamiento de alguno de los dispositivos de hardware del ordenador.

Crearé un script denominado update-led.sh con el código de mi script:

$ cat > update-led.sh <<EOF
> #!/bin/bash
> echo 1 > /sys/devices/platform/leds/leds/red:standby/brightness
> EOF
$

Como este script requiere ser ejecutado como root, lo pondré en una ubicación más propia del sistema, como /usr/local/sbin, y lo haré ejecutable:

sudo mv update-led.sh /usr/local/sbin/update-led.sh
sudo chmod +x /usr/local/sbin/update-led.sh

Si ahora queremos probar que el script funciona correctamente, lo podríamos ejecutar si es que es una opción en primer lugar.

Invocar el script al arrancar el sistema

Ahora definiré una unidad de systemd que todo lo que tiene que hacer es invocar este script que he fabricado. Para ello crearé un archivo en el directorio /etc/systemd/system, que es donde se colocan las unidades personalizadas de systemd. El archivo podrá tener el nombre que más nos interese, pero deberá terminar por .service. El nombre que le demos, quitando el .service, será como luego será ejecutado mediante systemctl start y similares.

Este archivo tendrá que contener lo que describo más abajo, cambiando las siguientes líneas de interés:

  • Description será cambiado por un comentario sobre qué hace el comando, para identificarlo semanas después, por ejemplo, «arreglo para el driver de red» o «ejecuta rm -rf a .cache».
  • ExecStart será cambiado por la ruta completa al script que hayas creado en tu caso.
[Unit]
Description=Activar el LED

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/update-led.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Este servicio está declarado como oneshot. systemd es bueno ejecutando programas que tienen que estar en marcha todo el tiempo mientras el ordenador está encendido, como el sistema de audio, un agente SSH o GPG… Sin embargo, en este caso le pediremos que ejecute el comando una vez y ya está. La instrucción RemainAfterExit también se usa para señalizar que si el comando termina, todo estará correcto.

Finalmente le pediremos a systemd que active esa unidad, ejecutándola a partir del próximo reinicio. Supongamos que el archivo de unidad se denomina update-led.service, pues el nombre a activar será update-led:

sudo systemd enable update-led

Y opcionalmente si queremos probarlo ya, podemos pedirle que ejecute el script inmediatamente con:

sudo systemd start update-led

¿Qué es un archivo ISO y por qué se usan para descargar GNU/Linux?

La gente más joven no recordará esto, pero hubo una época en la que los ordenadores traían un lector de discos ópticos. Aunque ya no estén de moda, siguen siendo representados cada vez que usamos un archivo .iso.

El disco compacto es un formato que empezó a investigarse a finales de los 70 y que derivó en la creación del CD de audio digital en 1982 o del CD-ROM en 1984. Con el CD de audio digital se hacía posible cuantizar la música como ceros y unos para que tuviese una mejor fidelidad. Y con la creación del CD-ROM se pudo guardar cualquier tipo de datos binarios. Sin embargo, el formato siguió desarrollándose durante las siguientes décadas, y para 1995, IBM y Phoenix presentaron la extensión «El Torito» (no es broma, ese es su nombre), que permitía colocar el código máquina de un programa en un CD-ROM que se podía ejecutar al encender el ordenador. Había nacido el Boot CD.

Por supuesto, uno de los primeros beneficiarios del Boot CD fue Microsoft Windows. Ya no era necesario que el ordenador tuviese MS-DOS para ejecutar el .EXE con el instalador de Windows, porque el propio CD-ROM traía el programa de arranque que permitía leer el resto del disco e iniciar el proceso de instalación. Sin embargo, los cargadores de arranque libres tardaron poco en adquirir también la posibilidad de hacer esto mismo. GRUB puede instalarse sobre un CD, haciendo que cuando se encienda el ordenador, se ejecute GRUB, que además sabe como leer el resto del disco para así cargar una copia del kernel, un disco RAM para arrancar el entorno vivo, o el programa de instalación.

Al principio, Slackware o Red Hat prensaban sus propios CD-ROM. Es decir, adquirías físicamente un CD-ROM de Red Hat o de Slackware en su propia caja y lo instalabas igual que se hacía con Microsoft Windows. Sin embargo, para facilitar el acceso y no tener que depender de poder adquirir una copia física de GNU/Linux, en cuanto las velocidades de internet y los tamaños de los discos duros lo permitieron, empezaron a poner esos mismos CDs en sus páginas web y FTP usando los archivos .iso.

¿Qué es un archivo .iso?

Un archivo .iso es una copia digital exacta de los sectores que forman parte de un CD de datos, como un CD-R o un CD-ROM. Dicho de otro modo, si un lector de CD lee cada una de las pistas de datos que hay en uno de estos discos, y copia los ceros y los unos en un archivo, crea una copia digital del CD. Luego un quemador de CD puede hacer el proceso inverso, llevando los ceros y los unos contenidos en ese archivo sobre la superficie de un CD-R. El resultado es que si descargamos de internet un archivo .iso, tenemos en nuestro ordenador el molde digital que nos permite fabricar copias de un disco compacto de datos.

¿Por qué se les llama .iso? Una vez se inventó el formato CD-ROM en 1983, permitiendo guardar unos y ceros aleatorios, fue necesario crear el formato de archivos que debía llevar el CD-ROM. Después de todo, por entonces la informática ya estaba empezando a llegar a más gente y ya existía la noción de archivo. Los datos binarios hay que agruparlos en archivos, igual que ocurre con un diskette o con un disco duro. Dado que un CD-ROM tiene unas características únicas que no tiene ningún otro medio de almacenamiento de la época, se inventó un sistema de archivos nuevo específico para los CD-ROM. Este formato fue finalizado en 1988 y se le llamó ISO 9660.

Así que de ahí el nombre. Si tomamos un CD quemado con el formato ISO y creamos una copia digital, será interesante ponerle como extensión al archivo .iso para identificar que se trata de una copia digital de ese CD, igual que existen otras tantas extensiones para identificar un tipo de archivo.

¿Por qué se sigue usando el .iso?

En primer lugar, por retrocompatibilidad. Muchos ordenadores viejos siguen teniendo lector de CD o de DVD, y para instalar una distribución GNU/Linux en ellos, el paso de quemar un CD o un DVD con el contenido de un archivo .iso sigue siendo lo más simple. Al quemar un archivo .iso, copiamos los bytes que definen el disco, haciendo que se pueda usar exactamente igual que se lleva haciendo toda la vida.

En segundo lugar, porque puedes acabar con el CD, pero no puedes acabar con «el CD». Hoy en día, lo normal es transferir el contenido de un archivo .iso a un disco USB, como un pendrive. Tiene ventajas: un pen no se raya y no deja de funcionar a los pocos usos, y es más ecológico porque se puede borrar y volver a grabar otra ISO sobre él (aparte de cualquier otra cosa). Lo bueno es que los archivos .iso que encontramos en internet hoy en día son híbridos. El programa de arranque está colocado de tal modo que si se copia a un CD, funciona, pero que si se copia a un pendrive, también lo hace de una manera que permite al ordenador encontrarlo y lanzarlo.

En tercer lugar, por integridad. Podríamos vivir en un mundo en el que las distribuciones GNU/Linux se distribuyesen como un .zip que luego es copiado sobre un pendrive. Sin embargo, cabe la posibilidad de que se haga mal y que por lo tanto se creen copias corruptas. Al compactar toda la imagen de disco en un archivo opaco que no se puede modificar se evitan errores que pueden provocar que el proceso de creación de un medio de arranque GNU/Linux sea más complicado de llevar a cabo.

FreeBSD 13.2-RELEASE ya está disponible

FreeBSD 13.2 es la actualización de la versión 13 de FreeBSD para este cuatrimestre. Actualiza paquetes e incorpora nuevas funciones y mejoras de rendimiento y estabilidad en el resto del sistema operativo.

La última versión de FreeBSD, uno de los sistemas operativos de tipo BSD de código abierto más importantes del mercado, ya está disponible. Se trata de la versión 13.2, que continúa el linaje de FreeBSD 13 incorporando correcciones de errores y nuevas funciones. Muchos paquetes de software disponibles de serie en FreeBSD o en sus repositorios principales han sido actualizados. OpenSSH ahora usa la versión 9.2p1 y OpenSSL la 1.1.1t. También se ha actualizado la suite de compiladores de LLVM a la versión 14.0.5.

Entre los cambios más relevantes, vuelve a estar disponible el driver para WireGuard a nivel de kernel, el cual se tuvo que retirar anteriormente debido a los problemas que tenía cuando se introdujo por primera vez. Ahora también, el soporte para ASLR estará activo por defecto al ejecutar programas de 64 bits. ASLR es una técnica de seguridad informática que carga los programas en posiciones aleatorias, en vez de usar siempre exactamente la misma disposición de memoria virtual, lo que es más seguro porque en caso de comprometer el sistema, un proceso malicioso ya no puede asumir tan fácilmente en qué partes de la memoria están los datos de un programa en ejecución.

La compatibilidad con Linux ha mejorado (para nuevos: FreeBSD no es Linux). Especialmente en ARM64, donde ahora la ABI para ejecutar procesos de Linux está al mismo nivel que la de la arquitectura AMD64, incluyendo el nuevo soporte para ptrace. En esta versión de FreeBSD, se ha añadido la herramienta nproc, que funciona exactamente igual que la que usa GNU Coreutils en cualquier distro GNU/Linux, para facilitar la creación de scripts portables. También será posible decodificar llamadas a sistema en procesos de Linux desde kdump.

Tal vez sea el momento de dejar de usar FeedBurner, ¡actualiza tu RSS!

Este post va destinado a las personas suscritas al RSS de este sitio web, o a las personas que lo tienen configurado en sus integraciones, anuncios y otro tipo de herramientas. (En realidad, RSS también fue inventado precisamente para esto.)

Si la suscripción a Nos Gusta Linux la tienes hecha a través de FeedBurner, tal vez sea conveniente que la cambies por la original que produzco a través de mi sitio web, desde alguna de las siguientes URLs:

La forma de saber si te has suscrito al feed de FeedBurner es comprobando si la URL del feed en tu aplicación de feeds comienza por http://feeds.feedburner.com o por https://feeds.feedburner.com. En la versión web de Feedly, por ejemplo, esto lo puedes saber si desde la barra lateral seleccionas Nos Gusta Linux, le das al botón con los tres puntos suspensivos que hay arriba a la derecha y haces clic en «More settings». Verás la URL del feed en la pestaña que se abre. En otros lectores de RSS el procedimiento puede cambiar así que deberías consultar el manual de instrucciones de tu programa.

Si todo sale mal, la forma más simple es cancelar la suscripción y volver a suscribirte usando uno de los links correctos que he puesto más arriba y que comienzan siempre por https://nosgustalinux.es/feed/. En el peor de los casos, es posible que tengas que volver a marcar como leídas todas las entradas y que pierdas el historial de posts que marcaste como favoritos o señalaste de algún modo, así que si es así, asegúrate de salvaguardar esa información antes.

No voy a dar de baja la integración con FeedBurner, pero es un servicio web que hace años que se nota cada vez más pobre y más de capa caída, y viniendo de Google, se hace complicado saber cuándo pueden decidir cerrarlo, así que conviene tener esta información de antemano. El feed de FeedBurner seguirá operativo hasta el último día, llegue cuando llegue.

En otros tiempos, FeedBurner era un servicio verdaderamente útil que te dejaba suscribirte a un feed RSS por e-mail, estimar (de forma bastante imprecisa, todo sea dicho) cuántas personas estaban suscritas al feed, crear iconos y banners para promocionar tu blog… eran otros tiempos y tanto la web como Google, su propietario desde hace casi dos décadas, ha cambiado bastante. Hoy día FeedBurner es un servicio aséptico y con muy pocos botones, que da la sensación de que está abandonado. Sin embargo, miles de blogs y podcasts siguen usándolo y el día que el barco se hunda, vamos a tener un problema real en internet.

¿Qué es una biblioteca (o «library») en una distribución GNU/Linux?

Las bibliotecas son una de las partes más esenciales del software, y es una palabra que posiblemente hayas visto en tu gestor de paquetes. ¿En qué consisten realmente?

En raras ocasiones, en GNU/Linux te encontrarás mensajes de error o de advertencia que hacen referencia a palabras como biblioteca o library. También en español se le suele llamar librería, y aunque desde el punto de vista pragmático se refiere al mismo concepto, algunas personas cuestionan este nombre porque la traducción correcta de library es biblioteca. Sin embargo, una pregunta más importante independientemente del nombre es: ¿qué es esto? En este post voy a tratar de definirlo en conceptos simples y sin dar mucha vuelta.

¿Qué es una biblioteca de software?

Una biblioteca de software es una pieza de software que aunque ofrece funcionalidad, igual que la que puedes encontrarte en un programa tradicional, no puede ser clasificado como programa porque como tal no lo puedes lanzar haciendo doble clic sobre su icono o escribiendo un comando de terminal.

El rol de la biblioteca es proporcionar servicios que puedan ser usados por otras piezas de software. Estos servicios a menudo se corresponden con código que es ejecutado por el ordenador a petición de un programa o de otra biblioteca. De este modo, la biblioteca recibe lo que se podría denominar una petición de servicio para que haga una operación, y eso hará que nuestro ordenador procese cierto código máquina proporcionado por la biblioteca para generar un resultado del servicio.

Por poner un ejemplo, en cualquier distribución GNU/Linux podemos identificar varios editores fotográficos, como son GIMP, Inkscape o Krita. Sin embargo, la realidad es que ninguno de estos programas que menciono sabe cómo transformar los ceros y unos que hay dentro de una foto de tipo JPEG en los colores que luego se ven por pantalla. En su lugar, usan los servicios de una biblioteca de manipulación de imágenes JPEG. Esta biblioteca puede ser, por ejemplo, libjpeg.

libjpeg es una biblioteca experta en el manejo de imágenes JPEG. Sabe cómo transformar esos unos y ceros en píxeles, y sabe cómo volver a codificar píxeles para crear una foto nueva. Sin embargo, no puedes interactuar directamente con una biblioteca. No hay un icono para abrir libjpeg, ni tampoco puedes simplemente escribir en la terminal de tu sistema operativo el comando libjpeg para interactuar con este software.

¿Por qué existen las bibliotecas de software?

Puede ser visto desde fuera como poco educado que un programa se aproveche de las funciones de otro para hacer su trabajo. Sin embargo, en realidad esta situación no sólo es ventajosa sino que por evolución hemos llegado a ella. Existen varias razones por las cuales las bibliotecas de software tienen aceptación y se suelen utilizar para distribuir software.

Una de las ventajas es que permite reducir el tamaño de un programa. Si cada programa del mercado tuviese que incorporar su propio descodificador de imágenes JPEG, por ejemplo, los paquetes de software ocuparían más espacio de almacenamiento debido a que cada programa tiene que incluir sus propias instrucciones de procesador para que el ordenador pueda hacer esas tareas. Hoy en día no es un problema tan grande como antes, pero cuando los ordenadores tenían discos duros más pequeños sí que era de agradecer. Incluso hoy en día, en algunas placas de computación y otro tipo de microordenadores, suele ser importante medir para qué se usa cada byte de almacenamiento.

Por otra parte, que la comunidad centre sus esfuerzos en una biblioteca común que sólo sepa hacer bien una cosa pero que la haga bien, facilita que las mejoras que se incorporen a las bibliotecas estén disponibles a la vez para todos los programas que usen sus servicios, algo que hace que todos los programas se beneficien a la vez. Imagina que un día se inventa un algoritmo nuevo que es capaz de decodificar imágenes JPEG mucho más rápido. Si hay que enseñarle ese algoritmo a cada programa, tendríamos programas descompensados que serían más lentos. Si se hace esa mejora en la biblioteca, todos los programas que usen sus servicios pueden verse favorecidos a la vez.

También está el tema de la seguridad. A veces los procedimientos de cálculo que ejecutan los programas pueden ser arriesgados, y un programa malicioso puede aprovecharse de ciertos errores de computación en algunos de estos programas para hacer cosas inapropiadas. Es más sano corregir el error una vez y que todos los programas que dependan de ella se vean beneficiados a la vez, a tener que arreglar por separado cada programa, puesto que algunos no se actualizarán tan deprisa y podría suponer un riesgo de seguridad a los usuarios.

¿Por qué a veces las bibliotecas de software dan problemas?

Las bibliotecas de software no siempre funcionan bien. En ocasiones, puede ocurrir que un servicio se presta diferente en la versión 1.0 de una biblioteca, que en la versión 2.0 de la misma biblioteca. Si un programa ha determinado que necesita la versión 1.0, pero otro programa necesita usar la versión 2.0, será complicado satisfacer ambas demandas sin instalar a la vez ambas versiones.

Soluciones como AppImage buscan precisamente solucionar estos problemas haciendo que cada paquete de software traiga consigo mismo una copia separada de la biblioteca, a costa de perder las ventajas para el usuario final. Los programas que se distribuyen como AppImage pesan más, y si se instalan varios puede ocurrir que ocupen más espacio. Sin embargo, resulta útil para solucionar este tipo de problemas por lo que al final del día, dado el tamaño de los medios de almacenamiento típicos de la actualidad, no se considera un problema.

Flatpak y Snap resuelven este problema de forma más limpia, permitiendo que múltiples versiones de una misma biblioteca estén instaladas a la vez en el ordenador pero en lugares separados, y utilizando un sofisticado sistema de resolución para que un programa indique de forma exacta qué versión de una biblioteca necesita que le proporcione servicios.

Planner es el organizador para que empieces el año bien

En este post reviso Planner y te doy un tour por la aplicación, para que puedas decidir si es la aplicación que te puede ayudar a ser una persona más productiva en 2023.

El año nuevo suele ser una época de propósitos, y si uno de esos propósitos es llevar un estilo de vida más organizado, la tecnología puede ayudarnos a que sea más fácil enumerar las cosas que tenemos pendientes de hacer, como obligaciones para nuestras tareas diarias, o llevar a cabo nuestros planes personales para mejorar durante 2023.

El catálogo de aplicaciones de Flathub está repleto de aplicaciones para orgnaizar tareas, así que si la pantalla de nuestro ordenador es una de las que más miramos, podemos utilizar nuestro ordenador para llevar a cabo este control de las tareas. Una de las aplicaciones que nos encontramos es Planner, y se trata de un gestor de taras diseñado con sistemas operativos como elementaryOS en mente. Es igualmente compatible con cualquier distribución GNU/Linux, aunque se llevará especialmente bien con aquellas que usen GNOME. De hecho, en el futuro piensan integrarse todavía más con las bibliotecas del sistema de GNOME y su posible inclusión en el programa GNOME Circle, y el equipo está considerando un cambio de nombre y de icono para la próxima versión.

Hasta entonces, hablemos de Planner. Está ligada a la metodología GTD (Getting Things Done), una forma de organizarse y de ser una persona productiva basada en algunos conceptos importantes como la bandeja de entrada, donde se van a ir depositando las tareas que nos vayan entrando o que vayamos descubriendo. Esta bandeja luego es organizada, las tareas son clasificadas, y periódicamente existe un procedimiento de revisión para comprobar que no se está olvidando nada importante. Y, por supuesto, la etapa de la ejecución de las tareas.

Captura de pantalla de Planner
Aspecto principal de Planner.

Sin embargo, la aplicación no es perfecta. Ninguna lista de tareas lo es. Y esto ocurre, en parte, debido a que cada persona tiene formas de trabajar diferentes. Planner se siente muy cercano a la metodología GTD (Getting Things Done), pero si no eres una persona que utilice la metodología GTD, probablemente la aplicación te obligue a trabajar de formas para las que no tengas costumbre, o pretenda que cambies tu manera de hacer las cosas.

El principal atractivo de Planner es conectarlo con Todoist, un servicio cloud similar que te permite organizar tareas en la nube y sincronizarlas con todos los dispositivos. Con esto puedes conseguir integrar tu ordenador y tu móvil, si tienes la aplicación de Todoist instalada en él, para sincronizar automáticamente tus tareas en todas tus pantallas.

Algunas limitaciones de Planner que te vas a encontrar, no obstante:

  • Una vez que respondas a si quieres usar tareas locales, conectarte a Todoist o a un entorno CalDAV, ya no es posible volver a responder a esa pregunta sin borrar antes todos los datos de la aplicación, perdiendo todas las tareas que hayas metido hasta entonces.
  • ¿Exportar información? Es posible, pero no es tan fácil como parece.
  • En este momento no es posible crear tareas programadas que se repitan con el tiempo.

Dentro de Planner, la forma de organizar la información más allá de la bandeja de entrada es en proyectos y etiquetas. Puedes crear ambas cosas desde la interfaz. Les puedes asignar un color y una etiqueta. A los proyectos también les puedes asignar hasta un emoji para representar visualmente cada proyecto.

Interfaz de creación de proyectos.

Una vez hagas eso, vas a poder colocar en esos proyectos las tareas que crees, y vas a poder asignarles etiquetas a esas tareas. Después, con la barra lateral vas a poder filtrar tanto por proyecto como por tareas.

En la parte de arriba de la barra lateral también encuentras cuatro botones para aplicar filtros especiales:

  • Inbox: tareas que no forman parte de ningún proyecto todavía.
  • Today: tareas que han sido configuradas para hoy.
  • Scheduled: te da acceso a un calendario donde puedes ver las tareas configuradas para cada día, y recorrer con la línea del tiempo los días.
  • Pinboard: te deja filtrar por tareas que han sido marcadas como fijada, que son las que siempre van a ser visibles.

En definitiva, Planner, si bien tiene algunas limitaciones a nivel de cómo está programado, puede ser una alternativa para personas que busquen una forma simple de integrar una aplicación de tareas en su ordenador para poder recordar las cosas que hay que hacer inmediatamente.

Puedes descargar Planner desde Flathub y desde la tienda de aplicaciones de elementaryOS.

passwd: todo lo que debes saber

Un tutorial para poder utilizar el comando passwd que puede ayudar a las personas que recién llegan a UNIX.

El post en el que explicaba cómo recuperar la contraseña de Debian me dio la idea de profundizar más en el funcionamiento del comando passwd, ya que tiene varias formas de operar según cómo se llame a este comando.

passwd sirve para cambiar la contraseña de una cuenta. Si ejecutas el comando normal en tu terminal, por ejemplo, passwd, bajo tu propia cuenta de usuario solo podrás cambiar tu propia contraseña. Sin embargo, el auténtico poder de este comando está en invocarlo como superusuario (es decir, como root). Cuando la cuenta root ejecuta este comando, puede cambiar cualquier contraseña: la suya o la de otra cuenta.

Cuando invoques passwd con una cuenta normal, lo primero que hará es pedirte la contraseña actual, y así lo veremos cuando dice Current password. Aquí tenemos que meter la contraseña que tenemos ahora mismo. Esto es una medida de precaución para asegurarse de que un script automatizado no trata de cambiar nuestra contraseña sin permiso.

Ten en cuenta que cuando escribas una contraseña, no la verás por pantalla. Igual que pasa con el comando sudo, no habrá feedback. Ni si quiera unos asteriscos. Cuando empieces a escribir la contraseña, hazlo con determinación y no te detengas a medio de teclearla, para no cometer errores.

Después de escribir la contraseña actual y pulsar Enter, el sistema nos preguntará por la contraseña nueva que queramos establecer. En total la tendremos que escribir dos veces, porque nos pedirá confirmación. Así, si la hemos escrito mal, nos avisará para no bloquear nuestro sistema.

$ passwd
Current password:
New password:
Retype new password:
passwd: password updated successfully

Sobre esto, varias notas extra:

  • La configuración del sistema operativo podría traer reglas adicionales que pueden impedir que se guarde la contraseña. Por ejemplo, es posible que rechace cambiar la contraseña si no tiene un número mínimo de caracteres, o incluso si no junta alguna mayúscula o dígito.
  • Es posible que si pones la misma contraseña como nueva contraseña, te lo rechace y te diga que es la misma contraseña de todos modos.

Por último, el auténtico poder de este comando está en lanzarlo como root. Si lo hacemos podremos cambiar la contraseña de cualquier usuario si lo especificamos como parámetro al lanzar el comando. En este caso, de hecho, passwd no preguntará por la contraseña, lo que le convierte también en el comando ideal para usar si tenemos que recuperar una contraseña en concreto:

# passwd ana
New password:
Retype new password:
passwd: password updated successfully

Recuperar la contraseña de superusuario de Debian 11

¿Te has olvidado de la contraseña que le diste a la cuenta de root en tu instalación de Debian? Suele pasar si no la usamos con mucha frecuencia. Te cuento cómo usar el modo rescate para reestablecerla.

Cuando se configura Debian, una de las primeras cosas que pregunta el sistema operativo es qué contraseña le pretendemos dar a la cuenta de superusuario, es decir, a la cuenta root. Otras distribuciones GNU/Linux han decidido restringir el uso de la cuenta root y facilitar que la distribución se instale teniendo una cuenta superusuario como primera cuenta. No es el caso de Debian, que sigue dándole mucha importancia a la cuenta de superusuario root, y que ni siquiera configura por defecto sudo en la cuenta principal cuando se instala el sistema.

Sin embargo, ¿qué hacer cuando no hemos utilizado en una larga temporada esa cuenta y nos hemos olvidado de su contraseña? ¿Cómo podemos reestablecer la contraseña de root en Debian 11? Vamos a ver qué opciones tenemos en este post.

El juego de ejecutar passwd como root

El objetivo es conseguir tener acceso a una shell root desde la que podamos ejecutar passwd. Este es un comando interesante de administración de sistemas UNIX que sirve para cambiar una contraseña. Cuando lo ejecutamos como root, nos permite cambiar la contraseña de cualquier cuenta del sistema.

Si ponemos passwd sin más cuando somos root, cambiaremos la contraseña de root. Tan fácil como esto. De modo que el objetivo de este juego será conseguir una shell de root con la que hacer el cambio de contraseña.

El caso más simple es si ya tienes montado sudo en tu ordenador. Si tu cuenta personal está configurada para poder utilizar sudo, no tienes que hacer nada más que ejecutar sudo su. Con esto, utilizarás tu propia contraseña para acceder a una shell de root.

workstation ~ $ sudo su -
[sudo] contraseña para dani: 
[root@workstation ~]# passwd
Nueva contraseña:

Sólo recuerda que:

  • Cuando teclees la contraseña, esta no será visible por pantalla, así que teclea con confianza y sin detenerte. Con esto evitarás problemas si estás escribiendo palabras y no te equivocarás.
  • Tendrás que escribir la contraseña dos veces y tiene que coincidir. Si la has escrito mal alguna de las veces, te avisará y tendrás que volver a empezar.

Entrar en modo rescate

Si no tienes montado sudo, doas ni nada parecido (cosa que deberías), no quedará otra que entrar en modo de rescate. Resulta sorprendente lo fácil que es arrancar GNU/Linux en modo rescate saltándose cualquier medida de protección, pero si el disco no está cifrado, técnicamente no hay nada que impida hacer esto.

Para entrar en un modo rescate que nos permita saltar la contraseña, todo lo que haremos será reiniciar el ordenador y pulsar e cuando estemos en la pantalla de elección de entorno.

Pantalla de GRUB en Debian 11.

Al pulsar la tecla e aparece el editor de arranque. Con esto podemos modificar los comandos que se ejecutan por GRUB para arrancar el sistema operativo. Por dar la nota, cuando seleccionamos una opción premarcada como Debian GNU/Linux en GRUB realmente ejecutamos todas las instrucciones que se están viendo ahí.

Todo lo que haremos ahora será desplazarnos hacia la línea que empieza por linux (la que empieza por linux /boot/vmlinuz...). Nos desplazamos al final de la línea (aquí puedes usar Ctrl + E para ir rápidamente al final de la línea). Después, borramos las últimas palabras (ro quiet) y en su lugar pondremos rw init=/bin/bash. En definitiva, la línea de linux tiene que quedar tal que así:

    linux    /boot/vmlinuz-5.10.0-19-amd64 root=UUID=... rw init=/bin/bash

Ten en cuenta que la versión del kernel que acompaña a vmlinuz puede cambiar. Además, he suprimido el UUID completo de mi disco porque será diferente al tuyo. Una vez lo hayas comprobado, pulsa Ctrl-X o F10 para arrancar el sistema.

linux /boot/vmlinuz-5.10.0-19-amd64 root=UUID rw init=/bin/bash
El aspecto de GRUB para arrancar en modo rescate

Cuando termine de cargar, verás una shell. Esta shell está conectada al disco duro, por lo que con esto ya tenemos una sesión root para poder ejecutar algunos comandos. Deberías poder comprobar que el disco duro está montado en modo escritura. Esto es algo que puedes hacer ejecutando el comando mount y comprobando si en la salida se incluye una línea que contenga tu partición y la raíz (/). En los flags de montaje debe salir la opción rw. Por ejemplo, en mi caso veo:

/dev/vda1 on / type ext4 (rw,relatime)

Esto es suficiente de por sí.

Como puedes ver en tu shell, root@(none) implicará que tenemos una shell de root. Con esto ya podemos ejecutar el comando passwd y establecer una nueva contraseña para la cuenta de superusuario:

root@(none):/# passwd
New password:
Retype new password:
passwd: password updated successfully
root@(none):/#

Una vez que hagas esto, reinicia tu ordenador. Posiblemente a la fuerza si tienes problemas para escribir reboot. Deberías comprobar que si ahora tratas de escribir la contraseña de superusuario (por ejemplo, usando el comando su), ya te la aceptará.