Buscar este blog

Cargando...

viernes, 14 de mayo de 2010

Bibliotecas en Windows 7

Wow, hace ya bastante tiempo que no posteaba nada aquí... Espero que me perdonéis, pero he estado bastante ocupado reasentándome y cambiando, cosa que ahora no viene a cuento pero que a mí me justifica un poco. En todo caso, y pasando de rollos, el post de hoy trata sobre una nueva funcionalidad de Windows 7 que para mi había pasado completamente desapercibida hasta hace bien poco. Se trata de las bibliotecas de archivos.

Si os habéis fijado, cuando entráis en el explorador de archivos ahora os aparece en la columna de la izquierda una nueva serie de opciones bajo el epígrafe de Bibliotecas. Por defecto hay 4, documentos, música, imágenes y videos.




¿Y qué diferencia hay con las clásicas carpetas de mis documentos, mi música, etc.? Bien, para que nos hagamos una idea, las bibliotecas son algo así contenedores de accesos directos. Una biblioteca puede enlazar con varias carpetas físicas en distintas ubicaciones de tu equipo de modo que cuando entramos en la biblioteca lo que vemos es el contenido de varias carpetas a la vez en lugar del contenido de una sola. Curioso, ¿no? Y después de pensarlo un poco os preguntareis... ¿y no es más fácil mover todos mis documentos a la carpeta mis documentos o toda mi música a la carpeta mi música? Bueno, lo cierto es que se puede, pero no siempre es posible. Os voy a mostrar el ejemplo más claro. Tenemos un equipo con un par de discos duros. En el primer disco, tenemos el sistema operativo y los programas. En el segundo disco de 1TB, tenemos instalado el emule bajando a saco. Y encima para complicarlo más, usamos firefox o chrome que nos descargan de forma automática los archivos. Ahora bien, ¿Qué pasa cuando ese equipo tiene 6 meses o un año de uso? Aquí es donde entran en juego las bibliotecas. Os muestro paso por paso lo que hay que hacer para organizar todo este berenjenal:

Paso 1: Entramos en "Bibliotecas", pulsamos con el botón derecho y elegimos "nuevo" y "Biblioteca"



Paso 2: Elegimos un nombre para nuestra nueva biblioteca, por ejemplo, "descargas"



Paso 3: Pulsamos con el botón derecho nuestra nueva biblioteca y elegimos propiedades.



Paso 4: Enlazamos a la biblioteca las carpetas que queramos, y puesto que es una biblioteca que va a contener de todo, la dejamos como biblioteca de tipo elementos generales (esto afectara después a las opciones de organización disponibles y las columnas de atributos que nos aparecerán en la biblioteca). Al aplicar los cambios, se empezara a indexar las carpetas elegidas de forma inmediata, lo que hace que las búsquedas sean muy rápidas.



Si entráis en la biblioteca, podéis observar como aparecen los archivos contenidos en las carpetas que acabamos de añadir, permitiéndonos localizar de forma rápida lo que buscamos sin tener que estar dando vueltas por nuestro equipo o recurrir a la búsqueda global, mucho más lenta.



Por defecto, la biblioteca organiza los elementos por carpeta, aunque se puede cambiar a una vista mas clásica que agrupe todos los archivos juntos como en las carpetas normales (pinchando en la esquina superior derecha en la opción "Organizar por:")



Si os fijáis, dependiendo del tipo de biblioteca que hayamos elegido al crearla (imágenes, documentos, música, videos y genérico) os aparecerán distintas columnas de atributos y tareas en las barras correspondientes:



Como conclusión, el uso de las bibliotecas es algo que normalmente se suele pasar por alto en el nuevo Windows 7 y sin embargo, creo que es uno de los añadidos más útiles para los "Heavy Users" de internet que intentan mantener un cierto orden y control sobre lo que descargan. De hecho, personalmente creo que si usas varios navegadores es una bendición.

Saludos a todos, y hasta la próxima!!

martes, 12 de enero de 2010

Error id 12294, La base de datos SAM no pudo bloquear la cuenta de administrador...

Últimamente hemos estado teniendo un problema de esos que a todo administrador de sistemas le trae de cabeza... Al menos hasta que lo ha solucionado una vez. Para aquellos de vosotros que habéis llegado hasta aqui después de toparos con el en vuestro trabajo diario y no sabeis muy bien que hacer, voy a indicaros paso por paso como solucionarlo.


El error consiste en el intento reptitivo de bloqueo de la cuenta de Administrador del dominio por parte de una maquina del dominio. Estos errores se generan en el registro de eventos de sistema con el id 12294 y con origen Directory-Services-SAM si es Windows 2008 o SAM si es Windows 2003 o anterior.




El error en si no aunque parece grave, no debe preocuparnos tanto, ya que la cuenta de administrador de dominio nunca se bloquea. Lo que si nos molestara mas, es el hecho de que estos errores saturan nuestro log de eventos de sistema, así como el registro de seguridad del DC.




El problema que nos encontramos cuando intentamos solucionar este error, es que con la configuración por defecto del controlador de dominio, no podemos saber cuál es la maquina que está realizando las peticiones erróneas (bien porque se haya cargado algún servicio con la cuenta de administrador de dominio con una contraseña errónea o bien porque haya en la red un equipo infectado con virus que esté realizando ataques de diccionario contra nuestro DC). Para poder averiguarlo, necesitamos colocar el servicio NETLOGON en modo debug para registrar los intentos de logon erróneos por contraseña incorrecta.

Para hacer lo anterior, tenemos dos opciones. La primera, es modificar en el registro de windows el parámetro:


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters\DBFlag

Y asignarle el valor hexadecimal: 2080FFFF Esto activara el modo debug del servicio NETLOGON. Para que entre en funcionamiento, deberemos resetear el servicio, para lo cual introduciremos los comandos:

net stop netlogon

Seguido de:

net start netlogon

En una ventana de comandos. Cuando queramos detener el modo debug, realizaremos los mismos pasos, pero asignando el valor 0x0

La segunda opción, bastante más sencilla, se puede utilizar si tienes Windows 2008 o superior o bien si tienes Windows 2003 o inferior con las support tools instaladas. Para activar el modo debug, usaremos el comando:


nltest /dbflag:0x2080ffff

Y para desactivarlo, usaremos:

nltest /dbflag:0x0

No haciendo falta en este caso, reiniciar el servicio.


Una vez que tenemos el modo debug activado, lo hemos dejado un rato funcionando y después lo hemos parado, nos dirigiremos a la carpeta debug dentro de la carpeta de instalación de Windows, y realizaremos una copia del fichero "Netlogon.log" Para trabajar con más comodidad. Lo abrimos, y buscamos la siguiente línea:

[MISC] DbFlag is set to 2080ffff

Esta línea indica que se ha habilitado el modo debug, y a partir de ella, comienza la traza de uso del servicio NETLOGON. Lo siguiente que tenemos que hacer es buscar líneas parecidas a estas:

[LOGON] USERSAD: SamLogon: Transitive Network logon of USERSAD\Administrador from CGARCIACDKXP (via MADRID-DC02) Entered

[LOGON] USERSAD: SamLogon: Transitive Network logon of USERSAD\Administrador from CGARCIACDKXP (via MADRID-DC02) Returns 0xC000006A

La primera línea indica que se ha realizado una petición de logon, el usuario que la ha realizado, la maquina desde la que lo ha hecho y el controlador de dominio que ha atendido la petición. La segunda línea, nos indica los mismos datos, pero además nos muestra el código que ha devuelto dicha petición. Este código es el que nos indica que ha sucedido con esa petición. Aquí os dejo la lista completa de los códigos que se pueden devolver (podéis ver el artículo de Microsoft aquí):

0xC0000234 User logon with Account Locked

0xC000006A User logon with Misspelled or bad Password

0xC0000072 User logon to account disabled by Administrator

