Apéndice H. Script para la creación/eliminación de los homes de los usuarios

Cuando se añaden/borran usuarios en la base de datos de LDAP no se crea el directorio destinado a almacenar sus archivos personales (el directorio HOME). La aplicación LDAP Account Manager (ver el Apéndice G, Instalación y configuración de LAM (LDAP Account Manager) para más información) adjunta un script destinado a la creación/eliminación de los directorios home de los usuarios: lamdaemon.pl; pero en esta documentación no se hará uso del mismo.

En su lugar se ha creado el siguiente script, que ha de ser ejecutado como usuario root cada vez que se cree un nuevo usuario, sobre todo si este está destinado a hacer uso de Samba (la creación del directorio home cuando se accede a la shell ya está solucionado: vea la Sección 5.3.2.3, “/etc/pam.d/common-session” para más detalles):

[Note]Nota

El script no está pensado para sistemas en producción, simplemente es un ejemplo utilizado para facilitar la creación de esta documentación.

[Warning]Aviso

Tenga mucho cuidado con el uso del siguiente script, ya que añade y borra, ¡sin preguntar!, los homes de los usuarios en relación al estado de la base de datos de usuarios LDAP.

Su comportamiento es el siguiete:

  • Crea el directorio home y copia el contenido del directorio /etc/skel, de aquellos usuarios que no tengan creado su directorio home.

  • Borra, sin preguntar ni hacer una copia de seguridad, los homes de los usuarios que ya no existan en la base de datos LDAP, pero aun posean un directorio home en el sistem.

[Note]Nota

Este script se ha basado en los scripts creados por J. Vriesman y Jesús Roncero Franco para la elaboración de los siguientes documentos, respectivamente:

#!/bin/sh
#
# Copyright (C) 2004 Sergio González González <sergio.gonzalez@hispalinux.es>
# 
# Depends on:
#               - ldapsearch
#
# Based on http://jeroen.protheus.com/postfix-courier-ldap-howto.html
# (c) J.Vriesman
#
# and
#
# Based on http://bulma.net/body.phtml?nIdNoticia=2013
# (c) Jesús Roncero Franco
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
#
# This script manage the home directories of LDAP users (make the new users home
# directory and delete the non-existent users home directory)



# Password to bind to ldap server
systempass="1"  
# Bind dn
binddn="cn=admin,dc=gsr,dc=pt" 
# Acount leave
accountleave="ou=people,dc=gsr,dc=pt" 
# ldap host
ldaphost="gsr.pt"
# skel directory
skel="/etc/skel/"
# Home leave (without final slash: '/')
homeleave="/home/samba/users"


usernames=`ldapsearch -h $ldaphost -x -w $systempass -D "$binddn" \
                      -b "$accountleave" uid | grep "^[^#]" | grep "^[^dn]" \
                      | grep uid | awk '{ print $2 }'`

# create personal home directories

for username in $usernames
do
  homedirectory=`ldapsearch -h $ldaphost -x -w $systempass -D "$binddn" \
                            -b "$accountleave" "(uid=$username)" homeDirectory \
                            | grep "^[^#]" | grep homeDirectory \
                            | awk '{ print $2 }'`

  group=`ldapsearch -h $ldaphost -x -w $systempass -D "$binddn" \
                    -b "$accountleave" "(uid=$username)" gidNumber \
                    | grep "^[^#]" | grep gidNumber \
                    | awk '{ print $2 }'`

  if [ ! -d $homedirectory ] && [ ! -z $homedirectory ]
  then

    cp -a $skel $homedirectory
    chown -R $username.$group $homedirectory
  fi

done

# delete personal home directories

for username in `ls $homeleave`
do
  name=`ldapsearch -h $ldaphost -x -w $systempass -D "$binddn" \
                   -b "$accountleave" "(homeDirectory=$homeleave/$username)" uid \
                   | grep "^[^#]" | grep "uid:" | awk '{ print $2 }'`

  if [ -z $name ]
  then
    rm -rf $homeleave/$username
  fi
done