your excuse: The air conditioning water supply pipe ruptured over the machine room
CoffMan Weblog Linux category Java category wiki Image thx to Chenchu Ricochet Robot J2MESimon Says J2ME gameCoffMan WeblogJava stuffLinux stuffImage thx to ChenchuWickleMarihuana Category
   Victor Fariña Infante , info about my own projects and thoughts.
 
login



.:¿?-_-¿?:.
Anton tiene




Powered by

 



Technology, Java, thoughts and projects of Coffman, host of wickle dot com. feel free to make comments.
[May 31, 2006]

La encriptacion de sistemas de archivos, directorios y archivos es algo que siempre ha estado ahí, pero con la inclusion en el nucleo 2.6 de la api de encriptacion CryptoAPI han aparecido nuevvas aplicaciones, aunque la que aquí voy a usar es sencilla de instalar, de usar y no requiere un nucleo 2.6
Sobre todo está enfocado a :

  • Administradores de Sistemas que quieren guardar cuidadosamente sus scripts
  • Simples usuarios quue quieren guardar su informacion sensible
  • Trabajadores que no desean que los administradores de la empresa vean sus archivos
  • .... seguro que un monton de usos mas ...

Vamos a suponer que estamos usando una Debian, de lo contrario adapta los comandos como creas conveniente. Lo primero es bajarse encfs  (#apt-get install encfs deberia servir). esto nos baja e instala encfs y fuse si no lo tuvieramos instalado. FUSE es acronimo de filesystem Userspace, y nos permite montar y desmontar sistema de archivos con un usuario normal. FUSE debe ser introducido en el kernel de linux, o bien como modulo  o bien en el propio kernel. Para meterlo como modulo tenemos estas opciones:

  • Instalamos fuse-source
    • (#apt-get install  fuse-source) y nos vamos al directorio del mismo y lo descomprimimos
    • cd /usr/src ; bunzip2 fuse-src.tar.bzip2 ; tar zvf fuse-src.tar
    • Ahora compilamos e instalamos : cd /usr/src/modules/fuse/kernel/ ; ./configure ; make ; make install
    • el modulo deberia estar listo y lo cargamos con modprobe fuse
  • Existe un paquete llamado fuse-modules que  seguramente lo instale automaticamente pero no lo probé aun
  • desde el menu de compilacion del nucleo seleccion en Filesystems->fuse añadir como Modulo y listo


Ahora creamos un directorio para meter todos los datos privados como un usuario normal si lo preferimos:
$ mkdir ~/.privado/ ~/privado/ (necesitaremos los 2 directorios)
Nos aseguramos que el module fuse está cargado:
#modprobe fuse
Añadimos a nuestro usuario al grupo fuse
#usermod -Gfuse coffman (para que linux coja este cambio puede ser necesario que reinicies la sesión)
Creamos el sistema de archivos:
$ encfs ~/.privado/ ~/privado/
Creando nuevo volumen cifrado.
Por favor, seleccione una de las siguientes opciones:
introduzca "x" para modo de configuración para expertos,
introduzca "p" para el modo preconfigurado paranoico,
cualquier otra cosa o una línea vacía seleccionarán el modo estándar.
?>
p

Configuración paranoica seleccionada.

Configuración finalizada. El sistema de ficheros que se va a crear tendrá las siguientes propiedades:
Cifrado del sistema de ficheros: "ssl/aes", versión 2:1:1
Codificación de nombres de ficheros: "nameio/block", versión 3:0:1
Tamaño de clave: 256 bits
Block Size: 512 bytes, including 8 byte MAC header
Cada fichero contiene una cabecera de 8 bytes con datos únicos del IV.
Los nombres de ficheros se codificarán usando el modo de encadenamiento de IV.
El IV de los datos del fichero está encadenado al IV del nombre del fichero.

A continuación se le pedirá una contraseña para el sistema de ficheros.
Debe recordar esta contraseña, ya que no existe absolutamente ningún mecanismo de recuperación. No obstante, la contraseña puede cambiarse después con encfsctl.
Nueva contraseña Encfs:
*******
Verifique la contraseña Encfs: *******

Con esto ya deberiamos tener el directorio ~/privado/ protegido perfectamente ...
Para desmontar el directorio :
$ fusermount -u ~/privado/

Listo... nuestros datos ya estan a salvo, siempre que los metamos en el directorio ~/privado , claro está ;)



by coffman - 19:29:21 |

[May 30, 2006]

Esto no pretende ser un tutorial ni mucho menos, mas bien una pequeñas prueba de concepto para la tecnologia RMI.

Recientemente me ha tocado colaborar en un proyecto con una parte cliente y una parte servidor , ambas en entornos unix y separadas fisicamente por firewalls. De modo que para comunicar las 2 partes del software estoy evaluando varias posibilidades, y para cada una de ellas tendre un ejemplo basico de funcionamiento.

En esta primera parte la evaluacion será de RMI
Para la prueba construiremos el "Hola Mundo" en version cliente/servidor
Los archivos necesarios serán:

  • Hello.java (Una interface con lo basico)
  • HelloImpl.java (El Objeto servidor en si mismo, con metodo main para poder ejecutarse)
  • HelloClient.java (El cliente java)


Estos 3 archivos componen la parte servidora (objetos en el lado del servidor)
Hello.java

import java.rmi.Remote;
import java.rmi.RemoteException;
     public interface Hello extends Remote {
        String sayHello() throws RemoteException;
    }

 

 

HelloImpl.java

        import java.rmi.Naming;
        import java.rmi.RemoteException;
        import java.rmi.RMISecurityManager;
        import java.rmi.server.UnicastRemoteObject;

        public class HelloImpl extends UnicastRemoteObject implements Hello {

            public HelloImpl() throws RemoteException {
                super();
            }

            public String sayHello() {
                return "Hola, holita...";
            }

            public static void main(String args[]) {

                // Create and install a security manager
                if (System.getSecurityManager() == null) {
                    System.setSecurityManager(new RMISecurityManager());
                }

                try {
                    HelloImpl obj = new HelloImpl();

                    // Bind this object instance to the name "HelloServer"
                    Naming.rebind("//192.168.0.18/HelloServer", obj);

                    System.out.println("HelloServer bound in registry");
                } catch (Exception e) {
                    System.out.println("HelloImpl err: " + e.getMessage());

                    e.printStackTrace();
                }
            }
        }


policy

grant {
        // Allow everything for now
        permission java.security.AllPermission;
};


Este es para la parte cliente
HelloClient.java


import java.rmi.Naming;
import java.rmi.RemoteException;
public class HelloClient {
        static String message = "blank";
        static Hello obj = null;
        public static void main(String args[]) {
        try {
            obj = (Hello)Naming.lookup("//192.168.0.18" + "/HelloServer");
            message = obj.sayHello();
        } catch (Exception e) {
            System.out.println("HelloApplet exception: " + e.getMessage());
            e.printStackTrace();
        }
        System.out.println("MENSAJE:"+message);
        }

}


Una vez que tenemos y revisamos estos archivos, compilamos y generamos los proxys para que el cliente

remoto pueda acceder al objeto servidor (que simplemente devuelve un mensaje)

javac Hello.java HelloImpl.java
rmic HelloImpl

Lo cual nos genera los .class de Hello.java y HelloImpl.java . Ademas de esto, el comando rmic, genera unos proxys para copiar en el lado cliente son:
HelloImpl_Stub.class y HelloImpl_Skel.class

El archivo policy lo necesitamos en el lado del servidor para dar seguridad al acceso a nuestro objeto, el ejemplo es INSEGURO para un entorno de producción.
Ahora que tenemos toda la parte del servidor lista, ejecutamos el rmiregistry que levanta un servidor  escuchando en el puerto 1099, Este programa se encarga de recibir peticiones de Clientes que intentan localizar objetos servidores y les indica donde se encuentran fisicamente.

Una vez que tenemos levantado el rmiregisty , Levantamos nuestro objeto de lado del servidor:

java -Djava.security.policy=$HOME/Programacion/java/rmi/policy HelloImpl

haciendo referencia al archivo policy antes creado.

En el lado cliente compilamos HelloClient.java y copiamos el Stub y el Skel generados en el servidor, de modo que tengamos:

HelloClient.class
HelloImpl_Skel.class
HelloImpl_Stub.class

y ejecutamos : java HelloClient , que como resultado deberia dar :
vic@coffdeb:rmi$ java HelloClient
MENSAJE:Hola, holita...



by coffman - 12:27:38 |

[May 20, 2006]

El topic suena interesante , eh ?? pues aun encima es mas fácil de lo que parece, empecemos con los pasos a seguir  ...

Debemos tener un nucleo que tenga compilado ó en forma de modulo lo siguiente :

hci_usb (seguramente ya lo tengamos metido)
rfcomm (para las comunicaciones)
l2cap (idem)
bluetooth (logico, no ?)
No pienso explicar como recompilar el nucleo , hay cientos de páginas que dicen como hacerlo ...

Instalamos tambien los paquetes relacionados con bluetooth, pongo el caso de la debian, si usais otra distribución ejecutar el comando equivalente.

apt-get install bluez-utils bluez-pin bluez-firmware bluez-hcidump bluetooth


La transferencia de archivos la vamos a hacer "a mano" pues la interface grafica a mi aun no me funciona ...

=> Read more!



by coffman - 19:30:11 |



CoffMan Site


Since July 2002
Victor Fariña Infante (aka CoffMan) creator of wIckle.com