Rincón Informático

Un rincon para hablar sobre GNU/Linux, seguridad informatica, y mas!!

Monitorear procesos en GNU/Linux

Posted by Epsilon On Enero - 19 - 2010

En entornos Unix existen  herramientas para todos los gustos que nos ayudan a monitorear o  administrar procesos,  en esta entrada nombraremos algunas aplicaciones nativas de Unix y otras que no lo son, y que nos sirven para visualizar los procesos del sistema su pid,  y otra informacion importante.

Comando PS

Es un comando muy util y con muchas opciones, para listar los procesos que se estan corriendo en el sistema podemos hacer lo siguiente:

ps -e

ps -A

Con cualquiera de los dos comandos anteriores podemos listar  los procesos con su respectivo PID.  Si deseamos mas informacion como:   el usuario, la carga de cpu y memoria, el tiempo y por supuesto su nombre con la ruta del ejecutable usamos los siguientes parametros :

ps -aux

Ahora si deseamos encontrar un proceso  en especifico podemos usar grep

ps -e | grep guake

Herramienta Top

Existe una herramienta un poco mas interactiva que viene por defecto en todas las  distribuciones de GNU/Linux llamada top, esta aplicacion nos muestra en tiempo real toda la informacion relevante de cada proceso que se esta ejecutando, para lanzarlo solo basta escribir en consola top:

top_procesos

En la imagen vemos claramente alguna informacion importante como:

  • PID
  • USUARIO
  • %CPU
  • %MEMORIA
  • NOMBRE

Herramienta Watsup

Por otra parte si no eres muy amante de la consola, watsup es la herramienta perfecta para ti,  es un monitor de procesos  grafico de codigo abierto (GPL), para descargarlo puedes ir a este enlace para instalarlo debemos seguir estos sencillos pasos:

make
make install

Para ejecutarlo simplemente escribes en una consola watsup  o tecleas alt+f2 y escribes watsup, inmediatamente nos saldra la pantalla en la cual podemos ver los proceso actuales e incluso matar el que nosotros deesemos:

proceso-watsup

Generalmente algunas personas instalamos diversos servicios que necesitamos en nuestra maquina  como mysql, ftp, ssh, web, entre otros, con diversos fines, ya sea  por  trabajo, curiosidad, conocimiento o lo que sea. Sin embargo, estos servicios cuando se instalan por defecto, se configura de tal forma que siempre se inicien cuando el sistema operativo arranque.  No obstante muchas veces no necesitamos estos servicios y lo único que hacen es consumir memoria  y cpu. Existe un paquete en los repositorios llamado chkconfig el cual nos ayuda a configurar el inicio del sistema, es decir,  gestionar que servicios  deseamos que se levanten al momento en el que se inicia nuestro GNU/Linux. Recordemos que  es bueno desactivar los servicios que no se van a utilizar  no solo por rendimiento sino por seguridad de nuestra información. Para instalar  el paquete chkconfig hacemos uso del comando mágico:

apt-get install chkconfig

Algunas opciones son:

  • -l Lista todos los servicios.
  • -a agrega un servicio al inicio.
  • -d elimina un servicio al inicio.
  • -e edita el servicio deseado.
  • Para ver con mas detalle puede revisar el manual que trae el comando.

Por ejemplo si quisieramos que mysql no se ejecutara al inicio  haríamos esto en una consola como root:

chkconfig -d mysql

Y si por el contrario quisieramos agregar a un servicio como ssh al inicio del sistema:

chkconfig -a ssh

Como ven es muy sencillo gestionar los servicios en GNU/Linux,  existe una herramienta que hace lo mismo  que chkconfig pero de forma gráfica, se trata de bootup-manager o mas conocida como bum, esta herramienta se encuentra en los repositorios, se instala y simplemente se seleccionan los servicios que se arrancaran al inicio.

apt-get install bum

startup-manager

Optimizando el servidor Mysql

Posted by Epsilon On Enero - 9 - 2010

