A vueltas con Linux y Active Directory

Hace algo así como un año escribí un post que titulado Montando un sistema para clonar Linux y Windows en un colegio, en el que, entre otras cosas, comentaba cómo permitir que los usuarios de un Active Directory pudiesen acceder a los ordenadores del colegio (o la empresa, o lo que sea).

El escenario es el siguiente:

  • Servidor Active Directory
  • Dos perfiles de usuarios: profesorado y alumnado (por simplificar)
  • El profesorado tiene acceso a una serie de carpetas en red, y el alumnado a otras
  • Estas carpetas tienen que montarse y ser accesibles tanto en Windows como en Linux

El caso es que, a lo largo del curso, el enfoque del anterior artículo ha dado algunos problemas (sobre todo con aplicaciones no Gnome que intentaban guardar ficheros en las carpetas en red, por el método usado para montarlas), y he tratado de pulirlo para usarlo correctamente este curso. También he cambiado el escritorio que va a usarse a KDE (básicamente, porque soy más de KDE que de Unity / Gnome), aunque es posible que el curso próximo tengamos unos cuantos ordenadores poco potentes, siguiendo este enfoque con LXDE o XFCE.

Bueno, vamos al grano. Vamos a realizar las siguientes suposiciones:

  • El dominio se llama: «midominio»
  • El nombre FQDN del dominio es: «midominio.fqdn.com»
  • El usuario administrador del dominio (o con permisos para añadir equipos al dominio) es «admin»
  • El profesorado accede a: una carpeta con su nombre de usuario, una carpeta «Publica» y otra «mediateca». Las dos primeras están en el mismo servidor (fileserver) y la última en otro (mediaserver). Su grupo en el Active Directory es «teachers».
  • El alumnado accede sólo a las dos primeras, no a la mediateca. Su grupo en el Active Directory es «students»
  • En el servidor «fileserver» tenemos dos carpetas compartidas, «teachers.scripts» y «students.scripts» que contienen una serie de scripts de usuarios. En estas carpetas hay un fichero «version» con la versión de los scripts (sólo un número, nada más, que incremento si cambio los scripts), y una carpeta «bin» con los scripts que hay que ejecutar.

Si queremos usar KDE en Ubuntu, lo lógico sería instalar KUbuntu, pero debido a este bug que ya he reportado, vamos a tener que instalar Ubuntu y después KDE. Ahí van los pasos:

  • Instalación base de Ubuntu, iniciar sesión y actualizar (y liberar espacio):
    sudo apt-get update
    sudo apt-get dist-upgrade
    sudo apt-get autoremove
    sudo apt-get clean
  • Instalar algunos paquetes que vamos a necesitar:
    sudo apt-get install samba cifs-utils smbclient ssh kde-standard kde-l10n-es smbnetfs bindfs

    Cuando nos pregunte qué gestor de acceso queremos usar, diremos que lightdm.

  • Para añadir el equipo al Active Directory usaremos «PowerBroker Identity Services, Open Edition», conocido hasta hace poco como Likewise open. Es necesario instalarlo a mano, pero es muy sencillo:
    1. Accede a la web de PowerBroker Identity Services, Open Edition y descarga la versión que necesites.
    2. En mi caso, suelo descargar el fichero con wget, y así ya lo tengo donde lo quiero.
    3. Cambia el fichero descargado a ejecutable:
      chmod u+x pbis-....sh
    4. Ejecuta e instala (yo le indico que no cree links para aplicaciones legacy, no  los necesito).

Ya tenemos instalado todo lo que necesitamos. Ahora vamos a cambiar la configuración necesaria:

Edita /etc/samba/smb.conf e indica el dominio que se va a utilizar:

workgroup = midominio

Reinicia samba:

sudo service samba restart

Añade el equipo al dominio:

sudo domainjoin-cli join midominio.fqdn.com admin@midominio.fqdn.com
sudo /opt/pbis/bin/config AssumeDefaultDomain true
sudo /opt/pbis/bin/config UserDomainPrefix midominio
sudo /opt/pbis/bin/config LoginShellTemplate /bin/bash

