Skip to main content

Cómo restringir el acceso a tu web mediante htaccess

Usaremos el método de usuario y contraseña (Auth Basic) para acceder a la web ( o a una sección de la web ).

Paso 1. Crea un archivo de .htpasswd. Si ya existe, añade un usuario de la siguiente manera:

#con el parámetro -c crea el archivo
root$ htpasswd -c /home/user/.htpasswd username
#esto añade un usuario al htpasswd existente
root$ htpasswd /home/user/.htpasswd username

Este comando pedirá una contraseña, dos veces. Luego se puede comprobar que el archivo existe y está realmente cifrado:

root$ cat /home/user/.htpasswd
username:$aphash$QZN123D$c444B.B8838L1Vaa.aOf.

Paso 2. Crea el archivo .htaccess en el directorio que quieras proteger. El contenido debe ser el siguiente:

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /home/user/.htpasswd
Require valid-user

Y fin, con esto tendremos el directorio protegido y requerirá un usuario y contraseña válidas para acceder.

Exportar (e importar) bases de datos con mysqldump

La herramienta de mysqldump, nos permite exportar las bases de datos completas de la siguiente manera.

mysqldump -u usuario -pcontraseña nombre_base_de_datos > toda_la_bbdd.sql

También es necesario a veces exportar sólo una tabla de la base de datos, para ello haremos lo siguiente

mysqldump -u usuario -pcontraseña nombre_base_de_datos nombre_de_tabla > solo_una_tabla.sql

Pero es que además, puedes exportar sólamente algunas entradas de la base de datos de la siguiente manera:

mysqldump -u usuario -pcontraseña nombre_base_de_datos nombre_de_tabla --where="created_at>='2020-11-16'" > algunos_pocos_registros.sql

Para importar en la base de datos destino sólo deberás ejecutar:

mysql -u usuario -pcontraseña nueva_base_de_datos < mi_archivo.sql

Fácil y util!

Crear y establecer un campo autoincremental manualmente en MySQL

Más que un artículo es una autonota, con una situación en la que me he encontrado hoy mismo.

A veces pasa que por error o necesidades del proyecto, te encuentras con una tabla que no tiene un clave primaria. Al querer añadir un nuevo campo id resulta que todos se establecen a 0, y no puedes usar el AUTO_INCREMENT de MySQL ni siquiera establecerlo como PRIMARY_KEY. Para solucionarlo hay que poner manualmente un valor distinto para cada registro.

Para hacerlo rápidamente, podemos recurrir a esta query:

SET @position := 0; -- Define una variable
UPDATE mi_tabla
SET id = (@position := @position + 1)
WHERE id = 0;

Esto cambiará todos los campos ID por un valor que se genera usando la variable @position, y así establecemos un id diferente, que nos permitirá cambiar el campo como PRIMARY_KEY y AUTO_INCREMENT.

Comando grep

Este será un artículo práctico, en el que pondré algunos ejemplos de cómo encontrar archivos que contienen una cadena de texto determinada.

A mi me pasa en muchas ocasiones, intentar encontrar en qué lugar de una aplicación (su código fuente) hay una cadena de texto concreta – ya sea la definición de una constante o una palabra clave que en algún momento puse – resulta en ocasiones más que entretenido.

Es cierto que si utilizas frameworks como Eclipse o similares, estas opciones suelen venir integradas de manera más o menos sencillas, pero trabajando desde un terminal, la cosa cambia.

El comando que nos permitirá realizar una búsqueda de una cadena de texto dentro de uno o más ficheros o incluso toda una estructura de directorios, es grep.

A continuación aquí van algunos ejemplos básicos y muy habituales:

pedro@pedro-laptop:/home/pedro$ cat catalina.out | grep UPDATE

o también

pedro@pedro-laptop:/home/pedro$ grep UPDATE catalina.out

Estos dos comandos hacen lo mismo, muestra por pantalla todas las líneas que contengan la palabra UPDATE dentro del fichero catalina.out.

pedro@pedro-laptop:/home/pedro$ tail -f /var/log/syslog | grep usb
pedro@pedro-laptop:/home/pedro$ tail -f /var/log/apache2/access.log |grep web_concreta.html

Así podremos ver en tiempo real qué dispositivos usb se conectan y desconectan al PC o cuando se está accediendo a una web_concreta.html en Apache, respectivamente.

Si lo que necesitamos es buscar de manera recursiva en la estructura de directorios, basta con usar la opción -r:

pedro@pedro-laptop:/home/pedro$ grep -r UPDATE /path/to/dir

También podemos mostrar el archivo que contiene la cadena que estamos buscando, en vez de mostrar sólo el contenido del fichero:

pedro@pedro-laptop:/home/pedro$ grep -H -r usb /var/log/

El anterior comando muestra los archivos y la linea que contiene usb dentro de /var/log y todos sus subdirectorios.

Si lo que necesitamos es mostrar únicamente el fichero sin mostrar el contenido, también es posible:

pedro@pedro-laptop:/home/pedro$ grep -lr usb /var/log/

Si sabemos el nombre o la extensión del archivo que estamos buscando podemos acotar más la búsqueda, ejecutando el siguiente comando:

pedro@pedro-laptop:/home/pedro$ grep -Hr hidden /ruta/a/directorio |grep nombre_de_archivo

Esto nos mostrará todos los ficheros llamados nombre_de_archivo que se encuentran dentro de /ruta/a/directorio y que contienen hidden.

Si lo que necesitas es encontrar la cadena de texto -r, puedes usar las comillas dobles:

pedro@pedro-laptop:/home/pedro$ grep -H -r «-r» /var/log/

Cabe recordar que si el resultado del comando es un listado demasiado largo, tenemos la opción de añadir al final de cualquiera de los anteriores comandos | more que nos permitirá paginar los resultados encontrados, o bien añadir también al final > resultados.txt para generar un fichero de texto con los resultados obtenidos. Añadiendo >> resultados.txt, añadiremos los resultados al final del fichero.

Un saludo!