Trabajando en un proyecto personal (que pronto les contare en que consiste),  me surgió la necesidad de optimizar al máximo el servidor MySQL, es decir, necesitaba configurar el servidor MySQL  de una forma adecuada para que soportara todo el trabajo necesario.  Navegando en la red, me encontré con este articulo,  en el cual nos comparten una configuración óptima para nuestro servidor  MySQL (lo que estábamos buscando).  Implemente este archivo de configuración,  y desde ese momento mi servidor ha mejorado en cuanto a rendimiento, disponibilidad y eficiencia.

Por esta razón comparto el archivo de configuración por si  alguno tiene el mismo problema, en este archivo se hacen modificaciones principalmente, en el tamaño de la memoria,  conexiones concurrentes y otros aspectos:

[mysqld]
 socket=/path/to/mysql.sock
 datadir=/var/lib/mysql
 skip-locking
 skip-innodb
 # MySQL 4.x has query caching available.
 # Enable it for vast improvement and it may be all you need to tweak.
 query_cache_type=1
 query_cache_limit=1M
 query_cache_size=32M
 # max_connections=500
 # Reduced to 200 as memory will not be enough for 500 connections.
 # memory=key_buffer+(sort_buffer_size+read_buffer_size)*max_connections
 # which is now: 64 + (1 + 1) * 200 = 464 MB
 # max_connections = approx. MaxClients setting in httpd.conf file
 # Default set to 100.
 #max_connections=200
 #interactive_timeout=180
 interactive_timeout=100
 #wait_timeout=180
 #wait_timeout=100
 # Reduced wait_timeout to prevent idle clients holding connections.
 #wait_timeout=30
 wait_timeout=15
 connect_timeout=10
 # max_connect_errors is set to 10 by default
 #max_connect_errors=10
 #table_cache=256
 #table_cache=1024
 # Checked opened tables and adjusted accordingly after running for a while.
 table_cache=512
 #tmp_table_size=32M by default
 #thread_cache=128
 # Reduced it to 32 to prevent memory hogging. Also, see notes below.
 thread_cache=32
 # key_buffer=258M
 # Reduced it by checking current size of *.MYI files, see notes below.
 key_buffer=128M
 # Commented out the buffer sizes and keeping the default.
 # sort_buffer_size=2M by default.
 #sort_buffer_size=1M
 # read_buffer_size=128K by default.
 #read_buffer_size=1M
 # read_rnd_buffer_size=256K by default.
 #read_rnd_buffer_size=1M
 # myisam_sort_buffer_size=8M by default.
 #myisam_sort_buffer_size=64M
 # thread_concurrency = 2 * (no. of CPU)
 thread_concurrency=2
 # log slow queries is a must. Many queries that take more than 2 seconds.
 # If so, then your tables need enhancement.
 log_slow_queries=/var/log/mysqld.slow.log
 long_query_time=2
 [mysql.server]
 user=mysql
 basedir=/var/lib
 [safe_mysqld]
 err-log=/var/log/mysqld.log
 pid-file=/var/run/mysqld/mysqld.pid
 open_files_limit=8192

[mysqldump]
 quick
 max_allowed_packet=16M
 [mysql]
 no-auto-rehash
 # Remove the next comment character if you are not familiar with SQL
 #safe-updates
 [isamchk]
 key_buffer=64M
 sort_buffer=64M
 read_buffer=16M
 write_buffer=16M
 [myisamchk]
 key_buffer=64M
 sort_buffer=64M
 read_buffer=16M
 write_buffer=16M
 [mysqlhotcopy]
 interactive-timeout 
 [client]
 socket=/path/to/mysql.sock

Para  aplicar esta configuración,  lo podemos hacer de varias formas:

  • Abrimos el archivo /etc/mysql/my.cnf borramos todo su contenido y por ultimo pegamos el contenido de esta configuracion. ( No sobra decir que debemos guardar).
  • Por otro lado  podemos borrar el archivo /etc/mysql/my.cnf, descargamos el nuevo archivo desde aca y lo copiamos en la misma ubicacion.

nota: cabe aclarar que no soy un experto en el tema, simplemente doy mis comentarios apartir de la experiencia que tuve usando esta configuracion,   si alguien tiene un archivo my.cnf mas optimizado seria esplendido que lo compartiera con todos nosotros

Para mas informacion pueden ir a este enlace

SendIP envío arbitrario de paquetes

Posted by mirphak On Enero - 5 - 2010

outline sharp SendIP  envío arbitrario de paquetes

SendIP es una herramienta que permite enviar paquetes de red de manera arbitraria creada por el grupo  Project Purple , posee algunas desventajas  (usabilidad, numero de protocolos soportados ..)  frente a otros generadores de paquetes  como scapy ya que oficialmente no ha sido actualizada desde el 2003.

Descargar (gmake && make install) *BSD

Uso:

sendip [-v] [-d data] [-h] [-f datafile] [-p module] [module options] hostname

Más  Aquí

Ejemplo: (while do ; )

sendip -p ipv4  -p tcp -ts r -td 80  192.168.2.1

-p ipv4 =  indica el módulo ipv4  (ip origen random)

-p tcp = protocolo

-ts r = puerto origen (random)

-td = puerto destino

ip destino

Módulos : ipv4 ipv6 icmp tcp udp bgp rip ntp

Uzbl: Un navegador web liviano, minimalista y muy personalizable

Posted by Epsilon On Diciembre - 29 - 2009

Si estas cansado de el amplio consumo de CPU y memoria de tu navegador preferido (ya sea Firefox, opera, chromium, etc..) te presento  UZBL un navegador web de código abierto  muy minimalista,  que cumple con la filosofia Unix:

Escribir programas que hacen una cosa y la hacen bien. Escribir programas para trabajar juntos. Escribir programas para manejar flujos de texto, ya que es una interface universal

Antes de empezar con el proceso de instalación hay que aclara que si eres de los usuarios que te gusta que tu navegador tenga un sin fin de addons y servicios adicionales, este no es el navegador para ti, por el contrario si eres un usuario el cual solo le interesa que tu navegador sirva para lo que fue diseñado (abrir paginas web), esta aplicacion sera perfecta para ti.

Ventajas de Uzbl

  • 100%  Personalizable (editar menús, cambiar colores, atajos)
  • rápido
  • soporta flash player
  • Soporta pestañas
  • Al ser tan minimalista no quiere decir que no tenga, marcadores, historiales.
  • navegacion con el teclado.

Instalación de UZBL

Ya que este proyecto es demasiado nuevo ( marzo de 2009 ) solo se encuentra en los repositorios de archlinux, gentoo, ubuntu, la versión testing de debian (squeeze)  y por supuesto en la versión inestable (sid),  para los usuarios de estas versiónes, pueden instalar uzbl de esta forma:

apt-get install uzbl

Sin embargo para lo usuarios de otras distribuciones, las cuales no tengan uzbl en sus repositorios, necesitaran hacer lo siguiente:

apt-get install git-core git-arch git-cvs git-daemon-run git-doc git-email git-gui git-svn gitk gitweb libwebkit-dev

Ahora descargamos las fuentes desde la pagina web oficial:

git clone git://github.com/Dieterbe/uzbl.git

Siguiente punto compilar:

make
make install-uzbl-core
make install-uzbl-browser
make install-uzbl-tabbed

Por ultimo debemos copiar el archivo de configuracion tomando como base un ejemplo, para esto hacemos lo siguiente:

cp /usr/local/share/uzbl/examples/config/uzbl/config /home/tu_usuario/.config/uzbl/config
nota: si la carpeta .config o uzbl no se encuentran en tu home, debes crearlas.

Es importante tener en cuenta que este archivo es parte fundamental del navegador, en el se encuentra toda la configuracion  y es alli donde debemos modificar lo que deseamos, desde la apariencia hasta los atajos del teclado.

Usando el navegador web uzbl

Despues de tenerlo instalado solo basta ejecutarlo, dependendiendo de lo que queramos ejecutamos:

uzbl-tabbed -> navegacion con pestañas
uzbl-brower -> navegador simple

algunos atajos de teclado son (recuerda que puedes cambiarlos a tu antojo):

