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

Flatseal: controla los permisos de tus apps Flatpak

Si utilizas con regularidad aplicaciones Flatpak seguramente ya sepas que muchas de estas aplicaciones vienen por seguridad limitadas para que no tengan acceso más allá de donde realmente les haga falta. De este modo, si una aplicación todo lo que va a hacer es mostrar una página web dentro de algún tipo de ventana Electron, no habría por qué darle permisos para acceder a la carpeta personal (como mucho a la carpeta de descargas) o a los dispositivos de hardware como webcams o micrófonos.

Sin embargo, en algunas ocasiones nos podemos encontrar con aplicaciones que tienen más o menos permisos de lo que consideramos aceptable. ¿Por qué una aplicación de reloj debería tener acceso a internet? O por el lado contrario, si una aplicación de telecomunicaciones no tiene acceso por defecto a la webcam y al micrófono, difícilmente vamos a poder iniciar videollamadas.

Para este tipo de situaciones existen herramientas como Flatseal. Se trata de una aplicación gráfica que todo lo que hace es permitir hacer mediante clics lo que de otro modo tendríamos que hacer desde una terminal con la ayuda del comando flatpak override. Permite modificar los permisos que se le entregan a las aplicaciones instaladas desde Flatpak para así, o agregarle permisos para que puedan acceder a directorios adicionales que no se vieron venir si están provocando problemas de ejecución, o restringir todavía más los permisos de una aplicación si no confiamos del todo en ella.

Hay que tener en cuenta que, si bien algunas distribuciones se preocupan más del software que portan sus gestores de paquetes, Flatpak se ha convertido en el lugar del que descargar clientes gráficos de aplicaciones no tan libres y donde se desconoce del todo su funcionamiento. No estoy diciendo con esto que las aplicaciones de Flatpak sean inseguras, pero en algunos casos no se pierde nada por restringir a una aplicación cloud, como Discord, para que no tenga acceso a nada más que la carpeta de descargas, o para que no pueda ver la lista de procesos en ejecución, por si acaso están compartiendo esa información con terceras personas.

Captura de pantalla de Flatseal ajustando permisos
Flatseal mostrando una ventana de permisos.

La forma de utilizar Flatseal es sencilla. Después de instalarla desde Flathub, la ejecutas. Encontrarás en el panel de la izquierda una lista de las aplicaciones que tienes instaladas en tu equipo. También habrá una opción global arriba que te permitirá ajustar los permisos de todas las aplicaciones.

Una vez tengas marcada una aplicación, el panel de la derecha puede usarse para revocar permisos proporcionados por defecto cuando la aplicación se instala, o para proporcionarle permisos extra. Admisiblemente, no todos los permisos son fáciles de comprender. Esta es la razón por la que Flatseal tiene en su página de GitHub una documentación en forma de manual que te enseña para qué vale cada cosa y qué consecuencias puede tener encender o apagar una opción.

Tienes que tener en cuenta, para acabar, que no todas las aplicaciones van a reaccionar igual de bien a que se le prive de un permiso que da por sentado. Por ejemplo, es posible que algunas aplicaciones empiecen a fallar de formas feas si no tienen permiso para abrir la carpeta de descargas y esperan que puedan. En caso de que una aplicación deje de comportarse como lo normal, siempre puedes utilizar el botón Restablecer que hay en Flatseal para volver a dejarlo todo como estaba.

Cómo cambiar el tamaño de la swap de Linux

Cómo crear un archivo swap para poder cambiar su tamaño una vez que ya hemos formateado el ordenador.

La swap o espacio de intercambio es una zona de memoria extra en disco duro o disco SSD que el kernel Linux se reserva para aumentar la cantidad de memoria virtual disponible para asignar a las aplicaciones. De este modo, cuando un ordenador tiene muchas aplicaciones abiertas, el sistema operativo puede identificar qué zonas son las que menos se están usando en ese instante, y moverlas al disco duro como si fuese una mesa auxiliar en la que dejar lo que no se está usando en ese momento. Esto libera espacio en el chip para que otra aplicación más activa sí pueda utilizar la memoria.

Cuando se instala el sistema operativo, el asistente pregunta a la hora de particionar el disco duro cuánto se quiere asignar a la swap. Cuanto más espacio de swap haya disponible, más fluidez puede adquirir el ordenador porque más grande será la estantería donde el kernel puede depositar los datos en uso por parte de programas poco activos para liberar espacio en RAM para aquellos que sí están más activos. Al contrario, si la swap es limitada (o si prefieres no crer swap), puede ocurrir que se agoten del todo los recursos del sistema, un panorama que provocará que el ordenador funcione de manera poco fluida y que tal vez provoque que algunas aplicaciones se cierren a la fuerza a medida que el kernel cierra cosas para hacer espacio y evitar el colapso de la máquina.

¿Cuánta swap debería tener mi ordenador?