0xC0000193 User logon with Expired Account

0xC0000070 User logon from unauthorized workstation

0xC000006F User logon Outside authorized hours

0xC0000224 User logon with "Change Password at Next Logon" flagged

0xC0000071 User logon with Expired Password

0xC0000064 User logon with Misspelled or Bad User Account

Para solucionar nuestro problema, buscaremos líneas con los códigos terminados en 234 o 6A, que son los que indican bloqueo de cuenta. Una vez que hayamos localizado la maquina que está realizando las peticiones, accederemos a ellas y comprobaremos que los servicios estén correctamente configurados, que no tenga sesiones de terminal server ni carpetas abiertas o mapeadas contra nuestro servidor usando una cuenta de administrador errónea, y por último, que no tenga virus.

Saludos.

martes, 1 de diciembre de 2009

Archivado de carpetas obsoletas.

Pongamos que eres un administrador de sistemas, y una de tus responsabilidades es administrar el servidor de ficheros de tu empresa. Pongamos también que en ese servidor de ficheros, tienes una carpeta que se llama, por ejemplo, proyectos, donde se han ido almacenando en carpetas individuales los proyectos que tu empresa ha ido realizando desde que a alguien se le ocurrió hacerlo. Supongamos que nadie, nunca, se ha molestado en archivar las carpetas de los proyectos que iban finalizando. Y supongamos por último, que el volumen de información ha ido creciendo hasta alcanzar el máximo de tamaño que tu pequeña SAN permite (2TB). En ese preciso instante te despiertas empapado en sudor pensando que todo ha sido un mal sueño. Pero a veces, solo a veces, algunos sueños pueden hacerse realidad.

El tema del archivado de información obsoleta es algo que me preocupa hace tiempo, aunque hasta ahora no he tenido tiempo de poder analizar en profundidad el problema. La principal barrera que siempre nos ha impedido realizar un archivado tradicional en cinta, es que el sistema que se utiliza para archivar en cinta, no archiva estructuras completas de carpetas, sino que analiza cada archivo y carpeta de forma individual y lo compara con el patrón de archivado que hayas definido (por fecha de modificación, de acceso, etc.). Desgraciadamente para mi, nosotros no podemos archivar de esa forma, ya que necesitamos que cuando se archiva un proyecto se archive toda la información relativa a ese proyecto de forma consistente. La gente de Microsoft ha hecho un gran trabajo al incluir de forma nativa en Windows 2008 R2 herramientas de archivado que facilitan mucho la vida del administrador, pero desgraciadamente (¿porque en informática siempre hay un desgraciadamente detrás de cada esquina?), estas herramientas no son demasiado aplicables a información obsoleta, además, habría que migrar el servidor de ficheros a Windows 2008 R2, con todo lo que ello implica.

En fin, la pregunta es: ¿Hay alguna solución para archivar carpetas completas basándonos en la última fecha de acceso? Mi aproximación al problema, como hago normalmente cuando algo se complica, es programar algo específico. En este caso, el script que he preparado comprueba todos los archivos que hay dentro de las carpetas de una ruta dada (nuestra inquietante carpeta de proyectos) e imprime el nombre de la carpeta, la ruta UNC a la carpeta y la fecha del acceso más reciente a cualquiera de los archivos contenidos en ella. El script en sí, es una modificación de un script posteado en el blog de Hey, scripting Guy! El código del script es el siguiente:

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "C:\Scripts"

Set objFolder = objFSO.GetFolder(objStartFolder)
Wscript.Echo objFolder.Path
Set colFiles = objFolder.Files
For Each objFile in colFiles
Wscript.Echo objFile.Name
Next
Wscript.Echo

ShowSubfolders objFSO.GetFolder(objStartFolder)