j -> baja la pagina
k -> Sube pagina
h -> corre hacia la izquierda
l ->  corre hacia la derecha
b -> Pagina atras
m -> pagina adelante
o  -> abrir pagina (despues de presionar o digita la url)
r -> actualizar

Aunque llevo poco probandolo  me parece muy bueno, sencillo  y agradable (nada de molestas barras), y me gusto mucho por lo configurable, cada uno puede  adecuarlo a su gusto, por ultimo dejo un screenshot del menu de click derecho que configure.

Free Image Hosting at www.ImageShack.us

No soy un guru manejando este navegador, pero seria bueno ir probandolo a fondo y conociendo sus otras caracteristicas que deben ser muchas mas, esto es simplemente un abrebocas a que se animen a probarlo  y nos cuenten sus experiencias.

Script para enviar Spam o MailBomber

Posted by Epsilon On Diciembre - 27 - 2009

Algunas veces es necesario hacer un poco de spam por diferentes motivos: SEO, dinero etc.  estando en algun canal de IRC algún usuario (que no recuerdo su nombre) compartio este script el cual sirve para enviar un mensaje a muchos destinatarios diferentes, (si tienen maldad, se imaginan si mandamos el mismo mensaje a  un solo destinatario?).  Su funcionamiento es muy sencillo, solo necesitamos un archivo de texto  con todos los destinatarios y tener python instalado en nuestro PC . Después de tener todo esto listo, solo basta ejecutar esto en una consola:

chmod 777 mail.py
./mail.py destinatarios.txt

Al ejecutarlo el script nos pedirá  los datos de autenticación de la cuenta que va hacer el papel de remitente,  el numero de mails a enviar (parametro que no funciona como debería hacerlo),  el asunto y cuerpo del mensaje, inmediatamente  le entregamos estos datos, el script empieza hacer su trabajo. El código de este programa es el siguiente:

#!/usr/bin/python
################################################################
#       .___             __          _______       .___        #
#     __| _/____ _______|  | __ ____ \   _  \    __| _/____    #
#    / __ |\__  \\_  __ \  |/ // ___\/  /_\  \  / __ |/ __ \   #
#   / /_/ | / __ \|  | \/    <\  \___\  \_/   \/ /_/ \  ___/   #
#   \____ |(______/__|  |__|_ \\_____>\_____  /\_____|\____\   #
#        \/                  \/             \/                 #
#                   ___________   ______  _  __                #
#                 _/ ___\_  __ \_/ __ \ \/ \/ /                #
#                 \  \___|  | \/\  ___/\     /                 #
#                  \___  >__|    \___  >\/\_/                  #
#      est.2007        \/            \/   forum.darkc0de.com   #
#                                         www.beenuarora.com   #
################################################################
#Thanks to low1z for initial script
#Greetz to all darkc0de memeber

import os, smtplib, mimetypes,time,sys,urllib,urllib2
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText 

def sendMail(gmailUser,gmailPassword,recipient,subject,text): 

 msg = MIMEMultipart()
 msg['From'] = gmailUser
 msg['To'] = recipient
 msg['Subject'] = subject
 msg.attach(MIMEText(text))
 mailServer = smtplib.SMTP('smtp.gmail.com', 587)
 mailServer.ehlo()
 mailServer.starttls()
 mailServer.ehlo()
 mailServer.login(gmailUser, gmailPassword)
 mailServer.sendmail(gmailUser, recipient, msg.as_string())
 mailServer.close()
 print('[-] Sent email to %s :' % recipient)
if sys.platform == 'linux-i386' or sys.platform == 'linux2' or sys.platform == 'darwin':
 SysCls = 'clear'
elif sys.platform == 'win32' or sys.platform == 'dos' or sys.platform[0:5] == 'ms-dos':
 SysCls = 'cls'
else:
 SysCls = 'unknown'

os.system(SysCls)

print "\n|---------------------------------------------------------------|"
print "| beenudel1986[@]gmail[dot]com                                  |"
print "| Spomb v1.0                                                    |"
print "|   Do Visit     www.BeenuArora.com      &        darkc0de.com  |"
print "|---------------------------------------------------------------|\n"