En otros tiempos, la limitación en cuanto a cantidad de memoria RAM del ordenador era un problema importante, que provocaba que existiesen fórmulas precisas tales como «la swap debería ser siempre el doble de grande que la memoria RAM disponible». Sin embargo, hoy en día los ordenadores tienen bastante memoria por lo que hay que tener en cuenta más factores.

Más que considerar «la swap siempre es necesaria» o «la swap ya nunca es necesaria», la respuesta correcta es: ¿qué tipo de cargas de trabajo va a tener mi ordenador? Para un ordenador doméstico que se use para cosas básicas, es probable que, efectivamente, si tienes suficiente memoria RAM no necesites tener una swap. Es espacio en disco duro que se desaprovecha si nunca se llena la memoria RAM. Sin embargo, si vas a estar continuamente ejecutando aplicaciones intensivas en memoria (tales como simulaciones, juegos o programas de edición de vídeo o, en general, programas complicados que ejecuten muchos algoritmos y que trabajen con muchos datos), es posible que incluso aun teniendo 16 o 32 GB de RAM sea recomendable establecer un espacio de intercambio, sobre todo si corres el riesgo de que uno de esos programas verdaderamente sea capaz de consumir toda la memoria RAM disponible.

Algunos fabricantes suelen recomendar sus propias fórmulas. En el caso de Red Hat, por ejemplo, recomiendan hoy en día lo siguiente:

  • Si tienes un ordenador de 2 GB de RAM o menos (como un ordenador viejo), deberías tener una swap que tenga el doble de la cantidad de memoria RAM que tu PC tenga.
  • Si tienes un ordenador de entre 2 y 8 GB de RAM, deberías tener una swap que tenga el mismo tamaño que la cantidad de memoria RAM que tu PC tenga.
  • Si tienes un ordenador de más de 8 GB de RAM, deberías tener una swap de al menos 4 GB en función de las circunstancias.

De nuevo, con la cantidad de memoria RAM que hay hoy en día y con el uso tan diferente que se puede hacer de un ordenador, conviene preguntarse qué se va a hacer con el ordenador, ya que eso puede influenciar que queramos darle una swap más pequeña o incluso no darle swap, sobre todo si es un PC con mucha memoria.

¿Qué hago si necesito más swap una vez he particionado mi PC?

Por lo general, el instalador ofrecerá la posibilidad de formatear una partición extra al instalar GNU/Linux de tipo swap. Con esto, se reserva una zona del disco duro para este propósito. Queda fuera del sistema de archivos principal, por lo que nunca verás la swap para que no moleste.

Si después de instalar el ordenador necesitamos cambiar su tamaño (por ejemplo, porque es un servidor web y nos hemos dado cuenta que en horas pico se queda corta la swap y provoca caídas de sistema), vamos a tener complicado particionar de nuevo.

Por suerte, es posible igualmente utilizar el comando swapon para activar un archivo de disco duro y que se comporte como espacio de intercambio. Para ello, lo primero que tendríamos que hacer es crear un archivo en blanco que tenga el tamaño deseado. Esto lo podemos hacer con dd, aunque yo hoy en día suelo utilizar el programa fallocate(1) porque es más rápido:

$ sudo fallocate -l 4G /swapfile

Esto crea un archivo de 4 GB llamado swapfile en la raíz del disco duro. Por supuesto, tú deberías cambiar ese 4G por el tamaño que quieras que tenga tu RAM, sustituyendo el 4 por la cantidad de gigas correcta, por ejemplo, 2G u 8G para, respectivamente, 2 GB u 8 GB.

Ahora lo que tenemos que hacer es formatear el archivo, es decir, configurarlo para que el kernel se piense que es un área swap normal y corriente. Esto lo podemos conseguir con el comando mkswap:

$ sudo mkswap /swapfile

Opcionalmente, si queremos deshacernos de otras particiones o archivos swap en uso, podríamos retirar toda la swap. Ten en cuenta que esto volcará su contenido en memoria RAM, así que no conviene correr este comando si el ordenador no está tranquilo.

$ sudo swapoff -a

Y finalmente pedirle al sistema que active este archivo que acabamos de crear como un archivo swap:

$ sudo swapon /swapfile

Si ahora usamos una herramienta como htop, deberíamos poder verificar que existe una swap del tamaño solicitado.

Cómo activar la carga de nuestro swapfile en cada arranque

Sorprendentemente, el archivo /etc/fstab también permite introducir rutas a swapfiles que haya en otra partición. De modo que es posible configurar el sistema operativo para que active este swapfile cada vez que se encienda el ordenador.

Para ello, todo lo que hay que hacer es modificar el archivo /etc/fstab como superusuario, y poner al final del archivo la siguiente línea:

/swapfile none swap defaults 0 0

Si el archivo se ha creado con otro nombre, habrá que cambiar la ruta que va al principio de la fila. A partir de ese momento, cuando se reinicie el ordenador debería cargarse automáticamente el swapfile que hemos creado.