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>

martes, 8 de mayo de 2012

Inicio de sesión automático en ssh

Inicio de sesión automático en ssh

Un problema que solemos tener constantemente es tener que introducir la contraseña de los usarios de forma continua cuando conectamos a una máquina remota via SSH.
En linux se resuelve siguiendo estos dos pasos:
  1. Creando un par  clave privada-publica para mi usuario.
  2. Añadiendo la clave pública del par al fichero de claves autorizadas del equipo al cual queremos conectarnos.

Generar el par clave privada - clave pública

Debemos generar un par de clave privada-pública en el equipo desde el cual queremos acceder, de forma, que estos autentifiquen a nuestro usuario frente al servidor ssh.

En Windows

En Windows, debemos usar la utilidad Puttygen, que nos permitirá crear la clave deseada:

Para generar una clave, primero escogemos en los botones de abajo entre las tres opciones de clave:
  1. SSH1(RSA)
  2. SSH2-RSA
  3. SSH2-DSA
En principio el algoritmo RSA aunque es algo más antiguo es seguro, mientras que el DSA es más novedoso y también es considerado seguro.
Tras escoger el algoritmo, debemos pulsar el boton generate, y luego, mover el ratón por la pantalla para que el programa pueda crear nuestra clave.
Tras tener la clave, nos aparecerá una ventana similar a esta:
Como puedes ver, se muestra dos cuadros donde pone Key passphrase: En ellos debemos colocar una clave que usaremos para poder instalar nuestra clave privada, de forma que si perdemos esta, no puedan facilmente obtenerla del archivo.
Ya solo nos queda ver que disponemos de dos botones, uno llamado "Save Public Key" que se usa para guardar la clave pública en un fichero de texto plano.
Para mi clave pública ese texto es el siguiente:
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "dsa-key-20120508"
AAAAB3NzaC1kc3MAAACBALCFITMt1WUK1Ix8BPaqv+nNCd1h0dURKtXvGLiGqBRI
zTamYdqiYUXdOfOEArWgpe3wdXrM2J0FJso6tLw1qk4iVDlISVPhu4EcV1NhZRcb
e4xRi50Q8PlCIbMbaqKiqti993AcPGEx1oan+ExYf1AtoWj83Qykk8UOZwWI6v5d
AAAAFQDWQtzlyi61eHhhyVH27juoTnlWRQAAAIABlRJ1R+aTUfuw0Yrsl4iRvBht
SYibepyzaWCfy0l/xKbnoMsrhlpZ2UlapSYUV1zjZiiu5cA52iV//PpjfD21v/r7
zfWrLpxbGVnkhz+gN/zNgqMquUu1s6+l2yeCHX9ASpG3cfwJOzW/RUvtP9o4vtPU
j0WLv9+jmncc8RXddwAAAIB1SFPkyAmyAdvUahOEfHTV+rgQtoZz0bfzs9uslNoI
3r395u/ozaz8nqs7d5KT0LzkKGM5tnQMJG1VazGNjfL4E5DdcPMXEirZ5jrV5xU5
7jpdZAQVBrkAkYR9Bmasbqbpohb2PLoGYHw5L5A9a1cpRSQ7F9SuDoJ5S6BRhP7A
sA==
---- END SSH2 PUBLIC KEY ----
Y otro botón denominado save private key, que nos guardará en un fichero de certificado ppk la clave privada.
Nota: El fichero ppk contiene tanto la clave privada como la pública.

En Linux

En Linux deberemos crear el par de clave privada-pública con el comando ssh-keygen, que nos creará una clave RSA por defecto:
emc2@server1:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/emc2/.ssh/id_rsa): emc2@server1.emc.lan
emc2@server1.emc.lan already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Passphrases do not match.  Try again.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in emc2@server1.emc.lan.
Your public key has been saved in emc2@server1.emc.lan.pub.
The key fingerprint is:
f9:fc:c2:22:9b:53:59:ef:a8:e5:32:1e:c9:6e:be:11 emc2@server1
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|         ..      |
|        Eo .     |
|       .o=  .    |
|       .=.+o     |
|      oo==+..    |
|      oB**...    |
+-----------------+
Como puedes ver, en primer lugar nos pide un nombre de fichero donde guardar la clave, a lo cual respondemos con emc2@server1.emc.lan.ppk (si no le pongo extensión me dejaría el fichero ppk sin extensión).
Tras ello, me pide una contraseña de paso para instalar el certificado, y despues lo genera.
El programa va a generar dos archivos:
  1. emc2@server1.emc.lan.ppk: Contiene el par clave publica y privada.
  2. emc2@server1.emc.lan.ppk.pub: Contiene la clave pública, y es un fichero de texto normal y corriente.

Añadir al repositorio de claves del servidor ssh nuestra clave pública

Deberemos añadir la clave en cada usuario del servidor al cual queramos conectarnos automaticamente.
Este proceso lo podemos realizar de dos formas:
  1. Editando los ficheros de configuración ssh.
  2. Con el comando ssh-copy-id

Editando los ficheros de configuración del servidor ssh:

Nuestro usuario en el servidor debe tener una carpeta .ssh, que deberá tener los siguientes permisos:
emc2@server1:~$ ls -ld .ssh
drwx------ 2 emc2 emc2 4096 may  8 09:43 .ssh
Como ves, solo es accesible al usuario.
Dentro de esa carpeta, debe existir (y si no lo creamos) denominado 
 en la cual aparecerá un fichero denominado authorized_keys que contiene las claves públicas autorizadas:
emc2@server1:~/.ssh$ ls -l authorized_keys
-rw------- 1 emc2 emc2 618 may  8 09:43 authorized_keys
Como puedes ver, el fichero tiene permisos solo para el propietario.
Debemos editar el fichero que contiene la clave pública que hemos generado en el cliente, y debemos pegar esa clave pública en nuestro fichero authorized_keys, el formato, es el siguiente:
En mi caso el contenido del fichero es el siguiente:
emc2@server1:~/.ssh$ cat authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBALCFITMt1WUK1Ix8BPaqv+nNCd1h0dURKtXvGLiGqBRIzTamYdqiYUXdOfOEArWgpe3wdXrM2J0FJso6tLw1qk4iVDlISVPhu4EcV1NhZRcbe4xRi50Q8PlCIbMbaqKiqti993AcPGEx1oan+ExYf1AtoWj83Qykk8UOZwWI6v5dAAAAFQDWQtzlyi61eHhhyVH27juoTnlWRQAAAIABlRJ1R+aTUfuw0Yrsl4iRvBhtSYibepyzaWCfy0l/xKbnoMsrhlpZ2UlapSYUV1zjZiiu5cA52iV//PpjfD21v/r7zfWrLpxbGVnkhz+gN/zNgqMquUu1s6+l2yeCHX9ASpG3cfwJOzW/RUvtP9o4vtPUj0WLv9+jmncc8RXddwAAAIB1SFPkyAmyAdvUahOEfHTV+rgQtoZz0bfzs9uslNoI3r395u/ozaz8nqs7d5KT0LzkKGM5tnQMJG1VazGNjfL4E5DdcPMXEirZ5jrV5xU57jpdZAQVBrkAkYR9Bmasbqbpohb2PLoGYHw5L5A9a1cpRSQ7F9SuDoJ5S6BRhP7AsA== emc2@portatilemc2sev.emc.lan
Ojo: tras ssh-dss no hay un retorno de carro, hay un espacio que corta la propia página web.
Como puedes ver, tendremos:
  1. en primero lugar el protocolo ssh-dss (también podría ser ssh-rss), 
  2. la clave pública que queremos usar (esa la editamos con el block de notas o cualquier editor de textos).
  3. == usuario@nodo que autenticamos.

Usar el comando ssh-copy-id

Con el comando ssh-copy-id la vida es más facil. Pero esto solo lo podemos hacer con clientes Linux.
Para usarlo, solamente ejecutamos:
$ ssh-copy-id usuario@maquina
Ahora la máquina nos pedirá la contraseña de usario, y tras iniciar sesión, añadirá la clave pública a el repositorio de claves del cliente.
Ojo: Para que esto funcione, al crear la clave con ssh-keygen, no debemos haber dado nombre al fichero de certificado, escogiendo el nombre por defecto (~/.ssh/id_rsa.pub).