jueves, 18 de septiembre de 2014

Permitir conexiones externas a MySQL

Si necesitas acceder desde cualquier host a un servidor MySQL, es necesario que primero le digamos al servidor que escuche todas las solicitudes que provengan de otros hosts. Para ello editamos el fichero de configuración /etc/mysql/my.ini

$ sudo nano /etc/mysql/my.cnf

Modificamos la linea…

bind-address = 127.0.0.1

Por…

bind-address = 0.0.0.0

Reiniciamos el servidor

$ sudo /etc/init.d/mysql restart

Ahora nuestro servidor estará a la escucha de cualquier solicitud de conexión, pero calma, si intentamos conectarnos obtendremos un error parecido a este…

ERROR 1130: Host ‘X.X.X.X’ is not allowed to connect to this MySQL server
 
Esto ocurre por que aún falta decirle a MySQL que permita la conexión de nuestro usuario desde la IP X.X.X.X , para ello entramos en nuestro servidor (desde la consola) como root:

$ mysql -u root -p

Introducimos nuestra contraseña y ejecutamos la siguiente instrucción SQL

grant all on *.* to USUARIO@'IP' identified by 'CONTRASEÑA';

Si deseas acceder desde cualquier dirección IP, debes cambiar en la anterior consulta SQL la IP del host por el carácter % para permitir todas.

miércoles, 8 de mayo de 2013

Seguridad para servidores web apache2

Es recomendable eliminar la información sensible sobre el servidor que este muestra con las configuraciones por defecto de los programas. Así dificultamos que cualquiera sepa que software utilizamos para proveer los servicios y las versiones instaladas.

En este caso trataremos como ocultar dicha información de las HTTP Headers que devuelve nuestro apache para no mostrar ningún tipo de información. De ello se encarga la directiva ServerSignature, cuando el valor de esta directiva es “On” el servidor web muestra información sobre el servidor web cuando la petición de un cliente da como resultado un error HTTP 3XX, 4XX o 5XX, esta información normalmente incluye el nombre del servidor, la versión que se encuentra en ejecución, el tipo de servidor (unix, windows) y si existe definido un “ServerName” este valor también aparecerá.


Para evitar que se muestre ningún tipo de información editaremos el archivo /etc/apache2/conf.d/security buscamos la directiva ServerSignature y ponemos su valor en “Off”.

$ nano /etc/apache2/conf.d/security

Guardamos el archivo, reiniciamos apache2 y probamos que ya no sale ninguna información sensible.

$ /etc/init.d/apache2 restart

jueves, 25 de abril de 2013

Virtual Hosts en apache2

Los hosts virtuales son comodisimos a la hora de realizar proyectos en apache por lo tanto recomiendo su uso y explico como hacerlos en este tutorial.

Para empezar debemos crear el directorio que vamos a utilizar como raíz de nuestro virtual host.
$ mkdir /home/username/http/proyecto

Para continuar vamos a darle algo de contenido que mostrar para realizar las pruebas iniciales.
$ echo "<h1>Hola mundo</h1>" > /home/username/http/proyecto/index.html

Seguidamente, deberemos dar de alta nuestro virtual host en apache y para ello escribiremos las siguientes sentencias:
$ cd /etc/apache2/sites-available
$ cp default proyecto
$ nano proyecto


Ahora en el documento que hemos abierto para editar debemos configurar las opciones que deseamos para el virtual host y el directorio de trabajo debiendo quedar parecido a esto:
<VirtualHost *:80>
ServerName proyecto

DocumentRoot /home/username/http/proyecto  
<Directory />
  Options FollowSymLinks
  AllowOverride None

</Directory>
<Directory /home/username/http/proyecto >
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order deny,allow
    Allow from all

</Directory>
</VirtualHost>
Y ahora activamos el directorio virtual:
$ a2ensite proyecto

Editamos el archivo hosts para activar el redireccionamiento:
$ nano /etc/hosts

añadiendo esta línea:
127.0.0.1 proyecto

Reinicio Apache
$ /etc/init.d/apache2 reload

Y ya está. En http://proyecto puedo ver mi página Hola mundo. Ahora, ¡a trabajar!

domingo, 21 de abril de 2013

Actualizar hora mediante NTP en Debian

NTP son las siglas de Network Time Protocol, o Protocolo de Hora de Internet que es lo que utilizaremos para sincronizar nuestra fecha y hora desde Debian.

Para ello debemos tener instalado "ntpdate" y si no lo tenemos lo instalamos con:

$ aptitude install ntpdate

Para sincronizar la hora ejecutamos la siguiente línea y automáticamente lo hará:

$ ntpdate -u cl.pool.ntp.org


Eso es todo!!

Instalar servidor FTP con vsftpd en Debian

En este tutorial vamos a ver como instalar el servicio más habitual para transferir archivos por la red. Para ello vamos a utilizar vsftpd que es uno de los más sencillos de configurar y además de los más seguros.

En el servidor podremos crear tantos usuarios ftp como queramos pero en este caso haremos solo uno y lo introduciremos en un grupo de usuarios para el uso exclusivo de ftp y que no tengan acceso a la shell del sistema, además no podrá salir de su directorio raíz.

EMPEZAMOS!!


Preparamos el sistema

Antes de instalar el servidor ftp vamos a crear los usuarios y securizarlos para que tengan los mínimos permisos y sólo puedan hacer lo que nosotros definamos.
Crearemos un grupo llamado ftp al cual asociaremos los usuarios que crearemos ahora o en el futuro para el uso exclusivo del ftp.

$ groupadd ftp

Ahora sí, creamos los usuarios con sus correspondientes características.

$ useradd -g ftp -d /var/www -c ”Webmaster” webmaster

Le asignamos un password al usuario/s con el comando passwd. Si no tiene password asignada no funcionará.

Ahora creamos una shell ficticia en el directorio correspondiente para que ningún usuario ftp tenga acceso a la shell del sistema.

$ mkdir /bin/ftp

Editamos el fichero /etc/shells y la añadimos en la última línea.

$ nano /etc/shells

Editamos el fichero /etc/passwd

$ nano /etc/passwd

Buscamos la línea donde está definido el usuario que hemos creado antes y le añadimos el shell falso debiendo quedar parecido a esto:

webmaster:x:1000:1006: webmaster :/var/www:/bin/ftp

Instalación del servidor FTP

Para ello ejecutamos.

$ apt-get install vsftpd

Configuración del servidor FTP

El fichero de configuración del servidor se encuentra en /etc/vsftpd.conf. Lo editaremos para configurarlo en función de las necesidades.

Necesidades del servidor

En este caso práctico los usuarios FTP no pueden tener acceso al shell del sistema, deben estar enjaulados en sus directorios raices y deben poder crear archivos y directorios en sus dominios. El servidor no admite acceso de forma anónima.

# Example config file /etc/vsftpd.conf

# El demonio esta escuchando
listen=YES

# Desactivamos el acceso anónimo
anonymous_enable=NO

# Los usuarios locales del sistema pueden conectarse al ftp
local_enable=YES

# Permitimos a usuarios escribir
write_enable=YES

# Aplica esta máscara para los archivos y carpetas propiedad del usuario
local_umask=003

# Activamos mensajes de bienvenida
dirmessage_enable=YES

# Activamos el los de subidas/bajadas de archivos
xferlog_enable=YES

# Las conexiones de transporte van al puerto origen 20 (ftp-data).
connect_from_port_20=YES

# El archivo donde guardará el log de transacciones del FTP
xferlog_file=/var/log/vsftpd.log

# El archivo de registro será en formato estándar xferlog ftpd
xferlog_std_format=YES

# Enjaulamos a los usuarios en su directorio raíz activando estas dos lineas, no permitiendoles salir de éste
chroot_local_user=YES
chroot_list_enable=YES

# Archivo que contendrá una lista de usuarios que no tendrán acceso FTP
chroot_list_file=/etc/vsftpd.chroot_list

# Para habilitar la lista de usuarios con acceso al servidor FTP
userlist_enable=YES

tcp_wrappers=YES

userlist_deny=NO


A continuación creamos el fichero vsftpd.chroot_list el cual tendrá la lista de usuarios que no tendrán acceso al servidor:

$ touch /etc/vsftpd.chroot_list

Volcamos los datos a este fichero desde /etc/password con el comando.

$ cat /etc/passwd | awk -F: ‘{ print $1 }’ > /etc/vsftpd.chroot_list

Esto nos genera un fichero con los login de usuarios del sistema del cual quitamos los que si queremos que tengan acceso y los ponemos en el fichero /etc/vsftpd.user_list.

Reiniciamos el servicio y listo

$ /etc/init.d/vsftpd restart

Ya tendríamos nuestro FTP configurado y listo para usarse!!


Para añadir VSFTPD al arranque del sistema en todos los niveles de corrida, utilice:

$ chkconfig vsftpd on

Si al subir archivos con el usuario te da error "553 Could not create file." seguramente es que no tiene permiso para escribir en el directorio por lo que deberás dar permisos en el directorio escribiendo:

$ chmod 777 ruta_carpeta_usuario

Ejemplos de ficheros

vsftpd.chroot_list
# Usuarios sin acceso al FTP
root
daemon
bin
sys
sync
games
man
lp
mail
news

vsftpd.user_list
# Usuarios con acceso FTP
webmaster

jueves, 28 de febrero de 2013

Instalar Imagick en PHP con Debian

Bueno, queriendo hacer thumbnails de archivos pdf de forma automática mediante php encontré que se podía hacer mediante Imagick asique lo instalé en mi server siguiendo estos pasos y me puse rápido a funcionar con ello.

Primero de todo instalamos las libs necesarias de php e ImageMagick:
$ apt-get install php-pear php5-dev imagemagick libmagick9-dev php5-imagick
$ pecl install imagick

Para terminar reiniciamos apache y a funcionar con ello!
$ /etc/init.d/apache2 restart 

domingo, 27 de enero de 2013

Expresiones regulares imprescindibles


¿Qué son y para que sirven las expresiones regulares?

Las expresiones regulares o patrones son siempre útiles para validar datos, buscar y encontrar coincidencias en cadenas de caracteres y más.

A continuación voy a poner algunas expresiones regulares esenciales para usar en tus desarrollos.

Validar una URL

Para comprobar si una URL dada tiene el formato esperado:
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \?=.-]*)*\/?$/  

Validar un E-mail

Saber si un e-mail dado es válido:
^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$  

Comprobar la seguridad de una contraseña

Para aquellos que necesitáis sugerir / comprobar la fortaleza de una contraseña:
(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$  
De esta forma comprobaremos:
  • Contraseñas que contengan al menos una letra mayúscula.
  • Contraseñas que contengan al menos una letra minúscula.
  • Contraseñas que contengan al menos un número o caracter especial.
  • Contraseñas cuya longitud sea como mínimo 8 caracteres.
  • Contraseñas cuya longitud máxima no debe ser arbitrariamente limitada.

Validar un número de teléfono

Con este snippet se validarán todos los número de teléfono pertenecientes a los listados en la Wikipedia:
^\+?\d{1,3}?[- .]?\(?(?:\d{2,3})\)?[- .]?\d\d\d[- .]?\d\d\d\d$  

Validar número de tarjeta de crédito

Ahora que tan de moda está el e-commerce seguro que esto le vendrá bien a más de uno:
^((67\d{2})|(4\d{3})|(5[1-5]\d{2})|(6011))(-?\s?\d{4}){3}|(3[4,7])\ d{2}-?\s?\d{6}-?\s?\d{5}$  

Recoger ID de un vídeo de Youtube

Si necesitas recoger el ID de un vídeo de Youtube en sus múltiples combinaciones, esta es tu expresión regular:
/http:\/\/(?:youtu\.be\/|(?:[a-z]{2,3}\.)?youtube\.com\/watch(?:\?|#\!)v=)([\w-]{11}).*/gi  

Validar todas las etiquetas de imagen sin cerrar

Ahora que prácticamente todos empleamos xHTML es interesante comprobar que todas nuestras etiquetas de imagen están correctamente cerradas:
<img([^>]+)(\s*[^\/])></img([^>  

Validar una dirección IP

Si necesitas validar una dirección IP introducida por un usuario, esto te será de gran ayuda:
/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/  

Validar código postal

En muchas ocasiones necesitamos recoger en los formularios de alta el código postal:
^([1-9]{2}|[0-9][1-9]|[1-9][0-9])[0-9]{3}$  

Validar un nombre de usuario

Si por ejemplo quisiésemos validar un nombre de usuario con un mínimo de 4 caracteres y un máximo de 15 haríamos lo siguiente:
/^[a-z\d_]{4,15}$/i  
Además el nombre estaría utilizando sólo caracteres de la A-z y números.

Fuente