sábado, 15 de octubre de 2011

MSSQL en Linux

Puede que parezca una tonteria, pero hacer que un linux se conecte a una base de datos hecha en MSSQL no es tan trivial. Algunos piensan que es descomentar una linea en el php.ini en la que se indica un dll. Aclararemos aqui que Linux NO usa dlls, eso es Windows. Y tampoco pueses instalar MSSQL en Linux (no se si con Wine se podria).

¿Entonces como haremos para usar MSSQL en Linux? Lo primero necesitamos tener un servidor con Windows con el MSSQL instalado, funcionando y con el acceso remoto activado. Luego, haremos que Linux se conecte a esa base de datos. Decia que no es tan trivial porque no es instalar un paquete con yum o con apt (puede que esté, no lo he buscado), pero lo que nunca te va a fallar (o si, nunca se sabe) es compilandolo de cero. El programa en cuestion es el freetds. Antes de bajarlo y compilarlo, necesitaremos saber qué versión a que version de MSSQL vamos a conectarnos además de apuntar la URL (o IP), el puerto y el nombre de la bbdd, ademas del usuario y contraseña, ya que lo necesitaremos pronto.

Empecemos, lo primero es descargarnos los paquetes para compilarlos, trabajaremosndesde la carpeta /opt. Tendremos que instalar primero el paquete unixODBC mediante repositorios.
# cd /opt
# wget http://www.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-0.91.tar.gz
# tar xzvf freetds-0.91.tar.gz
# cd freetds-0.91
# ./configure --with-tdsver=7.2 --prefix=/usr/local/freetds
# make
# make install
Hay que tener en cuenta y especial cuidado esta linea en el configure "--with-tdsver=7.2", ya que hay que indicar la versión de MSSQL que se usa*. Con esto ya tendremos instalado el freetds en /usr/local/freetds. Ahora toca configurarlo. Hay que añadir al archivo /usr/local/freetds/etc/freetds.conf el servidor de la base de datos a la que se quiere conectar. Ahora es cuando necesitamos los datos del otro servidor, hay que añadir unas lineas de este estilo:
[MSSQLSERVER]
host = server.domain.com
port = 1433
tds version = 7.2
En "host" pondremos el nombre FQDN del servidor o la IP, en "port" el puerto que tenga el servidor y el "tds version" la versión del MSSQL según la tabla que teneis en el enlace al final (*).

Con esto, ya deberíamos tenerlo todo listo para conectarnos, así que vamos a probarlo. Usaremos un programa que nos viene en el freetds llamado "tsql". En mi caso, está en la carpeta /usr/local/freetds/bin/, pero con un "locate tsql" puedes confirmar dónde está. Usaremos el servidor que he declarado antes para hacer el ejemplo, recuerda que tienes que cambiar los datos.
# /usr/local/freetds/bin/tsql -S MSSQLSERVER -U prueba -P p1r2u3e4b5a6
Donde "MSSQL" es el servidor que hemos declarado antes, "prueba" es el usuario de la base de datos y "p1r2u3e4b5a6" es la contraseña. Esta última no es necesario ponerla en la llamada, ya que nos la pide por promt (más seguro, no se queda guardada en el history). Si todo va bien, nos mostrará unos datos y nos mostrará "1>". A partir de ahora podemos hacer lo que necesitemos en el MSSQL, por ejemplo:
1>SELECT * FROM TABLA
2>GO
Eso nos debería mostrar el contenido de "TABLA".

¿Hemos acabado? Depende, esto así no tiene mucha utilidad. Lo siguiente que haremos será que el PHP pueda usar el MSSQL. Ahora toca recompilar el php, cuando hagamos el ./configure tenemos que añadirle --with-sybase=/usr/local/freetds.**

Si tenemos instalado DirectAdmin ya sabemos que hay que hacer todo usando sus scripts. Tenemos que editar el archivo /usr/local/directadmin/custombuild/configure/ap2/configure.php5 *** y añadir "--with mssql=/usr/local/freetds", añadiendo "\" a la linea anterior. Luego vamos a "/usr/local/directadmin/custombuild" y ejecutamos:
# ./build clean
# ./build update
# ./build php n
Eso nos recompilará el php de nuevo. Ya deberíamos tenerlo todo configurado para usar una base de datos en MSSQL en nuestro servidor Linux. Si se necesita más información, hay que consultar la web de freetds.

Como esto es una cosa que estamos haciendo en el trabajo entre varios, si surge algún cambio a la hora de hacer las pruebas, actualizaré el post con la nueva configuración, pero esto por ahora nos está funcionando.

¡Hasta la próxima!