Edita el fichero /usr/share/pam-configs/pbis y cambia:

sufficient     pam_lsass.so

Por:

[success=ok default=ignore]     pam_lsass.so

Edita el fichero /etc/nsswitch.conf y cambia:

hosts: files mdns4_minimal [NOTFOUND=return] dns

Por:

hosts: files dns mdns4_minimal [NOTFOUND=return] mdns4

Reinicia los servicios necesarios:

sudo /opt/pbis/bin/lwsm restart lwio

Crea el fichero /usr/share/pam-configs/my_mkhomedir:

Name: activate mkhomedir
Default: yes
Priority: 900
Session-Type: Additional
Session:
 required pam_mkhomedir.so umask=0022 skel=/etc/skel

Actualiza la configuración de PAM:

sudo pam-auth-update

Edita el fichero /usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf para permitir logins manuales, y que el escritorio a utilizar sea KDE. Añade:

allow-guest=false
user-session=kde-plasma
greeter-show-remote-login=false
greeter-show-manual-login=true

Ahora, para que los usuarios puedan loguearse en el dominio y acceder a sus carpetas, necesitamos un par de ficheros en sus perfiles de usuarios, por lo que los copiaremos en /etc/skel. Además, meteremos también un script que se ejecutará al inicio de cada sesión en KDE y creará los accesos necesarios a las unidades de red correspondientes.

sudo mkdir /etc/skel/.smb
sudo cp /etc/samba/smb.conf /etc/skel/.smb
sudo cp /etc/smbnetfs.conf /etc/skel/.smb
sudo chmod o+r /etc/fuse.conf
sudo mkdir -p /etc/skel/.kde/Autostart
sudo nano /etc/skel/.kde/Autostart/10-login.sh
sudo chmod u+x /etc/skel/.kde/Autostart/10-login.sh

El código del script «10-login.sh» lo indico más adelante.

Reiniciamos:

sudo reboot

Con esto ya podemos loguearnos con cualquier usuario del active directory. Ahora vamos con los scripts.

El primer script que vamos a copiar (10-login.sh) va a hacer lo siguiente:

  1. Si los scripts del servidor ya se han descargado anteriormente, comprobará la versión de éstos. Si es la última no se hace nada, en caso contrario, o si nunca se han descargado,  los descarga y los copia en la carpeta «.midominio».
  2. El comando «smbnetfs» mapea todas las carpetas compartidas del dominio a una carpeta local. Comprobamos que la carpeta exista, y si es el caso, por si las moscas, desmontamos lo que pueda tener montado. La carpeta que vamos a usar es «.servers».
  3. Si el usuario pertenece al dominio, mapeamos la estructura de carpetas compartidas. En caso de ser alumno o profesor, copiamos los scripts correspondientes (si la versión lo requiere) y ejecutamos el script de inicio.

Y aquí el código del script:

#! /bin/bash

