sábado, 5 de abril de 2014

Permisos de ficheros nuevos en Linux

Esquema de seguridad en un sistema Ubuntu

Dentro de los sistemas Linux no se suele prestar especial atención a los permisos de los ficheros nuevos. Yo habitualmente trabajo con Ubuntu, y cuando creamos un  fichero o directorio, por defecto, estos son creados con acceso para el grupo y para el resto de usuarios, de forma que es imposible mantener la confidencialidad de los ficheros, ya que todos los ficheros son leibles por cualquier usuario. Este panorama se complica más todavía cuando vemos que Ubuntu por defecto permite el acceso como invitado al sistema: Cualquiera que pueda sentarse en el ordenador podrá iniciar sesión de invitado y rastrear ficheros en el disco duro.
La configuración de seguridad por defecto en Ubuntu es la siguiente:
  1. Al crear un usuario se crea su directorio de usuario en '/home/<usuario>'.
  2. Se crea un grupo con el mismo nombre que el usuario, siendo este grupo el grupo principal del usuario.
  3. Los permisos del directorio de usuario son los siguientes: rwx para el propietario, r-x para el grupo y r-x para el resto de usuarios: Una puerta abierta para que cualquiera que tenga acceso al sistema pueda ver mis ficheros.
  4. Cuando creamos ficheros, estos tienen los permisos rw-r--r--, de forma que cualquiera puede leer los ficheros.
  5. Cuando creamos directorios nuevos, tendremos los permisos rwxr-xr-x, manteniéndose el mismo problema.

Impedir manualmente el acceso a nuestro directorio de usuario

Para impedir que el resto de usuarios puedan acceder a nuestro directorio, nos basta usar el comando chmod para modificar los permisos de nuestro directorio de usuario, ya que en cuanto no tengan paso por el directorio, no podrán acceder a ninguno de los directorios contenidos:
  • Muestro los permisos para comprobar que son los permisos por defecto (rwxr-xr-x):
$ ls -ld
drwxr-xr-x 3 admon admon 4096 dic 25 10:53 .
  • Modifico los permisos para impedir el acceso a los usuarios que no formen parte de mi grupo (admon):
$ chmod o-rwx .
  • Muestro los permisos para comprobar que son correctos:
$ ls -ld
drwxr-x--- 3 admon admon 4096 dic 25 10:53 .
Con la configuración anterior, el resto de usuarios no podrán acceder a nuestro directorio de usuario, y con ello, ya tenemos cerrado el paso al mismo.

Permisos de los ficheros nuevos

Mostrar los permisos de los ficheros nuevos

El comando umask nos muestra los permisos que van a ser eliminados en los ficheros que se creen nuevos:
admon@ubuntupruebas:~$ umask
0002
En este ejemplo, vemos que el valor '0002' se corresponde con:
  1. Permisos especiales (0): No se eliminará ningún permiso especial.
  2. Usuario (0): No se eliminará ningún permiso para el propietario.
  3. Grupo (0): No se eliminará ningún permiso para el grupo.
  4. Otros (2): Se quitará el permiso 'w (escribir)' para el resto de usuarios, de forma que en el fichero o directorio el resto de usuarios no podrá escribir.
También podemos ver la máscara de permisos de forma simbólica:
admon@ubuntupruebas:~$ umask -S
u=rwx,g=rwx,o=rx
Los permisos de los ficheros nuevos están están fuertemente condicionados por la aplicación que ha creado el fichero: Por ejemplo, un editor de textos nunca dará permisos de ejecución a un fichero txt, ya que no lo necesita, mientras que un compilador si que dará permisos de ejecución al ejecutable que genera. Igualmente, al crear directorios es totalmente necesario que estos tengan el permiso x, ya que de lo contrario, no podremos entrar al directorio.

Modificar la máscara de permisos para la sesión en curso

Vamos a crear un fichero ordinario para ver que permisos se le asignan:
admon@ubuntupruebas:~$ touch nuevo_antes
admon@ubuntupruebas:~$ ls -l nuevo_antes 
-rw-rw-r-- 1 admon admon 0 dic 25 11:09 nuevo_antes
Son los esperables, el usuario y el grupo lectura y escritura, y el resto de usuarios solo lectura.
Puedo modificar la máscara para la sesión en curso con el comando umask:
admon@ubuntupruebas:~$ umask 0077
admon@ubuntupruebas:~$ touch nuevo_despues
admon@ubuntupruebas:~$ ls -l nuevo*
-rw-rw-r-- 1 admon admon 0 dic 25 11:09 nuevo_antes
-rw------- 1 admon admon 0 dic 25 11:10 nuevo_despues
Como puedes ver, hemos modificado la máscara con 'chmod 0077', quitando los permisos para el grupo y el resto de usuarios:
  1. Permisos especiales: Un cero, que indica que no se elimina ninguno.
  2. Usuario: Un '0' que no elimina ningun permiso.
  3. Grupo: Un '7', que eliminan todos los permisos (r=4,w=2 y x=1).
  4. Resto de usuario: Otro '7', que elimina todos los permisos.
