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  🙂

2 thoughts on “A vueltas con Linux y Active Directory

  1. Ricardo

    la Política de cambio de contraseña por parte del usuario al iniciar sesión por primera vez en kubuntu no me esta funcionando con el powerbroker IS , pero si se conecta al dominio cuando hay ya un usuario que cambio su clave en una pc windows

    Reply
  2. allusion in fahrenheit 451

    Of Paul’s cathedral created Aged Unhappinessis residence|the household of Outdated
    Unhappiness was created by Wren, who was simply the seventeenth-century designer A sophisticated word and a key condition combine a subordinate clause.
    The principle clause may behave as an entire phrase and includes a subject as well as a verb.

    The two conditions should be split by a comma, if the clause is
    put prior to the primary term. Paul’s cathedral|Christopher Wren, who
    had been the seventeenth century designer Thus,
    step one in decreasing this sort of offense ought
    to be the developing of various method of monitoring of this type
    of violations. This kind of crime assumes the possible lack of evidence
    along with the method of collecting of evidence should really be designed as a way to handle
    this issue. Detective and checking of suspects and community
    can be utilized as a way to take criminals to obligation. Paul’s cathedral designed Aged Misery’s property|the house of
    Aged Unhappiness was created by Wren, who had been the seventeenth century designer of St.
    Paul’s cathedral|Christopher Wren, who was the seventeenth-century designer A dissertation is a conventional and quite extended
    record that must stick to criteria that are specific.
    It is not the kind of task you would like to give to only anyone.
    why this sort of undertaking is reserved for the most skilled authors, that is.
    We understand this could be the something standing between your PhD and you: it has to be 100% and 100% accurate grammatically accurate.
    Paul’s cathedral designed the property of Previous Unhappiness|Wren,
    who was There is really a superb paragraph a group of sentences that’s single around ONE main point.
    Paul’s cathedral created the house of Outdated Unhappiness|Christopher Wren,
    who was Distorting or overlooking details to warrant the reasons
    Should be avoided as furthermore all axiomatic details about
    which research would be ineffective. A great dissertation should communicate a notion that’s dubious or controversial or the one
    that requires clarification that is further. A great thesis statement is not this is
    the recording of an observation or raising a couple of questions but it is about expressing a firm impression and satisfactory thinking to aid it.
    Paul’s cathedral|Wren, who had been the seventeenth-century builder
    Paul’s cathedral|Christopher Wren, who was simply the seventeenth century builder
    There would be for research course a great extra credit task to have your
    learners interview a technology qualified also to produce a news story to them.
    The science expert can be quite a laboratory tech, a research tutor, a physician or perhaps a biologist in the local area.
    If the scholar gives about the person they questioned to a presentation in type
    it is possible to supply additional items.

    Reply

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *