PAM: Módulos de Autentificación Conectables

27 02 2009

El sistema de “apoyo” a la autenticación y gestión de permisos de Linux, he estado haciendo algunas pruebas y se pueden hacer cosas verdaderamente interesantes, como por ejemplo hacer que un usuario solo pueda hacer login cuando está trabajando en local o que determinado usuario o grupo de usuario no puedan hacer “su” para cambiar de usuario, esto segundo ha sido lo que ha motivado la investigación, ya que pretendo tener un usuario tonto, que solo pueda conectarse a cierta máquina para a través de ahí conectarse a otras, pero que no pueda convertirse en root, voy a explicar de forma rápida como hacer estos dos ejemplos, que, aunque al principio asustan un poco cuando miras los archivos de configuración, cuando entiendes para que es cada cosa, son muy sencillos :)

Como decía, con el primero vamos a conseguir que el usuario “pruebas” solo pueda hacer login en local, esto también se puede hacer en la configuración del SSH, la cosa es ver como hacerlo usando PAM

  1. Editamos el fichero /etc/security/access.conf, aquí es dónde pondremos la regla para cortar el login del usuario, el formato de las reglas es el siguiente:
    • +/- –> Pondremos el símbolo más (+) si queremos permitir el acceso y menos (-) si queremos denegarlo
    • Usuarios –> Aquí podemos poner tanto usuario como grupos, además de la palabra clave ALL, que se permita o se deniegue el acceso a todos los usuarios
    • Origen –> Origen del intento de login, podemos poner una lista de tty’s (terminal local o serie), de nombres de host, de direcciones IP o de dominios (tienen que empezar por .), además de las palabras clave ALL (Para todos los intentos de login), LOCAL (Para logins locales) o ALL EXCEPT LOCAL (Para todas las conexiones excepto las locales)

    Una vez visto esto,  tenemos que escribir lo siguiente:

    -:prueba:ALL EXCEPT LOCAL

  2. Guardamos esto y pasamos a editar /etc/pam.d/ssh, que contiene la configuración de PAM para el SSH
  3. Descomentamos la linea:

    account required pam_access.so

    Esto hace que pam sepa que tiene que buscar reglas de filtrado en el fichero access.conf

  4. Guardamos y salimos del fichero, la próxima vez que el usuario pruebas intente hacer login desde cualquier máquina que no sea la local, se le denegará el acceso.

Pasamos ahora al segundo ejemplo, más sencillo si cabe y para mí, más interesante: Vamos a hacer que un usuario no pueda hacer “su” para cambiar de usuario. Esto se hace en 3 simples pasos:

  1. Editamos el fichero /etc/pam.d/su
  2. Buscamos la línea:
  3. auth required pam_wheel.so deny group=nosu

  4. Descomentamos la línea y cambiamos “nosu” por el grupo al que queremos el cambio de usuario, guardamos y a correr :)
  5. Otra opción sería añadir al usuario al grupo nosu (si no existe, crearlo) y el efecto sería el mismo

Espero que haya resultado interesante.



Instalando el DNIe en Ubuntu Hardy

28 11 2008

Aprovechando que tengo por aquí un lector de tarjetas, he estado mirando como instalar el lector y hacer funcionar el DNI electrónico en él, y la verdad es que ha sido de lo más sencillo, lo que me ha sorprendido gratamente :)

El lector en cuestión es de la marca C3PO, en concreto, el modelo LTC-31, así que si alguien tiene dudas sobre cual comprar, este funciona bien.

