Reminders...

Encriptar con OpenSSL

Introducción

Personalmente creo que la mejor manera de tener los archivos seguros es encriptándolos con OpenSSL. En vez de comprimir un archivo zip o rar con contraseña o encriptar un documento PDF, resulta más seguro y fiable encriptar usando OpenSSL usando la doble extensión ".extension.aes".

Las ventajas de hacer esto son la claridad que se tiene de qué método de encriptación se está usando y cómo, poder definir parámetros con gran grado de personalización y una garantía de compatibilidad futura.

A tener en cuenta....

Al menos en mi caso particular, uso la encriptación para backups y copias de archivo, por lo cual me interesa tener al máximo la garantía de que el archivo va a ser legible ahora o en cuarenta años. Por eso es importante tener en cuenta las siguientes sugerencias:

  • ReadMe: El archivo debe estar acompañado de un readme que especifique cuál es el comando que debe usarse para desencriptarlo, la versión de openssl y los métodos usados.
  • Usar un algoritmo de encriptación estandar: Si bien openssl permite usar muchísimos métodos de encriptación lo mejor es usar el estandar, así hay más garantía de que permanecerá y tendrá soporte dirante mayor tiempo.
  • Especificar el método de derivación: Si el digest no es especificado, OpenSSL isará el predeterminado que los desarrolladores pongan. Un ejemplo que miestra que esto es importante es el que en las versiones antiguas se usaba MD5 y ahora se usa SHA-256.

Comandos

Este es los comandos de encripración/desencriptación que usaré:

Git

Staging Area

Es un índice donde preparan los archivos que se incluirán en el próximo commit.

Agregar archivos al stage:

git add .

Listar los archivos del stage:

git status

Borrar el stage:

(Importante si se añaden archivos al stage que debían haber sido ignorados con .gitignore)

git restore --staged .

Commits

Son puntos de control dentro de un directorio.

Crear un commit:

git commit -m "Nuevo Commit"

Listar commits:

git log

Borrar último commit:

Deshacer commit pero mantener cambios: Borra el commit y deja el código intacto en la stage area.

git reset --soft HEAD~1

Deshacer el commit y borrar los cambios del stage: Borra el commit y borra los archivos de preparación en el stage area.

git reset HEAD~1
Desahacer el commit y borrar los archivos: Borra el commit y todos los archivos que tiene bajo seguimiento. git reset --hard HEAD~1

SSH

Crear una clave SSH y copiarla al servidor

Mejor usar una clave SSH que conectarse usando la contraseña.

Crear la clave usando ed25519 que es más rápido

ssh-keygen -t ed25519 -C "usuario@computadora"

Copiarrla al servidor:

ssh-copy-id usuario@servidor

Systemd

Presentación

En KDE 6, se está buscando que todos los procesos sean envueltos por systemctl, de manera que todos los procesos esten ordenados jerárquicamente y se le puedan limitar los recursos al usar cgroups.

Systemd es el proceso principal del sistema (PID1) del cual derivan todos los demás procesos, el único ancestro es el IDLE (PID0), que está reservado al kernel.

Servicios

Systemd es el programa que administra todos los servicios del sistema. Estos se encuentran en tres directorios:

Directorio Prioridad Descripción
/usr/lib/systemd/system Baja Servicios creados por el SO
/run/systemd/system Media Servicios creados por procesos en tiempo de ejecución
/etc/systemd/system Alta Servicios creados por el usuario
˜/.config/systemd/user Alta Servicios que se ejecutan cuando se inica sesión

Targets

Sistemd usa un sistema de targets, para agrupar los tiempos en que se ejecutan los procesos. Muchos de A continuación presento una lista de muchos de ellos.

Estados del Sistema
Target Descripción
poweroff.target Apagado del sistema
reboot.target Reinicio del sistema
halt.target Apagado del sistema sin cortar electricidad
kexec.target Reinicio sin pasar por la bios
rescue.target Modo monousuario para reparaciones
emergency.target Modo más crudo, solo carga /bin/sh y FS en lectura
exit.target Cierre de sesión del usuario

Proceso de Arranque
Target Descripción
sysinit.target Servicios críticos tempranos
basic.target El sistema básico está listo
 cryptsetup.target Configuración de discos cifrados 
local-fs.target Todos los discos están montados
remote-fs.target Discos remotos montados
swap.target Todas las unidades swap están montadas
network.target Sistema de red listo
network-online.target El sistema tiene dirección IP
time-sync.target Reloj NTP sincronizado

