scieee AI-readable full text Open interactive document viewer

Normalización del directorio activo en una entidad financiera

Alcañiz Azcón, Alberto

Full text

TRABAJO FINAL DE CARRERA TÍTULO DEL TFC: Normalización del Directorio Activo en una entidad financiera TITULACIÓN: Ingeniería Técnica de Telecomunicaciones, especialidad Telemática AUTOR: Alberto Alcañiz Azcón DIRECTOR: Josep Rojas Farreras SUPERVISOR: Rubén Quesada Lopez FECHA: 17 de julio de 2009 Título: Normalización del Directorio Activo en una entidad financiera Autor: Alberto Alcañiz Azcón Director: Josep Rojas Farreras Supervisor: Rubén Quesada Lopez Fecha: 17 de julio de 2009 Resumen El trabajo que se expone en este TFC responde a la necesidad de General Electric Capital Bank Spain de realizar una optimización de la OU Spain dentro del dominio de R2.Money.ge.com. Tras exponer brevemente en que con siste la idea de Directorio Activo (DA) de Microsoft, se realiza un amplio análisis de la estructura de la OU y de las GPOs que en ella se aplican. Este análisis servirá para generar la documentación y definir las líneas de actuación para poder normalizar la estructura de la OU y las políticas que en ella se aplican. Mediante el DA se permite indicar que archivo script se puede ejecutar durante el inicio de sesión de un usuario. En este TFC también se expone un análisis del código del script de inicio. En el se podrá ver cuales son las carencias que tiene y cuantas funciones pueden ser trasladadas a las políticas. También se muestra una de las utilidades que se le puede dar a la virtualización de máquinas. En este trabajo está la creación desde cero de un entorno de máquinas virtuales que recrean a equipos reales para realizar pruebas sin que los usuarios se vean afectados. El trabajo finaliza con la implementación de todos los cambios propuestos en el entorno real de la empresa. Primero se realiza de una manera muy controlada utilizando el entorno virtual para no afectar a las máquinas reales. Gradualmente entraran en escena cada vez mas máquinas reales hasta que todo el escenario sea real. Al final veremos que conclusiones se pueden sacar de los resultados obtenidos y si estos satisfacen a la empresa. Title: Normalization of Active Directory in a bank Author: Alberto Alcañiz Azcón Director: Josep Rojas Farreras Supervisor: Rubén Quesada Lopez Date: July, 17th 2009 Overview The work at th is TFC is a consequence of the requirements of General Electric Capital Bank Spain to do an optimization of the OU Spain as part of the domain R2.Money.ge.com. After a brief statement of what the idea of Microsoft Active Directory (AD) is, a wide analysis of the structure of the OU and the GPOs that are applied on it is done. This analysis will be useful for generate the documentation and define the main lines for carry out the OU structure normalization and the policies that are applied on it. By means o f the AD it’s allowed to indicate which file can be implemented while the session is starting. This TFC also shows an analysis of the logon script code. In that part also it’s shown which are the lack of and how many functions can be moved to the policies. Also are shown the utility of computer virtualization. At this paper we can read the creation from zero of a virtual scenario with virtual machines which recreates to real equipment. This is done to do some tests with no user interference. The work fini shes when the implementation in the real world of all the changes proposed are done. At the beginning it’s done in a very careful way using the virtual scenario in order to not modify the real computers. Gradually the real computers will be used more on the tests until the entire scenario will be full of real computers. At the end we will see the conclusions that can be extracted from the final results obtained and if these are satisfactory for the company. ÍNDICE INTRODUCCIÓN ............................................................................................... 1 CAPÍTULO 1. ANÁLISIS Y DEFINICIÓN DE NUEVAS POLÍTICAS ................ 3 1.1. Introducción al Directorio Activo ..................................................................................... 3 1.2. Infraestructura en GE Capital Bank ................................................................................. 5 1.3. Análisis de las políticas (GPOs) ....................................................................................... 7 1.3.1. Exceso de GPOs .................................................................................................... 7 1.3.2. Uso de nombres no recomendados ....................................................................... 8 1.3.3. Exceso de administradores del dominio ................................................................. 9 1.3.4. Políticas duplicadas ................................................................................................ 9 1.3.5. Políticas deshabilitadas .......................................................................................... 9 1.3.6. Políticas mal definidas .......................................................................................... 10 1.4. Análisis de la OU Spain .................................................................................................. 12 1.4.1. OU GECFES_Computers ..................................................................................... 13 1.4.2. OU GECFES_Groups ........................................................................................... 13 1.4.3. OU GECFES_Users ............................................................................................. 13 1.4.4. OU Servers ........................................................................................................... 13 1.5. Situación normalizada .................................................................................................... 14 1.5.1. Redefinición OU Spain ......................................................................................... 14 1.5.2. Redefinición de GPOs .......................................................................................... 15 1.5.3. Redefinición de permisos ..................................................................................... 16 CAPÍTULO 2. MODIFICACIÓN DE SCRIPTS ................................................. 17 2.1. Análisis de Scripts pre-normalización .......................................................................... 17 2.1.1. lsmain.bat ............................................................................................................. 18 2.1.2. vs_group.vbs ........................................................................................................ 19 2.1.3. vs_LogLogin.vbs ................................................................................................... 24 2.1.4. CheckISS.vbs ....................................................................................................... 24 2.2. Normalización de Scripts ................................................................................................ 25 2.2.1. Requisitos del proyecto para los Scripts .............................................................. 25 2.2.2. Modificación del código de los Scripts ................................................................. 26 CAPÍTULO 3. ENTORNO VIRTUAL DE PRUEBAS ....................................... 30 3.1. Definición del entorno virtual ......................................................................................... 30 3.1.1 Infraestructura real ............................................................................................... 30 3.1.2 Infraestructura virtual ............................................................................................ 32 3.2. Entorno virtual de usuarios en Llull .............................................................................. 32 3.2.1. Equipo anfitrión ..................................................................................................... 32 3.2.2. Entorno virtual VMWare ....................................................................................... 33 3.2.3. Instalación máquinas de usuario .......................................................................... 34 3.3. Entorno virtual de usuarios en Retama y servidores .................................................. 38 CAPÍTULO 4. IMPLEMENTACIÓN ................................................................. 40 4.1. Modificación de la OU Spain .......................................................................................... 40 4.1.1. Copias de seguridad ............................................................................................. 40 4.1.2. Creación de OUs .................................................................................................. 42 4.2. Pruebas unitarias en entorno virtual ............................................................................. 45 4.3. Pruebas de integración ................................................................................................... 46 4.4. Despliegue final ............................................................................................................... 49 4.5. Resultados ....................................................................................................................... 51 CONCLUSIONES ............................................................................................ 52 BIBLIOGRAFÍA ............................................................................................... 53 ANEXOS .......................................................................................................... 54 Introducción 1 INTRODUCCIÓN El ordenador se ha convertido en una herramienta esencial para la mayoría de las empresas de hoy en día. En los inicios de su implantación en el mundo empresarial, un ordenador estaba aislado del resto. Las nuevas tecnologías pero han permitido la conexión entre ellos creando redes de ordenadores. Son innumerables las ventajas de disponer de ordenadores en red. Varias de ellas involucran a la herramienta Directorio Activo de Microsoft. Podemos pensar en la administración centralizada o en autenticación dentro de redes de ordenadores entre algunas de ellas. Un banco como General Electric Capital Bank es una de estas empresas que basa su trabajo en el uso de redes de ordenadores. En la actualidad todo el negocio se asienta sobre una infraestructura Microsoft debido a que el sistema que utilizan todos los ordenadores son Microsoft Windows. General Electric Capital Bank Spain es la división española de este banco. Como delegación utiliza parte de la infraestructura que hace que todas las divisiones se mantengan conectadas. Esta infraestructura montada es el Directorio Activo (DA). A nivel de España se gestiona una parte denominada OU Spain. Una serie de errores, entre los que están un mal diseño inicial o un crecimiento exponencial de los objetos que forman el Directorio Activo, ha desencadenado con el paso del tiempo en una infraestructura ineficiente. Esta ineficiencia se iba manifestando de diferentes maneras. Para los usuarios podía significar lentitud en el inicio del sistema, debido a la ejecución de código mal diseñado. Para los administradores del sistema, podía ser la dificultad de administración de una estructura mal diseñada y mal mantenida. Se aprovecharán 2 acciones para intentar normalizar la situación de descontrol en la que se encuentra el DA. La primera de ellas es la actualización de los sistemas operativos de servidores de Windows Server 2000 a Windows Server 2003. Esta implica una actualización del sistema de Directorio Activo que integra los sistemas Windows Server. La segunda es la actualización de los equipos de usuarios de Windows 2000 Professional a Windows XP. Esta migración puede implicar que sea necesario adaptar la estructura del DA para que no surjan errores. En este trabajo se exponen los procesos y análisis necesarios para normalizar un Directorio Activo. En el primer capítulo se introducirá brevemente al DA y se analizará tanto la situación como las posibles mejoras que necesita la estructura y los objetos del que lo componen. 2 Normalización del Directorio Activo en una entidad financiera El siguiente capítulo muestra un exhaustivo análisis del Script de inicio. Un fichero que se ejecuta cuando un usuario inicia sesión y cuya optimización de código es necesaria para la mejora de los tiempos de inicio de los equipos. En el tercer capítulo Se muestra como montar diversas máquinas de una manera virtual. Esto resultará útil para realizar pruebas sobre ellas de manera que no se vea afectado ningún empleado por pruebas realizadas. Y para finalizar se explicará cuales fueron los procesos seguidos para conseguir que los cambios propuestos se llevaran a termino y de manera exitosa. Modificación de Scripts 3 CAPÍTULO 1. ANÁLISIS Y DEFINICIÓN DE NUEVAS POLÍTICAS Este capítulo marca el inicio de todo el trabajo realizado para la normalización del Directorio Activo (DA). Es importante que se realice un buen rediseño de la infraestructura, pues es la base para conseguir las mejoras buscadas con este proyecto. En la primera parte del capítulo se realiza una introducción sobre que es la herramienta Directorio Activo y algunas de las funciones que realiza. Nos va a permitir entender porque es tan necesaria en el ámbito empresarial como el de GE Money Bank Spain. A continuación se describirá la infraestructura que está en producción y dando servicio hasta el inicio del proyecto. Aquí se mostrarán los motivos que han llevado a la necesidad de normalizar el DA. Con la visión global de cual es el entorno en el que nos encontramos, se va a realizar un análisis detallado de las políticas de grupo que definen las GPOs a aplicar a cada objeto de las OUS de Computers y Users. Para finalizar, este análisis se va a acompañar de mejoras que se pueden implementar en el diseño y de cómo se van a poder llevar a cabo. 1.1. Introducción al Directorio Activo El Directorio Activo (DA) es la solución que ofrece Microsoft como servicio de directorio. El conjunto de aplicaciones que componen DA vienen incluidas con la familia de sistemas operativos para servidores Windows Server. Un servicio de directorio es una base de datos en la que se almacena información de los objetos de una red. Además de la base de datos también están incluidos los servicios que permiten la comunicación y administración de esta. Para el caso de Directorio Activo, estos servicios cumplen con las especificaciones que se marcan para los sistemas LDAP (Lightweight Directory Access Protocol). De esta manera se habilita la administración a través de la definición de políticas que actúen sobre los objetos de la red. Lo primero que define a un DA es su estructura. Existe una construcción jerárquica compuesta por bosques, árboles, dominios y Unidades Organizativas (OUs). Esta estructura permite que se deleguen permisos de administración para cada unidad. Así pues un administrador adquiere el poder de administrar determinada estructura y todas las estructuras que están por debajo. Toda esta estructura tiene como objetivo la aplicación de diferentes reglas que deben cumplir los objetos de la red. Estas reglas son las llamadas GPOs (Group Policy Object) y se asocian a los elementos contenidos dentro de cada 10 Normalización del Directorio Activo en una entidad financiera Un administrador puede deshabilitar una política, y siempre tendrá algún motivo para hacerlo, pero debe ponerlo en conocimiento del resto de administradores. Pueden existir motivos para que una política se quede un tiempo deshabilitada sin ser borrada, por ejemplo en periodo de pruebas. Un número reducido de administradores, tendrá claro cuales son y se encargarán de borrarlas si pasado cierto tiempo ya no son necesarias. Si por algún motivo debería haber sido borrada y olvidan hacerlo, esa política permanecerá en el estructura con la única utilidad de entorpecer la tarea de administración del DA. En nuestro escenario podemos encontrarnos con varias GPOs deshabilitadas. En el caso de TestScriptInicio se da esta situación para alguna de las políticas redundantes, aunque no para todas. 1.3.6. Políticas mal definidas Las políticas son creadas exclusivamente por administradores del DA. Estos pueden cometer errores a la hora de definirlas, ‘errare humanum est’, y una de las consecuencias es que se crean políticas que pueden llegar a ser inoperativas. 1.3.6.1. ES-Configuración_SNMP Una muestra de política que debe ser eliminada o redefinida la tenemos en ES- Configuración_SNMP. Según las indicaciones del nombre, hace referencia a la configuración del protocolo SNMP, utilizado para que los equipos puedan enviar información de su estado. Esta política además sólo se aplica a los servidores. Todo esto no deja lugar a dudas y los parámetros que deben configurarse han de hacer referencia a “configuración de máquina” y no a “configuración de usuario”. Fig. 1.4 GPO ES-Configuración_SNMP Modificación de Scripts 11 Por contra, se observa que no aparece ningún parámetro de configuración de máquina y si de usuario. En ambos casos las configuraciones están activas (Enabled). Se da la paradoja de que el único parámetro de usuario está además deshabilitado (Disabled), lo que convierte a esta política en inoperativa. 1.3.6.2. GPO mal definida: Not Found Not Found es el nombre que aparece para una política que ha sido erróneamente definida. En este caso resulta especialmente crítico observar que se trata de una política que se aplica al conjunto de toda la OU de Spain. Fig. 1.5 GPO Not Found Una GPO de este tipo puede resultar crítico en el arranque de cualquier sistema. La consecuencia más leve en este caso es un aumento del tiempo de procesado. Esto en una organización como General Electric resulta inadmisible. Esa GPO puede causar que todas la infraestructura de maquinas clientes dejen de funcionar adecuadamente y los administradores no pueden ver que contiene. 12 Normalización del Directorio Activo en una entidad financiera 1.4. Análisis de la OU Spain Todas las GPOs analizadas están asociadas a la estructura que las contiene, la OU Spain. Su estructura ha ido creciendo de manera descontrolada hasta resultar ineficiente en su manejo y poco escalable. Esto ha motivado la necesidad de una nueva estructura. Del estudio hecho de la estructura de la OU Spain se obtiene el análisis que se muestra a continuación con las OUs más importantes en las que se divide la OU de Spain. En la figura (Fig. 1.6) aparecen etiquetados como old. Fig. 1.6 OU Spain pre-normalización Modificación de Scripts 13 1.4.1. OU GECFES_Computers En esta OU es donde se encuentran situados los objetos computadora que pertenecen a usuarios. Estos objetos son los portátiles y los equipos de sobremesa. La división en OUs que se observa no sigue un criterio común. Existe división por unidades de negocio (Auto), tipo de usuario (Admins) o incluso diferentes paquetes de instalación (Installations, Install FP8,...). 1.4.2. OU GECFES_Groups En esta OU se encuentran los objetos grupo. Se observa que la división está realizada según 2 niveles de seguridad (General y Secure). Esta diferenciación permite tener un mayor control sobre grupos que requieran especial cuidado. Se consigue reduciendo el número de administradores capaces de modificar los objetos de la OU Secure. Las división de los 2 niveles se ha hecho de acuerdo a necesidades puntuales, no se ha mantenido un criterio común en la creación de las OUs que contienen. Como consecuencia de este hecho no existen las mismas OUs en ambos niveles de seguridad. Esta situación dificulta el traspaso de grupos General a una situación en la que se requiera un mayor control y deban ser movidos a Secure. 1.4.3. OU GECFES_Users Los objetos de usuario se encuentran todos situados en esta OU. Esta OU esta dividida sin seguir un criterio claro. Existen OUs que hacen referencia al departamento al que pertenece el usuario (Helpdesk) o por ejemplo a una clasificación de usuario según sus capacidades de administración de los sistemas (Admin.). Una de las OU, la OU Users, esta dividida siguiendo criterios igualmente poco claros. La división realizada muestra una falta de criterio para definir los tipos de usuario que existen en el negocio. Esto genera dificultades para el administrador que mueve a un nuevo usuario al no quedar claro que perfil será el que mas se ajuste a sus necesidades. 1.4.4. OU Servers En esta OU se encuentran los objetos computadora que hacen referencia a servidores. 14 Normalización del Directorio Activo en una entidad financiera Existe una división de 4 OUs que hacen referencia a un tipo de servidores muy específicos como pueden ser servidores SQL o Terminal Servers. Esta especificación hace que sea difícil agrupar dentro de una misma OU a muchos servidores y obliga a que se encuentren los objetos de servidor directamente asociados a la OU Servers y no a una OU mas especializada. Esto obliga a que si se quieren aplicar GPOs específicas para cada tipo de servidor se deberá asociar máquina por máquina por el contra de ser asociados simplemente a la OU que le corresponda. 1.5. Situación normalizada Los problemas detectados en las políticas pueden ser tratados de manera individual. Pero se puede comprobar que algunos de ellos aparecen como consecuencia de una mala estructura sobre la que están definidas. De este modo, la redefinición de la OU Spain se hace completamente necesaria. Con esta se ponen los cimientos sobre los que redefinir mas tarde las GPOs. 1.5.1. Redefinición OU Spain Los puntos que debe cumplir la nueva OU quedan definidos después del análisis de los cánones que marca Microsoft para el diseño del DA y su comparación con la estructura de la OU Spain. Estos deben marcar el inicio de la normalización del DA y son la base sobre la que se soporta el resto de la nueva estructura de DA. Una división más específica de las OUs principales responde a necesidades específicas del negocio. Estas necesidades quedan explicadas en el proceso de implementación, durante el cual el negocio planteaba sus necesidades según era consultado. A continuación se describen brevemente las OUs que debe contener la nueva estructura. 1.5.1.1.OU para equipos de usuario Se define el nombre GECFES_Computers cumpliendo el estándar de asignación de nombres para OUs dentro del DA. La clasificación de los equipos se realiza en 2 pasos. En un primer paso se define la localización en la que se encuentra el equipo, lo que permite definir políticas comunes para los PCs de un mismo edificio. Una segunda división permite especificar el tipo de equipo que es, según sea portátil (laptop) o sobremesa (desktop). Se suma a esta segunda división la capacidad de definir capacidades mas o menos restringidas de ejecución tanto para portátiles como para sobremesas. Modificación de Scripts 15 Estas capacidades no son independientes de las capacidades de ejecución que posee el usuario que utiliza el equipo. 1.5.1.2.OU para grupos Se define el nombre GECFES_Groups cumpliendo el estándar. Es el contendor de todos los objetos grupo definidos en OU Spain. Contiene una primera división que distingue entre los que deben ser controlados de manera más estricta (Secure) y el resto (General). Se mantiene una estructura interna idéntica que permita una fácil administración en caso de movimientos de grupos entre General y Secure. 1.5.1.3.OU para usuarios El nombre definido para esta OU es GECFES_Users. Este contendor tiene a todos los objetos usuario de la OU Spain. Esta segmentado según las diferentes capacidades de administración que deben tener de los diferentes equipos. La relación entre esas capacidades y el departamento al que pertenece el usuario se utiliza para asignar los nombres a las diferentes OUs. Se crea una OU en la que se incluirán tipos de usuarios con características muy específicas. Estos usuarios no responden a los requisitos para quedar englobados en el resto de categorías. 1.5.1.4.OU para servidores El nombre para esta OU que cumple el estándar es GECFES_Servers. Este es el contenedor de los objetos computadora que sean servidores. La correcta división de esta OU responde a criterios de especialización de las funciones que realizan. El punto más importante es la definición de una OU para agrupar los servidores que no han sido pasados a producción. Con esta última OU se consigue delegar permisos a grupos de desarrollo sin que dispongan de privilegios de administración de servidores que están en producción. 1.5.2. Redefinición de GPOs Las nuevas GPOs se crean siguiendo las recomendaciones de nombres y eliminando posibles duplicados y/o políticas deshabilitadas. La definición final de las nuevas GPOs se realiza una vez está la estructura de la OU Spain creada. Las GPOs que durante el análisis son detectadas como deshabilitadas o duplicadas se eliminan. 16 Normalización del Directorio Activo en una entidad financiera Políticas que están mal definidas requieren de un análisis más cuidadoso. Se analiza con el creador si aún deben realizar alguna función. Se corrigen las que si debían realizar alguna función y el resto se borran. Por último se realiza la tarea que mas impacto positivo tiene sobre el DA. Se compactan las políticas que actúan sobre las OUs. En este caso son analizadas las funciones que realizan las políticas para reducir el número de GPOs al mínimo posible. El caso más notable del proyecto es Citrix, donde pasamos de tener 11 GPOs a tan solo 4. Fig. 1.6 GPOs aplicadas en Citrix Servers 1.5.3. Redefinición de permisos Por supuesto, se tuvieron reuniones para definir de que manera se iba a administrar el DA a partir de la normalización. Este punto era necesario pues de no tomar medidas el problema con el que se enfrentó este proyecto se iba a reproducir en no mucho tiempo. Los administradores de la OU Spain se redujeron y los diferentes roles de administración, que permiten realizar diferentes tareas como introducir nuevas cuentas de usuario a la OU, se ajustaron a la realidad de las funciones actuales. El cambio mas importante y necesario se realizó sobre la cuenta ES-GL-Spain- Admins. Se definió que tan solo los administradores de mas alto nivel debían pertenecer a esta cuanta. De esta manera quedó reducida a 4 usuarios la capacidad total de administración de la OU Spain. Esto permitirá en el futuro depurar responsabilidades y no desvirtuar rápidamente la estructura y funcionamiento del DA. Modificación de Scripts 17 CAPÍTULO 2. MODIFICACIÓN DE SCRIPTS En el capítulo anterior hemos podido ver que con la definición de GPOs se puede ejercer cierto control sobre los objetos que forman parte del AD. Pero esto no es suficiente y aparece la necesidad de que se ejecuten ciertos comandos sobre los equipos cuando inician sesión. Para la ejecución de esos comandos se utilizan los llamados Scripts de inicio, que son los ficheros en los que se guardan las instrucciones que deben ser ejecutadas. Con la redefinición de políticas se hace necesario modificar también los scripts que se utilizaban. Por dicha razón este segundo capítulo constará del análisis de los scripts que se ejecutaban inicialmente. Además se muestran las funciones y tareas que desarrollaban. Tras un correcto análisis de las funciones, seremos capaces de ver cuales ya no son necesarias. En este caso, el último apartado de este capítulo irá dirigido a mostrar la redefinición de las nuevas necesidades y con el rediseño de los scripts. 2.1. Análisis de Scripts pre-normalización Si observamos los scripts, podemos detectar que han sido modificados y ampliados con el curso del tiempo, esto es debido a que se ha añadido código o se han añadido otros scripts. Estos cambios se realizaban para solucionar problemas puntuales que pudieran surgir. Estos problemas podían venir motivados por causas ajenas a los scripts propiamente, pero si fueron utilizaron los scripts para llegar a las soluciones. El esquema de ejecución de los scripts es el que se puede observar en la siguiente figura (Fig. 2.1): Fig. 2.1 Esquema de ejecución pre-normalización Debido a que la empresa esta cimentada sobre una infraestructura de Microsoft, los ficheros de script con los que nos encontramos son ficheros que lanzan comandos MS-DOS (.bat) y utilizan Visual Basic Scripting (.vbs). 18 Normalización del Directorio Activo en una entidad financiera A continuación se realiza el análisis del código que contiene cada uno de los scripts. Se muestra cuales son las acciones que se realizan en cada uno individualmente. Además se apuntan posibles problemas que se detectan durante el análisis. 2.1.1. lsmain.bat Como se aprecia en el diagrama (Fig. 2.1), este archivo batch es el primero que se ejecuta. Contiene una serie de comandos que se van a ejecutar secuencialmente en el cliente a través de la shell o consola de comandos. Esto implica que el lenguaje utilizado en este archivo son comandos MS-DOS. Este archivo está dividido en 3 grandes bloques de los cuales vamos a analizar los dos que tienen relevancia. El primer bloque es el encargado de maximizar una ventana de Internet Explorer accediendo a la url del portal principal de la empresa. start /MAX IEXPLORE http://spain.gcf.home.ge.com Este era un requisito del negocio, que cuando iniciaran sesión en un pc accedieran siempre a este portal. Ahora bien, se llegó al acuerdo con el negocio que los usuarios que inician sesiones remotas, no se incluirían en estos grupos. Ya que las necesidades de estos usuarios son diferentes a las de un usuario que abra sesión es una oficina. Cuando se trabaja a través de Terminal Server parámetros como el ancho de banda y el tiempo de espera para el inicio de sesión resultan especialmente críticos. Por esto, antes de lanzar la orden del navegador se comprueba que el nombre del equipo (%COMPUTERNAME%) no coincida con uno de los servidores definidos. Para ello se utiliza la sentencia if not para cada servidor. En este punto ya podemos detectar que ha de existir un método más eficiente para que este evento tan solo se genere en los equipos de trabajo de los usuarios. No existe la necesidad de tener que realizar 21 comprobaciones, o tener que modificar el código con cada servidor nuevo que añadamos a nuestra red. El tercer bloque es el encargado de enlazar el script batch con el resto de scripts. Una de sus funciones es la ejecución de 3 scripts escritos en Visual Basic (.vbs). A continuación procederemos a analizar dichos scripts. En el código se puede ver que se indica explícitamente la ruta donde tiene que encontrar esos ficheros, todos ellos en el servidor myessweurdc0013. En un primer análisis podemos detectar que el hecho de ejecutar tres scripts implica un diseño poco optimizado de los mismos. Además, un punto muy destacable es el hecho de indicar explícitamente la ruta donde debe encontrar estos ficheros. Según la estructura de la red de la empresa, existen 2 servidores en los que están replicados estos ficheros myessweurdc0013 y myessweurdc0028. Si por Modificación de Scripts 19 algún motivo el servidor myessweurdc0013 nos resulta inaccesible, estos scripts no se van a ejecutar pues no se le está indicando de ninguna manera la existencia de una ruta hacia el servidor alternativo. 2.1.2. vs_group.vbs El fichero vs_group.vbs contiene las funciones más importantes para el usuario. Por requerimientos pasados del departamento de seguridad, en muchas de las funciones hay añadidas líneas para guardar registros de determinados eventos que van sucediendo durante la ejecución de los scripts. El valor booleano “true” de la variable DEBUG_ON indica que estos logs están activados. Se utiliza esta condición durante todo el script para determinar si se escribe el evento en el fichero de logs utilizando la función que veremos mas adelante (WriteDbg). A continuación se analiza individualmente cada procedimiento. Se distinguen 2 tipos de procedimiento en función de si se necesita que devuelvan algún tipo de valor (function) o no (sub). 2.1.2.1. sub Main Este procedimiento corresponde a la función principal, desde la cual se invoca al resto de procedimientos. En esta función quedan definidos también el resto de parámetros que no se habían definido como constantes y que van a ser utilizados durante todo el script. Para utilizar propiedades y métodos del entorno y de la red nos encontramos con la necesidad de definir dos objetos. Estos objetos se especifican del siguiente modo: Set WSHShell = WScript.CreateObject("WScript.Shell") Set WSHNetwork = WScript.CreateObject("WScript.Network") De igual modo que en lsmain.bat, aquí también esta definida la ruta del servidor de una manera explícita y univoca haciendo referencia a uno solo de los servidores: strLogServer="\\myessweurdc0013.r2.money.ge.com Realiza una consulta para inicializar un objeto (UserObj) que contenga los parámetros del usuario que ejecuta el script (WSHNetwork.UserName). En caso de que se produzca un error a la hora de la consulta, se inicializan las variables utilizadas para que no contengan valores y se finaliza la ejecución del script. Si no hay error en la consulta del usuario el script continua y ejecuta el resto de procedimientos que analizamos a continuación. Tras ejecutar las acciones comunes para todos los grupos, se realizan las que tan solo afectan a determinados grupos. Para esto se pasa por parámetro, a los 26 Normalización del Directorio Activo en una entidad financiera negocio, recogidas a través de las reuniones mantenidas con los lideres de cada uno de sus departamentos, se obtuvo un listado de software deseado. Este fue filtrado a posteriori por el departamento de IT Security y en ultima instancia por GE Corporate, añadiendo al resultado los programas licenciados por todo el negocio. El control sobre esto se dejó en manos también de otra aplicación que realiza esta tarea de una forma más óptima. Para lo referente a actualizaciones de sistemas Windows, ya hay creada una infraestructura como WSUS. Esta se encarga de la gestión, descarga y aplicación de las diferentes actualizaciones que son ofrecidas a través de Microsoft Update. En la infraestructura de GECB Spain existen realmente 2 WSUS diferenciados. Uno aplica las actualizaciones a nivel de usuarios. La otra esta destinada a los servidores. Estos requieren un cuidado especial a la hora de aplicar las actualizaciones pues si existe algún conflicto al aplicarse puede afectar al funcionamiento de toda la empresa. Un requisito muy importante de este proyecto era el de obtener un tiempo de carga de los equipos inferior. El cumplimiento de los requerimientos anteriores ya permiten teóricamente en gran medida mejorar esos tiempos, pero se pedía al proyecto descargar de funciones que ya se realizaban en las GPOs y optimizar el código para mejorar aún mas esos resultados. Por último, al igual que en el rediseño de GPOs, no podíamos dejar de lado la inminente migración de sistema operativo Win2000 hacía WinXP en los equipos de los empelados. En la siguiente lista podemos ver todos los requisitos exigidos al proyecto. • Compactación a un solo fichero • Eliminación de logs • Eliminación de control de Software • Optimización del código • Considerar migración a Windows XP • Obtener tiempos de carga inferior 2.2.2. Modificación del código de los Scripts Los pasos seguidos para la modificación de los scripts, en los que se tienen en cuenta todos los requisitos, son los que se muestran en el siguiente gráfico: Modificación de Scripts 27 Fig. 2.2 Proceso de modificación de Scripts 2.2.2.1. Eliminación de funciones Lo primero que se hace es definir cuales son las funciones que realizan las tareas que han sido definidas como prescindibles. Utilizando los conocimientos adquiridos en el análisis del código, encontramos que las funciones que debemos eliminar en cada script son: vs_group.vbs: LoadCfgFile, ParseAction, LogStatus, CheckError, WriteError, WriteDbg y AppendLine. vs_LogLogin.vbs: Todas. CheckISS.vbs: Todas. La ejecución de esta tarea ha consistido en borrar todas las líneas que formaban parte de las funciones. En el caso de vs_LogLogin y CheckISS, una vez detectado que no queríamos mantener ninguna de las funciones, lo que se ha eliminado es directamente el fichero. El código ha sido revisado para que no quedara ninguna referencia a estas funciones. La que tenía mas referencias en el resto de funciones era WriteDbg, que era la que guardaba registros en el fichero de log. Se ha tenido cuidado que al eliminarla no se eliminaran otras dependencias. 2.2.2.2. Compactación en un solo fichero Una vez eliminados completamente 2 de los scripts, lo único que quedaba por hacer era evitar la utilización de lsmain.bat. De esta manera se ha conseguido evitar utilizar comandos Dos a través de la shell. Así se ha conseguido que el inicio sea más eficiente. Cada evolución del sistema operativo Windows conlleva una menor dependencia del entorno Dos y por tanto eliminar el uso de 28 Normalización del Directorio Activo en una entidad financiera estos comandos en el script de inicio forma parte del cumplimiento de los requerimientos. Se ha eliminado la ejecución automática del navegador del código del script. Así hemos conseguido que no se tengan que realizar las comprobaciones para saber si el usuario estaba iniciando sesión en un terminal Server. Por ultimo, con la eliminación de 2 ficheros de scripts, no hace necesario disponer de un archivo inicial que llame secuencialmente al resto. De esta manera todo el código utilizado en lsmain queda reubicado o eliminado y podemos prescindir de este script. Con las anteriores tareas realizadas, el escenario de ejecución de scripts de inicio queda como se muestra en la siguiente figura (Fig. 2.3): Fig. 2.3 Esquema de ejecución post-normalización Queda claro que ahora esta todo el código de ejecución en un solo fichero que pasamos a renombrar como Spain_Login.vbs.Este va a contener ahora todas las funciones que hemos decidido mantener y tan solo nos queda optimizar el código. 2.2.2.3. Optimización del código En el proceso de optimización del código, la principal tarea ha sido la revisión de los bucles. Se ha comprobado que tras la eliminación de todas las funciones los algoritmos no hayan quedado afectados. Esta revisión se ha realizado revisando el código directamente. Tan solo en la fase de pruebas se ha dado por verificado completamente. Otro factor a optimizar era la actualización de los servidores a los que se hacia referencia desde este código. Ya quedo comentado durante el análisis que no era correcto apuntar a un solo servidor cuando está disponible mas de uno. La manera más eficiente que se encontró para conocer que servidor del Directorio Activo estábamos utilizando fue que el equipo en el que el usuario estaba intentando iniciar la sesión nos indicara con que servidor había conectado. Esta información esta contenida en las variables de entorno, como se puede ver en la figura al realizar el comando “set” en la consola de comandos. Modificación de Scripts 29 Fig. 2.4 Variable LOGONSERVER Así en el código hemos añadido la consulta oShell.ExpandEnvironmentStrings("%LOGONSERVER%") para obtener este parámetro. Así estamos evitando que si no estaba accesible uno de los servidores, se acceda al otro para ejecutar el script de inicio. Con todos estos cambios se puede observar como el código quedó reducido a un solo archivos pasando de ocupar mas de 1500 líneas de código a tan solo 500. Durante la implementación se realizará la evaluación de las mejoras, pero este dato ya nos hace pensar que deben ser notables. 30 Normalización del Directorio Activo en una entidad financiera CAPÍTULO 3. ENTORNO VIRTUAL DE PRUEBAS Una vez analizados los problemas que tenía el Directorio Activo han sido propuestas soluciones para que vuelva a ser fácilmente administrable y eficiente en su funcionamiento. Aplicar las soluciones propuestas implica realizar cambios en la OU Spain y trasladar las cuentas de usuario y máquina a la nueva estructura para que les sean aplicadas las nuevas políticas. Este proceso no está exento de riesgo, pudiendo llegar a afectar el funcionamiento normal de la empresa y desembocar en la suspensión total de la actividad. Este hecho resulta inaceptable para cualquier empresa, pero más aún para un banco como sucede en este proyecto. La creación de un entorno virtual de pruebas es una de las soluciones adoptadas en el proyecto para minimizar los riesgos de los cambios que se deben realizar para la normalización. En la primera parte del capítulo se exponen los requisitos que debe cumplir el entorno virtual para que sea representativo del entorno real. La creación de las máquinas virtuales que representan a empleados de la empresa en la sede central se muestra en la segunda parte del capítulo Basándonos en el trabajo realizado en la segunda parte del capítulo, se explicará brevemente en la última parte se explica cuales fueron los pasos seguidos para realizar la virtualización del resto de máquinas representativas que hay en la empresa. 3.1. Definición del entorno virtual El objetivo principal de crear un entorno virtual era poder realizar las pruebas que fueran necesarias sin que el funcionamiento de la empresa se viera afectado. Este entorno debe ser un fiel reflejo de las máquinas que hay en la empresa, para cuando vayamos a trasladar los cambios al entorno real las posibilidades de error se hayan reducido a la mínima expresión. 3.1.1 Infraestructura real Para definir la tipología de equipos funcionando en la empresa se hicieron 3 grupos según localización de usuario, sistema operativo de equipo de usuario y sistema operativo de servidor. Entorno virtual de pruebas 31 3.1.1.1 Localización de usuario Los empleados se encuentran repartidos en diferentes localizaciones. Se considera que el total fluctúa sobre una cifra de 600 repartidos según la tabla (Tabla 3.1). Tabla 3.1. Distribución de empleados por localización Localización # Empleados Barcelona (Llull) 400 Madrid (Retama) 100 Resto oficinas (x10) 10/oficina De esta distribución se observa que los empleados de Llull y Retama suponen el 83% del total. 3.1.1.2 Sistema operativo de equipo de usuario Windows 2000 Professional SP4 es el sistema operativo que todos los empleados tienen en sus equipos en el momento en el que este proyecto se inicia. Coexistía otro proyecto en la empresa que implicaba la migración de Windows 2000 Professional SP4 hacia Windows XP SP3. Este proyecto de migración tiene involucrados a varios usuarios que disponen de este nuevo sistema operativo, un hecho que ya fue tenido en cuenta a la hora de diseñar las nuevas políticas. Por tanto se considera que los sistemas operativos que los equipos de usuario utilizan son Windows 2000 Professional SP4 y Windows XP SP3. 3.1.1.3 Sistema operativo de servidor Windows Server 2000 es el sistema que estaba instalado en los servidores principales que funcionaban en la empresa. Este se comenzó a sustituir por Windows Server 2003 en la mayoría de los servidores, aunque no en todos. Actualmente la repartición es del 2% Windows 2000 frente al 98% de Windows 2003. Este hecho es uno de los motivos que también hace recomendable la normalización del DA. Con estos datos se considera que coexisten actualmente ambos sistemas operativos, Windows Server 2000 y Windows Server 2003. 32 Normalización del Directorio Activo en una entidad financiera 3.1.2 Infraestructura virtual El objetivo de la creación de entornos virtuales en este proyecto no es simular toda la infraestructura de la empresa. El objetivo principal es comprobar cual va a ser el comportamiento de la nueva estructura de la OU Spain y de las GPOs aplicadas sobre los diferentes equipos que forman la red de la empresa. La infraestructura virtual que se implementa contiene una representación de los principales equipos quedando como se indica en la Tabla (Tabla 3.2) Tabla 3.2 Principales equipos por localización Emplazamiento Tipo de equipo Sistema operativo Llull Sobremesa Windows 2000 Pro SP4 Portátil Llull Sobremesa Windows XP SP3 Portátil Retama Portátil Windows 2000 Pro SP4 Windows XP SP3 Llull Servidor Windows Server 2000 Windows Server 2003 3.2. Entorno virtual de usuarios en Llull Para la creación del entorno virtual se decide utilizar software de código libre como sistema operativo. Esta elección está justificada pues se buscaba minimizar los gastos del proyecto. Anteriores experiencias satisfactorias en la empresa con este tipo de software animaron a que esta decisión fuera bienvenida. 3.2.1. Equipo anfitrión El PC sobre el que se instala toda la plataforma es un Dell Optiplex G745. Uno de los motivos de elegir este equipo es que utilizaba un procesador Pentium D 950. Este es un procesador de doble núcleo que incorpora la tecnología IVT (Intel Virtualization Technology). Esta tecnología asegura que el procesador soporta y esta optimizado para ejecutar software de virtualización. La cantidad total de memoria RAM asignada al PC es de 2GB. Esta cantidad es suficiente para que estén ejecutándose de manera eficiente 4 máquinas cuya RAM total no supere las 2GB. Las características físicas se pueden ver en la figura (Fig. 3.1). Existen distribuciones linux específicamente diseñadas para su utilización en empresas siendo Red Hat Enterprise Linux la más desarrollada y utilizada de Entorno virtual de pruebas 33 todas ellas. Utilizar esta distribución no se considera una opción viable pues supone un desembolso extra que no está planificado hacer por el proyecto. Este hecho hizo que se buscara la opción gratuita que más se le pareciera. La distribución linux elegida fue Fedora. Esta distribución siempre es desarrollada en paralelo con las versiones de red hat y a menudo se consideran hermanas. Las principales diferencias están en el soporte que dan y que detrás del desarrollo de Fedora está toda la comunidad y de red hat hay una empresa además de la comunidad. La versión instalada finalmente es Fedora core 9 como se puede ver en la figura (Fig. 3.1). En el momento de la instalación estaba disponible la versión core 10, pero problemas de compatibilidad con el software de VMWare hacen que finalmente quede instalada la versión 9. Fig. 3.1 SO plataforma virtual Las máquinas que se deben hospedar en este equipo representan equipos de usuarios de Llull. Estos equipos forman parte de un segmento de red que corresponde a usuarios. El segmento está caracterizado por un rango de direcciones ip y una VLAN. En adelante se les llamará rango ip usuarios y VLAN usuarios. La máquina anfitrión se configura con una @ip libre del rango de ip usuarios para que no exista ninguna duda de que todos los paquetes irán a través de ese segmento. Físicamente se encuentra también conectada a un switch que etiquetará a todos los paquetes como pertenecientes a la VLAN usuarios. 3.2.2. Entorno virtual VMWare VMWare ofrece un entorno gratuito en el que se pueden crear máquinas virtuales. 34 Normalización del Directorio Activo en una entidad financiera La aplicación seleccionada para crear el entorno virtual es VMWare Server 2. Este software es gratuito pero tiene todas las garantías de VMWare, empresa líder en el mercado de la virtualización. Esta versión ofrece todas las funcionalidades necesarias para la creación de máquinas virtuales utilizando una interfaz web. El acceso remoto se ve facilitado por este hecho, pues con cualquier navegador somos capaces de administrar completamente todo el entorno virtual. Fig. 3.2 Inicio web en VMWare Server 2 3.2.3. Instalación máquinas de usuario 3.2.3.1 Windows 2000 Professional SP4 La instalación del sistema operativo Windows 2000 Professional SP4 en los equipos de usuarios se realiza a través de maquetas. Las maquetas permiten replicar una instalación en varias máquinas sin necesidad de volver a realizar todo el proceso de instalación. Con esto se consigue rapidez de instalación, al no tener que repetir todo el proceso de instalación con cada equipo. También se consigue la minimización de errores de instalación si se realiza una buena instalación inicial. Para la creación e instalación de maquetas se utiliza la aplicación Symantec Ghost. Esta aplicación permite crear copias exactas de equipos. En la creación de las máquinas virtuales Windows 2000 portátil y sobremesa se utilizan las maquetas D630.gho y G745.gho que son las copias de un equipo Dell D630 (portátil) y de un Dell Optiplex G745 (sobremesa). Entorno virtual de pruebas 35 Para la ejecución de la aplicación Ghost en un equipo sin SO instalado la empresa utiliza un cd ejecutable llamado BartPe. En el proyecto se creó una imagen (iso) de ese cd. Como se muestra en la figura (Fig. 3.4) la imagen iso se asocia a una unidad de cd de la máquina virtual. Esta asociación permite que no exista diferencia entre el cd físico de BartPe y esa asociación para la máquina virtual. Fig. 3.4 ISOs asociadas a unidad de CD Durante una primera instalación se comprueba que la aplicación Ghost no es capaz de reconocer el disco duro local, en el que están grabadas las imágenes ghost. Como se puede ver en la figura (Fig. 3.4), la solución que se encuentra es la de generar una imagen iso de las imágenes ghost para asociarlas a otra unidad de cd de la máquina virtual. De esta manera se consigue que la máquina virtual detecte sin problemas los ficheros necesarios. La instalación se realiza seleccionando la imagen ghost que se desea instalar utilizando la aplicación Ghost a través del CD BartPe. Como se puede ver en las figuras (Fig. 3.5 - 3.6) La asociación de imágenes iso a cds de la maquina virtual resulta satisfactoria y permite la correcta instalación. Fig. 3.7 Ghost seleccionando imagen para instalar 42 Normalización del Directorio Activo en una entidad financiera 4.1.1.3 Exportación de objetos Como parte del proceso de normalización, se realiza una limpieza de objetos que están en desuso. Para realizar esta tarea se utiliza la capacidad de exportar en un fichero Excel la totalidad de objetos que contiene en la base de datos del DA. Una muestra de parte de la información contenida en este Excel se muestra en la tabla (Tabla 4.1) Tabla 4.1 Información de objeto exportada objectClass Computer name ESD_BNZHY2J DN CN=ESD_BNZHY2J,OU=Desktops_Power_users,OU=Auto, OU=GECFES_Computers,OU=Spain,OU=Businesses,DC= R2,DC=Money,DC=ge,DC=com dnsHostName ESD_BNZHY2J.R2.Money.ge.com operatingSystem Windows XP Professional Con los datos de este fichero excel se pide al DBA (Administrador de la Base de Datos) la generación de una base de datos SQL. El motivo de esta petición es poder realizar las consultas de una manera mucho mas eficiente. Se generan consultas para comprobar que objetos ya no están en uso y proceder a la limpieza de los objetos usuario y computadora del DA que cumplan ese requisito. 4.1.2. Creación de OUs Recogida toda la información necesaria para tener una copia de seguridad de la situación pre-normalizada se procede a crear las diferentes OUs según las especificaciones indicadas en capítulos anteriores. 4.1.2.1 Cuentas de delegación Cualquier cambio en el DA puede resultar crítico. Esto motiva que desde el proyecto de normalización se deba tener un control absoluto de todos los cambios que se realizan. Es también necesario para que ante la aparición de algún problema se tenga toda la información para conocer porque sucedió. Con estos requisitos se crean las cuentas de delegación. Estas cuentas son unas cuentas genéricas que atorgan permisos a los miembros del equipo en función del rol que desarrolla. Estas cuentas se generan del mismo modo que el resto de cuentas de usuario pero como este proyecto puede requerir actuaciones en cualquier momento del día y sobre cualquier equipo se definen con los siguientes parámetros: Implementación 43 • Password conocido sólo por el equipo del proyecto • Acceso a todos los equipos • Capacidad de inicio de sesión las 24 horas • Pertenencia a los grupos de seguridad con delegación de permisos Con estos parámetros se generan las cuentas que aparecen en la tabla (Tabla 4.2) con el tipo de servicio o equipo sobre los que tiene permisos. Tabla 4.2 Cuentas de delegación Nombre de la cuenta Descripción de la cuenta R2\ADM-Srvaccount Procesos automáticos R2\ADM-Workstationaccount Workstations R2\ADM-Serveraccount-level1 No administra servidores especiales R2\ADM-Serveraccount-level2 Sin restricciones R2\ADM-Projectaccount Servidores no están en producción 4.1.2.2 Normalización ES-GL-SPAIN-ADMINS Para obtener el control total sobre las modificaciones realizadas en la OU Spain se procede a normalizar el grupo de seguridad R2\ES-GL-SPAIN-ADMINS tras la creación de las cuentas de delegación. La normalización consiste en la eliminación de este grupo de todas las cuentas de usuario ajenas al proyecto. Con esta acción se consigue que este grupo, que es el que permite un control total de la administración de la OU Spain, no pueda realizar cambios fuera del ámbito de este proyecto. 4.1.2.3 Creación de OUs La primera división de la OU Spain sigue las especificaciones y se crean 4 OUs • OU Servers • OU Users • OU Groups • OU Computers A partir de estas ya se pueden crear nuevas OUs más específicas tal como se muestra mas adelante. 4.1.2.4 OU Servers Los servidores son la parte mas estática de la infraestructura, son los elementos que menos se modifican. Este es el motivo que hace que sea la primera OU que se genera. También es motivo para que se cree la primera que su estabilidad garantizará que después los usuarios no tengan problemas con servicios ofrecidos por los servidores. 44 Normalización del Directorio Activo en una entidad financiera La división de la OU Servers se realiza de la siguiente manera (Tabla 4.3). Tabla 4.3 OU Servers Nombre de la OU Descripción de la OU Level 1 Management Servers Genéricos (Aplicaciones, impresión,...) Level 2 Management Servers Requieren especialización (SQL, Citrix) Default Servers No cumplen perfil Level 1 – Level 2 Project Management Servers Servidores que no están en producción 4.1.2.5 OU Users y Computers La normalización de estas OUs no se puede realizar independientemente. Existe una relación entre usuarios y máquinas que utilizan que recomiendan esta metodología. La división de la OU Users se realiza según el perfil del usuario. La nueva estructura queda tal y como se muestra en la tabla (Tabla 4.4) Tabla 4.4 OU Users Nombre de la OU Descripción de la OU Admins Interfaz de Windows sin restricciones Power Users Usuario avanzado. Interfaz más restringido que Admins Normal Users Bloqueo de diversas aplicaciones Restricted Muy restringido. Solo se muestran aplicaciones imprescindibles para trabajar. [División por trabajos] La división de la OU Computers se basa en los diferentes edificios en los que se reparte el negocio. Cada edificio se divide en tipos de equipos y capacidades tal como queda explicado en la redefinición de OUs del capítulo 1. La división queda como se muestra en la siguiente tabla (Tabla 4.5) Tabla 4.5 OU Computers Nombre de la OU Descripción de la OU Llull Edificio de Llull. Barcelona Retama Edificio de Retama. Madrid Branches Oficinas repartidas por España y Tánger Default Computers OU asignada por defecto antes de ser movido el objeto a su localización Implementación 45 4.1.2.6 OU Groups Esta división ya se explicó que consiste en 2 grupos en función del nivel de seguridad que requieren sus objetos. Queda tal como se indica en la tabla (Tabla 4.6) Tabla 4.6 OU Groups Nombre de la OU Descripción de la OU Secure Contiene objetos que dan acceso a información sensible Solo deben ser administrados por Level 2 General Contiene objetos que no dan acceso a información sensible. Puede ser administrado por Level 1 y 2 4.2. Pruebas unitarias en entorno virtual Las pruebas unitarias consisten en realizar pruebas de la afectación de los cambios, pero no de un modo general en todo el escenario. Las pruebas se realizan sobre un grupo controlado de equipos y usuarios, controlando que cambios se realizan. Estos cambios se realizan de modo singular (unitario) para ver como afecta. La utilización del entorno virtual es aquí donde adquiere su sentido. En el entorno virtual se han creado las topologías de equipo más importantes y sobre ellos se aplican pequeños cambios a nivel de GPOs principalmente. Durante la realización de estas pruebas se han diseñado las nuevas GPOs. La metodología utilizada ha sido la seguir la estructura creada y aplicar sobre cada OU la GPO correspondiente. Estas GPOs se ha diseñado según lo explicado en el capítulo 1 con los requisitos exigidos por el negocio para la normalización. Para conocer los valores de las GPOs se realiza un análisis de los parámetros que tiene asignados según el mapa de la pre-normalización. Estas pruebas fueron realizadas por los administradores de IT Systems aprovechando que deben tener un gran conocimiento de las funciones de las GPOs para resolver las incidencias que se derivaran en el proceso de integración. Los resultados obtenidos en este punto fueron plenamente satisfactorios. Los usuarios no apreciaron cambios negativos en el uso de sus equipos. Este hecho hizo que se decidiera trasladar los cambios a un entorno con usuarios reales. 46 Normalización del Directorio Activo en una entidad financiera 4.3. Pruebas de integración En esta fase del proyecto se define un entorno que represente a la totalidad de los empleados que forman GECB Spain. Estos usuarios han de representar la muestra del correcto funcionamiento de la normalización del DA. Con estas pruebas se comprobará como se integran los cambios en el escenario real. La selección de usuarios consiste en un usuario de portátil y otro de sobremesa de cada tipo de usuario y según localización. La selección fue: • 2 Usuarios de cada departamento del edificio de Lull • 2 Usuarios de cada departamento del edificio de Retama • 2 Usuarios de diferentes oficinas • 2 Usuarios de la unidad de negocio LCC • 2 Usuarios del departamento de Collections • 2 Usuarios Thin Client (usuarios sin equipos) Los pasos seguidos para mover a los usuarios son los mismos que se utilizan durante el despliegue final. Estos usuarios son movidos a la nueva estructura creada, en la que se aplican las nuevas GPOs. Para ello se utiliza la herramienta Active Directory Users and Computers. Para cada usuario y máquina se permite la acción mover, acción que consigue situar a un objeto en una nueva OU. Una vez situado en la unidad que le corresponde se le asigna a cada usuario el nuevo script de inicio. Para ello indicamos la ruta del nuevo script Spain_Login.vbs en la propiedad Logon script como se puede apreciar en la figura (Fig. 4.3). Implementación 47 Fig. 4.3 Usuario con nuevo script de inicio Tras este cambio se realizó un reinicio del sistema en todos los equipos involucrados en las pruebas. En ninguno de los casos se produjo algún problema y las unidades e impresoras fueron mapeadas correctamente. El punto importante tras comprobar un inicio correcto es la aplicación de las GPOs que se deben aplicar al usuario y a la máquina desde la que inicia sesión. El comando GPRESULT es utilizado en el equipo del usuario para comprobar que GPOs se han aplicado. No se encontró ninguna discrepancia entre las GPOs asignadas al PC, usuario o grupo y las que se asignaban en el DA. 48 Normalización del Directorio Activo en una entidad financiera Fig. 4.4 gpresult parámetros de equipo Implementación 49 Fig. 4.5 gpresult parámetros de usuario 4.4. Despliegue final El despliegue final es la culminación de dos periodos de pruebas, en los que se ha intentado considerar todos los escenarios posibles. La medida de hasta que punto eso se ha conseguido, es ver que no aparecen problemas durante el despliegue final. Para realizar el despliegue se siguieron las pautas que marca la empresa para realizar cualquier cambio sobre la infraestructura. Según estas pautas los cambios deben ser acordados con el Change Manager. La figura del Change Manager existe en GECB Spain con la función de evaluar cual es la manera de minimizar la afectación de los cambios para la empresa. Su deber es coordinar con los diferentes grupos de trabajo cuando es el mejor momento para realizar cambios y evaluar los riesgos. En este proyecto el plan que se le expuso al Change Manager fue aprobado sin problemas. El plan se llevó a cabo y es el que se expone a continuación. En una primera fase se realizó el movimiento de los servidores. Por motivos que ya se han explicado anteriormente, estaba justificado que fuera el primer 50 Normalización del Directorio Activo en una entidad financiera elemento a moverse. Este cambio se realizó durante el fin de semana. El motivo de elegir ese momento se justificaba por la escasa o nula actividad de usuarios que se registra en esos días de la semana. Debido a eso, el impacto por cualquier fallo o por la parada de los servidores es mínimo. Este movimiento se realizó con éxito y no tuvo ninguna incidencia negativa. En una segunda fase se realizó el movimiento de usuarios y computadoras. Se realizó de manera paulatina, en grupos de 30 usuarios diarios. Este valor permitió tener un volumen asumible de posibles incidencias por parte de los administradores del proyecto. El movimiento de los usuarios se planificó para realizarse cada día a las 7h de la mañana. El inicio de la jornada laboral esta marcado para las 8h, así que se dispuso cada día de tiempo suficiente para realizar los movimientos y comprobar que estaban correctos antes de que el usuario iniciara sesión. Los usuarios se eligieron que fueran siempre de la misma planta del edificio en el que se encontraban. El edificio por el que se iniciaron los cambios fue el de Llull, lugar desde el que se estaban llevando a cabo los cambios en el DA. La proximidad de localización de los usuarios facilitaba el trabajo en caso de tener que realizar actuaciones conjuntas en varios usuarios que se vieran afectados. Por exigencias del negocio, el grupo de usuarios de finanzas no fue movido como el resto. Para mover a estos usuarios hubo que esperar a ver los resultados del despliegue final. Esta medida fue impuesta para garantizar al máximo el correcto funcionamiento del núcleo del negocio de un banco, las finanzas. Todos los movimientos de usuarios se realizo con éxito y sin incidencias, lo que supuso un gran éxito para el proyecto. Esto también hizo que se pudiera realizar el movimiento del grupo de finanzas, finalizando así el proyecto. Dentro también del proyecto se creó una procedimentación para realizar cambios en el Directorio Activo. Hasta la fecha los cambios que cada departamento necesitaba llegaban por diferentes vías a los administradores. Estos actuaban según su criterio, pero este fue uno de los motivos que hicieron necesaria la normalización. El procedimiento creado consiste en la generación de un documento descriptivo que sirva al departamento de IT Systems para evaluar su impacto y cual es la mejor manera de llevar a cabo los cambios de una manera ordenada. Implementación 51 4.5. Resultados Los cambios realizados en el DA no solo no tuvieron impactos negativos sobre la infraestructura, sino que la mejoraron notablemente. El resultado que más apreció el usuario fue la velocidad de arranque del sistema. En la siguiente tabla (Tabla 4.7) podemos observar los tiempos invertidos en el inició de sesión de un usuario Power User con un portátil. Tabla 4.7 Tiempos de inicio de sesión Pre-Normalización Post-Normalización Inicio 00:00:00 00:00:00 Aplicadas políticas de computadora 00:05:09 00:02:15 Aplicadas políticas de usuario + script de inicio 00:07:50 00:03:30 Con la medida de estos tiempos se aprecia el impacto de la normalización sobre la parte de la infraestructura que hace referencia a los usuarios y a las computadoras. Se obtiene una reducción del tiempo de arranque de más del 50%. Este es un resultado de gran impacto para el negocio 58 Normalización del Directorio Activo en una entidad financiera Lsmain.bat cls echo *************************************************************************** If not %COMPUTERNAME% == MYESSWBARLLCTX1 if not %COMPUTERNAME% == MYESSWBARCECTX1 if not %COMPUTERNAME% == MYESSWBARCECTX2 if not %COMPUTERNAME% == MYESSWBARCECTX3 if not %COMPUTERNAME% == MYESSWBARCELIC if not %COMPUTERNAME% == TERM_SERV if not %COMPUTERNAME% == ILITIA if not %COMPUTERNAME% == BRIDGER if not %COMPUTERNAME% == ARES if not %COMPUTERNAME% == HIPNOS if not %COMPUTERNAME% == ARTEMISA if not %COMPUTERNAME% == MYESSTANGTSERV if not %COMPUTERNAME% == MYESSWBARCEEFTS if not %COMPUTERNAME% == MYFRSWD025PSOF2 if not %COMPUTERNAME% == MYFRSWD025PSOF1 if not %COMPUTERNAME% == myesswbarllctx1 if not %COMPUTERNAME% == MYFRSWD025OFA02 if not %COMPUTERNAME% == MYFRSWD025OFA01 if not %COMPUTERNAME% == MYESSWBARLLCTX2 if not %COMPUTERNAME% == MYESSWBARLLCTX3 if not %COMPUTERNAME% == icaservers.fr.money.ge.com start /MAX IEXPLORE http://spain.gcf.home.ge.com rem "Cambiar fechas para popups en no citrix" rem If not %COMPUTERNAME% == MYESS WBARLLCTX1 if not %COMPUTERNAME% == MYESSWBARCECTX1 if not %COMPUTERNAME% == MYESSWBARCECTX2 if not %COMPUTERNAME% == MYESSWBARCECTX3 if not %COMPUTERNAME% == MYESSWBARCELIC if not %COMPUTERNAME% == TERM_SERV if not %COMPUTERNAME% == ILITIA if not %COMPUTERNAME% == BRIDGER if not %COMPUTERNAME% == ARES if not %COMPUTERNAME% == HIPNOS if not %COMPUTERNAME% == ARTEMISA if not %COMPUTERNAME% == MYESSTANGTSERV if not %COMPUTERNAME% == MYESSWBARCEEFTS if not %COMPUTERNAME% == MYFRSWD025PSOF2 if not %COMPUTERNAME% == MYFRSWD025PSOF1 if not %COMPUTERNAME% == myesswbarllctx1 if not %COMPUTERNAME% == MYFRSWD025OFA02 if not %COMPUTERNAME% == MYFRSWD025OFA01 if not %COMPUTERNAME% == MYESSWBARLLCTX2 if not %COMPUTERNAME% == MYESSWBARLLCTX3 if not %COMPUTERNAME% == icaservers.fr.money.ge.com start \\myessweurdc0013.r2.money.ge.com\NETLOGON\spain\vs_group.vbs start \\myessweurdc0013.r2.money.ge.com\NETLOGON\spain\vs_LogLogin.vbs start \\myessweurdc0013.r2.money.ge.com\NETLOGON\spain\CheckISS.vbs Anexos 59 vs_group.vbs '----------------------------------------------------------------------------- ' Script principal de inicio para GE Capital Bank ' ' Se llama desde ls_main.bat ' ' Asigna recursos compartidos, impresoras de red y ejecuta acciones ' dependiendo de los grupos a los que pertenece el usuario '----------------------------------------------------------------------------- Option Explicit '----------------------------------------------------------------------------- 'DeclaraciÛn de variables globales Dim WSHShell Dim WSHNetwork Dim PrintersFile 'Contiene la lista de Impresora-grupo Dim SharesFile 'Contiene la lista de Share-grupo Dim SharesFileFixed 'Contiene la lista de Share-grupo Unidades Fijas Dim ActionsFile 'Contiene la lista de Action-grupo Dim CfgFile 'Contiene el fichero de conf. del usuario (si existe) Dim CfgFileExists 'vale 1 si el fichero de conf. del usuario existe Dim strLogServer 'Contiene la variable de estado LOGONSERVER Dim UserObj 'Variable para activar/desactivar el debug si DEBUG_ON=true, todas las acciones se escribiran en el LOG Const DEBUG_ON = true Const PRINTERS_FILENAME="vs_group_printers.txt" 'grupo-impresora Const SHARES_FILENAME_FIXED="vs_group_shares_fixed.txt" 'grupo-share unitats fixes Const SHARES_FILENAME="vs_group_shares.txt" 'grupo-share 'El archivo vs_group_actions contiene acciones a realizar: ' Copiar/Borrar un fichero ' Modificar el registro ' Queda abierto para ir aÒadiendo acciones Const ACTIONS_FILENAME="vs_group_actions.txt" 'grupo-accion 'Path para guardar los ficheros de log / errores Const LOG_PATH="\\icaro\ScriptsLog\vbsLogin" 'Path para guardar los ficheros de configuracion de usuario Const CFG_PATH="vsCFG" '%logonserver%\NETLOGON\Spain\CFG_PATH\%username%.cfg '----------------------------------------------------------------------------- 'Llamada al procedimiento principal Call Main() '----------------------------------------------------------------------------- 'Procedimiento Principal Sub Main() Dim GroupObj Dim bTemp Set WSHShell = WScript.CreateObject("WScript.Shell") Set WSHNetwork = WScript.CreateObject("WScript.Network") 'Obtiene el LOGONSERVER desde la variable de entorno strLogServer="\\myessweurdc0013.r2.money.ge.com" 60 Normalización del Directorio Activo en una entidad financiera 'Obtiene el nombre del usuario que est· iniciando sesiÛn Set UserObj = GetObject("WinNT://r2/" + WSHNetwork.UserName) if err.number <> 0 then if ChkEngine = "cscript.exe" then wscript.echo "Error: Usuario no encontrado" else WSHShell.Popup "Error: Usuario no encontrado.",-1,strTitle end if set WSHNetwork = Nothing set DomainString = Nothing set UserObj= Nothing wscript.quit end if 'Si est· activado el debug, guarda en el log las unidades e impresoras del equipo If DEBUG_ON Then LogStatus("Antes") End If 'Carga el fichero de grupo-impresoras LoadPrintersFile() 'Carga el fichero de grupo-shares Fixed LoadSharesFileFixed() 'Carga el fichero de grupo-shares LoadSharesFile() 'Carga el fichero de grupo-acciones LoadActionsFile() 'Carga el fichero de configuracion de usuario (si lo hay) LoadCfgFile() 'Borra todas las conexiones de red DeleteShares() 'Ejecuta las acciones comunes para todos los grupos (grupo '*') ExecuteActions ("*") For Each GroupObj In UserObj.Groups AssignSharesFixed(GroupObj.Name) Next For Each GroupObj In UserObj.Groups AssignShares(GroupObj.Name) Next 'Por cada grupo al que pertenece, asigna los recursos compartidos y ejecuta las acciones For Each GroupObj In UserObj.Groups ExecuteActions(GroupObj.Name) Next '----------------------------------------------------------------------- --------------------------- 'Excepciones a los grupos. Si el usuario est· en el grupo SH_Quitar_Temporal, borramos la unidad Y: (\\icaro\temporal) For Each GroupObj In UserObj.Groups If GroupObj.Name="SH_Quitar_Temporal" then WshNetwork.RemoveNetworkDrive "Y:" if DEBUG_ON Then WriteDbg "MapDrive","El usuario tiene restringida la unidad temporal Y:->\\icaro\temporal" End If Next '-------------------------------------- 'Borra todas las impresoras de red Anexos 61 DeletePrinters() For Each GroupObj In UserObj.Groups AssignPrinters(GroupObj.Name) Next CheckError("Fin script") if DEBUG_ON Then WriteDbg "-","----------------------------------------- ----------------------" set UserObj = Nothing set GroupObj = Nothing set WSHNetwork = Nothing set WSHSHell = Nothing wscript.quit End Sub '----------------------------------------------------------------------------- 'DeletePrinters ' Borra todas las impresoras de red, sin piedad. ' Sub DeletePrinters() Dim clPrinters Dim i dim iErr dim strPrinter dim strPort dim r On Error Resume Next Set clPrinters = WshNetwork.EnumPrinterConnections For i = 0 to clPrinters.Count - 1 Step 2 strPrinter=clprinters.item(i+1) strPort=clprinters.item(i) 'Elimina la impresora si es windows de red o imprime en un puerto que ya no existe(atenea, cerberos) if left(strPrinter,2)="\\" or UCASE(left(strPort,6))="ATENEA" or UCASE(left(strPort,8))="CERBEROS" then if CheckWillAssignPrinter(strPrinter) = 0 then if DEBUG_ON Then WriteDbg "DeletePrinter","Borrando impresora " & strPrinter iErr = wshshell.run ("rundll32 printui.dll,PrintUIEntry /dn /c\\%COMPUTERNAME% /n" + strPrinter, 0, true) iErr = wshshell.run ("rundll32 printui.dll,PrintUIEntry /dn /c\\%COMPUTERNAME% /n" + strPrinter, 0, true) if iErr <> 0 then WriteError "DeletePrinter", "Error " & ierr & " al intentar borrar la impresora '" & strPrinter & "'" End If else if DEBUG_ON Then WriteDbg "DeletePrinter","No se borra, porque se aÒadir·: " & strPrinter end if end if Next On Error Goto 0 End Sub '----------------------------------------------------------------------------- 62 Normalización del Directorio Activo en una entidad financiera 'DeleteShares ' Borra todas las unidades de red (desde la F: hasta la X:) ' Excepto las que se especifiquen en el archivo de configuraciÛn del usuario ' NoDelete = X ' Sub DeleteShares() Dim i Dim Existe Dim strLinea Dim strTexto On Error Goto 0 For i = asc("E") to asc("V") 'Mira en el fichero de configuraciÛn del usuario si tiene que borrar 'cada una de las unidades compartidas. 'Si no tiene fichero de configuraciÛn, las borrar· todas Existe = 0 if CfgFileExists = 1 Then For Each strLinea in CfgFile if left(strLinea,1)<>"#" and len(strLinea)>2 then 'Las lineas a buscar son "NoDelete" "X" strTexto = Split(strLinea, """") If UCASE(strTexto(1))="NODELETE" then If UCASE(strTexto(3)) = chr(i) Then Existe = 1 Exit For End If End If End If Next End If if Existe = 0 Then On Error Resume Next WshNetwork.RemoveNetworkDrive chr(i) & ":",true,true On Error Goto 0 Else if DEBUG_ON Then WriteDbg "RemoveNetworkDrive", "no se borrar· la unidad " & chr(i) & " porque esta en el fichero de configuraciÛn" End If next if DEBUG_ON Then WriteDbg "RemoveNetworkDrive","Unidades mapeadas borradas" On Error Goto 0 End Sub '----------------------------------------------------------------------------- 'LoadPrintersFile ' Carga en memoria el fichero con la asociaciÛn grupo-impresora. ' Function LoadPrintersFile() Dim objFileSystem Dim objInputFile Dim strInputFile Const OPEN_FILE_FOR_READING = 1 'Abre el fichero 'group_printers.txt' desde el LOGONSERVER Set objFileSystem = CreateObject("Scripting.fileSystemObject") 'wscript.echo strLogServer + "\NETLOGON\Spain\" + PRINTERS_FILENAME Anexos 63 Set objInputFile = objFileSystem.OpenTextFile(strLogServer + "\NETLOGON\Spain\" + PRINTERS_FILENAME, OPEN_FILE_FOR_READING) 'Lee el contenido del fichero y lo mete en un array PrintersFile = Split(objInputFile.ReadAll, vbNewline) objInputFile.Close Set objFileSystem = Nothing End Function '----------------------------------------------------------------------------- 'LoadSharesFileFixed() Carga en memoria el fichero con la asociaciÛn gruposhare con unidades fijas. Function LoadSharesFileFixed() Dim objFileSystem Dim objInputFile Dim strInputFile Const OPEN_FILE_FOR_READING = 1 'Abre el fichero 'vs_group_shares_fixed.txt' desde el LOGONSERVER Set objFileSystem = CreateObject("Scripting.fileSystemObject") Set objInputFile = objFileSystem.OpenTextFile(strLogServer + "\NETLOGON\Spain\" + SHARES_FILENAME_FIXED, OPEN_FILE_FOR_READING) 'Lee el contenido del fichero y lo mete en un array SharesFileFixed = Split(objInputFile.ReadAll, vbNewline) objInputFile.Close Set objFileSystem = Nothing End Function '----------------------------------------------------------------------------- 'LoadSharesFile() Carga en memoria el fichero con la asociaciÛn grupo-share. ' Function LoadSharesFile() Dim objFileSystem Dim objInputFile Dim strInputFile Const OPEN_FILE_FOR_READING = 1 'Abre el fichero 'vs_group_shares.txt' desde el LOGONSERVER Set objFileSystem = CreateObject("Scripting.fileSystemObject") Set objInputFile = objFileSystem.OpenTextFile(strLogServer + "\NETLOGON\Spain\" + SHARES_FILENAME, OPEN_FILE_FOR_READING) 'Lee el contenido del fichero y lo mete en un array SharesFile = Split(objInputFile.ReadAll, vbNewline) objInputFile.Close Set objFileSystem = Nothing End Function '----------------------------------------------------------------------------- 'LoadActionsFile ' Carga en memoria el fichero con la asociaciÛn grupo-acciones. ' 64 Normalización del Directorio Activo en una entidad financiera Function LoadActionsFile() Dim objFileSystem Dim objInputFile Dim strInputFile Dim StrDateInputfile Const OPEN_FILE_FOR_READING = 1 'Abre el fichero 'vs_group_actions.txt' desde el LOGONSERVER Set objFileSystem = CreateObject("Scripting.fileSystemObject") Set objInputFile = objFileSystem.OpenTextFile(strLogServer + "\NETLOGON\Spain\" + ACTIONS_FILENAME, OPEN_FILE_FOR_READING) 'Lee el contenido del fichero y lo mete en un array ActionsFile = Split(objInputFile.ReadAll, vbNewline) objInputFile.Close Set objFileSystem = Nothing End Function '----------------------------------------------------------------------------- 'LoadCfgFile ' Carga en memoria el fichero de configuraciÛn para el usuario actual ' Puede no existir, en cuyo caso, CfgFile ser· igual a "" ' Function LoadCfgFile() Dim objFileSystem Dim objInputFile Dim strInputFile Dim strPath Const OPEN_FILE_FOR_READING = 1 On Error Resume Next 'Abre el fichero de configuraciÛn para el usuario actual Set objFileSystem = CreateObject("Scripting.fileSystemObject") strPath=strLogServer + "\NETLOGON\Spain\" + CFG_PATH + "\" + WSHNetwork.UserName + ".cfg" Set objInputFile = objFileSystem.OpenTextFile(strPath, OPEN_FILE_FOR_READING) if err.Number=0 then 'Lee el contenido del fichero y lo mete en un array CfgFile = Split(objInputFile.ReadAll, vbNewline) objInputFile.Close CfgFileExists = 1 Else CfgFileExists = 0 End If Set objFileSystem = Nothing End Function '----------------------------------------------------------------------------- 'AssignPrinters(group) ' Asigna la impresora que pertenece a 'group' ' Solo existe una impresora por grupo, pero por flexibilidad, ' se soporta la opciÛn de que haya mas de una impresora asignada al mismo grupo ' Function AssignPrinters(group) Anexos 65 Dim strLine Dim strTexto Dim strGroup Dim strPrinter 'Por cada linea que no sea comentario (las que no empiezan por #) 'si coincide el nombre del grupo con 'group', asignar· la impresora For each strLine In PrintersFile strLine=trim(strLine) if left(strLine,1)<>"#" and len(strLine)>2 then 'Cada linea debe contener 4 comillas, 'delimitando el nombre de grupo 'y la cola de impresiÛn strTexto = Split(strLine, """") strGroup=strTexto(1) strPrinter=strTexto(3) On Error Resume Next if ucase(trim(strGroup)) = ucase(trim(group)) then 'Conecta la impresora if DEBUG_ON Then WriteDbg "AddPrinter","Conectando Impresora '" & strPrinter & "'" WshNetwork.AddWindowsPrinterConnection strPrinter CheckError("AddPrinterConnection " & strPrinter) if left(strgroup,3)="dpr" then 'Establece impresora por defecto if DEBUG_ON Then WriteDbg "SetDefaultPrinter","Seleccionando impresora predeterminada '" & strPrinter & "'" WshNetwork.SetDefaultPrinter strPrinter CheckError("SetDefaultPrinter " & strPrinter) end if end if On Error Goto 0 end if Next End Function '----------------------------------------------------------------------------- 'CheckWillAssignPrinter ( strPrinter ) ' Chequea si la impresora strPrinter se va a aÒadir como impresora de red ' Sirve para no borrarla si despuÈs se va a aÒadir de nuevo ' Function CheckWillAssignPrinter(strPrinterCheck) Dim strLine Dim strTexto Dim strGroup Dim strPrinter Dim GroupObj Dim Existe For Each GroupObj In UserObj.Groups 'Por cada linea que no sea comentario (las que no empiezan por #) 'si coincide el nombre del grupo con 'group', asignar· la impresora For each strLine In PrintersFile strLine=trim(strLine) if left(strLine,1)<>"#" and len(strLine)>2 then 'Cada linea debe contener 4 comillas, 'delimitando el nombre de grupo 'y la cola de impresiÛn strTexto = Split(strLine, """") strGroup=strTexto(1) 66 Normalización del Directorio Activo en una entidad financiera strPrinter=strTexto(3) if ucase(trim(strGroup)) = ucase(trim(groupObj.name)) and ucase(trim(strPrinter)) = ucase(trim(strPrinterCheck)) then Existe=true exit for end if end if Next next if existe then CheckWillAssignPrinter = 1 else CheckWillAssignPrinter = 0 end if End Function '----------------------------------------------------------------------------- -------------------------------- 'AssignSharesFixed(group) Asigna los recursos compartidos a los que pertenece 'group' Function AssignSharesFixed(group) Dim strLine Dim strTexto Dim strGroup Dim strLetter Dim strNetworkPath 'Por cada linea que no sea comentario (las que no empiezan por #), si coincide el nombre del grupo con 'group', asignar· el recurso compartido For each strLine In SharesFileFixed strLine=trim(strLine) if left(strLine,1)<>"#" and len(strLine)>2 then 'Cada linea debe contener 6 comillas, delimitando el nombre de grupo, la letra y el recurso compartido strTexto = Split(strLine, """") strGroup=trim(strTexto(1)) strLetter=trim(strTexto(3)) strNetworkPath=trim(strTexto(5)) if UCASE(trim(strGroup)) = UCASE(trim(group)) then 'wscript.echo "conectando unidad fija: " + strletter + "->" + strnetworkpath 'Conecta el recurso compartido if DEBUG_ON Then WriteDbg "MapDrive","Conectando Unidad " & strLetter & ": ->" & strNetworkPath On Error Resume Next WshNetwork.MapNetworkDrive strLetter + ":", strNetworkPath CheckError("MapNetworkDrive " & strLetter & ": ->" & strNetworkPath) On Error Goto 0 end if end if Next End Function Anexos 67 '----------------------------------------------------------------------------- 'AssignShares(group) ' Asigna los recursos compartidos a los que pertenece 'group' ' Solo existe un recurso compartido por grupo, pero por flexibilidad, ' se soporta la opciÛn de que haya mas de un recurso compartido ' asignado al mismo grupo ' Function AssignShares(group) Dim strLine Dim strTexto Dim strGroup Dim strLetter Dim strNetworkPath 'Por cada linea que no sea comentario (las que no empiezan por #) 'si coincide el nombre del grupo con 'group', 'asignar· el recurso compartido For each strLine In SharesFile strLine=trim(strLine) if left(strLine,1)<>"#" and len(strLine)>2 then 'Cada linea debe contener 6 comillas, delimitando el nombre de grupo, la letra y el recurso compartido strTexto = Split(strLine, """") strGroup=trim(strTexto(1)) strNetworkPath=trim(strTexto(5)) if UCASE(trim(strGroup)) = UCASE(trim(group)) then strLetter=FreeDrive() 'wscript.echo "conectando: " + strletter + "->" + strnetworkpath 'Conecta el recurso compartido if DEBUG_ON Then WriteDbg "MapDrive","Conectando Unidad " & strLetter & ": ->" & strNetworkPath On Error Resume Next WshNetwork.MapNetworkDrive strLetter + ":", strNetworkPath CheckError("MapNetworkDrive " & strLetter & ": ->" & strNetworkPath) On Error Goto 0 end if end if Next End Function Function FreeDrive Dim RetValue, sNotAvailable, I, oFso, DriveLetter Set oFso = Wscript.CreateObject("Scripting.FileSystemObject") For I = asc("E") to asc("X") Select Case RetValue = oFso.DriveExists(Chr(I)) Case RetValue = 0 'msgbox("Unitat disponible" & DriveLetter) DriveLetter = Chr(I) Exit For Case RetValue = 1 'msgbox("Unitat no disponible, busca la seg¸ent") If DriveLetter="X" then msgbox("No hay mas unidades disponibles, avisad al admnistrador. Tel: 934922100") End If 74 Normalización del Directorio Activo en una entidad financiera dim strPort dim r On Error Resume Next Set clPrinters = WshNetwork.EnumPrinterConnections For i = 0 to clPrinters.Count - 1 Step 2 strPrinter=clprinters.item(i+1) strPort=clprinters.item(i) 'Elimina la impresora si es windows de red o imprime en un puerto que ya no existe(atenea, cerberos) if left(strPrinter,2)="\\" or UCASE(left(strPort,6))="ATENEA" or UCASE(left(strPort,8))="CERBEROS" then if CheckWillAssignPrinter(strPrinter) = 0 then iErr = wshshell.run ("rundll32 printui.dll,PrintUIEntry /dn /c\\%COMPUTERNAME% /n" + strPrinter, 0, true) iErr = wshshell.run ("rundll32 printui.dll,PrintUIEntry /dn /c\\%COMPUTERNAME% /n" + strPrinter, 0, true) end if end if Next On Error Goto 0 End Sub '----------------------------------------------------------------------------- 'DeleteShares ' Borra todas las unidades de red (desde la F: hasta la X:) ' Excepto las que se especifiquen en el archivo de configuraciÛn del usuario ' NoDelete = X ' Sub DeleteShares() Dim i Dim Existe Dim strLinea Dim strTexto On Error Goto 0 For i = asc("E") to asc("V") 'Mira en el fichero de configuraciÛn del usuario si tiene que borrar 'cada una de las unidades compartidas. 'Si no tiene fichero de configuraciÛn, las borrar· todas Existe = 0 if CfgFileExists = 1 Then For Each strLinea in CfgFile if left(strLinea,1)<>"#" and len(strLinea)>2 then 'Las lineas a buscar son "NoDelete" "X" strTexto = Split(strLinea, """") If UCASE(strTexto(1))="NODELETE" then If UCASE(strTexto(3)) = chr(i) Then Existe = 1 Exit For End If End If End If Next End If if Existe = 0 Then On Error Resume Next WshNetwork.RemoveNetworkDrive chr(i) & ":",true,true On Error Goto 0 End If Anexos 75 next On Error Goto 0 End Sub '----------------------------------------------------------------------------- 'LoadPrintersFile ' Carga en memoria el fichero con la asociaciÛn grupo-impresora. ' Function LoadPrintersFile() Dim objFileSystem Dim objInputFile Dim strInputFile Const OPEN_FILE_FOR_READING = 1 'Abre el fichero 'group_printers.txt' desde el LOGONSERVER Set objFileSystem = CreateObject("Scripting.fileSystemObject") Set objInputFile = objFileSystem.OpenTextFile(strLogServer + "\NETLOGON\Spain\" + PRINTERS_FILENAME, OPEN_FILE_FOR_READING) 'Lee el contenido del fichero y lo mete en un array PrintersFile = Split(objInputFile.ReadAll, vbNewline) objInputFile.Close Set objFileSystem = Nothing End Function '----------------------------------------------------------------------------- 'LoadSharesFileFixed() Carga en memoria el fichero con la asociaciÛn gruposhare con unidades fijas. Function LoadSharesFileFixed() Dim objFileSystem Dim objInputFile Dim strInputFile Const OPEN_FILE_FOR_READING = 1 'Abre el fichero 'vs_group_shares_fixed.txt' desde el LOGONSERVER Set objFileSystem = CreateObject("Scripting.fileSystemObject") Set objInputFile = objFileSystem.OpenTextFile(strLogServer + "\NETLOGON\Spain\" + SHARES_FILENAME_FIXED, OPEN_FILE_FOR_READING) 'Lee el contenido del fichero y lo mete en un array SharesFileFixed = Split(objInputFile.ReadAll, vbNewline) objInputFile.Close Set objFileSystem = Nothing End Function '----------------------------------------------------------------------------- 'LoadSharesFile() Carga en memoria el fichero con la asociaciÛn grupo-share. ' Function LoadSharesFile() Dim objFileSystem 76 Normalización del Directorio Activo en una entidad financiera Dim objInputFile Dim strInputFile Const OPEN_FILE_FOR_READING = 1 'Abre el fichero 'vs_group_shares.txt' desde el LOGONSERVER Set objFileSystem = CreateObject("Scripting.fileSystemObject") Set objInputFile = objFileSystem.OpenTextFile(strLogServer + "\NETLOGON\Spain\" + SHARES_FILENAME, OPEN_FILE_FOR_READING) 'Lee el contenido del fichero y lo mete en un array SharesFile = Split(objInputFile.ReadAll, vbNewline) objInputFile.Close Set objFileSystem = Nothing End Function '----------------------------------------------------------------------------- 'LoadActionsFile ' Carga en memoria el fichero con la asociaciÛn grupo-acciones. ' Function LoadActionsFile() Dim objFileSystem Dim objInputFile Dim strInputFile Dim StrDateInputfile Const OPEN_FILE_FOR_READING = 1 'Abre el fichero 'vs_group_actions.txt' desde el LOGONSERVER Set objFileSystem = CreateObject("Scripting.fileSystemObject") Set objInputFile = objFileSystem.OpenTextFile(strLogServer + "\NETLOGON\Spain\" + ACTIONS_FILENAME, OPEN_FILE_FOR_READING) 'Lee el contenido del fichero y lo mete en un array ActionsFile = Split(objInputFile.ReadAll, vbNewline) objInputFile.Close Set objFileSystem = Nothing End Function '----------------------------------------------------------------------------- 'AssignPrinters(group) ' Asigna la impresora que pertenece a 'group' ' Solo existe una impresora por grupo, pero por flexibilidad, ' se soporta la opciÛn de que haya mas de una impresora asignada al mismo grupo ' Function AssignPrinters(group) Dim strLine Dim strTexto Dim strGroup Dim strPrinter 'Por cada linea que no sea comentario (las que no empiezan por #) 'si coincide el nombre del grupo con 'group', asignar· la impresora For each strLine In PrintersFile strLine=trim(strLine) if left(strLine,1)<>"#" and len(strLine)>2 then 'Cada linea debe contener 4 comillas, 'delimitando el nombre de grupo 'y la cola de impresiÛn strTexto = Split(strLine, """") strGroup=strTexto(1) Anexos 77 strPrinter=strTexto(3) On Error Resume Next if ucase(trim(strGroup)) = ucase(trim(group)) then 'Conecta la impresora WshNetwork.AddWindowsPrinterConnection strPrinter CheckError("AddPrinterConnection " & strPrinter) if left(strgroup,3)="dpr" then 'Establece impresora por defecto WshNetwork.SetDefaultPrinter strPrinter CheckError("SetDefaultPrinter " & strPrinter) end if end if On Error Goto 0 end if Next End Function '----------------------------------------------------------------------------- 'CheckWillAssignPrinter ( strPrinter ) ' Chequea si la impresora strPrinter se va a aÒadir como impresora de red ' Sirve para no borrarla si despuÈs se va a aÒadir de nuevo ' Function CheckWillAssignPrinter(strPrinterCheck) Dim strLine Dim strTexto Dim strGroup Dim strPrinter Dim GroupObj Dim Existe For Each GroupObj In UserObj.Groups 'Por cada linea que no sea comentario (las que no empiezan por #) 'si coincide el nombre del grupo con 'group', asignar· la impresora For each strLine In PrintersFile strLine=trim(strLine) if left(strLine,1)<>"#" and len(strLine)>2 then 'Cada linea debe contener 4 comillas, 'delimitando el nombre de grupo 'y la cola de impresiÛn strTexto = Split(strLine, """") strGroup=strTexto(1) strPrinter=strTexto(3) if ucase(trim(strGroup)) = ucase(trim(groupObj.name)) and ucase(trim(strPrinter)) = ucase(trim(strPrinterCheck)) then Existe=true exit for end if end if Next next if existe then CheckWillAssignPrinter = 1 else CheckWillAssignPrinter = 0 end if End Function 78 Normalización del Directorio Activo en una entidad financiera '----------------------------------------------------------------------------- -------------------------------- 'AssignSharesFixed(group) Asigna los recursos compartidos a los que pertenece 'group' Function AssignSharesFixed(group) Dim strLine Dim strTexto Dim strGroup Dim strLetter Dim strNetworkPath 'Por cada linea que no sea comentario (las que no empiezan por #), si coincide el nombre del grupo con 'group', asignar· el recurso compartido For each strLine In SharesFileFixed strLine=trim(strLine) if left(strLine,1)<>"#" and len(strLine)>2 then 'Cada linea debe contener 6 comillas, delimitando el nombre de grupo, la letra y el recurso compartido strTexto = Split(strLine, """") strGroup=trim(strTexto(1)) strLetter=trim(strTexto(3)) strNetworkPath=trim(strTexto(5)) if UCASE(trim(strGroup)) = UCASE(trim(group)) then 'Conecta el recurso compartido On Error Resume Next WshNetwork.MapNetworkDrive strLetter + ":", strNetworkPath CheckError("MapNetworkDrive " & strLetter & ": ->" & strNetworkPath) On Error Goto 0 end if end if Next End Function '----------------------------------------------------------------------------- 'AssignShares(group) ' Asigna los recursos compartidos a los que pertenece 'group' ' Solo existe un recurso compartido por grupo, pero por flexibilidad, ' se soporta la opciÛn de que haya mas de un recurso compartido ' asignado al mismo grupo ' Function AssignShares(group) Dim strLine Dim strTexto Dim strGroup Dim strLetter Dim strNetworkPath 'Por cada linea que no sea comentario (las que no empiezan por #) 'si coincide el nombre del grupo con 'group', 'asignar· el recurso compartido For each strLine In SharesFile strLine=trim(strLine) if left(strLine,1)<>"#" and len(strLine)>2 then 'Cada linea debe contener 6 comillas, delimitando el nombre de grupo, la letra y el recurso compartido Anexos 79 strTexto = Split(strLine, """") strGroup=trim(strTexto(1)) strNetworkPath=trim(strTexto(5)) if UCASE(trim(strGroup)) = UCASE(trim(group)) then strLetter=FreeDrive() On Error Resume Next WshNetwork.MapNetworkDrive strLetter + ":", strNetworkPath CheckError("MapNetworkDrive " & strLetter & ": ->" & strNetworkPath) On Error Goto 0 end if end if Next End Function Function FreeDrive Dim RetValue, sNotAvailable, I, oFso, DriveLetter Set oFso = Wscript.CreateObject("Scripting.FileSystemObject") For I = asc("E") to asc("X") Select Case RetValue = oFso.DriveExists(Chr(I)) Case RetValue = 0 DriveLetter = Chr(I) Exit For Case RetValue = 1 If DriveLetter="X" then msgbox("No hay mas unidades disponibles, avisad al admnistrador. Tel: 934922100") End If Driveletter = "" End Select Next FreeDrive = DriveLetter End Function '----------------------------------------------------------------------------- 'ExecuteActions(group) ' Ejecuta las acciones para el grupo 'group' ' El grupo '*' es com˙n para todos los usuarios ' Function ExecuteActions(group) Dim strLine Dim strTexto Dim strGroup Dim strLetter Dim strNetworkPath 'Por cada linea que no sea comentario (las que no empiezan por #) 'si coincide el nombre del grupo con 'group', 'asignar· el recurso compartido For each strLine In ActionsFile strLine=trim(strLine) if left(strLine,1)<>"#" and len(strLine)>2 then 'Cada lÌnea debe contener al menos 6 comillas, 'delimitando el nombre de grupo 'acciÛn y par·metro(s) strTexto = Split(strLine, """") 80 Normalización del Directorio Activo en una entidad financiera strGroup=trim(strTexto(1)) end if Next End Function