Los pasos de la instalación son los siguientes:

  1. Instalamos los paquetes necesarios
  2. apt-get install pcsc-tools pcscd libc6 libltdl3 libssl0.9.8 zlib1g libpcsclite1 libopenct1

  3. Vamos a probar que funcione el lector, esto lo hacemos escribiendo en una terminal:
    pcsc_scan
    Este comando nos debería mostrar lo siguiente (o algo parecido) al conectar el lector de tarjetas:
    found one
    Scanning present readers
    0: C3PO LTC31 (00385557) 00 00
    Fri Nov 28 17:23:49 2008
    Reader 0: C3PO LTC31 (00385557) 00 00
    Card state: Card removed,

    Si ahora metemos el DNI nos mostrará un bonito mensaje (junto con otros) que dice lo siguiente:
    DNI electronico (Spanish electronic ID card)
    http://www.dnielectronico.es

    Si nos sale esto, es que está todo bien, así que podemos seguir.

  4. El siguiente paso es irnos a la página del DNI electrónico y descargarnos el paquete para nuestra distribución, para los que usen Hardy, como yo, hay que descargarse el de Gutsy, que funciona igual
  5. Descargar aquí

  6. A continuación, descomprimimos este paquete e instalamos el deb que contiene, esto la hacemos ejecutando los siguientes comandos desde una terminal (o gráficamente, como más nos guste)
  7. tar xvf Ubunt_Gutsy.tar
    dpkg -i Ubunt_Gutsy/opensc-dnie_1.4.0-5_i386.deb

    Esto último nos advierte de que tenemos que reiniciar la sesión para que funcione, así que cerramos el navegador(muy importante) y cerramos la sesión. Cuando volvamos a abrir, se nos abrirá una ventana del firefox, si no, la abrimos nosotros, y nos deberá aparecer una página que nos informa de que se va a instalar el DNI, así que hacemos click en aceptar, que se activará después de unos segundos.

    Después de esto, solo nos queda instalar el certificado, que se hace a través de una ventana que nos aparece automáticamente, así que no hay nada que explicar, simplemente hay que decir que confiamos en las páginas firmadas por el emisor del certificado (la FNMT), una vez hecho esto, ya estamos listos para usarlo por ahí :)



Acciones programadas con crontab

11 09 2008

Bueno, bueno, esta es una de esas típicas tonterías que he hecho y haré miles de veces, pero que cada vez que la tengo que hacer se me olvida como hacerlo xD

Para programar tareas en linux, lo más habitual es usar el crontab, que ejecuta las tareas configuradas en un fichero, este fichero se puede editar facilmente mediante el comando:

crontab -e

El formato de este fichero es lo “complicado”, ya que si no lo utilizas con asiduidad, es fácil olvidarse de como hay que poner los distintos valores, y de ahí este post. Los campos a configurar son los siguientes:

  1. Minuto: Este campo admite como valor un número entre 0 y 60.
  2. Hora: Este campo admite valores entre 0 y 23.
  3. Día del mes: Un número entre 1 y 31
  4. Mes: Un número entre 1 y 12
  5. Día de la semana: Un número entre 0 y 7, siendo 0=7=Domingo o las 3 primeras letras del día en inglés (sun,mon,tue,wed,thu,fri,sat)

En los diferentes campos se permiten una serie de cosas para hacer más sencilla la configuración de tareas que hay que repetir en varias ocasiones, son las siguientes (Válido para todos los campos):

  • Intervalos: Se permite poner un intervalo de valores, indicando el primer valor y el último, separados por un guión (”-”)
      Ej: 0-5
  • Una lista de números separados por comas significa que la acción se ejecutará en los momentos especificados por la lista:
      Ej: 0,5,10
      Ej: sun,tue,fri
  • Un asterisco (*) indica que la acción se ejecutará para todos los valores posibles del campo en el que se coloque, por ejemplo, si colocamos un asterisco en el campo “día de la semana”, la acción se ejecutará todos los días de la semana.
  • */número indica que la acción se realizará en intervalos de “número”, por ejemplo, si ponemos */5 la acción se ejecutará cada 5 minutos.

Para acabar, guardamos el fichero, salimos, y ya tenemos nuestra acción programada.

Ejemplo para reiniciar el apache cada 30 minutos:
0,30 * * * * /etc/init.d/apache2 restart



Instalando vmware-server en linux x64 (Ubuntu Hardy)

14 07 2008

Aparentemente, este es un proceso fácil de realizar, al menos, hasta que empieza a dar problemas  de librerías o de compilación de los drivers necesarios para que vmware funcione. Por eso, voy a contar los pasos que he seguido, explicándolos lo máximo posible, a ver si le sirve a alguien :)

Vmware-server es gratuito, por lo que podemos descargarlo de la misma página de Vmware, la única “pega” es que tendremos que registrarnos para obtener el número de serie, también es gratuito, pero supongo que querrán tener controlada la gente que se baja el programa :P

