1. Administración de Sistemas
Usuarios y Protección en Windows 2003
I TAHISA M. D ÍAZ D ÍAZ
M ARÍA D. BATISTA G ALVÁN
E SCUELA T ÉCNICA S UPERIOR DE I NGENIERÍA I NFORMÁTICA
Universidad de La Laguna
2. R ESUMEN . El objetivo del presente informe es describir y explicar los pasos se-
guidos para la realización de la tercera práctica de laboratorio de la asignatura de
Administración de Sistemas.
En este caso, la práctica consistía en aprender a utilizar las herramientas para la ges-
tión y protección de usuarios que proporciona Windows Server 2003, concretamente
se hizo un amplio uso del Active Directory. Por lo tanto, se trabajó sobre una máquina
virtual que actuaba como servidor, con Windows Servers 2003 como sistema opera-
tivo al que se le instaló y configuró el servicio DNS para posteriormente instalarle
el Active Directory; la máquina virtual que operaría como cliente llevaba instalado
el Windows XP. Se planteaba una organización simulada, tal y como ocurrió en las
prácticas anteriores, a la que administrar cuestiones tales como el acceso a los re-
cursos, la protección y la seguridad, lo que conlleva manejar operaciones como la
creación de usuarios y grupos, establecer reglas de seguridad, el mapeo de unidades,
entre otras tantas que se describirán a medida avance el informe. La estructura de
dicho informe está determinada por las cuestiones propuestas en la práctica, a las
que se irá respondiendo y describiendo los procesos para su consecución en el orden
que se plantean.
Con el fin de facilitar, automatizar y, por consiguiente, agilizarle estas operaciones
al administrador, se creó una aplicación en modo gráfico a base de scripts elabora-
dos con el lenguaje VBScript, que se adjunta en el presente informe. Aunque en los
apartados se explica como se llevo a cabo la práctica de manera gráfica, lo cierto se
utilizó dicho script para completar todas las tareas.
1
3. Índice
1. Sistemas 3
2. Contraseñas 5
3. Directorio privado de los usuarios 9
4. Proyectos de la organización 13
5. Usuarios de la Organización 17
6. Directores de los proyectos 20
7. Ejecutivos de la organización 21
8. Resto de usuarios 22
Anexos 24
A. Usuarios 24
B. Grupos 30
C. Carpeta 34
D. Security Policy 35
E. Compartir 36
F. Permisos NTFS 38
G. Permiso Share 40
2
4. P OLÍTICA DE S EGURIDAD DE LA O RGANIZACIÓN
1. Sistemas
Cualquier usuario debe poder apagar el sistema.
En este primer punto, al menos en lo que respecta a conceder al usuario el privilegio de apagar el
sistema, no fue necesario configurar nada puesto que el usuario ya tiene por defecto ese privilegio de
poder apagar el equipo local.
Los usuarios tienen restringidas las horas de acceso al sistema.
Por su parte, para restringir las horas de acceso al sistema a los usuarios, es obvio que previamente fue
necesario crear a los usuarios, lo que se explicará más adelante (véase apartado 2). Por tanto, se parte
de la idea que ya están creados los usuarios. Así pues se siguieron los pasos:
Start → Administrative Tools → Active Directory Users and Computer
Se seleccionó la unidad organizativa que se creó para almacenar a los usuarios de la organización (a la
que se le llamó People) y se seleccionaron los usuarios del turno de mañana (pues se le asignaron las
horas según su turno, tal y cómo se propone en el punto ??.
(a) Properties (b) Account
Figura 1: Properties → Account
3
5. Una vez seleccionados, se desplegó con el botón derecho un menú en el que se eligió “Properties”. Luego
en la pestaña “Account” se marcó la casilla “Logon hour” y, a continuación, el botón con el mismo nombre
(véase la figura 1).
En la ventana que apareció se seleccionaron las horas correspondientes. Una vez hecho se marcó la
opción “Logon Permitted” (véase la figura 2).
Figura 2: Logon Hour
Finalmente se procedió de igual forma para los del grupo de tarde.
4
6. 2. Contraseñas
A fin de facilitar la gestión, asignar como contraseña el nombre del usuario.
Como la contraseña se estableció al crear a un usuario, se explicará en este subapartado el proceso de
creación de usuario.
C REACIÓN DE U SUARIOS
Se siguieron los pasos siguientes:
Start → Administrative Tools → Active Directory Users and Computer
En la unidad organizativa People, al clicar sobre el botón crear usuario aparecía una nueva ventana
donde se establecieron datos básicos sobre el usuario, como su nombre, apellidos, nombre de la cuenta,
etc. (véase Figura 3(a)).
Apretando siguiente, aparecía una nueva ventana (véase Figura 3(b)) donde establecer la contraseña y
algunas características como, por ejemplo, si queremos que la contraseña nunca expire. En ese punto,
introducimos la contraseña (el propio nombre de usuario, tal y como se especifica en este apartado), y
no se marcó ninguna de las opciones, puesto que se configurarían posteriormente siguiendo las pautas
que va marcando el guión.
(a) Datos del Usuario (b) Contraseña
Figura 3: New Object : User
Finalmente, clicando “next” y a continuación, “finish”, se creó el usuario y apareció en la unidad organi-
zativa. Este proceso se hizo con cada usuario, desde emple1 hasta emple10 y ejec1 y ejec2 (véase figura
4).
5
7. Figura 4: OU People
Los usuarios deben cambiar las contraseñas cada tres meses.
Los usuarios no pueden cambiar las contraseñas hasta 2 semanas después de haberla
cambiado.
No se permiten contraseñas en blanco. Longitud mínima: 4 caracteres.
La nueva contraseña no debe coincidir con las dos últimas introducidas por el usuario.
Los siguientes subapartados fueron subsanados siguiendo los pasos:
Start → Administrative Tools → Domain Security Policy
Y luego, en dicha herramienta, en el árbol que aparece a la izquierda, se eligió:
Account Policies → Password Policy
Al seguir está ruta, en la ventana de la derecha aparecerían las políticas que serían modificadas para
cumplir con los subapartados que nos ocupan. Para cambiarlas simplemente fue necesario hacer doble
clic sobre cada una de las siguientes políticas y establecerles las propiedades tal y como se muestra a
continuación:
Maximum password age: esta política se configuró para cumplir que los usuarios tuvieran que cambiar
la contraseña cada 3 meses. Por lo que se estableció a “90 days”
Minimum password age: esta política se configuró para cumplir con que los usuarios no pudieran
cambiar su contraseña hasta pasadas dos semanas del último cambio. Se estableció a “14 days”
Minimum password length: esta política se configuró para cumplir con la longitud mínima de la con-
traseña. Se estableció a “4 characters”
6
8. Enforce password history: esta política se configuró para que cuando el usuario cambiará la contraseña,
ésta no pudiera coincidir con las dos últimas establecidas. Se estableció a “2 password remembered”
Si se producen 4 intentos de autenticación fallidos a una cuenta de usuario en un inter-
valo de 10 minutos, ésta debe quedar permanentemente bloqueada.
Como, en los subapartados anteriores, en éste, también nos dirigimos a la herramienta:
Start → Administrative Tools → Domain Security Policy
Para cumplir que tras 4 intentos en un intervalo de 10 minutos se bloqueara la cuenta de manera
permanente, fue necesario dirigirnos a:
Account Policies → Password Policy → Account Lockout Policies
Donde se cambiaron tres políticas:
Account lockout duration se estableció a “0” para que la cuenta fuera bloqueada permanentemente.
En caso de poner otra cifra, representaría los minutos que se quedaría bloqueada la cuenta.
Account lockout threshold se estableció a “4 invalid logon attempts”, para los 4 intentos.
Reset account lockout counter after se estableció a “10 minutes”, para el intervalo de 10 minutos.
Deben quedar registrados los intentos fallidos de entrada en el sistema.
En este caso, los cambios fueron necesarios establecerlos tanto en la herramienta Domain Security
Policy, como en la Domain Controller Security Policy, para que los fallos quedarán registrados en el
servidor, en cuyo caso, si no la definiéramos de igual manera, la del controlador anularía a la de Domain
Security Policy. En ambos casos se siguió:
Local Policy → Audit Policy
Y, para las políticas “Audit account logon event” y “Audit logon event” se marcó la casilla “Failure” y se
desmarcó “Success” en caso de estar marcada (véase la figura 5) para que se registraran sólo los fallos al
entrar en el sistema.
7
9. Figura 5: Audit Policy
Para comprobar si funcionó, se entró erróneamente (fallando en la contraseña) en la máquina cliente
con un usuario, se comprobó que se quedaban los registros del error (véanse las figuras 6(a) y 6(b)) en:
(a) Error de Inicio de Sesión (b) Event Viewer
Figura 6: 4 intentos fallidos en menos de 10 minutos
Start → Administrative Tools → Event Viewer → Security
y que el usuario quedó inhabilitado en Active Directory Users and Computer.
8
10. 3. Directorio privado de los usuarios
Cada usuario debe disponer de un directorio propio de conexión con las siguientes restric-
ciones:
Todo usuario debe disponer de un directorio propio a partir del directorio home del
servidor, cuyo nombre coincida con el de la cuenta del usuario. El usuario podrá acceder
automáticamente a este directorio a partir de la unidad n: desde cualquier máquina del
dominio.
En primer lugar, se creó el directorio home en C: y dentro de home una carpeta por cada usuario de la
organización (desde emple1 hasta emple10, además de ejec1 y ejec2), como se muestra a continuación
en la imagen:
En el directorio C:home (botón derecho del ratón) se eligió “Sharing and Security” (véase la figura
7(a)), en la ventana que apareció en la pestaña “Sharing” (véase la figura 7(b)) se marcó la casilla
“Share this folder”; donde ponía “Share name”, se eligió el nombre que tendría la carpeta compartida
(en este caso, home) y en “User Limit” se podía elegir la cantidad de usuario que podría conectarse al
recurso compartido (en este caso, el máximo permitido).
Luego, por último se establecieron los permisos compartidos, para lo que se pulsó en esa misma ventana,
el botón “Permissions“. A continuación se añadió al grupo Domain User (véase la figura 7(c)), un grupo
especial creado para introducir a todos los usuarios de la organización, al que se le dio control total en
dicho recurso (home), para permitir a todos los usuarios acceder al mismo directorio y no limitarle
luego permisos para manipular su propia carpeta.
Por otra parte, en:
Start → Administrative Tools → Active Directory Users and Computer
Para cada usuario, en “Properties” y en la pestaña “Profile”, en el recuadro donde ponía “Home Folder”, se
marcó la casilla “Connect” y elegimos la unidad N: tal y como dicta el enunciado de este apartado; y en
9
11. el recuadro tras la palabra “To:” se escribió la ruta al recurso de conexión que sería el home del usuario
correspondiente que se creó anteriormente. Se indicaron la máquina, el recurso y la ruta del directorio
dentro del recurso. Por ejemplo, para emple1 sería 192.168.1.110home %username % tal y como
se muestra en la imagen la figura 8(a).
(a) Sharing and Security (b) Sharing (c) Permissions
Figura 7: Carpeta Compartida
(a) Home Folder (b) Unidad
Figura 8: Directorio Privado
10
12. El resultado fue que al iniciar sesión le aparecía una unidad N: seguida con su nombre de usuario, donde
se alojaba su home (véase la figura 8(b)).
En este directorio, el usuario debe tener control total.
El resto de los usuarios no podrá tener ningún tipo de acceso sobre este directorio.
Con la finalidad de que el usuario tuviera control total sobre su propio directorio y ningún otro tuviera
este acceso se realizó lo siguiente:
En el directorio C:home (clic con botón derecho del ratón) se eligió “Sharing and Security”.
En la pestaña “Security” en el botón “Advanced” en “Permissions” se cortó la herencia de los permisos
(casilla: “Allow inheritable...”) para que no se sumaran los permisos del directorio C:home al del direc-
torio de los usuarios. Y además se pudiera eliminar a los usuarios que venían establecidos por defecto,
dejando únicamente Administradores y al grupo Domain User (véase la figura 9).
Figura 9: Herencia
Luego, en el directorio de cada usuario, en la misma pestaña “Properties” → “Sharing and Security” →
“Security”, se cortó la herencia al igual que antes. Se añadió además de a Administradores, al usuario
propietario de su directorio, al que se le da control total sobre el mismo (véase la figura 10).
11
13. Figura 10: Control Total
De esta manera, se consiguió que únicamente el propietario tuviera acceso a su directorio y ninguno otro
usuario más tuviera ningún tipo de acceso. Puede verse reflejado en la imagen donde se muestra como
emple1 intenta entrar en el directorio de otro usuario y se le es denegado el acceso (véase la figura 11).
Figura 11: Acceso Denegado a los NO Propietarios
12
14. 4. Proyectos de la organización
La organización tiene en marcha diversos proyectos. Éstos han de cumplir:
Cada proyecto dispondrá de un directorio para almacenar la información relativa al mis-
mo bajo el directorio proyectos. Cada usuario podrá acceder automáticamente a los
proyectos en los que participe a partir de las unidades p:, q:,... desde cualquier máquina
del dominio.
En este apartado, fue necesario el mapeo de las unidades. En primer lugar, se crearon tres carpetas para
cada proyecto bajo el directorio C:proyectos con el nombre de cada proyecto (auditorio, aeropuerto
y parque). Dichos directorios fueron compartidos en red, de la misma manera que se ha explicado en
apartados anteriores; en cuánto a los permisos que se les dieron, se tratará en los siguientes subapartados
con mayor detenimiento, puesto que requerían de una seguridad más personalizada y por tanto del uso
de los permisos especiales (véase en subapartados siguientes).
A continuación en C:WINDOWSSYSVOLsysvolas07.orgscripts se agregó un fichero .bat llamado
unidad.bat. En dicho script se hizo uso del comando net use para el mapeo, por lo que su único conte-
nido eran tres líneas de comando para mapear las unidades a las carpetas de los tres correspondientes
proyectos. El código fue el siguiente:
1 net use p: 192.168.1.110auditorio
2 net use q: 192.168.1.110aeropuerto
3 net use r: 192.168.1.110parque
Decir, además que las carpetas sysvol y scripts de la ruta anterior hubo que compartirlos con los usuarios
de la organización (Grupo Domain User) con permiso de lectura y al .bat se le asignó también permiso
de lectura y de ejecución, para que éste pudieran ser ejecutado por los usuarios.
Finalmente en la herramienta Active Directory Users and Computer, se seleccionaron todos los usua-
rios de la organización, y en “Properties”, pestaña “Profile”, se marcó el recuadro “Logon script” y se
añadió el nombre del .bat (véase la figura 12). De esa manera, ya se mapearían las unidades nada más
el usuario iniciará sesión y tendrían acceso a ellas, en el caso de contar con los permisos necesarios.
13
15. Figura 12: Local Script
Todos los usuarios que participan en un proyecto deben tener la posibilidad de leer y
modificar los archivos que forman parte del proyecto.
Los usuarios no podrán crear ni borrar archivos del proyecto. Esta función la realizará el
director del mismo.
C REACIÓN DE G RUPOS
Para el cumplimiento de los subapartados siguientes, a la hora darles los permisos a los usuarios, fue ne-
cesario crear grupos locales conforme a los diferentes tipos de permisos que tendrían en los directorios
de cada proyecto. Y a su vez, crear grupos globales para introducir estos grupos locales. También se crea-
ron de igual manera grupos local y global para los ejecutivos. Se diferenció entre grupos de Directivos y
de los Participantes.
A pesar de que, en cierto sentido, se duplican los grupos, está era la estrategia más efectiva en un
dominio al permitir mayor versatilidad a la hora de añadir, eliminar y mover usuarios según los permisos
que se les desee dar a los recursos y en para la propia organización. Además con el fin de organizar aún
mejor el dominio, estos grupos fueron introducidos en la unidad organizativa Group, donde ya estaba
situado el grupo global del que se ha hablado con anterioridad, Domain User.
Los pasos para crear grupos fueron los siguientes:
Se hizo clic sobre el botón para crear grupos y aparecía una ventana donde se poder elegir el tipo y
el ámbito del grupo: Seguridad/Distribución y Global/Local. En nuestro caso sólo hicimos uso de los de
14
16. Seguridad, tanto Local como Global. Por supuesto en “Group name” se introdujo el nombre que se le
deseaba dar al grupo (véase la figura 13).
Figura 13: Crear Grupo
El paso siguiente fue añadir miembros, para lo cual se fue a propiedades sobre el grupo correspondiente,
luego a la pestaña “Members”, y se presionó añadir. Si se deseaba buscar o comprobar los nombres de los
usuarios/grupos se podía pulsar “Check Names” y el nombre/s seleccionado/s aparecería/n en la ventana
(véase la figura 14).
Figura 14: Añadir Miembros
Se procedió así para introducir, en primer lugar, a los usuarios en sus grupos globales correspondientes,
y luego a los grupos globales en sus grupos locales correspondientes, quedando el estado de los grupos
de la organización tal y cómo se muestra en la figura 15.
15
17. Figura 15: OU Group
Bien, pues una vez creado estos grupos, como en este apartado los permisos son muy específicos para
los participantes, no es suficiente con los permisos normales sino que hay que darlos de un modo más
avanzado, por lo que se hizo uso de los permisos especiales.
Para que los usuarios participantes sólo pudieran leer y modificar (pero no crear ni borrar) en el direc-
torio del proyecto en el que participan, hubo que ir a “Properties” en la carpeta de dicho proyecto e ir a
“Advanced”.
Luego, en la ventana emergente, se desmarcó la herencia y se añadió al grupo correspondiente (“Add”)
y luego sobre “Edit”. Una vez allí, en “Apply onto” se seleccionó “Files Only” y se marcaron los permisos
correspondientes para sólo permitirles leer y escribir (véase la figura 16(a)). Finalmente, se añadió
nuevamente el grupo (“Add”), pero esta vez, al editarles los permisos, en “Apply onto” se seleccionó
“This folder and subfolders” y se seleccionaron los permisos (véase la figura 16(b)).
(a) Files Only (b) This folder and subfolders
Figura 16: Permisos Especiales
16
18. 5. Usuarios de la Organización
Los usuarios implicados en los proyectos tendrán restringida la hora de acceso al sistema.
Este subapartado ya fue descrito detalladamente en el apartado 1
Les debe ser asignado un perfil flotante que no puedan modificar.
En un principio, se creó en el servido en la unidad C: una carpeta compartida con el nombre de perfil,
donde se alojaría el perfil flotante.
Luego nos dirigimos a la máquina cliente con la finalidad de exportar un perfil de uno de los usuarios
que ya se había modificado previamente a la manera deseada. Hubo que entrar como Administrador y
lo siguiente fue seguir los pasos:
Mi PC (clic derecho) → Propiedades → Opciones Avanzadas
A continuación, donde se leía “Perfiles de usuario”, se pulsó “Configuración” (véase la figura 17(a)). Se
seleccionar el perfil que se había modificado y se quería exportar, y luego se pulsó en “Copiar a” (véase
la figura 17(b)).
(a) Configuración (b) Copiar a
Figura 17: Exportar Perfil de Usuario
17
19. En la nueva ventana emergente, se escribió (también se podría examinar si se deseará buscar el destino)
donde se deseaba exportar el perfil, por ejemplo, en nuestro caso, a la máquina servidor y a la carpe-
ta creada previamente para alojar el perfil, Ord07perfil (véase la figura 18(a)). También se podía
seleccionar con quién estaría permitido compartirlo.
Una vez hecho esto, se volvió a la máquina servidor, en las opciones de carpetas se mostraron los archivos
ocultos, y en la carpeta perfil se le cambió la extensión al archivo ntuser.dat por .man (véase la figura
18(b)) para hacerlo obligatorio.
(a) Copiar Perfil en Servidor
(b) Cambiar la Extensión del Archivo
Figura 18: Perfil Flotante Obligatorio
Como último paso, en la herramienta Active Directory Users and Computer se seleccionaron todos los
usuarios de la organización, y en “Properties”, pestaña “Profile”, se marcó el recuadro “Profile Path” y se
añadió la ruta de la carpeta donde se almacenó el perfil (véase la figura 19).
18
20. Figura 19: Profile Path
De esta manera el perfil sería obligatorio y flotante. Ningún usuario puede de esa manera cambiar su es-
critorio, accesos directos, fondo de pantalla, etc. Sino que sería establecido por el propio Administrador.
19
21. 6. Directores de los proyectos
Cada proyecto tiene al menos un director.
Tienen control total sobre los archivos del proyecto que dirigen.
Esto ya fue contemplado previamente, de hecho, se crearon grupos (véase apartado 4) especiales para los
directores: en los grupos Globales de Directores (G***Dir) se introdujeron a los usuarios responsables
de la dirección, y en los grupos Locales de Directores (L***Dir), se metieron a esos grupos Globales.
De manera que a los Locales se le asignó el control total de los directorios de cuyos proyectos eran
responsables (véase la figura 20).
Figura 20: Grupo de Directores
20
22. 7. Ejecutivos de la organización
Podrán acceder a cualquiera de los directorios de los proyectos en curso.
Pueden leer la información de estos proyectos.
No pueden alterar dicha información.
Fueron asignados los permisos correspondientes de sólo lectura y ejecución, de igual forma que se
ha explicado ya en apartados anteriores. Esto fue, dirigiéndose a los directorios de los proyectos, en
“Sharing and Security”, en la pestaña “Security” y asignando los permisos que corresponden de sólo
lectura y ejecución al grupo Local de Ejecutivos (LEje) para que se limiten únicamente a ello (véase la
figura 21).
Figura 21: Permisos Para los Ejecutivos
21
23. 8. Resto de usuarios
No dispondrán de ningún derecho de acceso a los directorios de los proyectos.
Al establecerlo únicamente a ejecutivos, participantes y directores, nadie más tendrá acceso a dichos
directorios. Por lo que no es necesario denegarlos, sino simplemente no asignarlos.
22
24. S ITUACIÓN ACTUAL DE LA ORGANIZACIÓN
Existen actualmente 3 proyectos en ejecución: auditorio, aeropuerto y parque.
En el apartado 4 puede comprobarse que fueron creadas carpetas para cada proyecto y los correspon-
dientes grupos para manipularlas según el tipo de acceso que tuvieran permitido.
Relacionados con estos proyectos, la empresa dispone de 10 empleados, 5 en el turno de
mañana (08:00-15:00) (emple1-emple5) y 5 en el grupo de tarde (14:00-21:00) (emple6-
emple10).
Siguiendo como referencia tanto los nombres de usuario como los horario designados en este apartado,
fueron establecidas las horas de acceso (véase apartado 1) y creados los usuarios (véase apartado 2).
Los empleados 1, 3, y 5 han sido contratados temporalmente (6 meses).
Para expirarles la cuenta en 6 meses se seleccionó a los usuarios propuestos, y en “Properties”, pestaña
“Account”, se marcó ‘‘Account expires” y en “End of ” se seleccionó la fecha de expiración (calculando 6
meses).
Hay 2 ejecutivos en la organización: ejec1 y ejec2.
Este punto ya fue contemplado a la hora de crear tanto los usuarios como los grupos, para lo cual
se crearon dos usuarios con los respectivos nombres, un grupo local y otro global para establecer sus
permisos particulares.
23
25. ANEXOS
Existen algunos pocos más formularios, pero no se presentan debido a la falta de espacio, y
a que se piensan que no son tan relevantes (ej. creación de OU, habilitar/deshabilitar usuario,
mapear unidad, ...).
A. Usuarios
En el script se tiene 3 maneras de crear usuarios. Y cada una de estas maneras tienen en común una serie
de métodos que están introducidas en un módulo, llamado “Module 1” y a continuación se describen:
1 Module Module1
2
3 Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
4
5 Public GDomain As String = "dc=as07,dc=org"
6
7 Public GLenghtPwd As Integer = 4
8
9 Public GServer As String = "192.168.1.110"
10
11
12 ’*************************************************************************
13 ’ CREACIÓN Y ELIMINACIÓN DE USUARIOS : Form => Users, MultiUser
14 ’*************************************************************************
15
16 Public Sub CreateUser(ByVal user As String, ByVal userOU As String, ByVal
groupOU As String, ByVal pwd As String, ByVal folder As String, ByVal
Message As Boolean)
17 On Error GoTo Existe
18 Err.Clear()
19 Dim obj_OU, obj_User
20 obj_OU = GetObject("LDAP://ou=" & userOU & "," & GDomain)
21 obj_User = obj_OU.Create("user", "cn=" & user)
22 Existe:
23 If Err.Number = vbEmpty Then
24 obj_User.Put("sAMAccountName", "" & user)
25 obj_User.Put("HomeDirectory", GServer & "home" & user)
26 obj_User.Put("profilePath", GServer & "perfil")
27 obj_User.Put("homeDrive", "N:")
28 obj_User.Put("scriptPath", "unidad.bat")
29 obj_User.SetInfo()
30 obj_User.SetPassword(pwd)
31 AddUserGroup(user, userOU, groupOU)
32 UserEnable(user, userOU, vbFalse)
33 CreateFolder("C:home" & folder, vbFalse)
34 If Message Then
35 MsgBox("Usuario " & user & " Creado.", 64, "Éxito")
36 End If
37 Else
38 If Message Then
39 MsgBox("Existe: " & user, 16, "Advertencia")
40 End If
41 End If
42 End Sub
43
44 Public Sub UserEnable(ByVal user As String, ByVal userOU As String, ByVal
disabled As Boolean)
24
26. 45 Dim obj_User
46 obj_User = GetObject("LDAP://cn=" & user & ",ou=" & userOU & "," & GDomain)
47 obj_User.AccountDisabled = disabled
48 obj_User.SetInfo()
49 End Sub
50
51 Public Sub AddUserGroup(ByVal user As String, ByVal userOU As String, ByVal
groupOU As String)
52 Dim obj_Group, obj_User
53 obj_Group = GetObject("LDAP://cn=Domain User,ou=" & groupOU & "," & GDomain)
54 obj_User = GetObject("LDAP://cn=" & user & ",ou=" & userOU & ",dc=as07,dc=
org")
55 If Not obj_Group.IsMember(obj_User.ADsPath) Then
56 obj_Group.Add(obj_User.ADsPath)
57 End If
58 End Sub
59
60 Public Sub Expires(ByVal user As String, ByVal userOU As String, ByVal fecha As
String)
61 Dim obj_User
62 obj_User = GetObject("LDAP://cn=" & user & ",ou=" & userOU & "," & GDomain)
63 obj_User.AccountExpirationDate = fecha
64 obj_User.SetInfo()
65 End Sub
66
67 Public Sub DeleteUser(ByVal user As String, ByVal userOU As String, ByVal folder
As String, ByVal Message As Boolean)
68 On Error GoTo Existe
69 Dim obj_OU = GetObject("LDAP://ou=" & userOU & "," & GDomain)
70 obj_OU.Delete("user", "cn=" & user)
71 Existe:
72 If Err.Number = vbEmpty Then
73 obj_OU.SetInfo()
74 DeleteFolder("C:home" & Folder, vbFalse)
75 If Message Then
76 MsgBox("Usuario " & user & " Eliminado.", 64, "Éxito")
77 End If
78 Else
79 If Message Then
80 MsgBox("No Existe: " & user, 16, "Advertencia")
81 End If
82 End If
83 End Sub
84
85 ’*************************************************************************
86 ’ CREACIÓN Y BORRADO DE CARPETAS : Form => Users, Folder
87 ’*************************************************************************
88 Public Sub CreateFolder(ByVal archive As String, ByVal Message As Boolean)
89 Dim obj_FSO, obj_Folder
90 obj_FSO = CreateObject("Scripting.FileSystemObject")
91 If obj_FSO.FolderExists(archive) Then
92 If Message Then
93 MsgBox("Existe: " & archive, 16, "Advertencia")
94 End If
95 Else
96 obj_Folder = obj_FSO.CreateFolder(archive)
97 If Message Then
98 MsgBox("Carpeta " & archive & " Creada.", 64, "Éxito")
99 End If
100 End If
101 End Sub
102
103 Public Sub DeleteFolder(ByVal archive As String, ByVal Message As Boolean)
104 Dim obj_FSO, obj_Folder
105 obj_FSO = CreateObject("Scripting.FileSystemObject")
106 If Not obj_FSO.FolderExists(archive) Then
25
27. 107 If Message Then
108 MsgBox("No Existe: " & archive, 16, "Advertencia")
109 End If
110 Else
111 obj_Folder = obj_FSO.DeleteFolder(archive)
112 If Message Then
113 MsgBox("Carpeta Borrada.", 64, "Éxito")
114 End If
115 End If
116 End Sub
117
118 End Module
Ahora se exponen los métodos específicos de cada manera. La primera manera, es la opción “Crear/Elimi-
nar” en la que el administrador crea o borra al usuario uno a uno. Teniendo en cuenta (aunque es común para
las 3 maneras), que al crearlo o borrarlo, también incluye su directorio home, lo añade o elimina del grupo
“Domain User” para poder tener permiso para el perfil fijo, para el script logon, para poder mapear los unidades
introducidas en el fichero por lotes antes descrito en el fichero unidad.bat.
1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button1.Click
2 If RadioButton1.Checked() Then
3 If TextBox1.Text.Length = 0 Then
4 MsgBox("Introduce el nombre de usuario.", 16, "Advertencia")
5 Else
6 If TextBox2.Text.Length >= GLenghtPwd Then
7 CreateUser(CStr(TextBox1.Text), CStr(TextBox3.Text), CStr(
TextBox4.Text), CStr(TextBox2.Text), CStr(TextBox1.Text()),
vbTrue)
8 Else
9 MsgBox("Contraseña menor de " & GLenghtPwd & " caracteres.", 16,
"Advertencia")
10 End If
11 End If
12 ElseIf RadioButton2.Checked() Then
13 If TextBox1.Text.Length = 0 Then
14 MsgBox("Introduce el nombre de usuario.", 16, "Advertencia")
15 Else
16 DeleteUser(CStr(TextBox1.Text), CStr(TextBox3.Text), CStr(TextBox1.
Text()), vbTrue)
26
28. 17 End If
18 ElseIf RadioButton3.Checked Then
19 If TextBox1.Text.Length = 0 Then
20 MsgBox("Introduce el nombre de usuario.", 16, "Advertencia")
21 Else
22 If (TextBox5.Text.Length > 0) And (TextBox5.Text <> "mm/dd/yyyy")
Then
23 Expires(CStr(TextBox1.Text), CStr(TextBox3.Text), CStr(TextBox5.
Text))
24 Else
25 MsgBox("Introduce fecha de expiración.", 16, "Advertencia")
26 End If
27 End If
28 Else
29 MsgBox("Selecciona: Crear, Borrar o Expirar", 16, "Advertencia")
30 End If
31 End Sub
La segunda manera, es la opción “Crear Varios” en “Carga por Ficheros” que es donde el administrador crea
un fichero de texto separados los campos por “;”, donde cada campo representa el nombre, el password, la OU
del usuario, la OU del grupo y fecha de expiración (para tiempo nulo se deja en blanco).
1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button2.Click
2 OpenFileDialog1.ShowDialog()
3 End Sub
4
5 Private Sub OpenFileDialog1_FileOk(ByVal sender As System.Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
6 TextBox1.Text = OpenFileDialog1.FileName
7 End Sub
8
9 Sub CreateOrDelete(ByVal user As String, ByVal userOU As String, ByVal groupOU
As String, ByVal pwd As String, ByVal folder As String, ByVal fecha As
String)
10 If RadioButton1.Checked Then
11 CreateUser(user, userOU, groupOU, pwd, user, vbFalse)
12 If (fecha.Length > 0) And (fecha <> "mm/dd/yyyy") Then
13 Expires(user, userOU, fecha)
14 End If
27
29. 15 ElseIf RadioButton2.Checked Then
16 DeleteUser(user, userOU, user, vbFalse)
17 End If
18 End Sub
19
20 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button1.Click
21 Dim archive As System.IO.StreamReader
22 Dim field() As String
23 Dim user, pwd, userOU, groupOU, fecha
24 If My.Computer.FileSystem.FileExists(TextBox1.Text) Then
25 archive = File.OpenText(TextBox1.Text)
26 Do Until archive.EndOfStream
27 field = Split(archive.ReadLine(), ";")
28 user = field(0)
29 pwd = field(1)
30 userOU = field(2)
31 groupOU = field(3)
32 fecha = field(4)
33 CreateOrDelete(user, userOU, groupOU, pwd, user, fecha)
34 Loop
35 archive.Close()
36 Else
37 MsgBox("No Existe: " & TextBox1.Text, 16, "Advertencia")
38 End If
39 End Sub
La tercera manera, es la opción “Crear Varios” en “Carga por Secuencia” pero esta vez el administrador
puede crear un número finito de usuarios con características similar, de manera que todos se llamen igual salvo
el no final que sería el identificatorio (ej. emple5). Se le deja la opción de elegir la palabra común, el no de
inicio, y la cantidad de usuarios a crer o borrar.
1 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button3.Click
2 Dim i, j As Integer
3 Dim user, pwd, userOU, groupOU, fecha
4 For i = 0 To TextBox3.Text - 1
5 j = CInt(TextBox4.Text) + i
6 user = CStr(TextBox2.Text) & j
7 pwd = user
28
30. 8 userOU = CStr(TextBox7.Text)
9 groupOU = CStr(TextBox5.Text)
10 fecha = CStr(TextBox6.Text)
11 CreateOrDelete(user, userOU, groupOU, pwd, user, fecha)
12 Next
13 End Sub
29
31. B. Grupos
Dentro del script existen varios apartados referidos a los grupos. El primero es la opción “Crear/Eliminar”
que crea o borra grupos locales o globales.
1 Sub CreateGroup()
2 On Error GoTo Existe
3 Const TYPE_GLOBAL = -2147483646
4 Const TYPE_LOCAL = -2147483644
5 Dim obj_OU, obj_Group
6 obj_OU = GetObject("LDAP://ou=" & TextBox3.Text() & "," & GDomain)
7 obj_Group = obj_OU.Create("group", "cn=" & TextBox1.Text())
8 Existe:
9 If Err.Number = vbEmpty Then
10 obj_Group.Put("sAMAccountName", "" & TextBox1.Text())
11 If RadioButton3.Checked() Then
12 obj_Group.Put("Grouptype", TYPE_GLOBAL)
13 ElseIf RadioButton4.Checked() Then
14 obj_Group.Put("Grouptype", TYPE_LOCAL)
15 End If
16 If TextBox2.Text.Length > 0 Then
17 obj_Group.Description = TextBox2.Text()
18 End If
19 obj_Group.SetInfo()
20 MsgBox("Grupo Creado.", 64, "Éxito")
21 Else
22 MsgBox("Existe", 16, "Advertencia")
23 End If
24 End Sub
25
26 Sub DeleteGroup()
27 On Error GoTo Existe
28 Dim obj_OU
29 obj_OU = GetObject("LDAP://ou=" & TextBox3.Text() & "," & GDomain)
30 obj_OU.Delete("group", "cn=" & TextBox1.Text())
31 Existe:
32 If Err.Number = vbEmpty Then
33 obj_OU.SetInfo()
34 MsgBox("Grupo Eliminado.", 64, "Éxito")
35 Else
36 MsgBox("No Existe", 16, "Advertencia")
37 End If
38 End Sub
30
32. 39
40 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button1.Click
41 If TextBox1.Text.Length > 0 Then
42 If RadioButton1.Checked() Then
43 If RadioButton3.Checked() Or RadioButton4.Checked() Then
44 CreateGroup()
45 Else
46 MsgBox("Marca una casilla: Local o Global.", 16, "Advertencia")
47 End If
48 ElseIf RadioButton2.Checked() Then
49 DeleteGroup()
50 Else
51 MsgBox("Selecciona: Crear o Borrar.", 16, "Advertencia")
52 End If
53 Else
54 MsgBox("Introduzca nombre del Grupo.", 16, "Advertencia")
55 End If
56 End Sub
El segundo apartado está en la opción “Agregar Miembros”, donde el administrador primero señalaría
conque tipo de grupo va a trabajar. Si eligiese Local, pues en la etiqueta “Grupo” aparecerían todos los grupos
Locales, y podría señalar uno. Luego, en la etiqueta “usuario/Grupos” aparecerían todos los grupos Globales
que existen en la OU Group que existen, y para terminar si cliqueas en el botón de “Miembros” podrías ver
cuales miembros ya están incluidos, y así de esa manera podrías elegir uno que mejor te convenga.
1 Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows
.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
2 e.KeyChar() = ""
3 End Sub
4
5 Private Sub ComboBox2_KeyPress(ByVal sender As Object, ByVal e As System.Windows
.Forms.KeyPressEventArgs) Handles ComboBox2.KeyPress
6 e.KeyChar() = ""
7 End Sub
8
9 Private Sub ComboBox3_KeyPress(ByVal sender As Object, ByVal e As System.Windows
.Forms.KeyPressEventArgs) Handles ComboBox3.KeyPress
10 e.KeyChar() = ""
11 End Sub
12
31
33. 13 Private Sub ListingGroup()
14 Const TYPE_GLOBAL = -2147483646
15 Const TYPE_LOCAL = -2147483644
16 ComboBox1.Items.Clear()
17 Dim obj_OU
18 obj_OU = GetObject("LDAP://ou=" & TextBox5.Text() & "," & GDomain)
19 For Each obj_Member In obj_OU
20 If (LCase(obj_Member.Class) = "group") Then
21 If (RadioButton3.Checked) Then
22 If (obj_Member.Grouptype = TYPE_GLOBAL) Then
23 ComboBox1.Items.Add(obj_Member.sAMAccountName)
24 End If
25 ElseIf (RadioButton4.Checked) Then
26 If (obj_Member.Grouptype = TYPE_LOCAL) Then
27 ComboBox1.Items.Add(obj_Member.sAMAccountName)
28 End If
29 End If
30 End If
31 Next
32 End Sub
33
34 Private Sub ListingGroupGlobal()
35 Const TYPE_GLOBAL = -2147483646
36 ComboBox2.Items.Clear()
37 Dim obj_OU
38 obj_OU = GetObject("LDAP://ou=" & TextBox5.Text() & "," & GDomain)
39 For Each obj_Member In obj_OU
40 If (LCase(obj_Member.Class) = "group") Then
41 If (obj_Member.Grouptype = TYPE_GLOBAL) Then
42 ComboBox2.Items.Add(obj_Member.sAMAccountName)
43 End If
44 End If
45 Next
46 End Sub
47
48 Private Sub ListingUsers()
49 ComboBox2.Items.Clear()
50 Dim obj_Group
51 obj_Group = GetObject("LDAP://cn=Domain User,ou=" & TextBox5.Text() & "," &
GDomain)
52 For Each obj_Member In obj_Group.Members
53 ComboBox2.Items.Add(obj_Member.sAMAccountName)
54 Next
55 End Sub
56
57 Private Sub ListingMember()
58 ComboBox3.Items.Clear()
59 Dim obj_Group
60 obj_Group = GetObject("LDAP://cn=" & ComboBox1.Text() & ",ou=" & TextBox5.
Text() & "," & GDomain)
61 For Each obj_Member In obj_Group.Members
62 ComboBox3.Items.Add(obj_Member.sAMAccountName)
63 Next
64 End Sub
65
66 Sub AddUserGroup()
67 Dim obj_Group, obj_User
68 obj_Group = GetObject("LDAP://cn=" & ComboBox1.Text() & ",ou=" & TextBox5.
Text() & "," & GDomain)
69 obj_User = GetObject("LDAP://cn=" & ComboBox2.Text() & ",ou=" & TextBox4.
Text() & "," & GDomain)
70 If Not obj_Group.IsMember(obj_User.ADsPath) Then
71 obj_Group.Add(obj_User.ADsPath)
72 MsgBox("Añadido al Grupo", 64, "Éxito")
73 Else
74 MsgBox("Existe", 16, "Advertencia")
32
34. 75 End If
76 End Sub
77
78 Sub RemoveUserGroup()
79 Dim obj_Group, obj_User
80 obj_Group = GetObject("LDAP://cn=" & ComboBox1.Text() & ",ou=" & TextBox5.
Text() & "," & GDomain)
81 obj_User = GetObject("LDAP://cn=" & ComboBox2.Text() & ",ou=" & TextBox4.
Text() & "," & GDomain)
82 If obj_Group.IsMember(obj_User.ADsPath) Then
83 obj_Group.Remove(obj_User.ADsPath)
84 MsgBox("Eliminado del Grupo", 64, "Éxito")
85 Else
86 MsgBox("No Existe", 16, "Advertencia")
87 End If
88 End Sub
89
90 Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles RadioButton3.CheckedChanged
91 ListingGroup()
92 ListingUsers()
93 End Sub
94
95 Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles RadioButton4.CheckedChanged
96 ListingGroup()
97 ListingGroupGlobal()
98 End Sub
99
100 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button1.Click
101 If (ComboBox1.Text.Length > 0) And (ComboBox2.Text.Length > 0) Then
102 If RadioButton1.Checked Then
103 If RadioButton3.Checked Or RadioButton4.Checked Then
104 AddUserGroup()
105 Else
106 MsgBox("Selecciona: Local o Global", 16, "Advertencia")
107 End If
108 ElseIf RadioButton2.Checked Then
109 RemoveUserGroup()
110 Else
111 MsgBox("Selecciona: Añadir o Eliminar", 16, "Advertencia")
112 End If
113 ElseIf (ComboBox1.Text.Length > 0) Then
114 MsgBox("Selecciona Usuario/Grupo.", 16, "Advertencia")
115 ElseIf (ComboBox2.Text.Length > 0) Then
116 MsgBox("Selecciona un Grupo.", 16, "Advertencia")
117 Else
118 If RadioButton3.Checked Or RadioButton4.Checked Then
119 MsgBox("Selecciona un Grupo y Usuario/Grupo.", 16, "Advertencia")
120 Else
121 MsgBox("Selecciona el tipo de Grupo: Global o Local.", 16, "
Advertencia")
122 End If
123 End If
124 End Sub
125
126 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button2.Click
127 If (ComboBox1.Text.Length() > 0) Then
128 ListingMember()
129 Else
130 MsgBox("Selecciona un Grupo.", 16, "Advertencia")
131 End If
132 End Sub
33
35. C. Carpeta
Para la creación o eliminación de carpetas se añadió tales métodos en el módulo “Module1”, debido a que
eran métodos importantes y necesarios para la creación o eliminación de usuarios. En cambio, en el formulario
de carpeta tan sólo se dejó el método de mover.
1 Sub MoveFolder()
2 Dim obj_FSO, obj_Folder
3 obj_FSO = CreateObject("Scripting.FileSystemObject")
4 obj_Folder = obj_FSO.MoveFolder(TextBox1.Text, TextBox2.Text)
5 MsgBox("Carpeta Movida.", 64, "Éxito")
6 End Sub
7
8 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button1.Click
9 If RadioButton1.Checked Then
10 If TextBox1.Text.Length = 0 Then
11 MsgBox("Introduce la ruta Origen.", 16, "Advertencia")
12 Else
13 Me.ToolStripStatusLabel1.Text = "Creando Carpeta: " & CStr(TextBox1.
Text)
14 CreateFolder(CStr(TextBox1.Text), vbTrue)
15 Me.ToolStripStatusLabel1.Text = "Carpeta: " & CStr(TextBox1.Text) &
" Creada"
16 End If
17 ElseIf RadioButton2.Checked() Then
18 If TextBox1.Text.Length = 0 Then
19 MsgBox("Introduce la ruta Origen.", 16, "Advertencia")
20 Else
21 DeleteFolder(CStr(TextBox1.Text), vbTrue)
22 End If
23 ElseIf RadioButton3.Checked Then
24 If (TextBox1.Text.Length = 0) Or (TextBox2.Text.Length = 0) Then
25 MsgBox("Introduce la ruta Origen y Destino.", 16, "Advertencia")
26 Else
27 MoveFolder()
28 End If
29 Else
30 MsgBox("Marca una casilla: Crear, Borrar o Mover", 16, "Advertencia")
31 End If
32 End Sub
34
36. D. Security Policy
No se pudo acabar con éxito en su totalidad, debido a que no se encuentra solución al tratamiento de los
días y minutos. Al final se optó sólo por utilizar las que fueron posibles manipular.
1 Sub Configuration()
2 Dim obj_Domain
3 obj_Domain = GetObject("LDAP://" & GDomain)
4 obj_Domain.Put("minPwdLength", CInt(TextBox3.Text()))
5 ’obj_Domain.Put("minPwdAge", CInt(TextBox2.Text()))
6 ’obj_Domain.Put("maxPwdAge", CLng(TextBox1.Text()) * 86400)
7 obj_Domain.Put("pwdHistoryLength", CInt(TextBox4.Text()))
8 ’obj_Domain.Put("lockoutDuration", TextBox5.Text())
9 obj_Domain.Put("lockoutThreshold", CInt(TextBox6.Text()))
10 ’obj_Domain.Put("lockoutObservationWindow", TextBox7.Text())
11 obj_Domain.SetInfo()
12 End Sub
13
14 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button1.Click
15 Configuration()
16 GLenghtPwd = TextBox3.Text
17 End Sub
35
37. E. Compartir
Existe otro formulario que sirve para compartir carpetas. En este formulario se añade la ruta de la carpeta,
el nombre que recibirá el recurso, y una descripción que es opcional.
1 Sub CreateShare()
2 Const FILE_SHARE = 0
3 Const MAXIMUM_CONNECTIONS = 25
4 Dim objWMIService, errReturn, objNewShare
5 objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!"
& GServer & "rootcimv2")
6 objNewShare = objWMIService.Get("Win32_Share")
7 errReturn = objNewShare.Create(CStr(TextBox1.Text), CStr(TextBox2.Text),
FILE_SHARE, MAXIMUM_CONNECTIONS, CStr(TextBox3.Text))
8 MsgBox("Recurso Compartido.", 64, "Éxito")
9 End Sub
10
11 Function ExistsFolder() As Boolean
12 Dim obj_FSO
13 obj_FSO = CreateObject("Scripting.FileSystemObject")
14 If obj_FSO.FolderExists(TextBox1.Text) Then
15 ExistsFolder = True
16 Else
17 ExistsFolder = False
18 End If
19 End Function
20
21 Function ExistsFile() As Boolean
22 Dim obj_FSO
23 obj_FSO = CreateObject("Scripting.FileSystemObject")
24 If obj_FSO.FileExists(TextBox1.Text) Then
25 ExistsFile = True
26 Else
27 ExistsFile = False
28 End If
29 End Function
30
31 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button1.Click
32 If TextBox1.Text.Length = 0 Then
33 MsgBox("Introduzca la ruta de la carpeta o fichero a compartir.", 16, "
Advertencia")
34 ElseIf TextBox2.Text.Length = 0 Then
36
38. 35 MsgBox("Introduzca el nombre que desea para el recurso compartido.", 16,
"Advertencia")
36 Else
37 If ExistsFile() Or ExistsFolder() Then
38 CreateShare()
39 Else
40 MsgBox("No existe", 16, "Advertencia")
41 End If
42 End If
43 End Sub
37
39. F. Permisos NTFS
Para poder otorgar permisos especiales se hizo necesaria la herramienta “Xcacls.vbs”. Para poder utilizarla,
primero se tuvo que instalar, y cuando solicitó una ubicación se seleccionó C:Windows. Luego, hubo que
cambiar el motor de secuencias de comandos predeterminado de Wscript a Cscript. Para conseguirlo, se tuvo
que escribir en la línea de comandos cscript.exe /h:cscript. El resto fue utilizar WScript.shell.
1 Sub Permission(ByVal Path As String, ByVal userOrGroup As String, ByVal permiso
As String)
2 Dim Obj_Shell
3 Obj_Shell = CreateObject("WScript.shell")
4 Obj_Shell.Run("icacls " & Path & " /Grant:r " & userOrGroup & ":" & permiso)
5 End Sub
6
7 Function Simple()
8 If rdbControlT.Checked Then
9 Simple = "F"
10 ElseIf rdbModify.Checked Then
11 Simple = "M"
12 ElseIf rdbReadExejute.Checked Then
13 Simple = "RX"
14 ElseIf rdbRead.Checked Then
15 Simple = "R"
16 ElseIf rdbWrite.Checked Then
17 Simple = "W"
18 ElseIf rdbNone.Checked Then
19 Simple = "N"
20 Else
21 Simple = ""
22 End If
23 End Function
24
25 Sub add(ByRef cadena As String, ByVal cadenaAdd As String, ByRef posicion As
Boolean)
26 If posicion Then
27 cadena = cadena & cadenaAdd
28 posicion = False
29 Else
30 cadena = cadena & "," & cadenaAdd
31 End If
32 End Sub
33
38
40. 34 Function Specific()
35 Dim aux As String
36 Dim first As Boolean
37 first = True
38 aux = "("
39 If chkListing.Checked Then
40 add(aux, "RD", first)
41 End If
42 If chkAddFile.Checked Then
43 add(aux, "WD", first)
44 End If
45 If chkAddSubDirectory.Checked Then
46 add(aux, "AD", first)
47 End If
48 If chkReadAttribute.Checked Then
49 add(aux, "RA", first)
50 End If
51 If chkWriteAttribute.Checked Then
52 add(aux, "WD", first)
53 End If
54 If chkExecute.Checked Then
55 add(aux, "X", first)
56 End If
57 If aux.Length = 1 Then
58 aux = ""
59 Else
60 aux = aux & ")"
61 End If
62 Specific = aux
63 End Function
64
65 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button1.Click
66 Dim permiso, permiso2 As String
67 permiso = Simple()
68 permiso2 = Specific()
69 If txtPath.Text.Length > 0 And txtUserGroup.Text.Length > 0 Then
70 If permiso.Length = 0 And permiso2.Length = 0 Then
71 MsgBox("Selecciona un permiso.", 16, "Advertencia")
72 ElseIf permiso2.Length > 0 Then
73 Permission(CStr(txtPath.Text), CStr(txtUserGroup.Text), permiso2)
74 Else
75 Permission(CStr(txtPath.Text), CStr(txtUserGroup.Text), permiso)
76 End If
77 Else
78 MsgBox("Rellene ruta y usuario/Grupo.", 16, "Advertencia")
79 End If
80 End Sub
39
41. G. Permiso Share
Este formulario es un complementario del anexo E. Ya que una vez compartida la carpeta, se le añade a
un grupo o a un usurio una serie de permisos a esa carpeta (recurso). En este formulario al igual que se hizo
en los permisos NTFS, nos tuvimos que valer de un recurso externo. En este caso, fue RMTSHAR el cual es un
archivo que deberá estár presente en la localización del script para que pueda funcionar.
1 Sub AddPermission(ByVal ShareName As String, ByVal userOrGroup As String, ByVal
permiso As String)
2 Dim Obj_Shell
3 Obj_Shell = CreateObject("WScript.shell")
4 Obj_Shell.Run("RMTSHARE.exe " & GServer & "" & ShareName & " /GRANT " &
userOrGroup & ":" & permiso, 3)
5 MsgBox("Permiso Concedido.", 64, "Éxito")
6 End Sub
7
8 Sub mierda()
9 Dim Obj_Shell
10 Obj_Shell = CreateObject("WScript.shell")
11 Obj_Shell.Run("cmd /k cd c: | dir,3, true")
12 Obj_Shell = Nothing
13 MsgBox("Permiso Concedido.", 64, "Éxito")
14 End Sub
15
16 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs)
17 mierda()
18 End Sub
19
20 Sub DeletePermission(ByVal ShareName As String, ByVal userOrGroup As String)
21 Dim Obj_Shell
22 Obj_Shell = CreateObject("WScript.shell")
23 Obj_Shell.Run("rmtshare " & GServer & "" & ShareName & " /REMOVE " &
userOrGroup)
24 MsgBox("Permiso Restring.", 64, "Éxito")
25 End Sub
26
27 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.
EventArgs) Handles Button1.Click
28 If TextBox1.Text.Length = 0 Then
29 MsgBox("Rellene nombre del Recurso.", 16, "Advertencia")
30 ElseIf TextBox2.Text.Length = 0 Then
40
42. 31 MsgBox("Rellene nombre del Grupo/Usuario.", 16, "Advertencia")
32 Else
33 If RadioButton1.Checked Then
34 If RadioButton3.Checked Then
35 AddPermission(CStr(TextBox1.Text), CStr(TextBox2.Text), "R")
36 ElseIf RadioButton4.Checked Then
37 AddPermission(CStr(TextBox1.Text), CStr(TextBox2.Text), "C")
38 ElseIf RadioButton5.Checked Then
39 AddPermission(CStr(TextBox1.Text), CStr(TextBox2.Text), "F")
40 Else
41 MsgBox("Seleccione un tipo de permiso.", 16, "Advertencia")
42 End If
43 ElseIf RadioButton2.Checked Then
44 DeletePermission(CStr(TextBox1.Text), CStr(TextBox2.Text))
45 Else
46 MsgBox("Seleccione Añadir/Eliminar.", 16, "Advertencia")
47 End If
48 End If
49 End Sub
41