26 de marzo de 2011

Enjaular a algunos usuarios de SFTP

El siguiente artículo muestra como permitir el acceso a algunos usuarios del sistema por SFTP usando SSH para la transferencia de archivos de forma segura impidiendo el acceso a directorios fuera de su home (Chroot). Además, los usuarios no podrán conectarse al sistema por SSH desde linea de comandos.

¿Porque usar SFTP con SSH en lugar de usar el servicio vsftpd?
Porque toda la información viajara encriptada (incluyendo la contraseña) impidiendo que alguien pueda acceder a la información durante la transferencia.

En Debian Squeeze, la configuración de SSH por default permite el acceso a todos los usuarios del sistema y recorrer todo el árbol de directorios incluyendo /. Sin embargo, se puede restringir el acceso a ciertos usuarios al Servidor y enjaularlos en su propio home (el usuario se podrá conectar al servidor pero no podrá salir fuera de su directorio personal).

Preparando el Sistema

Primeramente se crea un directorio donde se ubicaran los home de los usuarios del grupo:
   # mkdir /home/usersjaula 

Luego se crea un grupo de usuarios y los usuarios deseados:
 # groupadd usersjaula
# useradd -g usersjaula -d /home/usersjaula/nombreUsuario -m -s /bin/false nombreUsuario
# passwd nombreUsuario

Con los comandos anteriores se creó el grupo "usersjaula" y el usuario "nombreUsuario" sin shell perteneciente al grupo recién creado.

Luego se cambian los permisos de los siguientes directorios:
 # chmod 755 -R /home/usersjaula
# chmod 755 -R /home/usersjaula/nombreUsuario
# chown root.root -R /home/usersjaula

Con los comandos anteriores el usuario no podrá escribir en su propio home. Por ello se crea un directorio en su home para que pueda almacenar sus archivos.
 # mkdir /home/usersjaula/nombreUsuario/archivos
# chown nombreUsuario.nombreUsuario -R /home/usersjaula/nombreUsuario/archivos

Los permisos que se modificaron en los pasos anteriores se realizaron para que funcione el enjaulado SFTP. El propietario del directorio jaula y los directorios sobre este, debe ser root con permisos 755. Esta es una restricción del ChrootDirectory en OpenSSH.

Configuración de SSH

El archivo de configuración de SSH es /etc/ssh/sshd_config. Por lo que todas las configuraciones se realizaran en este archivo.

Por seguridad se recomienda deshabilitar el acceso a root por SSH con la siguiente directiva:
   PermitRootLogin no 

Para limitar el acceso al servicio SSH a ciertos usuarios se usa la directiva AllowUsers:
   AllowUsers nombreUsuario nombreUsuario2 etc 

Para limitar el acceso a ciertos grupos se puede usar:
   AllowGroups usersjaula 

Verificar que se tiene la siguiente linea para enjaular el servicio SFTP:
   Subsystem sftp /usr/lib/openssh/sftp-server 

Agregar las siguientes lineas a final del archivo /etc/ssh/sshd_config para enjaular a un usuario:
  Match User nombreUsuario
ChrootDirectory /home/usersjaula/nombreUsuario
ForceCommand /usr/lib/openssh/sftp-server
# AllowTCPForwarding no ## opcional
# X11Forwarding no ## opcional

Agregar las siguientes lineas a final del archivo /etc/ssh/sshd_config para enjaular a un grupo de usuarios:
  Match group usuariossftp
ChrootDirectory /home/usersjaula
ForceCommand /usr/lib/openssh/sftp-server
# AllowTCPForwarding no ## opcional
# X11Forwarding no ## opcional

Para que los cambios surjan efecto se reinicia el servicio:
   # /etc/init.d/ssh restart 

Si se tiene un firewall se deben de abrir el puerto correspondiente.

Acceder remotamente

Para acceder remotamente al servicio SFTP se puede usar el navegador de archivos tecleando en la barra de direcciones "sftp://IP".

Desde Windows se puede usar cualquier cliente que se indica en esta lista. De los que vienen en la lista, yo recomiendo FileZilla pues con este al subir archivos con acentos y Ñ se mostrarán correctamente en GNU/Linux.

Si se intenta acceder desde linea de comandos a SSH marcara el error:
   This service allows sftp connections only. 

FUENTE:
http://www.esdebian.org/wiki/enjaulado-sftp
http://linuxsix.blogspot.com/2009/03/tutorial-para-hacer-una-jaula-chroot.html
http://www.openbsd.org/cgi-bin/man.cgi?query=sshd_config

18 de marzo de 2011

Alargar cable USB a más de 12 metros

Introducción
En este artículo se explica como alargar un cable USB a una distancia superior al estándar de 5 metros y que funcione adecuadamente una cámara Web. Yo alargue un cable superando los 12 metros y lograr hacer funcionar correctamente memorias USB, impresoras y dispositivos Wireless USB. Para poder hacer funcionar las cámaras Web tuve que utilizar un HUB USB con alimentación eléctrica entre la cámara USB y el cable UTP pues éstas requieren de mayor electricidad (que se pierde al alargar el cable) para funcionar.

