lunes, 31 de enero de 2011

SSH

En vuestros repositorios ya tenéis SSH dispuesto a instalar, así pues:
$ sudo apt-get install ssh
Una vez instalado se autoiniciará el demonio que ejecuta el servidor SSH y gestiona las solicitudes de login remoto.


 Configuracion: Mayor seguridad
Como decía antes no es muy inteligente usar SSH sin modificar el fichero de configuración del servidor. Vamos a modificar algunas opciones para conseguir una seguridad aceptable.
$ sudo gedit /etc/ssh/sshd_config
(nota) Si algunas de las opciones que aquí comento no aparecen en vuestro sshd_config, simplemente agregadlas. Podéis hacerlo donde queráis, aunque lo suyo es que lo hagáis al principio o al final para que sepáis cuales son las opciones que vosotros habéis agregado.
Vemos un fichero de configuración típico basado en “opción valor”. Vamos a comenzar las modificaciones por el puerto que es lo primero que vemos y una de las cosas más importantes. SSH usa por defecto el puerto 22. Esto significa que si no lo cambiamos estamos entregando a un caco que sabe la dirección de dónde vivimos (nuestra IP) también la llave del portal.
Cambiaremos el puerto para evitarlo. Esto no quita que el caco pueda intentar averiguar “el portal” si sabe cómo hacerlo pero al menos le ponemos impedimentos. También hay scripts que atacan directamente el puerto 22, por lo que el cambio de puerto es algo obligatorio. Poned el que queráis y abridlo también en el router para que podáis acceder a vuestro ordenador desde otro. Usaremos por ejemplo el 4321, podéis poner el que queráis. Así pues en el fichero de configuración:
port 4321
Un poco más abajo buscad la opción “Protocol” debe estar a valor 2, si no es así (valor 1 ó 2,1 ponedla. Hay dos versiones de protocolo SSH. La primera está ya en desuso y tiene varias vulnerabilidades. Así debéis dejarlo en vuestra configuración:
Protocol 2
Buscad la sección “Authentication”. Sus dos primeras opciones son también importantes. La primera es el número de segundos que tendrá el usuario remoto para hacer login en tu máquina. Poned ese valor a pocos segundos, no tardamos mucho en hacer login si sabemos la cuenta y la password. De esta forma evitamos ciertos scripts que se aprovechan de ese tiempo. El valor típico en términos de seguridad es 30, aunque podéis poned incluso menos si estáis más conformes.
LoginGraceTime 30
Justo debajo tenéis otras de las opciones más importantes, PermitRootLogin. Si antes usé la metáfora del caco y el portal, esta opción viene a ser que le digáis también en qué planta del bloque de pisos vivís y qué puerta, faltándole sólo la llave. Con esto lo que insinúo es que si sabe por qué puerto entrar, tan sólo le queda averiguar dos datos: el nombre de una cuenta y su contraseña.
Si tenemos esta opción habilitada (yes) el caco ya tiene la mitad del trabajo hecho, pues el usuario “root” existe en todas las máquinas GNU/Linux, tan sólo le queda averiguar la contraseña. Por eso es más que recomendable deshabilitar esta opción. No os preocupéis los que tenéis en mente usar SSH para hacer un uso administrativo, podéis hacerlo con vuestra cuenta y sudo sin problema alguno. Así pues…
PermitRootLogin no
También podéis señalar con el dedo las cuentas que tienen permitido el uso SSH (AllowUsers). Pongamos un ejemplo, que es como mejor se entienden las cosas: Supongamos que tienes un amigo con el que quieres compartir algo vía SSH y además tiene un hermano que es un enreda y en el que no confías por si te la puede liar. Llamaremos a las cuentas “amigo” y “pesado” respectivamente. Para restringir el uso de SSH a tu amigo y a tu propia cuenta (llamémosla “pepino”) podemos indicárselo mediante configuración. Incluso podemos indicar también que tu amigo sólo se pueda conectar a tu ordenador desde el suyo, sabiendo su IP (supongamos que es 83.45.258.21). Pondríamos en la configuración:
AllowUsers pepino amigo@83.45.258.21
De esta forma tú podrías usar tu cuenta (pepino) para conectar a tu equipo desde cualquier lugar, tu amigo podría hacerlo sólo desde su ordenador (si tiene esa IP) y tu hermano no podría conectar a tu máquina vía SSH, si no tiene tu cuenta.
Otra opción interesante es el número de intentos que tiene el usuario remoto para hacer login (MaxAuthTries). Como comenté antes, quien intente conectar debe acordarse de su login y password, por lo que es tontería darle un número grande de intentos. En principio con dos son más que suficientes. Si al segundo intento no lo ha conseguido se cortará la conexión SSH. Siempre se puede volver a conectar y reintentarlo, pero así nos quitamos de encima ciertos scripts que intentan encontrar el login por fuerza bruta a base de ensayo y error.
MaxAuthTries 2
Por último hay otra opción que define el número máximo de usuarios conectados simultáneamente a tu máquina. Esto ha de adaptarse a tus propias necesidades. Si estamos hablando de un ordenador personal donde sólo vas a conectar tú, pues lo lógico sería que como mucho hubiera una. Si estamos hablando de un ordenador que hará las veces de servidor compartiendo una carpeta a varias máquinas, deberás decidir cuántos son. Cuanto tengas claro el número indícalo en la opción siguiente en lugar de la ‘X’:
MaxStartups X
Ya podéis guardar y cerrar gedit. Con esto tenéis un servidor SSH bastante seguro. Como comenté antes nunca es 100% seguro pero a priori podéis estar bien tranquilos. Sólo resta reiniciar el propio servidor SSH para que tome los cambios que hemos efectuado en su configuración. Escribid en consola:
$ sudo /etc/init.d/ssh restart
Un último consejo. Como habéis visto podemos poner trabas al caco en cuanto a nuestra dirección y puerta, pero ¿podemos ponerle problemas con la llave? La llave se entiende que es la contraseña. Y la respuesta es afirmativa. Podéis hacerlo pero vosotros mismos. Poned claves en condiciones a vuestras cuentas. Usad como poco 5 ó 6 caracteres y a ser posible que se entremezclen mayúsculas, minúsculas y números, por ejemplo: entr3TuXeSyp3p1n0s.
Es un ejemplo exagerado, enrevesado a la hora de escribir e incómodo para meterlo en sudo cada dos por tres, pero intentad que sea del estilo y procurad que no sea algo tan simple como vuestro nombre, el de vuestra mascota, vuestra fecha de nacimiento, grupo favorito, etc.

VSFTPD

Opciones de demonios

La lista siguiente presenta las directrices que controlan el comportamiento general del demonio vsftpd.
  • listen — Cuando está activada, vsftpd se ejecuta en modo independiente. Red Hat Enterprise Linux configura este valor a YES. Esta directriz no se puede utilizar en conjunto con la directriz listen_ipv6.
    El valor predeterminado es NO.
  • listen_ipv6 — Cuando esta directriz está activada vsftpd se ejecuta en modo independiente, pero solamente escucha a los sockets IPv6. Esta directriz no se puede utilizar junto con la directriz listen.
    El valor predeterminado es NO.
  • session_support — Si está activada, vsftpd intentará mantener sesiones de conexión para cada usuario a través de Pluggable Authentication Modules (PAM).

Opciones de conexión y control de acceso

La siguiente es una lista de las directrices que controlan el comportamiento de los inicios de sesión y los mecanismos de control de acceso.
  • anonymous_enable — Al estar activada, se permite que los usuarios anónimos se conecten. Se aceptan los nombres de usuario anonymous y ftp.
    El valor por defecto es YES.

  • banned_email_file — Si la directriz deny_email_enable tiene el valor de YES, entonces esta directriz especifica el archivo que contiene una lista de contraseñas de correo anónimas que no tienen permitido acceder al servidor.
    El valor predeterminado es /etc/vsftpd.banned_emails.
  • banner_file — Especifica un archivo que contiene el texto que se mostrará cuando se establece una conexión con el servidor. Esta opción supersede cualquier texto especificado en la directriz ftpd_banner.
    Esta directriz no tiene un valor predeterminado.
  • cmds_allowed — Especifica una lista delimitada por comas de los comandos FTP que permite el servidor. Se rechaza el resto de los comandos.
    Esta directriz no tiene un valor predeterminado.
  • deny_email_enable — Si está activada, se le niega el acceso al servidor a cualquier usuario anónimo que utilice contraseñas de correo especificadas en /etc/vsftpd.banned_emails. Se puede especificar el nombre del archivo al que esta directriz hace referencia usando la directriz banned_email_file.
    El valor predeterminado es NO.
  • ftpd_banner — Si está activada, se muestra la cadena de caracteres especificada en esta directriz cuando se establece una conexión con el servidor. banner_file puede sobreescribir esta opción.
    Por defecto, vsftpd muestra su pancarta estándar.
  • local_enable — Al estar activada, los usuarios locales pueden conectarse al sistema.
    El valor por defecto es YES.

  • pam_service_name — Especifica el nombre de servicio PAM para vsftpd.
    El valor predeterminado es ftp, sin embargo, bajo Red Hat Enterprise Linux, el valor es vsftpd.
  • tcp_wrappers — Al estar activada, se utilizan TCP wrappers para otorgar acceso al servidor. También, si el servidor FTP está configurado en múltiples direcciones IP, la opción VSFTPD_LOAD_CONF se puede utilizar para cargar diferentes archivos de configuración en la dirección IP solicitada por el cliente.
    El valor predeterminado es NO, sin embargo, bajo Red Hat Enterprise Linux el valor está configurado a YES.
  • userlist_deny — Cuando se utiliza en combinación con la directriz userlist_enable y con el valor de NO, se les niega el acceso a todos los usuarios locales a menos que sus nombres esten listados en el archivo especificado por la directriz userlist_file. Puesto que se niega el acceso antes de que se le pida la contraseña al cliente, al configurar esta directriz a NO previene a los usuarios locales a proporcionar contraseñas sin encriptar sobre la red.
    El valor por defecto es YES.
  • userlist_enable — Cuando está activada, se les niega el acceso a los usuarios listados en el archivo especificado por la directriz userlist_file. Puesto que se niega el acceso al cliente antes de solicitar la contraseña, se previene que los usuarios suministren contraseñas sin encriptar sobre la red.
    El valor predeterminado es NO, sin embargo, bajo Red Hat Enterprise Linux el valor está configurado a YES.
  • userlist_file — Especifica el archivo al que vsftpd hace referencia cuando la directriz userlist_enable está activada.
    El valor predeterminado es /etc/vsftpd.user_list y es creado durante la instalación.
  • cmds_allowed — Especifica una lista separada por comas de los comandos FTP que permite el servidor. Cualquier otro comando es rechazado.
    Esta directriz no tiene un valor predeterminado.

Opciones de usuario anónimo

A continuación, se presenta una lista de las directrices que controlan el acceso de usuarios anónimos al servidor. Para utilizar estas opciones, la directriz anonymous_enable debe tener el valor de YES.
  • anon_mkdir_write_enable — Cuando se activa en combinación con la directriz write_enable, los usuarios anónimos pueden crear nuevos directorios dentro de un directorio que tiene permisos de escritura.
    El valor predeterminado es NO.
  • anon_root — Especifica el directorio al cual vsftpd cambia luego que el usuario anónimo se conecta.
    Esta directriz no tiene un valor predeterminado.
  • anon_upload_enable — Cuando se usa con la directriz write_enable, los usuarios anónimos pueden cargar archivos al directorio padre que tiene permisos de escritura.
    El valor predeterminado es NO.
  • anon_world_readable_only — Si está activada, los usuarios anónimos solamente pueden descargar archivos legibles por todo el mundo.
    El valor por defecto es YES.
  • ftp_username — Especifica la cuenta del usuario local (listada en /etc/passwd) utilizada por el usuario FTP anónimo. El directorio principal especificado en /etc/passwd para el usuario es el directorio raíz del usuario FTP anónimo.
    El valor por defecto es ftp.
  • no_anon_password — Cuando está activada, no se le pide una contraseña al usuario anónimo.
    El valor predeterminado es NO.
  • secure_email_list_enable — Cuando está activada, solamente se aceptan una lista de contraseñas especificadas para las conexiones anónimas. Esto es una forma conveniente de ofrecer seguridad limitada al contenido público sin la necesidad de usuarios virtuales.
    Se previenen las conexiones anónimas a menos que la contraseña suministrada esté listada en /etc/vsftpd.email_passwords. El formato del archivo es una contraseña por línea, sin espacios al comienzo.
    El valor predeterminado es NO.

Opciones del usuario local

La siguiente es una lista de las directrices que caracterizan la forma en que los usuarios locales acceden al servidor. Para utilizar estas opciones, la directriz local_enable debe estar a YES.
  • chmod_enable — Cuando está activada, se permite el comando FTP SITE CHMOD para los usuarios locales. Este comando permite que los usuarios cambien los permisos en los archivos.
    El valor por defecto es YES.
  • chroot_list_enable — Cuando está activada, se coloca en una prisión de chroot a los usuarios locales listados en el archivo especificado en la directriz chroot_list_file.
    Si se utiliza en combinación con la directriz chroot_local_user, los usuarios locales listados en el archivo especificado en la directriz chroot_list_file, no se colocan en una prisión chroot luego de conectarse.
    El valor predeterminado es NO.
  • chroot_list_file — Especifica el archivo que contiene una lista de los usuarios locales a los que se hace referencia cuando la directriz chroot_list_enable está en YES.
    El valor por defecto es /etc/vsftpd.chroot_list.
  • chroot_local_user — Si está activada, a los usuarios locales se les cambia el directorio raíz (se hace un chroot) a su directorio principal luego de la conexión.
    El valor predeterminado es NO.

Servidor y cliente FTP

Servidor FTP

Un servidor FTP es un programa especial que se ejecuta en un equipo servidor normalmente conectado a Internet. Su función es permitir el intercambio de datos entre diferentes servidores/ordenadores.
Por lo general, los programas servidores FTP no suelen encontrarse en los ordenadores personales, por lo que un usuario normalmente utilizará el FTP para conectarse remotamente a uno y así intercambiar información con él.
Las aplicaciones más comunes de los servidores FTP suelen ser el alojamiento web, en el que sus clientes utilizan el servicio para subir sus páginas web y sus archivos correspondientes; o como servidor de backup (copia de seguridad) de los archivos importantes que pueda tener una empresa. Para ello, existen protocolos de comunicación FTP para que los datos se transmitan cifrados, como el SFTP (Secure File Transfer Protocol).

Cliente FTP

Cuando un navegador no está equipado con la función FTP, o si se quiere cargar archivos en un ordenador remoto, se necesitará utilizar un programa cliente FTP. Un cliente FTP es un programa que se instala en el ordenador del usuario, y que emplea el protocolo FTP para conectarse a un servidor FTP y transferir archivos, ya sea para descargarlos o para subirlos.
Para utilizar un cliente FTP, se necesita conocer el nombre del archivo, el ordenador en que reside (servidor, en el caso de descarga de archivos), el ordenador al que se quiere transferir el archivo (en caso de querer subirlo nosotros al servidor), y la carpeta en la que se encuentra.
Algunos clientes de FTP básicos en modo consola vienen integrados en los sistemas operativos, incluyendo Miscrosoft Windows, DOS, GNU/Linux y Unix. Sin embargo, hay disponibles clientes con opciones añadidas e interfaz gráfica. Aunque muchos navegadores tienen ya integrado FTP, es más confiable a la hora de conectarse con servidores FTP no anónimos utilizar un programa cliente.