miércoles, 10 de noviembre de 2010

Registros SPF para implementar en nuestro dominio DNS

SPF (Sender Policy Framework ) : Segun Wiki:
es una protección contra la falsificación de direcciones en el envío de correo electrónico.

Identifica, a través de los registros de nombres de dominio (DNS), a los servidores de correo SMTP autorizados para el transporte de los mensajes.

Este convenio puede significar el fin de abusos como el spam y otros males del correo electrónico.

Pues si dos grandes empresas como HOTMAIL y GMAIL implementan este tipo de protección y obviamente cada vez que llega un correo a alguno de esos servidores , estos tienen un mecanismo de comprobacion que permite saber que servidores SMTP ( IP ) estan autorizados en enviar correos electronicos usando el dominio del remitente.
En este caso el remitente es linkwebservices.com y el from luiggicastagnino@gmail.com.

Una captura de pantalla cuando envio un correo desde el servidor de LinkWebServices a un correo de Hotmail llega directo a Bandeja de entrada.
Esto sucede porque en el dominio linkwebservices ya implemente SPF para que diga que nuestra IP (IP del servidor de linkwebServices) Esta autorizado para enviar correos utilizando nuestro dominio: linkwebservices.com.

Con esto se solucionaria una buena parte para que hotmail no nos tome como SPAM,
fuera de las otras recomendaciones que da en la pagina de postmaster.
como no abrir mas de 500 conexiones recurrentes hacia alguno de sus servidores.
Espero esta informacion sea de mucho interes para los administradores de servidor de correo electronico.
Ya lo saben , USAR PRUDENTEMENTE EL SERVICIO. PORQUE SINO CAERIAN NUEVAMENETE COMO SPAM ASI IMPLEMENTEN O NO SPF.

Tener en cuenta los otros mecanimos de seguridad como autenticacion para poder enviar correos, anti-spam, anti-virus y muchas cosas que ZIMBRA puede brindarnos.
Saludos

jueves, 4 de noviembre de 2010

Añadir .repo en Centos

En este caso , tenia que agregar una nueva repo a mi Centos para poder utilizar el comando
root@localhost#:yum install rt

Para que lograra funcionar tuve que hacer lo siguiente:
# cd /etc/yum.repos.d/
# wget http://campus.fct.unl.pt/paulomatos/rt/repository/3.4.x/rt-3.4.x.repo

y volver a teclear :

http://campus.fct.unl.pt/paulomatos/rt/repository/3.4.x/rt-3.4.x.repo

y todo listo

martes, 26 de octubre de 2010

Como configurar nuestro firewall para que acepte conexiones pasivas en VSFTPD.

Bueno , para poder realizar esto primero necesitamos cargar un modulo espcial en la siguiente ruta:

[root@server ~]# nano /etc/sysconfig/iptables-config

y debemos decirle a iptables que modulo necesitamos cargar, en este caso necesitamos carga el modulo
ip_conntrack_ftp

IPTABLES_MODULES="ip_conntrack_ftp"

Luego salvamos y finalmente añadimos a nuestro

/etc/sysconfig/iptables

## FTP ##
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
## FTP CONEXIONES ESTABLECIDAS
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


Nada peculiar con esto, es obvio que todos los paquetes y estas reglas estan hechas para paquetes que llegan exclusivamente a este. Servidor
Luego nuestro

services iptables restart

Saludos

domingo, 24 de octubre de 2010

Hacer que apache soporte los .ICO para Internet Explorer

Bueno, esto lo pongo por si alguna persona tiene problemas al momento de visualizar sus favicon en Internet Explorer.

Lo que tenemos que hacer es editar el /etc/httpd/conf/httpd.conf y al final agregar:
AddType image/x-icon .ico
Esto sucede porque en nuestra configuracion de apache, no le decimos en ninguna linea como que tipo de archivo debe interpretar los .ico

Saludos

jueves, 21 de octubre de 2010

Configuracion de Tamaño maximo de recepcion y Envio ZIMBRA

Primero debemos acceder con el usuario zimbra y preguntar por el valor actual:
# su - zimbra
$ postconf message_size_limit
message_size_limit = 10240000


Luego para la modificacion de ese valor teclearemos lo siguiente:
# su - zimbra
$ zmprov modifyConfig zimbraMtaMaxMessageSize 2048000

y Reiniciamos el servicio postfix

$ postfix reload

comprobamos: $ postconf | grep message_size_limit

Ahora modificaremos el (zimbraFileUploadMaxSize) que es el Limite para subir archivos.
Primero pregunts
# su - zimbra
$ zmprov modifyConfig zimbraFileUploadMaxSize 5000000

y lo cambiamos a :
zmprov modifyServer mail2.domain.com zimbraFileUploadMaxSize 20000000


Todo Zimbra :)

miércoles, 6 de octubre de 2010

Mica virtual machine y mica merchant

Hoy instale miva virtual machine , tipo unaaquina virtual pero muchoss sencilla y simple que la virtual machine de Java.
Me costo mucho trabajo identificarme con miva virtual machine , conocer ósea que sirve cada uno de sus archivos ycuales son las fuciones que cumple cada. Uno de estos.
Logre instalarlo el día de hoy en un servidor dedicado en producción. Para luego instalar sobre el interprete de miva el paquete merchant 5 un E-commerce proporsionado por proovedores de
hosting que manejan directorios virtuales y que su instalacib es mucho mas sencialla claro porque los hoster tienene ya configurado miva virtual machine de manera comparida a que todos los usuarios usen la misma instancia de instalación para casda uno de sus. e-commerces.
Yo tuve que lidiar con la instalación de miva virtual machine para el servidor dedicado que tngo a cargo.
Bueno luego colgare un manual sobre como
lo hize en Centos 5.
Saludos.

lunes, 4 de octubre de 2010

Excepciones en PHP

Ultimamente he estado relacionandome mucho en los servidores Linux y e descuidado un poco la programación. Pero ahora que tengo algo interesante que un amigo de la Universidad me comento sobre las excepciones en PHP.
Para poder mostrar el código ordenado tuve que utilizar la ayuda de esta página:

http://www.simplebits.com/cgi-bin/simplecode.pl?mode=process

Un capturador de excepciones nos sirve para que los errores en tiempo de ejecución de una aplicacion pueda controlada y manejada debidamente.

Para esto PHP tamibien maneja Excepciones como lo vemos ahora:


<?php

try {

    $error = 'Always throw this error';

    throw new Exception($error);



    // Code following an exception is not executed.

    echo 'Never executed';



} catch (Exception $e) {

    echo 'Caught exception: ',  $e->getMessage(), "\n";

}



// Continue execution

echo 'Hello World';

?>




En la linea de throw new Exception($error); vemos como este ejemplo genera una Excepcion (Causada aproposito para poder capturarla con nuestro CATCH.)


Bueno el punto de partida de una excepcion siempre es :
try{
// Todo el codigo que creas tu pueda lanzar algun tipo de error (Excepcion)
// como por ejemplo , el acceso a una Base de datos, acceso a ficheros , carpetas
// Test de conexion. entre otros procesos variables que se encuentren sujetos a posibles errores.

} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
// Es aqui , en donde nosotros le indicamos al software que debe hacer en caso se encuentre con algun tipo de Excepcion. Como mandar un E-Mail al desarrollador indicando que se produjo una excepcion.

}


Para las personas que deseen aprovechar las bondades de la programación orientada a Objetos en un lenguaje Script como PHP les sera de mucha ayuda poder manejar excepciones, hacer mas robustas y seguras sus aplicaciones , ademas de poder hacerles seguimiento a los errores mas frecuentes y encontrar las razones o causas que la genera.

martes, 21 de septiembre de 2010

Grupos y usuarios en Linux

USUARIOS Y GRUPOS

Linux es un sistema operativo multiusuario y multitarea, esto es, que más de un usuario puede trabajar en el sistema de forma simultánea con otros, ejecutando una o más tareas a la vez.

Cuando se ingresa al sistema, es necesario que se identifique con un login y una contraseña, el login es un nombre que identifica de forma única al usuario. La contraseña debe ser una combinación de letras, números y caracteres especiales.

El sistema de contraseñas en Linux es de tipo unidireccional. Esto quiere decir que nuestra contraseña no es almacenada como texto, sino que es cifrada y guardada tal como es. Cuando entramos en el sistema y escribimos nuestra contraseña, ésta es cifrada y comparada con la que está almacenada. Si coinciden, la identificación es positiva, si no coinciden, no hay identificación.

Actualmente, en los sistemas GNU/Linux se puede escoger dos tipos de cifrado posibles para las contraseñas de usuario: 3DES que se viene usando desde los inicios de UNIX, tiene el inconveniente que sólo permite contraseñas de 8 caracteres, si se escriben mas se ignoran, el otro tipo es MD5 con el que podemos usar contraseñas de la longitud que deseamos, por seguridad se recomienda utilizar el tipo MD5.

Los grupos son siempre expresiones lógicas de organización, reuniendo usuarios para un propósito común. Los usuarios dentro de un mismo grupo pueden leer, escribir o ejecutar archivos que pertenecen al grupo.
Los usuarios en GNU/Linux

Existe 3 tipos de usuarios:

1. Usuario Normal, es un individuo particular que puede entrar en el sistema, con más o menos privilegios que harán uso de los recursos del sistema. Como indicador en el prompt utiliza el símbolo $ (dólar). Ejemplo: raul, sergio, mrodriguez, etc. También se les conoce como usuarios de login.
2. Usuarios de Sistema, son usuarios propios del sistema vinculados a las tareas que debe realizar el sistema operativo, este tipo de usuario no puede ingresar al sistema con un login normal. Ejemplo: mail, ftp, bin, sys, proxy, etc. También se le conoce como usuarios sin login.
3. root (superusuario), todo sistema operativo GNU/Linux cuenta con un superusuario, que tiene los máximos privilegios que le permitirán efectuar cualquier operación sobre el sistema, su existencia es imprescindible ya que se encarga de gestionar los servidores, grupos, etc.

Archivos relacionados

Toda la información de los usuarios y grupos se guarda en los siguientes archivos:

* /etc/passwd: guarda información de los usuarios del sistema como: nombres, directorio home, shell.
* /etc/group: almacena la información sobre los grupos existentes en el sistema.
* /etc/shadow: contiene las contraseñas cifradas de los usuarios además de otros datos para su validación.

Archivo /etc/passwd

El archivo passwd almacena los usuarios creados en el sistema y tiene el siguiente formato:

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
clases:x:1000:1000:LinuxCentro:/home/clases:/bin/bash

Cada línea esta separada en campos, el separador de campo son los dos puntos (:), y cada campo representa lo siguiente:

* Login: el nombre del usuario. No puede haber dos nombres iguales.
* Contraseña cifrada: si no se utiliza el fichero de shadow, las contraseñas cifradas se almacenan en este campo. Si utilizamos el fichero de shadow, todos los usuarios existentes en este fichero deben existir también en el de shadow y en este campo se pone el carácter “x”.
* User ID: número de identificación del usuario. Es el número con el cual el sistema identifica al usuario. El 0 es el único que está reservado para el root.
* Group ID: el número de grupo al cual pertenece el usuario. Como un usuario puede pertenecer a más de un grupo, este GID es del grupo primario.
* Comentarios: campo reservado para introducir los comentarios que queramos sobre el usuario. Se suele utilizar para poner el nombre completo o algún tipo de identificación personal.
* Directorio home: el directorio home del usuario es donde éste podrá guardar todos sus ficheros, generalmente se encuentran dentro del directorio /home y el nombre de cada directorio es similar al de cada usuario.
* Intérprete de comandos: un intérprete de comandos (shell ) es un programa que se encarga de leer todo lo que escribimos en el teclado y ejecutar los programas o comandos que le indiquemos. Hay decenas de ellos, aunque el más utilizado es, sin duda, el bash (GNU Bourne-Again SHell). Si en este campo está: /bin/false ó /bin/nologin el usuario no podrá tener acceso a su shell y no podrá ejecutar comandos.

Archivo /etc/group

El archivo group almacena la información de los grupos del sistema, y tiene el siguiente formato:

root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
clases:x:502:

Al igual que el archivo anterior cada línea esta separada en campos el separador de campo son los dos puntos (:), y cada campo representa lo siguiente:

* Nombre del grupo. Por defecto con los comandos habituales se crea un grupo con el mismo nombre que el usuario creado, aunque pueden existir otros grupos con nombres específicos.
* Contraseña cifrada: la contraseña de un grupo se utiliza para permitir que los usuarios de un determinado grupo se puedan cambiar a otro o para ejecutar algunos programas con permisos de otro grupo, siempre que se disponga de la contraseña.
* Group ID: número de identificación del grupo. Es el número con el cual el sistema identifica internamente a los grupos. El 0 es el único que está reservado para el grupo del root (los administradores).
* Lista de usuarios: los nombres de los usuarios que pertenecen al grupo, separados por comas. Aunque todos los usuarios deben pertenecer a un determinado grupo (especificado en el cuarto campo del fichero de passwd), este campo se puede utilizar para que usuarios de otros grupos también dispongan de los mismos permisos que tiene el que se está referenciando.

Archivo /etc/shadow

El archivo shadow se encarga de almacenar las contraseñas cifradas del usuario, y tienen el siguiente formato:

root:$1$qvZCDFha$8CsNHHB/QDYlx3wDnZWzp/:12829:0:99999:7:::
bin:*:12829:0:99999:7:::
daemon:*:12829:0:99999:7:::
clases:$1$8Ne4Ij4r$th9obKXkR7iTZGj26jGUc/:12831:0:99999:7:::

Igual que los archivos anteriores cada línea esta separada en campos el separador de campo son los dos puntos (:), y cada campo representa lo siguiente:

* Login: debe ser el mismo nombre que se utiliza en el fichero de passwd.
* Contraseña cifrada.
* Días que han pasado, desde el 1 de enero de 1970, hasta que la contraseña ha sido cambiada por última vez.
* Días que deben pasar hasta que la contraseña pueda ser cambiada.
* Días que han de pasar hasta que la contraseña deba ser cambiada.
* Días antes de caducar la contraseña en el que se avisará al usuario de que debe cambiarla.
* Días que pueden pasar después de que la contraseña caduque, antes de deshabilitar la cuenta del usuario (si no se cambia la contraseña).
* Días, desde el 1 de enero de 1970, desde que la cuenta está deshabilitada.
* Campo reservado.

En sistemas UNIX es muy común representar las fechas a partir del número de segundos transcurridos desde el 1 de enero de 1970.

En sistemas donde hay muchos usuarios y se desea restringir el espacio de disco que utilizan se puede utilizar quotas.
COMANDOS PARA GESTIONAR USUARIOS

* Comando useradd : permite añadir nuevos usuarios al sistema, también permite establecer la información por defecto de los nuevos usuarios. Se encuentra enlazado simbólicamente por el nombre adduser, ambos nombres se pueden emplear indistintamente para las mismas acciones.

Algunas opciones:

-u : permite especificar el UID.
-c : añade los valores a la sección de comentarios.
-d : permite especificar el directorio de trabajo, creará automáticamente el directorio señalado.
-s : permite establecer el shell.

Ejemplos:

# useradd raul


# crea el usuario raul con las propiedades por defecto

# useradd -u 500 carlos


# crea el usuario carlos con su UID 500

# useradd –c ‘Juan Perez’ juan


#crea el usuario juan rellenando el comentario con “Juan Perez”

# useradd –d /home/soft msantos


# crea el usuario msantos con su directorio de trabajo “soft”

# useradd –s /bin/false operador1


# crea el usuario operador1 desactivando la posibilidad de ejecutar un shell

# useradd -D

GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel


# muestra las propiedades por defecto de los nuevos usuarios que se añadan

# grupo primario (no se emplea)
# directorio base de todos los usuarios
# número de días entre que el password expire y la cuenta se deshabilite
# fecha (YYYY-MM-DD) en que la cuenta expira
# shell que empleará el usuario para interactuar con el sistema
# directorio cuyo contenido se copiará en el directorio de cada usuario

# useradd -D -b /users


# cambia el directorio base por defecto de los nuevos usuarios a /users. El directorio /users debe existir previamente


Valores por defecto: son valores por defecto que serán utilizados para crear a los nuevos usuarios:

En RedHat o derivados, los valores por defecto están en el archivo /etc/default/useradd.

En Debian y derivados, los valores por defecto para añadir nuevos usuarios estan en el archivo /etc/adduser.conf

* Comando passwd : permite establecer y/o cambiar la contraseña de un usuario. También puede bloquear, desbloquear y deshabilitar una cuenta. Si se invoca sin argumentos se asume que se está cambiando la contraseña del usuario actual.

Algunas Opciones:

-d : deshabilita la necesidad de contraseña del usuario.
-l : bloquea la cuenta de un usuario añadiendo un signo de admiración (!) delante de su contraseña en el archivo /etc/shadow.
-u : desbloquea la cuenta de un usuario bloqueado.

Ejemplos:

# passwd raul
New UNIX password:
Retype new UNIX password:


# estableciendo una contraseña para raul
passwd: all authentication tokens updated successfully

# passwd -d raul


# deshabilita la cuenta del usuario raul eliminando su password

# passwd -l raul


# bloquea la cuenta del usuario raul poniendo un signo ! delante de su password en el archivo /etc/shadow

# passwd -u raul


# desbloquea la cuenta del usuario raul

* Comando userdel : permite eliminar definitivamente un usuario del sistema.

Ejemplos:

# userdel raul


# elimina el usuario raul manteniendo su directorio de datos.

# userdel -r raul


# elimina al usuario raul y borra su directorio base.

* Comando usermod : se emplea para modificar algunas propiedades de los usuarios como: el login, el directorio base, el shell que se inicia al conectarse, los grupos a los que pertenece, la fecha de expiración de la cuenta, etc. También bloquea y desbloquea una cuenta. Como opciones utiliza las disponibles en el comando useradd.

Ejemplos:

# usermod -s /bin/csh dominic


# coloca el shell csh para el usuario dominic

# usermod -G users,disk dominic


# señala como grupos secundarios de dominic a users y disk

# usermod -e 2005-10-20 dominic


# indica que la cuenta de dominic expirará el 20 de octubre del 2005

* Comando chfn : permite cambiar la información de contacto de un usuario. Esta incluye aspectos como: el nombre completo, la oficina de trabajo y los teléfonos. Se almacena en el archivo de usuarios /etc/passwd en la sección de comentarios.

Ejemplos:

# chfn dominic
Changing finger information for dominic.
Name []: Dominic Davis
Office []: Informática
Office Phone []: 22-0909
Home Phone []: 44-3025


# Cambia información del usuario dominic

# chfn
Changing finger information for root.
Name []:
Office []:
Office Phone []:
Home Phone []:


# cambia la información de contacto del usuario actua

* Comando chsh: cambia el shell del usuario especificado.

Ejemplos:
# chsh dominic
Cambiando la shell de acceso para dominic
Introduzca el nuevo valor, o presione enter para el predeterminado
Shell de acceso [/bin/bash]:

# chsh
Cambiando la shell de acceso para root
Introduzca el nuevo valor, o presione enter para el predeterminado
Shell de acceso [/bin/bash]:

* Comando chage : permite cambiar el password y los datos del usuario.

