Tuesday, December 9, 2008
Active Directory con Windows 2008 (y anteriores también)
Antes de empezar, un breve resumen sobre los roles en el AD: en total hay 5 roles (Flexible Single Master Operation role, o sea: FSMO role para empezar a googlear). Tres son a nivel de dominio (RiD master, PDC, Infrastructure master) y dos se dan a nivel de bosque: Naming master y Schema master.
Así que por cada dominio tendremos un pdc, un infrastructure master, un Rid master, pero puede que no tengamos ningún schema o naming master en el dominio, ya que sólo hay un Domain Controler (DC) que tenga ese rol en todo el bosque de dominios. Esto es así porque todo el bosque debe tener el mismo schema del AD por una parte, y por otra porque sólo un equipo debe gestionar los nombres asignados a los dominios para evitar colisiones.
Para ver más sobre los roles buscar FSMO roles wikipedia.
Para ver desde línea de comandos quien tiene asignado los roles:
C:> netdom query fsmo
Para transferir roles desde línea de comandos de un servidor activo a otro activo:
C:> ntdsutil roles
fsmo maintenance: ?
y aquí elegimos un comando con transfer. Si hemos perdido el servidor que ostentaba uno de esos roles, podemos forzar que el servidor en que estamos lo asuma:
C:> ntdsutil roles
fsmo maintenance: seize ...
las opciones que empiezan por seize fuerzan al servidor a asumir el rol, y sólo deben usarse cuando el servidor que ostentaba dichos roles es irrecuperable. En este caso debe además realizarse un metadata cleanup completo tal y como indican aquí: http://support.microsoft.com/kb/216498. Ojo a la distinción entre w2003sp1 y posteriores, y w2000 y w2003.
Buenas noches.
Thursday, November 27, 2008
Cosas de la virtualización: upgrade de windows server 2000 a 2003
Los primeros pasos fueron bien, al meter el cd salta el autorun y te muestra una ventana en que nos da la opción de Upgrade (recommended), la elegimos, nos pregunta si queremos que se baje los cambios al instalador de 2003 de MS, tanto da que digamos sí como no (para el caso que nos ocupa), y empieza a modificar algunos ficheros, copia otros y se reinicia. Y ENTONCES ... al reiniciar, pues no llega a arrancar y no hay forma ni de volver atrás, ni de seguir adelante sin perder la instalación. Sin embargo, sin las tools del cliente; o sin el update del windows. Funcionó sin ningún problema.
Las pruebas sobre máquinas físicas no fallaron jamás.
En fin, parece que la virtualización no es un paradigma universal.
En próximas entregas intentaré depurar los errores.
Monday, November 24, 2008
Clonar una Red Hat Enterprise Linux (RHEL 5.0)
La petición concreta fue la de obtener una copia exacta de la RHEL en explotación sobre un hardware muy parecido.
Se valoraron dos opciones, ambas empiezan por arrancar el clon con una LiveCd:
- copiar todos los ficheros de la máquina por scp, gracias al uso del phreakietar que algún día postearé.
- instalar un cliente de nuestro programa de backup sobre la LiveCd y realizar una recuperación del otro servidor sobre el clon, y luego cambiar la ip y el nombre de máquina, así como otras configuraciones menores.
Optamos por la segunda pero entonces una actualización del firmware de la placa base y de la scsi hizo que ninguna LiveCd arrancase sobre la máquina. Así que sobre la partición correspondiente al /home original instalamos un ubuntu 8.10 server como minimal, sobre el que se instaló el cliente del programa de backup (legato networker).
Una vez recuperado, configuré el grub propio de la ubuntu para arrancar la RHEL, pero... daba un error ... bueno dos:
* se quejaba de no encontrar la etiqueta de la partición de swap
* daba un error muy breve de algo del /dev/console y se reiniciaba
Para solucionar el primer problema:
# desmontamos la partición de swap
$>swapoff
# ejecutamos mkswap
$>mkswap -L <etiqueta> /dev/sda5
Para solucionar el segundo problema:
En las distribuciones basadas en debian, los devices (/etc/dev) se crean cada vez que el equipo arranca. Sin embargo, las RHEL y los solaris no. En RHEL deben crearse:
$>/sbin/start_udev
y tira millas!! con start_udev recreamos los devices del /dev
Y con esto el equipo vuelve a arrancar.
Antes de despedirme ... la máquina en cuestión tiene 16 procesadores, 24 GB de ram, un mirror SCSI donde está el sistema, y los datos en dos luns de la SAN de más de un tera cada uno ... es que se me pone dura sólo de pensarlo.
Buenas noches.
Tuesday, November 18, 2008
Fijar la zona horaria (time zone) en LINUX
Basta de rollo:
Para saber la Time Zone de un equipo:
ls -l /etc/localtime
lrwxrwxrwx 1 root root 33 2006-11-27 11:43 /etc/localtime - > /usr/share/zoneinfo/Europe/London
Para cambiarla a Madrid:
ln -sf /usr/share/zoneinfo/Europe/Madrid /etc/localtime
Wednesday, November 12, 2008
fijar puertos RPC en windows 2003
Hay dos procedimientos, uno más pedestre y que exige reboot; otro que utiliza una herramienta del Ressource kit de microsoft y que no exige reboot: rpccfg.exe
Para el rpccfg:
- descargar e instalar el Resource Kit de MS Windows 2000 o 2003, y es una de las herramientas que se instalan. También se puede copiar el ejecutable en el equipo que nos interese.
- ejecutarlo con los parámatros: c:>rpccfg /pe 50000
- ejecutarlo con los parámatros: c:>rpccfg /d 0
Con /d le indicamos si debe atender a la intranet o a internet. En mi caso como se trata de equipos de otros rangos, pongo 0. Si no, se pone un 1.
Editando el registro:
- Inicio -> Ejecutar -> regedt32
- Ir a HKLM/Software/Microsoft/Rpc y crear la clave InternetDentro de HKLM/Software/Microsoft/Rpc/Internet,
- crear las siguientes claves:
- Ports de tipo REG_MULTI_SZ: en sus valores pondremos los puertos o rangos de puertos por los que queramos atender los rpc.
- PortsInternetAvailable de tipo REG_SZ , si le damos el valor Y los puertos son accesibles desde internet, en caso contrario N
- UseInternetPorts de tipo REG_SZ , si le damos el valor Y los procesos con valores por defecto usarán los puertos de internet, con N a los procesos con los valores por defecto se les asignarán puertos del pool de la intranet.
- Reiniciar el equipo
De esta forma podemos tener los DC en una DMZ, protegidos tras un firewall.
Buenas noches.
Wednesday, November 5, 2008
Apache: RewriteRule a una url con caracteres especiales como pe.e %
Contexto:
Se trata de redirigir el tráfico que entra a una url a una página index.php que recibe como parámetros otra página php con unos parámetros propios. Esta técnica se usa por ejemplo cuando queremos indicarle a la página inicial qué otras páginas debe cargar en cada uno de los frames definidos, en función p.e. del idioma.
index.php?url1=./body/index.php%3Flang%3Des&n=2&m=no
donde %3F es igual a '?'
y %3D es igual a '='
pero no podemos escribirlos tal cual ya que si no php los interpretaría y se volvería un poco loco.
index.php recibe 3 argumentos:
- url1=./body/index.php%3Flang%3Des
- n=2
- m=no
RewriteRule /$ http://server2.dom.com/index.php?url1=./body/index.php\%3Flang\%3Des&n=2&m=no [L,R,NE]
Lo que está en negrita es el meollo del asunto.
Falsas soluciones:
RewriteRule /$ http://server2.dom.com/index.php?url1=./body/index.php\%3Flang\%3Des&n=2&m=no [L,R]
redirige a :
http://server2.dom.com/index.php?url1=./body/index.php%253Flang%253Des&n=2&m=no
RewriteRule /$ http://server2.dom.com/index.php?url1=./body/index.php%3Flang%3Des&n=2&m=no [L,R]
redirige a:
http://server2.dom.com/index.php?url1=./body/index.phpFlangDes&n=2&m=no
Bueno, no digo que sea algo que uno deba saber, pero sí algo que recordar vagamente para saber orientarnos.
Buenas noches.
Friday, October 31, 2008
Configuración Kernels paquetizados por Ubuntu
En los kernels paquetizados de Ubuntu no lo he encontrado allí, pero cotilleando encontré que para cada kernel instalado, hay en el /boot un ficherito config-
abi-2.6.22-15-generic
abi-2.6.24-21-generic
config-2.6.22-15-generic
config-2.6.24-21-generic
grub
initrd.img-2.6.22-15-generic
initrd.img-2.6.22-15-generic.bak
initrd.img-2.6.24-21-generic
initrd.img-2.6.24-21-generic.bak
memtest86+.bin
System.map-2.6.22-15-generic
System.map-2.6.24-21-generic
vmlinuz-2.6.22-15-generic
vmlinuz-2.6.24-21-generic
toto@pitu:~/Documents/nagios$
Su contenido tiene un aspecto parecido a este:
CONFIG_HID=m
# CONFIG_HID_DEBUG is not set
# CONFIG_HID_FF is not set
CONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not set
CONFIG_HIPPI=y
...
Aquí puede verse como para mi kernel de la versión desktop puede reconocer hasta 4Gb de RAM. En equipos con UBUNTU SERVER, viene activada por defecto la opción de hasta 64Gb.
Es curioso, porque recuerdo haber leído que esta opción tiene (o tenía) una incidencia muy negativa sobre el rendimiento a no ser que realmente haya mucha RAM en la máquina.
Monday, October 27, 2008
Nagios: servicios para hostgroups
Para cada equipo que añadamos p.e. al grupo Windows, se monitorizarán automáticamente determinados servicios.
El único problema es hacer que los mails de las alarmas lleguen a los admins de cada máquina:
define service{
hostgroup_name hostgroup_Windows
service_description basic_services
check_command check_nrpe_parm!check_more_procs!"syslog*,twagent,nsrexec*"
}
Mi duda es si las notificaciones llegarán al contact_group por defecto de cada equipo o si simplemente dará un error.
Cuando lo pruebe lo posteo ;)
Thursday, October 23, 2008
Nagios: caducar los acknoledge con REMOVE_SVC_ACKNOWLEDGEMENT
REMOVE_SVC_ACKNOWLEDGEMENT
Se trata de un comando externo, y según comentan los señores nagios en este link: http://www.nagios.org/developerinfo/externalcommands/commandinfo.php?command_id=117
Una muestra del código puede ser:
commandfile='/usr/local/nagios/var/rw/nagios.cmd'
/bin/printf "[%lu] REMOVE_SVC_ACKNOWLEDGEMENT;host1;service1\n" $now > $commandfile
Si no recuerdo mal, tengo algún script en python para parsear el services.cfg y extraer los pares host-service_name necesarios para caducar todos los acknoledge.
A ver si todavía sigo aquí para cuando tenga mi flamante código python y lo puedo postear.
Buenas noches mundo.
El registro de Windows: internacionalización
La estrella invitada es:
HKEY_CURRENT_USER\Control Panel\International
donde hay valores: REG_SZ
a continuación posteo todos los valores:
iCountry Country code is the international telephone code, except for Canada, which is 2. The default is 1.
iCurrDigits Number digits displayed after the decimal separator. The default is 2.
iCurrency Determines how currency is displayed:
Value | Meaning |
0 | $2 |
1 | 2$ |
2 | $ 2 |
3 | 2 $ |
iDate Determines how dates are displayed:
Value | Meaning |
0 | mm/dd/yy |
1 | dd/mm/yy |
2 | yy/mm/dd |
iDigits The number of digits displayed after the decimal separator in numbers. The default is 2.
iLZero Leading zeros are not displayed if 0 (default). A Leading zero is displayed if set to 1.
iMeasure Metric is 0, U.S. is 1
iNegCurr Determines the format for displaying negative numbers (default is 1):
Value | Meaning |
0 | ($100.00) |
1 | -$100.00 |
2 | $-100.00 |
3 | $100.00- |
4 | (100.00$) |
5 | -100.00$ |
6 | 100.00-$ |
7 | 100.00$- |
8 | -100.00$ |
9 | -$ 100.00 |
10 | 100.00 $- |
11 | $ 100.00- |
12 | $ -100.00 |
13 | 100.00- $ |
14 | ($100.00) |
15 | (100.00 $) |
iTime Determines if the clock is 12 hours (0) or 24-hour (1).
iTLZero The default of 0 means hours may have single digits, a 1 pads to double digits.
Locale locale ID for spoken language. The default is U.S. English which is 00000409.
s1159 AM indicator for a 12 hour clock.
s2359 PM indicator for a 12 hour clock.
sCountry Country name. The default for U.S. English is United States.
sCurrency Currency symbol. The default for U.S. English is $.
sDate Date separator. The default for U.S. English is /.
sDecimal Decimal separator symbol. The default for U.S. English is the . (period).
sLanguage Language abbreviation: (U.S. English is ENU)
Value | Meaning |
CSY | Czech |
DAN | Danish |
DEA | German (Austrian) |
DES | German (Swiss) |
DEU | German |
ELL | Greek |
ENA | English (Australia) |
ENC | English (Canada) |
ENG | English (U.K.) |
ENI | English (Irish) |
ENU | English (U.S.) |
ENZ | English (New Zealand) |
ESM | Spanish (Mexican) |
ESN | Modern Spanish |
ESP | Castilian Spanish |
ETI | Estonian |
FIN | Finnish |
FRA | French |
FRB | French (Belgian) |
FRC | French (Canadian) |
FRS | French (Swiss) |
HUN | Hungarian |
ISL | Icelandic |
ITA | Italian |
ITS | Italian (Swiss) |
NLB | Dutch (Belgian) |
NLD | Dutch |
NON | Norwegian (Nynorsk) |
NOR | Norwegian (Bokmal) |
PLK | Polish |
PTB | Portuguese (Brazilian) |
PTG | Portuguese |
RUS | Russian |
SKY | Slovak |
SVC | Swedish |
SVE | Swedish |
TRK | Turkish |
sList List separator character. The default for U.S. English is , (comma).
sLongDate Long Date format:
Value | Meaning |
dddd, MMMM dd, yyyy | Wednesday, November 19, 1997 |
MMMM dd, yyyy | November 19, 1997 |
dddd, dd MMMM, yyyy | Wednesday, 19 November , 1997 |
dd MMMM, yyyy | 19 November , 1997 |
sShortDate Short date:
Value | Meaning |
MM/dd/yy | 03/08/99 |
M/d/yy | 3/8/99 |
M/d/yyyy | 3/8/1999 |
MM/dd/yyyyy | 03/08/1999 |
yy/MM/dd | 99/03/08 |
dd-MM-yy | 08-Mar-99 |
sThousand Thousands separator. The default for U.S. English is , (comma).
sTime Time separator. The default for U.S. English is : (colon).
sTimeFormat The default is HH:mm:ss
Tuesday, October 21, 2008
dos2unix | sed | awk > salida.txt
Para los impacientes, seré breve:
Ir al visor de sucesos (event viewer), clic dcho en security, guardar como, elegir texto tabulado (tab). En nuestro caso, el fichero se llama jl2.txt. Copiarlo a tu máquina con tu flamante linux y a continuación ejecutar:
sed 's/\t/;/g' jl2.txt | awk '$1 ~ /^"$/{printf "\n\n"} $1 !~ /^"$/{printf "%s",$0}' > log_G_repo.txt
y ya tienes todo el registro con una línea por entrada, y podeis empezar con los grep, egrep, ... que os vengan en gana.
La historia completa:
A raiz de un incidente de seguridad, me tocó repasar el event viewer del W2003 del repositorio de ficheros. Seguro que hay otras formas de hacerlo, pero un gran técnico (y un gran jefe, dicho sea de paso) me dió todo un recital de shell scripting tradicional-flauvored.
Así que aunque puede que no conduzca a ninguna parte, allí va. En algunas carpetas delicadas del repositorio alguna usuaria había detectado de cuando en cuando que faltaban contenidos que recuperábamos del backup (con un poco de suerte no había que mandar traer la cinta, ...). Por esto hace un año auditamos los accesos, cambios, ... de todo el contenido de esas carpetas. Esto genera un registro de seguridad gigante, unos 500Mb por semana. A veces hay más de 20 entradas por segundo.
Para parsear todo ese meollo, y llegar a los registros que nos interesan pensamos en exportar el registro de seguridad (Event Viewer - Security), pero la información que proporciona es menor que la del visor de eventos, y la necesitábamos toda.
Finalmente, nos acordamos que si en lugar de exportar haces un guardar como entonces sí que obtienes toda la información que ves desde el visor de sucesos. Puedes sacarlos como texto tabulado, o como csv. Este último formato no es fiable al pasarlo a una hoja de cálculo, ya que encontramos divergencias importantes. Así que nos quedamos con el tabulado.
Pero al guardarlo así, no muestra un registro por línea, y nuestro grep no es muy útil. Además los registros no tienen todos el mismo formato. Por eso buscamos una forma de meterlo cada evento en 1 línea (larga, pero eso no importa), y así luego hacer grep sobre el fichero y extraerlo los DELETE sobre el path deseado.
Monday, October 20, 2008
The WATCH
Prueba a procesar a base de awk, grep, ... un fichero de 400Mb de txt ... En seguida andas desde otro terminal haciendo:
para ver como va creciendo el ficherito. Pues ahora podemos hacerlo así:
y cada segundo que pasa nos va enseñando la salida de ls -lh , actualizando el tamaño del fichero.
y con esto y un bizcocho ...
y finalmente empezé
Así copié un DVD de mi hija, para salvar el original de sus zarpas y dejar que practique con la copia el mete-saca, para-arranca.
Uso Ubuntu Hardy, con los repositorios estándar de Ubuntu. He instalado el k9copy pero fallaba al hacer la copia. Faltaba dos paquetes: libdvdcss libdvdcss2 que están disponibles en el repositorio de medibuntu. Aquí hay un link fantástico sobre cómo hacerlo:
http://www.zaphu.com/2008/05/31/ubuntu-guide-ripping-and-burning-dvds-with-k9copy-and-brasero/
Un comentario sobre el link que hace a la instalación de los paquetes desde medibuntu (http://www.zaphu.com/2008/05/30/ubuntu-guide-installing-media-codecs-for-flash-dvd-quicktime-mov-mp3-wmv-wma-and-acc-mp4-m4a-playback/):
si substituyes aptitude install libdvdcss libdvdcss2
por : apt-get install libdvdcss libdvdcss2
revienta vivo. La verdad que como soy un ignorante del aptitude, pues no sé si es normal o no.
Por ahora sólo lo señalo.
Buenas noches yo.