Sub ShowSubFolders(Folder)
For Each Subfolder in Folder.SubFolders
Wscript.Echo Subfolder.Path
Set objFolder = objFSO.GetFolder(Subfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
Wscript.Echo objFile.Name
Next
Wscript.Echo
ShowSubFolders Subfolder
Next
End Sub


Como podéis ver, el script realiza las siguientes acciones:
•Crea un objeto FSO para trabajar con ficheros locales
•Define en una variable la carpeta que se va a examinar
•Enlaza el objeto FSO creado a la carpeta que se ha definido en la variable
•Muestra la ruta de acceso de la carpeta (como se explica en el enlace, esta ruta puede ser local, o una ruta UNC usando carpetas compartidas).
•Se introducen los ficheros que hay dentro de la carpeta en una colección para poder acceder a las propiedades de cada fichero individualmente.
•Se muestra el nombre de cada fichero
•Se llama a una función (Sub) la cual hace lo mismo que hemos comentado antes por cada subcarpeta de forma anidada. Es decir, en cada subcarpeta, la función se llama a si misma hasta que se llegue a una subcarpeta en la que no haya más carpetas.

Este script, está muy bien, pero aun así, no nos sirve para lo que nosotros queremos exactamente, por lo que le añadimos algunas líneas de código más:

On Error Resume next
Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = “\\Ruta_UNC\carpeta”

fecha2 = CDate("30/11/1990 22:20:59")

ShowSubfolders objFSO.GetFolder(objStartFolder), 1, fecha2

Sub ShowSubFolders(Folder, level, fecha2)
On Error Resume next
For Each Subfolder in Folder.SubFolders
If level = 1 Then
Wscript.StdOut.write Subfolder.name & ";" & Subfolder.Path
End if
Set objFolder = objFSO.GetFolder(Subfolder.Path)
Set colFiles = objFolder.Files
For Each objFile in colFiles
If fecha <>
fecha = objFile.DateLastAccessed
End if
Next
If Err.Number <> 0 Then
fecha = Now()
Err.clear
End If
ShowSubFolders Subfolder, level + 1, fecha2
If level = 1 Then
WScript.StdOut.writeline ";" & fecha
fecha = fecha2
End If
Next
End Sub

Como podéis ver, he añadido un par de opciones:
•En primer lugar, elimino el recorrido inicial que se ha ce por la carpeta raíz, ya que ese dato no me interesa.
•Inicializo una variable de fecha, que se mantendrá constante. Se inicializa a una fecha suficientemente antigua, y para darle formato de tipo date a la variable, usamos la función CDate, que convierte la cadena de fecha al tipo de variable fecha. De este modo podemos inicializar las variables a la fecha que queramos.
•Llamamos a la función de mostrar subcarpetas y a parte del objeto folder que contiene la carpeta raíz con la que trabajamos, le pasamos 2 variables mas. La primera (pasando un uno) nos dirá el nivel de la subcarpeta con respecto a la ruta UNc que hemos definido inicialmente, lo que nos permitirá después filtrar los resultados mostrados para escribir la fecha solo en las carpetas del primer nivel y reinicializar la variable fecha a fecha2. La segunda variable es la variable Fecha2, que es constante y que hemos inicializado anteriormente a una fecha suficientemente antigua.
•Al principio de la función, comprobamos que la carpeta que estamos trabajando es de nivel 1 e imprimimos su nombre y su ruta, separados por ;
•Comprobamos fichero por fichero de cada subcarpeta que la variable fecha es mas reciente que la fecha de ultimo acceso del fichero. Si no lo es, asignamos a la variable fecha la fecha de último acceso de ese fichero. De ese modo, la variable fecha, va almacenando la fecha de acceso más reciente de cualquiera de los ficheros de la subcarpeta.
•Cuando volcamos la lista de ficheros, añadimos un if con control de errores por si hay un error (no tener acceso a la carpeta es el más común), y reseteamos la fecha de acceso al día de hoy.
•Por último, después de llamar otra vez a la función de mostrar subcarpetas, comprobamos que la carpeta con la que trabajamos es de nivel 1 y si lo es, escribimos la fecha y la reinicializamos.

Con este script obtendréis una salida de texto separado por ; que podéis exportar fácilmente a Excel y filtrar de la forma que mas os convenga. Para ello, recordad que tenéis que usar la redirección de salida desde una línea de comandos, algo así:

cscript c:\miscript > c:\salida_script.txt

Saludos a todos.

viernes, 20 de noviembre de 2009

Que cachondos estos de Microsoft



No, si ya me lo había imaginado solito...

A ver quien me gana...

En fin... ¬__¬

martes, 10 de noviembre de 2009

error con DCdiag en windows 2008 R2 (NCSecDesc error)

Con la salida de Windows Vista, Microsoft cambió el viejo cliente de escritorio remoto y le dio un lavado de cara. El nuevo cliente, usa las credenciales del usuario logado para intentar logarse de forma predeterminada. Seguramente algunos de nosotros que estábamos acostumbrados a logarnos en nuestros servidores remotos con el usuario administrador hemos decidido empezar a logarnos con nuestro usuario de dominio para ajustarnos a las recomendaciones de seguridad que Microsoft lleva mucho tiempo haciendo a este respecto.

Pues bien, nuevas formas de trabajar conllevan nuevos errores que algunos despistados como yo no tienen reparos en hacer explotar de todas las formas posibles. El otro día, sin ir más lejos, estaba conectado en remoto a un servidor para ejecutar un dcdiag y comprobar que la instalación del nuevo DC había ido bien, cuando, cual sería mi sorpresa, empezaron a fallar varios de los test debido a errores de seguridad, errores como este:

Iniciando prueba: NCSecDesc

Error: NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS no tiene

Replicating Directory Changes In Filtered Set
derechos de acceso para el contexto de nomenclatura:

DC=DomainDnsZones,DC=xxxxxxx,DC=xxxxxxx,DC=xxx
Error: NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS no tiene

Replicating Directory Changes In Filtered Set
derechos de acceso para el contexto de nomenclatura:

DC=ForestDnsZones,DC=xxxxxx,DC=xxx


Estuve un buen rato buscando en internet qué demonios había pasado para que mis DCs con Windows 2003 R2 (donde esto no ocurría y mis nuevos equipos con Windows 2008 R2 estuvieran tan enfadados.

Al final, resultaba que no eran mis equipos con Windows 2008 R2 los que tenían problemas de seguridad, si no mi usuario. Para solucionarlo basta con lanzar la línea de comandos en modo administrador (ya sabéis, cuando busquéis cmd, lo pulsáis con el botón derecho y elegís "Ejecutar como administrador"). Valiente tontería...

lunes, 2 de noviembre de 2009

DNS y reenviadores condicionales...

Resulta que estamos migrando a Windows 2008 R2 para poder poner GPOs personalizadas por OU, y el otro día nos surgió un problemilla relacionado con los reenviadores condicionales del servicio DNS en 2008 (anteriormente, los teníamos en 2003 R2). Se nos paso configurar el reenvío de las peticiones de nuestro subdominio principal a nuestro dominio raíz, lo cual, teníamos hecho mediante el uso de reenviadores condicionales. Entramos en el nuevo servidor DNS para configurarlos y @_@ ¡¡no estaban!!
Resulta que los amigos de Microsoft han cambiado las pestañas de opciones del servidor DNS y las han dejado así:



Como podéis ver, el reenvío de peticiones basado en sufijo, ha desaparecido. Aparentemente solo se permite el reenvío global de peticiones, ¿no? Bueno, pues no, solo lo han cambiado de sitio.
Con Windows 2003, cuando querías configurar el reenvío de peticiones DNS basado en dominio, tenias que hacerlo servidor por servidor, ya que la pestaña correspondiente, se encontraba dentro de las propiedades del servidor, y no de la zona, y estas, no se replicaban al resto de los DNS del dominio. En Windows 2008, Microsoft ha cambiado esto y ha creado una nueva carpeta organizativa dentro de los servidores DNS que se llama Reenviadores condicionales:



Aquí os pongo otro pantallazo de ventana que se usa para dar de alta un reenviador condicional: