domingo, 3 de abril de 2011

Final

Bueno creo que this is the end, and puedo decir que hay muchas cosas que me falto publicar, pero lo mas seguro es que haga algunos documentos mas completos y como ultimo mensaje solo les digo "Luchen siempre por sus dreams" tarde o temprano llegaran.

Estoy bien con mi familia y eso es lo mejor que pueda existir.

Yo ahora tomare el camino para trabajar de lleno en la seguridad y aplicar todo lo que he aprendido en la vida ;)

So long!

Respaldo FTP Servidor web

Ahora vamos ha realizar la misma rutina de respaldo pero mediante ftp :) ahora podemos guardarlo en un servidor Windows sin problemas

#file de respaldo
fecha=`date +%Y%m%d`
pathi="/home/soporte"
cd $pathi
if [ -f *.tar.gz ]; then
echo "ya existe un archivo"
rm *.tar.gz
fi
tar -czf wwwnok-$fecha.tar.gz /var/www /var/lib /etc &> /dev/null

logger "** Realizando transferencia **"

HOST='192.168.0.232'
USER='soporte.mexico'
PASSWD='Samba3%2.Fidelitymkt'
FILE="wwwnok-"$fecha.tar.gz

ftp -v -n $HOST <<
END_SCRIPT
user $USER $PASSWD
binary
cd /Respaldos_servidores/servidores/nokia
put $FILE
quit
END_SCRIPT

logger "** Transferencia del backup finalizada **"

Crontan tareas automaticas

El archivo de /etc/crontab nos sirve para ejecutar tareas de forma automatica en este caso pondremos el script que hicimos de respaldo :).

Cada entrada en el archivo de crontab comienza con 5 campos que especifican cuando se debe ejecutar el comando (minuto, hora, dia del mes, mes y dia de la semana).
Podemos colocar un asterisco en lugar de un numero de esta forma cron lo imterpreta como un comodin que representa todos los valores posibles. En el campo dia de la semana se puede usar 7 o 0 para representar al domingo.

Aqui les dejo un ejemplo

10 14 * * 1,2,3,4,5 root /bin/sh /etc/init.d/respal.sh

Esta linea ejecutara el programa respal.sh a las 14:10 h de cualquier dia (numerico) y cualquier mes, los dias de la semana L-V (1,2,3,4,5), como el usuario root con el interprete /bin/sh.

Saludos!!!!

sábado, 2 de abril de 2011

Respaldos servidores GNU/Linux

En este script de respaldo usaremos ssh para hacer un respaldo de un servidor web excluyendo la carpeta de secc/premios en /var/www.

Como debe ser todo automatizado necesitamos que nuestro equipo se conecte al servidor de respaldo (en este caso debe GNU/Linux tambien).

Primero vamos a utilizar el comando

SRV-WEB02:~# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
62:7c:0b:96:a6:03:fe:7f:c8:e4:1b:c8:25:47:f8:6a root@SRV-WEB02

Esto va a generar el archivo .ssh/id_rsa, este archivo lo debemos de copiar en el sistema remoto.

SRV-WEB02:~# ls .ssh/
id_rsa id_rsa.pub known_hosts

SRV-WEB02:~# scp .ssh/id_rsa soporte@192.168.0.200:.ssh/authorized_keys


Con esto ya tendremos la conexion lista para cuando requiera la conexion.


#!/bin/bash
#respal.sh
#nombre
fecha=`date +%Y%m%d`
#ruta local para generar el archivo de respaldo
ruta="/home/soporte"
cd $ruta
#compureba la existencia de algun respaldo anterior y lo elimina
if [ -f *.tar.gz ]; then
echo "ya existe un archivo"
rm *.tar.gz
fi
#Generamos el archivo tar.gz que incluye el respaldo
tar -czf wwwtel-$fecha.tar.gz /var/www /var/lib /etc --exclude secc/premios
&> /dev/null

#Copia el archivo al servidor remoto
scp wwwtel-$fecha.tar.gz soporte@192.168.0.200:/home/soporte/telcel
rm wwwtel-$fecha.tar.gz


Creo que solo faltaria agregar la rutina al crontab para que se ejecute a diario por ejemplo.

FTP jail BSD

Basicamente serian los mismos pasos que en GNU/Linux lo unico que cambia es la creacion del usuario.

El comando que usamos aqui es

pw group add colombia
pw user add col -g colombia -d /usr/local/apache2/htdocs -s /usr/sbin/nologin


Saludos!!!

FTP jail GNU/Linux

Para instalar un servidor ftp en GNU/Linux y tener a nuestros usuarios restringidos a cierto directorio del cual no puedan subir podemos hacer de la siguiente manera con proftpd:

Primero instalamos proftpd

Despues habilitamos estas directivas en el archivo de configuracion proftpd.conf

# Use this to jail all users in their homes
DefaultRoot ~

# Users require a valid shell listed in /etc/shells to login.
# Use this directive to release that constrain.
RequireValidShell off


Ahora creamos los usuarios, digamos que el usuario lo solicito el personal de otro pais donde requieren acceso

groupadd chile
useradd -g chile adan
usermod -s /bin/false adan
usermod -d /homedirectory adan


En este punto debemos agregar el usuario adan al grupo de ftp, esto se puede realizar editando el archivo /etc/group

En mi archivo aparece asi
ftp:x:118(puede ser otro numero para ustedes):

Al agregarlo nos queda
ftp:x:118:adan

Con esto nos permite las conexiones al servidor por el puerto 21 con jail y por el puerto 22 con el mismo usuario les marcaria error.

Si aun permite la conexion del usuario al puerto 22 y no aplica el jail necesitamos verificar la shell del usuario, la cual en ocasiones puede quedar como :

usermod -s /bin/nologin adan

Es todo por el momento :)

Evitar ficheros suid

Los ficheros suid se ejecutan con los privilegios del propietario en lugar de utilizar los privilegios del usuario que ejecuta el programa.

Un claro ejemplo de esto lo vemos en el fichero passwd el cual tiene activado el fichero suid

kerio@bt:~$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 32988 2008-12-08 03:17 /usr/bin/passwd

si el usuario kerio ejecuta el programa passwd este programa es lanzado con los privilegios de root ya que root es el propietario del archivo.

Por lo tanto en la mayoria de los casos se trata de evitar que existan ficheros suid donde el propietario sea root (aunque el sistema GNU/Linux utiliza varios archivos de este tipo).

Por lo menos podriamos restringir la creacion de estos ficheros en algunas partes del sistema, lo cual lo podemos hacer de la siguiente forma.

Agregaremos la opcion nosuid a /etc/fstab en las particiones donde queremos evitar estos archivos por ejemplo:

/dev/sda5 /home ext3 defaults,nosuid 0 2
/dev/sda8 /tmp ext3 defaults,nosuid 0 2

montamos las particiones de nuevo

mount -o remount /tmp
mount -o remount /home

Y con esto ya estara bloqueado la ejecucion de archivos suid en estas particiones. :)

viernes, 1 de abril de 2011

Usuarios Mysql

Bueno en este post pondre algunas cosas relacionadas a Mysql, lo primero sera crear una base de datos en consola y despues agregar un usuario para la base con los permisos especificos.

Debemos entrar a la consola de mysql y desde ahi ejecutamos el comando (en el ejemplo coloco que se trate de utf-8 que es el comun para espanol)

orion#mysql -u root -p

mysql> CREATE DATABASE `name_database` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;



Muy bien y despues de crear la base de datos vamos a agregar el usuario de esta, para hacerlo ejecutamos alguno de los siguientes comandos, deacuerdo al que cumpla con nuestros requisitos

Para darle acceso a un usuario con clave a una base de datos, los arteriscos se colocan si queremos que el usuario tenga acceso a todas las tablas de la base, pueden ser reemplazados con name_database.name_table

Esta es una conexion valida para el usuario kerio hacia todas las tablas de todas las bases de datos mientras sea una conexion desde el equipo(por eso es localhost).

mysql> GRANT ALL PRIVILEGES ON *.* TO 'kerio'@'localhost'
->
IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

Esta es una conexion valida para el usuario kerio hacia todas las tablas de todas las bases de datos desde cualquier maquina.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'kerio'@'%'
-> IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

Aqui solo se conceden los privilegios especificos (existen varios)
mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';
mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';


Clave de Mysql
En algunas ocasiones necesitamos cambiar la clave del usuario root, aqui les dejo como hacerlo. La primera es si ya contamos con una sesion de root en mysql pero queremos cambiarla y la segunda es para hacerlo en caso de perder la clave y que no tengamos acceso a una sesion

Usuario root
mysql> UPDATE mysql.user SET
Password=PASSWORD('newpwd')
-> WHERE User='root';
mysql> FLUSH PRIVILEGES;


How to Reset a MySQL Password in 5 Easy Steps

1. Stop the mysqld daemon process.
/etc/init.d/mysqld stop
2. Start the mysqld daemon process with the --skip-grant-tables option.
/usr/sbin/mysqld --skip-grant-tables
3. Start the Glossary Link mysql client with the -u Glossary Link root option.
mysql -u root
4. Execute the UPDATE mysql.user SET Password=PASSWORD('nueva_clave') WHERE User='root';
5. Execute the FLUSH PRIVILEGES; command.


Para revocar los permisos de usuarios utilizamos el siguiente comando (podemos cambiar los asteriscos como name_database.name_table)

REVOKE ALL PRIVILEGES ON *.*, GRANT OPTION FROM 'kerio'@'localhost';
REVOKE ALL PRIVILEGES ON *.*, GRANT OPTION FROM 'kerio'@'%';

Para borrar un usuario tenemos el comando
DROP USER usuario;

Bueno creo que es todo de momento, saludos :)

lunes, 28 de marzo de 2011

Cambiar permisos solo a directorios o archivos

En un ambiente de programacion web a veces es conveniente delimitar el uso de los archivos para ciertos grupos de usuarios.

Entre tantos archivos es complicado cambiar los permisos de una forma recursiva ya que por ejemplo un directorio requiere permisos de ejecucion +x, pero un archivo comun no lo requiere.

Por lo tanto podemos realizar una busqueda y cambiar los permisos para solo ciertos grupos de archivos con estos comandos

find ./ -type d -exec chmod 775 \{\} \;
find ./ -type f -exec chmod 664 \{\} \;

El primero sirve para cambiar los permisos unicamente a los directorios y el segundo para los archivos comunes.

Coloco los mismos permisos de usuario y grupo porque en la mayoria de las ocasiones un mismo grupo de trabajo requiere manipular archivos en el mismo directorio.

Cambiar password de Mac

Por si alguna vez olvidamos la clave de nuestra Mac, hay una manera muy sencilla de cambiarla :)

Reiniciamos la Mac y cuando este por iniciar presionamos Manzana + C
y ejecutamos los siguientes comandos

* #sh /etc/rc
* #passwd USUARIO
* #reboot

:)

Host GNU/Linux

Para configurar el hostname de GNU/Linux lo podemos hacer de la siguiente manera:

En el ejemplo el nombre del host es nico y el dominio es keled.mx

Primero verificamos en el archivo /etc/hostname que aparezca el nombre correcto.

root@nico:~# cat /etc/hostname
nico
root@nico:~#

El hostname se puede modificar pero requiere de reiniciar el equipo

Despues agregamos la linea correcta para el host completo, primero va el nombre del host con dominio despues el localhost y al final repetimos el nombre del equipo

root@nico:~# cat /etc/hosts
127.0.0.1 nico.keled.mx localhost.localdomain localhost nico

ahora si lo verificamos

root@nico:~# hostname -f
nico.keled.mx

Esto nos va a servir por ejemplo cuando configuremos el servicio de mail ya sea postfix o sendmail. Ya que la mayoria de los correos requieren que este configurado correctamente el host de la maquina, ademas que nos ayudara a evitar que catalogen como Spam los correo que salgan del equipo.

:)

Apache

Algunas de las cosas que he utilizado con Apache son las siguientes

Para cambiar la cantidad de informacion que muestra Apache en cualquier consulta Get es hacer lo siguiente

Cambiamos la cantidad de informacion en el banner ServerTokens, comentamos o cambiamos el texto de Full por Prod

/etc/apache2/conf.d/security:26:ServerTokens Prod
/etc/apache2/conf.d/security:27:#ServerTokens Full


-----------------------------------------------
Tambien podemos cambiar la directiva ServerSignature que se muestra en los listados de directorio asi como cuando ocurre algun error

/etc/apache2/conf.d/security:ServerSignature Off

---------------------------------
Para quitar el listado de directorios modificamos el archivo /etc/apache2/sites-available/default y quitamos Indexes en la configuracion del directorio que deseamos bloquear el listado, muy similar a esto

#Options Indexes FollowSymLinks MultiViews
Options FollowSymLinks MultiViews


:)...

Capacitacion en Seguridad Informatica

Este documento fue el que use para brindar la capacitacion basica sobre Seguridad Informatica en la empresa donde trabajo, mas que nada es para concientizar a los usuarios sobre este tema, posiblemente le sirva a alguien mas.

Saludos

Fin del Blog

Hello everybody!!!

Ahora por fin pienso terminar el blog y para despedirme dejare algunas de las cosas que he desarrollado (en varios aspectos) para que este el antecedente :)

So long!