miércoles, 11 de noviembre de 2009

Gentoo: Openldap Update Trono Samba PDC

Bien, actualice el servidor corriendo Gentoo 2010. Un revdep-rebuild hizo su desmadre, ahora resulta que varios parametros de Openldap ya no operan ejemplo:

Ahora corriendo slaptest me sale esto:

mail openldap # slaptest
/etc/openldap/slapd.conf: line 61: keyword is obsolete (ignored)
/etc/openldap/slapd.conf: line 63: keyword is obsolete (ignored)
bdb(dc=oakwest,dc=com): Program version 4.7 doesn't match environment version 4.5
bdb_db_open: database "dc=oakwest,dc=com" cannot be opened, err -30971. Restore from backup!
backend_startup_one (type=bdb, suffix="dc=oakwest,dc=com"): bi_db_open failed! (-30971)
slap_startup failed (test would succeed using the -u switch)

Esta es la version que instalo:

net-nds/openldap-2.4.19

Ya que borramos la parte de replica para eso de tener una ldap de respaldo:

slaptest
/etc/openldap/slapd.conf: line 63: keyword is obsolete (ignored)
bdb(dc=oakwest,dc=com): Program version 4.7 doesn't match environment version 4.5
bdb_db_open: database "dc=oakwest,dc=com" cannot be opened, err -30971. Restore from backup!
backend_startup_one (type=bdb, suffix="dc=oakwest,dc=com"): bi_db_open failed! (-30971)
slap_startup failed (test would succeed using the -u switch)

Aunque le demos el -u no arranca...

Lo cusioso es esto:

/usr/lib/openldap/slapd -d 1024
@(#) $OpenLDAP: slapd 2.4.19 (Nov 11 2009 22:54:23) $
root@mail:/var/tmp/portage/net-nds/openldap-2.4.19/work/openldap-2.4.19/servers/slapd
slapd starting

Ven si ejecuto el sistema a mano si arranca y vean donde aputa el ejecutable...

whereis slapd

slapd: /usr/share/man/man8/slapd.8.bz2

No da con el ejecutable, aqui esta el problema..!!!

lunes, 9 de noviembre de 2009

Ubuntu + Putty ssh con llaves!!!

Buenas tardes, esta vez vamos a hacer unas cosillas que por lo general deberia hacer un administrador de sistemas que tiene a su cargo varios equipos corriendo Linux/Unix.

En mi caso tengo varios servicios corriendo sobre LInux y otros sobre Unix, hablo de Unix por que FreeBSD es un Unix no Linux.

Bien, mi estacion de trabajo se basa en Ubuntu 9.04, y de ahi adminstro todos mis equipos, soy fan de putty, ssh es una bendicion del senor para nosotros los administradores de equipo Linux/Unix.

Por seguridad, es preferible accesar a nuestros servidores atraves de un canal seguro como ssh, no instalar nada referente a Xorg y por ultimo nunca accesar con ssh atraves de username + password.

Por que no falta el chistosito que va a querer tratar de entrar a nuestros equipos usando fuerza bruta, un password mezclado y con mas de 8 caracteres es bueno, pero para que permitir esto, nomas gasta nuestro preciado cpu.

Por ello el metodo de clave publica+clave privada es una gran solucion.

Vamos a empezar, ya tenemos instalado putty + putty-tools. En windows el puttygen es un cliente grafico, aqui en nuestros mundo Linux/Unix creo que es solo via consola, no problema estamos acostumbrados a estos pequenos inconvenientes, aunque tiene su gran ventaja...

Supongamos que en ubuntu mi usuario es "morrito", entonces abrimos una terminal y por default nos va a poner en el home folder del usuario "morrito".

Generamos un folder llamado keys:

mkdir keys

Accesamos ese folder:

cd keys

Lo que sigue es la generacion de las llaves, para ellos vamos a usar el comando puttygen con los siguientes paramatros:

-t rsa
-b 1024
-O private
-o nombrearchivo

Asi que lo hacemos:

morrito@ubuntu:~/keys$ puttygen -t rsa -b 1024 -O private -o ubuntu
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+++++++++++++++++
+++++
Enter passphrase to save key:
Re-enter passphrase to verify:

Pueden o no darle una password, yo en mi caso no lo deseo. Solo le doy enter+enter y listo, tengo un archivo llamado ubuntu con mi llave publica y privada:

Al abrirlo tenemos algo asi:

cat ubuntu

PuTTY-User-Key-File-2: ssh-rsa
Encryption: none
Comment: rsa-key-20091109
Public-Lines: 4
AAAAB3NzaC1yc2EAAAABJQAAAIBzhdRANoU6VDfC+HxZaLnpI8FsJNKpZbENyh2e
3ar5m+WL+8XW2vFG3SADN0EJFBcuJmF3pz6cSyb18k0AeX5Z1yfOwA2tZhlYQIet
qF/cP2JMgYIOGZWZF24cXC5BvZ0xHIjPaI7SIMxpa14HRy0T32rrL3Gwl81PrqMa
e06cUw==
Private-Lines: 8
AAAAgAY+ldn1G/VQqRF1NydtcdVAM/gB/YydtosfrpL3OaygpJ/Ia48SwO8S3yLE
t2hGRnEygc8dzAhyw9Xxa/IwFKrVzR3jTP1RQ0mnNJJJNt5QyMEk85RkI8fbTgLn
zz4y3PPvaKvLtDHtXdvXlXvLxqojd8d12DnzZkSvTR9bOSX9AAAAQQDfhwr3zpGE
2ty7HmuJoKhTZO6zwnhtZn0e+9lHGYYZ6Rf3imsYr7KaU9Z0Z35UdDm8YEgtAFgo
SKBXGQ1Un/cPAAAAQQCEThrbLs2B4ajwHK/USCMVe2iiJVxvmSqfTw1Umrz2vHhX
7foXWYPfMC/iqRa43Y6S4rj+UShYoLisd0kPDWZ9AAAAQEkmMSahz7hVq8qPrvJP
Xe0hDSFK79Ll+gMy3Hnao1ls7/7SSq8qF3m5kYyHnpaRZAhCx7/zuqk5OuYO5h0i
f2Q=

Aqui tenemos dos secciones, la seccion publica y privada, vamos separando las secciones, empezamos por seccion publica:

Public-Lines: 4
AAAAB3NzaC1yc2EAAAABJQAAAIBzhdRANoU6VDfC+HxZaLnpI8FsJNKpZbENyh2e
3ar5m+WL+8XW2vFG3SADN0EJFBcuJmF3pz6cSyb18k0AeX5Z1yfOwA2tZhlYQIet
qF/cP2JMgYIOGZWZF24cXC5BvZ0xHIjPaI7SIMxpa14HRy0T32rrL3Gwl81PrqMa
e06cUw==

Ahora la seccion privada:

Private-Lines: 8
AAAAgAY+ldn1G/VQqRF1NydtcdVAM/gB/YydtosfrpL3OaygpJ/Ia48SwO8S3yLE
t2hGRnEygc8dzAhyw9Xxa/IwFKrVzR3jTP1RQ0mnNJJJNt5QyMEk85RkI8fbTgLn
zz4y3PPvaKvLtDHtXdvXlXvLxqojd8d12DnzZkSvTR9bOSX9AAAAQQDfhwr3zpGE
2ty7HmuJoKhTZO6zwnhtZn0e+9lHGYYZ6Rf3imsYr7KaU9Z0Z35UdDm8YEgtAFgo
SKBXGQ1Un/cPAAAAQQCEThrbLs2B4ajwHK/USCMVe2iiJVxvmSqfTw1Umrz2vHhX
7foXWYPfMC/iqRa43Y6S4rj+UShYoLisd0kPDWZ9AAAAQEkmMSahz7hVq8qPrvJP
Xe0hDSFK79Ll+gMy3Hnao1ls7/7SSq8qF3m5kYyHnpaRZAhCx7/zuqk5OuYO5h0i
f2Q=

A nuestros servidores remotos, vamos a darle la seccion publica y nos vamos a firmar con la seccion privada.

Actualmente accesamos via ssh atraves de usuario+password, lo tenemos que hacer para poder llevar a cabo esto.

Accesamos a nuestro servidor corriendo centos 5.4, lo hacemos con root, ya dentro de la consola, nos vamos a el foder de ssh:

cd .ssh

Ahi dentro acreamos un archivo de nombre "authorized_keys":

touch authorized_keys

lo abrimos y estar limpio, ahi dentro pegamos la seccion publica de nuestra nueva llave y la dejamos toda en una sola linea:

AAAAB3NzaC1yc2EAAAABJQAAAIBzhdRANoU6VDfC+HxZaLnpI8FsJNKpZbENyh2e
3ar5m+WL+8XW2vFG3SADN0EJFBcuJmF3pz6cSyb18k0AeX5Z1yfOwA2tZhlYQIet
qF/cP2JMgYIOGZWZF24cXC5BvZ0xHIjPaI7SIMxpa14HRy0T32rrL3Gwl81PrqMa
e06cUw==

Recordar, debe quedar todo en una sola linea, al inicio de la linea deben agregar este parametro:

ssh-rsa

Entonces quedaria asi:

ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAIBzhdRANoU6VDfC+HxZaLnpI8FsJNKpZbENyh2e
3ar5m+WL+8XW2vFG3SADN0EJFBcuJmF3pz6cSyb18k0AeX5Z1yfOwA2tZhlYQIet
qF/cP2JMgYIOGZWZF24cXC5BvZ0xHIjPaI7SIMxpa14HRy0T32rrL3Gwl81PrqMa
e06cUw==

No importa que aqui no se observe, pero en su archivo debe todo quedar en una sola linea, y debe iniciar con el parametro "ssh-rsa", seguido de un espacio y enseguida toda su firma.

Salvamos.

Lo que sigue es abrir el putty, configurar la cuenta para su cliente, ahora lo que cambia es como autentificarse, aqui se van a la seccion: Connection->SSH->Auth.

Ahi viene un campo donde le vamos a dar la clave privada de nosotros, recuerda el archivo de nombre "ubuntu"?

Bueno pues ese archivo lo guardamos en /home/morrito/keys/, se lo damos a putty.
Nos vamos a la seccion: Connection->Data y ahi le ponemos el nombre del usuario del servidor remoto con el cual nos deseamos autentificar, en nuestro caso es "root".

Salvamos y ahora si, cuando nos logiemos no nos debe pedir ya mas el usuario o password, se tiene que ir derechito.

Esta es la forma mas segura de accesar via ssh a un servidor.

Lo mismo hacemos con FreeBSD, esto me ha funcionado con Gentoo, FreeBSD, Centos, tanto desde Windows como Linux.

Saludos!!!

domingo, 8 de noviembre de 2009

FreeBSD 7.X: Indices en Mysql 5.1.x

Tenemos la siguiente tabla: Tres.

mysql: DESCRIBE Tres;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| StatusID | int(11) | NO | PRI | NULL | auto_increment |
| SOID | int(6) | NO | PRI | NULL | |
| IP_ADDR | varchar(20) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+

Ahora vamos a ver los indices:

mysql> SHOW INDEXES FROM Tres;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Tres | 0 | PRIMARY | 1 | Status_ID | A | 12 | NULL | NULL | | BTREE | |
| Tres | 1 | SOID | 1 | SOID | A | NULL | NULL | NULL | | BTREE | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
2 rows in set (0.00 sec)

Tenemos por indice a el Status_ID es una tipo de dato int de 6 digitos, y por default es indice.
Despues vemos a SOID varchar de 6 caracteres, no es Key pero es indice, este valor es nuestra clave, ya que nosotros vamos a hacer busquedas basadas en este campo.

Y ademas no es unico, es un dato que se puede repetir mas de 1 vez.

Ya hemos capturado varios registros, vamos a verlos:

mysql> select * from Tres;
+-----------+-------+--------------+
| Status_ID | SOID | IP_ADDR |
+-----------+-------+--------------+
| 1 | 20000 | 192.168.1.1 |
| 2 | 20001 | 192.168.1.2 |
| 3 | 20002 | 192.168.1.3 |
| 4 | 20003 | 192.168.1.4 |
| 5 | 20004 | 192.168.1.5 |
| 6 | 20005 | 192.168.1.6 |
| 7 | 20006 | 192.168.1.7 |
| 8 | 20001 | 192.168.1.8 |
| 9 | 20002 | 192.168.1.9 |
| 10 | 20003 | 192.168.1.10 |
| 11 | 20001 | 192.168.1.11 |
| 12 | 20002 | 192.168.1.12 |
+-----------+-------+--------------+
12 rows in set (0.00 sec)

Tenemos que varios SOID se han repetido, vamos a ver si nuestros indices estan funcionando:

mysql> explain select * from Tres where SOID=20001;
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE | Tres | ALL | SOID | NULL | NULL | NULL | 12 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

Podemos ver que no, ya que la tabla en total tiene hasta ahorita 12 registros, y cuando hacemos esta busqueda usando"WHERE" el motor de mysql esta haciendo un barrido total a la tabla, por lo tanto no esta usando nuestros indices, sabiendo que SOID es un indice.

El problema radica en que como SOID es un tipo varchar, debemos cerrar entre comillas el valor para que mysql lo tome como lo que es, si no lo hacemos como en el caso anterior, lo toma como dato numerico, por ello falla.

Ahora vamos a ver la diferencia:

mysql> EXPLAIN select * from Tres where SOID="20001";
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
| 1 | SIMPLE | Tres | ref | SOID | SOID | 8 | const | 3 | Using where |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------------+
1 row in set (0.00 sec)

Vean, ahora si los uso, ya que solo nos estra regresando los 3 registros que tiene con ese valor, y este dato lo esta sacando de los indices, ya no tuvo que hacer un barrido completo a la tabla.

Esto salva preciado CPU, acceso a disco que sumado es tiempo de respuesta muy importante cuando estamos hablando de tablas con mas de 100,000 registros.

Hasta la proxima!!!

miércoles, 4 de noviembre de 2009

FreeBSD 7.X: phpMyAdmin 3.x

Esta ves le toca el turno a phpMyAdmin, ya estoy muy acostumbrado a usarlo, este se localiza en:

root#whereis phpmyadmin
phpmyadmin: /usr/ports/databases/phpmyadmin

Nos vamos hacia alla y ejecutamos:

root#make install clean

Nos va a salir la pantalla donde podemos agregar ciertas funcionalidades, yo en lo personal agrego todas, una vez que le damos click en el boton "OK" empieza la klabaza.

Ya que termina, este guarda sus archivos php en donde freebsd pone a apache:

/usr/local/www

Ingresamos a esa ruta...

cd /usr/local/www/phpMyAdmin

Una vez aqui dentro, dice el manual de phpMyAdmin que debemos crear un folder de nombre config, pero como estamos trabajando con el root, todo lo que hagamos se va a ser con los permisos para el root.

Apache se ejecuta con el usuario propio que es www y el grupo del mismo nombre, entonces una vez creado el folder "config" debemos cambiarle ciertos atributos a ese folder.

Algo asi:

mkdir config
chown www:www config
chmod 660 config

De aqui tenemos que agregar unos alias a apache apuntando a el folder de phpMyAdmin, agregamos algo asi:

Alias /phpMyAdmin /usr/local/www/phpMyAdmin

Allow from all
AllowOverride All


Reiniciamos apache y probamos.

/usr/local/etc/rc.d/apache22 start

Cuando apuntemos a apache en el navegador, debemos irnos a

http://ipserver/phpMyAdmin

Y nos debe arrojar la pantalla de logeo de phpMyAdmin, algo asi:


Lo que sigue es configurar nuestro primer servidor mysql, para ello es necesario agregar a el mismo path de navegador esto:

/setup/

Y nos debe dar una pantalla parecida a esto:


Aqui empezamos la configuracion, si les dice un error que no puede localizar el folder config, chequen sus permisos antes de continuar.

Dentro de ese folder, crean un archivo llamado config.ini.php e igual permisos para apache.

Le damos un click en el boton "New Server" y empezamos...

No hay mucho que hacerle, dan de alta los parametros que creanc convenientes, salvan y existe un boton que dice "Display", le dan un click y les arroja toda la configuracion que ustedes eligie ron, la copean y la pegan en el archivo que crearon arriba config.ini.php, salvan y copean ese archivo a la ruta principal:

cp config.ini.php /usr/local/www/phpMyAdmin/

Se van en su navegar a el folder inicial de phpMyAdmin y ahora si se logean con algun usuario que tengan en mysql y deben llegar a la pantalla principal de phpMyAdmin y les debe arrojar las base de datos que tienen.

Nos vemos!!!

FreeBSD 7.x: Instalando Bacula Server 3.x

Ya compilamos bacula-server con soporte para mysql. Bacula almacena los archivos para crear su base de datos en:

/usr/local/share/bacula/

Asi que nos vamos hasta ahi:

cd /usr/local/share/bacula/

El manual dice que mysql debe estar ya funcionando. Y debemos ejecutar los siguientes scripts:

root#./grant_mysql_privileges
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_privCreate_routine_priv Alter_routine_priv Create_user_priv Event_priv Trigger_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections max_user_connections
localhost root Y Y Y Y Y Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y Y Y Y 0 00 0
miserver.local root Y Y Y Y Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y Y Y Y Y 00 0 0
127.0.0.1 root Y Y Y Y Y Y Y Y Y Y Y Y Y Y YY Y Y Y Y Y Y Y Y Y Y Y Y 0 00 0
localhost N N N N N N N N N N N N N N NN N N N N N N N N N N N N 0 00 0
miserver.local N N N N N N N N N N N N N NN N N N N N N N N N N N N N 00 0 0
localhost bacula N N N N N N N N N N N N N N NN N N N N N N N N N N N N 0 00 0
% bacula N N N N N N N N N N N N N N N NN N N N N N N N N N N N 0 0 00
Privileges for bacula granted on bacula.

Luego..

root#./create_mysql_database
Creation of bacula database succeeded.

Por ultimo:

./make_mysql_tables
Creation of Bacula MySQL tables succeeded.

Listo!!!

FreeBSD 7.X Instalar mysql 5.1

El manual dice:

cd /usr/local/mysql
bin/mysql_install_db --user=mysql
bin/mysqld_safe &

Pero esta mal, la ruta es:

/usr/local/bin/

Asi:

root#cd /usr/local/bin
root#./mysql_install_db --user=mysql
root#sockstat -4
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS
mysql mysqld 73127 10 tcp4 *:3306 *:*
root sendmail 650 4 tcp4 127.0.0.1:25 *:*
root sshd 644 3 tcp4 *:22 *:*

Ahi podemos ver el servicio arriba, lo que sigue es agregar el parametro en /etc/rc.conf para que cada que arranquemos el servidor inicie el servicio automaticamente.

Agregamos esto a /etc/rc.conf:

##############################################################
# mysql server 5.1
##############################################################
mysql_enable="YES"
# mysql_limits (bool): Set to "NO" by default.
# mysql_dbdir (str): Default to "/var/db/mysql"
# mysql_args (str): Custom additional arguments to be passed

Si no agregan al menos el parametro: mysql_enable="YES", cuando ejecuten /usr/local/etc/rc.d/mysql-server start, nunca va a ejecutarse el servicio.

Ya si desean modificar los parametros globales de mysql, deben crear el archivo my.cnf en /usr/local/etc, este archivo cuando arranca mysql lo lee.

Animo!!!

Centos 5.x rsync para sincronizar 2 directorios remotos

Deseo sincronizar el directorio de un servidor en otro servidor como respaldo:

rsync -r -a -v -e "ssh -l root" --delete /opt/DATA/mfg/ root@192.168.2.44:/opt/bakmfg

Con esto hago una copia de un servidor a otro.