Bueno, pasemos ahora a la instalación en sí:

  1. Instalamos los paquetes necesarios para que la instalación funcione correctamente
    apt-get install build-essential linux-headers-`uname -r` xinetd
  2. Bajamos todo lo necesario desde los siguientes enlaces:
    http://www.vmware.com/download/server/
    http://uruz.org/files/vmware-any-any-update-116.tgz

    1. Pichamos en el enlace de descarga de la versión que nos interese, en nuestro caso, la última, es decir, la 1.0.6
    2. Aeptamos la licencia
    3. De esta página bajamos los archivos “VMware Server for Linux” y “VMware Server Linux client package”
    4. Hacemos click en el enlace de registro, rellenamos los campos y aceptamos, con eso obtendremos nuestro número de serie
  3. Descomprimimos todo lo que nos hemos bajado mediante los siguiente comandos, supongamos que hemos descargado todos los ficheros a /home/usuario/vmware/:
    cd /home/usuario/vmware/
    tar xvfz VMware-server-1.0.6-91891.tar.gz
    unzip VMware-server-linux-client-1.0.6-91891.zip
    tar xvfz VMware-server-console-1.0.6-91891.tar.gz
    tar xvfz vmware-any-any-update-116.tgz
  4. Comenzamos la instalación ejecutando (desde /home/usuario/vmware/):
    cd vmware-server-distrib
    sudo su
    ./vmware-install.pl

    Ahora tenemos que contestar a una serie de preguntas que nos hace, generalmente la opción por defecto está bien, así que solo tendremos que presionar la tecla hasta llegar a la licencia, que podemos pasarla presionando varias veces la techa , al final, nos pregunta si aceptamos la licencia, a lo que contestaremos que “yes +

    Ahora nos sigue preguntando por directorios donde queremos instlar los diferentes tipos de fichero, como antes, la opción por defecto suele ser la buena.

    Después de un par de preguntas llegamos al momento en el que el instalador intentará compilar los módulos para los drivers de los dispositivos virtuales, con la versión 1.0.6 no he tenido ningún problema, pero con la 1.0.5 sí, a mitad del proceso me dio un error, que solucioné ejecutando los siguiente:
    cd vmware-any-any-update116
    ./runme.pl

    Esto ejecuta el instalador de nuevo, con la diferencia de que esta vez ya funciona :D

    Seguirá haciendo preguntas, que podemos dejar como están, aunque en mi caso, al tener separadas la partición del home y la de /, he optado por cambiar el directorio donde guardar las MV’s, dejándolo en “/home/Virtual Machines” en vez de “/var/lib/vmware/Virtual Machines” que es el que viene por defecto.

  5. Ahora nos pide el número de serie, así que introducimos el que hemos obtenido al registrarnos y aceptamos, con esto, acaba la instalación del servidor.

Pasamos ahora a instalar el cliente, que nos permitirá conectarnos al servidor que acabamos de instalar y gestionar todo lo relacionado con las máquinas virtuales (creación/eliminación…)

Para instalar el cliente tenemos que seguir los siguientes pasos:
cd vmware-server-console-distrib
./vmware-install.pl
Respondemos a unas cuantas preguntas del mismo estilo que las del servidor, aceptamos la licencia y ya está

