Mostrando entradas con la etiqueta Gestion de Archivos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Gestion de Archivos. Mostrar todas las entradas

lunes, 22 de julio de 2013

NFS

Compartir archivos por la red es hoy en dia una tarea trivial; tanto, que incluso en GNU/Linux disponemos de gran variedad de opciones, cada una a medida de las diferentes necesidades.

En esta oportunidad voy a hablar sobre una de ellas NFS, uno de mis tantos pendientes en el Blog y que al fin tengo oportunidad de saldar gracias al día a dia del trabajo. En cualquier caso, de manera sencilla podemos decir que NFS es:

"es un protocolo de nivel de aplicación, según el Modelo OSI. Es utilizado para sistemas de archivos distribuido en un entorno de red de computadoras de área local. Posibilita que distintos sistemas conectados a una misma red accedan a ficheros remotos como si se tratara de locales. Originalmente fue desarrollado en 1984 por Sun Microsystems, con el objetivo de que sea independiente de la máquina, el sistema operativo y el protocolo de transporte, esto fue posible gracias a que está implementado sobre los protocolos XDR (presentación) y ONC RPC (sesión).1 El protocolo NFS está incluido por defecto en los Sistemas Operativos UNIX y la mayoría de distribuciones Linux. "

Wikipedia.

Existen tres versiones de NFS que se utilizan hoy en día:

  • NFSv2: Es la versión más antigua y mejor soportada.
  • NFSv3: Tiene más características que NFSv2, como el manejo de archivos de tamaño variable y mejores informes de errores. Sólo es parcialmente compatible con los clientes para NFSv2.
  • NFSv4: Es la versión más moderna, y, entre otras cosas, incluye soporte para seguridad a través de Kerberos, soporte para ACL y utiliza operaciones con descripción del estado.
En general, hay serias consideraciones que debemos realizar al momento de optar por esta solución, sobre todo en lo relacionado con la seguridad (no voy a entrar en detalles sobre esto en el articulo). En todo caso para aquellos que ya han decidido ir adelante con la solución veamos el proceso de Setup de NFS.

Equipamento Necesario:


En la mayoria de las distribuciones linux, el paquete nfs-utils (el paquete necesario para instalar tanto el cliente como el servidor NFS) viene incluido por default, pero en caso de no ser así simplemente debemos instalarlo con nuestro manejador de paquete. En mi caso:

# yum install nfs-utils

Alternativamente, si son de las personas que prefieren realizar todo por entorno gráfico, seguramente les gustara instalar:

# yum install system-config-nfs

Con esta aplicación pueden ejecutar de manera grafica cada uno de los pasos que voy a comentar aca (la configuración por esta utilidad la dejare fuera del articulo).

Definir los puertos:

En entornos RHEL es necesario definir los puertos que utilizara NFS, debido a que el firewall es incapaz de abrir dinámicamente los puertos aleatorios que de un modo predeterminado utiliza este.

Para esto, lo que debemos es editar el archivo /etc/sysconfig/nfs, habilitando o modificando los siguientes parametros:

RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662

* Este paso lo podemos omitir en caso de que vallamos a ejecutar NFS sin Firewall en una red local.

Iniciar NFS:

NFS requiere los servicios rpcbind y nfslock para ejecutarse, por lo tanto estos deben estar activos y funcionando:

# service rpcbind start
# service nfslock start

Para iniciar nfs:

# service nfs start

Para evitar ejecutar estos pasos cada vez que se inicie el equipo y hacer que el sistema autoinicie los servicios ejecutamos:

# chkconfig nfs on
# chkconfig rpcbind on
# chkconfig nfslock on

Modificando host permitidos y denegados:

Con el objeto de hacer el servicio un poco mas seguro, es posible configurar una lista de host permitidos y denegados; de esta manera no todos en la red pueden acceder a nuestro recurso compartido. Para hacer esto es necesario que:

Editar el archivo /etc/hosts.deny y añadir el siguiente contenido:

portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
statd: ALL

Posteriormente, vamos a modificar /etc/hosts.allow para de esta manera indicar cuales hosts tendrán permitida la conexión:

portmap: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
lockd: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
mountd: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
rquotad: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
statd: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29

* Esto asumiendo que se permitirá acceso a las redes 192.168.70.0/25, 172.16.1.0/28 y 10.0.1.0/29 (se debe personalizar en base a nuestras necesidades).

Modificaciones en el Firewall:

Para servidores de NFSv4, en realidad sólo es necesario abrir en el muro cortafuegos el puerto 2049/TCP (nfs), pues es esta versión dejó de depender del servicio de mapa de puertos (portmap). Sin embargo, para poder trabajar con compatibilidad para NFSv2 y NFSv3, es necesario abrir los puertos 111/UDP, 111/TCP, 662/TCP, 662/UDP, 875/TCP, 875/UDP, 892/TCP, 892/UDP, 2029/TCP, 2049/UDP, 32803/TCP y 32769/UDP. Los puertos que se abran para los servicios lockd, mountd, rquotad y statd deben corresponder con los mismo puertos definidos el archivo /etc/sysconfig/nfs.

Para aplicar estos cambios de forma definitiva modificamos el archivo  /etc/sysconfig/iptables asi:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 662 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 662 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 32803 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 32769 -j ACCEPT

Finalmente, para que todo surja efecto reiniciamos las reglas iptables:

# service iptables restart

Exportando:

NFS funciona simplemente agregando los recursos a compartir y sus reglas en el archivo /etc/exports. Este archivo tiene una estructura simple, pero rigida:

/directorio/a/compartir  EquiposQueConectaranAlRecurso(Reglas)

Podemos obtener un buen listado de ejemplos acá.

Montando el filesystem en el cliente:

Para montar el sistema de archivos NFS se emplea el comando mount:

# mount -t nfs servidor:/directorio /punto/de/montaje/local

Para hacer permanente este punto editamos el /etc/fstab agregando una entrada así:

servidor:/directorio   /punto/montaje   nfs4   opciones  0 0



martes, 8 de enero de 2013

Esteganografía con Tomb

Tomb también cuenta con una serie de herramientas muy interesantes para la seguridad, una de ellas la de hacer esteganografía (ocultar contenido en imagenes) para ocultar la llave y aumentar aun mas la seguridad de la tumba.

Para poder realizar este proceso, Tomb requiere tener instalado steghide, por lo que es necesario instalar este pre-requisito antes de ejecutar cualquier cosa.

Haciendo esteganografía:


tomb bury

Extrayendo la clave:


tomb exhume


viernes, 7 de septiembre de 2012

remontar fichero de solo lectura

Producto del día a día en el trabajo, y haciendo una de esas actividades que se hacen repetitivas (y con los ojos cerrados), sin querer agrege un dispositivo al /etc/fstab y expecifique mal su UUID. Este echo, junto el pequeño problema del punto de montaje de este dispositivo hizo que al reiniciar el equipo mi sistema reportara un error y me dejara en una consola.

Al principio pense que todo seria sencillo, corria un blkid, revisaba el UUID y luego entraba al /etc/fstab y solucionaba el error; pero la realidad fue otra, ya que al intentar solucionar el error me encontre con que el sistema (/) se había montado solo lectura....

Al principio pensé forzar la escritura o cambiar permisos, pero no funciono, entonces vi la luz:

# mount -o rw,remount /dev/sdaX

De esta forma se pide que se monte (o remonte) el dispositivo /dev/sdaX  como lectura y escritura.

jueves, 3 de mayo de 2012

Network File System (NFS)

Instalación del Servidor y el Cliente NFS

Como siempre, vamos a la teoría y como siempre wikipedia:

El Network File System (Sistema de archivos de red), o NFS, es un protocolo de nivel de aplicación, según el Modelo OSI. Es utilizado para sistemas de archivos distribuido en un entorno de red de computadoras de área local. Posibilita que distintos sistemas conectados a una misma red accedan a ficheros remotos como si se tratara de locales. Originalmente fue desarrollado en 1984 por Sun Microsystems, con el objetivo de que sea independiente de la máquina, el sistema operativo y el protocolo de transporte, esto fue posible gracias a que está implementado sobre los protocolos XDR (presentación) y ONC RPC (sesión) . El protocolo NFS está incluido por defecto en los Sistemas Operativos UNIX y la mayoría de distribuciones Linux.

En palabras sencillas, NFS nos permite compartir una partición o dispositivo en nuestra red local, de esta manera podemos montarlo como si de una unidad mas se tratase en un cliente remoto, cosa que en muchos casos viene muy bien...