La idea surgió después de montar un sistema de vigilancia y conocer el costo de las cámaras IP, tarjetas capturadoras, cámaras de CCTV, etc. El costo de montar un sistema de vigilancia usando dichas cámaras es bastante elevado. Así que empecé a buscar en Internet sobre la posibilidad de ampliar la distancia del cable USB de una Webcam sin que afectara el funcionamiento de esta para usarlas con ZoneMinder. Me encontré con este sitio (en ingles) en donde comentaban que era posible y explican como hacerlo cortando un cable de extensión USB (con conector macho en un extremo y hembra en el otro) por la mitad. Yo decidí hacer una extensión usando conectores USB en lugar de cortar un cable porque leí en varias páginas que funcionaba mejor.

A continuación explico crear una extensión USB.


Material necesario
  • Cable UTP
  • 1 conector USB hembra y 1 macho por cada cable que se desea alargar
  • Cautín y soldadura
  • Tubo o funda termoretráctil (opcional) para la unión del cable con el conector USB
  • Cinta negra

Procedimiento:

El cable/conector USB se compone de 4 pines, 2 para la corriente y 2 para los datos. El Pin 1 y 4 se usan para la corriente y el 2 y 3 para los datos como se muestra en la siguiente tabla:
Pin  Nombre    Color cable    Descripción
1 VCC Rojo +5v
2 D− Blanco Data −
3 D+ Verde Data +
4 GND Negro Tierra

Tomando en cuenta la tabla anterior, lo que se hará es soldar los cables blanco-naranja y naranja del cable UTP en el Pin 1 del conector USB. El blanco-verde en el Pin 2, el verde en el Pin 3 y el resto (café, blanco-café, azul y blanco-azul) en el Pin 4. Como se muestra en la siguiente tabla:
PIN USB    COLOR
1 blanco-naranja y naranja
2 blanco-verde
3 verde
4 resto (azul, blanco-azul, café, blanco-café)
Si se desea usar un cable USB cortado a la mitad en lugar de los conectores se soldaran los cables como se indica a continuación:
PIN    USB        UTP
1 rojo blanco-naranja y naranja
2 blanco blanco-verde
3 verde verde
4 blanco resto

Primeramente se corta un pedazo de funda termoretráctil y coloca dentro de cada extremo del cable. Luego se separan los cables del UTP y se pelan las puntas.

Luego se soldan los cables en cada conector USB como se explicó anteriormente:

Luego se coloca la funda termoretráctil en la parte del cable que está descubierto el cobre y se calienta para cubrirlo.

Probando que funcione:

Una vez soldado los conectores conecté una cámara Web a la extensión recién creada y ésta a una computadora, la reconocía pero marcaba un error. Luego conecté una memoria USB y esta funcionaba bien, pudiendo acceder a los archivos y copiar información en ella. Luego probé una impresora, un dispositivo USB Wireless y una cámara digital para descargar las fotos. Todo funcionaba bien, excepto la cámara Web. Luego compré un HUB USB con alimentación eléctrica y lo coloque entre el CPU y la extensión marcando el mismo error al conectar una Cámara Web. Pero al colocar el HUB USB entre la cámara Web y el la extensión USB la WebCam funcionó correctamente.

Gracias a esta extensión de más de 12 metros tengo funcionando correctamente una cámara USB con Zoneminder. En el HUB puedo conectar más cámaras, incluso puedo conectar cualquier dispositivo USB que desee.

Conclusiones:

En base a las pruebas realizadas se puede concluir que al alargar el cable USB más allá de los 5 metros, este no es capaz de proporcionar el voltaje suficiente para que funcione una cámara Web. Por ello es necesario proporcionarle de alguna manera electricidad. Una forma es con un Hub USB con alimentación eléctrica.


FUENTE:
Wikipedia
http://www.instructables.com/id/How-to-Extend-yout-USB-using-UTP/
http://wiki.buenosaireslibre.org/HowToAlargueUSB

15 de marzo de 2011

Solucionar problema de vizualización de camaras en ZoneMinder


En días pasados sin motivo alguno no se podía visualizar las cámaras en ZoneMinder (lo que estaban grabando en ese momento, ni tampoco se visualizaban los eventos). Sin embargo, si se estaban generando eventos y por consiguiente grabando las imágenes. Incluso si accedías a los eventos se podía generar un video sin ningún problema.

Investigando un poco me doy cuenta que al tratar de acceder a una cámara messages (tail -f /var/log/messages) indicaba algo interesante:

Libgcrypt warning: missing initialization - please fix the application


Buscando en Internet encuentro la solución:
Cambiar el valor a none de la variable AUTH_RELAY ubicada en la pestaña System(Sistema) de las opciones de la consola de administración
Yo tenía la opción hashed.

FUENTE:
http://www.zoneminder.com/forums/viewtopic.php?p=62138
http://www.zoneminder.com/forums/viewtopic.php?p=57610