Sunteți pe pagina 1din 93

Trabajo Final de Arquitectura de los Sistemas Operativos Tema: Un simple anlisis del sistema operativo FreeBSD.

Profesor: Costello Rodriguez, Alejandro. Alumnos: Bacelli Julin. Dominguez Jacobo. Fecha: 08/08/2012

ndice
Introduccin: .................................................................................................................................... 5 Qu es FreeBSD? ..................................................................................................................... 5 Caractersticas:............................................................................................................................ 5 Otras caractersticas: ................................................................................................................. 5 Arquitectura:................................................................................................................................. 6 Kernel: ......................................................................................................................... 7 Configurar un Kernel Personalizado: ............................................................................ 7 Compilacin del kernel ............................................................................................ 10 Comando pmcstat: ................................................................................................................... 10 PAPI ............................................................................................................................................... 11 Instalacin de FreeBSD: .............................................................................................................. 12 Instalando nuestra Interfaz Grfica: ........................................................................................ 33 Instalacin de XORG: ............................................................................................................... 33 Instalacin de GNOME 2 en FreeBSD: ................................................................................ 33 Administracin de usuarios: ...................................................................................................... 37 Chpass .......................................................................................................................................... 38 Passwd .......................................................................................................................................... 39 Login y Logout ........................................................................................................................... 40 Usuarios activos ........................................................................................................................ 40 Ttys ............................................................................................................................................... 40 Sudoers y permisos ................................................................................................................. 41 PAM ............................................................................................................................................... 41 Procesos: ........................................................................................................................................ 42 Tipos de procesos: ................................................................................................................... 42 Loader .......................................................................................................................................... 42 Utilidades para ver Procesos en ejecucin: ...................................................................... 43 PS ............................................................................................................................... 44 TOP ............................................................................................................................ 46 Dmons, seales y cmo matar procesos ............................................................................. 47 Opciones para el comando Kill: ............................................................................................ 48 Administracion de recursos: .......................................................................................................... 50 Permisos en archivos ................................................................................................................. 50 Ver un archivo. ............................................................................................................................. 50

Cat .............................................................................................................................. 51 More more <fichero>, realiza la misma opcin de cat carta.txt |more, pero evidentemente tendremos que escribir menos, bastar con el comando de la siguiente manera: more carta.txt Less ....................................................................... 51 Ver un archivo comprimido. ................................................................................................... 51 Copiar un Archivo ..................................................................................................................... 51 Mover un Archivo ...................................................................................................................... 52 Renombrar un Archivo. ........................................................................................................... 52 Borrar un Archivo...................................................................................................................... 52 Borrar un DIRECTORIO ........................................................................................................... 52 Ls ................................................................................................................................................... 53 Opciones ms comunes .......................................................................................................... 53 Impresoras.................................................................................................................................... 55 Dispositivos .................................................................................................................................. 55 Creacin de un sistema de archivos ............................................................................................ 55 Procmail ........................................................................................................................................ 56 Loop devices ................................................................................................................................ 57 Cdrom............................................................................................................................................ 58 Herramientas de Desarrollo: .......................................................................................................... 59 VI .................................................................................................................................................... 59 Invocacin de vi ........................................................................................................ 61 Vim ................................................................................................................................................. 61 Modos ......................................................................................................................... 61 Modo comandos ......................................................................................................... 62 Modo insercin ........................................................................................................... 62 Modo lnea de rdenes ............................................................................................... 62 Modo visual ................................................................................................................ 62 Modo seleccin ........................................................................................................... 62 Modo Ex ..................................................................................................................... 63 Nano .............................................................................................................................................. 63 Emacs ........................................................................................................................................... 63 Uso de emacs ............................................................................................................. 63 GNU Compiler Collection ........................................................................................................... 64 Uso ............................................................................................................................. 65 GDB ............................................................................................................................ 65

Invocacin del Debugger ........................................................................................................... 66 Comandos ms Frecuentemente Usados:.............................................................................. 66 Gua de compilacin de un programa realizado en C en FreeBSD .................................... 68 Lenguajes ..................................................................................................................................... 69 BASIC ......................................................................................................................... 69 Lisp ............................................................................................................................. 69 Perl ............................................................................................................................. 70 Icon ............................................................................................................................. 70 Logo............................................................................................................................ 70 Python ........................................................................................................................ 70 Servicios:......................................................................................................................................... 71 Daemons: .................................................................................................................................... 71 Inetd:........................................................................................................................... 71 Configuraciones ........................................................................................................................... 71 Opciones de lnea de rdenes .................................................................................................. 71 inetd.conf: ................................................................................................................... 73 Xinetd: ....................................................................................................................... 75 Servicio FTP: .............................................................................................................................. 76 Servicio de Correo Electrnico: ............................................................................................ 77 El Agente de Usuario .................................................................................................. 77 Agente de Transporte de Correo ................................................................................ 77 Correo electrnico y DNS ........................................................................................... 77 Recepcin de correo................................................................................................... 78 Acceso a carpetas de correo locales .......................................................................... 79 Seguridad: ....................................................................................................................................... 79 Conceptos de seguridad ............................................................................................................ 79 Sistema fsico y consola ............................................................................................................. 79 Programas setuid y Daemons ................................................................................................... 79 Daemons....................................................................................................................................... 80 Programas setuid ........................................................................................................................ 80 Sistemas de ficheros................................................................................................................... 80 Monitorizando el sistema de ficheros ....................................................................................... 81 Monitorizacin avanzada con tripwire ...................................................................................... 81 rhosts y hosts.equiv .................................................................................................................... 82

Ficheros de dispositivos especiales ......................................................................................... 82 Protocolos de red ........................................................................................................................ 83 Caractersticas de FreeBSD ...................................................................................................... 83 Niveles de seguridad .................................................................................................................. 83 IP Firewall ..................................................................................................................................... 84 One-Time Passwords ................................................................................................................. 85 Desactivacin de cuentas .......................................................................................................... 86 Sendmail ....................................................................................................................................... 87 Jails:............................................................................................................................................... 88 Introduccin ................................................................................................................ 88 Qu es una jaula......................................................................................................... 88 Creacin y gestin de jaulas ....................................................................................... 89 Administracin y personalizacin a fondo ................................................................... 91 Herramientas del sistema para la personalizacin de jaulas en FreeBSD ................. 91 Herramientas para tareas administrativas de alto nivel en la Coleccin de Ports ...... 92

Introduccin: Qu es FreeBSD? FreeBSD es un avanzado sistema operativo para arquitecturas x86 compatibles (incluyendo Pentium y Athlon), amd64 compatibles (incluyendo Opteron, Athlon64 y EM64T), Alpha/AXP, IA-64, PC-98 y UltraSPARC. FreeBSD es un derivado de BSD, la versin de UNIX desarrollada en la Universidad de California, Berkeley. FreeBSD es desarrollado y mantenido por un numeroso equipo de personas. El soporte para otras arquitecturas est en diferentes fases de desarrollo. Caractersticas: FreeBSD ofrece altas prestaciones en comunicaciones de red, rendimiento, seguridad y compatibilidad, todava inexistentes en otros sistemas operativos, incluyendo los comerciales de mayor renombre. Es un sistema operativo multiusuario, capaz de efectuar multitarea con apropiacin y multiproceso en plataformas compatibles con mltiples procesadores; el funcionamiento de FreeBSD est inspirado, como dijimos arriba, en BSD, la versin de UNIX desarrollada en Berkeley. Aunque FreeBSD no puede ser propiamente llamado UNIX, al no haber adquirido la debida licencia de The Open Group. FreeBSD s est hecho para ser compatible con la norma POSIX, al igual que varios otros sistemas "clones de UNIX". El SO incluye el ncleo, la estructura de ficheros del sistema, bibliotecas de la API de C, y algunas utilidades bsicas. La versin 9.0 incluy actualizaciones como: Un nuevo instalador, bsdinstall fue agregado, y es el instalador usado en los cd/dvd lanzados. El rpido sistema de ficheros ahora soporta actualizaciones a diario. ZFS se actualiz a la version 28. SSH (HPN-SSH) de alta performance. Highly Available Storage (HAST) framework Otras caractersticas: Potentes Soluciones de Internet: FreeBSD es el servidor ideal para servicios de Internet o Intranet. Proporciona unos servicios de red robustos, incluso en situaciones de alta carga, haciendo un uso eficaz de la memoria para mantener buenos tiempos de respuesta con cientos o miles de procesos simultneos de usuarios. Ejecuta una gran variedad de aplicaciones: La calidad de FreeBSD conbinada con el hoy en da bajo coste del hardware de alta velocidad para PC's hace de este sistema una alternativa muy econmica sobre las estaciones de trabajo UNIX comerciales. Existe gran cantidad de aplicaciones tanto a nivel servidor como usuario.

Compatibilidad GNU/Linux: FreeBSD es compatible con binarios de varios sistemas operativos de tipo Unix, incluyendo GNU/Linux. La razn de esto es la necesidad de ejecutar algunas aplicaciones desarrolladas para ser ejecutadas en sistemas con el nucleo Linux en las que el cdigo fuente no se distribuye pblicamente y, por tanto, no pueden ser portadas a FreeBSD. Algunas de las aplicaciones usadas bajo esta compatibilidad son la versin de GNU/Linux de Adobe Flash Player, Linux-Firefox, Linux-Opera, Netscape, Adobe Acrobat, RealPlayer, VMware, Oracle, WordPerfect, Skype, Doom 3, Quake 4, Unreal Tournament, SeaMonkey y varias ms.

Arquitectura:

1. Un mdulo de kernel que gestiona los contadores de rendimiento de CPU y recopila datos de rendimiento. Este mdulo tambin se conectar con otras partes del kernel para recoger los otros datos necesarios. 2. Un demonio de espacio de usuario (pmcstat ) que gestiona el proceso de recopilacin de datos. 3. Herramientas de usuario que analizan los datos capturados y presentar los resultados del anlisis para el usuario. Los anlisis simples se pueden ejecutar utilizando pmcstat. 4. Apoyo a la API como PAPI que miden el rendimiento por proceso.

Kernel: El kernel de FreeBSD es el corazn del sistema operativo. Es el responsable de la gestin y control de la memoria, reforzamiento de los controles de seguridad, gestin de redes, acceso a dispositivos y muchas cosas ms. FreeBSD es un sistema dinmico y configurable, pero a veces sigue siendo necesario reconfigurar y recompilar un kernel hecho a la medida de nuestras necesidades. Tradicionalmente FreeBSD ha contado con lo que se conoce como un kernel monoltico. Esto quiere decir que el kernel era un gran y nico programa que se comunicaba con una lista previa de dispositivos, y que si se deseaba modificar el comportamiento del kernel se deba compilar un nuevo kernel y reiniciar el sistema con el nuevo kernel. Hoy en da FreeBSD evoluciona muy rpidamente hacia un modelo donde la funcionalidad del kernel se basa en mdulos, los cuales pueden cargarse y descargarse dinmicamente de acuerdo a las necesidades del kernel. Esto permite al kernel adaptarse al nuevo hardware que sale al mercado (como las tarjetas PCMCIA en sistemas porttiles), o bien aadir nuevas funcionalidades al kernel. Esto es lo que conocemos como kernel modular. A pesar de lo dicho an es necesario llevar a cabo cierta configuracin esttica en la configuracin del kernel. A veces se debe a que la funcionalidad del sistema est tan ligada al kernel que no puede hacerse mediante carga dinmica de mdulos. En otros casos puede tratarse simplemente de que nadie ha programado un mdulo para esa funcionalidad concreta que pueda cargarse dinmicamente en el kernel. Configurar un Kernel Personalizado: Compilar un kernel personalizado es uno de los ritos de iniciacin ms importantes a los que los usuarios de casi todos los BSD han de enfrentarse. Este proceso lleva su tiempo, pero le aportar grandes beneficios a su sistema FreeBSD. A diferencia del kernel GENERIC, con el que puede funcionar una cantidad apabullante de hardware disponible en el mercado, un kernel personalizado contiene nicamente lo necesario para que funcione el hardware de su sistema. Obviamente esto tiene sus ventajas:

Mayor rapidez en el arranque del sistema. Dado que el kernel slo tiene que probar el hardware que realmente est en el sistema el tiempo que necesitar para arrancar se reducir visiblemente. Menor uso de memoria. Generalmente un kernel personalizado utiliza menos memoria que un kernel GENERIC, lo cual es importante ya que el kernel debe encontrarse siempre en memoria real. Por sta razn un kernel personalizado puede ser de gran utilidad en sistemas con una cantidad limitada de memoria RAM. Hacer funcionar hardware especfico. Un kernel personalizado le permite aadir al sistema dispositivos como tarjetas de sonido, que no estn incluidas en el kernelGENERIC.

Antes de compilar un kernel personalizado conviene pensar antes los motivos. Si lo que se necesita es aadir hardware especfico al sistema es posible que sea posible utilizarlo mediante un mdulo. Los mdulos del kernel estn en el directorio /boot/kernel y se pueden cargar dinmicamente en un kernel en funcionamiento con kldload. La mayora, por no decir todos, los controladores del kernel tienen un mdulo especfico y una pgina de manual. Por ejemplo, el controlador Ethernet inalmbrico ath. La pgina de manual de este dispositivo contiene la siguiente informacin: Alternatively, to load the driver as a module at boot time, place the following line in loader.conf:

if_ath_load="YES"

Si hace lo que dice ah, es decir, aadir la lnea if_ath_load="YES" al fichero /boot/loader.conf har que el mdulo se cargue dinmicamente cada vez que el sistema arranque. Hay casos, no obstante, en los que no existe el mdulo correspondiente. Esto sucede con ciertos subsistemas y con controladores muy importantes, como por ejemplo el de FFS, que necesita el kernel. Igual sucede con la posibilidad de utilizar redes (INET). Por desgracia, en estos casos la nica forma de saber si hace falta un controlador es buscar el mdulo.

En primer lugar, hagamos un breve recorrido por el directorio donde se lleva a cabo la compilacin del kernel. Todos los directorios mencionados hacen referencia al directorio principal, que es /usr/src/sys, al que tambin podemos acceder desde /sys. Existen gran cantidad de subdirectorios que representan diferentes partes del kernel, pero el ms importante para lo que deseamos hacer son arch y /conf, que es donde se llevara a cabo la edicin del fichero de configuracin y la compilacin propiamente dicha del mismo, el punto de partida para la personalizacin del kernel. El directorio arch representa la arquitectura del sistema, por lo que puede ser i386, alpha, amd64, ia64, powerpc, sparc64 opc98 (una arquitectura alternativa, similar a PC y muy popular en Japn). Todo lo que existe dentro de un directorio de una arquitectura en particular, es especfico para dicha arquitectura; el resto del cdigo es comn para todas las plataformas en las que FreeBSD puede funcionar. Observe la organizacin lgica de la estructura de los directorios, con cada dispositivo utilizable en el sistema, sistema de ficheros y opciones, cada cosa en su propio subdirectorio. Asumiremos que estamos utilizando la arquitectura i386, puesto que sobre ella son los ejemplos que vamos a ir exponiendo. Para otros casos se deben hacer los cambios adecuados a la arquitectura de hardware en las rutas que vayamos utilizando.

Nota: Si no existe el directorio /usr/src/sys en el sistema quiere decir que no estn instaladas las fuentes del kernel. La forma ms sencilla de tenerlas es mediante /stand/sysinstall. Como usuario root seleccione Configure, luego Distributions, despus src y finalmente sys. Si no le gusta mucho sysinstall y tiene acceso a un CDROM oficial de FreeBSD puede instalar las fuentes por medio de la siguiente lnea de rdenes: # mount /cdrom # mkdir -p /usr/src/sys # ln -s /usr/src/sys /sys # cat /cdrom/sys/ssys.[a-d]* | tar -xzvf Ahora vamos al directorio arch/conf y copiamos el fichero de configuracin GENERIC con el nombre que deseemos. Por ejemplo: # cd /usr/src/sys/i386/conf # cp GENERIC MIKERNEL Por tradicin el nombre se escribe con maysuculas y si se tienen varias mquinas FreeBSD, con diferente hardware es recomendable darle a cada kernel el mismo nombre que la mquina en la que va a ejecutarse. En este ejemplo usaremos el nombre de MIKERNEL. Sugerencia: Guardar el fichero de configuracin directamente bajo el directorio /usr/src, puede que no sea una idea muy astuta. Si se empiezan a tener problemas puede ser muy tentador borrar /usr/src y comenzar desde cero. Cinco segundos despus de haber hecho esto nos daremos cuenta de que hemos eliminado el fichero de configuracin de nuestro kernel, en el que quizs llevabamos horas trabajando. Una alternativa: guardar el fichero de configuracin en cualquier otro lugar y crear un enlace simblico al fichero que hay en el directorio i386. Por ejemplo: # cd /usr/src/sys/i386/conf # mkdir /root/kernels # cp GENERIC /root/kernels/MIKERNEL # ln -s /root/kernels/MIKERNEL Ahora editamos el fichero de configuracin MIKERNEL con algn editor de textos. FreeBSD dispone de un editor de uso muy sencillo, llamado ee. Cambiamos los comentarios al principio del fichero con algo que refleje los cambios realizados o al menos para diferenciarlo del fichero GENERIC.

Ahora es momento de llevar a cabo la compilacin del cdigo fuente del kernel. Compilacin del kernel 1. Vamos al directorio /usr/src: # cd /usr/src 2. Compilamos el kernel: # make buildkernel KERNCONF=MIKERNEL 3. Instalamos el nuevo kernel: # make installkernel KERNCONF=MIKERNEL

Comando pmcstat: Nombre: pmcstat -- medicin del desempeo con el hardware de control de rendimiento.

Descripcin: La utilidad pmcstat puede medir tanto los eventos de hardware detectados por el sistema en conjunto, como aquellos vistos cuando un grupo especificado de procesos estn siendo ejecutados. Si un grupo especfico de procesos est en la mira (por ejemplo, si la opcin t process-spec es especificada, o si una linea de commando es especificada usando command), entonces la medicin ocurre hasta que el command exista, o hasta que todos los procesos seleccionados especificados por la opcin t process-spec termine, o hasta que la utilidad pmcstat es interrumpida por el usuario. Si un grupo especfico de procesos no es seleccionado para medicin, el comando pmcstat producir una larga medicin por todo el sistema hasta que se interrumpla por el usuario. Una invocacin de pmcstat puede mezclar alocaciones PMC en modo sistema y modo proceso. Los valores de todos los conteos de PMC son impresos en pantalla de forma legible para el humano en intervalos por el pmcstat. Algunas Opciones: Las siguientes opciones estn disponibles: -D pathname Crea archivos con muestras por programa en el directorio llamado por el pathname. Por default se crean estos archivos en el directorio actual.

-O logfilename 10

Enva la salida de registro al archivo: logfilename. Si logfilename es de la forma: hostname:port, donde hostname no empieza con - o un /, entonces pmcstat abrir una conexin de red al host: hostname en el puerto: port.

-R logfilename Realiza un anlisis offline con los datos de maestro en el archive: logfilename.

Ejemplo: Para recopilar informacin de los perfiles para un proceso especfico con pid 1234 sobre la base de cach de instrucciones se pierde vista por usarlo: $pmcstat -P ic-misses -t 1234 -O /tmp/sample.out

PAPI
Performance Application Programming Interface: Tiene como objetivo proporcionar el diseador de la herramienta y el ingeniero de aplicacin una interfaz consistente y una metodologa para el uso del contador de rendimiento de hardware encontrado en la mayora de los microprocesadores ms importantes. PAPI permite a los ingenieros de software ver, en tiempo casi real, la relacin entre el rendimiento del software y los eventos del procesador.

11

Instalacin de FreeBSD: La versin seleccionada es FreeBSD 9.0x86, la cual fue obtenida libre y gratuitamente de la web oficial del proyecto FreeBSD. La instalacin del Sistema Operativo, se realiz en una Mquina Virtual provista por el software de Oracle: VM VirtualBox bajo 2 entornos Linux, especficamente: Fedora 15 y Linux Mint. Tambin se prob en Windows 7 Ultimate. A continuacin se detallar paso a paso el momento de instalacin del Sistema Operativo incluyendo la adaptacin del escritorio Gnome 2 mediante repositorios propios del proyecto FreeBSD: Primeramente se cre una mquina virtual con las siguientes caractersticas: Disco Rgido de 10GB, memoria RAM de 2048MB, memoria de Video: 128MB, se habilit el conector de red inalmbrica para obtener informacin de los repositorios y se estipul que la mquina utilice solo un procesador para un SO de 32 bits:

12

El paso siguiente fue configurar la mquina virtual para que pudiese bootear el instalador del Sistema Operativo desde una imagen ISO descargada de la web oficial de FreeBSD. Una vez realizado esto, el VirtualBox comenzar a ejecutar el instalador:

El instalador ofrece varias alternativas para la instalacin: <Install>, que se refiere a directamente comenzar la instalacin; <Shell> que nos ofrece una interfaz de terminal para efectuar comandos y <Live CD> que nos permite probar el SO pero sin guardar los datos permanentemente. La opcin que le elegimos fue Install para efectivamente introducirnos en la configuracin de la instalacin del SO.

13

Luego el instalador consulta al usuario si desea establecer una distribucin de teclado especfica:

14

En esta pantalla elegiremos la opcin acorde al teclado que tengamos, ya sea el de una Notebook o una Desktop:

15

En la pantalla siguiente se tiene que ingresar un nombre apropiado para el Host, es decir, el nombre que recibe la Red de computadoras a las cuales est acoplada (en el caso que lo est) la computadora donde se est instalando FreeBSD:

16

Luego el instalador nos ofrecer de manera opcional, adherir a nuestra instalacin base del Sistema Operativo, algunos componentes opcionales dentro del mismo:

17

Terminada la eleccin, aparecer una pantalla donde se nos solicita de que forma gestionaremos la o las particiones de nuestro disco rgido para instalar el SO. Una de las opciones est relacionada con una forma guiada de instalacin, en la cul el instalador crear las particiones pertinentes. Otra opcin es la de seleccionar uno mismo el tamao y el formato de las particiones donde se instalar el SO mediante una herramienta que provee el instalador. Por ltimo, se puede tambin configurar las particiones mediante el Shell.

18

Seleccionamos la opcin automtica y vemos que el programa detecta nuestro disco rgido y nos pide confirmacin para instalar el SO en todo el disco o si queremos particionarlo para instalar otros sistemas operativos:

19

A continuacin se nos pide que confirmemos la configuracin selecta por el SO:

20

As entonces se comenzar a instalar el SO con todos sus componentes:

21

Una vez que se cumplimente el paso anterior, se le pide al usuario establecer la contrasea para el Root:

22

El paso siguiente es la configuracin de la interfaz de red, resumidamente, el programa instalador nos dar la informacin paso a paso para poder lograr con xito la conexin a la red local:

Antes de finalizar la instalacin, tenemos que establecer la regin y la zona horaria para nuestro Sistema:

23

24

Tambin, el instalador solicita al usuario que determine que servicios arrancarn al inicio del SO:

25

Una de las herramientas que nos ofrece el programa instalador es la de agregar usuarios:

26

Para dichos nuevos usuarios, estableceremos datos como: Username (nombre de usuario), Grupo al que pertenecer el usuario, forma de autenticar al usuario (contrasea automtica o ingresada), etc:

27

Agregamos otro usuario ms y luego continuaremos con la instalacin:

28

Luego aparecer un panel para hacer modificaciones a los componentes previamente instalados y comenzar a actualizarse el sistema. Despus de esos pasos ya tendremos nuestro sistema FreeBSD completamente instalado, solo tendremos que rebootear el disco y entrar al SO:

29

Se nos presenta entonces la pantalla principal de booteo de FreeBSD:

30

Antes que nada el sistema nos pide que ingresemos en modo root:

31

Con los datos ingresados de forma correcta ya estamos en condiciones de empezar a trabajar con FreeBSD:

32

Instalando nuestra Interfaz Grfica: Instalacin de XORG: Una vez que tenemos nuestro SO FreeBSD preparado, lo que haremos es instalar y configurar una interfaz grfica de usuario para poder movernos a travs del sistema de una forma mucho ms prctica, intuitiva y disfrutable. Para ello, antes que seleccionar el entorno de escritorio acorde a nuestras preferencias, debemos instalar el sistema de ventanas X http://www.x.org/wiki/). Lo hacemos con el siguiente comando: # pkg_add -r xorg

Una vez que termine de instalarse hay que generar el archivo xorg.conf de la siguiente manera: # Xorg -configure Este comando nos va a crear un archivo llamado xorg.conf.new el cual puede ser probado para ver si todo funciona correctamente bien de la siguiente manera: # Xorg -config xorg.conf.new -retro Si aparece una pantalla con cuadrcula con el puntero del ratn enmedio entonces significa que el archivo fue generado correctamente. Para salir de esta pantalla tecleamos Ctrl + Alt + F1. Una vez generado el archivo procedemos a renombrarlo y a ubicarlo dentro del directorio /etc/X11: # cp xorg.conf.new /etc/X11/xorg.conf

Instalacin de GNOME 2 en FreeBSD: Luego de que finalizamos la instalacin de Xorg, nos disponemos a instalar nuestro entorno de escritorio, el elegido en este caso es GNOME 2. Para ello, con un simple comando accedemos a los ports del SO y se instala automticamente: # pkg_add -r gnome2 Luego de apretar la tecla Enter, comenzar una larga instalacin en el cul no solo se instalaran los componentes bsicos del escritorio sino algunas aplicaciones como Evolution (cliente de correo) o Epiphany (navegador web). Una vez que la misma termine,

33

lo que hay que hacer es determinar que se va a arrancar con el ambiente grfico de nuestro gusto cuando se llame al comando startx y para eso hacemos lo siguiente:

Primero: tenemos que abrir el archivo rc.conf ubicado en el directorio /etc y agregar unas lneas. Para ello, utilizaremos el editor de texto VI de la siguiente manera:

# vi /etc/rc.conf Este comando nos abrir una pantalla en la cual figura el contenido del documento y en el cual podremos agregar nuevas lneas. Las lneas a agregar son: gnome_enable=YES gdm_enable=YES hald_enable=YES dbus_enable=YES Permite que Gnome se cargue al inicio del SO.

El sistema reconoce el teclado y el mouse al inicio..

34

Una vez realizados estos cambios, guardamos el documento apretando SHIFT+ZZ. Terminada dicha labor, indicamos al SO que realice un reinicio, para ello escribimos en la terminal: # reboot

35

Esperamos a que realice el reboot y cuando termine podremos disfrutar de nuestra nueva interfaz grfica de usuario, la cual nos ofrecer elegir entre los usuarios que agregamos al inicio de la instalacin:

36

Administracin de usuarios: Para crear usuarios y grupos hay que estar en modo root. El grupo es simple, porque slo hay que especificar el nombre del grupo.Para crear un grupo llamado AlumnosUAI se pone lo siguiente en linea de comandos. # pw groupadd AlumnosUAI Ahora, para crear un nuevo usuario, que pertenece a este grupo, se pone lo siguiente: # pw useradd Jacobo_Julian -c "Algun comentario" /home/Jacobo_Julian -s /usr/local/bin/bash -g AlumnosUAI -m -d

Donde: -c es para dejar algn comentario del nuevoUsuario. -m es para que todos los archivos que este usuario deje en su directorio queden a nombre de l. -d es el directorio raiz del nuevoUsuario -s shell del nuevoUsuario -g grupo del nuevoUsuario Finalmente, asignarle una clave. # passwd Jacobo_Julian

Tambin se pueden agregar un usuario con el comando: # adduser -v

Para eliminar un usuario simplemente ingresamos: # rmuser Luego ingresamos el nombre de usuario, y nos preguntara si queremos eliminarlo, ingresamos yes y el usuario es automticamente eliminado.

37

Chpass
chpass cambia informacin de los usuarios en base de datos como contraseas, shells y datos personales. Los administradores del sistema, como el superusuario, son los nicos que pueden modificar la informacin y contraseas de otros usuarios con chpass. Cuando no le pasamos ms opciones, salvo un nombre de usuario opcional, chpass muestra un editor con informacin de usuario. Cuando se sale del editor la base de datos de usuarios se actualiza con la nueva informacin. Ejemplo de chpass interactivo ejecutado por el superusuario Chpass Julian #Changing user database information for Julian. Login: Julian Password: * Uid [#]: 1000 Gid [# or name]: 1000 Change [month day year]: Expire [month day year]: Class: Home directory: /home/Julian Shell: /usr/local/bin/tcsh Full Name: J. Bacelli Office Location: Office Phone: Home Phone: Other information: Un usuario normal puede modificar un pequeo subconjunto de esta informacin, y slo para s mismo. Ejemplo de chpass interactivo ejecutado por un usuario normal #Changing user database information for Jacobo. Shell: /usr/local/bin/tcsh Full Name: J. Dominguez Office Location: Office Phone: Home Phone: Other information:

38

Passwd
passwd es el comando que usamos normalmente para cambiar nuestra propia contrasea como usuario o, como superusuario, la de otros usuarios. Ejemplo de cambio de nuestra contrasea % passwd Changing local password for Julian. Old password: New password: Retype new password: passwd: updating the database... passwd: done

Ejemplo de cambio de la contrasea de otro usuario como superusuario # passwd Jacobo Changing local password for Jacobo. New password: Retype new password: passwd: updating the database... passwd: done Cambiar a un usuario de grupo Si no queremos editar /etc/group manualmente, puodemos usar el comando pw para aadir y modificar grupos. Por ejemplo, para aadir un grupo llamado UAI y luego confirmar que existe podemos usar: Ejemplo aadir un grupo usando pw # pw groupadd UAI # pw groupshow UAI teamtwo:*:1100: El nmero 1100 en el ejemplo anterior es el ID de grupo del grupo UAI. Ahora mismo UAI no tiene miembros, y es por tanto bastante intil. Cambiemos eso invitando a Julian a formar parte del grupo UAI. Ejemplo aadir a alguien a un grupo usando pw # pw groupmod UAI -M Julian # pw groupshow UAI UAI:*:1100:Julian

39

Login y Logout La pantalla de login muestra una lnea pidiendo nombre de usuario, y luego contrasea, en caso de que ingresemos los datos correctos, accederemos al sistema, en caso contrario nos informa que los datos ingresados son invalidos, y nos devuelve a la misma pantalla de login. Para desloguear, y ver nuevamente la pantalla de login, ingresamos el comando: # exit Para apagar la mquina: # shutdown -h now Para rebootear la mquina: # shutdown -r now o # reboot

Usuarios activos Se utilizan los siguientes comandos: id last who # Muestra id de usuarios activos, grupo y login. # muestra los ltimos logins al sistema. # Quin est activo en el sistema.

Ttys El fichero /etc/ttys lista todos los puertos en su sistema FreeBSD donde queremos permitir logins. Por ejemplo, la primera consola virtual ttyv0 tiene una entrada en este fichero. Puede firmarse en la consola utilizando esta entrada. Este fichero tambin contiene entradas para las otras consolas virtuales, puertos serie y pseudo-ttys. Para una terminal conectada por cable, solo listamos la entrada /dev del puerto serie sin la parte de /dev (por ejemplo, /dev/ttyv0 debera estar listado como ttyv0). Una instalacin por omisin de FreeBSD incluye un fichero /etc/ttys con soporte para los primeros cuatro puertos serie: ttyd0 hasta ttyd3. Si est conectando una terminal a uno de esos puertos, no necesita agregar otra entrada. 40

Sudoers y permisos Por defecto, FreeBSD slo permite acceso root a usuarios incluidos en el grupo wheel, un grupo reservado para tareas de administracin al que inicialmente slo pertenece el propio root. Por tanto, si queremos que nuestro usuario "Julian" pueda tener permisos de superusuario, una buena manera es "loguearnos" como root y agregar "Julian" al grupo wheel. En primer lugar comprobamos si ya est incluido: # pw showgroup wheel wheel:*:root

No, no est. Para aadirlo: # pw user mod Julian -G wheel

Comprobamos de nuevo si "Julian" est en el grupo wheel: # pw showgroup wheel wheel:*:root,Julian Ahora s; ya podemos usar nuestra cuenta "pepe" y con un simple su (+contrasea) obtener privilegios de root cuando los necesitemos. Al finalizar las operaciones debemos abandonar la cuenta root tecleando exit (o Ctrl-D).

PAM Igual que Linux, FreeBSD ofrece soporte para PAM (Pluggable Authentication Modules). Con PAM el administrador puede reforzar el modelo tradicional de autentificacin usuario/contrasea. FreeBSD dispone de mdulos para integrar PAM en una amplia gama de mecanismos de autenticacin. Estos son algunos de ellos: Kerberos 5 OPIE RADIUS TACACS+ Tambin es posible configurar normas que se encarguen de problemas de control de autentificacin como la calidad de las contraseas que los usuarios puedan elegir.

41