* Consultarlo aqui: http://www.freetds.org/userguide/choosingtdsprotocol.htm
** Más info: http://www.freetds.org/userguide/php.htm
*** Usando apache2 y php5, si no, consultar en internet dónde estan los archivos de configuración.

miércoles, 12 de octubre de 2011

¿Has perdido tu password de administrador de windows? Tranquilo, Linux te ayuda

Una situación muy común es que uno se olvida de la contraseña de administrador de Windows, pese a tenerla apuntada en un post-it al lado del servidor. Existen muchas herramientas para poder recuperar la contraseña, pero como me gusta Linux y complicarme la vida, pues lo hacemos difícil*.

Este método que comentaré tiene una ventaja, y es que no se tocan los ficheros de contraseñas de windows, por lo que no hay peligro (me he cargado un 2008 usando esas herramientas...). Hay que dejar clara una cosa, de esta forma sólo podremos cambiar contraseñas que no estén en Active Directory (a falta de probarlo con un servidor que tenga AD**...).

Este método es muy ruin, Windows se sentirá estafado por que vamos a dar gato por liebre. ¿Conoceis las sticky keys? Alguno seguro que sí, sobre todo los que jugaron al trackmania. Bueno, eso lo que hace es lanzarnos un programa cada vez que pulsamos 5 veces la tecla Shift. Pero, ¿que pasa si cambiamos el ejecutable al que llama por defecto? Sencillo, Windows se lo traga y nos ejecuta lo que hayamos puesto. Usaremos esta falla para poder ejecutar una consola y así poder cambiar la password, pero es un fallo demasiado gordo que ya veremos al final cómo solucionarlo.

Básicamente lo que haremos será cambiar el archivo sethc.exe por un cmd.exe, para ello necesitaremos una live cd de cualquier sistema operativo. Yo me he decantado por usar una knoppix, ya que trae los ficheros necesarios para trabajar con una particion ntfs (necesario kernel 2.6 para ello), pero podremos usar cualquiera que lo soporte***.

Tras cargar nuestra live favorita, sólo queda montar la particion de Windows, bien por consola, bien por escritorio, al gusto/posibilidad de cada uno, y entrar en la carpeta Windows/System32. Una vez allí, renombramos el archivo sethc.exe a sethc.exe.bck y hacemos una copia del archivo cmd.exe renombrandlo como sethc.exe. Desmontamos, reiniciamos y cargamos Windows.

Ahora, en la pantalla de login, pulsamos 5 veces la tecla shift y voilá, se nos abrirá una ventana con una consola con privilegios administrativos (en local). En este punto, el servidor es nuestro, podemos hacer lo que queramos con esa consola. Para nuestro cometido, cambiar la password de administrador, tendremos que ejecutar el siguiente comando:
net user Administrador ContaseñaNueva
Nos saldrá una confirmación de que se ha cambiado y listo, ya podemos loguearnos como administrador. Sólo falta deshacer lo que hicimos para que no se quede el sticky keys lanzando un cmd. Para ello apagamos y cargamos de nuevo la Live, borramos el sethc.exe actual (un cmd camuflado) y renombramos el sethc.exe.bck a sethc.exe. Ya podemos usar nuestro 2008 de nuevo.

Ahora bien, para solucionar este fallo de seguridad, simplemente con desactivar las sticky keys basta, esta en opciones de accesibilidad o asi. Ya cada uno que lo desactive si quiere, ya que una vez desactivado, este metodo no funcionaría. Tened en cuenta otra cosa, desde escritorio remoto se puede invocar a las sticky keys poniendolo a pantalla completa, asi que cuidado.

En Linux también hay trucos para recuperar la clave de root, pero son más sencillos y están así a posta ;) no son fallos de seguridad. Hablaremos de ello en otro post, saludos.

* Este metodo sólo es válido para Windows con las sticky seys y tienen que estar activadas (xp en adelante)
** Todo sería probar a invocar la herramienta de adminstracion de Active Directory a ver si cuela, pero vamos, que en terminos generales, si pierdes la pass de administrador de un AD, date por despedido.
** Como digo, para particiones NTFS hace falta que tenga kernel 2.6, pero si tenemos el windows en una particion FAT32 nos valdría casi cualquier linux (con kernel 2.4 en adelante que yo haya probado). Esto no se aplica al 2008, no deja instsalarse en una FAY (o eso recuerdo).

sábado, 8 de octubre de 2011

Servidores Windos VS Servidores Linux

El otro día hablando con Mistheart me comentó que le habían pedido montar un servidor, y cuando humildemente me presté a ayudarle, me soltó: "Nada de Linux ehh?".