if len(sys.argv) < 2:
 print "\nUsage: ./spammer.py list.txt"
 print "Ex: ./spomb.py list.txt\n"
 sys.exit(1)

list= sys.argv[1]
try:

 hosts= open(list,'r')
except (IOError):
 print " \n\nSpamming List Missing ..Exiting :( "
 sys.exit(0)

count= raw_input('Enter the Number of mails :')
gmailUser = raw_input('Enter Your Email ID :')
if sys.platform == 'linux-i386' or sys.platform == 'linux2' or sys.platform == 'darwin':
 os.system('stty -echo')
gmailPassword = raw_input('Enter Your Gmail Password :')
list= sys.argv[1]
if sys.platform == 'linux-i386' or sys.platform == 'linux2' or sys.platform == 'darwin':
 os.system('stty echo')
subject = raw_input('\nSubject :')
text = raw_input('Text :')
for a in range (0,int(count)):
 for host in hosts:
 recipient=host[:-1]
 try:
 sendMail(gmailUser,gmailPassword,recipient,subject,text)
 time.sleep(10)
 except(urllib2.URLError, socket.timeout, socket.gaierror, socket.error):
 print ('Something Went Wrong ..Check Manually for Error\n')
 except(KeyboardInterrupt):
 pass
print ('\n\nDone Mailing...')

Tuve la oportunidad de probarlo, y hay varias cosas negativas que aclarar:

  1. Como dije anteriormente el parametro de numeros de mensajes no funciona adecuadamente.
  2. Despues de un tiempo enviando correos,  gmail cerro la conexion, y no se podia conectar  despues de 3 horas mas, al parecer gmail bloquea la cuenta por tratarse de spam

No tengo nada mas que decir, espero que lo prueben y me cuenten sus comentarios

Como corregir inconsistencias en el sistema de archivos con FSCK

Posted by jhonber On Diciembre - 26 - 2009

Qué es FSCK (En Wikipedia):

FSCK (file system check o bien file system consistency check) es una utilidad de los sistemas Unix y similares, como Linux y AIX que se utiliza ante alguna inconsistencia del sistema de archivos para corregir los posibles errores en el sistema.

FSCK se ejecuta automáticamente al arranque del sistema, si se encuentra alguna anomalía en el mismo; pero además de eso puede ser usado manualmente.

Modo de empleo:

fsck  [-opciones]  /dev/hdXXX  (o sdXXX)

Opciones:

-a confirmar automáticamente. No recomendado.
-c comprobar bloques en el disco.
-f forzar la verificación aunque todo parezca normal.
-v (verbose) despliega más información.
-r Modo interactivo. Espera nuestra respuesta.
-y asume yes de respuesta.

El siguiente argumento para el comando FSCK es la partición donde queremos hacer la verificación. (Depende de nuestro disco lo haremos con  /dev/hdXXX  o  con /dev/sdXXX ).

Nota: Se recomienda que la partición donde hagamos la verificación se encuentre DESMONTADA.

Un ejemplo de uso puede ser (Con el cual el comando comprobaría los bloques en el disco y asumiría ‘yes’ como respuesta):

# fsck  -c  -y  /dev/hdXXX

La salida de dicho comando serán algunos avisos sobre si se han encontrado errores en el sistema de archivos y si se han corregido correctamente.

Automatizar FSCK para que se ejecute al arranque del sistema

Esto se puede conseguir editando el archivo /etc/fstab

# vim  /etc/fstab

Archivo fstab:

##################################
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/hda6           /                           ext3        defaults           0                1
/dev/hda2           /home                  ext3        defaults           0                2
/dev/hda5          none                     swap      sw                     0                0
/dev/hdb            /media/cdrom0  udf,iso9660 user,noauto    0               0
/dev/hda7          /media/hda7       ext3         defaults             0                2
##################################

Debajo de <pass> es donde debemos colocar el argumento que hará que FSCK verifique cada X arranques del sistema dicha partición, Los valores posibles son “0″  “1″ o “2″ El sistema de fichero raíz / debe tener “1″ si deseamos activarlo, y el resto de particiones deben tener “2″ para el mismo propósito. Los sistemas de ficheros que no necesitan comprobación como swap o el CD-ROM Tendrán el valor de “0″.