Procesos: FreeBSD es un sistema operativo multitarea. Esto significa que parece como si ms de un programa se estuviera ejecutando al mismo tiempo. Cada programa uno de esos programas que se est ejecutando en un momento dado se denomina proceso. Cada orden que ejecuta iniciar al menos un proceso nuevo, y hay muchos procesos que se estn que se estn ejecutando en todo momento, manteniendo el sistema en funcionamiento. Tipos de procesos: Los procesos de usuario son aquellos procesos asociados a un determinado usuario. Se ejecutan en modo usuario excepto cuando realizan llamadas al sistema para acceder a los recursos del sistema, en ese momento pasan a ser ejecutados en modo ncleo. Los procesos demonio no estn asociados a ningn usuario. Al igual que los proceso de usuario, son ejecutados en modo usuario excepto cuando realizan llamadas al sistema. En ese momento pasan a ser ejecutados en modo ncleo. Los procesos demonio realizan tareas peridicas relacionadas con la administracin del sistema, como por ejemplo: la administracin y control de redes, la ejecucin de actividades dependientes del tiempo, la administracin de trabajos en las impresoras en lnea, etc. Los procesos del ncleo no estn asociados a ningn usuario. Se ejecutan exclusivamente en modo ncleo. Son similares a los procesos demonio en el sentido de que realizan tareas de administracin del sistema, como por ejemplo, el intercambio de procesos (proceso intercambiador) o de pginas (proceso ladrn de pginas) a memoria secundaria. Su principal ventaja respecto a los procesos demonio es que poseen un mayor control sobre sus prioridades de planificacin puesto que su cdigo es parte del ncleo. Por ello pueden acceder directamente a los algoritmos y estructuras de datos del ncleo sin hacer uso de las llamadas al sistema, en consecuencia son extremadamente potentes. Sin embargo no son tan flexibles como los procesos demonio, ya que para modificarlos se debe de recompilar el ncleo. Loader Un Loader es la parte del Sistema Operativo responsable de la carga de programas. Es una de las etapas esenciales en el proceso de inicializar un programa, se encarga de localizar los programas en la memoria y los prepara para su ejecucin. Cargar un programa consiste en leer el contenido del archivo ejecutable, el archivo que contiene el texto del programa, en la memoria, y luego llevar a cabo otras tareas necesarias para preparar el ejecutable y as correrlo. Una vez que la carga se completa, el Sistema Operativo inicia el programa traspasndole el control al cdigo del programa cargado. En los sistemas Unix, el cargador es el manejador para la llamada del sistema execve().

42

Comando ld Nombre: ld Usando LD, el enlazador GNU. Sinpsis:

ld [opciones] ArchivoObjeto ... Descripcin:

Cuando se requiere que un archivo que se encuentra, por ejemplo, en lenguaje C, sea compilado y luego est listo para ejecutarse, es necesario que luego de estar ensamblado, incorpore las funciones que tienen algunas de sus instrucciones que estn ubicadas en libreras especiales (por ejemplo: printf, se encuentra en la librera stdio.h). Para lograr esto, se utiliza el comando ld, cuya funcin es la de enlazar el contenido de las libreras que se utilicen en las instrucciones del archivo objeto. Se obtiene de esta forma un archivo ejecutable. Ejemplo: Se tiene un archivo escrito en C que se encarga de calcular el rea de un crculo cuyo radio se ingresa por teclado. $ ld -o area_circulo /usr/lib/gcc-lib/i386-linux/2.95.2/collect2 -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o circulo /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc -lib/i386linux/2.95.2/crtbegin.o-L/usr/lib/gcc-lib/i386-linux/2.95.2 circulo.o -lgcc -lc -lgcc /usr/lib/gcc-lib/i386-linux/2.95.2/crtend.o/usr/lib/crtn.o Se puede observar como se incluyen los componentes antes nombrados. Utilidades para ver Procesos en ejecucin: Cada proceso tiene un identificador individual consistente en un nmero llamado ID del proceso, o PID, y al igual que sucede con los ficheros, cada proceso tiene un propietario y un grupo. La informacin de propietario y grupo se usa para determinar qu ficheros y dispositivos puede abrir el proceso mediante los permisos de fichero. La mayora de los procesos tambin tiene un proceso padre. El proceso padre es el proceso que los inici. Por ejemplo, si se est tecleando rdenes en la shell, la shell es un proceso, y cualquier orden que se ejecute tambin lo ser. De este modo cada proceso que se ejecute tendr como proceso padre a su shell. La excepcin es un proceso especial llamado init. Init es siempre el primer proceso, as que su PID siempre es 1. El kernel arranca automticamente init en el arranque de FreeBSD.

43

Utilidades para ver Procesos: Hay dos rdenes particularmente tiles para ver los procesos en el sistema, ps y top. PS Se usa para mostrar una lista esttica de los procesos que se ejecutan en el sistema en el momento que se ejecuta la orden, y puede mostrar sus PID, cunta memoria est usando, la lnea de rdenes con la que fueron iniciados y dems aspectos.

Como se puede ver en el ejemplo la salida de ps est organizada en columnas.PID es el ID de proceso anteriormente expuesto. Los PIDs se asignan a partir del 1 y hasta 99999, y vuelven a comenzar desde el 1 otra vez cuando se terminan los nmeros. La columna TT muestra la tty en la que el programa se est ejecutando. STAT muestra el estado del programa; de momento tambin podemos ignorarlo. TIME es la cantidad de tiempo que el programa ha se ha estado ejecutando en la CPU (generalmente no es el tiempo transcurrido desde que se inici el programa, ya que la mayora de los programas pasan mucho tiempo esperando antes de que necesiten gastar tiempo en la CPU). Finalmente, COMMAND es la lnea de rdenes que se emple para ejecutar el programa. Ps admite muchas opciones sobre la informacin que se desea ver. Uno de los conjuntos ms tiles es auxww; a muestra informacin acerca de todos los procesos ejecutndose, no solamente los suyos; u despliega el nombre de usuario del propietario del proceso, as como el uso de memoria; x despliega informacin acerca de los procesos dmon y ww hace que ps despliegue la lnea de rdenes completa, en lugar de truncarla cuando es demasiado larga para caber en la pantalla. 44

Algunas opciones para utilizar con el comando ps: -a Muestra informacin acerca de procesos de otros usuarios adems de los propios. -c Cambia la columna COMMAND para solo contener el nombre del ejecutable en vez de toda la linea de comando.

-d Ordena procesos de forma descendente y prefija cada comando con sangra de texto, mostrando las relaciones de Hermano y Padre/Hijo. Si las opciones -m y -r son tambin usadas, se controla cmo los procesos de hermanos se ordenan uno respecto al otro. -f Muestra informacin del commandline y el environment acerca de los procesos que fueron intercambiados (swap). Esta opcin es vlida solo si el UID del usuario es 0.

-G Muestra informacin sobre los procesos que se ejecutan con los ID's de grupo reales especificados. -H Muestra todos los hilos del ncleo visibles asociados a cada proceso. Dependiendo del threading package que est en uso, esto puede mostrar slo el proceso, slo las entidades del ncleo programadas, o la totalidad de hilos del proceso. -m Ordena por uso de la memoria, en lugar de la combinacin de control de Identificacin del terminal y del proceso. -p Muestra informacin sobre los procesos que coinciden con los identificadores de proceso especificados. -r Ordena por uso de la CPU actual, en lugar de la combinacin de control de Identificacin del terminal y del proceso.

-T Muestra informacin acerca de los procesos vinculados al dispositivo asociado a la entrada estndar.

45

TOP Despliega todos los procesos que se estn ejecutando y actualiza la pantalla cada pocos segundos para que pueda ver lo que est haciendo su sistema.

La salida est dividida en dos secciones. La cabecera (las primeras cinco lneas) muestra el PID del ltimo proceso en ejecutarse, la carga promedio del sistema (una medida de la carga del sistema), el uptime del sistema (tiempo desde el ltimo reinicio) y la hora actual. Las otras cifras en la cabecera se relacionan con cuntos procesos hay en ejecucin en el sistema (69 en este caso), cunta memoria y espacio de intercambio (swap) est en uso, y cunto tiempo est el sistema en diferentes estados de CPU. Ms abajo hay una serie de columnas con informacin similar a la salida de ps. Igual que antes, se puede ver el PID, el nombre de usuario, la cantidad de tiempo de CPU en uso y la orden que se ejecut. Tambin se mostrar por omisin la cantidad de espacio de memoria que emplea cada proceso. Est dividido en dos columnas, una para el tamao total y otra para el tamao residente (el tamao total es cunta memoria ha necesitado la aplicacin y el tamao residente es cunta se est usando en ese momento concreto). En este ejemplo puede verse que el proceso referido a Nautilus ha requerido casi 56MB de RAM, pero actualmente solo est usando 32MB.

46

Opciones: -S Muestra los procesos del sistema en la pantalla, normalmente, procesos de sistema como el paginador o el intercambiador no son mostrados. Esta opcin los hace visibles. -H Muestra cada hilo de un proceso multihilo de forma individual. Por defecto, solo una linea resumen es mostrada por cada proceso. -I No muestra los procesos inactivos. Por defecto, el comando top muestra ambos, activos e inactivos. -stime Determina el delay en las actualizaciones de pantalla a time segundos. Por defecto, este valor es de 2 segundos.

-Uusername Muestra solamente aquellos procesos adquiridos por username. Esta opcin solo acepta nombres de usuario y no entiende nmeros.

Dmons, seales y cmo matar procesos Cuando se ejecuta por ejemplo un editor, es fcil controlarlo, decirle que cargue ficheros y dems. Puede hacerse porque el editor permite ese control y porque el editor depende de una terminal. Algunos programas no estn diseados para que se ejecuten entradas continuas por parte del usuario, as que se desconectan de la terminal a la primera oportunidad. Por ejemplo, un servidor web pasa todo el da respondiendo peticiones web y normalmente no necesita que usted le haga caso. Los programas que transportan correo electrnico de un sitio a otro son otro ejemplo de esta clase de aplicacin.Llamamos a estos programas dmons. Hay una norma segn la cual se da nombre a los programas que suelen ejecutarse como dmons con una d final. BIND es el dmon de nombres de Berkeley (y el programa que en realidad se ejecuta se llama named); el servidor web Apache se llama httpd, el dmon de spool de impresora de lnea es lpd y as sucesivamente. Se trata de un acuerdo, no una ley frrea; por ejemplo el dmon principal de correo de Sendmail se llama sendmail, y no maild, como podra suponerse visto lo precedente. Algunas veces necesitaremos comunicarnos con un dmon. Estas comunicaciones se denominan seales; es posible comunicarse con un dmon (o con cualquier otro proceso ejecutndose) mandndole una seal. Existen diversos tipos de seales diferentes que podemos mandar: algunas tienen un significado especial, otras son interpretadas por la aplicacin y la documentacin de la aplicacin nos dir cmo interpreta la seal esa aplicacin). Solamente podemos enviar una seal a un proceso del que seamos propietarios. Si mandamos una seal a un proceso de otro usuario con kill veremos un mensaje del sistema en el que se nos comunica que no tenemos permiso para hacer tal cosa. La excepcin a esto es el usuario root, que puede mandar seales a los procesos de cualquier usuario del sistema. 47

FreeBSD tambin enviar seales de aplicacin en determinados casos. Si una aplicacin est mal escrita y trata de acceder a memoria a la que no est previsto que acceda FreeBSD, el sistema enva al proceso la seal Violacin de segmento (SIGSEGV). Si una aplicacin ha utilizado la llamada de sistema alarm para ser avisada despus de que un periodo de tiempo haya transcurrido se le mandar la seal de alarma (SIGALRM), y as sucesivamente. Hay dos seales que pueden usarse para detener un proceso, SIGTERM y SIGKILL. SIGTERM es la manera amable de matar un proceso; el proceso puede recibir la seal, darse cuenta que queremos que se apague, cerrar cualquier fichero de log que pueda tener abierto y generalmente terminar cualquier tarea que est realizando en ese momento antes de apagarse. En algunos casos un proceso puede incluso ignorar SIGTERM si se encuentra inmerso en una tarea que no puede ser interrumpida. Por el contrario, un proceso no puede ignorar una seal SIGKILL. Esta es la seal No me importa lo que ests haciendo, terminalo ya!. Si manda un SIGKILL a un proceso FreeBSD detendr ese proceso inmediatamente. Otras seales que puede usar: SIGHUP, SIGUSR1 y SIGUSR2. Son seales de propsito general, y aplicaciones diferentes pueden hacer cosas diferentes cuando se utilicen. Supongamos que cambiamos el fichero de configuracin de su servidor web; es un buen momento para decirle al servidor web que lea y aplique la configuracin. Podramos detener y reiniciar httpd, pero esto implicara un perodo breve de suspensin del servicio de nuestro servidor web, lo cual puede no ser asumible. La mayora de los dmons fueron creados pensando en que fueran capaces de responder a la seal SIGHUP releyendo su fichero de configuracin. En lugar de matar y reiniciar httpd le podramos mandar la seal SIGHUP. Dado que no hay una manera estndar para responder a estas seales, diferentes dmons tendrn diferente comportamiento. Opciones para el comando Kill: -s signal_name El nombre de una seal simblica especificando la seal que va a ser enviada en vez de la que est por defecto: TERM. -l [exit_status] Si no damos ningn operando, lista los nombres de las seales; en otro caso, escribimos el nombre de la seal correspondiente en exit_status. -signal_name El nombre de una seal simblica especificando la seal que va a ser enviada en vez de la que est por defecto: TERM. -signal_number Un nmero no negativo entero especificando la seal que va a ser enviada en vez de la que est por defecto: TERM.

48

Los siguientes PIDs tienen significados especiales: -1 Si somos superusuario, se transmite la seal a todos los procesos; de otra manera, se transmite la seal a todos los procesos que pertenecen al usuario que emiti la instruccin. Algunas de las seales comnmente usadas: 1 HUP (colgar): vuelve a cargar y analizar los ficheros de configuracin y se reconfigura de acuerdo a los cambios. 2 INT (interrumpir): interrumpe el proceso en ejecucin. 3 QUIT (salir): sale del proceso en ejecucin. 6 ABRT (abortar): aborta el proceso en ejecucin. 9 KILL (no capturable, no ignorable kill): mata el proceso en ejecucin cuando este termine de hacer la tarea que est realizando. 14 ALRM (alarma de reloj): activa una alarma cada un intervalo definido. 15 TERM (seal de terminacin de software): termina inmediatamente un proceso u aplicacin. EXIT STATUS La utilidad kill arroja 0 si no hubo conflictos, y arroja un nmero mayor que 0 si ocurri un error. Ejemplos Terminar el proceso con los PIDs 142 y 157 $ kill 142 157 Enva la seal de colgar al proceso con el PID 507: $ kill -s HUP 507 Terminar el grupo de procesos con el PGID 117: $ kill -- -117

49

Administracion de recursos:

Permisos en archivos
Cada archivo tiene un conjunto de permisos asociados con l, los cuales determinen que hacerse con el archivo y quien puede hacerlo. Existe un usuario especial en cada sistema, llamado superusuario, quien puede leer o modificar cualquier archivo en el sistema. La clase de acceso especial root posee privilegios de superusuario: esta la emplean los administradores del sistema cuando llevan a cabo el mantenimiento del mismo. Existe tambin un comando llamado su que otorga un status de superusuario si se conoce la contrasea de root. Por eso no es recomendable guarda ningn material confidencial en el sistema de archivos. Si el usuario requiere mayor seguridad, puede cambiar los datos en un archivo de manera que ni aun el superusuario puede leerla (o al menos entenderla ) usando el comando crypt. Cuando un usuario entra en sesin, teclea un nombre y despus confirma que efectivamente es esa persona tecleando una contrasea (password) El nombre es la identificacin para iniciar la sesin del usuario, o login-id. Pero el sistema en realidad reconoce al usuario por medio de un nmero, llamado su identificacin (o identificacin) de usuario o uid. El sistema de archivos y por tanto el sistema UNIX en general determinan lo que el usuario hace mediante los permisos otorgados a su uid y a su group-id. El archivo es texto ordinario, pero las definiciones de los campos y los separadores son una convencin reconocida por los programas que usan la informacin del archivo. Existen tres tipos de permisos para cada archivo: leer, escribir y ejecucin. Adems, se puede aplicar un permiso diferente a cada persona. Como dueo de un archivo, el lector posee un conjunto de permisos de lectura, escritura y ejecucin. Su grupo tiene otro conjunto. Los dems tienen un tercer conjunto. El bit de set-uid es una idea simple pero elegante que resuelve varios problemas de seguridad. Es particularmente serio para un programa con atributo set-uid ya que root tiene permisos de acceso a cualquier archivo en el sistema. (Algunos sistemas UNIX apagan el bit-uid cuando un archivo se modifica, para reducir el peligro de una falla de seguridad). Existen llamadas al sistema que crean y borran archivos, y solo a travs de ellas es posible cambiar el contenido de un directorio. Sin embargo, la idea de los permisos aun se aplica. Los permisos para borrar archivos son independientes del archivo mismo. Si el usuario tiene permiso de escritura en un directorio, puede borrar archivos de l, aun los que estn protegidos contra escritura.

Ver un archivo.
Para ver el contenido de un archivo podemos escribir: o cat o more o less

50

Cat cat <fichero>, y veremos el contenido de un fichero, por ejemplo cat carta.txt veremos el contenido de la carta, pero si la carta es demasiado grande deberemos escribir un parmetro para poder leer detenidamente el contenido, es "|more", entonces, para cartas largas escribimos: cat carta.txt |more More more <fichero>, realiza la misma opcin de cat carta.txt |more, pero evidentemente tendremos que escribir menos, bastar con el comando de la siguiente manera: more carta.txt Less Ya que con cat, perderemos el contenido del fichero por la parte superior de la pantalla, con less, podremos navegar por el fichero, y con los cursores podremos ir para arriba y para abajo dentro del mismo fichero: less carta.txt Ver un archivo comprimido. Para ver un archivo comprimido, y sin quererlo descomprimir utilizamos los comandos zcat, zmore y zless, que realizan las mismas cosas que cat, more y less respectivamente, pero en ficheros comprimidos. Copiar un Archivo Para copiar un archivo utilizaremos el comando cp, este comando es muy potente, su funcionamiento es el siguiente: cp <origen> <destino> As, por ejemplo, si queremos copiar la carta "carta.txt" como "MiCarta.txt", escribimos: $ cp carta.txt MiCarta.txt Tambin indicaremos la ruta de origen y destino (directorios en el que est situado), por ejemplo, supongamos que escribimos pwd, y nos dicen que estamos en: /home/JulianJacobo Queremos copiar el archivo FAQ que hay en /usr/doc/HOWTO/ a nuestro directorio MisDocumentos, que se encuentra en /home/JulianJacobo/MisDocumentos, podremos escribir: $ cp /usr/doc/HOWTO/FAQ MisDocumentos/ o

51

$ cp /usr/doc/HOWTO/FAQ /home/JulianJacobo/MisDocuementos/ Mover un Archivo Mover un archivo, significa, quitarlo de su posicin actual para fijarlo donde se le indique, esta operacin, se hace con mv de la siguiente manera: $ mv fichero_o_directorio_a_mover ruta_donde_moverlo Supongamos que nos encontramos en: /home/JulianJacobo Por ejemplo para mover el fichero "mbox" que est en mi directorio al directorio MisDocumentos/JulianJacobo/ que est en /usr, escribimos: $ mv mbox /usr/MisDocumentos/ Ahora, el fichero mbox, se encuentra en el directorio JulianJacobo, que est en MisDocumentos que est en usr, es decir: "/usr/MisDocumentos/JulianJacobo

Renombrar un Archivo. Para renombrar un archivo utilizamos el comando mv de la siguiente manera: mv NombreOrinal NuevoNombre Por ejemplo, renombrar el fichero mbox, a EmailSaved $ mv mbox EmailSaved Borrar un Archivo Para borrar un archivo, es tan fcil como utilizar el comando rm de la siguiente manera: rm fichero_a_borrar Ejemplo: $ rm mbox Borrar un DIRECTORIO Para borrar un directorio utilizamos el comando rmdir. Esto es un ejemplo: Creamos un directorio que se llame ParaBorrar, con el comando mkdir $ Mkdir ParaBorrar

52

Vemos los ficheros que tenemos con el comando ls $ ls y lo borramos con rmdir $ rmdir ParaBorrar Ya sabemos, que tambin podemos crear un directorio o borrarlo, sin necesidad de acceder a l, simplemente indicando su ruta: $ Mkdir /usr/doc/HOWTO/EstoEsMio $ rmdir /usr/doc/HOWTO/EstoEsMio

Ls ls (del ingls list) muestra un listado con los archivos y directorios de un determinado directorio. Los resultados se muestran ordenados alfabticamente. Los archivos y directorios cuyo nombre comienza con . (punto) no se muestran con la instruccin ls, por lo que se suelen denominar "archivos ocultos". La opcin -a de ls inhibe este comportamiento, mostrando todos los archivos y subdirectorios, incluso los que comienzan con punto.

ls : sin argumentos muestra el listado del directorio actual ls archivo1 archivo2 archivo3 ... subdir1 subdir2 subdir3 ... : muestra un listado de los archivos y subdirectorios especificados en la lnea de rdenes. Para los archivos muestra el nombre solamente (o ms informacin si se emplea alguna opcin como -l ) y para los subdirectorios muestra todos los archivos incluidos en el subdirectorio. Este comportamiento distinto de ls ante archivos y subdirectorios puede igualarse usando el parmetro -d, que hace que se trate a los subdirectorios como archivos. Ntese que pueden ponerse directorios y archivos en la lnea de rdenes en cualquier orden.

Opciones ms comunes

-l muestra un listado en el formato largo, con informacin de permisos, nmero de enlaces asociados al archivo, usuario, grupo, tamao y fecha de ltima modificacin adems del nombre. -h con -l imprime el tamao de los archivos de forma entendible (ej. 1K 234M 2G). -d muestra solamente el nombre del subdirectorio, sin entrar en l ni dar un listado del contenido. 53

-t muestra ordenado por la fecha de ltima modificacin. -c muestra ordenado por la fecha de ltima modificacin del estado del archivo. -r cuando el listado se hace por orden temporal, los archivos ms recientes van al principio. Si se indica la -r se invierte el orden, mostrando los ms recientes al final. -L en los enlaces simblicos, muestra los datos del archivo referenciado en vez de los del link. -1 muestra el listado en una sola columna. Sin la opcin -1 el listado se muestra en varias columnas, tantas como permita el ancho de la terminal (generalmente controlado con la variable de entorno $COLUMNS). -i muestra el nmero de i-nodo antes del nombre de archivo. -m muestra los archivos en una lnea y separados por comas. -R hace un listado recursivo. Lista primero los archivos del directorio en curso, luego los de los subdirectorios de ste, luego los de los subdirectorios contenidos en ellos (nietos) y as sucesivamente. -s muestra delante del nombre del fichero el tamao en kilobytes del mismo. --color muestra cada tipo de archivo de un color distinto: un color para los directorios, otro para los archivos regulares, otro para los enlaces simblicos, otro para los sockets, otro para las tuberas FIFO, etc. Este parmetro no se acepta en todas las versiones de ls y, por supuesto, requiere que la terminal sea capaz de mostrar distintos colores o intensidades. - a muestra los archivos ocultos.

Al igual que en la mayora de las rdenes unix, las opciones se pueden agrupar, de manera que es lo mismo poner ls -li que ls -l -i . O tambin es lo mismo ls -ltra que ls -l -t -r -a Ejemplo: Un listado del directorio actual se obtendra as: $ ls Manual.txt.gz archivo1.txt hosts servidores syslog.0

54

Impresoras Para imprimir un fichero, tecleamos: $ lpr fichero Lo anterior imprimir los ficheros nombrados, en la impresora por default. Si no indicamos el nombre del fichero, lpr leer los datos a imprimir de la entrada estandar. Por ejemplo, este comando imprime algunos ficheros importantes del sistema: $ lpr /etc/host.conf /etc/hosts.equiv Para seleccionar una impresora, tecleamos: $ lpr -P nombre-de-la-impresora fichero Este ejemplo imprime una larga lista del directorio actual, en la impresora nombrada julian_imp: $ ls -l | lpr -P julian_imp En virtud de que no se le paso fichero alguno para imprimir a lpr, lpr toma los datos de la entrada estandar, que en este caso es la salida del comando ls -l. El comando lpr tambin puede aceptar gran variedad de opciones para controlar el formato, aplicar conversiones a los ficheros, generar copias mltiples, etc. Dispositivos Como lo indica su nombre, /dev contiene archivos de dispositivos. Una de las mejores ideas del sistema UNIX es la manera en que trata los perifricos (discos, unidades de cinta, impresoras, terminales, etc.).Por ejemplo, en lugar de tener rutinas del sistema especiales para leer cintas magnticas, existe u archivo llamado /dev/mt0 (dependiendo esto tambin de las costumbres locales) Dentro del ncleo, las referencias a ese archivo se convierten en comandos de hardware para acceder la cinta, as, si un programa lee /dev/mt0. Obtiene el contenido de una cinta montada en una unidad de cinta. Creacin de un sistema de archivos La creacin de un SF puede hacerse en 6 etapas: 123456Dar fromato al soporte fsico con el mandato iv o format. Crear al SF con mkfs. Montar el SF con el mandato mount. Crear al directorio /lost+found. Dar nombre al SF con el mandato labelit. Dar formato a un volumen.

55

Procmail procmail es una aplicacin increblemente potente que se utiliza para filtrar el correo de entrada. Permite a los usuarios definir reglas que se asocian con correos entrantes y que realizan funciones concretas, como reencaminar el correo a carpetas o direciones alternativas. procmail se puede instalar utilizando el port mail/procmail. Una vez instalado, se puede integrar directamente en la mayora de los MTAs. Por otro lado procmail se puede integrar con el MTA que prefiera de una forma sencilla aadiendo la siguiente lnea al fichero .forward dentro del directorio home del usuario que dese usar procmail: "|exec /usr/local/bin/procmail || exit 75" La siguiente seccin muestra algunas reglas bsicas de procmail, junto con una breve descripcin de las acciones que realizan. Estas reglas, y muchas otras se deben insertar dentro del fichero .procmailrc ubicado en el directorio home del usuario. Reenvo de todo el correo proveniente de usuario@ejemplo.com hacia la direccin externa correodefiar@ejemplo.com: :0 * ^From.*usuario@ejemplo.com ! correodefiar@ejemplo.com Reenvo de todos los correos que direccin corredefiar@ejemplo2.com: :0 * < 1000 ! correodefiar@ejemplo2.com Envo de todos los correos dirigidos a opcional@ejemplo.com hacia una carpeta de correo llamada opcional: :0 * ^TOopcional@ejemplo.com opcional Envo de todos los correos con un asunto que contenga la palabra Spam al dispositivo /dev/null: :0 ^Subject:.*Spam /dev/null

ocupen

menos

de

1000

bytes

la

56

Loop devices En sistemas operativos como Unix, un loop device, VND (disco vnode), o lofi (interfaz de bucle invertido de archivos) es un pseudo-dispositivo que hace a un archivo accesible como un dispositivo de bloques. Antes del uso, un dispositivo de circuito debe estar conectado a un archivo existente en el sistema de ficheros. La asociacin proporciona al usuario una API que permite que el archivo se utilice en lugar de un archivo especial de bloques (cf. dispositivo de sistema de archivos). As, si el archivo contiene un sistema de archivo completo, el archivo a continuacin, se puede montar como si se tratara de un dispositivo de disco. Ejemplo: Para montar un archivo que contenga una imagen, en un directorio, se necesitan 2 pasos: 1. Asociar el archivo con un nodo loop device, 2. Montar el loop device en un directorio de punto de montaje. Estas dos operaciones se pueden realizar usando dos comandos separados o a travs de una bandera especial al comando. La primer operacin debe ser realizada por programas como aslosetu o lofiad. Como por ejemplo, si ejemplo.img es un archive regular conteniendo un file system y /home/JulianJacobo/dir es un directorio de un usuario, el superuser (root) monta la imagen en el directorio ejecutando los siguientes comandos: $ losetup /dev/loop0 ejemplo.img $ mount /dev/loop0 /home/JulianJacobo/dir El Segundo comando monta el dispositivo en /home/JulianJacobo/dir. El efecto global de la ejecucin de estos dos comandos es que el contenido del archivo se utiliza como un sistema de archivos raz en el punto de montaje. La utilidad de montaje suele ser capaz de manejar todo el procedimiento: $ mount -o loop ejemplo.img /home/JulianJacobo/dir El dispositivo puede ser desmontado con el siguiente commando: umount /home/JulianJacobo/dir # o, despues de encontrar "/home/JulianJacobo/dir" # o losetup -a | grep ejemplo.img umount /dev/loop<N> el numero loop asociado por ejemplo mount | grep

57

Cdrom El programa mkisofs (que forma parte del port sysutils/cdrtools) genera un sistema de ficheros ISO 9660 que es una imagen de un rbol de directorios en el espacio de nombres del sistema de ficheros UNIX. Esta es la forma ms simple de usarlo: # mkisofs -o ficherodeimagen.iso /ruta/del/rbol Este comando crear un ficherodeimagen.iso que contenga un sistema de ficheros ISO 9660 que es una copia del rbol ubicado en /ruta/al/rbol. En el proceso, mapear los nombres de fichero a nombres que se ajusten a las limitaciones del estndar del sistema de ficheros ISO 9660, y excluir ficheros que posean nombres no caractersticos de sistemas de ficheros ISO. Si tenemos una grabadora ATAPI podemos usar burncd para grabar una imagen ISO en un CD. burncd forma parte del sistema base, y est en /usr/sbin/burncd. Su uso es muy sencillo, ya que tiene pocas opciones: # burncd -f unidaddecd data ficheroimagen.iso fixate Esto grabar una copia de ficheroimagen.iso en unidadcd. El dispositivo por defecto es /dev/acd0 . Si no disponemos de una grabadora ATAPI de cd, tendremos que usar cdrecord para grabar CDs. Aunque cdrecord tiene muchas opciones, el uso bsico es incluso ms simple que el de burncd. As se graba una imagen ISO 9660: # cdrecord dev=dispositivo ficheroimagen.iso Podemos copiar un CD de datos a un fichero de imagen que ser funcionalmente equivalente al fichero de imagen creado con mkisofs, y podemos usarlo para duplicar cualquier CD de datos. El ejemplo dado aqu asume que nuestro dispositivo CDROM es acd0. # dd if=/dev/acd0 of=fichero.iso bs=2048 Hecha la imagen podemos garbarla en un CD como se describi anteriormente.

Uso de CD de datos: Podemos hacerlo mediante la opcin -t cd9660. Por ejemplo, si queremos montar el dispositivo CDROM /dev/cd0 en /mnt ejecutamos: # mount -t cd9660 /dev/cd0 /mnt

58

Herramientas de Desarrollo:

VI Vi (Visual) a diferencia de un procesador de texto no ofrece herramientas para determinar visualmente cmo quedar el documento impreso. Es por esto que carece de opciones, como centrado o justificacin de prrafos, pero permite mover, copiar, eliminar o insertar caracteres con mucha versatilidad. Este tipo de programas es frecuentemente utilizado por programadores para escribir cdigo fuente de software. Vi es un editor con diferentes modos. En el modo de edicin el texto que ingresemos ser agregado al texto, en modo de comandos las teclas que oprimamos pueden representar algn comando de vi. Cuando comencemos a editar un texto estar en modo para dar comandos. Por ejemplo, el comando para salir es: seguido de q y ENTER; con ese comando saldr si no hicimos cambios al archivo o los cambios ya estn salvados, para salir ignorando cambios :q! seguido de ENTER. Podemos insertar texto (pasar a modo edicin) con varias teclas: i Inserta texto antes del carcter sobre el que est el cursor. a Inserta texto despus del carcter sobre el que est el cursor. I Inserta texto al comienzo de la lnea en la que est el cursor. A Inserta texto al final de la lnea en la que est el cursor. o Abre espacio para una nueva lnea despus de la lnea en la que est el cursor y permite insertar texto en la nueva lnea. O Igual al anterior, pero abre espacio en la lnea anterior.

59

ESC Abandonar el modo de inclusin de texto para volver al modo de comandos; tambin se usa para cancelar comandos. (Usarlo en caso de duda) Cntl-F Avanzar una pgina hacia adelante Cntl-B Avanzar una pgina hacia atrs Cntl-L Refrescar la pantalla G Cursor al final del fichero 1G Cursor al principio del fichero $ Cursor al final de la lnea 0 (cero) Cursor al principio de la lnea dd Borra una lnea entera. Para pasar de modo edicin a modo de comandos se emplea la tecla ESC, para desplazarnos sobre el archivo se emplean las teclas j (abajo), k (arriba), h (izquierda) y l (derecha). Tambin podemos emplear las flechas si nuestra terminal lo permite, Ctrl+U (PgUp), Ctrl+D (PgDn). Para ir a una lnea especfica podemos escribir el nmero de la lnea seguido de gg o G, por ejemplo 25G o tambin podemos utilizar : seguido del nmero de lnea y ENTER. Para mostrar el nmero de las lneas, se podemos ejecutar : set number, y para quitar los nmeros : set nonumber. Para ir al final de la lnea en la que est el cursor $, para ir

60

al comienzo 0. Para llegar al inicio del archivo 1G o gg y para llegar al final del archivo G. Para buscar un texto: / texto seguido del texto que desea buscar y ENTER. Luego podemos presionar n o N para el siguiente o anterior resultado de la bsqueda. Despus de hacer cambios podemos salvarlos con :w o para salvar y salir puede emplear ZZ. Para ejecutar un comando del intrprete de comandos podemos emplear :! seguido del comando y ENTER (e.g :!ls). Podemos teclear :set all para ver las opciones disponibles. Una de las utilidades ms comunes es el uso de :wq que corresponde a la unin de las opciones guardar (w) y salir (q), o bien el modo forzado es :q! que sale de vi sin guardar cambios.

Invocacin de vi $ vi Abre la ventana de edicin sin abrir ningn archivo. $vi arch1 Edita el archivo arch1 si existe; si no, lo crea. $vi arch1 arch2 Edita sucesivamente los archivos arch1 y luego arch2. $vi +45 arch1 Edita el archivo arch1 posicionando el cursor en la lnea 45. $vi +$ arch1 Edita el archivo arch1 posicionando el cursor al final del archivo. $vi +/Habia arch1 Edita el archivo arch1 en la primera ocurrencia de la palabra "Habia". Vim Vim (del ingls Vi IMproved) es una versin mejorada del editor de texto vi, presente en todos los sistemas UNIX. Su autor, Bram Moolenaar, present la primera versin en 1991, fecha desde la que ha experimentado muchas mejoras. La principal caracterstica tanto de Vim como de Vi consiste en que disponen de diferentes modos entre los que se alterna para realizar ciertas operaciones, lo que los diferencia de la mayora de editores comunes, que tienen un slo modo en el que se introducen los rdenes mediante combinaciones de teclas o interfaces grficas. Modos Vim es un editor modal, lo que significa que se puede trabajar en diferentes modos para realizar una tarea determinada. Para ver en qu modo se encuentra Vim se debe de tener activada la opcin showmode. A continuacin se describen los seis modos de Vim. Los tres primeros son los modos del vi original.

61

Modo comandos Vim empieza en modo comando, tambin conocido como modo normal. En este modo se pueden emplear combinaciones de teclas para, por ejemplo, copiar lneas y trabajar en el formato del texto. ste es el modo central, desde el que se cambia a los otros modos. Si no se sabe qu se est haciendo, pulsando dos veces la tecla Escape siempre se puede volver al modo normal. Si ya se estaba en modo normal y tanto la configuracin de Vim como la del terminal lo permiten, Vim emite un pitido. Modo insercin En modo insercin cuando se pulsan las teclas se edita el texto como en otros editores. Se puede cambiar del modo comandos al modo insercin pulsando la tecla i. Hay un gran abanico de comandos para pasar al modo insercin, que difieren sustancialmente, pues permiten por ejemplo editar al final de la lnea, en un punto concreto del texto, editar borrando una palabra, entre muchas otras. Un usuario experto puede sacar un gran provecho de la existencia de esta variedad de rdenes. En el modo insercin todas las teclas tienen alguna funcin adems de la mera insercin, que se activan pulsando simultneamente las teclas Tecla control o Maysculas. La tecla Esc es muy importante en modo insercin, pues permite cambiar de modo insercin a modo comandos. Cambiando al modo comandos para realizar ciertas tareas se incrementa en gran medida la eficiencia en la edicin, y se puede aprovechar la potencia completa de Vim. Modo lnea de rdenes A este modo se accede pulsando la tecla dos puntos :. Tras los dos puntos se pueden introducir rdenes complejas, como por ejemplo buscar y reemplazar con expresiones regulares. Pulsando la tecla Esc se puede volver al modo rdenes. Las bsquedas se pueden realizar con la orden / (hacia adelante) .Tambin se pueden filtrar lneas mediante !. Modo visual Este modo es una mejora respecto a vi. Mediante unas ciertas combinaciones de teclas en combinacin con las teclas de movimiento del cursor, se puede marcar un rea de texto, ya sea un grupo de lneas o un bloque. Una vez se tiene el texto marcado se pueden usar rdenes del modo comandos para manipularlo. Las operaciones que se pueden realizar en este modo son ms simples que las del modo comandos. Modo seleccin Este modo empieza como el modo visual, pues hay que seleccionar un bloque de texto. Tras la seleccin, se puede cambiar al modo seleccin mediante Control-G. Una vez en el modo, si se pulsa una tecla imprimible, el texto seleccionado se borra, se termina el modo seleccin y aparece el smbolo correspondiente a la tecla pulsada. La seleccin se puede extender pulsando maysculas y las teclas de flechas, el comportamiento habitual en los programas de Microsoft Windows. Este modo se puede finalizar pulsando la tecla Escape.

62

Modo Ex Este modo se asemeja al modo lnea de rdenes, con la diferencia de que tras la ejecucin de una orden no se vuelve al modo comandos. Se entra en este modo pulsando Q y se termina con vi. En este modo Vim imita al editor de UNIX ex, que manipulaba el texto lnea a lnea debido a las limitaciones de la poca, en lugar de editar toda la pgina. Nano Nano es un editor de texto para sistemas Unix basado en curses. Es un clon de Pico, el editor del cliente de correo electrnico Pine. nano trata de emular la funcionalidad y la interfaz de fcil manejo de Pico, pero sin la integracin con Pine. Liberado bajo los trminos de la GNU General Public License, nano es software libre. Con la liberacin de la versin 2.0.7 la licencia se cambi de GPLv2 a GPLv3. Nano, como Pico, est orientado a un manejo desde teclado especficamente a combinaciones de la tecla Control. Por ejemplo, Control-O guarda el archivo actual y Control-W abre el men de bsqueda. La barra de accesos directos de nano tiene dos filas colocadas en la parte baja de la pantalla, que lista algunos de los comandos disponibles en funcin del contexto. Para ver una lista completa basta con presionar Control-G y se obtiene una pantalla de ayuda. A diferencia de Pico, nano utiliza metateclas para modificar su comportamiento. Por ejemplo, Meta-S permite alternar entre activar el desplazamiento vertical suave y desactivarlo. Casi todas las caractersticas que se pueden indicar desde la lnea de comandos pueden ser modificados dinmicamente. Emacs Emacs es un editor de texto con una gran cantidad de funciones, muy popular entre programadores y usuarios tcnicos. Es parte del proyecto GNU, activamente desarrollado. Es la versin ms popular de Emacs. El manual de GNU Emacs lo describe como "un editor extensible, personalizable, auto-documentado y de tiempo real." El EMACS original significa, Editor MACroS para el TECO. Fue escrito en 1975 por Richard Stallman junto con Guy Steele. Fue inspirado por las ideas de TECMAC y TMACS, un par de editores TECO-macro escritos por Guy Steele, Dave Moon, Richard Greenblatt, Charles Frankston, y otros. Se han lanzado muchas versiones de EMACS hasta el momento, pero actualmente hay dos que son usadas comnmente: GNU Emacs, iniciado por Richard Stallman en 1984, y XEmacs, un fork de GNU Emacs, que fue iniciado en 1991. Ambos usan una extensin de lenguaje muy poderosa, Emacs Lisp, que permite manejar tareas distintas, desde escribir y compilar programas hasta navegar en Internet. GNU Emacs es mantenido por el Proyecto GNU Emacs, el cual cuenta entre sus miembros a Richard Stallman. Uso de emacs Desde el shell de Unix, un fichero se puede abrir para ser editado escribiendo "emacs [nombre del fichero]". Si el fichero cuyo nombre se ha introducido no existe, se crear un nuevo fichero con este nombre. Por ejemplo, escribiendo "emacs xorg.conf" se editar el fichero xorg.conf en el directorio actual, si existe. No obstante, la documentacin de Emacs recomienda iniciar el programa sin introducir un nombre de fichero, para evitar el 63

mal hbito de iniciar un proceso separado para cada fichero a editar. La manera de sacarle partido completamente a Emacs es abrir todos los ficheros desde una nica instancia del programa. En el modo de edicin normal, Emacs se comporta como otros editores de texto: Las teclas de caracteres (a, b, c, 1, 2, 3, etc.) sirven para insertar los caracteres correspondientes, las teclas de flecha mueven el punto de edicin, la tecla backspace borra texto, etc. Otros comandos pueden ser invocados mediante teclas modificadoras, presionando Control o Meta (equivalente a la actual tecla Alt) o ambas, junto con otra tecla. Cada comando de edicin es en realidad una llamada a una funcin en el entorno de Emacs Lisp. Incluso un comando tan simple como escribir a para insertar el carcter a implica una llamada a una funcin. En este caso, la funcin sera self-insert-command. Ms abajo se muestran algunos de los comandos bsicos. Se pueden encontrar ms en la lista de comandos de Emacs. La tecla de control se representa con una C mayscula y la tecla de alternativa (Alt) o meta se representa con una M mayscula.

Comando forward-word search-word undo keyboard-quit fill-paragraph find-file save-buffer save-with -newname set-marker cut copy paste kill buffer

Tecla M-f C-s C-/ C-g M-q C-x C-f C-x C-s C-x C-w C-[space]/C-@ C-w M-w C-y C-x k

Descripcin Avanzar una palabra. Buscar una palabra en el buffer. Deshacer el ltimo cambio, y cambios anteriores si se pulsa repetidamente. Abortar el comando actual. Wrap text in ("fill") a paragraph. Visitar un fichero (del cual se especifica el nombre) en su propio buffer de edicin. Guardar el buffer de edicin actual en su fichero visitado. Guardar el buffer de edicin actual como fichero cuyo nombre se ha de especificar. Colocar un marcador en el lugar donde se quiere cortar o copiar. Cortar todo el texto entre el marcador y el cursor. Copiar todo el texto entre el marcador y el cursor. Pegar texto del portapapeles de Emacs. Cerrar el buffer actual.

GNU Compiler Collection El GNU Compiler Collection (coleccin de compiladores GNU) es un conjunto de compiladores creados por el proyecto GNU. GCC es software libre y lo distribuye la FSF bajo la licencia GPL. Estos compiladores se consideran estndar para los sistemas operativos derivados de 64

UNIX, de cdigo abierto y tambin de propietarios, como Mac OS X. GCC requiere el conjunto de aplicaciones conocido como binutils para realizar tareas como identificar archivos objeto u obtener su tamao para copiarlos, traducirlos o crear listas, enlazarlos, o quitarles smbolos innecesarios. Originalmente GCC significaba GNU C Compiler (compilador GNU para C), porque slo compilaba el lenguaje C. Posteriormente se extendi para compilar C++, Fortran, Ada y otros. En su versin 4.6 incluye front ends para C (gcc), C++ (g++), Java (gcj), Ada (GNAT), Objective-C (gobjc), Objective-C++ (gobjc++) y Fortran (gfortran). Tambin est disponible, aunque no de forma estndar, soporte para Go (gccgo), Modula-2, Modula-3, Pascal (gpc), PL/I, D (gdc), Mercury, y VHDL (ghdl). Uso En modo texto C y C++ Para empezar a escribir el cdigo, primero hay que abrir el editor de textos. Para ello, escribimos lo siguiente: $ vi nombre_de_archivo.c Y ya podemos empezar a escribir el cdigo del programa que vayamos a crear. Una vez escrito, salimos del editor guardando el archivo (no olvidar que la instruccin para salir es :wq)

Ya guardado, procedemos a compilarlo con la siguiente instruccin $ gcc nombre_de_archivo.c

Hay que tener en cuenta que sta instruccin solo compila, para que adems cree el ejecutable, escribimos esto: $ gcc nombre_de_archivo.c -o nombre_ejecutable Cuando ya est compilado y se haya creado el ejecutable (siempre y cuando no haya habido errores de compilacin), para abrir el ejecutable hay que escribimos lo siguiente: $ ./nombre_ejecutable Y as ya est todo hecho. GDB GDB es el source debugger de GNU. Es un poderoso debugger que permite "ver" que est sucediendo dentro de programas escritos en C, C++ y Modula-2. Entre las capacidades ms notorias que este debugger posee estn: Debugging de programas complejos con mltiples archivos. Capacidad para detener el programa o ejecutar un comando en un punto especfico (breakpoints), segn una condicin (watchpoints) o al llegar un signal (catchpoints). Capacidad para mostrar valores de expresiones cuando el programa se detiene automticamente (displays).

65

Es posible examinar la memoria y/o variables de diversas formas y tipos, incluyendo estructuras, arreglos y objetos. Es posible igualmente cambiar los valores de las variables para estudiar el comportamiento del programa sin necesidad de recompilar. Posibilidad de realizar debugging a programas en ejecucin (procesos). Posibilidad de realizar debugging a programas que han finalizado. Mltiples formas de entrar al debugger.

Invocacin del Debugger El debugger se puede ejecutar de una de las siguientes formas: $ gdb Para entrar al modo interactivo. $ gdb programa Para cargar el programa y entrar en el modo interactivo. El programa no comienza hasta que sea indicado con un comando. $ gdb programa core Para realizar debugging de un programa que ha finalizado con un 'core'. El debugger carga el programa y su ambiente exactamente como termino. til para verificar porque un programa termino mal o para ver donde un programa se colg (usando CTRL-\ para cortar el programa y obtener un core). $ gdb programa pid Para depurar un programa en ejecucin con el pid indicado. El proceso se detiene y el debugger lo controla en otro terminal. Sumamente til para depurar programas con interfaz desde otro terminal virtual. Una vez que se entra al modo interactivo. GDB acepta comandos hasta que se le indique que se desea salir con el comando 'quit'. La presin de ENTER solo en una lnea siempre invoca el ltimo comando introducido. Comandos ms Frecuentemente Usados: Los comandos ms frecuentemente usados son: $ list [archivo:]funcion $ list [archivo:]linea[,linea] $ list $ list Para listar el fuente a partir de una funcin o una lnea. 'list' solo continua el listado previo (page down). 'list -' lista las lneas anteriores (page up). $ break [archivo:]funcion $ break [archivo:]linea 66

Para colocar un breakpoint al comienzo de la funcin o al comienzo de la lnea indicada. $ run [argumentos] Para comenzar la ejecucin del programa desde el principio. Los argumentos son los pasados al ejecutable. $ bt (backtrace) Para mostrar el stack del programa, indicando las funciones invocadas y en qu lugares fueron llamadas. $ print expr Para mostrar el valor de una expresin. $c Para continuar la ejecucin del programa despus de que ha sido detenido con un signal o un breakpoint. $ next Ejecuta la prxima lnea del programa sin entrar dentro de las funciones. Se puede aprovechar el hecho que GDB repite el ltimo comando con ENTER para ejecutar varias lneas seguidas. $ step Ejecuta la prxima lnea del programa entrando en funciones. Se puede aprovechar el hecho que GDB repite el ltimo comando con ENTER para ejecutar varias lneas seguidas. $ jump lnea Salta los comandos siguientes y comienza la ejecucin a partir de 'lnea'. til para continuar un programa que ha terminado con 'core', arreglando la situacin y saltando las lneas defectuosas. $ help [item] Ayuda en lnea. $ quit Sale de GDB. 67

Gua de compilacin de un programa realizado en C en FreeBSD En esta gua utilizaremos un programa generado en la materia Arquitectura de los Sistemas Operativos, my_ls(cuyo cdigo se encuentra disponible como anexo), cuya descripcin es la siguiente: Muestra en pantalla una lista con todos los directorios y archivos contenidos en X directorio, se pueden filtrar los resultados: -e : lista todos los archivos contenidos en <directorio>. -d : lista slo los directorios contenidos en <directorio>. -i : lista el nmero de i-nodo y el nombre de los archivos contenidos en <directorio>. Ejemplos: ./my_ls Documentos ./my_ls -e Documentos ./my_ls -d Documentos ./my_ls -i Documentos ./my_ls //Muestra todo lo contenido en Documentos //Muestra todos los archivos contenidos en Documentos //Muestra todos los directorios en Documentos //Muestra el i-nodo continuado del nombre de los archivos contenidos en Documentos //Muestra todo lo contenido en el directorio en el directorio actual

Para compilar un programa utilizamos el compilador por defecto de FreeBSD, gcc. Para ello basta con llamar al programa, seguido de algunos argumentos: $ gcc my_ls.c Hay que tener en cuenta que sta instruccin solo compila, para que adems cree el ejecutable, escribimos esto: $ gcc my_ls.c -o my_ls Cuando ya est compilado y se haya creado el ejecutable (siempre y cuando no haya habido errores de compilacin), para abrir el ejecutable que escribimos lo siguiente: $ ./my_ls Esto es lo que se obtiene en Terminal al ejecutar los commandos nombrados: $./my_ls El directorio Actual es: /root/Desktop/ /root/Desktop/. /root/Desktop/.. /root/Desktop/Downloads /root/Desktop/my_cat.c /root/Desktop/my_chmod.c 68

/root/Desktop/my_ls.c /root/Desktop/my_ps.c /root/Desktop/my_cat /root/Desktop/my_chmod /root/Desktop/my_ls /root/Desktop/my_ps Lenguajes BASIC BASIC, siglas de Beginner's All-purpose Symbolic Instruction Code, es una familia de lenguajes de programacin de alto nivel. El BASIC original, el Dartmouth BASIC, fue diseado en 1964 por John George Kemeny y Thomas Eugene Kurtz en el Dartmouth College en New Hampshire, Estados Unidos, como un medio para facilitar programar computadores a estudiantes (y profesores) que no fueran de ciencias. En ese tiempo, casi todo el uso de los computadores requera codificar software hecho a la medida, lo cual era algo bastante restringido a personas con formacin como cientficos y matemticos. BASIC originalmente fue desarrollado como una herramienta de enseanza. El lenguaje y sus variantes llegaron a estar ampliamente disponibles en los microcomputadores a finales de los aos 1970 y en los aos 1980. El BASIC sigue siendo popular hasta el da de hoy en un puado de dialectos altamente modificados, y en nuevos lenguajes, influenciados por BASIC tales como Microsoft Visual Basic, Gambas en GNU/Linux o The Bywater Basic y the Phil Cockrofts Basic en Unix. Por el ao 2006, el 59% de los desarrolladores para la plataforma .NET usaban Visual Basic .NET como su nico lenguaje. The Bywater Basic Interpreter puede ser encontrado en los puertos de colecciones como lang/bwbasic y the Phil Cockroft's Basic Interpreter (formerly Rabbit Basic) est disponible como lang/pbasic. Lisp El nombre LISP deriva del "LISt Processing" (Proceso de LIStas). Las listas encadenadas son una de las estructuras de datos importantes del Lisp, y el cdigo fuente del Lisp en s mismo est compuesto de listas. Como resultado, los programas de Lisp pueden manipular el cdigo fuente como una estructura de datos, dando lugar a los macro sistemas que permiten a los programadores crear una nueva sintaxis de lenguajes de programacin de dominio especfico empotrados en el Lisp.

La intercambiabilidad del cdigo y los datos tambin da a Lisp su instantneamente reconocible sintaxis. Todo el cdigo del programa es escrito como expresiones S, o

69

listas entre parntesis. Una llamada de funcin o una forma sintctica es escrita como una lista, con la funcin o el nombre del operador en primer lugar, y los argumentos a continuacin; por ejemplo, una funcin f que toma tres argumentos puede ser llamada usando (f x y z) Varias implementaciones de Lisp que pueden correr en sistemas UNIX, estn disponibles en los puertos de coleccin para FreeBSD. GNU Common Lisp puede ser encontrado como lang/gcl. CLISP por Bruno Haible y Michael Stoll est disponible como lang/clisp. Para CMUCL, que incluye un compilador altamente optimizado, o simples implementaciones Lisp como SLisp, que implementa la mayora de los constructores comunes de Lisp en unas pocas lneas de cdigo C, lang/cmucl y lang/slisp estn disponibles respectivamente. Perl Muy popular con administradores de sistemas para la escritura de scripts; tambin usado en servidores de internet para escribir scripts CGI. Perl est disponible en los puertos de colecciones como lang/perl15.8 para todas las distribuciones de FreeBSD. Icon Icon es un lenguaje de muy alto nivel con facilidades extensivas para procesar cadenzas y estructuras. La versin de Icon en FreeBSD puede ser encontrada en los puertos de coleccin como lang/icon. Logo Logo es un lenguaje fcil de aprender, y fue usado como una introduccin a la programacin en varios cursos. Es una herramienta excelente para ensear a programar en edades tempranas. La ltima versin de Logo para FreeBSD est disponible en los puertos de colecciones en lang/logo. Python Python es un lenguaje intrprete orientado a objetos. Sus defensores argumentan que es uno de los mejores lenguajes de programacin para comenzar, ya que es relativamente fcil para empezar, pero no est limitado en comparacin con otros lenguajes populares interpretes que se utilizan para el desarrollo de aplicaciones grandes y complejas (Perl es un lenguaje popular para las tareas de este tipo). La ltima versin de Python est disponible en los puertos de colecciones en lang/python.

70

Servicios: Daemons: Inetd: Se conoce como el Super Servidor de Internet debido a que gestiona las conexiones de varios dmones que proporcionan servicios de red. inetd acta como un servidor de gestin de otros dmones. Cuando inetd recibe una conexin se determina qu dmon debera responder a dicha conexin, se lanza un proceso que ejecuta dicho dmon y se le entrega el socket. La ejecucin de una nica instancia de inetd reduce la carga del sistema en comparacin con lo que significara ejecutar cada uno de los dmones que gestiona de forma individual. inetd se utiliza principalmente para lanzar procesos que albergan a otros dmones pero inetd tambin se utiliza para gestionar determinados protocolos triviales como chargen, auth y daytime. Configuraciones inetd se inicializa a travs del fichero /etc/rc.conf en tiempo de arranque. La opcin inetd_enable posee el valor NO por defecto, pero a menudo la aplicacin sysinstall la activa cuando se utiliza la configuracin de perfil de seguridad medio. Estableciendo inetd_enable="YES" o inetd_enable="NO" Dentro de /etc/rc.conf se puede activar o desactivar la ejecucin de inetd en el arranque del sistema. Se pueden adems aplicar distintas opciones de lnea de rdenes mediante la opcin inetd_flags. Opciones de lnea de rdenes Sinpsis: inetd [-d] [-l] [-w] [-W] [-c mximo] [-C tasa] [-a direccin | nombre_de_host] [-p nombre_de_fichero] [-R tasa] [fichero de configuracin ] -d Activa la depuracin. 71

-l Activa el logging de las conexiones efectuadas. -w Activa el recubrimiento de TCP para servicios externos (activado por defecto). -W Activa el recubrimiento de TCP para los servicios internos, ejecutados directamente por el dmon inetd (activado por defecto). -c mximo Especifica el mximo nmero de invocaciones simultneas de cada servicio; el valor por defecto es ilimitado. Se puede sobreescribir para cada servicio utilizando la opcin max-child. -C tasa Especifica el mximo nmero de veces que se puede llamar a un servicio desde un direccin IP determinada por minuto; el valor por defecto es ilimitado. Se puede redefinir para cada servicio utilizando la opcin maxconnections-per-ip-per-minute. -R tasa Especifica el mximo nmero de veces que se puede invocar un servicio en un minuto; el valor por defecto es 256. Un valor de 0 permite un nmero ilimitado de llamadas. -a Especifica una direccin IP a la cual se asocia y sobre la cual se queda esperando recibir conexiones. Puede declararse tambin un nombre de mquina, en cuyo caso se utilizar la direccin (o direcciones si hay ms de una) IPv4 o IPv6 que estn tras dicho nombre. Normalmente se usa un nombre de mquina cuando inetd se ejecuta dentro de un jail, en cuyo caso el nombre de mquina se corresponde con el entorno jail. Cuando se desea asociarse tanto a direcciones IPv4 como a direcciones IPv6 y se utiliza un nombre de mquina se necesita una entrada para cada protocolo (IPv4 o IPv6) para cada servicio que se active a travs de /etc/inetd.conf. Por ejemplo un servicio basado en TCP necesitara dos entradas, una utilizando tcp4 para el protocolo IPv4 y otra con tcp6 para las conexiones a travs del procolo de red IPv6. -p Especifica un fichero alternativo en el cual se guarda el ID del proceso. Estas opciones se pueden declarar dentro de las variables inetd_flags del fichero /etc/rc.conf. Por defecto inetd_flags tiene el valor -wW, lo que activa el 72

recubrimiento de TCP para los servicios internos y externos de inetd. Los usuarios inexpertos no suelen introducir estos parmetros y por ello ni siquiera necesitan especificarse dentro de /etc/rc.conf. Nota: Un servicio externo es un dmon que se ejecuta fuera de inetd y que se lanza cuando se recibe un intento de conexin. Un servicio interno es un servicio que inetd puede servir directamente sin necesidad de lanzar nuevos procesos.

inetd.conf: La configuracin de inetd se realiza a travs del fichero de configuracin /etc/inetd.conf. Cuando se realiza una modificacin en el fichero /etc/inetd.conf se debe obligar a inetd a releer dicho fichero de configuracin, lo cual se realiza enviando una seal HANGUP al proceso inetd como se muestra a continuacin: Ejemplo 29-4. Envo de una seal HANGUP a inetd # kill -HUP `cat /var/run/inetd.pid` Cada lnea del fichero de configuracin especifica un dmon individual. Los comentarios se preceden por el caracter #. El formato del fichero de configuracin/etc/inetd.conf es el siguiente: service-name socket-type protocol {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] user[:group][/login-class] server-program server-program-arguments A continuacin se muestra una entrada de ejemplo para el dmon ftpd para IPv4: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l

service-name Este es el nombre del servicio que proporciona un determinado dmon. Se debe corresponder con el nombre del nombre de servicio que se declara en el fichero/etc/services. Este fichero determina sobre qu puerto debe ponerse a

73

escuchar inetd. Si se crea un nuevo servicio se debe especificar primero en/etc/services. socket-type Puede ser stream, dgram, raw o seqpacket. stream se debe utilizar obligatoriamente para dmones orientados a conexin (dmones TCP) mientras que dgramse utiliza en dmones basados en el protocolo de transporte UDP. protocol Uno de los siguientes: Protocolo tcp, tcp4 udp, udp4 tcp6 udp6 tcp46 TCP IPv4 UDP IPv4 TCP IPv6 UDP IPv6 TCP IPv4 e IPv6 al mismo tiempo Explicacin

udp46 UDP IPv4 e IPv6 al mismo tiempo {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] wait|nowait indica si el dmon puede gestionar su propio socket o no. Los sockets de tipo dgram deben utilizar obigatoriamente la opcin wait mientras que los dmones basados en sockets de tipo stream, los cuales se implementan normalmente mediante hilos, debera utilizar la opcin nowait. La opcin waitnormalmente entrega varios sockets a un nico dmon, mientras que la opcin nowait lanza un dmon hijo por cada nuevo socket. El nmero mximo de dmones hijo que puede lanzar inetd se puede especificar mediante la opcin max-child. Si se necesita por ejemplo un lmite de diez instancias para un dmon en particular se puede especificar el valor 10 justo despus de la opcin nowait. Adems de max-child se puede activar otra opcin para limitar en nmero mximo de conexiones que se aceptan desde un determinado lugar mediante la opcinmaxconnections-per-ip-per-minute. Esta opcin hace justo lo que su nombre indica. Un valor de, por ejemplo, diez en esta opcin limitara cualquier mquina remota a un mximo de diez intentos de conexin por minuto. Esto resulta til para prevenir un consumo incontrolado de recursos y ataques de Denegacin de Servicio (Denial of Service o DoS) sobre nuestra mquina. Cuando se especifica este campo las opciones wait o nowait son obligatorias maxchild y max-connections-per-ip-per-minute son opcionales. Un dmon de tipo stream sin la opcin max-child y sin la opcin max-connections-perip-per-minute simplemente especificara la opcin nowait. El mismo dmon con el lmite mximo de diez dmones hijos sera: nowait/10.

74

La misma configuracin con un lmite de veinte conexiones por direccin IP por minuto y un mximo total de diez dmones hijos sera: nowait/10/20. Todas estas opciones son utilizadas por el dmon fingerd que se muestra a continuacin a modo de ejemplo: finger stream tcp user Este es el nombre de usuario con el que debera ejecutarse un determinado dmon. Normalmente los dmones se suelen ejectar con permisos de root. Por motivos de seguridad, resulta bastante comn encontrarse con algunos servidores que se ejecutan bajo el usuario daemon o incluso por el usuario menos privilegiado de todos que es el usuario nobody. nowait/3/10 nobody /usr/libexec/fingerd fingerd -s

server-program La ruta completa de la localizacin del dmon que se quiere ejecutar cuando se recibe un intento de conexin. Si el dmon es un servicio proporcionado por el propio inetd se debe utilizar la opcion internal en su lugar. server-program-arguments Esto funciona en conjuncin con server-program, ya que especifica los argumentos, comenzando por argv[0], que se pasan al dmon cuando se le invoca. Si la lnea de rdenes es mydaemon -d, midmon -d debera ser el valor de la opcin server-program-arguments. Si el dmon es un servicio interno se debe utilizar la utilizar la opcin internal en lugar de la que estamos comentando.

Xinetd: xinetd (eXtended InterNET Daemon), Demonio EXtendido de Internet, es un servicio o demonio que usan gran parte de los sistemas Unix dedicado a administrar la conectividad basada en Internet. xinetd es una extensin ms segura del servicio de Internet inetd. xinetd contiene mecanismos de control de acceso como Wrappers TCP, Listas de Control de Acceso, y la posibilidad de habilitar los Servicios_de_red basndose en el tiempo. Puede limitar la cantidad de servicios que se ejecutan, y contiene un sistema de proteccin contra escaneos de puertos.

75

Servicio FTP: El sistema operativo FreeBSD trae por defecto muchos programas y entre ellos se encuentra un pequeo y ligero servidor ftp para poder subir y bajar archivos remotamente. Para configurarlo primero editamos el archivo inetd.conf para activar el servidor ftp por defecto que vienen en todas las distribuciones FreeBSD. root# vi /etc/inetd.conf Y descomentamos las siguientes lineas : #ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l #ftp stream tcp6 nowait root /usr/libexec/ftpd ftpd -l Cuando estemos listos pulsamos la tecla ESC escape y seguidamente introducimos los caracteres :wp! Ahora editaremos el rc.conf para decirle al sistema que carge el cargador de demonios inetd. root# vi /etc/rc.conf A continuacin insertamos esta linea: inetd_enable=YES Cuando estemos listos pulsamos la tecla ESC escape y seguidamente introducimos los caracteres :wp! Reiniciamos la maquina para que los cambios surjan efecto. root# reboot Una vez este reiniciada la maquina vamos a comprobar que todo ha funcionado. root# netstat -a Si vemos estas dos lneas en pantalla es que todo ha resultado: tcp6 0 0 *.ftp *.* LISTEN tcp4 0 0 *.ftp *.* LISTEN

76

Servicio de Correo Electrnico: Existen varios elementos relacionados con el intercambio de correo electrnico. A saber: El agente de usuario (Mail User Agent o MUA), El agente de transporte de correo (Mail Transport Agent o MTA), El DNS, Las carpetas de correo (Mailboxes), y por supuesto, la mquina servidora de correo (mail host). El Agente de Usuario Entre las opciones ms conocidas tenemos: mutt, pine, elm, y mail, junto con programas con interfaz grfica del estilo de balsa o xfmail por nombrar unos pocos. Tambin existen lectores de correo basados en navegadores web. Los programas de correo basados en navegadores web actan de pasarela para las transacciones de correo electrnico, entregando dichas transacciones al servidor de correo local, llamando a uno de los agentes de transporte de correo disponibles en la mquina local, o entregando dichas transacciones a un agente de transporte remoto utilizando el protocolo TCP. Agente de Transporte de Correo FreeBSD viene con sendmail por defecto, pero tambin se soportan otros dmones, entre los cuales se encuentran:

exim; postfix; qmail.

El agente de transporte de correo normalmente posee dos funcionalidades, por un lado se responsabiliza de la recepcin y por otro se encarga de entregar el correo de salida. No es responsable de la recoleccin automtica de correo mediante la utilizacin de protocolos como POP o IMAP, ni se utiliza para que el usuario pueda acceder a las carpetas de correo locales. Para realizar estas otras tareas, se necesitan dmons adicionales. Correo electrnico y DNS El Sistema de Nombres de Dominio (en ingls DNS) y su correspondiente dmon (llamado named) constituyen una parte fundamental del procedimiento de entrega de correo electrnico. Para entregar el correo electrnico al destinatario adecuado el dmon servidor de correo busca el sitio remoto dentro del sistema de DNS. El DNS es la entidad responsable de asociar nombres con direcciones IP, pero adems se encarga de almacenar informacin especfica relacionada con la entrega de correo mediante registros de tipo MX. Los registros MX (Mail eXchanger) especifican qu mquina o mquinas estn encargadas de recibir correo electrnico para un determinado nombre de dominio. En caso de no existir ningn registro MX para el dominio del destinatario, 77

se busca informacin almacenada en registros de tipo A para enviar el correo al destino final. Se pueden consultar los registros MX para cualquier dominio utilizando el comando host, como se puede observar en el siguiente ejemplo: % host -t mx FreeBSD.org FreeBSD.org mail is handled (pri=10) by mx1.FreeBSD.org

Recepcin de correo La recepcin de correo electrnico para su dominio se realiza mediante lo que se conoce como la mquina de correo (mail host). sta mquina recoge todo el correo dirigido a su dominio y lo almacena en mbox (el mtodo por defecto para el almacenamiento de correo) o en formato Maildir, dependiendo de la configuracin de la mquina. Una vez que el correo ha sido almacenado con xito se puede leer en local utilizando aplicaciones como mail o como mutt, o de forma remota mediante un conjunto de protocolos tales como POP o IMAP. Esto significa que si se va a leer el correo de forma local no se necesita instalar ningn servidor de POP o IMAP.

Para poder acceder a carpetas de correo de forma remota se necesita tener acceso a un servidor de POP o IMAP. Estos protocolos permiten a los usuarios conectarse a sus carpetas de correo desde ubicaciones remotas de una forma sencilla. Aunque ambos, POP y IMAP, permiten este acceso remoto IMAP ofrece algunas ventajas aadidas, algunas de las cuales son:

El acceso mediante IMAP permite almacenar los correos en el servidor remoto sin necesidad de extraerlos y tener que almacenarlos en local. IMAP soporta actualizaciones concurrentes. IMAP resulta ser extremadamente til bajo enlaces de baja velocidad puesto que permite a los usuarios recuperar la estructura de los mensajes sin necesidad de bajarse todo el contenido. Adems puede realizar tareas tales como bsquedas directas en el servidor con el fin de minimizar la utilizacin de la red.

78

Para instalar un servidor de POP o de IMAP se deben dar los siguientes pasos: 1. Seleccionar el servidor IMAP o POP que mejor cumpla a sus necesidades. Los siguientes servidores POP e IMAP son bien conocidos y son firmes candidatos para ello: o qpopper; o teapop; o imap-uw; o courier-imap; 2. Instalar el dmon POP o IMAP de su eleccin desde el rbol de ports. 3. Modifique donde sea necesario /etc/inetd.conf para que el servidor POP o IMAP se ejecute automticamente. Acceso a carpetas de correo locales Las carpetas de correo pueden abrirse de forma local utilizando un agente de correo de usuario (MUA) en el servidor donde reside la carpeta. Se suelen usar los programas mutt o mail. Seguridad: Conceptos de seguridad En general, un sistema debe ser tan seguro fsicamente como sea necesario, y el sistema solo debe tener los servicios y programas privilegiados que sean estrictamente necesarios para el nivel de operaciones deseado. Sistema fsico y consola Con acceso fsico al sistema, un atacante puede seleccionar la opcin -s en el prompt de arranque y obtener un shell con privilegios de root en modo monousuario. Para evitar esto, si el sistema no est fsicamente en un lugar seguro, es una buena idea marcar la consola como insegura en /etc/ttys para que el sistema requiera el password de root al entrar en modo monousuario. Si, como decimos, el sistema no se encuentra en un lugar seguro, no debera tener disquetera. Un atacante puede usar el boot prompt para arrancar un kernel retocado o montar el floppy como la particin raz, pasando por alto cualquier proteccin establecida en /etc/ttys. Programas setuid y Daemons Los problemas con demonios y programas setuid son explotados habitualmente por los crackers para obtener privilegios de root en los sistemas. Es aconsejable tener instalados el menor nmero posible de daemons y programas setuid en los sistemas para reducir los posibles problemas en caso de que se descubra algn tipo de vulnerabilidad en stos.

79

Daemons La idea con los daemons es desactivar todos y cada uno de ellos que no sean estrictamente necesarios. Hay que editar los ficheros /etc/rc.conf y /etc/inetd.conf para desactivar los servicios no usados. Por ejemplo, si los servicios rlogin o rsh no son necesarios, pueden ser desactivados en /etc/inetd.conf comentndolos con el smbolo #. De la misma manera, si el daemon de impresin lpr no es necesario, hay que poner la opcin lpd_enable en el fichero /etc/rc.conf a "NO". Otra estrategia es reemplazar los daemons que son conocidos por haber tenido problemas de seguridad por otros que nos provean de los mismos servicios pero que hayan sido desarrollados teniendo en cuenta la seguridad. Por ejemplo, mientras en FreeBSD se mantiene el sendmail relativamente actualizado, podramos reemplazarlo por el programa qmail, diseado y escrito enteramente pensando en la seguridad. Programas setuid Los programas setuid son programas especiales en el sistema que se ejecutan con los privilegios del propietario del programa, sea cual sea el usuario que lo est ejecutando. Por ejemplo el programa PPP /usr/sbin/ppp realiza algunas operaciones que solo estn permitidas al usuario root, por lo que tiene activado el bit de setuid, y su propietario es root. Como resultado, cuando cualquier usuario ejecuta ppp, ste se ejecuta con los permisos de seguridad del usuario root. Los programas setuid son un problema de seguridad, por que algunos programas tienen bugs que permiten a los crackers aprovecharse de ellos. Provocar problemas de overrun y sobreescribir el stack con cdigo maligno es un sistema comn de ataque en programas setuid. Desde el momento en que el programa se est ejecutando con privilegios de root, el cdigo del cracker se ejecuta con los privilegios de root. La manera ms sencilla de revisar los programas setuid y setgid en el sistema es ejecutar los comandos: find / -perm -4000 -print find / -perm -2000 print Usando la lista generada de ficheros setuid y setgid, puedes determinar los que no son necesarios para tu sistema. Usa el comando "chmod gu-s nombre_fichero" para desactivar los bits de setuid y setgid. Sistemas de ficheros Un sistema donde los sistemas de ficheros de los usuarios estn separados de los sistemas de ficheros que contienen los programas ejecutables y ficheros de dispositivos pueden parar ataques potenciales o "back doors". Un mtodo de obtener acceso de root o dejar una "back door" para obtener ese acceso posteriormente es crear un ejecutable setuid o crear un fichero especial de dispositivo que permita acceso de escritura a la memoria del sistema. Las opciones nosuid y nodev pueden ser usadas en /etc/fstab en sistemas de ficheros que no deban contener setuid o ficheros de dispositivos. Estas opciones pueden ser usadas en sistemas de ficheros en los cuales los usuarios 80

pueden crear ficheros. Es muy buena idea separar los directorios que contengan ficheros de usuarios, como /home, /tmp, /var/tmp en un sistema de ficheros separado del /usr. Las opciones nosuid y nodev son especialmente importantes en sistemas que monten unidades NFS de sistemas inseguros o no fiables. Un usuario avanzado del otro sistema podra crear un ejecutable setuid-root o un dispositivo /dev/kmem-equivalent en el servidor, y usar a continuacin ese fichero en el cliente para obtener privilegios de root. La opcin noexec puede ser muy til en un sistema de ficheros montado desde un servidor no fiable. Monitorizando el sistema de ficheros Algunos ataques a sistemas se realizan mediante el sistema de ficheros Unix, normalmente abusando de daemons o programas setuid. Tpicamente estos programas crean o cambian ficheros de configuracin, como el fichero de usuario .rhosts, permitiendo el acceso al sistema. Estos ataques se previenen cerrando "agujeros" en los daemon y programas setuid, pero estos agujeros deben ser encontrados primero. Es recomendable reducir la posibilidad de estos ataques o su deteccin inmediata monitorizando el sistema. FreeBSD enva diariamente un informe de seguridad al usuario root. Chequea los posibles nuevos o modificados programas setuid y ficheros de dispositivos. Si aparece un nuevo programa setuid, la hora o el tamao cambia misteriosamente, o aparece un nuevo UID 0 (root), es probablemente el momento de investigar. Pero, si un sistema ha sido sabiamente crackeado, los informes no indicarn ningn problema, por que el script de seguridad y sus ficheros de datos son vulnerables a ser falseados. Solo tripwire, cuando est correctamente instalado y usado, puede detectar de manera fiable que un sistema ha sido comprometido. Desafortunadamente, debido a la manera en la que el sistema es escaneado por programas setuid, es posible que el resultado del informe cambie, causando una falsa alarma ocasional en la seccin de "setuid files and devices" del informe de seguridad. Monitorizacin avanzada con tripwire Tripwire es un package que monitoriza el sistema de ficheros para prevenir los cambios en ficheros y permisos. Las instrucciones de instalacin del programa nos dan una excelente visin del package y del procedimiento correcto de instalacin. Esencialmente, tripwire debera ser instalado e inicializado en un sistema totalmente seguro y no comprometido. El fichero ejecutable de tripwire, linkado como un ejecutable esttico para evitar el uso de las libreras compartidas del sistema, y su fichero de base de datos, que contiene las firmas digitales que verifican la integridad de los ficheros del sistema, deberan ser escritos en un soporte de solo lectura. Despus, cuando tripwire es usado para verificar la integridad de un sistema, debera ser invocado directamente desde su ejecutable en el soporte de solo lectura. Una posibilidad es instalar el ejecutable y la base de datos en un floppy de 3.5" y de solo lectura.

81

rhosts y hosts.equiv Si los servicios de red de shell remota (rshell) o login remoto (login) estn activados en /etc/inetd.conf, los ficheros /etc/hosts.equiv y .rhosts son importantes para la seguridad. El fichero hosts.equiv define los sistemas que tienen usuarios reconocidos por nuestro sistema para que no les sea requerido el password al realizar la conexin. Cada fichero $HOME/.rhosts define los sistemas remotos y usuarios que pueden usar esta cuenta sin tener que dar un password. Esencialmente, ningn nombre de sistema debera figurar en estos ficheros a no ser que los hosts y redes sean de total y absoluta confianza. Hay que tener en cuenta que si la lnea + + aparece en estos ficheros, el sistema es totalmente inseguro y cualquier usuario de cualquier sistema puede hacer un login a tu sistema sin necesidad de password. Algunas formas de ataque se basan en crear un fichero .rhosts en el directorio de usuario o aadir datos a un fichero .rhosts ya existente. Parece que este tipo de ataque se lleva a cabo cada vez con menor frecuencia desde que se han mejorado las comprobaciones de propietarios y permisos que realizan rlogin y rsh antes de permitir el acceso. Aun as, este ataque es aun posible. Un mtodo que elimina completamente este problema es desactivar los servicios rlogin y rsh comentando o borrando las lneas referentes a login y shell en /etc/inetd.conf aunque a veces, la desactivacin de estos servicios no es lo ms apropiado. Por ejemplo, el protocolo shell es usado por otros servicios como rdump. Un mtodo ms aceptable de limitar la exposicin de servicios es limitar los sistemas a los cuales permitimos realizar rlogin y rsh. Esta limitacin est implementada en el daemon TCP wrappers de Weitse Venema. Otra solucin es aadir la opcin -l a los servicios rlogind y rshd en las entradas apropiadas de /etc/inetd.conf para forzar la autenticacin usando cualquier fichero .rhosts diferente al de root. Ficheros de dispositivos especiales Los ficheros de dispositivos especiales dan acceso directo al hardware del sistema a travs de nombres en el sistema de ficheros, como /dev/mem para acceso a la memoria del sistema. El acceso al hardware crtico debera ser fuertemente restringido. Por ejemplo, si /dev/mem fuese de libre lectura para todo el mundo, el password de un usuario podra ser observado leyendo el segmento de datos del programa de login mientras este est funcionando. Un ataque a travs de ficheros de dispositivos puede realizarse usando una vulnerabilidad en un daemon o en un programa setuid para crear un dispositivo /dev/kmem-equivalent, y a continuacin escribir en el kernel a travs del nuevo dispositivo creado y as poder incrementar el nivel de privilegio del shell del intruso. Si el fichero de dispositivo no est protegido correctamente, el trabajo del intruso para aumentar sus privilegios es realmente sencillo. Los ficheros de dispositivos son correctamente protegidos durante la instalacin de FreeBSD, pero deberamos verificarlos.

82

Protocolos de red Existen diferentes tareas a realizar en los protocolos de servicios de red y en el propio TCP/IP. Desactivar los servicios innecesarios en los ficheros /etc/inetd.conf y /etc/rc.conf. Filtrado de los paquetes que entran en nuestra red desde el exterior y que contengan direcciones internas en el campo origen. Estos paquetes son obviamente originados por un equipo mal configurado o por un intento de spoofing. Usar el daemon TCP wrappers en los servicios TCP arrancados va inetd para comprobar y filtrar el origen de las peticiones. Verificar la direccin IP de origen y el nombre del host remoto, e implementar restricciones de acceso basadas en las direcciones IP de origen. El package "ssh secure shell" ofrece para los logins remotos y transferencia de ficheros la encriptacin de todos los datos que viajan por la red. Solo por esta razn, ssh ya es una gran alternativa para telnet, rlogin y ftp, especialmente para la administracin remota. La encriptacin de todos los datos entre el origen y el destino nos previenen de los posibles sniffers instalados en la red. El protocolo "Netwok File System" (NFS), que permite compartir sistemas de ficheros entre sistema remotos, tiene diferentes vacos de seguridad. Si es usado, es aconsejable usarlo a travs de un firewall (hay que tener en cuenta que FreeBSD puede funcionar como filtro de paquetes). Si NFS es usado en entorno hostil (por ejemplo, conectado a Internet sin filtrado de paquetes va router o firewall), el comando fsirand debera ser usado para hacer aleatoria la creacin de nmeros de i-nodos. Como NFS, el "Network Information Service" (NIS, tambin conocido como "Paginas amarillas") tiene diferentes vacos de seguridad. NIS es til para la distribucin de informacin de cuentas en una red de sistemas Unix. Al contrario que NFS, NIS no usa un rango particular de puertos, por lo que no puede ser ocultado tras un firewall. El NIS de FreeBSD usa el fichero de configuracin /var/yp/securenets para limitar el acceso de clientes a la informacin. Caractersticas de FreeBSD FreeBSD ofrece diferentes caractersticas no habituales en el resto de sistemas Unix. Niveles de seguridad Los sistemas Unix sufren con el todo poderoso acceso concedido al usuario root. Una vez un cracker obtiene privilegios de root, el sistema completo se vuelve vulnerable al cracker. Los sistemas derivados de 4.4BSD ofrecen una nueva caracterstica de seguridad llamada "niveles de seguridad del sistema" . Usada correctamente, esta caracterstica puede prevenir la introduccin de caballos de Troya y back doors en los ejecutables del sistema y la modificacin de los ficheros de configuracin. Los niveles de seguridad del sistema son: -1, modo permanentemente inseguro; 0, modo inseguro - no hay protecciones adicionales activadas; 1, modo seguro - ficheros protegidos contra la modificacin y ficheros de dispositivos no abiertos para escritura; 2, modo altamente seguro - proteccin de nivel 1 ms dispositivos de disco no abiertos para escritura; 3, modo de seguridad extendida - proteccin de nivel 2 ms filtrado de paquetes IP. El nivel de seguridad por defecto -1 es llamado "modo de inseguridad permanente". 83

Los niveles por encima de 0 causan la desactivacin en el kernel de las siguientes operaciones:

Activacin de los flags de ficheros "immutable" y "append-only". Acceso directo de escritura a los dispositivos de disco montados en el nivel 1 de seguridad, o a los dispositivos de disco en nivel de seguridad 1 o superiores. Escritura a los ficheros de dispositivo /dev/mem y /dev/kmem Modificaciones a cualquier fichero con el flag "immutable" activado. Cargar cualquier modulo de kernel. Cambios a las listas de filtrado de paquetes IP (en nivel 2 o superiores).

Cuando un sistema FreeBSD es instalado usando la opcin make world en el cdigo fuente, una serie de ficheros son instalados con el flag "immutable" activado. En general, los ficheros ejecutables setuid de root son instalados con el flag "immutable". En cualquier momento, el flag schg puede ser activado con el comando chflags, pero el flag solo puede ser eliminado cuando el sistema est en el nivel de seguridad \0001 o 0. Durante el funcionamiento en modo multiusuario, el nivel de seguridad debera ser aumentado. El comando para aumentar el nivel de seguridad a 1 es: sysctl -w kern.securelevel 1 El nivel de seguridad del sistema puede ser aumentado automticamente en el arranque del sistema incluyendo el correspondiente comando sysctl en el fichero /etc/rc.local. El aumento de los niveles de seguridad comporta una limitacin en las actividades de gestin de los ficheros, por lo que no es aconsejable usar esta opcin en sistemas frecuentemente cambiantes. Una vez el nivel de seguridad ha sido aumentado, la nica manera de disminuirlo es rearrancar el sistema. Si se necesita realizar tareas de mantenimiento importantes en el sistema, ste puede ser arrancado en modo monousuario, donde el nivel de seguridad por defecto es de -1. IP Firewall Muchos de los protocolos TCP/IP incluidos en FreeBSD, como NFS y NIS, son mucho ms seguros si no pueden ser accedidos desde el exterior de la parte segura de la red. Para protocolos que no puedan ser restringidos de ninguna otra manera, un filtro de paquetes que solo permita pasar los protocolos especificados puede ser una buena idea para bloquear el acceso externo. La opcin del kernel de FreeBSD IPFIREWALL activa la opcin de IP firewalling, la cual aplica reglas de filtrado sobre los paquetes entrantes o salientes de la mquina. Cuando un kernel compilado con IPFIREWALL arranca, por defecto descarta todos los paquetes IP. Reglas de filtrado adicionales deben ser establecidas para aceptar el trfico deseado en los dos sentidos (entrada y salida). El script de arranque /etc/rc.firewall contiene diferentes ejemplos de filtrado. Los tipos de filtrado son seleccionados con la opcin firewall en /etc/rc.conf, la cual incluye:

84

Open - Sin limitacin de ningn tipo. Cualquier paquete IP puede entrar y salir por cualquiera de las interfaces del sistema.