Características:

  • El sistema NFS está dividido al menos en dos partes principales: un servidor y uno o más clientes. Los clientes acceden de forma remota a los datos que se encuentran almacenados en el servidor.
  • Las estaciones de trabajo locales utilizan menos espacio de disco debido a que los datos se encuentran centralizados en un único lugar pero pueden ser accedidos y modificados por varios usuarios, de tal forma que no es necesario replicar la información.
  • Los usuarios no necesitan disponer de un directorio “home” en cada una de las máquinas de la organización. Los directorios “home” pueden crearse en el servidor de NFS para posteriormente poder acceder a ellos desde cualquier máquina a través de la infraestructura de red.
  • También se pueden compartir a través de la red dispositivos de almacenamiento como disqueteras, CD-ROM y unidades ZIP. Esto puede reducir la inversión en dichos dispositivos y mejorar el aprovechamiento del hardware existente en la organización.

Instalando:

Servidor:

En el servidor es importante tener instalado los servicios , para ello simplemente ejecutamos:

# aptitude install portmap nfs-server nfswatch

Posterior a la instalación, verificamos que los servicios están corriendo, para ello ejecutamos:

# rpcinfo -p

La salida de este comando debería lucir algo así:



Clientes:

Del lado del cliente la cosa es mucho mas sencilla, solo debemos instalar nfs-common:

# aptitude install nfs-common

Configurando y Montando:

Exportando:

NFS va a exportar en la red todos los dispositivos o carpetas que se le indiquen en el /etc/exports, este es el archivo maestro de exportación y en el también podemos especificar detalles como con que maquinas vamos a exportar el dispositivo, que permisos daremos y así.

Obviamente, lo primero que debemos hacer es determinar las carpetas o dipositivos a ser exportados y posteriormente agregamos las lineas al /etc/exports basados en la siguiente estructura:

RutaACompartir IpsPermitidas/MascaraSubRed (Permisos)

Todo quedaría algo así:


Ahora para los cambios tengan efecto es necesario reiniciar el servicio:

# /etc/init.d//nfs-kernel-server restart

Montando en el cliente:

Aquí la cosa también es sencilla, pero tenemos dos opciones, podemos hacer que la partición se monte desde el arranque del sistema o podemos montar la carpeta o dispositivo cuando lo necesitemos.

Montado Permanente:


Si estamos seguros que el equipo cliente siempre va a poder conectarse con el servidor nfs desde el arranque siempre, esta es la mejor opción, para hacerlo simplemente hay que agregar un nuevo punto de montaje en el archivo /etc/fstab; el formato es:

IpServidor:/RutaCompartida   /PuntoMontajeLocal   TipoPartición   Opciones   Dump   Pass

Nos quedaría algo así:

Hecho el cambio, lo que debemos hacer es remontar todos los puntos conocidos ejecutando:

# mount -a

Y listo, ya debemos tener nuestro sistema compartido accesible desde el cliente.

Comando de Montado:

Alternativamente, es posible que no queramos que el cliente monte el dispositivo o carpeta remoto desde el inicio, entonces la alternativa es indicarle el montaje de forma manual, para ello ejecutamos:

# mount -t nfs IpServidor:/RutaCompartida  /PuntoMontajeLocal

martes, 27 de abril de 2010

Cambiar la codificación de un archivo

No les ha ocurrido (sobre todo si programan) que por alguna razón (mayormente descuido) un archivo les termina con una codificación incorrecta y por eso terminan teniendo un montón de caracteres razón donde deberían tener acentos, tildes u otros....

Pues bien, existe una solución sencilla a este problema:

iconv es un útil comando que nos permite hacer cambio de codificación en archivos.... se usa así:

$ iconv -f ISO_8859-1 -t UTF-8  ArhivoOrigen > ArchivoDestino

para saber el formato en el que esta actualmente el archivo pueden usar file (aquí un manual)

Aparte de iconv existe recode.... que tambien nos permite realizar el cambio, lo unico es que no forma parte de la distro (pero se instala de repositorios).

# aptitude install recode


Como alternativa tambien tenemos tcs, el cual, al igual que recode no viene en el sistema por defecto pero podemos instalar de forma sencilla:

# aptitude install tcs

Y lo usamos ejecutando:

$ tcs -t tipo_charset_deseado fichero > fichero_resultante

Ahora, Incluso podemos hacer estas conversiones en mysql. Para ello vasta con ejecutar:

ALTER TABLE bla CONVER TO CHARACTER SET utf8;

Y en Vim tambien es posible.... :

set enc=utf-8


Saber la codificación de un archivo de texto

Hoy me he topado con la necesidad de saber que tipo de codificación tenia un archivo en el sistema y luego de googlear un rato doy con una sencilla solución:

$ file + archivo

en incluso, podemos ir un poco mas allá pasándole parámetros así:

$ file --mime-encoding