Algunas Opciones:
-d [dias] : Cuenta el número de días (desde 01-01-1970) transcurridos desde que cambió la contraseña por última vez
-E [fecha] : Modifica la fecha en que la cuenta del usuario expirará y será bloqueada
-l [dias] : Modifica cuantos días puede permanecer una cuenta con una contraseña expirada antes de ser bloqueada
-M [dias] : Modifica el número máximo de días durante los que es válida la contraseña de usuario. Pasados los días, el usuario deberá de modificarla
-m [dias] : Modifica el número mínimo de días entre cambio de contraseña
-W [dias] : Modifica el número de días que se avisará al usuario antes de cambiar la contraseña

Ejemplos:

# chage -E 2005-06-15 dominic


# la cuenta del usuario dominic expirará el 15.Junio.2005

# chage -l 7 dominic


# la cuenta del usuario dominic tendrá 7 días de comunicaciones antes de ser bloqueada

# chage -M 7 dominic


# se da 7 dias al usuario dominic para que pueda modificarla su contraseña, luego del cual deberá modificarla en forma obligatoria


COMANDOS PARA GESTIONAR GRUPOS

* Comando groupadd : permite añadir un grupo al sistema.

Ejemplos:

# groupadd admin




# groupadd –g 601 supervisor


# añade un grupo supervisor con GID 601

* Comando groupdel : permite eliminar un grupo del sistema, el grupo no podrá ser eliminado si este es el grupo primario de un usuario.

Ejemplo:
# groupdel admin

* Comando groupmod : permite modificar el nombre o GID de un grupo.

Ejemplos:

# groupmod –g 701 supervisor


# cambia el GID a 601 del grupo supervisor

# groupmod -n manager supervisor


# cambia el nombre del grupo supervisor a manager

* Comando gpasswd : permite administrar los grupos. Se puede utilizar para añadir y eliminar usuarios, señalar un administrador e indicar un password para el grupo.

Ejemplos:

# gpasswd -A raul admin


# señala como administrador del grupo admin al usuario raul

# gpasswd admin


# cambia el passwd del grupo admin

# gpasswd -a juan admin


# añade el usuario juan al grupo admin

COMANDOS ADICIONALES PARA GESTIONAR USUARIOS




Comando


Descripción




# whoami


# nos muestra que usuario somos




# groups [usuario]


# nos sirve para saber a qué grupos pertenecemos




# id [usuario]


# nos mostrará nuestro uid, gid, y el id del grupo al que pertenecemos




# su [usuario]


# sirve para convertirnos en otro usuario sin tener que salir de la sesión, así como para cambiar a ser un superusuario




# newgrp [grupo]


# sirve para cambiar de grupo, se utiliza para cambiar a un grupo que no pertenecemos




# who


# nos muestra la lista de usuarios dentro del sistema




# w [usuario]


# nos muestra la lista de usuarios dentro del sistema y también lo que están haciendo




# write [usuario]


# comando que se utiliza para comunicarse entre los usuarios del sistema




# wall [mensaje]


# permite enviar un mensaje a todos los terminales de los usuarios dentro sistema




# mesg [y|n]


#permite activar o desactivar la opción de recibir mensajes

miércoles, 1 de septiembre de 2010

Recuperar la Clave de MySQL en 5 Pasos

A Cuantos les ha pasado que van a realizar algun servicio o asesoria y se encuentran con la sorpresa de que a estos no les han dejado la contraseña del ROOT en MYSQL.
Aqui con esta guia podran recuperar esa contraseña en tan solo 5 pasos.