Client - Protege un sistema que sea cliente en la red. Dado el nombre de la mquina, direccin IP y mscara, un filtro bsico se establece para permitir todo el trfico originado desde o destinado a la red local, permite paquetes para cualquier conexin TCP establecida, permite email entrante y cualquier conexin TCP saliente, y permite peticiones DNS y NTP por UDP. Cualquier otra cosa es denegada. Simple - Creacin de un filtro de paquetes en un sistema que ruta entre diferentes redes. Dados los nmeros de red, mscaras, y direcciones IP de la red externa (insegura) e interna (segura), esta opcin en rc.firewall crea un filtro que: - Previene la entrada de paquetes externos con el campo origen de la red interna, y evita la salida de paquetes que en su campo origen no contengan una direccin de la red interna. - Permite todos los paquetes para conexiones tcp establecidas. - Permite conexiones TCP para correo entrante, DNS y peticiones HTTP. - Rechaza y "loguea" (va syslogd(8)) todos los intentos de conexiones a servicios TCP diferentes de los permitidos anteriormente. - Permite todas las peticiones y respuestas de DNS y NTP UDP. - Deniega cualquier cosa no explcitamente permitida.

Si el nivel de seguridad del sistema es inferior a 2, no se permiten cambios en la lista de filtrado de paquetes. Esto permite al administrador de sistemas prevenir las posibles modificaciones en el listado de filtro de paquetes en el caso de que un sistema se vea comprometido. La opcin IP firewall nos puede ayudar a monitorizar los posibles ataques que se produzcan a nuestro sistema. La opcin del kernel IPFIREWALL_VERBOSE activa el log del filtrado de paquetes va syslogd(8). La informacin recogida puede ser til en la deteccin de escaneos de puertos o intentos de entrada no autorizados del sistema.

One-Time Passwords
El sniffing de passwords ha sido uno de los constantes problemas que se encuentran los administradores de red y sistemas. Los usuarios que realizan telnet o ftp remotos a travs de Internet deberan ser avisados para que usen el sistema de "one-time password" para evitar que su password "reusable" pueda ser capturado y usado ilcitamente. FreeBSD usa el software S/Key para proveer el servicio de "one-time password". Los usuarios pueden configurarse su "one-time password" en FreeBSD usando el comando : keyinit

85

El cual preguntar por un password privado que solo conoce el usuario. Este password debera ser diferente del password usado regularmente, pero no es obligatorio. El keyinit mostrar algo como: ID fred s/key is 99 sp99609 BUY OUR BOLD LEER YOKE COW El usuario puede ahora generar una serie de one-time passwords para usar en sus accesos remotos usando el comando: key -n 10 98 sp99609 El cual preguntar por el password privado usado en el comando keyinit anterior, generando los passwords para los prximos 10 logins. El usuario puede imprimir estos passwords y llevrselos consigo (por supuesto, la impresin de estos passwords comporta otra serie de implicaciones de seguridad). Un sistema FreeBSD puede requerir el uso de passwords S/Key para todos los logins remotos. El fichero /etc/skey.access define cuando debe ser usado el sistema S/Key. Por ejemplo, si el administrador confa en los sistemas de su propia red (172.16.xxx.xxx), pero quiere que todos los usuarios se vean obligados a usar S/Key desde cualquier sistema externo, podra usar un fichero /etc/skey.access como este: permit 172.16.0.0 255.255.0.0 deny Hay que tener en cuenta que /etc/skey.access no afecta a todos los mtodos de acceso remoto, solo a telnet, ftp y rlogin. Por ejemplo, ssh, pop daemons e imap daemons ignoran las restricciones S/Key.

Desactivacin de cuentas
Si un password llega a manos de un cracker, el cracker intentar acceder a la cuenta comprometida a travs de protocolos como telnet y ftp, lo que puede comprometer la seguridad global del sistema o sistemas donde resida la cuenta comprometida. Un administrador puede restringir completamente el acceso telnet o ftp desde una cuenta determinada o host, ajustando el fichero /etc/login.access. Esta opcin puede reducir el peligro de passwords o cuentas comprometidas limitando los lugares desde los que esta cuenta es accesible. De todas maneras, la mejor solucin, si es posible, es dar de baja la cuenta comprometida. Si esto no es posible por cualquier motivo, el paso mnimo a realizar es el cambio de password de dicha cuenta. Hay que tener en cuenta que login.access no afecta a todos los mtodos de acceso remoto, solo a telnet, ftp y rlogin. Por ejemplo, ssh, pop daemons e imap daemons ignoran las restricciones establecidas en login.access. Por ejemplo, si un administrador quiere permitir logins para todas sus cuentas desde dos

86

redes, 172.16 y 192.168.32, y permitir a todos los usuarios incluidos en el grupo wheel hacer login desde la mquina con direccin 192.168.2.2, este es el fichero /etc/login.access que puede ser usado: +:ALL:172.16. +:ALL:192.168.32. +:wheel:192.168.2.2 -:ALL:ALL

Sendmail
Desgraciadamente, durante los ltimos tiempos se estn produciendo ataques indiscriminados, que si bien no afectan a la propia seguridad del sistema, si afectan al rendimiento de stos y al uso de recursos propios de manera no autorizada. Me estoy refiriendo a la nefasta tcnica del spam, que se basa en usar servidores smtp ajenos para envos masivos de correo no solicitado. Esta tcnica empez como algo anecdtico (de hecho, hasta hace poco tiempo, no se sola instalar ningn filtro en los servidores smtp confiando en la buena intencin de los usuarios de Internet y administradores de sistemas conectados a ella), pero se est convirtiendo en una autntica plaga. La poltica a seguir se basa en limitar el acceso a los servidores smtp de la siguiente manera:

Aceptamos correo para cualquier destino con origen en nuestra/s red/es. Aceptamos correo de redes remotas con destino solo a nuestros usuarios/dominios. Si hacemos mail backup, aceptamos relay solo para dominios autorizados.

Gracias al equipo de desarrollo, FreeBSD es un sistema slido que puede ser configurado para aguantar ataques de seguridad importantes. Mientras que la instalacin por defecto es todava relativamente abierta y amigable para los usuarios, FreeBSD contiene muchos mecanismos de seguridad y packages aadidos que permiten aumentar la resistencia del sistema. Estos aumentos de seguridad pueden asegurar una operacin y viabilidad del sistema, as como la confidencialidad de la informacin contenida en l.

87

Jails: Introduccin Dado lo dificil y desconcertante de la tarea de administrar sistemas se han ido desarrollando poderosas herramientas con el fin de hacer la vida del administrador ms sencilla. Dichas herramientas suelen facilitar cierto tipo de mejoras en la instalacin, configuracin o mantenimiento de los sistemas. Una de las tareas que se espera que cumpla un administrador de sistemas es la configuracin adecuada de la seguridad, de modo que pueda dar el servicio para el que se ha destinado sin que pueda verse comprometido. Una de las herramientas disponibles para mejorar los niveles de seguridad de un sistema FreeBSD es el uso de jaulas (jails). Las jaulas fueron introducidas en FreeBSD 4.X por Poul-Henning Kamp, pero en FreeBSD 5.X sus capacidades fueron aumentadas hasta hacer de ellas un subsistema poderoso y flexible. Su desarrollo sigue avanzando, aumentando as su utilidad, rendimiento, fiabilidad y seguridad. Qu es una jaula Los sistemas tipo BSD disponen de chroot desde la poca de 4.2BSD. chroot nos permite restringir el directorio raiz de un conjunto de procesos, creando un entorno seguro y separado del resto del sistema. Los procesos creados dentro de un entorno chroot no pueden acceder a ficheros o recursos ubicados fuera del mismo. Por esta razn, si un atacante logra comprometer un servicio que se ejecuta en un entorno chroot no debera automticamente poder acceder al resto del sistema. chroot es una buena herramienta para tareas sencillas que no requieran mucha flexibilidad o caractersticas complejas o muy avanzadas. Por desgracia, desde la invencin de chroot se han ido encontrando muchas formas de saltarse las barreras que chroot impone y, aunque estn corregidas en las versiones ms modernas del kernel de FreeBSD, era evidente que chroot no era la solucin ideal para ejecutar servicios con seguridad. Haba que implementar un nuevo subsistema. Este es uno de los principales motivos por los que se crearon las jaulas.

Las jaulas llevan ms all en muchos sentidos el concepto tradicional de entorno chroot. En un entorno chroot tradicional los procesos solo ven limitada la parte del sistema de ficheros a la que pueden acceder. El resto de recursos del sistema, es decir, el conjunto de usuarios del sistema, los procesos en ejecucin o el subsistema de red estn compartidos entre el sistema alojado y el servidor. Las jaulas extienden este modelo virtualizando no solamente el acceso al sistema de ficheros, sino al conjunto de usuarios, al subsistema de red del kernel de FreeBSD y unas cuantas cosas ms. Una jaula se caracteriza por disponer de cuatro elementos:

88

Un subrbol de directorios: el punto desde el que se entra a una jaula. Una vez dentro de la jaula un proceso no puede escapar de dicho subrbol. Los tpicos problemas de seguridad que aparecan una y otra vez en el diseo del chroot original no afectan a las jaulas de FreeBSD. Un nombre de mquina (JacJulHOST), que definir a la jaula. Las jaulas se usan principalmente para albergar servicios de red, por lo que disponer de un nombre de mquina descriptivo ayuda enormemente al administrador de sistemas. Una direccin IP: debe asignarse a la jaula y no cambiarse durante el ciclo de vida de la jaula. La direccin IP de una jaula suele ser un alias de un interfaz de red, aunque no es imprescindible que as sea. Un comando: La ruta de un ejecutable ubicado dentro de la jaula. La ruta es relativa al directorio raz de la jaula, por lo que puede ser muy diferentes segn el entorno.

Adems, las jaulas pueden tener sus propios usuarios e incluso su propio root. Es obvio que este usuario root tiene su poder para hacer circunscrito a la jaula y, desde el punto de vista del servidor, el usuario root de la jaula no es omnipotente. El usuario root de la jaula no puede ejecutar tareas crticas fuera de la jaula (jail) a la que pertenece. Creacin y gestin de jaulas Algunos administradores dividen las jaulas en dos tipos: jaulas completas, que recrean un sistema FreeBSD real, y jaulas de servicio, que son aquellas que estn dedicadas a una sola aplicacin o servicio, en muchos casos ejecutndose sin privilegios. Se trata de una divisin exclusivamente conceptual, por lo que el proceso de generacin de una jaula no se ve afectado por ella. Procedimiento a seguir para generar una jaula: # setenv D /aqu/est/la/jaula # mkdir -p $D # cd /usr/src # make world DESTDIR=$D # cd etc/ # make distribution DESTDIR=$D # mount_devfs devfs $D/dev El mejor punto de partida es la eleccin del punto del sistema de ficheros del servidor donde estar fsicamente ubicada la jaula. /usr/jail/nombredelajaula es un buen sitio. nombredelajaula es el nombre de mquina que identifica a la jaula. El sistema de ficheros /usr/ suele tener espacio suficiente para albergar el sistema de ficheros de la jaula que, cuando se trata de jaulas completas, es esencialmente lo necesario para alojar todos y cada uno de los sistemas de ficheros en una instalacin del sistema base por omisin de FreeBSD. Este comando crear el contenido necesario (binarios, bibliotecas, pginas de manual, etc.) y lo copiar al subrbol elegido como ubicacin fsica de la jaula. Todo se hace al tpico estilo FreeBSD: se compila todo y luego se instala en la ruta de destino. 89

Al pasar el target distribution a make se instalan todos los ficheros de configuracin necesarios. En pocas palabras, instala cada fichero instalable que haya en /usr/src/etc/ en el directorio /etc de la jaula, es decir, en $D/etc/. No es imprescindible montar el sistema de ficheros devfs dentro de la jaula aunque por otra parte (casi) todas las aplicaciones necesitan acceso al menos a un dispositivo, dependiendo esto del propsito de la aplicacin. Es muy importante el control del acceso a dispositivos desde la jaula, puesto que una configuracin descuidada puede permitir que un atacante haga de las suyas. El control sobre devfs. Una vez instalada la jaula puede arrancarla mediante jail. Podemos pasarle otros argumentos adems de estos, por ejemplo para ejecutar procesos enjaulados bajo los permisos de un usuario especfico. El argumento comando depende del tipo de jaula; si se trata de un virtual system /etc/rc es una buena eleccin, puesto que ejecutar la secuencia de arranque de un sistema FreeBSD real. Si se trata de una jaula de servicio depende del servicio o aplicacin que se quiera ejecutar mediante la jaula. Con frecuencia las jaulas se arrancan durante el arranque del servidor que las aloja; el sistema rc de FreeBSD permite hacerlo de un modo muy sencillo. 1. Podemos crear una lista de jaulas que queramos arrancar en el inicio del sistema en el fichero rc.conf: 2. jail_enable="YES" # Ponemos NO si queremos desactivar el arranque de jaulas 3. jail_list="JJJail" # Lista de nombres de jaulas separados por espacios 4. Tendremos que aadir parmetros especficos para cada jaula al fichero rc.conf: 5. jail_JJJail_rootdir="/usr/jail/JJJail" # directorio raiz de la jaula 6. jail_JJJail_hostname="www.UAI.edu.ar" # nombre de mquina de la jaula 7. jail_JJJail_ip="192.168.0.10" # direccin IP de la jaula 8. jail_JJJail_devfs_enable="YES" # montar devfs en la jaula 9. jail_JJJail_devfs_ruleset="JJJail_ruleset" # reglas a aplicar a devfs dentro de la jaula El arranque de jaulas por omisin que se configure en rc.conf ejecutar el script /etc/rc de la jaula y asumir que es un sistema virtual completo. Si se trata de una jaula de servicio el comando de arranque por omisin tendr que cambiarse configurando la opcin jail_nombredejaula_exec_start segn convenga. Podemos arrancar o parar a mano una jaula mediante el script /etc/rc.d/jail siempre y cuando la jaula aparezca en rc.conf: # /etc/rc.d/jail start JJJail # /etc/rc.d/jail stop JJJail De momento no hay una forma limpia de apagar una jaula debido a que los comandos que se usan normalmente para producir un apagado limpio del sistema no pueden usarse 90

dentro de una jaula. La mejor forma de parar una jaula es ejecutar el siguiente comando desde dentro de la propia jaula o bien mediante jexec desde fuera: # sh /etc/rc.shutdown Administracin y personalizacin a fondo Hay diversas opciones que pueden usarse en las jaulas y varios tipos de formas de combinar un sistema FreeBSD servidor y las jaulas y poder disponer de aplicaciones de alto nivel. Mostraremos lo siguiente:

Algunas de las opciones disponibles para personalizar el comportamiento y las restricciones de seguridad que pueden aplicarse en una jaula. Algunas de las aplicaciones de alto nivel creadas para la administracin de jaulas. Estas aplicaciones estn en la coleccin de ports y pueden utilizarse en conjunto para implementar productos basados en jaulas.

Herramientas del sistema para la personalizacin de jaulas en FreeBSD La personalizacin a fondo de las jaulas se hace en su mayor parte mediante la configuracin de variables sysctl. Hay una subcategora especial de sysctl para que sea ms sencillo organizar las opciones ms importantes: se trata de las opciones de la jerarqua security.jail.* del kernel de FreeBSD. A continuacin veremos una lista de las principales sysctl relacionadas con las jaulas y los valores que tienen por omisin. Los nombres deberan describir por s mismos qu funcin tienen:
security.jail.set_hostname_allowed: 1 security.jail.socket_unixiproute_only: 1 security.jail.sysvipc_allowed: 0 security.jail.enforce_statfs: 2 security.jail.allow_raw_sockets: 0 security.jail.chflags_allowed: 0 security.jail.jailed: 0

El administrador del servidor puede usar estas variables para aadir o quitar limitaciones impuestas por omisin al usuario root. Tengamos en cuenta que hay ciertas limitaciones que no pueden quitarse. El usuario root no puede montar o desmontar sistemas de ficheros desde su jaula. El usuario root no puede cargar o descargar reglas de devfs, configurar reglas de cortafuegos ni ejecutar muchas otras tareas administrativas que requieran modificaciones o acceso a datos internos del kernel, como cambiar el nivel de seguridad securelevel del kernel. El sistema base de FreeBSD contiene un conjunto bsico de herramientas que permiten el acceso a informacin sobre jaulas activas en el sistema, as como la conexin a una jaula para ejecutar comandos administrativos. jls y jexec forman parte del sistema base de FreeBSD y permiten ejecutar las siguientes tareas:

Mostrar una lista de jaulas activas y sus correspondientes identificadores de jaula (JID), direccin IP, nombre de mquina y ruta.

91

Conectarse a una jaula en ejecucin desde el servidor y ejecutar un comando dentro de la jaula o realizar tareas administrativas dentro de dicha jaula. Esto es muy til cuando el usuario root quiere apagar la jaula de forma limpia. La herramienta jexec permite tambin arrancar una shell dentro de la jaula para realizar tareas administrativas. Veamos un ejemplo: # jexec 1 tcsh

Herramientas para tareas administrativas de alto nivel en la Coleccin de Ports Entre las variadas aplicaciones ajenas al Proyecto FreeBSD que han ido apareciendo para administrar jaulas una de las ms completas y tiles es sysutils/jailutils. Es un conjunto de pequeas aplicaciones de mucha ayuda en la gestin de una jaula.

92

S-ar putea să vă placă și