Bueno no esta demás recomendar usar con cuidado este comando (Úsalo bajo tu cuenta y riesgo) ;)

Hasta la próxima y Felices Fiestas para todos !!!

Dual Boot en OpenSolaris

Posted by Epsilon On Diciembre - 23 - 2009

Para las personas q han instalado opensolaris después de tener instalado un GNU/Linux se han dado cuenta de que el grub de opensolaris no les reconoce por defecto la entrada a el GNU/linux, y pasa lo mismo si tenemos opensolaris y despues instalamos un GNU/linux por que el grub de GNU/Linux  no reconoce ZFS (sistema de archivos de opensolaris), en esta entrada mostraremos  dos posibles soluciones para resolver este inconveniente, muchos de ustedes se preguntaran ¿y q pasa si tengo windows? pues nada por q opensolaris reconoce la entrada de windows por defecto.

si hemos instalado opensolaris después de GNU/Linux  lo que  podemos hacer es lo siguiente copiamos las entradas del menu.lst del pinguino  y las pegamos en  el archivo  menu.lst del opensolaris q se encuentra en /rpool/boot/grub/menu.lst y debe quedar algo como esto:

splashimage /boot/grub/splash.xpm.gz
timeout 30
default 0
#---------ADED BY BOOTADM - DO NOT EDIT ----------------
title OpenSolaris 2009.06 snv_86_rc3 X86
bootfs rpool/ROOT/opensolaris
kernel$ /plataform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS
module$ /plataform/i86pc/$ISADIR/boot_archive
#--------------------END BOOTADM-----------------------------------
title Windows asi reconoce el opensolaris la entrada de windows.
rootnoverify (hd0,0)
chainloader +1
#Unknown partition of type 5 found on /dev/rdsk/c5d0p0 partition: 2
# It maps to the GRUB device: (hd0,1).
title Ubuntu 8.04, kernel 2.6.24-16-generic
root (hd0,4)
kernel /boot/vmlinuz-2.6.24-16-generic
root=UUID=26393121-0c4a-4081-8363-89e928184a10 ro quiet splash
initrd /boot/initrd.img-2.6.24-16-generic
quiet
title Ubuntu 8.04, kernel 2.6.24-16-generic (recovery mode)
root (hd0,4)
kernel /boot/vmlinuz-2.6.24-16-generic
root=UUID=26393121-0c4a-4081-8363-89e928184a10 ro single
initrd /boot/initrd.img-2.6.24-16-generic
title Ubuntu 8.04, memtest86+
root (hd0,4)
kernel /boot/memtest86+.bin
quiet
##END DEBIAN AUTOMATIC KERNELS LIST

si esta opcion no les funciona por alguna razon, pueden probar  recuperando el grub del GNU/Linux con el super grub disk y despues de esto  vamos al menu.lst del linux que esta ubicando en /boot/grub/menu.lst y copiamos al final de la linea lo siguiente:

title OpenSolaris
rootnoverify (hd0,1)
makeactive
chainloader +1

Siendo el (hdx,y) la parcticion en donde esta ubicado el opensolaris debe quedar algo asi:

title Ubuntu 8.04, kernel 2.6.24-16-generic
 root (hd0,4)
 kernel /boot/vmlinuz-2.6.24-16-generic
 root=UUID=26393121-0c4a-4081-8363-89e928184a10 ro quiet splash
 initrd /boot/initrd.img-2.6.24-16-generic
 quiet

 title Ubuntu 8.04, kernel 2.6.24-16-generic (recovery mode)
 root (hd0,4)
 kernel /boot/vmlinuz-2.6.24-16-generic
 root=UUID=26393121-0c4a-4081-8363-89e928184a10 ro single
 initrd /boot/initrd.img-2.6.24-16-generic

 title Ubuntu 8.04, memtest86+
 root (hd0,4)
 kernel /boot/memtest86+.bin
 quiet

 ##END DEBIAN AUTOMATIC KERNELS LIST

 title OpenSolaris
 rootnoverify (hd0,1)
 makeactive
 chainloader +1