function checkandcopy()
{
  localversion=$1
  remotepath=$2
  remoteversion=`cat $remotepath/version`
  if [ $localversion != $remoteversion ]
  then
    rm -r ~/.midominio/*
    cp -r $remotepath/* ~/.midominio/
  fi
}

isalumno=`pbis list-groups-for-user $USER | grep students`
isprofesor=`pbis list-groups-for-user $USER | grep teachers`
isdominio=`pbis list-groups-for-user $USER | grep usuarios^del^dominio`

version=-1

if [ -d ~/.midominio ]
then
  if [ -f ~/.midominio/version ]
  then
    version=`cat ~/.midominio/version`
  fi
else
   mkdir ~/.midominio
fi

if [ -d ~/.servers ]
then
  # For if the flies
  fusermount -u ~/.servers
else
  mkdir ~/.servers
fi

if [ ! -z "$isdominio" ]
then
  smbnetfs ~/.servers
  sleep 5
fi

if [ ! -z "$isalumno" ]
then
  checkandcopy version ~/.servers/MIDOMINIO/FILESERVER/students.scripts
  ~/.midominio/bin/login.sh
fi

if [ ! -z "$isprofesor" ]
then
  checkandcopy version ~/.servers/MIDOMINIO/FILESERVER/teachers.scripts
  ~/.midominio/bin/login.sh
fi

El script «login.sh» que hay en la carpeta de los profesores vuelve a comprobar que el grupo de seguridad es el adecuado, y usa otro script auxiliar para montar las carpetas necesarias.

#! /bin/bash

userhome=/home/local/MIDOMINIO/$USER
scriptbase=$userhome/.midominio
serversbase=$userhome/.servers

isprofesor=`pbis list-groups-for-user $USER | grep teachers`

if [ ! -z "$isprofesor" ]
then
  $scriptbase/bin/mountsecure.sh $serversbase/MIDOMINIO/FILESERVER/$USER $userhome/Personal
  $scriptbase/bin/mountsecure.sh $serversbase/MIDOMINIO/FILESERVER/Publica $userhome/Publica
  $scriptbase/bin/mountsecure.sh $serversbase/MIDOMINIO/MEDIASERVER/mediateca $userhome/Mediateca
fi

Y el script «mountsecure.sh» al que se hace referencia sólo comprueba que los directorios necesarios existen. Si existen, desmonta lo que pueda haber montado, por si las moscas, y si no, crea el directorio, para después montar la carpeta de red indicada.

#! /bin/bash
remote=$1
local=$2

if [ -d $local ]
then
  # For if the flies
  fusermount -u $local
else
  mkdir -p $local
fi

bindfs -ono-allow-other $remote $local

¡Y listo! Ahora, para el alumnado, copiamos y adecuamos los scripts del profesorado, y ale, a trabajar. Por supuesto, estos scripts se podrían adecuar para comprobar la pertenencia a otros grupos, configurar otro tipo de recursos, etc.

Pero con esto, por ahora, a mí me vale  🙂

Crear un disco virtual cifrado en GNU/Linux

Hace un tiempo, en otro ordenador, tuve un disco virtual cifrado en mi máquina GNU/Linux. Tenía ganas de ver si la manera de hacerlo había cambiado, y veo en la siguiente dirección un modo muy interesante de hacerlo, que incluso permite montar el disco virtual en una máquina Windows (por ejemplo, para poder llevar información sensible en un pendrive, como en mi caso, al ser profesor, podrían ser las notas de mis alumnos, cumpliendo así con la LOPD, al no sacar dicha información personal del centro en un soporte sin cifrar):

http://kailaspatil.blogspot.com.es/2009/08/encrypted-virtual-file-system-evfs.html

Para aportar algo sobre el artículo original, vamos a scriptear la creación del disco virtual con tres pasos: Continue reading

Montando un sistema para clonar Linux y Windows en un colegio

En el colegio en el que trabajo tenemos una red de ordenadores relativamente grande (para ser un colegio, hay unos 1300 alumnos y 100 empleados): dos aulas de informática de unos 30 equipos cada una con su red propia, un ordenador en cada clase, varios en salas de profesores, secretaría y dirección, etc. En total, unos 165 equipos de usuario, junto con cinco servidores virtualizados y algún que otro dispositivo extra conectado a la red, como discos de backup (y no cuento con los ordenadores del programa Eskola 2.0, porque esos van a parte). Los ordenadores del colegio están actualmente dentro de un dominio Active Directory bajo Windows Server 2012, por lo que es requisito indispensable que todos los equipos estén dentro del dominio y se pueda utilizar la autenticación con los usuarios del dominio en todos ellos, incluyendo las máquinas Linux (cada empleado y alumno tiene su usuario y clave personal). Una de las tareas que más tiempo lleva todos los años es reinstalar equipos, y evidentemente, hacerlo a mano es perder el tiempo. No sólo el sistema operativo, el problema son todos los programas que se utilizan en las diferentes asignaturas. Para ello lo habitual es crear una imagen maestra y clonarla en los equipos en los que hay que reinstalar, configurando después cada instalación, e intentado que la configuración post-clonado sea lo más rápida y sencilla posible. Puestos en situación, el resumen de lo que voy a contar en este artículo es el siguiente:

  1. Cómo realizar la imagen maestra con dos sistemas operativos (Windows 7 y Ubuntu Linux 13.04)
  2. Cómo preparar la imagen para clonarla
  3. Cómo clonar esa imagen
    1. en un ordenador individual
    2. con un servidor Clonezilla para realizar un clonado multicast en varios equipos al mismo tiempo
  4. Cómo facilitar los pasos posteriores al clonado en Windows
  5. Cómo facilitar los pasos posteriores al clonado en Ubuntu Linux 13.04, incluyendo la integración de los mismos en el directorio activo

Continue reading

El capitalismo y los aviones que no vuelan

Vaya por delante que en este artículo no voy a hablar de los aviones del aeropuerto de Castellón.

La gente que ha estudiado conmigo (ingeniería en informática en Deusto) sabe que me encantaban las asignaturas, tanto técnicas como teóricas, referentes a la informática «pura y dura», y que incluso disfruté con las de administración de empresas cuando la persona que las impartía era buena. Pero una de las asignaturas de las que más disfruté fue «Deontología Profesional» en el último curso de la carrera, vamos, la que llamábamos «ética», algo que mucha gente no entendía, porque la consideraban un tostón.

En concreto, me fascinó la parte en la que estudiamos la obra de Adam Smith, en cuyas ideas se basa en gran medida el sistema económico capitalista que hoy rige nuestra sociedad. En su su obra aparece la idea de una «mano invisible», ficticia, metáfora de una regulación natural que se da en los mercados en ausencia de presiones e injerencias externas (vamos, que los gobiernos no se meten en regulación de mercado). Esta mano invisible es uno de los fundamentos del liberalismo económico que hoy defienden gran parte de los políticos que abogan por la privatización y la desregulación de mercado (un eufemismo para el despido barato). Según esta teoría, en ausencia de presiones externas, el mercado va reasignando los beneficios obtenidos, logrando que estos vayan llegando poco a poco a todas las partes de la sociedad, incluso a los sectores más desfavorecidos, logrando así una mejora para todos los estratos sociales, y por lo tanto, para la sociedad en sí, y todo ello motivado, tan sólo, por el egoísmo de las diferentes personas en sus decisiones relativas al ámbito económico, tal y como podría desprenderse de la obra «La riqueza de las naciones».

El problema de los políticos, economistas, banqueros, empresarios, etc., que esgrimen este tipo de ideas es que sueltan esto (si al menos tienen la decencia de saber en qué se basa la teoría socio-económica que defienden, que algunos ni eso) y se quedan tan pichis. En mi opinión, humilde, que no soy para nada un experto en el tema, es absurdo pensar que una persona como Adam Smith, que tuvo la intención de elevar la economía al ámbito de la ciencia, formulase una hipótesis como tal sin plantear bajo qué condiciones se podría producir la acción de esa supuesta mano invisible. Es como si alguien dijese, sin más, «los aviones vuelan», a modo de afirmación categórica e irrefutable. Si llevamos a esa persona a un aeropuerto y le enseñamos los aviones de la pista, o de un hangar, claramente no están volando. En ese momento nos podría decir, «vale, no vuelan», pero mirando al cielo veríamos aviones que sí lo hacen.

¿En qué quedamos, los aviones vuelan, o no? Pues depende. La lógica y las matemáticas nos proporcionan una herramienta para describir lo que necesitamos: la doble implicación. Un avión vuela, sí y sólo sí, la diferencia de presión ejercida por las corrientes de aire que se forman, sobre todo, en las partes superior e inferior de sus alas crea una componente de fuerza vertical tal que es capaz de compensar, y superar, el tirón gravitatorio del planeta sobre su masa. Es decir: si esas corrientes existen, el avión vuela; si el avión vuela, es que esas corrientes de aire existen. Punto.

¿Pudiera ser que Adam Smith plantease uno de estos «si y sólo si» en lo referente a la actuación de su «mano invisible»? Aquí es donde entra en juego la otra gran obra de Adam Smith, precursora de «La riqueza de las naciones»: la no tan conocida, y en ocasiones denostada y, pudiera ser, malinterpretada a posta, «Teoría de los sentimientos morales». Si bien en «La riqueza de las naciones» se muestra al egoísmo propio y racional como motor del mercado, en su anterior obra Adam Smith plantea un marco moral de referencia sin el que su obra no puede entenderse. Según este marco moral, la «mano invisible» no actúa por arte de magia, en cualquier ocasión, sino que es necesario un modo de actuar muy concreto por parte de los agentes económicos (las personas con la pasta). Este modo de actuar se podría resumir, y así lo vimos en la universidad, en que las personas, aún movidas por el egoísmo racional, tienen que buscar se admirables, y no sólo admiradas. ¿Cuál es la diferencia? Vamos a ver dos ejemplos:

  • Situación A: Fulanito Pérez ha sido trabajador de la construcción durante mucho tiempo, y debido a la explosión de la burbuja inmobiliaria, se ve súbitamente en paro y con una hipoteca. Mientras va por la calle ve a Rogelio Dinérez, presidente de la constructora que acaba de despedirle, conduciendo su flamante y nuevo coche. Fulanito Pérez siente envidia. Admira el nuevo coche de su jefe, pero no puede evitar pensar: «valiente ‘jo puta, así te estrelles».
  • Situación B: Fulanito Pérez es trabajador de la construcción en la empresa «EcoCons» de construcción ecológica y socialmente responsable. Mientras pasea con sus hijos por la calle, gracias a que su horario de trabajo le permite integrar sin problemas su vida laboral y familiar, ve pasar a su jefe, Rogelio Sociablez, en su nuevo coche eléctrico con batería de última tecnología, que iguala sin problemas la autonomía y potencia de un motor de combustión, y ha sido desarrollada por el cluster de empresas tecnológicas en el que la constructora invierte parte de sus beneficios. Admira el nuevo coche de su jefe, y no puede evitar pensar: «con todo lo que hace, se lo merece».

A mi forma de verlo, este sencillo ejemplo muestra la diferencia entre buscar ser admirado y admirable. En la situación A, el señor Rogelio actúa por egoísmo, buscando su propio beneficio, y no le importa lo que la gente piense de él. En el caso B, su tocayo muy probablemente montó su constructora también por egoísmo: le permitiría tener una vida más acomodada que otros trabajos y le proporcionaría una mayor seguridad económica, pero además de eso quiere que la gente lo vea como alguien digno de admiración. Entendida así la teoría de Adam Smith, para que el libre mercado funcione las personas deberían actuar movidas por un egoísmo racional, sí, pero no perdiendo nunca de vista la idea de ser dignos de la admiración que recibirán por aquello que consigan.

Algunas personalidades importantes en el ámbito económico y político insisten en que el mercado necesita más libertad, menos injerencia política, menos leyes de protección a los trabajadores y más libertad de acción para los empresarios, porque sólo así se crearán puestos de trabajo y riqueza para todos, dicen. Pero si los aviones vuelan si y sólo si existen las condiciones necesarias y suficientes, y lo mismo ocurre con la actuación de la mano invisible que regula el mercado, sería interesante preguntar a esas importantes personalidades si ellos creen que vivimos en el mundo representado en la situación A, o en la B.

Nota: ciertos estudiosos de la obra de Adam Smith indican que, cuando éste escribió «La riqueza de las naciones» había dejado de lado su anterior obra, y que por lo tanto, lo planteado en la «Teoría de los sentimientos morales» no es aplicable a su obra posterior, pero tal y como indican otros autores con los que yo estoy más de acuerdo, esto es absurdo, porque tras escribir «La riqueza de las naciones» Adam Smith se embarcó en una segunda edición de su obra anterior, reafirmando y completando su teoría.

Algunas referencias: