Archivo del Autor: Alberto Gonzalez Iniesta

Terminar una copia interrumpida con scp

Hace tiempo que tengo el siguiente alias en mi .bashrc:

alias rescp='rsync --size-only --partial --progress --stats --inplace'

Lo saqué de no se sabe donde, así que no puedo citar la fuente original, pero no soy yo.

Permite terminar un scp después de quedar interrumpido por cualquier motivo (CTRL-C, pérdida de conectividad, …), únicamente transfiriendo lo que restase. Sólo hay que recuperar el comando original y sustituir scp por rescp. Por ejemplo, si falla:

scp -r /etc/bar foo/bar* baz servidor.example.com:/tmp

Podemos continuar con:

rescp -r /etc/bar foo/baz* servidor.example.com:/tmp

Dos notas: necesitas rsync instalado en ambas máquinas, y no termines los nombres de directorio en /. SI: /etc/bar, NO: /etc/bar/. La barra final cambia el comportamiento de rsync y copiaría el contenido de /etc/bar directamente en /tmp en vez de en /tmp/bar).

$ exit

¿Quién está usando mi swap?

El kernel Linux es muy propenso a mandar memoria de procesos a swap aunque «no estemos cortos» de memoria RAM. Simplemente por inactividad de un proceso durante cierto tiempo. Este comportamiento se puede controlar con un parámetro de sysctl (vm.swappiness). Os dejo como ejercicio leer un poco de él. 🙂

Hay ocasiones que la cantidad de swap usado nos hace preguntarnos ¿quién está ahí?. Desde la versión 2.6.32 (en distribuciones RedHat & cía.) y 2.6.34 en otras (en Debian eso es Wheezy o superior salvo que uses un kernel de backports) hay indicadores del uso de swap de cada proceso. Se trata de la entrada que empieza con VmSwap: en /proc/<PID>/status o las líneas Swap: en /proc/<PID>/smaps. Éstas últimas más detalladas pero inaccesibles a usuarios corrientes.

Basándome en esta información y trás días de desarrollo he creado este one-liner que nos mostrará (sin necesidad de root y ordenando por tamaño usado) los procesos que tienen parte de memoria en swap:

 for i in $( ls -d /proc/[0-9]* ) ; do SWAP=$(egrep --color '^VmSwap:[[:space:]]*[^0 ][0-9]* kB' "$i/status" 2>/dev/null ) && { cat "$i/cmdline" ; echo -n " (" $( basename $i ) ; echo -n "): " ; echo  $( echo $SWAP | tr -s ' ' | cut -d' ' -f2- ) ; } ; done | sort -t':' -k2 -n

Una versión más reducida, pero menos vistosa, sería esta otra:

find /proc/ -maxdepth 2 -name status -exec  grep -H VmSwap: {} \; | grep -v ' 0 kB'

La primera la podéis guardar en un alias o en un script llamado (p.e.) /usr/local/bin/whoswaps y así no tenéis que memorizarla. 😛

$ exit

Muerte a las claves por correo

Hace cosa de un mes empecé un pequeño proyecto para terminar con una práctica muy extendida, en mi profesión como administrador de sistemas y en general entre todo tipo de usuarios: enviar información sensible por correo.

Como todos sabemos el correo electrónico, por normal general, viaja por la red en claro. Es decir, alguien en el camino entre nuestro correo y su destinatario lo tiene muy fácil para ver su contenido. Una vez entregado el correo tampoco se suele almacenar cifrado. Así que si el ordenador en el que se almacena es infectado por un virus/troyano o robado, la información vuelve a correr peligro. Todos, en alguna ocasión, hemos recibido una clave por correo. Y allí quedó la clave para el resto de sus días. Yo me veo obligado a informar a clientes de claves de acceso o URLs que no deben ser públicas, y lo he hecho mal (por correo sin cifrar) mucho tiempo.

Onetimepaste es mi granito de arena para terminar con esta práctica. Una pequeña aplicación web donde puedes «pegar» la información sensible que deseas enviar  y a cambio te devolverá una URL para que sea accedida por el destinatario. En cuanto alguien visita la URL, la información almacenada se muestra Y se destruye. Es decir, sólo se puede ver una vez. Si la persona a la que envíes la URL para recuperar sus datos se encuentra con que ya no están cuando visite la dirección, sabréis que alguien lee vuestro correo, y que esa información ya ha sido comprometida. Todo esto se hace de forma segura y se basa en dos pilares muy importantes: un código muy sencillo (para un informático, claro) y la recomendación encarecida de instalarlo en un servidor de tu confianza. En la página del proyecto se dan más detalles y yo tengo una instalación que puedes usar libremente (si te fías de dejar datos en mi servidor).

Muerte a los adjuntos sin cifrar

Hoy he hecho pública la segunda versión de onetimepaste. Proporcionando la característica más solicitada desde su primera versión; la capacidad de enviar ficheros de forma segura. Siguiendo exactamente la misma lógica que con los mensajes, los ficheros se almacenan de forma segura hasta que alguien los solicita y posteriormente son eliminados del servidor. Un fichero Word con tu próximo libro para que lo revise tu editor, una foto que no debe circular mucho, un fichero de texto con claves, … sea lo que sea que no sea público 🙂

Debo dar las gracias a mis amigos Silvia y Dario por su gran ayuda con el PHP, cazando errores en el código y probando la aplicación como sólo Silvia sabe.

$ exit