Tras las risas, le expliqué que no tenía que ser Linux y no le puse ninguna pega (bueno, alguna*) de que fuese Windows. Se que la mayor parte del tiempo soy anti windows, pero uno no es tan cerrado. Me pasó algo parecido, pero al contrario, con un cliente, que no tenía nada de idea de informática, pero quería Linux porque sus informáticos le habían dicho que era mucho más rápido.

Vamos a intentar aclarar un poco las cosas, que la gente está muy perdida. Lo primero de todo, a la hora de montar un servidor, hay que preguntarse qué va a hacer ese servidor. No puedes llegar y montar/alquilar un servidor con Linux porque sí (o windows, me da igual que me da lo mismo). Hay que sentarse un momento y escribir en una hoja qué necesitas que haga, luego ya le preguntas al informático. Veamos unos cuantos ejemplos de cada:

Windows:

Hay varios casos en los que es necesario montar un servidor con Windows, como puede ser que uses una base de datos de Access o usar asp o .net, en estos casos lo más recomendable, si o si, es usar Windows. No es porque Linux no pueda con ello, es simplemente porque es más sencillo. Hay que valorar el esfuerzo de instalar los programas necesarios para que funcione lo que queremos montar.

Otro ejemplo, si en la empresa tenemos ordenadores de oficina y queremos tener centralizada la autenticación de usuarios, necesitaremos un servidor Windows, le instalamos Active Directory, y a tirar. ¿Se puede hacer eso con un servidor Linux? Sí, pero no es tan trivial y no tiene tantas opciones. Se puede hacer, ya que lo he hecho, montar un servidor con Samba y que haga de maestro, pero tiene sus limitaciones (por lo menos sin investigar mucho**) como no tener un usuario administrador, o no poder guardar todo el escritorio en el servidor y cuando te conectes en otro PC tenerlo ahí también***, etc, etc... Funcionar, funciona, eso si.

Linux

¿Realmente hace falta tener un servidor en Linux? Uno de los puntos a favor de los sistemas Linux es que puedes hacer (casi) todo lo que puedes hacer con un Windows, pero gratis****. Una de las cosas que más me duelen en los Windows son las licencias, que te cobran por todo. Para conectarte a un servidor Windows tienes que pagar por cada equipo que se conecte. Si es una red de 5 PCs, no pasa nada, van incluidas (o iban) en el precio, pero si tienes una red de 200 PCs se va de las manos. Por eso muchas empresas deciden tener algunos servidores en Linux, para ahorrarse licencias*****. Si sólo necesitas tener un servidor para guardar datos, te compensará Linux, montas un ftp sencillote y listo. Y no me apetece buscar más ejemplos xD que estoy perro.

En resumen, en ningún punto he tratado como factor a mirar que sea más rápido uno y otro, ya que eso dependerá en buena medida de qué instales y qué uses. Lo que se necesita valorar a la hora de usar un sistema u otro son las licencias, la comodidad a la hora de trabajar con el servidor, que te sirva y sobre todo, que tengas a alguien que sepa (o sepas tú). De poco te sirve montar un servidor Linux si te asusta el teclado, o montar un Windows si no sabes usar más que el ratón. Y si realmente no sabes qué necesitas, consultalo con tu farmacéutico haz como cuando compras un coche, que te aconsejen varias personas distintas que sepan y de ahí, saca las conclusiones.

* Windows 2008 R2 Estándar mínimo, o en su defecto Windows 2003 con el sp2.
** no me dio tiempo ni ganas la verdad, ya me toco mucho la moral el intentar meter un Windows 7 en un AD hecho con Samba, pero al final entró
*** Este punto no es malo, muchas redes están así, simplemente autentificando al usuario y que sus datos estén sólo en ese servidor. Ahorra mucho ancho de banda y tiempo.
**** Eso es mentira, no todos los Linux te van a salir gratis, véase RedHat.
***** No se bien como va lo de las licencias, pero es algo a tener MUY en cuenta cuando montamos una red, ya que si no tenemos las licencias de antemano nos puede salir mucho más caro.

jueves, 6 de octubre de 2011

Descansa en paz Steve

Puede que critique mucho a Apple últimamente, pero por cuestiones más bien de cachondeo, aunque con alguna cosa no estoy de acuerdo pero por ser un bafh :P.



Por eso, en vez de soltar alguna payasada y meterme un rato con los fanboys de apple (a mi no me dejaron entrar en la secta), solo decirle a Jobs que descanse en paz, su idea de hacer la informática realmente accesible a todos puede que no me guste, pero la comparto.


Descansa en paz Steve.