# 1: Detener el proceso del servidor MySQL.
root@servidor-ubuntu:~# /etc/init.d/mysql stop
* Stopping MySQL database server mysqld [ OK ]
root@servidor-ubuntu:~#
# 2: Iniciar el servicio/demonio de MySQL (mysqld) con la opcion –skip-grant-tables asi no pedira contraseña.
root@servidor-ubuntu:~# mysqld_safe --skip-grant-tables &
[1] 10702
root@servidor-ubuntu:~# nohup: ignoring input and redirecting stderr to stdout
Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[10741]: started
# 3: Conectar al servidor MySQL como el usuario root.
root@servidor-ubuntu:~# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1
Server version: 5.0.51a-3ubuntu5.4 (Ubuntu)

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>
Paso # 4: Configure la nueva contraseña de root.
mysql> use mysql;

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set password=PASSWORD("321") where User='root';
Query OK, 3 rows affected (0.03 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
Paso # 5: Salir y reiniciar el servidor MySQL
mysql> quit
Bye
root@servidor-ubuntu:~# /etc/init.d/mysql stop
* Stopping MySQL database server mysqld
STOPPING server from pid file /var/run/mysqld/mysqld.pid
mysqld_safe[11414]: ended
[ OK ]
[1]+ Done mysqld_safe --skip-grant-tables
Paso # 6: Reinicio de MySQL
root@servidor-ubuntu:~# /etc/init.d/mysql start
* Starting MySQL database server mysqld [ OK ]
* Checking for corrupt, not cleanly closed and upgrade needing tables.

root@servidor-ubuntu:~# mysql -u root -p

lunes, 30 de agosto de 2010

20 Configuraciones basicas para asegurar tu apache

Bueno, aqui les dejo para aquellas personas que deseen blindar su apache de manera que no sea tan vulnerable.
Esto lo lei en la Comunidad Dragonjarina xD (Dragonjar)
El post es buenisimo:

1.- Instalar los ultimos parches de seguridad: No hay sentido en poner cerraduras en las ventanas, si tu puerta está abierta de par en par.

2.- Ocultar el número de versión de Apache, y otra información sensible: Por defecto muchas instalaciones de Apache dicen qué versión de Apache está funcionando, qué sistema operativo, y los módulos de Apache que están instalados en el servidor. Los atacantes pueden utilizar esta información a su ventaja al realizar un ataque. Hay dos directorios que necesitas agregar, o corregir en tu archivo de ¨httpd.conf¨:
ServerSignature Off
ServerTokens Prod


El ServerSignature aparece en las páginas generadas por Apache, tal como ¨error 404¨, ¨listados del directorio¨, etc.
El directorio de ServerTokens se utiliza para determinar lo que pondrá Apache en el servidor en respuesta del HTTP header.


3.-Cerciorarse de que Apache esté funcionando bajo tu cuenta y grupo de usuario: Varias instalaciones de Apache hacen que funcione como usuario a ¨Nobody¨. Suponer un Apache, y con el servidor de correo funcionando como nobody puede permitir un ataque, a través de Apache, comprometiendo tu servidor de correo también:
User apache
Group apache

4.- Asegurarse de que los archivos fuera de web root no estén servidos: No quisiéramos que Apache pudiera tener acceso a ningún de los archivos fuera de la raíz. Si se asume que tu sitio web se coloca bajo un directorio (llamaremos a este /web), se debe instalar como sigue:

Observamos que fijamos Options None y AllowOverride None. Esto pondra off a todas las opciones y se eliminan para el servidor. Ahora tienes que agregarlas explícitamente para cada directorio que requiera una opción o una invalidación.

5.- Poner Off a la navegación de directorios: Puedes hacer esto con las opcionesde directivas dentro de una etiqueta del directorio.Fijar las ¨Options¨ a ¨None¨ o -¨Indexes¨.
Options -Indexes

6.- Poner a Off Server Side Includes: Tambien puedes hacer esto con las opciones de directivas dentro de una etiqueta del directorio. Fijar las ¨Options¨ a ¨None¨ o ¨-Includes¨.
Options -Includes
7.- Poner a Off la ejecucion de CGI: Fijar las ¨Options¨ a ¨None¨ o ¨-ExecCGI¨
Options -ExecCGI

8.- No permitir que Apache siga enlaces simbólicos: Fijar las ¨Options¨ a ¨None¨ o ¨-FollowSymLinks¨
Opciones - FollowSymLinks

9.- Poner a Off multiples opciones: Si deseas apagar a todas las opciones simplemente usa:
Options None
Si solo deseas poner a Off algunas opciones, solo pon un espacio en el directorio:
Options -ExecCGI -FollowSymLinks -Indexes

10.- Poner a Off la ayuda para los archivos de .htaccess: Esto se hace en una etiqueta del directorio, pero con el directorio de ¨AllowOverride¨. Fijarlo a ¨None¨.
AllowOverride None

Si deseas asegurarte de que no pueden ser descargados, y/o eliminados cambias el nombre por algo con excepción de .htaccess. Por ejemplo podríamos cambiarlo a .httpdoverride, y bloqueamos todos los archivos que comienzan con .ht de ser descargados, de la siguiente forma:



11.- Ejecutar mod_security: mod_security es un módulo práctico y estupendo de Apache escrito por Ivan Ristic, el autor de Apache Security desde O'Reilly press.
Puedes hacer lo siguiente con mod_security:

* Filtración simple
* Filtración basada expresión regular
* Validación de codificación del URL
* Validación de Unicode Encoding
* Auditoria
* Prevención del ataque de Null byte
* Upload memory limits
* Enmascarar la identidad del servidor
* Built in Chroot support
* Y más

12.- Inhabilitar cualquier módulo innecesario: Apache viene típicamente con varios módulos instalados. Estudia la documentación de los módulos de Apache y aprenderas lo que hace cada módulo. Muchas veces encontrarás que no necesitas tener activados algunos modulos.
Buscar las líneas en tus ¨httpd.conf¨ que contengan ¨LoadModule¨. Para inhabilitar el módulo solo debes agregar un # al principio de la línea. Para buscar los módulos que estan funcionando:
grep LoadModule httpd.conf
Aquí están algunos módulos que se instalan típicamente pero a menudo no son necesarios: mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex.

13.- Cerciorarte de que solamente Root tenga acceso a los config y a los binarios de Apache: Esto se puede hacer si asumimos que la instalación de tu Apache está situada en ¨/usr/local/apache¨ como sigue:
chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache

14.- Bajar el valor del time out: Por defecto el directorio del ¨Timeout¨ es fijado a 300 segundos. Puedes disminuirlo ayudando a atenúar los efectos potenciales de un ataque Denial of Service.
Timeout 45

15.- Limitación de peticiones grandes: Apache tiene varios directorios que permiten que limites el tamaño de una petición. Esto puede también ser útil para atenuar los efectos de un ataque Denial of Service.
Un buen lugar a comenzar es el directorio de ¨LimitRequestBody¨. Este directorio está fijado a ilimitado por defecto. Si estás permitiendo subidas de archivos de no más de 1MB, podrías fijar este ajuste en algo como:
LimitRequestBody 1048576
Algunos otros directorios a mirar son ¨LimitRequestFields¨, ¨LimitRequestFieldSize¨ y ¨LimitRequestLine¨. Estos directorios se fijan a algo razonable para la mayoría de los servidores, pero puedes desear limitarlos para adaptarlos lo mejor posible a tus necesidades.

16.- Limitación del tamaño de XML Body: Si estás ejecutando el ¨mod_dav¨, entonces puedes desear limitar el tamaño máximo de un cuerpo de la petición de XML. El directorio de ¨LimitXMLRequestBody¨ está solamente disponible en Apache 2, y su valor prefijado es 1 millón de octetos (aproximadamente 1 Mb). Muchos tutoriales tendrán fijado este valor a 0, lo que significa que los archivos de cualquier tamaño pueden ser subidos; lo que puede ser necesario si estás utilizando WebDAV para subir archivos grandes, pero si lo estás utilizando simplemente para el control del source, puedes fijar un límite superior, tal como 10 Mb:
LimitXMLRequestBody 10485760

17.- Limitación de concurrencia: Apache tiene varios ajustes de la configuración que se pueden utilizar para ajustar la dirección de peticiones concurrentes. El ¨MaxClients¨ es el número máximo de los pequeños procesos que serán creados para servir peticiones. Esto se puede fijar demasiado alto si tu servidor no tiene bastante memoria para manejar una gran cantidad de peticiones de concurrentes.
Otros directorios tales como ¨MaxSpareServers¨, ¨MaxRequestsPerChild¨, y sobre Apache2 ¨ThreadsPerChild¨, ¨ServerLimit¨, y ¨MaxSpareThreads¨ son importantes de ajustar para emparejar tu sistema operativo, y el hardware.

18.- Acceso de restricción por el IP: Si tienes un recurso que deba ser accesado por cierta red, o dirección IP puedes hacer cumplir esto en tu configuración de Apache. Por ejemplo si deseas restringir el acceso a tu Intranet para permitir solamente la red 176.16.x.x:
Order Deny,Allow
Deny from all
Allow from 176.16.0.0/16
O por IP:
Order Deny,Allow
Deny from all
Allow from 127.0.0.1

19.- Ajustando la configuracion de KeepAlive: KeepAlive es activado por defecto y debes dejarlo encendido, pero puedes considerar el cambiar¨MaxKeepAliveRequests¨ que por defecto está fijado en 100, y ¨KeepAliveTimeout¨ que por defecto está en 15. Analizando tus ficheros a diario podrás determinar los valores apropiados.

20.- Hacer Funcionar Apache en un ambiente de Chroot:¨el chroot¨ permite que ejecutes un programa en su propio ambiente aislado. Esto evita que un defecto dentro en un servicio pueda afectar todo lo demás en el servidor. mod_security se ha construido en ayuda del chroot. Hace el proceso tan simple como agregar un directorio del mod_security a tu configuración:
SecChrootDir /chroot/apache

martes, 3 de agosto de 2010

Aprendiendo Python

Ayer por la noche, me puse a mirar algunos pequeños programas desarrollados en python y me llamo la atencion por las pocas lineas de codigo que se necesita para crear una Aplicacion.
Voy a hacer un ejemplo de como hacer un Hola Mundo en Java y en Python.
Primero comenzare con JAVA:

public class ClaseNombre{
public static void main(String args[]){
System.out.println("Hola Mundo");
}
}

5 Lineas en total.
Ahora en Python:
print "Hola Mundo"
1 Linea.
Otra cosa que me llamo la atención de este lenguaje es que no se utilizan llaves para los condicionales, metodos o bucles. Pero eso si todo tiene que estar bien IDENTADO.
Ejemplo:
numero = 18
if numero < 19:
print "Es menor que 19"
else:
print "NO es menor que 19"

>>Salida en pantalla , Es menor que 19

Ademas que no existe el famoso switch , Python no utiliza punto y coma al final de cada linea.

Fuera de todo esto tambien es orientado a objetos y soporta Herencia multiple.
permite crear paquetes , librerias y sus funciones son declaradas de esta manera:

def mifuncion(param1,param2):
return param1+param2

y la llamamos de la siguiente forma:
resultado = mifuncion(1,5)
Ademas de poder definir valores por defecto en nuestros metodos en caso no le pasen la cantidad de parametros requeridos a este ultimo.
Ej:
def mifuncion2(param1, param2 = 1):
return param1 + param2

y lo podemos llamar :

result = mifuncion2(1,5)
Resultado: 6

o

result = mifuncion2(9)
Resultado: 10

En Otro post realizare un ejemplo de Sockets en Python.
Saludos

viernes, 25 de junio de 2010

Kernel de Minix, una arquitectura ARP

En los últimos años han ido apareciendo cada vez más aparatos dotados
de pequeñas unidades de procesamiento. Se pueden encontrar sistemas empotrados
en infinidad de aparatos, la reciente aparición de los ultraportátiles
o la creciente capacidad de procesamiento de los teléfonos móviles necesitan
procesadores distintos a los que podemos encontrar en cualquier computadora
de sobremesa. Estos sistemas, destinados a aparatos portátiles, han de cumplir
unos estrictos requisitos de consumo de energía, sin renunciar por ello a la potencia
de cálculo.
De las diversas familias de procesadores destinadas a satisfacer esta creciente
demanda, destaca la arquitectura ARM, con un dominio abrumador en mercados
como la telefonía móvil, reproductores MP3, consolas portátiles, PDAs
y una infinidad de aparatos más. Esta arquitectura combina diversos factores
que la convierten en idónea para estos sistemas: bajo consumo, buenas prestaciones
de cálculo, una arquitectura RISC que facilita la programación y extensiones
que permiten reducir el tamaño del código y un diseño sencillo.
No sólo al hardware destinado a los sistemas empotrados y a los aparatos
portátiles se le exige un bajo consumo de recursos, también el software destinado
a ser ejecutado en esas plataformas ha de funcionar en sistemas con recursos
limitados: poca memoria, no disponer de sistemas de almacenamiento de
datos, etc. Mientras estos sistemas eran dedicados a tareas relativamente sencillas,
la aproximación más habitual era el desarrollo de programas ad-hoc, sin
embargo, la creciente complejidad de estos aparatos hace necesario un software
cada vez más complejo.
Así pues, es necesario buscar un compromiso entre la necesidad de un software
complejo y un sistema sin demasiados recursos, en especial, poca capacidad
de memoria. Mientras que algunos de estos dispositivos tienen sus propios
sistemas operativos, otros fabricantes han optado por utilizar sistemas operativos
como Linux, diseñados para ser ejecutados en entornos menos limitados, y
modificarlos para funcionar en estos dispositivos. Sin embargo, esta no parece
ser una solución muy acertada, ya que, a pesar de poder realizarse ciertas optimizaciones,
son sistemas operativos pensados para un entorno completamente
distinto, con demasiada complejidad. Esta complejidad implica dos cosas: un
gran volumen de código y una mayor posibilidad de contener algún tipo de
error, asumiendo una cantidad mínima de errores por línea de código.
Minix 3 es un sistema operativo que se ha desarrollado con la idea de los
dispositivos empotrados en mente. Esto hace que disponga de múltiples características
deseables en este tipo de arquitecturas. Para empezar, el sistema al
completo -kernel, servidores, algunos drivers y varias utilidades de usuario- es
capaz de ejecutarse en 16MB de RAM, y aún pueden eliminarse componentes
no esenciales para reducir el espacio ocupado. Además, uno de los objetivos
principales del diseño de Minix 3 es la fiabilidad y la tolerancia a fallos. Cada
dispositivo empotrado requiere el desarrollo de controladores específicos para
su funcionamiento, que deben integrarse en el sistema operativo. Los estudios
han demostrado que el código de los controladores contiene entre 3 y 7 veces
más fallos que el resto. Esto hace que un sistema completo pueda quedarse
totalmente bloqueado a causa de un error en alguno de sus controladores de
dispositivo. En Minix 3, sin embargo, gracias a su arquitectura microkernel y en
capas, es capaz de aislar este tipo de fallos e incluso solucionarlos sin intervención
del usuario mediante el servidor de reencarnación y una política de
planificación adecuada.
Otro punto a favor de Minix 3 es su modularidad. Debido a su estructura
por capas, es sencillo incluir o eliminar servidores y controladores de dispositivos
incluso sin tener que recompilar el kernel. Esto permite adaptar Minix a
cada sistema empotrado con mayor facilidad, lo que sumado al resto de sus
ventajas lo convierten en un sistema operativo idóneo para este tipo de entornos.
Estas ventajas de Minix 3 para el mundo de los sistemas empotrados fue
una de nuestras motivaciones a la hora de iniciar el proyecto: a pesar de ser
un campo donde iniciativas como las distribuciones Debian para ARM son ya conocidas, creemos que Minix puede aportar interesantes alternativas como
plataforma de desarrollo de nuevos sistemas empotrados, en especial de
aquellos que dispongan de menos memoria, o que tengan fuertes requisitos de
fiabilidad. Minix 3 ofrece la posibilidad de implantar un sistema de tipo Unix
en entornos de recursos limitados.