Esto me sucedió al migrar una maquina virtual con Debian desde otro hipervisor, la maquina simplemente se quedaba en una shell de UEFI para poder iniciar el sistema operativo y realizar las reparaciones realice lo siguiente:

  • Escribí FS0: y enter para acceder a la partición de UEFI
  • Luego: cd EFI
  • cd debian
  • y para finalizar el arranque grubx64.efi
  • Luego de iniciar el sistema operativo abrí un terminal como root y reinstale grub mediante el siguiente comando: grub2-install /dev/sdx (en su caso sustituya la x por la letra correspondiente)

Espero que esta información les sea útil, saludos.

git

Muchas veces nos encontramos con que a la hora de clonar un repositorio desde Git mediante SSH este no utiliza el puerto por defecto y nos da error al ejecutar el comando clone, para corregir este error solo basta con ejecutar el comando de la siguiente forma:

git clone ssh://usuario@servidor.com:2222/ejemplo/proyecto.git

Espero que esta información les sea útil, saludos.

Para los que no conocen a VIM, es una versión mejorada del editor de texto VI y es uno de los editores mas populares en las distribuciones Linux y es una herramienta que todo sysadmin debe conocer.

Un amigo me pidió hace unos días que lo ayudara a aprender esta herramienta, y en mi búsqueda de material para ofrecerle encontré esta joya y decidí compartirla.

https://anderrasovazquez.github.io/curso-de-vim/

Es un pequeño curso realizado por Ander Raso Vazquez con la finalidad de enseñar lo básico del uso de esta gran herramienta.

Espero que esta información les sea útil, saludos.

Cuando PhpMyAdmin nos muestra el error 1146 y/o nos muestra una advertencia relacionada con controluser solo basta abrir el archivo /etc/phpmyadmin/config.inc.php con su editor favorito y modificar lo siguiente:

$cfg['Servers'][$i]['controluser'] = $dbuser;
$cfg['Servers'][$i]['controlpass'] = $dbpass;

Para que quede de la siguiente forma:

$cfg['Servers'][$i]['controluser'] = ''; //$dbuser;
$cfg['Servers'][$i]['controlpass'] = '': //$dbpass;

Guardamos el archivo, reiniciamos el servidor web y listo.

Espero que esta información les sea útil, saludos…

Network Time Protocol (NTP) es un protocolo de Internet para sincronizar los relojes de los sistemas informáticos a través del enrutamiento de paquetes en redes con latencia variable. NTP utiliza UDP como su capa de transporte, usando el puerto 123. Está diseñado para resistir los efectos de la latencia variable.

Para instalar NTP en Debian solo debe ejecutar el siguiente comando como root:

apt -y install ntp

Luego debe ejecutar el siguiente comando para ponerlo en marcha con la configuración por defecto:

systemctl enable ntp
systemctl start ntp

Para sincronizar el servidor con los proveedores de hora públicos ejecute lo siguiente:

ntpq -p

Normalmente no es necesario modificar la configuración que viene predeterminada pero si necesita hacerlo solo debe editar el archivo /etc/ntp.conf con su editor favorito.

Acá les dejo las direcciones de varios servidores publico:

  • pool.ntp.org (servidores aleatorios en todo el mundo)
  • europe.pool.ntp.org (servidores aleatorios en Europa)
  • it.pool.ntp.org (servidores aleatorios en Italia)

Espero que esta información les sea útil, saludos.

Mas información:

Muchas veces necesitamos hacer algún script en bash donde queremos que tenga ciertas características, y muchas veces queremos que las salidas por pantalla de ese script se vean distintas para llamar la atención.

bash_colors

Pues bien, se puede usar colores para el texto en el bash de una forma sencilla.

Esta es la lista de algunos de los códigos de color para nuestro texto:

  • Negro = 0;30
  • Gris oscuro = 1;30
  • Azul = 0;34
  • Azul claro = 1;34
  • Verde = 0;32
  • Verde claro = 1;32
  • Cyan = 0;36
  • Cyan claro = 1;36
  • Rojo = 0;31
  • Rojo claro = 1;31
  • Púrpura = 0;35
  • Púrpura claro = 1;35
  • Café = 0;33
  • Amarillo = 1;33
  • Gris = 0;37
  • Blanco = 1;37

El comando echo se debe de ejecutar con el parámetro -e haciendo que bash interprete el comando \e (o sea el escape) de esta manera:

echo -e ‘Esto es \e[0;31mrojo\e[0m y esto es \e[1;34mazul resaltado\e[0m’

Resultado: Esto es rojo y esto es azul

echo -e ‘Así se escribe \e[1;34mG\e[0m\e[1;31mo\e[0m\e[1;33mo\e[0m\e[1;34mg\e[0m\e[1;32ml\e[0m\e[1;31me\e[0m’

Resultado: Así se escribe Google

En resumen para poder utilizarlo solo hay que poner los caracteres que quieras que tengan color entre los caracteres de escape de esta manera:

‘\e[CODIGOm(texto)\e[0m’ (el texto sin los paréntesis)

Colores de fondo

De la misma forma podemos cambiar el color de fondo mediante los siguientes valores:

  • Negro = 40
  • Rojo = 41
  • Verde = 42
  • Amarillo = 43
  • Azul = 44
  • Rosa = 45
  • Cyan = 46
  • Blanco = 47

Para utilizarlo solo debemos seguir la siguiente sintaxis:

echo -e "\e[42mMuestra\e[49m"

Como se puede apreciar en la imagen que acompaña este post las combinaciones pueden ser bastante grandes y solo hace falta un poco de creatividad para crear resultados llamativos. Cabe destacar que el código \e[49m regresa el color de fondo al original.

A veces no podemos utilizar nuestro servidor principal, ya que estamos cambiándolo, actualizándolo, peleándonos con dependencias o trabajando en configuración o plug-ins. Por lo que necesitamos algo para reemplazarlo momentáneamente.

Tampoco se quiere algo demasiado grande porque es para un apaño. Tal vez no tengamos nodeJs instalado, o python en los que nos podemos crear un servidor web con pocas líneas. Y tampoco queremos tener que instalar demasiadas cosas.

Como alternativa ligera podemos usar netcat el cual viene instalado por defecto en muchas distribuciones.

Sólo tenemos que ejecutar lo siguiente:

$ sudo -c sh 'while true; do nc -l -p 80 < respuesta.html; done'

Sin sudo y con usuario root si no disponemos de él en el sistema. Con esto, vamos a poner constantemente en escucha el puerto 80 y procesando todas las peticiones de la misma forma, devolviendo los contenidos de respuesta.html.

Las pruebas pueden realizarse como un usuario normal (no root) si utilizamos un puerto mayor de 1024, por ejemplo el 8000, 8080, 1234, etc:

$ while true; do nc -l -p 8000 < respuesta.html; done

Como la respuesta debe ser muy rápida, en principio no tenemos necesidad de algo más complicado (esperemos que no vengan demasiadas visitas mientras trabajamos). Pero este sistema no soportará usuarios concurrentes, recordemos que es sólo un servidor temporal y puede que a algún usuario le dé algún problema en conectar. Podemos guardar un registro de todo lo que ha pasado con:

$ sudo -c sh 'while true; do nc -l -p 80 < respuesta.html; done > log'

o como usuario:

$ while true; do nc -l -p 8000 < respuesta.html; done > log

Creando respuesta.html

Como habrás podido ver respuesta.html no es un archivo HTML normal, en realidad aquí hay que poner toda la respuesta completa (con cabeceras incluidas), podemos hacer algo sencillo primero:

HTTP/1.1 200 OK
Server: LittleServer
Content-Type: text/html;charset=UTF-8<html>
<body>
<h1>Lo sentimos, estamos de mantenimiento</h1>
Disculpe las molestias, en un momento estaremos con usted.

&lt;/body&gt;
&lt;/html&gt;

La página a partir de la etiqueta <html>, podemos poner el código HTML que queramos. Aunque ahora estaremos contestando con un código de salida exitoso, lo que significa que los usuarios no se cabrearán (bueno sí, pero al menos verán una explicación), pero los buscadores y robots sí que la tomarán con nosotros, porque se creerán que ésta es la página buena, es más todas las páginas del servidor responderán lo mismo.

Respondiendo para que los buscadores no nos tengan en cuenta

Para ello tenemos que poner en nuestra cabecera un error 503 (Servicio no disponible). Esto será bueno porque no devolveremos un 200 (OK) para las páginas temporales, ni devolveremos un 404 (Not found / No encontrado) para el resto de páginas que no estén en nuestro servidor pero si deberán estar y el buscador de turno lo sabe (esto último sería horrible para nuestro posicionamiento, porque el buscador se creería que esas páginas ya no existen y las desindexará).

Para ello, nuestro archivo de respuesta.html será el siguiente:

HTTP/1.1 503 Service Unavailable
Server: Maintenance
Retry-After: 3600
Content-Type: text/html;charset=UTF-8&lt;html&gt;
&lt;body&gt;
<h1>Lo sentimos, estamos de mantenimiento</h1>
Disculpe las molestias, en un momento estaremos con usted.

&lt;/body&gt;
&lt;/html&gt;

Además, añadiremos Retry-After para que vuelvan dentro de un rato a ver si todo está bien. No se garantiza que los buscadores vuelvan dentro de una hora (3600 segundos), pero es normal que vuelvan cuando tengan un rato después de una hora.

Queremos complicarnos la vida

Si has llegado hasta aquí, eres de los que le gustan complicarse la vida e inventar cosas, así que, para dejar un poco a la imaginación y para hacer un servidor web un poco más completo.

Vamos a crear un script que procesará la petición HTTP que se realice (tenemos que recordar que cuantas más cosas metamos, más vulnerable será nuestro sistema, y un script aquí es tremendamente vulnerable).

dispatcher.sh

#!/bin/bash
I=0
while read RAWINPUT; do
if [ ${#RAWINPUT} -le 1 ]
then
break
fi
INPUT[$I]=$RAWINPUT
I=$(($I+1))
doneread -a FIRSTLINE <<< ${INPUT[0]}
METHOD=${FIRSTLINE[0]}
REQUEST=${FIRSTLINE[1]}
HTTPVER=${FIRSTLINE[2]}

echo $HTTPVER 503 Service Unavailable
echo "Retry-After: 3600"
echo "Server: Bash-Maintenance"
case "$REQUEST" in
"/logo.jpg")
FILE="my-logo-file.jpg"
echo "Content-Type: image/jpeg"
echo "Content-Length: "$(stat -c%s "$FILE")
echo
cat $FILE
;;
"/fortune")
CONTENT=$(fortune)
echo "Content-Type: text/html; charset=utf-8"
echo "Content-Length: "${#CONTENT}
echo
echo $CONTENT
;;
*)
FILE="respuesta.html"
echo "Content-Type: text/html; charset=utf-8"
echo "Content-Length: "$(stat -c%s "$FILE")
echo
cat $FILE
;;
esac

Ahora tenemos 3 respuestas posibles:

  • Una para una imagen que llamaremos a través de http://nuestroservidor/logo.jpg y que llamará a la imagen my-logo-file.jpg
  • Otra que llamará al programa fortune, para que nos devuelva una frase aleatoria.
  • Otra que atenderá todas las demás peticiones (*) y servirá el archivo respuesta.html.

Para hacer que netcat utilice este archivo, depende de la versión, por un lado podemos llamar a:

$ sudo sh -c 'while true; do nc -v -l -p 80 -c dispatcher.sh; done'

como usuario:

$ while true; do nc -v -l -p 8000 -c dispatcher.sh; done

Aunque en muchas versiones de GNU/Linux viene otra versión instalada que no soporta -c, pero no todo está perdido:

$ rm /tmp/bashwebtmp; mkfifo /tmp/bashwebtmp; sudo -c sh 'while true; do cat /tmp/f | bash dispatcher.sh | nc -v -l -p 80 > /tmp/f; done';

como usuario:

$ rm /tmp/bashwebtmp; mkfifo /tmp/bashwebtmp; while true; do cat /tmp/f | bash dispatcher.sh | nc -v -l -p 8000 > /tmp/f; done;

No debemos olvidar borrar la pipe /tmp/bashwebtmp cuando terminemos de usar el programa.

Una cosa más, no debemos abusar de este script y no debemos enviar contenidos muy grandes, por ejemplo, no abusar de las imágenes, como decía antes, sólo soporta una conexión, si hacemos que esta conexión se extienda en el tiempo perderemos capacidad de atender más conexiones.

Visto en: Poesía Binaria