Después de instalar el cliente, me he encontrado con una desagradable sorpresa, no funcionaba :( , al ejecutar el comando vmware-server-console me daba el siguiente error, que en parte, ha sido el causante de que escriba esto :D :
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib32/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib32/libstdc++.so.6)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib32/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib32/libstdc++.so.6)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_3.4' not found (required by /usr/lib32/libcairo.so.2)
/usr/lib/vmware-server-console/bin/vmware-server-console: /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1: version `GCC_4.2.0' not found (required by /usr/lib32/libstdc++.so.6)

Esto es debido a un pequeño lio entre librerías de 32 y 64 bits, según he leido por ahí, aunque la solución es bien sencialla, solo hay que eliminar el archivo libgcc_s.so.1, lo que haremos ejecutando lo siguiente:
rm /usr/lib/vmware-server-console/lib/libgcc_s.so.1/libgcc_s.so.1

et voilá, a funcionar.

Aunque yo lo he hecho en la misma máquina el cliente puede estar separado del servidor, lo que permite la gestión remota de MV’s, los pasos a seguir son los mismos, la única diferencia es que cuando abrimos el cliente (vmware-server-console), tenemos que seleccionar la opción “Remote Host” y especificarle los datos de la conexión.



Preparando un live-pendrive con Ubuntu Gutsy

8 07 2008

Hola amigos, soy Coco y en este mini tutorial, vamos a aprender como crear un live-pendrive con Ubuntu Gutsy Gibbon, para cuando vayamos por ahí, tener siempre nuestras aplicaciones favoritas disponibles :)

Material:

  • Pendrive de al menos 1 GB
  • CD de Ubuntu Gutsy
  • Un PC con Linux instalado (no es imprescindible, ya que se puede hacer desde el live-cd)

Proceso:

  1. Preparación del Pendrive:
    1. Abrimos un editor de particiones de nuestro gusto, yo voy a utilizar fdisk, que viene instalado por defecto en Ubuntu. Para ello, abrimos una terminal y ejecutamos:
      sudo su (introducimos nuestra contraseña)
      umount /dev/sdx (Donde x es la letra que se ha asignado al pendrive al insertarlo, se puede consultar usando dmesg)
      fdisk /dev/sdx
    2. Una vez dentro del programa, tenemos que ejcutar los siguientes comandos (Todos seguidos de intro):

      d - Elimina las particiones que tengamos en el pendrive, hay que ejcutarlo tantas veces como sea necesario para eliminarlas todas.
      p - Muestra la tabla de particiones, con esto podemos comprobar si nos quedan particiones por borrar
      n - Crea una nueva partición
      p - Le decimos que la nueva partición sea primaria
      1 - Le decimos el número de partición
      Asignamos el tamaño que queramos (>750 MB), si pulsamos intro sin escribir nada, se asignará el tamaño máximo
      Repetimos el proceso para todas las particiones que queramos crear.
      a - Sirve para marcar una partición como activa
      1 - Le decimos que la partición activa es la 1
      t - Con esto cambiamos el tipo de una partición
      1 - Le decimos que queremos cambiar el tipo de la primera partición
      6 - Es el tipo FAT16, al que queremos cambiar la partición
      w - Escribe la tabla de particiones en el disco y sale del programa.
    3. Nos aseguramos que la partición está desmontada mediante el comando:
      umount /dev/sdx1
    4. Formateamos la partición usando FAT16 y asignandole la etiqueta ubuntu710:
      mkfs.vfat -F16 -n ubuntu710 /dev/sdx1
    5. El formateo de las demás particiones queda a gusto de cada uno :D
    6. Ejecutamos el siguiente comando, que nos preparará el disco para poder arrancar desde él:
      syslinux -sf /dev/sdx1
    7. Extraemos el disco para que se fijen bien los cambios :P , para ello, ejecutamos:
      sync (Muy importante)
    8. Extraemos el pendrive, esperamos unos segundos y lo volvemos a insertar, podremos ver que Ubuntu nos lo intenta montar en /meda/ubuntu710.
  2. Copia de ficheros al disco USB
    1. Tenemos que copiar una serie de ficheros al directorio raíz del disco, lo que haremos ejecutando:
      cd /media/cdromX (Donde X es el número del lector donde tenemos insertado el CD de Ubuntu)
      cp -rf casper disctree dists install pics pool preseed .disk isolinux/* md5sum.txt README.diskdefines ubuntu.ico casper/vmlinuz casper/initrd.gz /media/ubuntu710/
      cd /tmp
      wget pendrivelinux.com/downloads/U710fix.zip
      unzip -o -d /media/ubuntu710/ /tmp/U710fix.zip
      umount /media/ubuntu710

Pués ya está, ya tenemos nuestro Ubuntu en un disco USB, para emergencias :)

Fuente



unoconv, conversor de archivos multiformato para linux

10 04 2008

Lo he descubierto esta mañana, unoconv. Este pequeño programa, sirve para realizar conversiones en los formatos de fichero, pudiendo realizar conversiones entre multitud de formatos. Esto es muy útil para hacer conversiones de gran cantidad de ficheros, ya que una tarea que podría llevarnos horas, se reduce a la ejecución de un comando tan simple como:
unoconv -f "formato_de_salida" "lista_de_archivos"

Un ejemplo práctico de uso, supongamos que tenemos un directorio con varios ficheros de hoja de cálculo de openoffice (ods) y queremos pasarlos a pdf, esta conversión se haría ejecutando lo siguiente:
unoconv -f pdf *.ods

pulsamos intro, y voilá, ya tenemos todos los ficheros en pdf.

Algunos enlaces relacionados con el proyecto:

  • http://freshmeat.net/projects/unoconv/
  • http://dag.wieers.com/home-made/unoconv/