Funcionalidad
Target Descripción
multiuser.target Estado normal de un servidor
graphical.target Estado normal de un escritorio
printer.target Servicios de impresión activo
sound.target Sistema de sonido activo
bluetooth.target Soporte de bluetooth activo

Tipos de unidades
Target Descripción
paths.target Activa todas las unidades .path
timers.target Activa todas las unidades .timer
socket.target Activa todas las unidades .socket
slices.target Gestiona porciones de recursos

Crear un Servicio

Sección [Unit]

Contiene información general del servicio y algunas directrices. Tiene muchísimos parámetros, listaré los que considero más importantes.

  • Description: Breve descripción de lo que hace el programa
  • Documentation: Documentación relativa al daemon
  • Before, After: Ordena la ejecución de los daemons y dependencias. Ejemplos: After=network.target sshdgenkeys.service    Before=ssh-access.target
  • Wants: Carga las dependencias necesarias (si es que no están corriendo) al iniciar el daemon. En caso de que alguna dependencia no se cargue inicia el daemon de todas maneras.
  • Requires: Lo mismo que Wants, pero si una dependencia no se carga, el daemon queda en estado inactivo.

Sección [Service]

Es la sección específica de un servicio, las otras dos son generales de los archivos Unit. Listo aquí algunas de las dierectrices más importantes:

  • Type:
    • simple: esume que el servicio está corriendo una vez el kernel le asigna un PID
    • notify: Espera hasta que el servicio le envíe una notificación mediante sd_notify.
    • notify-reload: similar a notify, pero además envía una notificación cuando un servicio es recargado.
  • ExecStart: Es lo más importante. Especifica el comando que será ejecutado al iniciar el daemon.
  • Restart: Una de las características más interesantes. Reinicia automáticamente el proceso en caso de que sea cerrado:
    • always: reinicia el proceso siempre.
    • on-success: reinicia solo si cierra con exit-0.
    • on-failure: reinicia solo si cierra con exit-1.
  • RestartSec: Determina la cantidad de segundos de espera antes de que el proceso sea iniciado nuevamente.
  • StartLimitIntervalSec, StartLimitBurst: Especifica el máximo de veces en que el proceso puede intentar reiniciarse en un intervalo de tiempo. Los valores predeterminados son 10 segundos y 5 veces respectivamente.
  • KillMode: Determina si los subprocesos del servicio se matarán también o no.
    • control-group: es el que está por defecto, mata todos los subprocesos
    • process: mata solo el proceso principal y mantiene los subprocesos.
    • mixed: da un tiempo de espera para que el proceso principal mate a los subprocesos. En caso de que no, mata a todos los subprocesos.

Sección [Install]

Directrices al usar systemctl enable

  • WantedBy: Crea una dependencia débil con un target, ejemplo  WantedBy=multi-user.target 
    • Crea un enlace simbólico en el directorio .wants/
  • RequiredBy: Crea una dependencia fuerte con un target, afectando este. Ejemplo RequiredBy=multi-user.target 
    • Crea un enlace simbólico en el directorio .requires/
  • UpheldBy: Crea una dependencia con un target o servicio.  No se deja apagar usando el subcomando stop a menos que la dependencia que lo inició se apague. Su uso es muy poco frecuente.
    • Crea un enlace simbólico en el directorio .upholds/

TMUX

Subcomandos

Crear nueva sesión con un nombre particular:

tmux new -s session-name

Listar sesiones activas:

tmux ls

Cerrar una sesión:

tmux kill-session session-name

Acoplar última session:

tmux a

Acoplar sesion con su nombre:

tmux a session-name

Sesión

Las sesiones tiene un prefix key Ctrl+b, para insertar atajos del teclado o comandos.

Desacoplar la sesión de la terminal, usar:

Prefix => d

Nueva pestaña:

Prefix => n

Anterior, siguiente pestaña:

Prefix => p

Prefix => n

Correct when upload images in Bludit

When I tried to upload a set of images, I sometimes got the error 504 Gateway Error. This happened because Nginx didn't wait long enough and rejected the request due to the default timeout. To correct this, I added the following lines to the site configuration: /etc/nginx/sites-avalaible which have been taken from this stackoverflow.

So basically, you have to add these lines:

proxy_connect_timeout       300;
proxy_send_timeout          300;
proxy_read_timeout          300;
send_timeout                300;