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 :)