Cuando creamos el fichero 'nuevo_despues' con el comando 'touch nuevo_despues', y luego mostramos sus permisos con 'ls -l', podemos observar que nuevo_despues tiene los permisos rw-------, lo cual nos indica que el grupo y resto de usuarios no tienen acceso al fichero, el cual es el comportamiento previsto.

Modificar la máscara de permisos para el usuario de forma permanente

Cuando se inicia un shell bash, se ejecutan por orden estos cuatro scripts:
  1. /etc/bash.bashrc
  2. /etc/profile
  3. ~/.bashrc
  4. ~/.profile
  • Tradicionalmente, en el shell sh se ejecutaba un único script (/etc/profile y .profile), el fichero bashrc lo introduce el shell bash para incluir caracteristicas propias.
  • Los dos primeros se ejecutan para todos los usuarios, mientras que los dos últimos son privativos del usuario, de forma que cada usuario tiene su propio fichero '.bashrc' y '.profile'.
  • Cuando iniciamos un shell de entrada (se denomina shell de entrada a cualquier shell que sea nuevo y se ejecutan los cuatro, pero cuando abrimos un shell ya habiendo iniciado sesión, solamente se ejecutan los scripts bashrc.
      Modificar la máscara de permisos para todos los usuarios

      lunes, 10 de febrero de 2014

      Crear un pendrive de instalación de Windows

      Cambios en la instalación de Windows

      La instalación de Windows a partir de vista ha sufrido un cambio notable:
      1. Se permite el uso de dispositivos del estilo pendrive y similares para agregar cualquier controlador de dispositivo que necesitemos en la instalación.
      2. Se utiliza un sistema de imágenes preinstaladas de Windows para instalar.
      3. Se usa una pantalla de bienvenida dentro de Windows en el primer arranque que nos permite personalizar el ordenador.
      4. Se integra el comando sysprep dentro del sistema, haciendo más sencilla la creación de imágenes de Windows por parte de los administradores de sistemas.

      Creación de un pendrive

      Existen algunos tutoriales en la red para instalar Windows a partir de un pendrive, que se basan en procesos más bien artesanales, pero dificiles de seguir por cualquier usuario normal.

      Microsoft, en una estrategia de mejorar el soporte a la instalación, proporciona una aplicación denominada 'Windows 7 USB/DVD Download Tool' que podemos descargar gratuitamente de la siguiente http://www.microsoftstore.com/store/msusa/html/pbPage.Help_Win7_usbdvd_dwnTool

      La forma de instalación de esta es la habitual, doble click, y seguir un instalador. Al acabar el proceso, tendré un acceso directo en el escritorio a la aplicación.

      Cuando arrancamos la aplicación, nos encontramos la siguiente pantalla:

      Como puedes observar, disponemos de un botón Browse que sirve para elegir una imagen iso del sistema operativo a implementar en el pendrive.
      Tras la elección de la imagen iso, pulsamos Next, y accedemos a la siguiente pantalla:
      Como puedes ver, podemos escoger el destino de la imagen iso: Un disco USB o un DVD. Tras escoger USB device, aparece la siguiente pantalla para escoger la unidad USB donde se va a guardar la imagen iso:
      Y tras esto, ya solo nos queda pulsar el botón 'Begin copying', para tener nuestra instalación de Windows en USB.
      Tenemos que advertir que va a ser formateado completamente el pendrive, de forma que debemos hacer copia de los archivos útiles que pudieramos tener en el.




      martes, 4 de febrero de 2014

      ISCSI en Ubuntu 12.04

      ISCSI

      iSCSI es un protocolo usado para conectar unidades de disco a través de redes locales sobre TCP/IP. iSCSI actualmente está sustituyendo con bastante éxito a otros protocolos usados para crear redes SAN a través de redes de fibra óptica (Fibre channel).
      iSCSI proporciona un excelente rendimiento con adaptadores Ethernet Gigabit, a un coste mucho menor que otras alternativas. Como inconveniente, el uso de la pila TCP/IP para transmitir la información produce una merma de rendimiento, ya que se debe transmitir bastante información con los datos, en forma de cabeceras TCP/IP, aunque esto en la práctica no suele ser para nada determinante.
      iSCSI está formado por dos servicios:
      1. Target: Es el servidor iSCSI. 
      2. Initiator: Es el cliente iSCSI.
      Para comprender iSCSI debemos de pensar que al compartir una unidad en una red (donde pueda haber intrusos que intenten acceder a esa unidad) es imprescindible usar algún mecanismo para proteger los datos. La protección de los datos se puede hacer de dos formas:
      1. Autenticando al equipo que conecta con el volumen iSCSI mediante un usuario y contraseña: Esto se configura en el servidor al exigir unas credenciales para el acceso al disco.
      2. Encriptando la información en el disco, para que al circular sobre la red no pueda ser capturada: Esto lo podemos configurar en el cliente, al usar algún tipo de sistema de ficheros encriptado dentro de la unidad.

      iSCSI Target (el servidor de unidades)

      Instalar el iSCSI Target

      • Para instalar el Target en ubuntu debemos instalar el paquete iscsitarget:
        $ sudo apt-get install iscsitarget
      • Tras esto deberemos modificar el fichero '/etc/default/iscsitarget', para hacer que el servicio iscsitarget arranque automaticamente al iniciar el sistema. Para elló deberemos modificar la línea que declara la variable ISCSITARGET_ENABLE para que contenga el valor true:
        ISCSITARGET_ENABLE=true
      • Tras esto, podemos arrancar el servicio iscsitarget con el comando:
        $ sudo service iscsitarget start
      • Si quisieramos parar el servicio debemos usar:
      • $ sudo service iscsitarget restart

      Que es una unidad iscsi

      Estamos familiarizados con el concepto de discos duros y de particionado típico de los ordenadores personales, pero estos conceptos se pueden ver trastocados cuando accedemos al mundo de los servidores y de Linux:
      • Disco duro: Lo que define un disco duro es ser un dispositivo que basicamente admite dos operaciones: leer y escribir bloques dentro de el, y nuestro disco duro va a tener una cantidad de espacio donde podremos guardar la información, espacio que se usa dividiéndolo en sectores. En resumen, es un bloque de datos en el que podemos leer y escribir.
      • Partición: Por motivos prácticos, los discos duros se dividen en particiones, las cuales tienen un tamaño determinado y en ellas podemos leer y escribir sectores. Existen múltiples esquemas de particionamiento, siendo los más habituales el esquema MBR y el GPT usado en los ordenadores más modernos.  Observa que un disco se puede particionar, pero que no hay ningún motivo práctico que nos impida incluso particionar la propia partición (esto lo hacen algunos sistemas operativos para saltarse el límite de cuatro particiones impuesto por el estilo de particionado MBR).
      • Un volumen creado con un gestor de volúmenes (por ejemplo LVM): Un gestor de volúmenes crea unas entidades denominadas volúmenes físicos que se corresponden con particiones o con unidades de disco. Con esos volúmenes fisicos creamos una entidad dedicada a crear dentro de el volúmenes lógicos denominada grupo de volúmenes (el grupo está formado por varios volúmenes físicos). Dentro de los grupos de volúmenes puedo crear volúmenes lógicos, los cuales, de cara al sistema operativo se comportan como si fueran unidades de disco.
      • Un fichero 'compacto': Un fichero compacto no es más que un fichero que ha sido rellenado de ceros hasta ocupar un tamaño determinado. No deja de ser un lugar donde podremos leer y escribir datos y que tiene un tamaño determinado. Para crear un fichero compacto en Linux podemos usar el comando dd, en el ejemplo creamos un fichero de 2GB de tamaño relleno de ceros:
        $ sudo dd if=/dev/cero of=fichero_compacto bs=512 count=4194304
      Todos estos dispositivos pueden ser usados como unidad iscsi, aunque lo menos habitual es el uso de los ficheros compactos, debido al poco rendimiento que proporciona, ya que el fichero está situado dentro de un sistema de ficheros, y sobre el se va a construir otro sistema de ficheros: demasiadas capas de software como para que funcione rapidamente.
      La alternativa más usada para crear unidades iSCSI serian los gestores de volúmenes, ya que permiten una flexibilidad que no obtenemos con las unidades de disco (podemos ampliar un volumen sin problemas), y además puede soportar tecnologías como RAID1 o RAID5, que nos van a permitir salvaguardar nuestros datos.

      Crear un target (volumen compartido por iscsi)

      Cuando compartimos un volumen con iSCSI, el target recibirá uno de los objetos antes descritos (en nuestro caso es un volumen LVM) que compartirá a modo de unida de disco iscsi, y el iniciador (cliente) va a recibir algo idéntico a un disco duro, que podrá formatear o dividir según su conveniencia.
      Algunos usuarios confunden las redes SAN con las redes NAS, aunque no tienen nada que ver:

      1. En una red SAN el servidor lo que comparte son unidades de disco, de forma que el cliente va a recibir una unidad de disco, que podrá particionar y formatear a voluntad.
      2. En una red NAS el servidor comparte recursos, tales como carpetas o impresoras. El cliente al recibir una carpeta compartida, podrá crear ficheros y directorios en esa carpeta (lo cual no tiene nada que ver con el disco duro que recibiamos en SAN).
      Vamos a crear un target en mi servidor:
      • Creamos un volumen con LVM, de 20GB de espacio que posteriormente compartiremos como una unidad iscsi:
      $ sudo lvcreate --name lun0 --size 20G datos
      • Para crear un nuevo target debemos editar el fichero /etc/ietd/ietd.conf, creando el target, para lo cual añado las siguientes líneas:
      Target iqn.2014-02.net.emc:repositorio8
      IncomingUser emc2 secreto
      OutgoingUser
      Lun 0 Path=/dev/mapper/datos-lun0,Type=fileio
      Alias LUN1
      #MaxConnections 6
        • Como puedes ver, la primera línea crea un identificador para el target, el cual ha de ser único a nivel mundial. La nomenclatura oficial es la siguientea: "iqn.<año>-<mes>.<dominio_invertido>:<nombre_asignado_al_target>"
          • iqn: Es siempre es misma cadena
          • año y més: Es la fecha en la que el dominio es válido
          • Dominio invertido: Es el nombre de dominio de nuestra organización (o de la máquina) pero en orden inverso (para mail.telefonica.es sería es.telefonica.mail)
          • El nombre asignado al target: Queda a nuestra elección
        • Incoming user: Es un usuario y contraseña que será pedido al cliente para pode montar nuestra unidad
        • Lun 0 Path=----,Type=fileio: En esta línea estoy indicando el dispositivo que será asociado a nuestro target. En nuestro caso se trata del volumen lvm previamente creado.
        • Alias: Es un alias para el target (no es necesario)
        • MaxConnections: Es el número de conexiones máximo que podremos hacer al target (por defecto solo una ya que es algo raro que varios usuarios usen de forma simultánea una unidad de disco)
      • Ya solo nos queda modificar el fichero '/etc/ietd/initiators.allow, donde se indica para cada target los iniciadores (clientes) tienen permitido su acceso. En nuestro caso particular se va a permitir el acceso a todos los equipos de la red 192.168.1.0/24, con lo cual sitúo dentro del fichero la siguiente línea:
        iqn.2014-02.net.emc:repositorio8 192.168.1.0/24
      • Ya hemos acabado, solo nos queda reiniciar el servidor iscsitarget para que los cambios se apliquen:
        $ sudo service iscsitarget restart

      Creación del initiator (cliente)

      Para conectarnos al target que hemos creado en el punto anterior, debemos de usar otra máquina con ubuntu, donde deberemos instalar el iniciador iscsi. El iniciador que vamos a usar es el iniciador open-iscsi.
      • En nuestro cliente, instalamos el paquete open-iscsi:
        $ sudo apt-get install open-iscsi
      • Modificamos el fichero de configuración de open-iscsi para que el servicio se autoarranque en el inicio del sistema. Para ello edito el fichero '/etc/iscsi/iscsid.conf' y modificamos la variable node.startup al valor auto:
        node.startup = auto
      Ya tenemos instalado el software, ahora debemos conectarnos al target que comparte nuestro servidor (cuya dirección ip es 192.168.1.10), para ello usamos el comando iscsiadm que se encarga de buscar los targets en un servidor, registrarlos, modificar la configuración de conexión al target, conectar y desconectar.
      • Detectamos y registramos en el sistema los targets compartidos por el servidor:
      $ sudo iscsiadm --mode discovery --type st --portal 192.168.1.10
      192.168.1.10:3260,1 iqn.2014-02.net.emc:repositorio8
      El parámetro type indica el tipo de protocolo usado para descubrir los targets, y lo más habitual es que contenga el valor st (abreviatura de send targets).
      • En este momento, nuestro target ya está agregado dentro de la jerarquía de targets detectados, que se almancena dentro del directorio /etc/iscsi/nodes. La información contenida en este directorio solamente debe ser manipulada con el comando iscsadmn, ya que si modificamos los ficheros manualmente, podemos provocar problemas graves al acceder al disco.
      • Para comprobar que tenemos en nuestra base de datos el target descubierto, podemos usar el comando iscsiadm --mode node, que lista los targets que tiene guardados nuestro equipo:
      $ sudo iscsiadm --mode node
      192.168.1.10:3260,1 iqn.2014-02.net.emc:repositorio8
      • Vamos a indicar que nuestro target utiliza autenticación. Para ello debo indicar tres opciones: El método de autenticación, el usuario y la contraseña:
      $ sudo iscsiadm --mode node  --target "iqn.2014-02.net.emc:repositorio8" --portal "192.168.1.10:3260" --op update --name node.session.auth.authmethod --value=CHAP
      $ sudo iscsiadm --mode node  --target "iqn.2014-02.net.emc:repositorio8" --portal "192.168.1.10:3260" --op update --name node.session.auth.username --value=emc2
      $ sudo iscsiadm --mode node  --target "iqn.2014-02.net.emc:repositorio8" --portal "192.168.1.10:3260" --op update --name node.session.auth.password --value=secreto
      • Ya solo nos queda iniciar sesión en el servidor con la opción --login:
      $ sudo  iscsiadm --mode node  --target "iqn.2014-02.net.emc:repositorio8" --portal "192.168.1.10:3260" --login
      Logging in to [iface: default, target: iqn.2014-02.net.emc:repositorio8, portal: 192.168.1.10,3260] (multiple)
      Login to [iface: default, target: iqn.2014-02.net.emc:repositorio8, portal: 192.168.1.10,3260] successful.
      Como puedes ver, estamos conectados al target, el cual va a ser visto por el cliente como un dispositivo scsi (/dev/sdb, /dev/sdc, etc.). Ya solo nos queda usar las herramientas habituales de manipulación de discos duros para poder hacer uso de nuestro disco iscsi.

      Particionar y montar nuestro disco duro

      Lo primero que debemos hacer es descubrir que letras de unidad usa nuestro disco, para ello, podemos usar el comando fdisk:
      $ sudo fdisk -l
      ...
      Disco /dev/sdc: 224.6 GB, 224579813376 bytes
      256 cabezas, 63 sectores/pista, 27196 cilindros, 438632448 sectores en total
      Unidades = sectores de 1 * 512 = 512 bytes
      Tamaño de sector (lógico / físico): 512 bytes / 512 bytes
      Tamaño E/S (mínimo/óptimo): 512 bytes / 512 bytes
      Identificador del disco: 0x00000000

      Disposit. Inicio    Comienzo      Fin      Bloques  Id  Sistema
      /dev/sdc1               1  4294967295  2147483647+  ee  GPT
      ...
      Como puedes ver, en el ejemplo ya hemos creado una tabla de particiones en el disco /dev/sdc, con una sola partición sdc1. Esto ocurre porque no capturamos la salida de fdisk al hacer el ejemplo, y creamos la tabla de particiones y la partición. Lo que realmente nos encontrariamos en una unidad iscsi la primera vez que accedemos es un disco sin tabla de particiones.
      A partir de aquí, puedo particionar el target a voluntad, con fdisk, gparted o cualquier otra aplicación que me permita crear particiones.
      Incluso, tengo la opción de usar la unidad sin particionar, para ello, puedo usar el comando mkfs sobre la propia unidad:
      $ sudo mkfs.xfs /dev/sdc

      Desconectar el target

      Cuando queremos desconectar un target debo seguir estos dos pasos:
      1. Desmontar cualquier volumen que este guardado dentro del target, para ello uso el comando umount
      2. Desconectar el target con iscsiadm --logout
      $ sudo iscsiadm --mode node --target iqn.2014-02.net.emc:repositorio8 --portal 192.168.1.10:3260 --logout
      Logging out of session [sid: 2, target: iqn.2014-02.net.emc:repositorio8, portal: 192.168.1.10,3260]Logout of [sid: 2, target: iqn.2014-02.net.emc:repositorio8, portal: 192.168.1.10,3260] successfulTras esto, ya tenemos desconectado nuestro target

      Eliminar un target de la lista de targets

      Para eliminar un target, debo usar el comando --op delete:
      $ sudo iscsiadm --mode node --target "iqn.2014-02.net.emc:repositorio8" --portal 192.168.1.10:3260 --op delete
      Tras el comando anterior, nuestro target ha sido eliminada de la lista de targets de confianza

      Referencias


      jueves, 3 de octubre de 2013

      Añadir una conexión VPN en Windows 8

      Muchas veces queremos acceder a la red de nuestra empresa para poder trabajar sobre servidores que existen en ella. Existen básicamente dos formas de hacerlo:

      1. Acceso directo: Para acceder a la red interna de la empresa debemos abrir en el router/s y cortafuego/s de la empresa los puertos correspondientes y hacer las redirecciones necesarias que nos permitan abrir los servicios compartidos de nuestra red. Esta opción es bastante liosa en el sentido de que deberemos configurar router y cortafuegos para cada uno de los servicios que queramos tener accesibles.
      2. VPN: Una red privada virtual consiste en conectar a un servidor VPN de mi empresa. Este tipo de conexión se caracteriza por que usa una conexión de red normal pero encriptando la información, de forma que la conexión es segura y funciona para todos los servicios que oferte mi red. La seguridad de la información transmitida a través está garantizada

      Descripción más detallada de la VPN

      Básicamente, cuando conecto a través de una VPN, lo que hago es crear una interfaz de red virtual que va a adquirir una IP de la red de mi empresa, de forma que esa interfaz está conectada directamente a la red de la empresa. El símil que mejor explica lo anterior es imaginarnos que en realidad, hemos tirado un cable de red hasta nuestra empresa y lo hemos conectado a una boca ethernet en ella.
      Pero claro, dispongo de dos conexiones simultaneas: Mi conexión de red doméstica (tipicamente ADSL via WiFi o por cable Ethernet) y mi conexión virtual VPN y esto provoca a veces ciertos problemas.

      Como conectarme a mi VPN

      Debo de preguntar a mi administrador de red por los datos de conexión a la VPN de mi empresa, en concreto, y como mínimo, me deberá facilitar:
      1. La dirección IP o nombre de host a la cual deberé conectarme. Por ejemplo 66.66.66.66
      2. El nombre de usuario y contraseña con el que conectarme: En el caso de que en mi empresa esté instalado Active Directory de Microsoft, lo habitual es que sea mi nombre de usuario y contraseña para el dominio como pepe@midominio.es
      Para crear la VPN:
      1. Abrimos el 'Centro de redes y recursos compartidos'.
      2. Pulsamos sobre la opción 'Configurar una nueva conexión o red'.
      3. Nos aparece la siguiente ventana:

        Pulsamos en Conectarse a un área de trabajo.
      4. En la siguiente pantalla nos permite elegir entre 'Usar mi conexión a Internet' o 'Llamar directamente', escogemos la primera opción.
      5. Pasamos a la pantalla 'Conectarse a un área de trabajo':

        En esta pantalla deberé de indicar:
        1. Dirección de Internet: Es la dirección IP de la VPN que me proporcionó el administrador de mi red, en el ejemplo '66.66.66.66'.
        2. Nombre de destino: El nombre con el cual quiero que aparezca reflejado la VPN, por ejemplo, 'Mi empresa'.
        3. Usar tarjeta inteligente: Lo marcamos si usamos una tarjeta inteligente para identificarnos en Windows.
        4. Recordar mis credenciales: Lo marcamos si no queremos que nos pida el usuario y contraseña cada vez que iniciemos la VPN.
        5. Permitir que otras personas usen esta conexión: Esta es una opción delicada, de forma general, solamente en mi usuario Windows debería estar disponible la VPN, por mucho que la VPN me pida mis credenciales al iniciar. Si marco la casilla, el resto de usuarios del equipo podrán acceder a la conexión VPN, eso sí, conociendo el usuario y contraseña.
      Ya tengo la VPN configurada. Hay que destacar que en Conexiones de red' (aparece mostrando el 'Centro de redes y recursos compartidos' y luego pulsando 'Cambiar configuración del adaptador', o alternativamente, buscando en inicio 'Conexiones de red') me aparecerán normalmente dos nuevas conexiones:
      1. Una primera conexión es la propia VPN, que se denomina Mi Empresa, es la conexión que realmente contiene la configuración de la VPN.
      2. Un bridge de red (Network Bridge): Esta solo aparece si nuestro equipo dispone de varios dispositivos capaces de conectarnos a internet (por ejemplo, un portatil con Tarjeta de red Ethernet y WiFi): Se encarga de puentear la VPN a la forma de conexión que en ese momento esté activa.

      Como conectarme

      La forma de conexión es muy sencilla:
      1. Pulso el icono de la red en el área de notificación de Windows (el icono que muestra la red que estamos usando al lado del reloj).
      2. En el desplegable que aparece a la derecha, puedes ver que aparece nuestra conexión VPN:
      3. Si pulsas en la conexión aparece un botón conectar, y luego nos pedirá nuestro usuario y contraseña de acceso:
      4. Tras esto deberías de estar conectado.

      Problemas con el enrutamiento en el acceso a la VPN

      A veces se produce un problema extraño, y es que podemos acceder a cualquier sitio de nuestra red de empresa, pero no podemos acceder a Internet. Esto se produce por que todo el tráfico de red se está redirigiendo hacia la VPN, y en nuestra empresa, el enrutamiento está configurado para que la VPN no enrute hacia el exterior.
      La forma de arreglar esto es bastante sencilla: Debemos de seguir estos dos pasos:

      1. Debemos indicar en la conexión VPN que no queremos usar la puerta de enlace de la VPN. Con esto lograremos que la puerta de enlace por defecto sea la de mi conexión a internet.
      2. Debemos configurar rutas de enrutamiento estáticas a las distintas subredes que haya en mi empresa.

      Deshabilitar la puerta de enlace por defecto de la VPN

      Expliquemos la situación actual: Estamos conectados a una VPN, y todo el tráfico de red se deriva hacia la VPN, de forma que mi equipo está enrutando todo el tráfico de red hacia la VPN (excepto el tráfico de mis redes locales).
      1. Para indicar en la VPN que no queremos usar la puerta de enlace de la VPN deberemos de acceder al 'Conexiones de red', y mostrando el menú contextual de la conexión VPN escoger 'Propiedades', apareciendo la ventana siguiente:
      2. Ahora hacemos doble click en el nodo 'Protocolo de Internet versión 4 (TCP/IPv4)' y en la ventana que aparece, pulsamos el botón 'Opciones avanzadas'. En la pestaña de 'ConfiguraciónIP' nos aparecerá esta ventana:
      3. Ya solo tenemos que desmarcar la casilla 'Usar la puerta de enlace predeterminada en la red remota'.
      Ahora podremos comprobar lo que hemos hecho:
      1. Comprobamos con un navegador web que con la VPN activada, entramos en interneet.
      2. Comprobamos de algún modo que hemos dejado de acceder a la red interna de la empresa.
      Ya solo necesitamos añadir rutas estáticas a las distintas redes de la empresa.

      Añadir rutas estáticas a las redes de la empresa

      Expliquemos la situación actual: Como he desconectado la puerta de enlace de la VPN, ahora, estoy conectado a la VPN, pero a nivel de enrutamiento estoy derivando todo el tráfico de red a través de mi conexión normal a internet. Esto hace que no sea capaz de acceder a los servicios de mi empresa, pero si salir a internet.
      Para este paso debo de conocer las redes a las cuales quiero acceder, por ejemplo, supongamos que la red interna de la empresa (donde están colgados los servicios de esta es la red 192.168.30.0/24). Esta información me la debe proporcionar el administrador de red de la empresa.
      Ya hemos desvelado el misterio, solo debemos añadir una ruta estática a la red interna de mi empresa (si son varias redes, varias rutas). Para ello, debo obtener ciertas informaciónes:

      • Con ipconfig, debo obtener la dirección IP de mi équipo en la VPN:

      • Con 'route print' puedo mostrar las rutas habilitadas en el sistema. También me permite ver los identificadores de las diferentes interfaces de red.

      • Ahora que conozco la IP de la VPN y el identificador de red de la VPN, puedo añadir una ruta hacia la red deseada, por ejemplo '192.168.30.0/24', para ello uso el comando: route add 192.168.30.0 mask 255.255.255.0 <ip_de_la_VPN> if <número de interfaz de la VPN>, en mi caso, se observa en la imagen:

      Esta ruta que hemos creado no es persistente de forma que cuando el equipo reinicie, desaparecerá. Si quiero que la ruta sea persistente, debo de añadir -p tras la partícula route: route -p add....
      Con esto ya tendré accesible desde mi VPN los equipos de la red de mi empresa, además de disponer de Internet simultáneamente.







      martes, 17 de septiembre de 2013

      El comando tasksel en Ubuntu

      Cuando instalamos Ubuntu usando los antiguos instaladores en modo texto usados por debian, al final del proceso podemos escoger la configuración del sistema: Nos aparece una ventana donde podemos escoger una serie de roles para el sistema que estamos instalando (por ejemplo, el servidor LAMP: Linux Apache MySQL y PHP.
      Es un poco engorroso instalar cualquier servidor en Ubuntu e ir instalándolo paquete por paquete con apt-get, y aparte de eso, los roles que nos aparecen en la pantalla que se ha descrito tienen la ventaja de que para cada uno de ellos se instala toda una maraña de software recomendado que nos va a ser muy dificil de reproducir.
      El comando tasksel nos va a permitir instalar roles en un sistema ya instalado:
      Ejecutar el comando sudo tasksel
      Como puedes ver en la imagen, nos llevamos una agradable sorpresa: Nos aparecen todos los roles que aparecían al instalar Ubuntu, y muchos más. Esto es debido, a que en este punto, podemos convertir nuestra distribución Ubuntu estandard en otra distribución kubuntu, lubuntu, etc.

      Modo gráfico

      Además, si instalamos el gestor de paquetes synaptic (sudo apt-get install synaptic) tendremos acceso a estos roles con la opción de menú "Editar -> Marcar paquetes por tarea", que se nos mostrará de esta forma:
      El editor de tareas de synaptic
      Como puedes ver, son las mismas tareas que obteniamos en tasksel.

      Listar los componentes de una tarea

      Otro punto interesante es conocer los paquetes que forman una tarea de tasksel, para ello usamos el propio comando tasksel, como en este ejemplo que mostramos los paquetes que componen la tarea 'LAMP Server':
      1. Para ver el listado de las tareas disponibles usamos:
        # sudo tasksel --list-tasks
      2. Para ver los paquetes que componen una tarea (por ejemplo lamp server):
        # sudo tasksel --task-packages 'lamp server'




      domingo, 10 de febrero de 2013

      Activar servidor apache para todos los usuarios del sistema

      Vamos a convertir una máquina con Ubuntu 12.04 Server en un servidor web donde todos los usuarios podrán insertar páginas web.

      Instalar el software

      Necesitamos instalar el servidor apache y un servidor ftp:

      Instalar apache

      Podremos instalar apache de tres maneras:
      1. Con tasksel instalamos Apache-MySQL-PHP: Usamos el comando 'sudo tasksel install lamp-server'.
      2. Instala individualmente la instalación de apache: Sudo apt-get install apache2
      3. Instalando manualmente apache a partir de una descarga de la web de apache: Si compilamos la aplicación podremos realizar una configuración personalizada que será imposible con los paquetes distribuidos con Ubuntu.

      Instalar vsftp

      Existen varios servidores ftp para Linux, pero el que documenta Ubuntu Server es vsftp. Para instalarlo solamente tenemos que ejecutar: sudo apt-get install vsftpd.

      Pasos de la configuración

      Activar el módulo userdir

      Para que los usuarios puedan acceder a sus propias carpetas de usuario y tener su propio sitio web, debemos de habilitar el módulo usermod (para ver mas información http://httpd.apache.org/docs/2.2/mod/mod_userdir.html). Este módulo se encarga de crear un sitio web para cada usuario del sistema, sitio que estará accesible en el subdirectorio web ~<nombreusuario> (como en http://serve4.emc.home/~emc2).
      Para activar el módulo usamos a2enmod userdir, quedando activado con sus valores por defecto, que podremos encontrar en el fichero /etc/apache2/mods-enabled/userdir.conf (además existe un fichero de carga del módulo en /etc/apache2/mods-enabled/userdir.load).
      Si queremos configurar el módulo, debemos editar el fichero userdir.conf, aunque es una tarea que nosotros no realizaremos y que se describe en la documentación del módulo.
      Ya solo nos queda recargar la configuración en el servidor con sudo service apache2 reload

      Crear la estructura de directorios usada por userdir en /etc/skel

      Userdir permite servir el directorio public_html de cada usuario como una página web personal. Para que esto funcione, debemos disponer de la carpeta y que esta tenga algún tipo de contenido, solo nos queda crear la carpeta en el directorio del usuario.
      Pero si queremos que los usuarios nuevos tengan su propia web en blanco, deberemos crear estos ficheros y  carpetas en el directorio /etc/skel, de forma que cuando se cree un usuario nuevo este tenga activado el soporte para su página web personal:
      $ cd /etc/skel
      $ mkdir public_html
      $ echo Este es mi sitio > public_html/index.html
      Tras esto, los nuevos usuarios tendrán su sitio personal en public_html.
      En el caso de los usuarios existentes, deberé acceder a su carpeta de usuario y crear el directorio public_html

      Como accedo a la web del usuario

      mediante la dirección 'http://servidor/~nombre-usuario', como por ejemplo en "http://server4.emc.home/~juan"

      Configurar ftp para el acceso de los usuarios a la carpeta public_html

      Por defecto, nuestro servidor FTP permite acceso anónimo, pero no permite el acceso a los usuarios del sistema. Vamos a modificar varias líneas del fichero /etc/vsftpd, para lo cual lo abrimos con un editor de textos, como podría ser gedit (con sudo gedit /etc/vsftpd):
      1. Deshabilito el acceso anónimo:
        1. Si queremos deshabilitar el acceso de usuarios anónimos al servidor modifico la línea 'anonymous_enable=Yes' por 'anonymous_enable=No'. 
        2. El servidor ftp usa el directorio /srv/ftp para los usuarios anónimos, podría ser una buena idea borrar el directorio en cuestión, aunque no lo veo demasiado necesario.
        3. En caso de que tenga habilitado el usuario anónimo y quiera permitir que este suba ficheros al servidor, habilito la orden 'anon_upload_enable=YES'
      2. Habilito la autenticación de los usuarios del sistema:
        1. Habilito la línea 'local_enable=YES' que me permitirá usar los usuarios locales con vsftp.
        2. Habilito la escritura para los usuarios locales con 'write_enable=YES'
      3. Asegurando ftp:
        1. Si quiero limitar a que los usuarios solo puedan escribir en su carpeta de usuario a través de ftp habilito 'chroot_local_user=YES'
        2. Si quiero que solo puedan acceder por ftp una lista de usuarios, habilito 'chroot_list_enable=YES'
        3. La lista de los usuarios que pueden iniciar sesión en el sistema la guardo en el fichero '/etc/vsftpd.chroot_list' (un usuario por línea) y tengo que añadir una línea indicando la ubicación del fichero en 'chroot_list_enable=YES'
      4. Usar FTPS:
        1. Si quiero habilitar FTPS (FTP sobre SSL) habilito la línea 'ssl_enable=YES'
        2. Tras habilitar FTPS debo indicar las ubicaciónes de las claves públicas y privadas que va a usar el sistema para encriptar las comunicaciones. Para ello modifico dos variables:
          1. 'rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem' para la clave pública
          2. 'rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key' para la clave privada
          3. Estas dos claves existen por defecto cuando se instala el paquete 'ssl-cert' (para instalarlo, si no existen los ficheros usamos 'sudo apt-get install ssl-cert')
      Ni que decir tiene que para que los cambios que hayamos realizado se apliquen debemos de reiniciar el servidor ftp con 'sudo service vsftpd restart'

      Enlaces


      domingo, 7 de octubre de 2012

      ssh-keygen

      <h1>ssh-keygen</h1>
      <p>Es un comando usado para generar certificados digitales.</p>
      <h2>Que es un certificado digital</h2>
      <p>Es un fichero que contiene:
      <ul>
      <li>Una clave pública, </li>
      <li>junto con información de identificación de un sujeto o de una máquina (user or host) y </li>
      <li>opcionalmente, la clave de una una Autoridad de Certificación (CA)</li>
      </ul>
      <p>