Está en la página 1de 154

1.

Introducción a los comandos del sistema


Existe un conjunto de comandos que todo usuario debe conocer para poder manejarse en
un sistema GNU/Linux. La mayoría de estos comandos están relacionados con el manejo de
archivos y directorios [1].
Estas herramientas tienen un tiempo de desarrollo y prueba mucho mayores que sus símiles en
interfaz gráfica, y aunque no lo parezca, una vez familiarizado con el entorno de texto, resulta
más ágil y cómodo para las tareas diarias.
Este grupo de comandos, llamados muchas veces «Caja de herramientas UNIX», posee detrás
de cada «herramienta», una filosofía de desarrollo. Cada uno de los comandos, fue creado con
dos ideas en mente:
● Debe realizar una sola función.
● Dicha función debe realizarse correctamente.
Con estos objetivos, la simpleza de las herramientas permite que puedan combinarse para
solucionar diferentes problemas que individualmente no podrían. La forma de combinar estas
herramientas se ve en Entrada, salida y error estándar.
Es importante hacer notar, que muchas de las tareas que se pueden hacer con los comandos
que se explican en esta sección pueden realizarse con el administrador de archivos mc, un
clon del Norton Commander, muy bueno por cierto, pero igualmente no se puede obtener toda
la flexibilidad que se tiene con los comandos, como ya se verá más adelante.

[1] Que en realidad son un tipo especial de archivos.

2. El comando apropos
Una herramienta útil para encotrar otras herramientas es el comando apropos. El comando
whatis muestra información en base al nombre de un comando, posee su propia base de datos
que relaciona nombres con descripciones. apropos busca en esa base de datos de manera
inversa, en base a una palabra, busca en las descripciones para mostrar los comandos que
concuerden.
Ejemplo 1. Ejemplo de uso de apropos
Por ejemplo si queremos utilidades relacionadas con la palabra jpeg:
$ apropos jpeg
jpegtopnm (1) - convert JPEG/JFIF file to portable pixmap or graymap
pcdtoppm (1) - a program converting PhotoCD images to ppm or jpeg
ppmtojpeg (1) - convert portable pixmap into a JPEG/JFIF file

3. El comando cal
Este es un comando bastante útil, que aunque no tenga mucha relación con los anteriormente
dados, sirve para demostrar que las herramientas basadas en texto no son inútiles para tareas
domésticas. cal es una herramienta que sirve para mostrar en pantalla el calendario. Su
sintaxis es la siguiente:
cal [-jy] [[mes] año]]
Si cal se ejecuta sin argumentos, mostrará en pantalla el calendario del mes y año actuales,
por ejemplo:
usuario@maquina:~/$ cal
April 2001
S M Tu W Th F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30

Las opciones para este comando son:


-j
Muestra la fecha en formato Juliano.
-y
Muestra el calendario completo del año actual.

4. El comando cat
Se utiliza para concatenar archivos y mostrarlos por la salida estándar (normalmente la
pantalla). Su sintaxis es muy simple:
cat [opción] [archivo]...

Donde archivo puede ser uno o más archivos. Si no se especifica este segundo parámetro, cat
tomará la entrada de la entrada estándar (normalmente el teclado).
Sus opciones más comunes son:
-n
Numera todas las líneas de salida.
-b
Numera aquellas líneas de salida que no estén en blanco.

5. El comando cd
Este comando se usa para cambiar de directorio. Generalmente cuando el usuario inicia una
sesión en GNU/Linux, el directorio donde comienza es su directorio personal. Desde ahí uno
puede moverse a los diferentes directorios donde se tenga acceso usando este comando. Su
sintaxis es la siguiente:
cd directorio

Éste es un comando interno del intérprete (por ejemplo, bash), y no lleva opciones que sean de
relevancia como para nombrarlas.
Con la utilización del comando cd es bueno explicar conceptos como rutas relativas y rutas
absolutas.
Ruta relativa
Si la ruta no comienza con / entonces se considera relativa a la ruta actual.
Ejemplo 2. Una ruta relativa
Referirse al directorio bin/ no es lo mismo que referirse al directorio /bin/, si uno se encuentra
en el directorio /usr/, la primera instancia corresponde a /usr/bin/ mientras que la segunda
corresponde a /bin/.
Ruta absoluta
Si la ruta comienta con / entonces hará referencia a una ruta en el directorio raíz.
Ejemplo 3. Varios casos de uso de cd
Suponiendo que el directorio actual es /home/usuario:
[/home/usuario]$ cd subdirectorio
[/home/usuario/subdirectorio]$

cambiaría a /home/usuario/subdirectorio. En cambio:


[/home/usuario]$ cd /subdirectorio
[/subdirectorio]$

cambiaría a /subdirectorio debido a que es una ruta absoluta.


En el caso que cd se ejecute sin parámetros, cambiará al directorio personal o home directory
del usuario.
[/usr/share/doc]$ cd
[/home/usuario]$

cambiará a /home/usuario. Es equivalente a cd ~ o cd $HOME en bash.


Si se quiere cambiar al directorio personal de otro usuario, se puede ejecutar:
[/home/usuario]$ cd ~otro
[/home/otro]$

cambiará a /home/otro. En cambio cd ~/otro cambiará a /home/usuario/otro pues ~ se


reemplaza por el directorio personal del usuario.
El último directorio se guarda en una variable de entorno y se puede fácilmente intercambiar
con el directorio actual con cd -
[/home/usuario]$ cd /bin
[/bin]$ cd ~/prueba
[/home/usuario/prueba]$ cd -

volverá a /bin en el caso de ejecutar otra vez cd - irá a /home/usuario/prueba.

6. El comando cp
Se utiliza para copiar archivos, su sintaxis es la siguiente:
cp [opciones] archivo-origen directorio-destino
cp [opciones] archivos-origen... directorio-destino

Entre las opciones más relevantes, se tienen:


-f
Borrar los archivos de destino ya existentes.
-d
Copiar los enlaces simbólicos tal cual son, en lugar de copiar los archivos a los que apuntan.
-p
Preservar los permisos, el usuario y el grupo del archivo a copiar.
-R
Copiar directorios recursivamente.
-a
Equivalente a utilizar las opciones -dpR.
-u
No copia un archivo si en el destino ya existe tal archivo, y éste tiene la fecha de modificación
igual o mas reciente.
-v
Da información en pantalla sobre los archivos que se van copiando.
Ejemplo 4. Usando cp para copias de respaldo.
Supóngase que el sistema donde el usuario juancito trabaja normalmente tiene un directorio /
usr/local/respaldos, especialmente destinado para almacenar copias de respaldo de los datos
de sus usuarios, y juancito necesita hacer su copia de respaldo semanal [2] , entonces el
comando que ejecutará es el siguiente:
$ cp -dpR /home/juancito /usr/local/respaldos

Que es equivalente a ejecutar:


$ cp -a /home/juancito /usr/local/respaldos

Con esto, juancito copia todos sus archivos con los permisos y atributos exactamente igual a
como están en los archivos originales, y sólo debe especificar su directorio personal, ya que la
opción -R se encarga de incluir todos los archivos que se encuentran dentro del mismo.
Ejemplo 5. Usando cp para actualizar archivos.
Pedro se encuentra trabajando en el laboratorio de informática de su escuela donde en el
servidor de archivos existe un directorio /usr/local/tp que contiene los directorios de todos los
grupos de trabajo de la escuela. Pedro pertenece al grupo 15 y necesita actualizar su grupo de
copias del trabajo práctico 2, entonces usará el comando cp de la siguiente manera:
$ cp -uv /usr/local/tp/grupo15/tp2/* /home/pedro/TPs/2

Con la opción -v, Pedro puede ver cuales archivos se han actualizado, y con la opción -u sólo
copia aquellos archivos mas recientes que los que él ya posee.

[2] juancito es un usuario sabio que hace copias de respaldo, ¿usted las hace?

7. El comando date
Este comando tiene dos funciones: una es la de mostrar en pantalla la fecha del sistema (en
varios formatos, como veremos a continuación), la otra es la función de configurar la hora del
sistema, pero para que esta funcionalidad se cumpla, se debe ejecutar el comando desde una
sesión de root. La sintaxis de este comando es:
date [opción...] [+FORMAT]
date [opción] [MMDDhhmm[[CC]AA][.ss]]

FORMAT controla el formato con que se mostrará la fecha, algunas de las opciones de este
argumento son:
%a
Día de la semana abreviado.
%A
Día de la semana completo.
%b
Nombre del mes abreviado.
%B
Nombre del mes completo.
%d
Día del mes.
%m
Número de mes.
%H
Hora, en formato 24h.
%M
Minutos.
%S
Segundos.
Existen muchísimas más opciones de formato que alentamos al lector a verlas en la página de
manual del comando date.
Ejemplo 6. Uso de date con formato simple.
usuario@maquina:~/$ date
Sun Apr 8 15:09:32 ART 2001
usuario@maquina:~/$ date +"%A %d %B"
Sunday 08 April

8. El comando df
Provee información sobre la utilización del espacio en disco en los diferentes sistemas de
archivos montados en el sistema. Para un sistema GNU/Linux, quedarse sin espacio libre es
algo bastante grave, ya que muchos demonios y programas en general utilizan el directorio /
tmp para guardar información mientras se ejecutan. La sintaxis de df es la siguiente:
df [opciones] [sistema-de-archivo...]

Si no se provee del argumento sistema-de-archivo, df informará acerca de todos los sistemas


de archivos montados y en funcionamiento. Las opciones de df más relevantes son:
-h
Imprimir los tamaños de forma más legible para humanos.
-i
Informar sobre la utilización de los nodos-í [3] . Los nodos-í son estructuras internas del sistema
de archivos. Cuando éste se queda sin nodos-í libres, por más que haya espacio libre en el
disco, no se podrán crear nuevos archivos hasta que se liberen nodos-í, generalmente esto no
pasa a menos que se haya generado una enorme cantidad de archivos muy pequeños.
-k
Mostrar los tamaños en bloques de 1024 bytes.
-m
Mostrar los tamaños en bloques de mega-bytes.
Ejemplo 7. Ejemplo de ejecución del comando df
usuario@maquina:~/$ df
Filesystem 1k-blocks Used Available Use% Mount
/dev/hda2 2949060 2102856 696400 75% /
/dev/hda1 23302 2593 19506 12% /boot
/dev/hda4 10144728 5506796 4637932 54% /home
/dev/hdb2 3678764 3175268 503496 86% /u

[3] Abreviación de nodos índice, en inglés i-nodes

9. El comando du
Este comando informa al usuario de la cantidad de almacenamiento utilizado por los archivos
especificados, posee varias opciones, su sintaxis es la siguiente:
du [opciones] [archivo...]

Sus opciones más significativas son:


-s
Muestra únicamente los tamaños de los archivos especificados en la línea de comandos.
-h
Muestra los tamaños de archivo en un formato más legible.
-c
Muestra en pantalla el espacio total ocupado por los archivos especificados.
-x
Omite en el conteo aquellos directorios que pertenezcan a otro sistema de archivos.
Ejemplo 8. Uso administrativo del comando du
El administrador de un servidor necesita saber el espacio en disco ocupado por los distintos
directorios del sistema, para hacer limpieza. Para esto, se tiene en cuenta que no se deberán
contar aquellos directorios que estén en su propio sistema de archivos, entonces se puede
ejecutar de esta forma:
# du -sxh /*
6.8M /bin
6.7M /boot
351k /dev
34M /etc
2.8G /home
43M /lib
3.0k /mnt
0 /proc
15M /root
7.3M /sbin
512 /swap
281k /tmp
5.3G /usr
758M /var

10. El comando echo


Este comando escribe a la salida estándar la cadena de texto que se le pasa como parámetro.
Generalmente se utiliza sin opciones, es por eso que no se nombrarán en este texto.
Ejemplo 9. Algunos usos del comando echo
echo generalmente no se utiliza de forma solitaria, sino que en conjunción con otros
comandos. Un ejemplo puede ser su uso con el comando date:
$ echo "La fecha de hoy es `date +%D`"
La fecha de hoy es 03/21/02

Esto quizás no se ve ahora como algo útil, pero en combinación con otros comandos es una
herramienta de gran utilidad.

11. El comando find


Se utiliza este comando para buscar archivos dentro de una jerarquía de directorios. La
búsqueda, como veremos más adelante, se puede realizar mediante varios criterios. La sintaxis
de este comando es:
find [ruta...] [expresión]

La expresión se conforma de opciones, pruebas y acciones. En este documento no


enumeraremos todas las opciones, pruebas y acciones de este comando, sino las expresiones
que son más cotidianas. Dejamos al lector que investigue todo el potencial de este comando
mediante la lectura de la página de manual por medio de la ejecución del siguiente comando:
$ man find

Algunos de los criterios de búsqueda que se pueden utilizar son:


find CAMINO -name ARCHIVO
find CAMINO -name ARCHIVO -perm MODO

ARCHIVO corresponde al nombre entero o en parte del archivo que se está buscando, MODO
son los permisos del archivo a buscar representados en octal. Cómo manejarse con permisos
de usuario se puede ver en Conceptos básicos.
Ejemplo 10. Varios usos del comando find
Carlos recuerda haber almacenado en su directorio personal una foto de su familia cuando
estaban de vacaciones, y lo único que recuerda es que estaba en formato PNG, para intentar
localizar dicha foto, usa el comando find de la siguiente forma:
$ find /home/carlos -name "*.png"

El administrador de un servidor de Internet necesita realizar una auditoría de seguridad, para


ello una de las pruebas que se necesita realizar es identificar aquellos archivos o directorios
que poseen permisos de escritura para cualquier usuario, esto lo puede hacer como sigue:
# find / -perm 777

Este comando listará también los enlaces simbólicos, que aunque en el listado aparecen con
todos los permisos activados, no significa que cualquier usuario los pueda modificar. Para
evitar entonces este inconveniente, se puede ejecutar el comando de esta manera:
# find / -perm 777 -follow

La opción -follow instruye a find para que en lugar de hacer la prueba con los enlaces
simbólicos, la haga con los archivos apuntados por estos enlaces.

12. El comando grep


Su funcionalidad es la de escribir en salida estándar aquellas líneas que concuerden con un
patrón. Su sintaxis es como sigue:
grep [opciones] PATRÓN [ARCHIVO...]
grep [opciones] [-e PATRÓN | -f ARCHIVO] [ARCHIVO...]

Este comando realiza una búsqueda en los ARCHIVOs (o en la entrada estándar, si no se


especifica ninguno) para encontrar líneas que concuerden con PATRÓN. Por defecto grep
imprime en pantalla dichas líneas. Sus opciones más interesantes son:
-c
Modificar la salida normal del programa, en lugar de imprimir por salida estándar las líneas
coincidentes, imprime la cantidad de líneas que coincidieron en cada archivo.
-e PATRÓN
Usar PATRÓN como el patrón de búsqueda, muy útil para proteger aquellos patrones de
búsqueda que comienzan con el signo «-».
-f ARCHIVO
Obtenee los patrones del archivo ARCHIVO
-H
Imprimir el nombre del archivo con cada coincidencia.
-r
Buscar recursivamente dentro de todos los subdirectorios del directorio actual.
El patrón de búsqueda normalmente es una palabra o una parte de una palabra. También se
pueden utilizar expresiones regulares, para realizar búsquedas más flexibles.
Ejemplo 11. Algunos ejemplos simples con el comando grep
Si se quisiera buscar la ocurrencia de todas las palabras que comiencen con «a» minúscula, la
ejecución del comando sería algo así:
$ grep 'a*' archivo

También se pueden aprovechar las tuberías para realizar filtros, lo anterior es equivalente a:
$ cat archivo | grep 'a*'

13. El comando head


Escribe por salida estándar la primera parte de un archivo. Su sintaxis es como sigue:
head [opción...] [archivo...]

Si no se especifica el argumento archivo, este comando tomará su entrada de la entrada


estándar. La lista de opciones más importantes sigue a continuación:
-c N
Escribe los primeros N bytes.
-n N
Escribe las primeras N líneas en vez de las primeras 10 (que es el valor predeterminado).

14. El comando less


Este comando es de mucha utilidad; su función es paginar texto en pantalla. Muchas veces
ocurre que cuando se ejecuta algún comando, la salida del mismo aporta demasiada
información como para que se pueda leer en la pantalla del monitor. Entonces se puede
redireccionar esta salida a less para que permita al usuario leer sin mayores problemas,
pudiendo avanzar o retroceder en el texto con las flechas de cursor del teclado. También se
utiliza para visualizar archivos de texto almacenados en disco.
La idea de less proviene de un paginador llamado more, un clásico en los UNIX. El comando
more no era lo suficientemente amigable, por eso hicieron less. Su sintaxis es la siguiente:
less [archivo...]

El comando less es un programa interactivo, es por lo que no se hablará de argumentos sino


de comandos:
ESPACIO
Si se oprime la barra espaciadora, less avanzará un número de líneas igual al número de
líneas por pantalla que posea la terminal que se esté usando.
ENTER
Pulsando la tecla ENTER se va avanzando de línea en línea.
G
Ir al final del texto.
g
Ir al inicio del texto.
/
Ingresar una palabra a ser buscada avanzando dentro del texto.
?
Ingresar una palabra a ser buscada retrocediendo dentro del texto.
n
Ir a la siguiente ocurrencia de la búsqueda
AvPág
Avanzar una pantalla de texto.
RePág
Retroceder una pantalla de texto.
v
Cargar el editor de texto en el lugar donde se encuentre el usuario dentro del archivo. El editor
que normalmente se utiliza es el vi, el cual se explica en Introducción al editor de textos vi
q
Salir del programa.
R
Repintar la pantalla. Útil cuando se está visualizando un archivo que ha sido modificado por
otro programa.
Ejemplo 12. Usos del comando less
Para visualizar un archivo de texto llamado arch1.txt, se puede utilizar less como sigue:
$ less arch1.txt

También se puede utilizar tuberías y cat para realizar lo mismo.


$ cat arch1.txt | less

15. El comando ln
Este comando sirve para establecer enlaces entre archivos. Un enlace puede ser rígido o
simbólico. El primer tipo es simplemente una forma de dar otro nombre a un archivo. Por
ejemplo teniendo el archivo /etc/passwd, se puede hacer un enlace y tener el nuevo nombre en
/home/usuario/claves, y ambos nombres de archivos refiriéndose al mismo archivo. El segundo
tipo es parecido al primero, pero se pueden enlazar directorios, y además de diferentes
sistemas de archivos. Este tipo de enlace es el que más se utiliza. La sintaxis del comando ln
es:
ln [opciones] origen [destino]
ln [opciones] origen... directorio

Sus opciones más importantes son las siguientes:


-d
Permite al super-usuario hacer enlaces rígidos a directorios
-s
Crear enlace simbólico.
-f
Borrar los archivos de destino que ya existen.
Ejemplo 13. Algunos usos del comando ln
Para el caso del ejemplo anterior, se debería ejecutar:
$ ln -s /etc/passwd /home/usuario/claves

Cuando se ejecuta ls -l en un directorio donde hay un enlace simbólico, éste se muestra de la


siguiente manera:
usuario@maquina:~/$ ls -l claves
lrwxrwxrwx 1 usuario usuario 11 Apr 8 13:33 claves -> /etc/passwd

La «l» al comienzo de la línea especifica el tipo de archivo listado, en este caso, un link.
16. El comando locate
locate es un comando de búsqueda de archivos, bastante parecido al comando find. La
diferencia de locate es que la búsqueda la hace en una base de datos indexada para aumentar
significativamente la velocidad de respuesta. Esto quiere decir, que locate realmente no busca
en el disco del sistema, sino que en un archivo con la lista de todos los archivos que existen
en el GNU/Linux. Generalmente todas las distribuciones de GNU/Linux ejecutan a una hora
determinada (generalmente cerca de las 4:00am, ya que tarda algún tiempo realizar esta
tarea) un comando para actualizar la base de datos que utiliza locate, dicho comando se llama
updatedb. Su sintaxis es:
locate PATRÓN

Donde PATRÓN corresponde al mismo tipo de patrón que en el comando find. Ejemplo de
ejecución:
Ejemplo 14. Un ejemplo de uso del comando locate
usuario@maquina:~/$ locate locate
/usr/bin/locate
/usr/lib/locate
/usr/lib/locate/bigram
/usr/lib/locate/code
/usr/lib/locate/frcode
/usr/share/doc/kde/HTML/en/kcontrol/kcmlocate.docbook.gz
/usr/share/doc/xlibs-dev/XdbeAllocateBackBufferName.3.html
/usr/share/doc/xlibs-dev/XdbeDeallocateBackBufferName.3.html
/usr/share/doc/xlibs-dev/XtAllocateGC.3.html
/usr/share/emacs/20.7/lisp/locate.elc
/usr/share/gnome/help/gsearchtool/C/locate.png
/usr/share/man/man1/locate.1.gz
/usr/share/man/man5/locatedb.5.gz
/usr/X11R6/man/man3/XdbeAllocateBackBufferName.3x.gz
/usr/X11R6/man/man3/XdbeDeallocateBackBufferName.3x.gz
/usr/X11R6/man/man3/XtAllocateGC.3x.gz
/var/lib/locate
/var/lib/locate/locatedb
/var/lib/locate/locatedb.n

Como se puede observar, locate ha listado todos aquellos archivos que posean la
palabra «locate» en su nombre (los directorios están incluidos).

17. El comando ls
Quizás uno de los comandos de mayor utilización, sirve para listar archivos.
Su sintaxis es la siguiente:
ls [opciones] [archivo...]
Si se ejecuta ls sin argumentos, dará como resultado un listado de todos los archivos
(incluyendo directorios) del directorio donde el usuario está posicionado. Sus opciones son:
-a
Lista todos los archivos, incluyendo aquellos que comienzan con un «.» [4]
-d
Lista el nombre del directorio en vez de los archivos contenidos en él.
-l
Lista los archivos con mucho más detalle, especificando para cada archivo sus permisos, el
número de enlaces rígidos, el nombre del propietario, el grupo al que pertenece, el tamaño en
bytes y la fecha de la última modificación.
-r
Invierte el orden de listado de los archivos.
-s
Muestra el tamaño de cada archivo en bloques de 1024 bytes a la izquierda del nombre.
-h
Muestra los tamaños de archivo en términos de kilobytes, megabytes, etc.
-t
Lista los archivos ordenados por el tiempo de modificación en vez de ordenarlos
alfabéticamente.
-A
Lista todos los archivos excepto el «.» y el «..».
-R
Lista los contenidos de todos los directorios recursivamente.
-S
Ordena el listado por el tamaño de los archivos.
--color[=cuándo]
Especifica si emplear color para distinguir los diferentes tipos de archivos. El argumento cuándo
puede tener varios valores:
none
No usar colores. Esta opción es la predeterminada.
auto
Usar colores solamente cuando la salida estándar es una terminal.
always
Usar siempre colores. Si ls se usa con la opción --color sin especificar la opción de color, el
resultado es el mismo que cuando se usa --color=always.
Ejemplo 15. Algunos ejemplos utilizando el comando ls
Supónganse que se tiene un directorio /usr/local/papers donde se alojan los documentos de
un grupo de redactores de una revista, y se quiere saber cuáles fueron los últimos documentos
modificados y su tamaño para su inclusión en el próximo número. Para esto se puede ejecutar
el comando ls de la siguiente forma:
$ ls -lhtr /usr/local/papers

Como se puede observar, se le pasan 4 opciones al comando ls, de tal manera que muestre un
listado extendido, ordenado por tiempos de modificación de forma ascendente y que además
muestre los tamaños de archivo en forma más legible. Otra manera de ejecutar el mismo
comando es la siguiente:
$ ls -l -h -t -r /usr/local/papers
[4] Como convención, los archivos cuyos nombres comienzan con un punto se les
denomina «ocultos».

18. El comando mail


El comando mail es una utilidad simple pero muy funcional que brinda la posibilidad de enviar
mails de una manera simple.
mail [nombre-destinatario]

Se puede utilizar de forma interactiva, con mail usuario@email.com o bien enviar por entrada
estandar el contenido del email.
Ejemplo 16. Ejemplo sencillo utilizando mail
De forma interactiva se finaliza el mail con una línea que sólo contenga un punto (.)
$ mail destino@dominio.com.tw
Subject: email desde linux!
hola este es un lindo email

saludos,
usuario .
Cc:

En caso de querer enviar cuerpo.txt como cuerpo del mensaje:


$ cat cuerpo.txt | mail destino@dominio.com.tw

debería hacer el trabajo.

19. El comando man


Quizás uno de los comandos más importantes para cualquier aprendiz (y a veces no tan
aprendiz); el comando man sirve para desplegar en pantalla las páginas de manual, que
proporcionan ayuda en línea acerca de cualquier comando, función de programación, archivo
de configuración, etc.
Hay diferentes tipos de páginas de manual, cada tipo se diferencia por un número, que se
detallan a continuación:
1. Programas ejecutables y guiones [5] del intérprete de comandos.
2. Llamadas del sistema (funciones servidas por el núcleo).
3. Llamadas de la biblioteca (funciones contenidas en las bibliotecas del sistema).
4. Archivos especiales (se encuentran generalmente en /dev
5. Formato de archivos y convenios, por ejemplo /etc/passwd
6. Juegos.
7. Paquetes de macros y convenios, por ejemplo man(7), groff(7)
8. Comandos de administración del sistema (generalmente sólo son para root).
9. Rutinas del núcleo.

[5] En inglés, scripts, son programas creados en el lenguaje del intérprete de comandos

20. El comando mkdir


Este comando es bastante simple; su finalidad es la creación de directorios, y su sintaxis es
así:
mkdir [opciones] directorio...

Sus opciones son las que siguen:


-m modo
Establece los permisos de los directorios creados.
-p
Crea los directorios padre que falten para cada argumento directorio
Ejemplo 17. Ejemplo del uso de mkdir
Para crear un directorio en el directorio actual:
$ mkdir directorio

También se pueden crear directorios en otros subdirectorios existentes:


$ mkdir /dir_existente/directorio

21. El comando mv
Este comando se usa tanto para mover archivos, como para renombrarlos (que, al fin de
cuentas, es una manera de mover archivos); su sintaxis es la siguiente:
mv [opción...] origen destino
mv [opción...] origen... destino

Si el último argumento, destino, es un directorio existente, mv mueve cada uno de los otros
archivos a destino.
Algunas opciones de este comando son:
-f
Borrar los archivos de destino existentes sin preguntar al usuario.
-i
Lo contrario de -f; pregunta por cada archivo a sobreescribir antes de hacerlo.
-v
Muestra el nombre de cada archivo a ser movido.
Ejemplo 18. Ejemplo del uso de mv
Si en el directorio actual existe 1 archivo llamado arch1.txt
$ mv arch1.txt /usr/doc/

moverá arch1.txt al directorio /usr/doc/ manteniendo el nombre de archivo. En cambio,


$ mv arch1.txt /usr/doc/archivoNuevo.txt

moverá arch1.txt al directorio /usr/doc/ con el nombre archivoNuevo.txt

22. El comando passwd


passwd se utiliza para cambiar la contraseña de usuario, su sintaxis es:
passwd [nombre-usuario]

Si se especifica nombre-usuario, se cambiará la contraseña de dicho usuario (para esto


se debe ser root), sino, la del usuario que ejecuta el comando. La mecánica de cambio de
contraseña tiene 3 pasos:
1. Ingresar la contraseña antigua.
2. Ingresar la contraseña nueva.
3. Repetir la contraseña nueva para confirmar.

23. El comando pwd


Este es un comando muy simple y a la vez útil. Su función es la de imprimir en pantalla el
directorio donde el usuario está trabajando.
Ejemplo 19. Ejemplo de la utilización de pwd
usuario@maquina:~ >$ pwd
/home/usuario

Como se puede observar en el ejemplo, el directorio actual de trabajo es /home/usuario

24. El comando rm
He aquí un comando peligroso, rm se utiliza para borrar archivos o directorios, su sintaxis es:
rm [opciones] archivo...

Se debe siempre pensar dos veces lo que se está haciendo antes de ejecutar este comando.
Quizás esto parezca una advertencia para tontos, pero más aún cuando se está administrando
un equipo que da servicios a varios usuarios, un «teclazo» en falso, y fácilmente se pierden
datos importantes. Sus opciones más utilizadas son:
-f
No imprimir mensajes de error, ni pedir al usuario una confirmación por cada archivo que se
vaya a borrar.
-r
Borrar los contenidos de directorios recursivamente.
-v
Muestra el nombre de cada archivo eliminado.
El argumento archivo puede ser tanto un nombre de archivo, como una expresión regular.
Ejemplo 20. Un ejemplo del uso del comando rm
Para borrar un archivo en el directorio actual llamado arch1.txt
$ rm arch1.txt

pedirá confirmación. Para no tener que confirmar se utiliza la opcion -f


$ rm -f arch1.txt

El comando rm no permite borrar directorios directamente. Pero existen opciones que pueden
ayudar para eliminarlo sin confirmación. Cuidado con el uso de estas opciones.
$ rm -rf directorio

Eliminará completamente el directorio sin importar su contenido.

25. El comando sort


Este comando se utiliza para ordenar líneas de texto a partir de varios criterios, su sintaxis es
similar a la de todos los comandos:
sort [opción...] [archivo...]

Si no se le provee al menos un argumento archivo, este comando tomará su entrada de la


entrada estándar, ya veremos esto en la sección Entrada, salida y error estándar.
El criterio de orden que utiliza sort por defecto es alfabético, esto se debe tener en cuenta
siempre que se necesite ordenar listas de números, si no se le especifica a sort que debe
ordenar numéricamente, tomará a los números como una lista de caracteres y el ordenamiento
no será el esperado.
A continuación se listan las opciones más comúnmente usadas:
-n
Utilizar ordenamiento numérico.
-r
Ordenar en forma inversa.
-f
Tratar igualmente a las mayúsculas y minúsculas.
-d
Utilizar el método de ordenamiento de diccionario (sólo toma en cuenta espacios en blanco y
caracteres alfanuméricos).
Ejemplo 21. Un ejemplo del uso de sort
Damián necesita limpiar su directorio personal de archivos innecesarios y para ello obtuvo una
lista similar a esta:
384746 MP3
2613 Mail
82716 Internet
8534 Fotos
132 zaxxon
5921 proyectos

La cual tiene almacenada en un archivo /home/damian/lista.txt. Para poder ver fácilmente


cuál directorio ocupa más espacio y así revisarlo y limpiarlo, Damián ejecutará el siguiente
comando:
$ sort -nr lista.txt

Obteniendo de esta manera la lista ordenada numéricamente y en forma descendiente:


384746 MP3
82716 Internet
8534 Fotos
5921 proyectos
2613 Mail
132 zaxxon

Notar que si no se utiliza la opción -n, la lista se ordenará en forma incorrecta:


8534 Fotos
82716 Internet
5921 proyectos
384746 MP3
2613 Mail
132 zaxxon

26. El comando tail


El comando tail es al head como el less es al more [6]. El comando tail escribe a la salida
estándar la última parte de un archivo. Su sintaxis es:
tail [opción...] [archivo...]

Al igual que head, si no se le proporciona un argumento archivo, este comando tomará su


entrada desde la entrada estándar. Alguna de sus opciones son las siguientes:
-c N
Escribe los últimos N bytes.
-n N
Escribe las últimas N líneas.
-f
Escribir la última parte del archivo a medida que va creciendo. Esta opción es muy útil para
monitorear archivos de registro que van creciendo con el tiempo.
Ejemplo 22. Ejemplo del uso del comando tail
Un uso muy común de tail es utilizarlo para inspeccionar logs (o bitácoras) del sistema.
$ tail -n 10 /var/log/messages

mostrará las ultimas 10 líneas del log messages.


En el caso que se quiera tener un seguimiento de un log en especial se puede utilizar la opción
-f
$ tail -n 10 -f /var/log/messages
mostrará las ultimas 10 líneas del log messages. Y luego quedará a la espera de nuevas líneas
por aparecer en el final del archivo.

[6] Perdonen al autor, aunque a veces es interesante mezclar conceptos matemáticos con
informáticos, éste no es el caso.

27. El comando touch


Este comando se utiliza para cambiar la fecha de acceso y/o modificación a un archivo. Su
sintaxis es la que sigue:
touch [opción...] archivo...

Si el argumento archivo corresponde al nombre de un archivo que no existe, a menos que se le


diga, touch creará el archivo con dicho nombre y sin ningún contenido. Sus opciones de mayor
importancia son:
-a
Cambia solamente el tiempo de acceso.
-c
No crear archivos que no existían antes.
-d fecha
Usar fecha en lugar de la fecha actual. El formato de fecha es el siguiente: MMDDHHMMAAAA,
por ejemplo para representar el 7 de abril de 2002 a la 1:00 a.m., se escribirá: 040701002002.
Si el año a usar es el año actual, se puede obviar, entonces el ejemplo anterior quedaría así:
04070100.
Este comando es muy útil cuando se necesita recompilar cierta parte de un programa evitando
compilar todo el programa completo, sólo aquellos sectores modificados [7].
Ejemplo 23. Un ejemplo de la utilización de touch
En el caso que no exista en el directorio actual el archivo arch1.txt,
$ touch arch1.txt

creará un archivo llamado arch1.txt vacío (tamaño 0). es de suponer que la fecha de creación y
modificación serán el momento actual.

28. El comando wc
El nombre del comando wc proviene de word count, y como es de suponer, sirve para contar
palabras. Pero no sólo palabras como se verá a continuación. Su sintaxis es como sigue:
wc [opción...] [archivo...]

Si se omite el argumento archivo, wc tomará los datos (naturalmente) de la entrada estándar.


La lista de opciones más importantes es la siguiente:
-c
Contar bytes.
-l
Contar líneas.
-w
Contar palabras.
Ejemplo 24. Ejemplo del uso de wc
Como ejemplo, se pueden contar las líneas del archivo /etc/passwd y de esta manera se sabrá
rápidamente cuántos usuarios tiene definidos el sistema:
usuario@maquina:~/$ wc -l /etc/passwd
32 /etc/passwd

Se pueden combinar varios argumentos a la vez.

29. El comando whereis


Este comando se utiliza para localizar el archivo binario, el código fuente y la página de manual
de un determinado comando. Su sintaxis es como sigue:
whereis [opciones] archivo...

La lista de opciones más utilizadas es:


-b
Buscar solamente el archivo binario.
-m
Buscar solamente la página manual.
-s
Buscar solamente el código fuente.
Como ejemplos, se ve lo siguiente:
Ejemplo 25. Ejemplo del uso de whereis
usuario@maquina:~/$ whereis -m whereis
whereis: /usr/share/man/man1/whereis.1.gz

usuario@maquina:~/$ whereis passwd


passwd: /usr/bin/passwd /etc/passwd /usr/man/passwd.5.gz

En el primer case se ha pedido la página de manual del mismo comando whereis [8] , mientras
que en el segundo se han pedido todos los archivos que tengan que ver con el comando
passwd.

[8] El lector ya está advertido que al autor le gustan las recursividades, por favor perdónenlo.

30. El comando whoami


Éste es otro comando muy simple como pwd. Su función consiste en presentar en pantalla el
nombre de usuario del usuario que lo ejecuta. Ejemplo:
usuario@maquina:~/$ whoami
usuario
31. Agradecimientos
La realización de este manual habría sido mucho más difícil sin la ayuda de los coordinadores
del proyecto LuCAS[9] Ismael Olea González, Juan José Amor Iglesias y César Ballardini.
No podemos dejar de agradecer también a Linus Torvalds por su gran aporte al software
libre, a Richard M. Stallman por preocuparse por las libertades del software y finalmente
agradecemos a toda la comunidad de desarrolladores, redactores, y toda aquella gente que
aporta su grano de arena en este mundo, el mundo del software libre.

[9] http://lucas.hispalinux.es

32. Agradecimientos
La realización de este manual habría sido mucho más difícil sin la ayuda de los coordinadores
del proyecto LuCAS[10] Ismael Olea González, Juan José Amor Iglesias y César Ballardini.
No podemos dejar de agradecer también a Linus Torvalds por su gran aporte al software
libre, a Richard M. Stallman por preocuparse por las libertades del software y finalmente
agradecemos a toda la comunidad de desarrolladores, redactores, y toda aquella gente que
aporta su grano de arena en este mundo, el mundo del software libre.

[10] http://lucas.hispalinux.es

33. Agradecimientos
La realización de este manual habría sido mucho más difícil sin la ayuda de los coordinadores
del proyecto LuCAS[11] Ismael Olea González, Juan José Amor Iglesias y César Ballardini.
No podemos dejar de agradecer también a Linus Torvalds por su gran aporte al software
libre, a Richard M. Stallman por preocuparse por las libertades del software y finalmente
agradecemos a toda la comunidad de desarrolladores, redactores, y toda aquella gente que
aporta su grano de arena en este mundo, el mundo del software libre.

[11] http://lucas.hispalinux.es

34. Introducción a Apache


Apache es un servidor del protocolo http, comunmente llamado servidor web pues es la mayor
utilidad para dicho protocolo. Cuando pensamos en un servidor web imaginamos un grupo de
páginas web que determinan un sitio web. Un servidor como Apache puede alojar varios sitios,
y pueden coexistir varios servidores Apache en un sólo equipo.
Básicamente Apache lee un directorio con todo el contenido posible a enviar y los
navegadores[12] piden las páginas (o recursos) para luego, por ejemplo, mostrarlos en
pantalla. Es el funcionamiento más básico de un servidor, sin embargo, los servidores actuales
realizan muchas tareas complejas. Un ejemplo sería modificar el recurso para personalizarlo y
luego enviarlo. O ejecutar un programa y que la salida de este programa devuelva el recurso
a enviar. Comunmente estos programas se llaman scripts y se tienden a escribir en lenguajes
que fueron creados para ese propósito, como lo es PHP, Python o versiones actuales de Perl.
El archivo de configuración de Apache principal puede ser /etc/httpd.conf o /etc/http.d/conf/
httpd.conf o /etc/apache/httpd.conf según la distribución y versión de Apache. En este archivo
se determinan los directorios a utilizar, los módulos a cargar, permisos y muchísimos detalles
más. Veremos los más importantes.

[12] Llamados browsers en inglés

35. La directiva VirtualHost


Para atender varios dominios en un sólo servidor Apache se debe usar la directiva de bloque
VirtualHost. Como su nombre indica, realiza el trabajo de host virtual. Podemos configurar las
opciones comunes en el bloque principal y las opciones específicas a los hosts en los bloques
correspondientes.
User apache
Group apache
<VirtualHost www.dom1.com.ar>
ServerName www.dom1.com.ar
ServerAdmin webmaster@un-lugar.org.ar
DocumentRoot /var/www/sitio1/
</VirtualHost>
<VirtualHost www.dom2.com.ar>
ServerName www.dom2.com.ar
ServerAdmin webmaster@un-lugar.org.ar
DocumentRoot /var/www/sitio2/
</VirtualHost>

El nombre de Host es necesario para diferenciar la petición del usuario. También se puede
utilizar una dirección IP si existen múltiples interfaces.
Cuando se ejecute Apache, dependiendo la petición del cliente, se utilizarán distintos
Document Root [13] Pero como configuración en común, la ejecución se hará con el usuario
apache en ambos casos.
Ahora, podemos combinar la directiva de bloque <Directory> para dar opciones particulares a
cada directorio de los hosts virtuales, pues sus Document Roots son distintos.

[13] se podría traducir como: Directorio Raíz de Documentos.

36. El archivo httpd.conf


El archivo httpd.conf configura el servidor Apache, e incluye otros archivos de configuración
específicos y más pequeños. El archivo esta ampliamente documentado, [14] cada directiva
tiene una descripción concreta de cómo usarlo, por lo tanto haremos una descripción breve de
las directivas más importantes.
● User: Define el usuario que ejecuta al proceso apache.
● Group: Define el grupo que ejecuta al proceso apache.
● ServerName: Nombre del servidor, si se omite, se asigna el nombre del equipo.
● ServerAlias: Uno o más alias del servidor.
● ServerAdmin: Email del administrador para el envio de errores.
● DocumentRoot: Directorio donde se encuentran los documentos a enviar, debe tener
permiso el User y Group mencionados anteriormente.
● Include: Nombre de archivo a incluir. Útil para dividir la configuración en varios archivos
pequeños.
Otro tipo de directivas son los bloques que su formato es similar a los tags HTML/XML,
comienzan con <Directiva Opcion> y finalizan con </Directiva>.
● Directory Opcion: nombre de directorio. Define propiedades de un directorio a utilizar en
el servidor.
● DirectoryMatch Opcion: expresión regular. Igual que Directory, pero acepta una
expresión regular para generalizar los directorios.
● Files Opcion: nombre de archivo. Define propiedades para un archivo determinado.
● FilesMatch Opcion: expresión regular. Igual que Files, pero acepta una expresión
regular para generalizar los archivos.
● Location Opcion: URL. Especifica las propiedades de una URL del sitio.
● LocationMatch Opcion: expresión regular. Como es de esperar, es igual que Location
pero se pueden especificar varias URL's con expresiones regulares.
● VirtualHost Opcion: nombre de host. Especifica propiedades de un sólo dominio.
Veremos en mayor detalle esta directiva.
Un archivo httpd.conf simple:
User apache
Group apache
ServerName www.dominio.org.ar
ServerAdmin webmaster@dominio.org.ar
DocumentRoot /var/www/

<Directory /var/www>
Options Indexes
</Directory>

En este caso, el usuario y grupo se llaman “apache”, el servidor se llama www.dominio.org.ar,


el email del administrador es webmaster@dominio.org.ar. El directorio donde se encontrarán
los recursos es /var/www y como opción se generan los índices de cada página.

A nuestro ejemplo podemos agregarle un directorio llamado images que contenga todas las
imágenes del sitio pero no queremos que nadie liste el contenido de ese directorio:
<Directory /var/www/images>
Options -Indexes
</Directory>

Recordemos que se debe referenciar el path completo. El `-' sirve para deshabilitar la opción.
Por razones de seguridad, es útil agrupar todos los archivos tipo CGI en un directorio único, por
ejemplo cgi-bin el cual debe tener la opción “ ExecCGI”.
<Directory /var/www/cgi-bin>
Options -Indexes ExecCGI
</Directory>
Y podemos mejorar la seguridad negando la ejecución de CGI en el resto de los directorios:
<Directory /var/www>
Options Indexes -ExecCGI
</Directory>

Queda nuestro archivo de la siguiente manera:


User apache
Group apache
ServerName www.dominio.org.ar
ServerAdmin webmaster@dominio.org.ar
DocumentRoot /var/www/

<Directory /var/www>
Options Indexes -ExecCGI+
</Directory>

<Directory /var/www/images>
Options -Indexes
</Directory>

<Directory /var/www/cgi-bin>
Options -Indexes ExecCGI
</Directory>

[14] Como muchos archivos de configuración cualquier línea que comience con ``\#'' se ignora
por lo tanto es considerada comentario.

37. COMOs
Los COMOs [15] son documentos en forma de “recetas”, en los que se trata la forma de realizar
tareas específicas del sistema. Estos documentos se encuentran en el directorio principal
de documentación de GNU/Linux, /usr/share/doc/, bajo el subdirectorio HOWTO [16] . Esta
documentación está disponible en texto plano y formato HTML, gracias a esto podemos
emplear cualquier paginador (como por ejemplo less) o navegador web para visualizarla.
También puede encontrar ficheros cuyo nombre termina en .gz. Dichos ficheros han sido
comprimidos con gzip para ahorrar espacio, luego debe descomprimirlos antes de leerlos. Una
forma de leer los COMOs comprimidos, sin llenar su disco con versiones descomprimidas, es
utilizar zless:
La orden zless utiliza las mismas teclas que less, de modo que se puede mover con facilidad a
través del documento.

[15] En Inglés denominados HOWTOs


[16] Las traducciones al español de muchos de estos COMOs, se encuentran en el
subdirectorio HOWTO/es/, en caso de estar instalados

38. Argentina
Grupos locales en Argentina
GrULiC
Grupo de usuarios de Linux de Córdoba (http://www.grulic.org.ar/)
GULCO
Grupo de Usuarios de Linux de Corrientes (http://www.gulco.linux.org.ar/)
Linux Santa Fe
Grupo de Usuarios de Linux en Santa Fe (http://www.linuxsantafe.com/)
LugCOS
GNU/Linux Users Group del Centro Oeste Santafesino (http://lugcos.org.ar)
LUGAr
Linux Users Group Argentina (radicado en Buenos Aires) (http://www.linux.org.ar/)
LUGLi
GNU/Linux Users Group del Litoral (radicado en Santa Fe) (http://www.lugli.org.ar)
LUGMen
Grupo de Usuarios de Linux de Mendoza (http://www.linuxmendoza.org.ar/)
LUGNA
GNU/Linux User Group Neuquén - Argentina (http://www.lugna.linux.org.ar/)
LUGro
Grupo de Usuarios de GNU/Linux de Rosario (http://www.lugro.org.ar/)
LugRa
GNU/Linux Users Group Rafaela (http://www.rafaela.linux.org.ar)
LUG SeC
Grupo de Usuarios de Linux del Sureste de Córdoba (http://www.lug.org.ar/)
LUG Tucumán
Linux Users Group Tucumán (http://www.tucuman.linux.org.ar/)
LugUsh
Linux User Group Ushuaia (http://www.lugush.org.ar/)
NugLy
Nuevos usuarios de GNU/Linux de Jujuy (http://www.nugly.linux.org.ar)
PLUG
Grupo de Usuarios de GNU/Linux de La Plata (http://www.plug.org.ar/)

39. Bolivia
Grupos locales en Bolivia
LUGBOL
Linux User Group Bolivia (http://www.linux.org.bo/)

40. Chile
Grupos locales en Chile
Linux.CL
Linux en Chile (http://www.linux.cl/)
41. Colombia
Grupos locales en Colombia
GLUV
Grupo Linux Universidad del Valle (http://cluv.univalle.edu.co/)
LinuxCOL
Grupo de Usuarios Colombianos de Linux (http://linuxcol.uniandes.edu.co/)

42. Costa Rica


Grupos locales en Costa Rica
GULCR
Grupo de Usuarios de Linux de Costa Rica (http://www.linux.or.cr/)

43. Cuba
Grupos locales en Cuba
Linux Cuba
Grupo de Usuarios de Linux en Cuba (http://www.linux.cu/)

44. Ecuador
Grupos locales en Ecuador
Ecuanex
Linux en Ecuador (http://linux.ecuanex.net.ec/)

45. El Salvador
Grupos locales en El Salvador
SVLinux
Grupo de Usuarios de Linux en El Salvador (http://www.linux.org.sv/)

46. España
Grupos locales en España
ADALA
Asociación para el Desarrollo y Avance del software Libre en Andalucía (http://www.adala.org/)
AsturLinux
Asociación de Usuarios Asturianos de LiNUX (http://www.asturlinux.org)
AUGCYL
Asociación Usuarios GNU/Linux Castilla y León (http://www.augcyl.org/)
AULIR
Asociación de Usuarios de Linux de La Rioja (http://www.aulir.com/)
BULMA
Bisoños Usuarios de Linux de Mallorca y Alrededores (http://bulmalug.net/)
CALIU
CAtalan LInux Users (http://www.caliu.org/)
Cat-Linux
GNU/Linux en català! (http://www.cat-linux.com)
COALA
Colectivo de Apoyo a Linux de Asturias (http://www.coala.uniovi.es/)
Euskal Linux
Grupo de Usuarios del País Vasco (http://www.euskal-linux.org/)
GALPON
Grupo de Amigos de Linux de Pontevedra (http://galpon.com.uvigo.es)
GILUG
GIrona Linux Users Group (http://www.gilug.org/)
GLUB
Grupo de LinuxUarios de Bizkaia (http://glub.ehu.es/)
GLUG
Grupo de Usuarios de Linux de Galicia (http://www.glug.es/)
GPUL
Grupo de Programadores y Usuarios de Linux (http://www.gpul.org/)
GRULIN
Grupo de Usuarios Linux en Navarra (http://www.elpuntofijo.com/grulin/)
GRULLA
Grupo de Usuarios de Linux de La Almunia (http://grulla.hispalinux.es/)
Grupos Locales en Hispalinux
Página de grupos locales en HispaLinux (http://grupos-locales.hispalinux.es/)
GUL
Grupo de Usuarios de Linux de la Universidad Carlos III de Madrid (http://gul.uc3m.es/gul/)
GULA-ZALE
Grupo de Usuarios Linux de Álava - Zaletuen Arabako Linux Elkartea (http://www.gula-zale.org/
)
GULAlcarria
Grupo de Usuarios de GNU/Linux de Guadalajara y alrededores (http://
gulalcarria.sourceforge.net/)
GULCA
Grupo de Usuarios de Linux de Cádiz (http://www.gulca.org/)
GULEF
Grupo de usuarios de Linux de Eivissa i Formentera (http://www.clubibosim.org/)
GULEX
Grupo de Usuarios de Linux/Unix de Extremadura (http://www.gulex.org/)
GULIC
Grupo de Usuarios de Linux de Canarias (http://www.gulic.org/)
GULMU
Grupo de Usuarios de Linux de Murcia (http://gulmu.com/)
GULS
Grupo Usuarios de Linux de Salamanca (http://guls.sourceforge.net/)
GuPLe
Grupo de usuarios y programadores de Extremadura (http://www.guple.org/)
HispaLinux
Asociación de Usuarios Españoles de GNU/Linux (http://www.hispalinux.es/)
IndaLinux
Grupo de Usuarios de GNU-Linux de Almería (http://indalinux.hispalinux.es/)
LILO
LInuxeros LOcos (http://lilo.sourceforge.net/)
LiMA
Asociación de Usuarios "LiNUX Málaga" (http://www.linux-malaga.org/)
LINUCA
Asociación de Usuarios GNU/Linux en Cantabria (http://www.linuca.org)
Linux-Madrid
Grupo local de GNU/Linux de madrileños y otros convecinos (http://linux-madrid.hispalinux.es/)
Llug
Lleida Linux User Group (http://www.llug.net/)
MaCHeGoX
Grupo de Usuarios de Linux de Castilla-La Mancha (http://www.geocities.com/
alcazardesanjuan/)
PoLinux
Asociación Usuarios de Linux de la UPV (http://www.polinux.upv.es/)
SLeón
Asociación de Software Libre de León (http://www.sleon.org/)
SUGUS
Asociación de GNU/Linux - Sevilla (http://sugus.eii.us.es/)
USUALIZA
USUArios de LInux de Zamora (http://www.linux-zamora.org)
VALUX
Asociación de usuarios de LINUX de la Comunidad Valenciana (http://www.valux.org/)
ZARALINUX
Asociación de Usuarios de Linux de Zaragoza (http://piramide.unizar.es/zaralinux/)

47. Guatemala
Grupos locales en Guatemala
GLUG
Guatemala Linux User Group (http://linux.guatemala.org/)
GUUG
Grupo de usuarios de Unix en Guatemala (http://www.guug.org/)

48. Introducción
Los grupos locales son agrupaciones de personas que físicamente se reunen y realizan
actividades en una zona determinada.
Estos grupos tienen unas particularidades que los diferencian de asociaciones nacionales
o grupos de trabajo virtuales: necesitan un punto de reunión (un local, por ejemplo), hacen
actividades “a nivel de suelo” destinadas a la promoción del Software Libre entre el ciudadano
de la calle (conferencias, fiestas de instalación, colaborar con colegios, centros culturales,
otras asociaciones, etc.). Todo esto significa que sus cometidos son mucho más que un mero
contacto por Internet.
A continuación se presenta una lista de los grupos locales existentes en el mundo
hispanohablante (si conoces alguno que no aparezca en esta lista, contacta con nosotros, por
favor):

49. México
Grupos locales en México
GLO
Grupo Linux de Occidente (http://www.glo.org.mx)
GNU/Linux en México
Grupo de Usuarios de GNU/Linux en México (http://www.linux.org.mx/)
GULEV
Grupo de Usuarios de GNU/Linux (http://veracruz.linux.org.mx)
GULMT
Grupo de Usuarios de Linux de México en Toluca (http://www.internetica.net.mx/linux/)
Linux CEM
Grupo de Usuarios de Linux del ITESM CEM (http://linux.cem.itesm.mx/)
Linux Monterrey
Grupo de usuarios de GNU/Linux en Monterrey (http://www.interclan.net/rsepulveda)
Linux Puebla
Grupo de Usuarios de Linux en Puebla en el Estado de Veracruz (http://www.linuxpuebla.org)

50. Perú
Grupos locales en Perú
AQPLUG
Grupo de Usuarios de Linux en Arequipa (http://linux.aqp.com.pe/)
PLUG
Grupo de Usuarios de Linux en Perú (PLUG por las siglas en Inglés - Peruvian Linux User
Group) (http://www.linux.org.pe/)

51. Puerto Rico


Grupos locales en Puerto Rico
LUBOR
Linux Usuarios Boricua (http://www.geocities.com/Area51/Stargate/4428/linux.html)

52. Uruguay
Grupos locales en Uruguay
UYLUG
Grupo de Usuarios de Linux del Uruguay (http://www.linux.org.uy/)

53. Venezuela
Grupos locales en Venezuela
VELUG
Grupo de Usuarios de Linux de Venezuela (http://www.linux.org.ve/)

54. Introducción
En esta sección, se proveerá al lector de una lista de recursos en Internet, desde los que puede
extraer información de todo tipo, e incluso software para GNU/Linux.

55. Listas de correo


Las listas de correo son un recurso muy útil a la hora de solucionar problemas. El hecho de que
participe mucha gente en estas listas, hace más factible el recibir una respuesta a algún pedido
o consulta que se realice.
Las reglas de convivencia en dichas listas, aconsejan a los participantes ayudar cada vez que
se pueda, y antes de consultar algo, leer toda la documentación posible . De esta manera no se
genera tráfico innecesario en la lista.
HispaLinux [17] dispone de un servicio de listas de correo para la comunidad de usuarios y
desarrolladores de Software Libre. La relación de listas de correo disponibles está alojada en
https://listas.hispalinux.es/mailman/listinfo , desde donde obtendrás la información sobre cada
lista y la forma de subscribirte.
En http://calvo.teleco.ulpgc.es/mailman/listinfo/l-linux se encuentra disponible la lista de
correo L-Linux. Desde la interfaz de Mailman puedes acceder al histórico de la lista, obtener
información sobre ella y subscribirte.
Normalmente los Grupos Locales disponen de listas de correo propias, si estás interesando en
alguna de ellas visita sus páginas, donde obtendrás toda la información necesaria.

[17] Asociación de Usuarios Españoles de GNU/LiNUX

56. Documentación
La siguiente lista presenta las páginas más importantes de documentación disponibles en
Internet:
Páginas con documentación
INSFLUG
http://www.insflug.org/, página donde se coordina la traducción “oficial” de documentos breves,
como los COMOs y PUFs o Preguntas de Uso Frecuente [18]
NuLies
http://nulies.hispalinux.es/, proyecto dedicado a la traducción al castellano de aquellas partes
del núcleo Linux cuya traducción sea útil para la inmensa mayoria de hispanoparlantes
PAMELi
http://ditec.um.es/~piernas/manpages-es/, los esfuerzos de la traducción al castellano de las
páginas del manual se encuentran en esta localización
Pedro Reina
http://pedroreina.org, Página personal de Pedro Reina, profesor de Enseñanza Secundaria.
En esta página está disponible el curso de informática realizado por Pedro, basado en
herramientas de libre distribución
TLDP-ES/LuCAS
http://es.tldp.org/, como se puede leer en la página del Proyecto, LuCAS es la mayor biblioteca
en español dedicada a GNU/LiNUX de todo el planeta

[18] FAQs en inglés

57. Información
Colección de enlaces con información relativa al sistema operativo GNU/Linux:
Direcciones de información
es.comp.os.linux.*
http://www.escomposlinux.org, Página de los grupos de noticias de Linux de la jerarquía
es.comp.os.linux.*
El rincón de Linux
http://www.linux-es.com/, Esta página es un buen punto de partida para aquellos que necesitan
encontrar información sobre Linux, principalmente en castellano
GNU No Es Unix!
http://www.gnu.org/home.es.html, Proyecto donde se originó la filosofía del Software Libre.
Visita obligada para quien quiera conocer que es el Software Libre
La Gaceta de Linux
http://www.gacetadelinux.com/, Traducción al castellano de la conocida Gaceta inglesa Linux
Gazette [19] El objetivo de esta publicación es hacer Linux un poco más divertido, compartir
ideas y descubrimientos
linux.com
http://www.linux.com, Sitio dedicado a dar información general sobre muchos aspectos del
sistema
LinuxFocus
http://linuxfocus.org/, Revista internacional y libre sobre linux. Está traducida a muchos idiomas,
entre los que se encuentra el español
Linux Today
http://linuxtoday.com/, Página destinada a los profesionales interesados en mantener nivel de
conocimiento alto sobre Linux y el Código Abierto

[19] La versión inglesa puede encontrarse en: http://www.linuxgazette.com/

58. Noticias
A continuación se muestran algunas páginas dedicadas a noticias sobre el Software Libre en
general y GNU/Linux en particular:
Páginas de noticias
Barrapunto
http://www.barrapunto.com, Foro de noticias relacionadas con GNU/Linux, en castellano
Kernel Trafic
http://kt.zork.net/kernel-traffic/, Noticias semanales sobre la actividad del núcleo Linux
Kuro5hin
http://www.kuro5hin.org/, Página dedicada a la tecnología y a la cultura. Información de calidad,
para gente a la que le gusta pensar
linux.org
http://www.linux.org, Sitio oficial de Linux, el núcleo del sistema GNU/Linux. Aquí se encuentran
entre otras cosas, las últimas versiones del núcleo a medida que se van publicando
Linux Weekly News
http://lwn.net/, Últimas noticias relacionadas con GNU/Linux, en inglés
SlashDot
http://www.slashdot.com/, Foro de noticias relacionadas con GNU/Linux, en inglés
Planeta Linux
http://www.planetalinux.com.ar/, La fuente Argentina de recursos Linux

59. Programas y aplicaciones


Hay multitud de programas y aplicaciones para GNU/Linux, la mejor forma de encontrarlos es
visitando las siguientes páginas:
Direcciones útiles
DistroWatch.com
http://www.distrowatch.com/, Comparativas de las distribuciones GNU/Linux más importantes.
Un buen punto de partida para conocer las distintas distribuciones existentes
Freshmeat
http://freshmeat.net, Este sitio está dedicado a la recolección de Software Libre de todo tipo,
dividido por categorías
ibiblio
http://metalab.unc.edu, Repositorio de software y distribuciones de GNU/Linux
Kernel.org
http://www.kernel.org, Sitio principal para obtener el código fuente de Linux
LinuxISO
http://www.linuxiso.org, Página donde podrás encontrar las imagenes ISO de algunas
distribuciones de GNU/Linux, listas para ser grabadas
RmpFind
http://rpmfind.net, Buscador de aplicaciones, la característica de este es que todos los
programas están empaquetados en RPM
SourceForge
http://sourceforge.net/, Servicios gratuitos para los desarrolladores de Software Libre, en el que
se podrán encontrar aplicaciones de código abierto de todo tipo

60. Filosofía RTFM


La gran disponibilidad de documentación generó una costumbre entre los usuarios de GNU/
Linux, la Filosofía RTFM: Read The Fucking Manual, que en castellano se diría Lea Los
Malditos Manuales. A mucha gente le resulta molesto que los recién iniciados (y los no tan
nuevos) suelan preguntar cosas triviales sin siquiera leer la documentación que acompaña a
las distribuciones.
Al existir toda clase de información sobre el sistema, uno debe informarse lo máximo posible
por su cuenta antes de pedir ayuda. Esta es una forma de cortesía ante los demás, y es la
forma en que se comporta la gente de la “comunidad GNU/Linux”.

61. Introducción
Una de las más importantes características de todo sistema GNU/Linux, es la calidad y
cantidad de la documentación que se incluye: páginas del manual, “COMOs”, guías, libros, etc.
De esta forma, el usuario tiene a su disposición los recursos necesarios para informarse de
cada detalle del sistema.

62. Linux en Santa Fe, Argentina


Aunque quizás no parezca, GNU/Linux está tomando muchos adeptos en Santa Fe. Es
utilizado exitosamente en varios proveedores de Internet, así como también en oficinas de
empresas públicas y privadas.
Actualmente existe LUGLi (GNU/Linux Users Group del Litoral), que concentra a los usuarios
del Litoral argentino. Su sitio web está en http://www.lugli.org.ar , y una de sus actividades
principales es la participación en una lista de correo, donde cada uno puede consultar sobre
temas variados relacionados con GNU/Linux. Para suscribirse a dicha lista, remitirse a ???.

63. Manuales
Además de la documentación en línea y los COMOs, existen verdaderos manuales, que vienen
incluídos en cada distribución. Originalmente, estos manuales estaban escritos en inglés, pero
gracias al esfuerzo del proyecto TLDP-ES/LuCAS (La mayor biblioteca en español dedicada a
GNU/LiNUX de todo el planeta), en la actualidad existe una gran cantidad de documentación en
nuestro idioma.
Las últimas versiones de los manuales en castellano se pueden obtener del sitio web de TLDP-
ES/LuCAS (http://es.tldp.org/)
Algunos manuales disponibles en castellano
LIPP
Linux Instalación y Primeros Pasos, una guía bien básica, especial para los recién iniciados
GARL
Guía de Administración de Redes en Linux [20] , una guía avanzada sobre la configuración de
los diferentes servicios de red que un servidor GNU/Linux puede proveer
GLUP
Guía del Usuario de Linux, especial para todos los usuarios de GNU/Linux. Abarca las tareas
más cotidianas, como por ejemplo: edición de archivos, manejo en el shell, manejo del entorno
gráfico, entre otras
GULP
Guía Linux de Programación, al momento de la redacción de este curso, la GULP se halla
en desarrollo, incluye diferentes aspectos de la programación en C del sistema, desde los
conceptos básicos hasta la programación con semáforos
Guía del enRootador de Linux
Esta guía pretende dar respuestas muy claras a los problemas que pueden presentarse en la
instalación de GNU/Linux
Guía del núcleo
Un libro ideal para hackers [21] , programadores y entusiastas de lo desconocido
Manual de GNU Bison
Una guía muy completa sobre el generador de analizadores sintácticos compatible con YACC,
Bison
GURH
Guía de instalación oficial de Red Hat Linux [22] , manual que describe paso a paso la
instalación y configuración de una distribución Red Hat Linux
Introducción a la administración de redes TCP/IP
Manual introductorio para aquellos que pretenden administrar una red basada en los protocolos
de red de Internet (TCP/IP)
Manual de GNU Flex
Descripción de la herramienta para la generación de programas que realizan concordancia de
patrones en texto, Flex
DNS
Historia, descripción y configuración del servicio DNS
Seguridad en Unix y Redes
Pautas para conseguir un nivel de seguridad aceptable en sistemas Unix (con muchas
referencias a GNU/Linux)
GSAL
Guía de Seguridad del Administrador de Linux, un ambicioso manual que hará las delicias a
todos los paranoicos de la seguridad :-)
Usando Samba
Traducción del conocidísimo libro Using Samba editado por O'Reilly
LDP Manifiesto
Manual que detalla los objetivos y estado actual del proyecto de documentación Linux [23]
Guía de Programación de Módulos del Núcleo Linux
Libro destinado a programadores que conocen el lenguaje C, en el que se describe cómo
programar Módulos del Núcleo Linux
Dentro del núcleo Linux 2.4
El funcionamiento interno del núcleo Linux en su versión 2.4 queda reflejado en este manual
Guía de usuario de Ruby
Tras la lectura de esta guía, el lector ha de ser capaz de ejecutar y utilizar el lenguaje de
programación Ruby
Interconexión IrDA con Linux
Cómo conectar nuestro GNU/Linux vía IrDA a dispositivos IPAQ, PALM, GSM...
Administración de una red local basada en Internet
Una introducción para aquellas personas que pretendan administrar una red basada en los
protocolos de red de Internet (TCP/IP)
Análisis de seguridad de la familia de protocolos TCP/IP y sus servicios asociados
Introducción al mundo de la seguridad de los sistemas de información, enfocado en la familia
de protocolos de comunicaciones TCP/IP
Todos estos manuales, y alguno más, se pueden obtener en varios formatos del sitio TLDP-ES
http://es.tldp.org/htmls/manuales.html

[20] Actualmente están disponibles la versión 1.0 y 2.0 de este manual


[21] Es conveniente aclarar que estamos hablando de hackers y no de crackers. Los crackers
son aquellas personas con algún problema psicológico que tienden a hacer daño
[22] Actualmente se dispone de las versiones 5.0 y 6.0 de este manual
[23] En inglés Linux Documentation Project, de ahí el acrónimo LDP

64. Páginas Info


Mientras man es el formato de documentación más extendido, info es mucho más potente.
Proporciona enlaces de hipertexto para hacer mucho más sencilla la lectura de documentos
grandes y muchas ayudas para quien escribe la documentación.
Para leer la documentación de info, use el programa info sin ningún argumento. Le presentará
una lista de documentación disponible. Si no puede encontrar algo, es probable que sea debido
a que no tiene instalado el paquete que incluye dicha documentación.
El sistema info es un sistema basado en hipertexto. El texto que aparezca resaltado es un
enlace que apunta a más información. Las teclas más importantes cuando maneja info son:

Tab
para mover el cursor a un enlace
Intro
para seguir un enlace
p
le devolverá a la página previa
n
le enviará a la página siguiente
u
subirá un nivel de la documentación
q
para abandonar info
La mejor manera de usar info es leer la documentación info acerca de él. Si lee la primera
página que info le presente, será capaz de comenzar a usarlo.
65. Páginas del Manual
Se les llama Páginas del Manual a la documentación en línea del sistema. Existe una página
del manual por casi cada comando de GNU/Linux. La forma de consultar esta documentación
(en un terminal de texto) es mediante la orden man seguida del comando sobre el cual se
quiere obtener la información. Por ejemplo, si necesitamos ver las opciones del comando
mount (para montar sistemas de archivos), se debería ejecutar man mount.
La página del manual se muestra mediante el programa less, (el cual facilita la lectura del
documento pantalla a pantalla), por lo que todas las opciones de less funcionarán cuando lea
una página del manual. Las teclas más importantes de less son:
Teclas más importantes de less
q
para salir
Intro
para avanzar línea a línea
Espacio
para avanzar página a página
b
para retroceder una página
/
seguido de un texto y de la tecla Intro para buscar dicho texto
n
para encontrar la siguiente coincidencia de la búsqueda actual

66. Secciones de una Página del Manual


Las páginas del manual proporcionan una gran cantidad de información en muy poco espacio,
por lo pueden ser difíciles de leer. Veamos brevemente las principales secciones de la mayoría
de las páginas del manual:
Secciones
Nombre
el nombre del programa o programas documentados en la página del manual. Puede haber
más de un nombre, si los programas están estrechamente relacionados entre sí
Sinopsis
sintaxis de la órden, mostrando brevemente todas sus opciones y argumentos
Descripción
una descripción corta de la función del programa
Opciones
una lista de todas las opciones del programa, con una descripción corta de cada una (a
menudo combinada con la sección anterior)
Ver también
si existe, indica los nombres de otros programas que están relacionados de alguna manera con
el actual
Ficheros
si existe, contiene una lista de ficheros que son usados y/o modificados por el programa
History
si existe, contiene hitos importantes del desarrollo del programa
Autores
los nombres de quienes han escrito el programa
Si es un recién llegado a GNU/Linux, no espere servirse de las páginas del manual como guías
paso a paso, ya que se entienden como material conciso de referencia o consulta. Intentar
aprender GNU/Linux utilizando las páginas del manual, es como pretender aprender inglés
leyendo un diccionario.

67. Introducción al editor de textos vi


El editor vi es lo que se conoce como un editor de pantalla, donde uno apenas realiza los
cambios en el archivo que se está editando, los visualiza. Los sistemas basados en UNIX en
general traen consigo instalados varios editores de texto, y vi es uno de los más conocidos
y accesibles, y es por eso que conocer al menos los rudimentos de este editor es muy
conveniente.
Quizás al usuario novato o venido de otros entornos diferentes a UNIX le parezca un tanto
extraño el uso de este editor, ya que no utiliza menús desplegables, ni teclas de función
convencionales. Sin embargo, vi es un editor de texto extremadamente potente, cuyo manejo
con la práctica permite realizar tareas avanzadas de edición muy rápidamente.
Para hacer uso de este editor, sólo se ejecuta pasándole como argumento el nombre del
archivo a editar:
$ vi <nombre_de_archivo>

Básicamente, vi posee dos modos de funcionamiento: el modo de inserción y el modo de


comandos. Apenas se carga vi, el editor se encuentra en modo de comandos, es decir, que
el teclado no está activado para recibir texto y agregarlo al archivo, sino que cada tecla del
teclado corresponde a un comando del editor. Más adelante se listarán los comandos más
comúnmente utilizados. Ahora se verán los conceptos para utilizarlos.
Para ingresar al modo de inserción, sólo es necesario presionar la tecla Insert del teclado.
Luego ya es posible ingresar texto normalmente, como se puede observar en la figura Figura 1.
vi en modo inserción. Para volver al modo de comandos, basta con presionar la tecla Esc.
Figura 1. vi en modo inserción
En modo de comandos, se debe tener en cuenta que generalmente el comando que se ejecuta
se aplica a la línea o carácter donde se encuentre el cursor. Así por ejemplo, si se presiona
la tecla x[24], se borra el carácter donde el cursor está posicionado. Otro ejemplo es, si se
presiona 2 veces consecutivas la tecla d, se eliminará la línea completa donde se encuentre el
cursor.
Además del modo de comandos normal que posee vi, donde no es necesario presionar la tecla
Enter para ejecutar comandos, existe otra manera de ejecutarlos: vi utiliza detrás de cámaras
el editor de línea ex. Muchos de los comandos que se necesitan, se ejecutan a través de ex.
Para activar el modo de comandos de este editor de línea, se presiona la tecla : y luego se
escribe el comando, seguido de Enter, como veremos más adelante. Como ejemplo se puede
dar uno muy interesante: para salir de vi sin grabar en disco se debe escribir :q! seguido de la
tecla Enter.
Una particularidad que posee vi es la de poder hacer repeticiones de comandos. Si se escribe
un número (en modo de comandos, obviamente) inmediatamente seguido de un comando, este
comando se ejecutará la cantidad de veces que se le haya especificado. Un ejemplo práctico
de esto es que si se necesita eliminar 3 líneas de texto, con el comando 3dd se puede realizar
en vez de ejecutar dd 3 veces.
A continuación se listan los comandos más comúnmente utilizados:
i
Ingresar al modo inserción.
r
Ingresar al modo inserción (reemplazo).
cw
Reemplazar hasta el final de palabra.
D
Borrar desde el cursos hasta el final de la línea.
ZZ
Salir de vi grabando los cambios.
$
Ir al fin de línea. Es equivalente a la tecla Fin.
^
Ir al comienzo de línea. Es equivalente a la tecla Inicio.
dd
Cortar línea al portapapeles (también se usa para borrar).
Y
Copiar la línea actual al portapapeles.
p
Pegar el contenido del portapapeles a la derecha del cursor.
P
Pegar el contenido del portapapeles a la izquiera del cursor.
o
Comenzar la edición abajo del cursor.
O
Comenzar la edición arriba del cursor.
a
Comenzar la edición a la derecha del cursor.
Además, los comandos de ex más comúnmente utilizados son:
:wq
Salir de vi grabando los cambios.
:w
Grabar los cambios sin salir.
:n,m s/cadena1/cadena2/g
Buscar “cadena1” y reemplazarla por “cadena2” desde la línea número “n” hasta la línea
número “m” (se puede escribir “$” para hacer referencia al final del archivo).
:q!
Salir sin grabar los cambios.
Como comando adicional, es importante nombrar al comando de búsqueda. Éste se ejecuta
presionando la tecla / seguida de la cadena de texto a buscar, y Enter para confirmar. El cursor
se posicionará en la primera ocurrencia de la cadena a buscar. Presionando n se buscará la
siguiente ocurrencia de la búsqueda.
Ejemplo 26. Búsqueda y reemplazo en vi
Una tarea que quizás parezca complicada es la de buscar y reemplazar, por lo que se presenta
un ejemplo aclaratorio. Supóngase el caso de Figura 2. Comando de buscar y reemplazar en
vi. Se puede observar que se quiere reemplazar desde la línea 1 hasta el final del archivo todas
las ocurrencias de “vi” por “emacs”[25]. El resultado se puede observar en Figura 3. Resultado
del reemplazo en vi.
Como se ve, se han reemplazado todas las ocurrencias de la cadena “vi”. Esto a veces no es lo
correcto, como puede observarse.
Figura 2. Comando de buscar y reemplazar en vi
68. Búsqueda de archivos
Es muy común querer buscar archivos en Internet, especialmente software. La comunidad
GNU/Linux se dedica a diario a mejorar y mejorar los programas y documentos. Por lo tanto, es
muy común tener una distribución vieja pero estar al día con los programas más usados.
La extensión original en el mundo de Unix para los paquetes fue .tar.gz o .tgz que era
simplemente un árbol de directorio con archivos. Hoy, gracias a varios programadores, existen
paquetes que fueron pensados no sólo para instalar sino para desinstalar, mantenerlos e
instalarlos por partes: los llamamos RPM [26] en nuestro curso.

[26] RPM es un tipo especial de paquetes, hay varios tipos como por ejemplo DEB.

Figura 3. Resultado del reemplazo en vi

Ejemplo 27. Repetición de comandos en vi


Supóngase que se tiene un párrafo de 10 líneas en un texto que se debe mover a otro sitio
del archivo. Una solución no muy óptima es borrar las líneas y volver a escribirlas donde
corresponde; pero mejor aún es cortar esas 10 líneas y pegarlas en el nuevo sitio. Para ello, el
cursor debe estar posicionado en la primer línea del párrafo. Luego ejecutar el comando 10dd,
posicionar el cursor en el lugar donde debe ir el párrafo y ejecutar el comando p. ¡Así de fácil!

[24] Siempre tener en cuenta que las mayúsculas se diferencian de las minúsculas. Es un error
muy común tener el Bloq Mayús activado.
[25] Emacs es otro editor de texto excelente, por cierto.

68. Búsqueda de archivos


Es muy común querer buscar archivos en Internet, especialmente software. La comunidad
GNU/Linux se dedica a diario a mejorar y mejorar los programas y documentos. Por lo tanto, es
muy común tener una distribución vieja pero estar al día con los programas más usados.
La extensión original en el mundo de Unix para los paquetes fue .tar.gz o .tgz que era
simplemente un árbol de directorio con archivos. Hoy, gracias a varios programadores, existen
paquetes que fueron pensados no sólo para instalar sino para desinstalar, mantenerlos e
instalarlos por partes: los llamamos RPM [26] en nuestro curso.

[26] RPM es un tipo especial de paquetes, hay varios tipos como por ejemplo DEB.

69. Chat
Una de las actividades más adictivas en Internet es el chat. Cada día se hace más popular el
chat a través de programas de chat o irc [27] .
Para chatear existen varios programas. En KDE el más usado es ksirc. Se encuentra en K-
>Internet->Cliente de irc. Si bien existen muchos clientes más, éste es relativamente simple
como para empezar.
En la pantalla principal (Figura 4. Pantalla principal de ksirc) hay un menú llamado Conexiones
con una entrada que dice Nuevo servidor..
Figura 4. Pantalla principal de ksirc

En la Figura 5. Conectarse a un servidor en ksirc muestra un cuadro de diálogo para completar


el nombre de servidor (como por ejemplo us.undernet.org)
Figura 5. Conectarse a un servidor en ksirc
Una vez conectado se puede unir a un canal escribiendo /join nombre_de_canal como por
ejemplo /join #santafe. También hay otros comandos:
● /whois nick: muestra información de un determinado nick
● /ping nick: intenta definir cuánto tiempo tarda un mensaje en llegar a nick.
● /help: brinda ayuda de otros comandos.
Figura 6. Conectado a un servidor en ksirc

[27] No es lo mismo irc que chatear a través de web.

70. Conectarse
Lo primero que hay que hacer es configurar una cuenta de Internet. Los pasos son
relativamente simples usando el kppp.
El kppp se puede ejecutar desde terminal o clickeando en K->Internet-> Conexión a Internet.
Figura 7. Vista inicial del kppp

Luego hay que ir a Configuración (Figura 8. Configuracion del kppp) para crear una conexión a
Internet con un click en Nueva (Figura 9. Nueva conexión).
Figura 8. Configuracion del kppp

Figura 9. Nueva conexión


Pudiendo así rellenar los datos del provedor de Internet. Los datos importantes son: el nombre
y el número a marcar. Luego hay que ir a la lengüeta Servidor Nombres y poner la dirección
IP del Servidor de Nombres o Servidor DNS, que es parte de la información que nos brinda el
proveedor de Internet.
Una vez configurado ya se puede elegir como parte de las posibles configuraciones en
Conectar con. Sólo falta el nombre de usuario y la clave como muestra la Figura 10. Conexión
a internet con todos los datos.
Figura 10. Conexión a internet con todos los datos

71. Correo electrónico


El mayor tráfico de Internet actual no es el producido por los programas de Web, sino por el
Correo Electrónico.
Para utilizar el correo electrónico hay que poseer una cuenta POP3 en algún servidor. Los
datos importantes son:
● Cuenta
● Clave
● Servidor de POP3
● Servidor de SMTP
Un programa bastante bueno de correos es el kmail, que se encuentra en K->Internet->Cliente
de correo. La primera vez que es usado tiene que crear un directorio dentro del HOME para
guardar los correos. (Figura 12. Primera vez que se ejecuta kmail).
Figura 12. Primera vez que se ejecuta kmail
Luego aparece el menú de Opciones-Identidad (Figura 13. Menu Opciones-Identidad en kmail)
donde hay que completar con los datos que van a aparecer en los emails a enviar. Existe una
lengüeta Red. Allí hay que poner SMTP como servidor de correo a enviar. Si bien en Linux
viene un servidor de correo llamado sendmail, requiere una mayor configuración y no está
dentro de los límites del curso básico.
Figura 13. Menu Opciones-Identidad en kmail

72. Navegación
Una de las principales actividades en Internet es la navegación. El programa más usado
es Netscape. Este no es software libre, por lo tanto algunas distribuciones no lo traen
instalado, como por ejemplo Debian. De todas formas está disponible para bajar desde http://
www.netscape.com.
En la distribución Red Hat, en KDE la ubicación de Netscape es K->Red Hat->Internet-
>Netscape Communicator. Si bien en cada distribución cambian los menús, una forma segura
de encontrarlo es escribiendo en una terminal netscape.
La primera vez que se ejecuta netscape (Figura 16. Página de LUNIX en Netscape) aparecerá
una ventana con la licencia y los botones Accept y Do Not Accept. Aclaramos que no es
sotfware libre, no tiene la licencia GNU que viene con la mayoría del software en Linux.
Figura 16. Página de LUNIX en Netscape
Otra aplicación que sirve para navegar en páginas no muy complejas es el kfm, que no se lo
conoce por ese nombre sino más bien por Navegador (Figura 17. Página de LUNIX en kfm).
Cada vez que uno navega entre las carpetas locales utiliza ese programa. Como por ejemplo
cuando se clickea en la opción de menú Directorio Personal. Y aparecerá una ubicación similar
a file:/home/usuario. Si se reemplaza por http:// se podrá navegar por la web.
Está en desarrollo y pretende llegar a reemplazar al software comercial.
Figura 17. Página de LUNIX en kfm
Otra alternativa es la navegación en texto. Si bien a muchos no les parecerá atractiva, es
una experiencia distinta. Un programa bastante elaborado es el lynx (Figura 18. Página de
LUNIX en Lynx). Abriendo una terminal y escribiendo lynx http://www.lynx.org podremos
acceder a la página de los creadores. Al no mostrar gráficos es mucho más rápido que otros
navegadores. Y sin lugar a dudas ocupa mucho menos espacio.
Figura 18. Página de LUNIX en Lynx
73. Problemas con el modem
Antes de empezar a ilusionarse con conectarse a Internet, hay que saber si el modem es o no
un Winmodem. Esta línea especial de modems (o no tan modems) utilizan drivers propietarios
que la mayoría sólo funcionan en Windows. En caso de una futura compra de modem, lo
primero que hay que fijarse es que no sea uno de estos.
Sabiendo que no es un Winmodem el modem instalado, hay muchos problemas que
pueden tener los modems. Desde los más simples, como ser que la línea de teléfono esté
desconectada, hasta los más complicados y misteriosos que cuesta bastante encontrar sus
causas. En el archivo /usr/doc/HOWTO/Modem-HOWTO hay mucha referencia sobre modems
y en especial un capítulo dedicado a problemas (Troubleshooting).
Para quienes no leen inglés, existe una traducción de ese archivo, junto con varios HOWTOs
(traducidos al castellano como COMOs), llamado Modem-COMO y puede estar en el directorio
/usr/doc/HOWTO/translations/es.

74. Problemas relativos al provedor


Una vez conectado, es probable que no "funcione" Internet, o al ingresar un nombre de
máquina. Ejemplo: en el navegador escribir http://www.google.com y que no se conecte a ese
servidor.
Esto se debe a que el Servidor de nombres o Servidor DNS no está bien configurado. Hay que
revisar las configuraciones descritas anteriormente.
75. Problemas con el pppd
Después de pulsar Conectar, el programa de Conexión a Internet, llamado kppp, transfiere los
datos ingresados al pppd para que éste realice la conexión en sí.
El pppd es llamado también demonio pppd y en el caso de que no se pueda conectar, puede
surgir con varios cuadros de diálogo.
Uno muy común y con poca referencia es el que dice: "El demonio pppd murió
inesperadamente". Esta frase suena absurda en especial a usuarios recién iniciados en Linux.
Normalmente cuando el proveedor de Internet corta la conexión sin motivo, aparece el demonio
muerto. Esto puede ser por diversos motivos:
● El provedor da ocupado y el modem no detecta que es señal de ocupado (muchas
companías tienden a poner grabaciones).
● Al ingresar una clave incorrecta, el provedor no da explicación y corta la comunicación.
● La cuenta puede estar siendo usada y el provedor sólo permite una conexión por
cuenta.

76. Utilidades varias


Es verdad que Internet comercialmente existe desde hace bastante poco, y en muchos paises
llegó tarde; pero la tecnología TCP/IP tiene varios años. A lo largo de todos esos años se
fueron desarrollando herramientas para ayudar a mantener o diagnosticar esas redes.
La intención de este curso no es de cubrir el mantenimiento de redes TCP/IP. Tan sólo
mencionar qué herramientas son útiles para eventuales problemas usando Internet.
Todas las herramientas que utilizamos tienen origenes en consolas. Por lo tanto se puede usar
una terminal. En este curso no vamos a mostrar el uso en terminales porque puede llegar a
tornarse tedioso y crítico en ciertos ejemplos.
En reemplazo, vamos a utilizar una herramienta llamada knu, que es un frontend de los
programas a tratar, haciendo el uso de los mismos más amigable.

77. Ping
¿Cómo sabemos si una computadora está dentro de la red?
Es una pregunta relativamente simple de contestar sabiendo su Dirección IP. knu se encuentra
en K->Internet->Utilidades de Red. Se ingresa la dirección IP (por ejemplo 127.0.0.1 [28] ) y a
continuación !Adelante! como muestra la Figura 19. Ejemplo del uso de ping en knu.
Figura 19. Ejemplo del uso de ping en knu
Dará información de la conexión. Normalmente en enlaces entre máquinas el dato que más
importa es time, que expresa la latencia de red. Aquí es irrelevante, puesto que es la máquina
local. De no funcionar esta simple prueba, es posible que la configuración de red no sea
correcta.
También se pueden poner nombres de máquinas, como por ejemplo www.google.com siempre
que esté clickeado el rectángulo que dice Resolver el nombre.

[28] 127.0.0.1 es la máquina local.

78. Escritorios
Figura 20. Configuración de escritorios múltiples en el Panel
La siguiente sección, Figura 20. Configuración de escritorios múltiples en el Panel , tiene las
opciones necesarias para definir la cantidad de escritorios múltiples que se tendrán en la sesión
KDE, así como también el ancho de los botones de escritorio que aparecen en el Panel y por
último, el nombre que poseerán esos botones.
También hay que añadir una cuenta POP yendo a Añadir.... Aquí hay que completar con datos
del servidor, como muestra la Figura 14. Configurar una cuenta POP3 en kmail
Figura 14. Configurar una cuenta POP3 en kmail
Con estos datos sería suficiente como para enviar correos electrónicos y poder recibir. Un
ejemplo terminado esta en Figura 15. Ejemplo de kmail configurado
Figura 15. Ejemplo de kmail configurado
Un tema avanzado para este curso pero interesante para conocer y tenerlo en cuenta es
la lengüeta PGP. PGP significa Pretty Good Privacy (privacidad bastante buena), que es
el nombre de un programa de encriptación de mensajes para comunicaciones seguras. Es
necesario tener instalado el programa pgp o bien la version GNU del que se llama gpg (este
último lo recomendamos).
Al enviar el primer email va a pedir que introduzcamos un archivo de firma. Por ahora no existe
ninguno. Entonces con el editor de textos hay que escribir un simple archivo que contenga la
firma. Por tradición se elige el archivo .signature porque varios programas de correo lo utilizan.
De esta forma la firma será la misma sin importar qué cliente de correo estemos usando.
Con sólo apretar Conectar se debería conectar sin problemas (Figura 11. Conectándose a
Internet).
Figura 11. Conectándose a Internet

De todas formas, muchas veces la realidad es muy distinta a la teoría. Esta es una lista de
posibles problemas:
● Problemas con el modem
● Problemas con pppd
● Problemas relativos al proveedor
No pretende ser una lista exhaustiva, tan sólo son los problemas más comunes.

79. Opciones
Figura 21. Opciones del Panel
Aquí se podrán personalizar las diferentes opciones de comportamiento del Panel (Figura
21. Opciones del Panel). En el primer cuadro Letreros de ayuda de menú se encuentra la
opción Mostrar ayudas de menú que activa o desactiva el uso de unos pequeños carteles que
aparecen como ayuda cuando se deja quieto el puntero del mouse sobre algún sitio del Panel
(en inglés se los llama Tooltips). Por defecto esta opción está activada, y al estarlo, se utiliza la
barra de deslizamiento para configurar el tiempo de retardo que tomará en aparecer cada una
de estas ayudas.
En el cuadro Visuales se tienen 3 opciones a personalizar, la primera, Auto-ocultar panel hace
que el Panel se esconda automáticamente (si está activada), pudiendo configurar la velocidad
y el retardo de esta acción. La opción Auto-ocultar barra de tareas es lo mismo que la anterior,
pero para la barra de tareas; y la opción Animar mostrar/esconder de estar activada (por
defecto lo está), muestra una animación al esconderse el Panel o la barra de tareas.
El cuadro inferior --Otros-- configura varios aspectos funcionales del botón de menú K del
Panel. La primer opción Entradas del Menú Personal Primero hace que aparezcan las
configuraciones personales del menú antes que los menúes que vienen por defecto en el
sistema. La segunda opción Carpetas de Menú Primero organiza el menú de tal forma que
las categorías aparezcan arriba de las opciones simples. La tercer opción Reloj muestra el
tiempo en formato AM/PM sirve para cambiar el modo del reloj entre AM, PM y 24hs. Por
último, la cuarta opción Reloj muestra el tiempo en latidos de Internet cambia el modo del reloj,
del tradicional a un tipo de hora ``universal'' definido por la empresa SWATCH para el uso del
mismo en Internet.

80. Panel
Esta sección consta de tres cuadros, el cuadro Posición permite seleccionar el lugar donde el
Panel va a estar localizado en el escritorio, por defecto se encuentra en la parte inferior de la
pantalla.
El cuadro Barra de tareas sirve para configurar la posición de la barra de tareas, una barra
donde por cada aplicación ejecutándose, aparece un botón para su rápido acceso en caso de
estar en segundo plano o minimizada. Se da la posibilidad de deshabilitar la barra de tareas así
como también cambiarla de lugar, por defecto aparece en la parte superior del escritorio.
El cuadro Estilo tiene las opciones de tamaño del Panel, por defecto está en Normal.

81. Introducción
La comodidad es un factor muy importante en lo que respecta a productividad en trabajos de
todo tipo, incluyendo el trabajo en un escritorio virtual como lo es un entorno gráfico en una
computadora.
La comodidad en un entorno gráfico depende de la personalización de colores, tipos de letras,
imágen de fondo, sonidos del sistema, etc. es por ello que la configuración del entorno se toma
como una parte escencial de este curso describiéndose a continuación las propiedades mas
importantes del KDE que se pueden acceder a través del Centro de control KDE.

82. Bordes
Los bordes activos se utilizan para moverse de un escritorio a otro a través del uso del mouse.
Cuando están activados, si se lleva el puntero hacia el borde derecho de la pantalla y se lo deja
un instante, el KDE activa el escritorio consecutivo. Lo mismo pasa si se lleva el mouse hasta la
izquierda de la pantalla.
Seleccionando la opción Activar bordes activos como se ve en Figura 22. Configuración
de bordes, se puede establecer el tiempo de retardo que requieren los bordes activos para
funcionar.
Figura 22. Configuración de bordes
Otras opciones en la sección inferior del cuadro son los Bordes Mágicos, que se utilizan para
magnetizar los bordes de las ventanas entre sí.

83. Colores
Los colores de los diferentes componentes de las ventanas pueden cambiarse de forma tal de
darle al escritorio la apariencia que a uno más le agrade. Esto se puede hacer en la sección de
Colores que puede observarse en Figura 23. Configuración de colores en KDE. Este cuadro se
divide en tres partes más una de visualización previa.
Figura 23. Configuración de colores en KDE
Cada configuración de colores se puede guardar como un esquema individual, en el cuadro
Esquema de colores se pueden ver varios esquemas ya definidos, simulando los colores
de varios entornos. Pueden definirse nuevos esquemas presionando Añadir y definiendo un
nombre para ese nuevo esquema, una vez hecho esto, en el cuadro Color del widget[29] se
elige cada componente que se quiera asignar un color específico y luego se presiona el botón
de color seleccionando así el color a utilizar. En la visualización previa se puede ir controlando
los cambios de colores a medida que se realizan.
El cuadro Contraste posee una barra de nivel que establece el contraste entre los colores
seleccionados.

[29] Widget se le llama a cada componente de una ventana, un botón, un recuadro, la barra de
título, etc.
84. Estilo
Figura 24. Estilo de widgets como Windows95

Otro aspecto en la personalización del escritorio, es el estilo de dibujado de los widgets.


KDE permite elegir entre el estilo típico de Windows95 y el estilo de los entornos de UNIX en
general. Podemos cambiar de estilo activando o desactivando la opción Pintar widgets en el
estilo Windows 95. Se puede ver la diferencia de estilo de widgets observando Figura 24. Estilo
de widgets como Windows95 y Figura 25. Estilo de widgets como Unix.
La opción que dice Barra de Menú arriba de la pantalla al estilo de MacOS simularía de alguna
manera el estilo de los menúes como se utilizan en las computadoras Macintosh, es decir,
en vez de que cada ventana tenga su propia barra de menúes, existe una barra de menúes
general para todas las aplicaciones arriba de la pantalla, a medida que se va intercambiando de
ventana en ventana (de aplicación en aplicación), esta barra de menúes va cambiando.
Figura 25. Estilo de widgets como Unix

La tercera opción, que dice Aplicar fuentes y colores a aplicaciones no-KDE sirve para darle a
las aplicaciones que no son específicas de KDE (el Netscape por ejemplo), un ``look'' parecido
a las demás aplicaciones que si lo son, asignándole el color de ventanas y botones bastante
similares.
Debajo de ésto, hay un cuadro llamado Icon style que se utiliza para asignar el tamaño de los
íconos de la barra de herramientas (panel) y del escritorio.

85. Fondo de pantalla


En la categoría Escritorio del Centro de control KDE se tienen las diferentes opciones para
configurar el aspecto y la funcionalidad del entorno, la primera opción es Fondo, y se utiliza
para configurar el color o imágen del fondo de los escritorios.
Figura 26. Configuración del Fondo de pantalla en KDE1

Como se ve en Figura 26. Configuración del Fondo de pantalla en KDE1, se puede configurar
cada escritorio por separado, o unificar la configuración para todos seleccionado la opción
Fondo común. En el sector Colores se puede seleccionar un color de fondo o utilizando la
opción Dos colores, se logra un ``degradé'' entre ambos.
En la sección Tapiz se encuentra una lista de las imágenes que pueden utilizarse para el fondo.
En la lista desplegable de Disposición existen varias opciones para la forma de mostrar en
pantalla dichos tapices.
Para que el fondo de pantalla cambie automáticamente, puede activarse activar la opción Al
azar
Si se activa la opción Fijar en el panel, en la barra de herramientas del KDE aparecerá un ícono
especial para poder cambiar la configuración del fondo directamente sin necesidad de entrar en
el Centro de Control KDE.
86. Conceptos básicos de LDAP
A continuación detallaremos los conceptos y vocabulario que se debe manejar para poder
entender temas mas avanzados de LDAP.
Cada nodo del árbol de datos se lo denomina “entrada”. Cada entrada tiene una denominación,
o DN(Distinguished Name, nombre distinguido), que se forma de la concatenación de los DNs
relativos (o RDNs) de las entradas “padre” hasta llegar a la entrada “raíz” del árbol, como se
puede ver en Figura 27. Como se construyen los DNs de las entradas..
Figura 27. Como se construyen los DNs de las entradas.

Este método permite que cada entrada posea un identificador único, evitando la duplicación de
entradas de esta manera, tal como sucede en el servicio de nombres de dominio en Internet.
Cada entrada posee atributos donde se almacenará la información a consultar. Cada atributo
tiene un tipo de datos y acepta uno o mas valores. Además, cada entrada posee una o mas
entradas “objectClass”, las cuales definen los atributos que la entrada tendrá disponibles,
detallando cuales atributos son obligatorios y cuales son opcionales.
Por ejemplo una entrada para describir una cuenta de usuario en el servidor puede derivar del
objectclass posixAccount, cuyos atributos obligatorios son cn, uid, uidNumber, gidNumber y
homeDirectory y sus atributos opcionales: userPassword, loginShell, gecos y description.
Cada uno de estos objectClass se define en un archivo, normalmente localizado en el directorio
/etc/openldap/schema (en la implementación OpenLDAP). La clase de datos que LDAP puede
almacenar se puede extender agregando nuevos esquemas en este directorio.

87. Ejemplo de configuración de OpenLDAP


Una buena manera de explicar el funcionamiento y configuración de un servidor LDAP es
mediante un ejemplo común de la vida real. A continuación se explicará como migrar la base de
datos de usuarios y grupos para poder realizar la autenticación a través del protocolo LDAP.

87.1. Configurando el back-end


Editando el archivo /etc/openldap/slapd.conf, se agrega una base de datos de la siguiente
manera:
database ldbm
suffix "dc=ejemplo,dc=net"
rootdn "cn=root,dc=ejemplo,dc=net"
rootpw {MD5}kuJhGtfsDfglwjhHUTQNmd==
directory /var/lib/ldap
index objectClass,uid,uidNumber,gidNumber eq
index cn,mail,surname,givenname eq,subinitial

La primer línea especifica el back-end de base de datos a utilizar, “ldbm” es la opción mas
frecuentemente utilizada. La segunda línea declara el DN de la entrada raíz del árbol LDAP. La
tercer y cuarta entrada definen los datos del usuario administrador (algo así como su nombre
de usuario y contraseña), ya que esta cuenta no puede estar incluida en la base de datos
LDAP antes que se haya configurado. La quinta entrada sirve para definir el directorio donde
se almacenarán los archivos correspondientes a esta base de datos y las últimas dos entradas
establecen los tipos de índice que se van a utilizar en las distintas entradas, para búsquedas.
La contraseña rootpw está cifrada con el algoritmo MD5, esto se puede generar con el
comando slappasswd de la siguiente manera:
# slappasswd -h {MD5}

87.2. Configurando las listas de control de acceso


El siguiente paso es configurar las listas de control de acceso, que definirán la clase de acceso
que los distintos tipos de usuarios tendrán en el árbol LDAP.
En el archivo /etc/openldap/slapd.conf o en /etc/openldap/slapd.access.conf se agrega lo
siguiente:
access to dn=".*,dc=ejemplo,dc=net" attr=userPassword
by dn="cn=root,dc=ejemplo,dc=net" write
by self write
by * auth

Esta primer lista de control de acceso se puede interpretar como: Para los atributos
userPassword de todas las entradas bajo "dc=ejemplo,dc=net", se dará permiso de escritura
al usuario administrador, al usuario propietario, y al resto se les permitirá la operación de
autenticación.
Pero, ¿dónde están los usuarios?. El concepto de usuario tal como se lo conoce normalmente
aquí no se aplica, sino que se habla de Bind DN, cada cliente LDAP debe autenticarse con el
servidor enlazándose (bind) a éste en una determinada entrada de la jerarquía de la base de
datos (DN), que necesariamente deberá poseer un atributo userPassword.
Con esta ACL lo que se hace es proteger el atributo de contraseña para que no cualquier
pueda siquiera inspeccionarlo. Luego siguen otras ACLs:
access to dn=".*,dc=ejemplo,dc=net" attr=mail
by dn="cn=root,dc=ejemplo,dc=net" write
by self write
by * read
Este es un ejemplo similar al anterior, pero se permite la lectura del atributo mail (es decir, la
dirección de correo electrónico) a cualquiera, mientras que se permite su modificación a la
cuenta administrativa y al dueño del atributo.
Si bajo la entrada con DN “ou=People,dc=ejemplo,dc=net” se almacenan las cuentas de
usuario del sistema, entonces deberíamos permitir sólo la lectura de estos datos a todo el
mundo (sin permitir la modificación de por ejemplo, el nombre de usuario, ni siquiera al propio
usuario) de esta manera:
access to dn=".*,ou=People,dc=ejemplo,dc=net"
by * read

Finalmente se agrega el ACL por defecto, que permite la lectura de todos los atributos por
cualquiera, y su modificación por el usuario dueño. Se hace esto de la siguiente forma:
access to dn=".*,dc=ejemplo,dc=net"
by self write
by * read

Cada ACL se chequeará en el orden en que fueron declaradas, es por eso que la ACL
que se agregó última, no debe declararse antes de otras, porque puede llegar a anular su
funcionalidad. Un ejemplo claro es la declaración de la penúltima ACL sobre la última. A
primera vista, podría parecer que esa penúltima ACL se encuentra incluída en la última y que
por lo tanto podría ser obviada, pero observando detenidamente se puede uno dar cuenta que
la penúltima ACL no permite escritura a nadie, bajo la entrada ou=People,dc=ejemplo,dc=net, y
que por mas que la última entrada si lo permita, la anterior tiene precedencia.
Si estas ACLs se agregaron en su propio archivo /etc/openldap/slapd.access.conf, entonces
habrá que cerciorarse que se incluya este archivo en el archivo de configuración principal /etc/
openldap/slapd.conf con la siguiente sintaxis:
include /etc/openldap/slapd.access.conf

Para que se tomen los cambios, recordar de reiniciar el servicio LDAP en el sistema.

87.3. Migración del los datos al servidor LDAP


Una vez configurada la base de datos y las listas de control de acceso, se procede a la
migración de los datos preexistentes. En la distribución Mandrake, el paquete openldap-
migration instala una serie de herramientas para facilitar enormemente esta tarea.
Dentro del directorio /usr/share/openldap/migration/ se deberá editar el archivo
migrate_common.ph cambiando las siguientes declaraciones de variable:
$DEFAULT_MAIL_DOMAIN = "ejemplo.net";
$DEFAULT_BASE = "dc=ejemplo,dc=net";
$DEFAULT_MAIL_HOST = "mail.ejemplo.net";
$EXTENDED_SCHEMA = 1;

Lo siguiente es editar el archivo migrate_all_online.sh y comentar aquellos servicios que no


queremos migrar, como por ejemplo:
#$PERL -I${INSTDIR} ${INSTDIR}migrate_protocols.pl $ETC_PROTOCOLS >> $DB
Finalmente se ejecuta dicho script ingresando los datos que va pidiendo.

87.4. Configurando el usuario proxy


La siguiente etapa, consiste en la creación de una entrada especial en el servidor LDAP, que
servirá como usuario proxy. Este usuario se utilizará para leer las entradas userPassword
de las otras entradas, de tal manera de proveer esa información a los clientes que necesiten
autenticarse. Con esto, permitiremos autenticar a aquellos servicios que poseen una interfaz
con el servidor LDAP, pero que mantienen su propio esquema de autenticación y por lo tanto
no usan la operación auth provista por el servidor LDAP.
El primer paso entonces es crear un archivo LDIF, por ejemplo en /tmp/proxy.ldif cuyo
contenido sea el siguiente:
dn: cn=proxyuser,dc=ejemplo,dc=net
cn: proxyuser
sn: proxyuser
objectclass: top
objectclass: person
userPassword: {MD5}kihwqmIGdaIhnqLjashOKJ==

La contraseña se debe crear con el comando slappasswd como se vió anteriormente. Una vez
escrito correctamente el archivo LDIF, se lo agrega al servidor ejecutando el comando ldapadd
de esta manera:
# ldapadd -x -D "cn=root,dc=ejemplo,dc=net" -W -f /tmp/proxy.ldif

Este comando pedirá la contraseña que se estableció como rootpw en el archivo de


configuración, y si todo está correcto, agregará la entrada donde corresponde en la jerarquía de
árbol del servidor LDAP.
Una vez agregado el usuario proxy, habrá que permitirle el acceso de lectura al atributo
userPassword para que pueda ser utilizado por los mecanismos de autenticación que a
continuación configuraremos. Para darle el permiso necesario al usuario proxy, deberemos
modificar el primer ACL definido anteriormente, para que quede de esta forma:
access to dn=".*,dc=ejemplo,dc=net" attr=userPassword
by dn="cn=root,dc=ejemplo,dc=net" write
by dn="cn=proxyuser,dc=ejemplo,dc=net" read
by self write
by * auth

Una vez hecho este cambio, se debe reiniciar el servicio LDAP para que tome la nueva
configuración. A continuación se puede realizar una consulta al servidor LDAP mediante el
comando ldapsearch:
# ldapsearch -LL -H ldap://localhost -b"dc=ejemplo,dc=net" -W -x -
D "cn=proxyuser,dc=ejemplo,dc=net" "(uid=pedro)"

Este comando, después de ingresar la clave correspondiente al usuario proxy, muestra


en formato LDIF el resultado de la búsqueda de entradas que tengan el atributo uid con el
nombre “pedro”, a partir de la entrada dc=ejemplo,dc=net en adelante (es decir, todo el árbol).
Si todo estuvo correctamente configurado, y existe una entrada con tal atributo, entonces
se mostrarán todos sus datos, incluyendose el atributo userPassword como se muestra a
continuación:
version: 1

dn: userid=pedro,ou=People,dc=ejemplo,dc=net
objectClass: top
objectClass: account
objectClass: person
objectClass: userSecurityInformation
uid: pedro
sn: Picapiedras
cn: Pedro
userPassword:: e01ENX1HcWFsOUpQQWowMHV5VkFVb1MyL3dnPT0=
telephoneNumber: 431-2125

87.5. Configuración de los clientes LDAP


Lo que queda pendiente es configurar aquellas máquinas que vayan a funcionar como clientes
del servidor LDAP recién configurado.
Lo primero que se debe hacer es editar el archivo /etc/openldap/ldap.conf y agregarle la
siguiente información:
host <IP_del_servidor_LDAP>
base dc=ejemplo,dc=net # Esta entrada es igual al suffix
rootbinddn cn=proxyuser,dc=ejemplo,dc=net
scope one

pam_filter objectclass=posixaccount
pam_login_attribute uid
pam_member_attribute gid
pam_template_login_attribute uid
pam_password md5

nss_base_passwd ou=People,dc=ejemplo,dc=net?one
nss_base_shadow ou=People,dc=ejemplo,dc=net?one
nss_base_group ou=Group,dc=ejemplo,dc=net?one
nss_base_hosts ou=Hosts,dc=ejemplo,dc=net?one

El campo rootbinddn especifica a qué usuario el root se va a cambiar al intentar conectarse


desde la máquina cliente, y la contraseña la va a leer desde el archivo /etc/openldap/
ldap.secret, que debe tener modo 600 y contener la contraseña del proxyuser, finalizando con
una línea en blanco.
Esto va a permitir que los clientes LDAP para autenticación al querer acceder como root se
cambien al usuario proxy y puedan leer los campos userPassword de cada usuario para lograr
su finalidad. el inconveniente es que el comando passwd utilizado para que cada usuario
se cambie su propia contraseña no funcionaría porque el usuario proxy sólo tiene acceso
de lectura sobre ese campo, pero cada usuario podría modificar su contraseña utilizando el
comando ldapmodify.
Si quisiéramos hacer que el comando passwd funcione para cambiar las contraseñas de
usuario, deberíamos cambiar el ACL del servidor para que el usuario proxy tenga acceso de
escritura al campo userPassword, pero esto podría ser un problema de seguridad en aquellos
casos que las máquinas cliente sean controladas por otras personas no confiables, porque el
archivo /etc/openldap/ldap.secret de cada máquina cliente sería legible por el root local de cada
estación.

87.6. Configurando NSS para que use LDAP


NSS es el Name Service Switch que sirve para decirle al sistema cuales son las fuentes de
datos para ciertas informaciones, el archivo de configuración es /etc/nsswitch.conf:
passwd: files ldap
shadow: files ldap
group: files ldap
hosts: files ldap dns

Esto hará que los sistemas clientes consulten primero sus archivos locales, luego hagan
búsquedas en LDAP y en el caso de los hosts, hagan consultas por DNS como último recurso.
En el /etc/hosts de los clientes sólo se debería dejar con la entrada del host local, hostname y
del servidor LDAP.

88. El formato LDIF


El LDAP Data Interchange Format (LDIF) es un formato que se utiliza para la importación y
exportación de datos independientemente del servidor LDAP que se esté utilizando.
Cada servidor LDAP tiene una o varias maneras de almacenar físicamente sus datos en el
disco rígido, por esto que LDIF provee una manera de unificar la manera de tratar los datos y
así poder migrar de un servidor a otro sin importar que clase de implementación es.
El formato LDIF es simplemente un formato de texto ASCII para entradas LDAP, que tiene la
siguiente forma:
dn: <nombre distinguido>
<nombre_atributo>: <valor>
<nombre_atributo>: <valor>
<nombre_atributo>: <valor>

En un archivo LDIF puede haber mas de una entrada definida, cada entrada se separa de las
demás por una línea en blanco. A su vez, cada entrada puede tener una cantidad arbitraria de
pares <nombre_atributo>: <valor>.
Este formato es útil tanto para realizar copias de seguridad de los datos de un servidor LDAP,
como para importar pequeños cambios que se necesiten realizar manualmente en los datos,
siempre manteniendo la independencia de la implementación LDAP y de la plataforma donde
esté instalada.
A continuación podemos observar un ejemplo de una entrada para describir una cuenta de
usuario en un servidor:
Ejemplo 28. Formato LDIF para cuenta de usuario.
dn: uid=jperez,ou=People,dc=ejemplo,dc=com
uid: jperez
cn: Juan Perez
objectclass: account
objectclass: posixAccount
objectclass: top
loginshell: /bin/bash
uidnumber: 512
gidnumber: 300
homedirectory: /home/jperez
gecos: Juan Perez,,,,
userpassword: {crypt}LPnaOoUYN57Netaac

89. Introducción a LDAP


LDAP significa Lightweight Directory Access Protocol (Protocolo Liviano de Acceso a
Directorio), es un protocolo que provee servicios de directorio, organizando la información de
forma muy similar a como lo hace un sistema de archivos, o el servicio de nombres de dominio
(DNS) en Internet tal como podemos ver en Figura 28. Jerarquías en árbol de varios servicios.
Figura 28. Jerarquías en árbol de varios servicios

LDAP funciona como una base de datos, optimizada para las operaciones de lectura y
búsqueda. Por otro lado, no posee soporte para ingreso de datos por transacciones ni rollback,
que se encuentran en los motores de base de datos relacionales. Normalmente en LDAP las
operaciones de ingreso de datos son a todo o nada.
La arquitectura cliente-servidor y estructura en forma de árbol que utiliza LDAP para almacenar
su información, tiene algunas ventajas muy interesantes, como ser:
● Evita la duplicación de datos, la estructura de datos obliga a que no exista el mismo
dato en dos lugares diferentes del esquema.
● Permite la distribución de la administración, al igual que el servicio de DNS, la
responsabilidad en la administración de los datos de un árbol se puede separar entre
distintos equipos si es necesario.
● Acepta niveles de acceso bien detallados, pudiendo definir políticas de seguridad por
cada nodo.
Figura 29. Delegación del árbol LDAP

Además de esto, LDAP provee capacidades de réplica, de modo tal que se aumenta la
confiabilidad y disponibilidad de la información, aumentando también la eficiencia del servicio
ya que la carga se puede repartir entre las réplicas. Las réplicas automáticamente irán
sincronizándose con su servidor central cada cierto tiempo, hasta cierto punto se acepta cierta
inconsistencia en las réplicas, ya que como se ha comentado al comienzo, normalmente no se
realizan muchas actualizaciones a los datos.
¿Qué clase de información puede contener y cual es el uso que se le puede dar? eso es a
discreción del administrador. Algunos ejemplos comunes son:
● Libretas de direcciones compartidas.
● Autenticación de usuarios centralizada.
● Perfiles de usuarios centralizados, para permitir Roaming
En resumen, LDAP es un servicio muy flexible que permite a un administrador centralizar
variados servicios, y de esta manera facilitar la tarea de mantenimiento sin que disminuya la
confiabilidad del sistema.

90. Introducción a OpenLDAP


OpenLDAP es una implementación libre del protocolo LDAP, disponible en la mayoría de las
distribuciones de GNU/Linux, su sitio web es http://www.openldap.org.
OpenLDAP se compone de varias partes:
● slapd: El servidor LDAP.
● slurpd: El servidor de replicación.
● Bibliotecas de acceso al servidor LDAP.
● Utilidades, herramientas y ejemplos útiles.
Los archivos de configuración del OpenLDAP se encuentran en el directorio /etc/openldap/.

90.1. Características de slapd


El servidor slapd tiene una serie de funcionalidades interesantes, que se detallan a
continuación:
LDAP versión 3
slapd implementa la versión 3 del Protocolo Liviano de Acceso a Directorios. slapd soporta
LDAP sobre IPv4 e IPv6.
Simple Authentication and Security Layer (SASL)
slapd soporta servicios de autenticación robustos mediante el uso de SASL.
Transport Layer Security (TLS)
slapd provee protecciones de privacidad e integridad mediante el uso de TLS (o SSL).
Control por topología
slapd trabaja con TCP Wrappers para permitir la restricción de acceso basado en la topología
de la red.
Control de acceso
slapd tiene un sistema de control de acceso muy flexible y poderoso, permitiendo el total control
sobre la clase de acceso a la base de datos.
Internacionalización
slapd soporta Unicode.
Elección de back-end de base de datos
slapd soporta múltiples medios de almacenamiento de sus datos. Se incluye BDB, una base
de datos de alta performance; LDBM, una base de datos DBM liviana; SHELL, una interfaz a
scripts; PASSWD, una interfaz para el archivo /etc/passwd.
Múltiples instancias de base de datos
slapd puede configurarse para servir mas de una base de datos al mismo tiempo.
Replicación
slapd puede configurarse para mantener réplicas de sus bases de datos, este servicio es vital
para soportar grandes volúmenes de consultas sin que la calidad del servicio decaiga. Para
implementar esta funcionalidad, se cuenta con la ayuda de slurpd.

91. Introducción
Este documento está protegido bajo la licencia de documentación libre Free Documentation
License del Proyecto GNU, que a continuación se incluye. Toda persona que lo desee está
autorizada a usar, copiar y modificar este documento según los puntos establecidos en la
Licencia FDL
Este manual se distribuye sin garantía alguna, los autores no se hacen responsables de
cualquier tipo de daño mental, emocional o de cualquier otro tipo que produzca la lectura o
cualquier otro uso de este manual. Úsalo a tu propio riesgo.
El documento está disponible en Internet en
http://lucas.hispalinux.es/htmls/cursos.html

92. GNU Free Documentation License


Version 1.1, March 2000
Copyright 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license
document, but changing it is not allowed.

92.1. Preamble
The purpose of this License is to make a manual, textbook, or other written document “free”
in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it,
with or without modifying it, either commercially or noncommercially. Secondarily, this License
preserves for the author and publisher a way to get credit for their work, while not being
considered responsible for modifications made by others.
This License is a kind of “copyleft”, which means that derivative works of the document must
themselves be free in the same sense. It complements the GNU General Public License, which
is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because free
software needs free documentation: a free program should come with manuals providing the
same freedoms that the software does. But this License is not limited to software manuals; it
can be used for any textual work, regardless of subject matter or whether it is published as a
printed book. We recommend this License principally for works whose purpose is instruction or
reference.

92.2. Applicability and Definitions


This License applies to any manual or other work that contains a notice placed by the copyright
holder saying it can be distributed under the terms of this License. The “Document”, below,
refers to any such manual or work. Any member of the public is a licensee, and is addressed
as “you”.
A “Modified Version” of the Document means any work containing the Document or a portion of
it, either copied verbatim, or with modifications and/or translated into another language.
A “Secondary Section” is a named appendix or a front-matter section of the Document that
deals exclusively with the relationship of the publishers or authors of the Document to the
Document's overall subject (or to related matters) and contains nothing that could fall directly
within that overall subject. (For example, if the Document is in part a textbook of mathematics,
a Secondary Section may not explain any mathematics.) The relationship could be a matter
of historical connection with the subject or with related matters, or of legal, commercial,
philosophical, ethical or political position regarding them.
The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being
those of Invariant Sections, in the notice that says that the Document is released under this
License.
The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or
Back-Cover Texts, in the notice that says that the Document is released under this License.
A “Transparent” copy of the Document means a machine-readable copy, represented in a
format whose specification is available to the general public, whose contents can be viewed and
edited directly and straightforwardly with generic text editors or (for images composed of pixels)
generic paint programs or (for drawings) some widely available drawing editor, and that is
suitable for input to text formatters or for automatic translation to a variety of formats suitable for
input to text formatters. A copy made in an otherwise Transparent file format whose markup has
been designed to thwart or discourage subsequent modification by readers is not Transparent.
A copy that is not “Transparent” is called “Opaque”.
Examples of suitable formats for Transparent copies include plain ASCII without markup,
Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD,
and standard-conforming simple HTML designed for human modification. Opaque formats
include PostScript, PDF, proprietary formats that can be read and edited only by proprietary
word processors, SGML or XML for which the DTD and/or processing tools are not generally
available, and the machine-generated HTML produced by some word processors for output
purposes only.
The “Title Page” means, for a printed book, the title page itself, plus such following pages as are
needed to hold, legibly, the material this License requires to appear in the title page. For works
in formats which do not have any title page as such, “Title Page” means the text near the most
prominent appearance of the work's title, preceding the beginning of the body of the text.

92.3. Verbatim Copying


You may copy and distribute the Document in any medium, either commercially or
noncommercially, provided that this License, the copyright notices, and the license notice saying
this License applies to the Document are reproduced in all copies, and that you add no other
conditions whatsoever to those of this License. You may not use technical measures to obstruct
or control the reading or further copying of the copies you make or distribute. However, you may
accept compensation in exchange for copies. If you distribute a large enough number of copies
you must also follow the conditions in Section , “Copying in Quantity”.
You may also lend copies, under the same conditions stated above, and you may publicly
display copies.

92.4. Copying in Quantity


If you publish printed copies of the Document numbering more than 100, and the Document's
license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly
and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts
on the back cover. Both covers must also clearly and legibly identify you as the publisher
of these copies. The front cover must present the full title with all words of the title equally
prominent and visible. You may add other material on the covers in addition. Copying with
changes limited to the covers, as long as they preserve the title of the Document and satisfy
these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put the first
ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent
pages.
If you publish or distribute Opaque copies of the Document numbering more than 100, you
must either include a machine-readable Transparent copy along with each Opaque copy, or
state in or with each Opaque copy a publicly-accessible computer-network location containing a
complete Transparent copy of the Document, free of added material, which the general network-
using public has access to download anonymously at no charge using public-standard network
protocols. If you use the latter option, you must take reasonably prudent steps, when you begin
distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus
accessible at the stated location until at least one year after the last time you distribute an
Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well before
redistributing any large number of copies, to give them a chance to provide you with an updated
version of the Document.

92.5. Modifications
You may copy and distribute a Modified Version of the Document under the conditions of
sections 2 and 3 above, provided that you release the Modified Version under precisely this
License, with the Modified Version filling the role of the Document, thus licensing distribution
and modification of the Modified Version to whoever possesses a copy of it. In addition, you
must do these things in the Modified Version:
● Use in the Title Page (and on the covers, if any) a title distinct from that of the
Document, and from those of previous versions (which should, if there were any, be
listed in the History section of the Document). You may use the same title as a previous
version if the original publisher of that version gives permission.
● List on the Title Page, as authors, one or more persons or entities responsible for
authorship of the modifications in the Modified Version, together with at least five of the
principal authors of the Document (all of its principal authors, if it has less than five).
● State on the Title page the name of the publisher of the Modified Version, as the
publisher.
● Preserve all the copyright notices of the Document.
● Add an appropriate copyright notice for your modifications adjacent to the other
copyright notices.
● Include, immediately after the copyright notices, a license notice giving the public
permission to use the Modified Version under the terms of this License, in the form
shown in the Addendum below.
● Preserve in that license notice the full lists of Invariant Sections and required Cover
Texts given in the Document's license notice.
● Include an unaltered copy of this License.
● Preserve the section entitled “History”, and its title, and add to it an item stating at least
the title, year, new authors, and publisher of the Modified Version as given on the Title
Page. If there is no section entitled “History” in the Document, create one stating the title,
year, authors, and publisher of the Document as given on its Title Page, then add an
item describing the Modified Version as stated in the previous sentence.
● Preserve the network location, if any, given in the Document for public access to a
Transparent copy of the Document, and likewise the network locations given in the
Document for previous versions it was based on. These may be placed in the “History”
section. You may omit a network location for a work that was published at least four
years before the Document itself, or if the original publisher of the version it refers to
gives permission.
● In any section entitled “Acknowledgements” or “Dedications”, preserve the section's
title, and preserve in the section all the substance and tone of each of the contributor
acknowledgements and/or dedications given therein.
● Preserve all the Invariant Sections of the Document, unaltered in their text and in their
titles. Section numbers or the equivalent are not considered part of the section titles.
● Delete any section entitled “Endorsements”. Such a section may not be included in the
Modified Version.
● Do not retitle any existing section as “Endorsements” or to conflict in title with any
Invariant Section.
If the Modified Version includes new front-matter sections or appendices that qualify as
Secondary Sections and contain no material copied from the Document, you may at your option
designate some or all of these sections as invariant. To do this, add their titles to the list of
Invariant Sections in the Modified Version's license notice. These titles must be distinct from any
other section titles.
You may add a section entitled “Endorsements”, provided it contains nothing but endorsements
of your Modified Version by various parties -- for example, statements of peer review or that the
text has been approved by an organization as the authoritative definition of a standard.
You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25
words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only
one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through
arrangements made by) any one entity. If the Document already includes a cover text for the
same cover, previously added by you or by arrangement made by the same entity you are
acting on behalf of, you may not add another; but you may replace the old one, on explicit
permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission to use
their names for publicity for or to assert or imply endorsement of any Modified Version.

92.6. Combining Documents


You may combine the Document with other documents released under this License, under
the terms defined in section 4 above for modified versions, provided that you include in the
combination all of the Invariant Sections of all of the original documents, unmodified, and list
them all as Invariant Sections of your combined work in its license notice.
The combined work need only contain one copy of this License, and multiple identical Invariant
Sections may be replaced with a single copy. If there are multiple Invariant Sections with the
same name but different contents, make the title of each such section unique by adding at the
end of it, in parentheses, the name of the original author or publisher of that section if known,
or else a unique number. Make the same adjustment to the section titles in the list of Invariant
Sections in the license notice of the combined work.
In the combination, you must combine any sections entitled “History” in the various
original documents, forming one section entitled “History”; likewise combine any sections
entitled “Acknowledgements”, and any sections entitled “Dedications”. You must delete all
sections entitled “Endorsements.”

92.7. Collections of Documents


You may make a collection consisting of the Document and other documents released under
this License, and replace the individual copies of this License in the various documents with a
single copy that is included in the collection, provided that you follow the rules of this License for
verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it individually under
this License, provided you insert a copy of this License into the extracted document, and follow
this License in all other respects regarding verbatim copying of that document.

92.8. Aggregation With Independent Works


A compilation of the Document or its derivatives with other separate and independent
documents or works, in or on a volume of a storage or distribution medium, does not as a whole
count as a Modified Version of the Document, provided no compilation copyright is claimed for
the compilation. Such a compilation is called an “aggregate”, and this License does not apply to
the other self-contained works thus compiled with the Document, on account of their being thus
compiled, if they are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Document, then
if the Document is less than one quarter of the entire aggregate, the Document's Cover Texts
may be placed on covers that surround only the Document within the aggregate. Otherwise they
must appear on covers around the whole aggregate.

92.9. Translation
Translation is considered a kind of modification, so you may distribute translations of the
Document under the terms of section 4. Replacing Invariant Sections with translations requires
special permission from their copyright holders, but you may include translations of some or
all Invariant Sections in addition to the original versions of these Invariant Sections. You may
include a translation of this License provided that you also include the original English version of
this License. In case of a disagreement between the translation and the original English version
of this License, the original English version will prevail.

92.10. Termination
You may not copy, modify, sublicense, or distribute the Document except as expressly provided
for under this License. Any other attempt to copy, modify, sublicense or distribute the Document
is void, and will automatically terminate your rights under this License. However, parties
who have received copies, or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

92.11. Future Revisions of This License


The Free Software Foundation may publish new, revised versions of the GNU Free
Documentation License from time to time. Such new versions will be similar in spirit to the
present version, but may differ in detail to address new problems or concerns. See http://
www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document specifies
that a particular numbered version of this License "or any later version" applies to it, you
have the option of following the terms and conditions either of that specified version or of any
later version that has been published (not as a draft) by the Free Software Foundation. If the
Document does not specify a version number of this License, you may choose any version ever
published (not as a draft) by the Free Software Foundation.

92.12. ADDENDUM: How to use this License for your documents


To use this License in a document you have written, include a copy of the License in the
document and put the following copyright and license notices just after the title page:

Copyright YEAR YOUR NAME.


Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation;
with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
A copy of the license is included in the section entitled ``GNU
Free Documentation License''.

If you have no Invariant Sections, write “with no Invariant Sections” instead of saying which
ones are invariant. If you have no Front-Cover Texts, write “no Front-Cover Texts” instead
of “Front-Cover Texts being LIST”; likewise for Back-Cover Texts.
If your document contains nontrivial examples of program code, we recommend releasing these
examples in parallel under your choice of free software license, such as the GNU General
Public License, to permit their use in free software.

93. Iniciando una sesión


Existen diferentes métodos para poder conectar los terminales al sistema:
● En primer lugar podemos conectarnos a un GNU/Linux a través del puerto serie
(RS232), con una terminal no inteligente o bien con otro equipo y un emulador de
terminales. En ambos casos existe un programa que atiende las solicitudes de conexión
a través del puerto serie. Cuando hay una solicitud de conexión, este programa la
atiende solicitando al usuario que se identifique ante el sistema. Cuando termina la
conexión, este programa se reactiva para seguir atendiendo nuevas solicitudes.
● Mediante tarjeta de red. En este caso, tenemos un programa que escucha las
solicitudes de conexión a través de la tarjeta de red. Cuando llega una solicitud, este
programa se desdobla de forma que una parte atiende la conexión y otra continúa
atendiendo nuevas conexiones. Así, podemos tener más de una conexión a través de
la tarjeta de red. Algunos servicios que proveen esta funcionalidad son el telnet (sin
encriptación de datos) y el ssh (Secure Shell, con encriptación de datos).
● La consola. Evidentemente, en un sistema GNU/Linux también podemos trabajar desde
el teclado y monitor que están conectados directamente al sistema. Normalmente
en la mayoría de las distribuciones, en la consola hay hasta 6 terminales virtuales,
accediendo a cada una de ellas con Alt-F1 a Alt-F6.
Una vez que se ha conseguido conectar a un sistema GNU/Linux tenemos que iniciar una
sesión de trabajo. GNU/Linux es un sistema multiusuario, y esto exige que el usuario se
presente al sistema y que éste lo acepte como usuario reconocido. Así, cada vez que iniciamos
una sesión GNU/Linux nos responde con
Login:

a lo que se debe responder con el nombre de usuario. Acto seguido, GNU/Linux solicita una
clave para poder comprobar que el usuario es quien dice ser:
Password:

En este caso se teclea la clave de acceso. Por motivos de seguridad esta clave no aparecerá
en la pantalla. Si la pareja nombre de usuario/clave es correcta, el sistema inicia un intérprete
de comandos con el que se puede trabajar.
Habitualmente será el símbolo $, aunque puede ser también el símbolo % (si usamos un shell
C). Cuando es el administrador (root) quien está trabajando en el sistema, el indicador que
aparece es #.

94. Introducción
Los tipos de trabajos que se pueden realizar sobre un Unix cualquiera, pero particularmente
sobre GNU/Linux, difieren en la forma de interactuar con el usuario y el formato de la interfaz
de usuario. A simple vista, se puede decir que hay dos tipos de acceso interactivo en lo que
respecta al formato de la interfaz: usando interfaz gráfica o usando interfaz de texto. En este
curso se le dará especial importancia a la interfaz de texto, ya que es lo más normal que
se encuentra en los equipos que funcionan como servidores, y las herramientas basadas
en interfaz de texto tienen mayor tiempo de desarrollo que las otras, lo que las hace más
convenientes para la tarea de administrar un sistema GNU/Linux.

95. La base de datos de los usuarios


Se ha visto que para iniciar una sesión de trabajo en un sistema GNU/Linux se debe
suministrar al sistema una pareja de nombre de usuario/clave. Estos datos se almacenan en
un archivo llamado /etc/passwd. Este archivo contiene una línea por cada usuario del sistema.
Cada línea consta de una serie de campos separados por dos puntos (:). Estos campos son, en
el orden que aparecen:
1. Nombre de usuario. Es el nombre con el que nos presentamos al sistema, con el que
tenemos que responder a Login: y por el que nos identifica el sistema.
2. Clave cifrada. El siguiente campo es la clave de acceso al sistema. Esta clave no se
guarda como se introduce, sino que se almacena transformada mediante el algoritmo
DES.
3. UID. Identificador de usuario. Es el número de usuario que tiene cada cuenta abierta
en el sistema. El sistema trabaja de forma interna con el UID, mientras que nosotros
trabajamos con el nombre de usuario. Ambos son equivalentes.
4. GID. Identificador de grupo. Es el número de grupo principal al que pertenece el
usuario.
5. Nombre completo de usuario. Este es un campo meramente informativo, en el que se
suele poner el nombre completo del usuario.
6. Directorio personal. Este campo indica el directorio personal de un usuario, en el cual
el usuario puede guardar su información.
7. Intérprete de comandos. El último campo indica un programa que se ejecutará cuando
el usuario inicie una sesión de trabajo. Normalmente este campo es un intérprete de
comandos («shell» en inglés) que proporciona una línea de órdenes para que el usuario
trabaje. Ejemplo:
usuario:xKxd6YkHSs:505:705:Usuario:/home/usuario:/bin/bash
^ ^ ^ ^ ^ ^ ^
| | | | | | |
| | | | | | I. de comandos
| | | | | directorio personal
| | | | Nombre completo del usuario
| | | Número de grupo (GID)
| | Número de usuario (UID)
| Clave cifrada
Nombre de usuario

96. Conceptos de Autenticación y Autorización


En un entorno multiusuario como GNU/Linux, el sistema debe saber en cada instancia quién lo
está operando, de manera tal de darle (o no) los recursos que corresponde a cada usuario.
Esto se divide en dos acciones que el sistema debe realizar al tratar con un usuario que intenta
ingresar al sistema: primero la autenticación y posteriormente la autorización.
Cuando un usuario pretende ingresar al sistema de forma interactiva, es decir, obtener acceso
a una terminal de textos o a un entorno gráfico de ventanas, el sistema de alguna manera va
a solicitar a dicho usuario su identificación y su contraseña. La identificación normalmente
se la conoce como «nombre de usuario», la cual le dice al sistema quién es el usuario. La
contraseña es una palabra o conjunto de caracteres que el usuario debe tener en secreto, y
sirve para probar al sistema que el usuario es quien dice ser. Esta etapa se la conoce como
autenticación
No sólo en accesos interactivos la autenticación tiene lugar. En otros servicios como el correo
electrónico, acceso a bases de datos, etc. se requiere de una autenticación por obvias razones
de privacidad.
Por otro lado, cuando un usuario ha probado ser quien dice ser, el sistema debe establecer
las actividades que dicho usuario tiene permitido hacer en el sistema. Por ejemplo, no es lo
mismo un usuario de correo electrónico que un usuario administrador del sistema. El segundo
obviamente tendrá más privilegios que el primero porque sus funciones son diferentes.
Entonces, cuando un usuario se autentica frente al sistema, el mismo debe establecer ciertos
niveles de acceso, entre los cuales pueden ser:
● Uso máximo de espacio en disco.
● Cantidad máxima de procesos simultáneos posible.
● Cantidad máxima de memoria ocupada por procesos en ejecución.
● Lista de servicios que el sistema provee y al cual el usuario tiene acceso.
Este procedimiento es lo que se denomina autorización. Como se puede ver, la autorización
generalmente tiene que ver con la asignación máxima de recursos del sistema a un usuario
dado, ya que cuando un equipo es usado por muchas personas a la vez, el administrador del
sistema debería tener en cuenta la capacidad del equipo y establecer las listas de acceso de
tal manera que el servicio que provee dicho equipo no disminuya en eficiencia a causa de la
saturación.

97. Introducción
GNU/Linux es un sistema operativo multiusuario y multitarea. El término multiusuario se
refiere a que varias personas pueden trabajar simultáneamente en la misma computadora y el
término multitarea significa que GNU/Linux es capaz de ejecutar más de una tarea de forma
concurrente, es decir, comenzar a trabajar en una tarea y dedicarse a otra antes de haber
finalizado la primera.

98. GNU/Linux Multiusuario


En los principios de la informática, cuando las computadoras costaban fortunas, ocupaban
habitaciones enteras y sólo algunas empresas u organizaciones grandes poseían estos
ejemplares, la necesidad de brindar servicios a varias personas al mismo tiempo hizo que se
creara un sistema que permitiera un solo equipo atender los requerimientos de varios usuarios
a la vez.
El hecho de que un sistema pueda proveer servicios a muchos usuarios simultáneamente da
por sentado que debe ser además multitarea, ya que cada usuario al trabajar en el sistema
ejecuta al menos un proceso.
Esa época de grandes mainframes [30] ve el nacimiento de los sistemas operativos UNIX, de
los cuales GNU/Linux deriva.
Con el pasar de los años, el abaratamiento del hardware y el nacimiento de las computadoras
personales (en la década de los 80), los sistemas operativos mono-usuarios se hicieron
predominantes [31] . En la actualidad, la computadora ha llegado a ser un electrodoméstico, y
como tal su uso es familiar. Esto quiere decir que muchas personas utilizan un mismo equipo:
el nombre de Computadora Personal ha dejado de tener sentido. Por esto, los sistemas
operativos más usados, entre ellos Microsoft Windows han tratado de llegar a una solución
mediante el uso de perfiles de usuario, en los cuales cada perfil tiene su propia configuración
de correo, escritorio, etc. Sin embargo, esta solución no es la adecuada, dado que no se
observa algo muy importante en la persona: la privacidad.
Para asegurar la privacidad de las personas en un ambiente informático, no sólo se debe
mantener una vista personalizada del ambiente de trabajo de cada usuario, sino que también
se debe ofrecer un sistema de protección de los archivos y directorios personales, así como un
mecanismo equivalente para los procesos. De esta manera, cada archivo y cada proceso en el
sistema tiene permisos que permiten la manipulación de los mismos solamente a las personas
autorizadas.
GNU/Linux posee estas características, por lo tanto se adecúa a diferentes usos, desde
un servidor de Internet con muchos cientos de usuarios, hasta el uso familiar, conservando
siempre la privacidad de sus usuarios.

[30] Servidores de gran capacidad.


[31] Entre ellos, el famoso D.O.S.

99. Conceptos básicos


Los permisos de un archivo cualquiera (inclusive los directorios) se agrupan en 3 grupos de 3
bits cada uno, como se muestra más abajo:
rwx rwx rwx
| | |
| | otros
| grupo
usuario

Como se ha dicho, cada grupo posee 3 bits:


Bit r:
Lectura
Bit w:
Escritura
Bit x:
Ejecución
Con las diferentes combinaciones, se puede configurar un archivo para que pueda ser leído
y modificado por su dueño, y sólo leído por el grupo y los demás, por ejemplo el archivo /etc/
passwd:
$ ls -l /etc/passwd
-rw-r--r-- 1 root root 1509 Apr 4 12:44 /etc/passwd

Este archivo es del usuario root, y del grupo del mismo nombre, solamente se puede modificar
(bit «w» de escritura) por su usuario dueño, y leer por el grupo y los demás.
Los grupos son un tema más que nada administrativo y no lo tocaremos en esta sección. Sólo
hay que tener en cuenta que generalmente en un sistema GNU/Linux, un usuario cualquiera
pertenece a su grupo (grupo del mismo nombre que su nombre de usuario) y al grupo users.
A diferencia de sistemas operativos como DOS y Windows, el hecho de que un archivo tenga
una extensión .com o .exe no significa que será un programa ejecutable. Al necesitar restringir
los derechos de ejecución de cualquier archivo [32], la acción de ejecutar cualquier programa
estará supeditada al permiso correspondiente (bit «x» de ejecución). Esto es importante tenerlo
en cuenta a la hora de escribir programas que serán interpretados, ya que a fin de cuentas los
archivos serán de texto, y para que se ejecuten se les deberá activar el permiso de ejecución.

[32] Siempre teniendo en cuenta a los archivos ejecutables, es decir programas.


100. Un caso especial, los directorios
Quizás a más de un lector le ha asaltado la siguiente duda: ¿para qué servirá el bit de
ejecución en los directorios?. Obviamente, los directorios no se ejecutan, y evidentemente, el
bit «x» en los directorios existe. Como se ha aclarado anteriormente, en estos casos, dicho bit
tiene un significado especial.
El bit de ejecución en los directorios permite poder ver la información acerca de los archivos
que contienen.
El bit de lectura permite listar los contenidos de un directorio.
El bit de escritura permite crear y borrar archivos dentro de un directorio.
Generalmente es conveniente manejar los permisos de lectura y ejecución de los directorios en
forma conjunta, para evitar confusiones.

101. Introducción a los permisos de usuario


¿Para qué sirven los permisos de usuario? Bueno, es una pregunta bastante obvia teniendo
en cuenta que GNU/Linux es un sistema operativo multiusuario. Cuando muchas personas
utilizan un mismo equipo, debe haber un mecanismo que sirva para diferenciar los archivos de
un usuario de los demás archivos.
Un concepto no del todo correcto es pensar que los usuarios se utilizan exclusivamente por
personas. Los procesos [33] que se ejecutan en un sistema GNU/Linux tienen también un
usuario «dueño», que coincide generalmente con el usuario que ejecutó dicho programa.
Además, los demonios [34] tienen su propio usuario por cuestiones de seguridad.
En esta sección se verá el tema de los permisos de usuario desde el punto de vista de un
usuario común, y no de un administrador. Más adelante se verán los detalles de mayor
complejidad que generalmente incumben al administrador.

102. Representación octal


Existe una manera más ágil de representar los permisos de archivo. Teniendo en cuenta que
cada grupo de 3 bits es un número binario, la representación en octal consiste en traducir cada
grupo a un número octal, de tal manera que quede como resultado un número de 3 dígitos,
cada dígito representando a un grupo de 3 bits.
Mejor aclarar esto con un ejemplo:
rwx rw- r-- representación escrita
111 110 100 representación binaria
7 6 4 representación octal
| | |
| | otros
| grupo
usuario

La tabla Traducción de binario a octal da una guía de la traducción de números binarios a


octales.
Tabla 1. Traducción de binario a octal
Binario Octal
000 0

001 1

010 2

011 3

100 4

101 5

110 6

111 7
Entonces se puede concluir que los siguientes comandos son equivalentes:
chmod u+rwx go-rwx nombre-de-archivo.txt

chmod 700 nombre-de-archivo.txt

103. Cambio de permisos: el comando chmod


Para cambiar los permisos de los archivos se usa el comando chmod. Su sintaxis es la
siguiente:
chmod [-R] modo archivo...

La opción -R permite cambiar recursivamente los permisos de todos los archivos dentro de un
directorio.
El argumento modo está compuesto por alguna combinación de las letras u (usuario dueño),
g (grupo dueño), y o (otros), seguido de un símbolo + o - dependiendo si se quiere activar o
desactivar un permiso, siguiendo por último una combinación de las letras correspondientes a
los distintos permisos: r, w y x.
Ejemplo 29. Veremos algunos ejemplos comunes.
Si se necesita dar permisos de ejecución al usuario y al grupo de un archivo, el comando
deberá ejecutarse de la siguiente manera:
chmod ug+x nombre-de-archivo

Recién creado un archivo puede tener permisos no deseados, por ejemplo lectura y escritura
para el grupo y de lectura para el resto. Para modificar este estado se utiliza 'go-rw'. 'g' es
grupo, 'o' es otros, '-' significa eliminar atriburos y 'rw' es lectura y escritura respectivamente.
$ touch archivo
$ ls -l archivo
-rw-rw-r-- 1 usuario usuario 0 oct 21 14:09 archivo

$ chmod go-rw archivo


$ ls -l archivo
-rw------- 1 usuario usuario 0 oct 21 14:09 archivo

O si se necesita sacar el permiso de lectura y ejecución de todos los archivos y subdirectorios


del directorio /home/usuario/prueba para el grupo y los otros, se debe ejecutar:
chmod -R go-rx /home/usuario/prueba

104. Actualización del núcleo


¿Por qué la necesidad de actualizar el núcleo? La primer respuesta que quizás venga a la
mente, es por la mayor cantidad de hardware soportado, y seguramente esta respuesta es
válida, pero además debemos tener en mente, que con cada nueva versión del núcleo, se
solucionan problemas y fallas que versiones anteriores poseían, y muchas veces los núcleos
mas avanzados funcionan mas rápido que los de las versiones anteriores. Por esto, es muy
recomendable actualizar el núcleo con cada versión estable que salga disponible.
Y ya que nombramos las versiones estables, es hora de explicar como se conforma el número
de versión de un núcleo, ya que es de suma importancia a la hora de elegir el núcleo a
actualizar. Cada versión del núcleo está formado por 3 números, por ejemplo la última versión
del núcleo estable hoy en día[35] es la versión 2.4.2.
El primer número (el que se encuentra mas a la izquierda) simboliza el “número mayor de
versión”, éste cambia cada varios años, cada cambio de este número simboliza un cambio muy
importante en la estructura interna del núcleo.
El segundo número simboliza el tipo de núcleo: un número par indica una versión estable, un
número impar una versión inestable o de desarrollo. Normalmente las distribuciones de GNU/
Linux instalan por defecto una versión estable del núcleo, y es lo recomendable para equipos
que funcionarán como servidores o en cualquier ambiente de trabajo. Los núcleos de desarrollo
generalmente poseen mas amplio soporte de hardware y funcionalidades nuevas, ya que en el
futuro se convertirán en núcleos estables con estas nuevas características, pero la estabilidad
no está garantizada en estos núcleos y no es recomendable utilizarlos en máquinas que
posean datos importantes o que realicen tareas que requieran de un funcionamiento constante.
Mucha gente utiliza los núcleos de desarrollo, normalmente se utilizan en alguna máquina
personal, cuando se necesita soporte para un dispositivo nuevo, o cuando se está probando
el núcleo para reportar cualquier tipo de error a los programadores, pero en otros casos, no es
recomendable usarlos.
El tercer número simboliza el número de revisión del núcleo. Cada revisión nueva sale cada
pocos meses, a medida que se van corrigiendo errores y mejorando la eficiencia.
La tarea de actualización del núcleo comprende varias etapas:
1. Conseguir la última versión estable del núcleo. El sitio oficial del núcleo Linux es http:/
/www.kernel.org, en este sitio se podrán conseguir tanto las versiones estables como
inestables del núcleo, así como también una lista de sitios alternativos (servidores
espejo) de donde descargar estos archivos en caso de que el sitio principal esté muy
cargado. El tamaño aproximado del paquete del núcleo 2.4.2 es de 20 Mb.
2. Desempaquetar el núcleo. Generalmente el código fuente del núcleo se debe colocar
en el directorio /usr/src/linux/, pero se debe tener cuidado antes de desempaquetar
el nuevo núcleo que no esté el código fuente de un núcleo anterior instalado por la
distribución. En caso de existir, es conveniente mover el código del núcleo anterior a
otro directorio antes.
3. Seleccionar las opciones del núcleo y compilarlo. Esto dependiendo de la máquina
donde se haga puede demorar un tiempo. Aunque la potencia de los equipos que
hoy se consiguen es suficiente, en los días de las PC-AT 386 y 486, uno aprendía a
desarrollar la paciencia, ya que una compilación normal podía tomar entre una hora
hasta días si el equipo contaba con poca memoria RAM[36].
4. Instalar el núcleo y sus módulos. Esto implica copiar el archivo del núcleo y los módulos
a donde corresponde, y configurar el LILO, el programa que cargará el núcleo nuevo
cuando se reinicie el equipo.
5. Reiniciar el equipo y probar el nuevo núcleo. Esta última etapa puede también incluir
opcionalmente alguna plegaria a su santo preferido.

[35] 27 de marzo de 2001


[36] Ni hablar de cuando uno se olvidaba de incluir una opción al núcleo y debía recompilar
todo, la industria de los calmantes habrá ido en alza en esa época.

105. Compilación del núcleo


Habiendo enumerado los pasos para la actualización del núcleo en el sistema, vamos a
abocarnos a una de las etapas quizás mas complicadas del proceso.
Un detalle muy importante a tener en cuenta a la hora de compilar un núcleo, es que se deben
tener instalados en el sistema los paquetes de desarrollo. El núcleo Linux está programado en
casi su totalidad en C, por lo tanto se debe tener instalados la biblioteca C de desarrollo y el
compilador de dicho lenguaje.
Dependiendo de la distribución que se utiliza, el método de instalación de los paquetes difiere
un poco. Dejando de lado el formato de paquetes y la distribución, se debe revisar si los
paquetes gcc y libc6-dev se encuentran instalados, estos paquetes siempre tienen un nombre
similar en cualquier distribución.
Existen 3 formas de configurar las opciones y características a incluir en el núcleo, una es
usando un programa de línea de comandos, que línea a línea va preguntando las diferentes
opciones, este método era el que se utilizaba hace algunos años, los demás métodos son mas
agradables. El segundo método es mediante el uso de una interfaz de texto, pero a pantalla
completa, con uso de la biblioteca ncurses, si se quiere utilizar este método, se deben tener
instalados en el sistema dicha biblioteca (normalmente se instala por defecto), cuyo paquete
generalmente se denomina libncurses. El tercer y último método es mediante el uso de una
interfaz gráfica en las X; este método utiliza las bibliotecas Tcl/Tk, que también normalmente se
instalan por defecto en el sistema.
El primer método es el que se utilizaba con las primeras versiones del núcleo, como se puede
observar en Figure 1, no es muy amigable pero a veces puede resultar útil cuando no se tiene
disponible una interfaz gráfica ni las bibliotecas ncurses. Estando en el directorio del código
fuente del núcleo, se ejecuta el siguiente comando:
root@maquina:/usr/src/linux# make config

Figura 30. Configurando el núcleo con la interfaz de línea de comandos.


Siempre hay que tener en cuenta el usuario que se está utilizando en esta tarea, si bien
el compilar un núcleo no requiere de utilizar el usuario administrador, dependiendo del
directorio donde esté alojado el árbol de fuentes será o no necesario usar la cuenta root. Como
generalmente el directorio donde se aloja el código fuente del núcleo es /usr/src/, se necesitará
usar la cuenta de administrador, a menos que dicho directorio posea permisos especiales para
algún otro usuario del sistema.
El segundo método mencionado corresponde al uso de la interfaz de texto a pantalla completa,
como se ve en Figure 2. Este método se usará de ahora en adelante.
Esto se obtiene ejecutando el siguiente comando:
root@maquina:/usr/src/linux# make menuconfig

Figura 31. Interfaz de texto a pantalla completa.


El tercer método utiliza una interfaz gráfica en las X (Figure 3). Es el método mas práctico,
siempre y cuando se disponga de las X, claro está. Por esa razón hemos seleccionado el
anterior método para las demás figuras, aunque se debe saber que los tres métodos poseen
los mismos contenidos, solo cambia la manera de desplegar la información.
Este tercer método se obtiene ejecutando desde una terminal X lo siguiente:
root@maquina:/usr/src/linux# make xconfig

Figura 32. Interfaz gráfica para configurar el núcleo.


Una vez presentados los métodos de configuración del núcleo, nos toca seleccionar las
opciones y características que el nuevo núcleo incluirá. Lo que siempre se recomienda al
agregar opciones en el núcleo, es que aquellas opciones que tengan la posibilidad de ir como
módulos, que lo hagan. Con esto, obtendremos un núcleo mas pequeño, y los módulos que se
han compilado se irán cargando y descargando automáticamente, a medida que se necesiten
activar ciertas funcionalidades, y luego ya no se necesiten. Al tener menos cantidad de código
en memoria, no sólo se produce un ahorro de RAM (que es prácticamente insignificante
en estos días ahorrar unos 100k de RAM), sino que lo mas importante es el tener menos
posibilidades que algo falle. El sentido común dice que un núcleo de 400Kb en memoria mas
200Kb de módulos no cargados tendrá menos posibilidades de falla que el mismo núcleo, pero
con sus 600Kb completos en memoria.
¿Cómo saber cual función debería ir en módulo y cual en el núcleo? Lo que se recomienda
es tener en cuenta la necesidad del uso de cada funcionalidad del núcleo para realizar esta
decisión. Por ejemplo, una máquina que posee discos rígidos IDE, los va a necesitar usar en
todo el tiempo que esté encendido el equipo (salvo raras ocasiones), entonces el soporte para
discos IDE debería ir en el núcleo y no como un módulo, ya que de ir como módulo, estaría
siempre cargado. Un servidor de red necesitará el manejador de la tarjeta de red siempre
activo, entonces conviene compilarlo en el núcleo, pero el uso del módem de dicho equipo
es muy esporádico, en este caso el manejador del módem o los puertos serie podría ir como
módulos. También hay que tener en cuenta algo importante: el núcleo necesita saber como
manejar un disco rígido para poder iniciar todo el sistema (si el sistema está almacenado en un
disco rígido, como normalmente ocurre), si se compila el soporte de discos rígidos (cualquiera
sea el tipo) como módulo, el núcleo necesitará poder manejar el disco rígido al iniciar el equipo
para poder cargar el módulo para poder manejar el disco rígido[37], y obviamente este tipo de
casos causan problemas.
Resumiendo, hay dos casos en los cuales una funcionalidad del núcleo no debería ser
compilada como núcleo:
● La funcionalidad en cuestión es esencial para el correcto arranque del sistema.
● Dicha funcionalidad va a utilizarse en todo momento del funcionamiento del sistema.
Para los demás casos es conveniente compilar como módulo. El sistema se encargará de
cargar el módulo cuando se necesite, y cuando ya no se use, se descargará para liberar
memoria.
Cuando se ejecuta el comando make menuconfig se presenta una serie de secciones donde
se agrupan las diferentes capacidades del núcleo, esta lista que sigue proporciona una breve
explicación de los contenidos de cada una de estas secciones[38]:
Code maturity level options
Se presenta una única opción, al activarla, será posible activar aquellas funcionalidades
experimentales que tenga el núcleo, generalmente esto no es recomendable cuando se está
compilando un núcleo para algún servidor de producción, a menos que se tenga la certeza de
que tal o cual opción es estable y funciona bien (o sea imprescindible).
Loadable module support
Las opciones que se incluyen en esta sección tienen que ver con el manejo de los módulos
del núcleo. En algunos casos no será necesario o no se podrá tener módulos, entonces se
pueden desactivar. En este método de configuración del núcleo, aquellas opciones del mismo
que sea posible compilar como módulo tendrán la casilla de selección a la izquierda de esta
forma: < >, cuando se llega a alguna opción con este tipo de casilla de selección, oprimiendo
Y se la selecciona para compilarse dentro del núcleo, si se presiona M se la seleccionará para
compilarse como un módulo.
Processor type and features
Dentro de esta sección encontraremos opciones de optimización del núcleo para el tipo de
procesador que se posea. Con cada nueva serie de procesadores, características nuevas van
siendo disponibles para ciertas funciones, lo que aprovecharlas es interesante para aumentar
el desempeño general del sistema. El núcleo Linux soporta también equipos con mas de un
procesador, en caso de estar compilando el núcleo para un equipo de este tipo, en esta sección
se debe activar la opción Symmetric multi-processing support para sacar el máximo provecho.
General setup
Como su nombre lo indica, esta sección contiene opciones de configuración general del núcleo,
entre ellas se encuentran opciones especificando la marca y el modelo del chipset de la placa
madre del equipo, así como también si el núcleo utilizará el sistema de administración de
energía que provee el BIOS, el formato en el cual el núcleo será compilado, si se soportarán
dispositivos PCMCIA, etc.
Memory Technology Devices (MTD)
Esta sección en nueva de los núcleos de la serie 2.4.x, posee una opción para dar soporte a los
dispositivos de discos en memoria, para poder manejar sistemas de archivos de estado sólido
en dispositivos embebidos. Normalmente esta opción no se utilizará.
Parallel port support
Dentro de esta sección se encuentra la opción que activa el soporte para el puerto paralelo.
Generalmente utilizaremos el puerto paralelo si en la máquina se tendrá alguna impresora
de puerto paralelo instalada, alguna unidad de disco Zip, o cualquier otra unidad de disco por
puerto paralelo (grabadoras de CD-R, por ejemplo) o en el caso de utilizar un cable paralelo
para conectarse con otra máquina. Se debe tener en cuenta que esta opción se refiere
solamente al soporte de base para todos aquellos dispositivos que utilicen el puerto paralelo,
en otras secciones se debe después confirmar el soporte individual para aquellos dispositivos
específicos.
Plug and Play configuration
Hace unos años se ha impuesto como estándar una norma para periféricos de tal modo que
no tengan que ser configurados sus parámetros (IRQs, direcciones de E/S, etc.) manualmente,
sino que el sistema lo pueda manejar lo mas convenientemente posible, de esta forma, el
sistema operativo podría lidiar con los conflictos y solucionar los problemas que puedan surgir,
liberando al usuario de estas tareas que a veces suelen ser complicadas de solucionar. Este
estándar se conoce como Plug&Play (o abreviado, PnP), y aunque inicialmente los dispositivos
PnP no funcionaban muy bien, hoy en día es mas común ver este tipo de periféricos que los
otros. El núcleo Linux tiene soporte para estos dispositivos mediante la opción dentro de esta
sección. Además, se cuenta con un paquete de software llamado isapnptools que es muy útil
para configurar los antiguos dispositivos PnP ISA (normalmente, los módems).
Block devices
En esta sección se presentan opciones para dar soporte a varios tipos dispositivos de bloques,
incluyendo unidades de discos flexibles, discos IDE por puerto paralelo, discos en memoria
RAM, y otros mas.
Multi-device support (RAID and LVM)
Esta sección contiene opciones de configuración que muchas veces se utilizan en equipos
servidores. RAID es una norma que sirve para generar arreglos de múltiples discos de manera
de obtener redundancia de información y evitar problemas de corrupción de datos en el caso
de que algún disco del arreglo tenga una falla. RAID tiene varios modos de funcionamiento,
generalmente en los servidores se utilizan placas controladoras de discos RAID (soporte de
hardware) que funcionan en forma transparente y el sistema operativo no se da cuenta, sin
embargo el núcleo Linux da la posibilidad de poder utiliza discos comunes como discos RAID
(soporte por software) teniendo de esta manera un elemento mas de seguridad a bajo costo.
LVM es otro método de combinación de discos, pero para la generación de volúmenes o
grupos de volúmenes de lógicos, cuyo tamaño puede variar en tiempo de corrida del sistema,
sin tener que reiniciar ni parar servicios. LVM no se utiliza para dar redundancia de datos, sino
para combinar varios discos (de distintos tipos) y utilizarlos como si fuera un gran disco grande.
Networking options
En esta sección se encuentran las opciones de soporte base de redes. Se podrán activar los
soportes de varios protocolos, con sus opciones específicas, el mas común en estos días es
el protocolo TCP/IP, uno de los protocolos que se utiliza en Internet. Otra opción bastante
novedosa en los núcleos, es la opción QoS (Quality of Service) la cual se utiliza para definir los
algoritmos de planificación de paquetes de red, pudiendo partir un enlace en varios sub-canales
por decirlo de alguna manera, y de esta forma poder asignar cierto ancho de banda a diferentes
clientes. Tener en cuenta que esta sección no se trata acerca de soporte a periféricos de red,
sino a protocolos, para tener soporte de una placa de red en especial, se debe activar en otra
sección.
Telephony Support
En esta sección se da soporte a los dispositivos VoIP (Voice over IP), que se utilizan para
hablar por teléfono a través de redes de datos, en vez de redes de telefonía. Estos dispositivos
cada vez se están viendo con mas frecuencia, quien sabe, en unos años quizás podremos
hablar al otro lado del mundo sin tener que pagar altísimos costos.
ATA/IDE/MFM/RLL support
Aquí se da soporte a los discos IDE, sean discos rígidos, flexibles, CD-ROMs, etc. También
hay varias opciones para especificar la marca de controladora de disco que se posee, y otros
detalles para mejorar la performance. El núcleo Linux puede manejar sin problemas los nuevos
discos con UDMA.
SCSI support
También existe soporte para los dispositivos SCSI, en esta sección están las opciones para
definir los tipos de dispositivos SCSI que se dará soporte, mas otras opciones de control. Un
ejemplo común para esta sección es el soporte para las unidades de discos Zip por puerto
paralelo, En realidad estas unidades trabajan con la norma SCSI, y es por eso que parte de las
opciones que se necesitan para poder hacer funcionar estos periféricos, se encuentran en esta
sección.
IEEE 1394 (FireWire) support
FireWire es una nueva clase de bus de datos, de alta velocidad que normalmente se utiliza
para transmitir vídeo. Originariamente en las Macintosh, esta clase de conexiones se las utiliza
para conectar una cámara de vídeo al equipo y capturar vídeo sin problemas de lentitud.
Actualmente existen placas con puertos FireWire para PCs compatibles con IBM.
I2O device support
La arquitectura I2O se ha pensado para dividir los manejadores de dispositivos I2O en dos
partes: una dependiente del sistema operativo y otra no, de manera de que el fabricante del
dispositivo en cuestión solamente deba hacer un solo manejador (la parte no dependiente del
sistema operativo) y de esta forma poder utilizarlo en cualquier sistema operativo compatible
con I2O. El autor[39] no conoce actualmente ningún dispositivo de esta clase, seguramente con
el tiempo irán siendo mas comunes.
Network device support
Esta sección engloba a todas las opciones de soporte de interfaces de red, desde ethernet
de 10, 100 y 1000 Mbps, pasando por SLIP, PPP, PLIP, hasta interfaces WAN, Token Ring
y otras. Normalmente se deberán activar las opciones de soporte para placas ethernet e
interfaces PPP (si es que se utilizará módem).
Amateur Radio support
Los aficionados a las comunicaciones radiales no quedan de lado en lo que respecta a soporte
en el núcleo. Linux tiene soporte para varios TNCs, o para simular un TNC usando una placa
de sonido, de tal forma de poder conectarse con otros equipos mediante el protocolo AX.25.
IrDA (infrared) support
Esta sección generalmente es para las notebooks, que poseen un puerto infrarrojo. IrDA
es un protocolo de transferencia de datos vía infrarrojo que se encuentra normalmente en
PDAs (como las Palm) permitiendo así sincronizar los datos de la PDA en una notebook sin
necesidad de conectarla con un cable serie o USB.
ISDN subsystem
ISDN (o RDSI, como se lo llama en España) es un tipo especial de servicios digitales de
telefonía. Normalmente se lo utiliza para conectarse a Internet, teniendo una velocidad mucho
mayor que conectando se con módem. Actualmente se está dejando de lado ISDN en favor de
ADSL, en Argentina por ejemplo, ISDN no se ha visto, por su alto costo.
Old CD-ROM drivers (not SCSI, not IDE)
En esta sección se da soporte a aquellas unidades de CD-ROMs antiguas que no eran
compatibles con las normas IDE ni SCSI. Generalmente eran unidades que había que conectar
a placas de sonido, actualmente no se ven esta clase de unidades de CD-ROM.
Input core support
Las opciones que esta sección provee, permiten la configuración de dispositivos de entrada del
tipo USB, tales como teclados, mouses, etc.
Multimedia devices
Esta sección contiene las opciones necesarias para dar soporte a dispositivos de captura de
vídeo y tarjetas de radio.
File systems
Los sistemas de archivos son los formatos que se le dan a las particiones para poder
almacenar archivos, administrar los atributos de cada archivo, etc. Esta sección posee las
opciones de soporte de sistemas de archivos tanto nativos de GNU/Linux como de otros
sistemas operativos, como por ejemplo FAT32. Es importante tener en cuenta que el soporte
para el sistema de archivo que se esté utilizando en el sistema debe estar compilado dentro del
núcleo y no como módulo, normalmente este sistema es el Second extended filesystem (e2fs).
En los últimos núcleos se puede configurar el soporte para un nuevo sistema de archivos nativo
de GNU/Linux: el Reiser filesystem (reiserfs), el cual es un sistema de archivos jornalizado,
que provee ciertas características que lo hacen mas seguro que el e2fs. Además se provee
opciones para dar soporte a varios sistemas de archivos de red, que permiten utilizar discos
remotos como si fueran locales al equipo, como por ejemplo NFS (generalmente se utiliza en
los UN*X), SMB (plataformas Windows) y NCP (volúmenes NetWare).
Console drivers
Aquí se encuentran las opciones para configurar el tipo de consola que se usará en el sistema.
Dependiendo de la tarjeta de vídeo que se posea, se puede configurar para que la consola
tenga el típico formato de 80x25 caracteres, o mas resolución. También se puede configurar
el núcleo para soportar mas de una placa de vídeo, pudiendo tener dos monitores, uno como
consola de texto y otro como consola gráfica.
Sound
Esta sección contiene las opciones de sonido, pudiendo configurar una gama de tarjetas de
sonido bastante amplia.
USB support
Esta sección provee soporte para distintos dispositivos USB, desde escáneres, dispositivos de
almacenamiento de datos, reproductores de MP3, módems, impresoras hasta adaptadores de
red.
Kernel hacking
Esta sección contiene una opción que se utiliza cuando se prueban núcleos en desarrollo,
generalmente no se necesitará (ni tampoco será muy seguro) activar esta opción, a menos que
se esté colaborando con el desarrollo del núcleo.
Una vez seleccionadas todas las opciones, se debe salir del sistema de configuración del
núcleo y salvar los cambios. Las opciones seleccionadas del núcleo se guardarán en el un
archivo llamado .config dentro del árbol de fuentes del núcleo. Esto es interesante saberlo
para poder copiarlo en algún sitio como respaldo y no perder las configuraciones del núcleo si
necesitamos alguna vez borrar todos los archivos (por cuestión de espacio, por ejemplo).
Una vez que se ha salido del sistema de configuración del núcleo, antes de compilar se deben
generar las dependencias con el siguiente comando:
root@maquina:/usr/src/linux# make dep

Luego se compila el núcleo:


root@maquina:/usr/src/linux# make bzImage

Esto puede tardar algunos minutos, dependiendo de la potencia del procesador y la cantidad de
memoria RAM del equipo.
La opción bzImage (tener en cuenta las mayúsculas) le dice al compilador que genere el
archivo del núcleo y lo comprima con bzip2. Antes se utilizaba la opción zImage que generaba
un núcleo comprimido con gzip, pero tenía un límite de tamaño que actualmente se ha
sobrepasado por la cantidad de opciones que posee el núcleo. bzip2 comprime mejor que
gzip.
Luego de generar el núcleo, se deben generar los módulos, con el comando:
root@maquina:/usr/src/linux# make modules

Esta etapa quizás tome mas tiempo que la anterior, dependiendo de la cantidad de opciones
que se hayan elegido como módulos.
Una vez finalizado, se deben instalar los módulos de la siguiente manera:
root@maquina:/usr/src/linux# make modules_install

Y por último, se debe copiar el archivo del núcleo a algún sitio donde estén alojados
normalmente los núcleos, como por ejemplo el directorio /boot/. El archivo del núcleo,
suponiendo que el conjunto de archivos fuente del núcleo se haya almacenado en el directorio /
usr/src/linux/, se encuentra en /usr/src/linux/arch/i386/boot/bzImage.
Como último paso, se debe configurar el LILO para poder probar el nuevo núcleo, pero esto se
ve en Section , “LILO”.
A modo de información, es conveniente comentar el uso de una utilidad bastante práctica. El
comando dmesg imprime en pantalla los diferentes mensajes de inicio que el núcleo muestra
cuando se arranca el sistema. Esto puede ser muy útil cuando se necesita chequear mensajes
de error que no se han podido leer bien en el arranque.

[37] La recursión es algo muy interesante, pero en estos casos no aporta nada útil.
[38] Se toma la versión 2.4.2 del núcleo para las explicaciones, pero se supone que durante
toda la serie 2.4.x estas secciones y sus contenidos no cambiarán demasiado
[39] En realidad, uno de los autores (Lucas Di Pentima)

106. Configurando LILO


Toda la configuración de LILO se encuentra en /etc/lilo.conf el contenido es similar a algo así:
boot=/dev/hda
install=/boot/boot.b
default=linux
prompt
timeout=5
message=/boot/message
image=/boot/vmlinuz
label=linux
root=/dev/hda6
append=" hdc=ide-scsi ide1=autotune ide0=autotune"
other=/dev/hda2
label=windows
table=/dev/hda

Por ahora esto puede parecer inentendible pero vamos a analizar línea a línea:
boot=/dev/hda

Significa que el dispositivo de arranque es /dev/hda[40]. El sector de arranque o boot sector de


ese dispositivo contendrá a LILO cuando inicie el equipo.
install=/boot/boot.b

/boot/boot.b es un archivo usado como nuevo sector de arranque.


default=linux
prompt
timeout=5

Con estas tres opciones se especifica que:


prompt
Pregunte que núcleo hay que utilizar (el caso contrario puede ser que haya sólo uno y no se
quiera elegir).
default
En caso de no poner nada, se elija “linux”
timeout
Tiempo en décimas de segundos a esperar, si no se elije ninguna de las opciones.
message=/boot/message

Se muestra un mensaje que es el archivo /boot/message que puede contener algo como:
Bienvenido a LILO, el selector de SO de arranque!

Elija un sistema operativo de la lista.


O espere 5 segundos para que arranque el sistema predeterminado.

Luego vienen las configuraciones de los núcleos en si. En el ejemplo existen 2 núcleos, uno de
linux y el otro es un Windows.
Las dos configuraciones son distintas pero tienen una linea en común. Esta es label. label
es el identificador de núcleo para LILO, es de suponer que tiene que ser único. Puedo tener
varios núcleos de linux pero no con label=linux en mas de uno de ellos. Simplemente habrá que
asignarlos de distinta manera como por ejemplo label=linux-2.2.19 y label=linux-2.4.3.
Si por un momento repasamos este concepto, nos vamos a dar cuenta que default=linux hace
referencia al núcleo que posee label=linux. Cuando cambiemos de configuración a label=linux-
nuevo recordemos cambiar default también.
Para correr un sistema no sólo necesitamos el núcleo, sino también archivos, que componen el
árbol de directorios que surge de la raíz o root.
Por eso,
root=/dev/hda6

especifica que se va a usar la sexta partición del disco como directorio raíz o simplemente raíz,
es decir que, todo lo que esté en esa partición va a pasar a ser el directorio / donde estarán /
bin/, /etc/, /home/, /usr/, /lib/, etc.
En este concepto independizamos el núcleo de los archivos que maneja. Una vez que está
el núcleo corriendo, los archivos se pueden obtener de diferentes lugares. Por ejemplo
particiones, otros discos, discos flexibles, hasta un dispositivo que se encuentra a través de
una red[41]. Casi cualquier archivo/dispositivo puede ser root siempre que este formateado
correctamente.
Por ultimo la linea:
append=" hdc=ide-scsi ide1=autotune ide0=autotune"

pasa parámetros al núcleo para ajustar configuraciones, las cuales dependerán de cada
sistema.

[40] /dev/hda el disco maestro de la controladora IDE primaria


[41] Un hipotético /dev/red o comúnmente denominado /dev/nfsroot

107. Instalando LILO


Una vez que está correctamente configurado (mediante el archivo /etc/lilo.conf), es necesario
escribir el sector de arranque del dispositivo[42].
Un error común es pensar que sólo editando el archivo se guarda la configuración, hay que
recordar que es un archivo más, incluso se puede utilizar otro archivo.
Para grabar hay que ejecutar:
root@maquina:/root# lilo
Adding linux *
Adding windows

root@maquina:/root#

Y listo. Si es que no surgió ningún problema.


El asterisco (*) indica que núcleo se cargará por defecto (default). En nuestro caso es la
entrada que contiene label=linux.
La tecla TAB muestra todas las posibilidades de nucleos a cargar. Obviamente muestra el
contenido de label.

[42] Utilizamos la palabra \emph{dispositivo} en vez de \emph{disco} porque puede ser que
estemos configurando otra alternativa de arranque.

108. Introducción a la compilación del núcleo


¿Que es el núcleo[43]?, ¿que es lo que hace realmente? El núcleo es el corazón del sistema
operativo, todo sistema operativo tiene un núcleo, los hay de varias formas: monolíticos,
modulares, de tiempo real, microkernel, etc. Nuestro Linux (así se llama el núcleo, por eso al
sistema completo lo llamamos GNU/Linux) puede hallarse de dos formas, modular o monolítico,
pero por ahora no hay que preocuparse por esto ya que lo veremos mas adelante.
Un núcleo (cualquiera) administra los recursos de hardware del equipo, algunos lo hacen de
una manera chapucera y desordenada, de modo tal que se producen los famosos colgazos
y pantallas azules de la muerte, otros (como Linux) lo hacen de manera ordenada, y muy
eficiente. Un núcleo se encarga de manejar la memoria, los discos, el vídeo, el módem, y
demás dispositivos físicos, y da acceso al usuario para que disponga de estos dispositivos de
forma controlada.
La administración de la memoria y el procesador que realiza el núcleo Linux permite la
ejecución de programas en pseudo-paralelismo. No es paralelismo puro a menos que el equipo
posea varios procesadores y cada uno esté ejecutando un programa a la vez. El pseudo-
paralelismo consiste en dar a cada programa en ejecución[44] una porción de tiempo definida
en el procesador, que normalmente son unos pocos milisegundos, cuando se acaba el tiempo
asignado de procesador[45], el núcleo pausa el proceso para darle prioridad a otro que está
esperando su turno. Este intercambio de procesos se hace tan rápidamente que no lo notamos,
y es por eso que parece que el equipo ejecuta muchos procesos a la vez.
Como la mayoría de los sistemas operativos tipo UN*X, Linux es un núcleo monolítico[46], esto
significa que todos los manejadores de dispositivos deben estar incluidos dentro del código del
núcleo al momento de encender el equipo. Esto es a veces poco práctico en el sentido de que
al necesitar soporte para algún dispositivo nuevo, se debe recompilar el núcleo agregando el
nuevo manejador, proceso que toma cierto tiempo y requiere reiniciar el equipo.
Como se dijo anteriormente, el núcleo Linux puede también ser modular, esto significa que
muchos manejadores pueden estar en archivos separados del archivo principal del núcleo, y
por lo tanto, pueden ser cargados y descargados de memoria dinámicamente, evitando así la
necesidad de reiniciar el equipo. Esta es la manera preferible de compilar los núcleos, pero hay
ciertas ocasiones cuando se debe si o si compilarlo en forma monolítica.
En esta sección veremos cómo dar soporte a nuevos dispositivos, cómo y donde buscar las
actualizaciones de los núcleos nuevos, el manejo de los módulos del núcleo y la configuración
del arrancador LILO.

[43] En inglés se lo llama kernel


[44] A los programas en ejecución se los llama procesos, y así es como los llamaremos de aquí
en adelante
[45] En la jerga de los sistemas operativos esto se llama timeslice.
[46] No es totalmente cierto, como veremos mas adelante

109. LILO
Al hablar del núcleo es inevitable hablar del cargador de Linux o bien conocido como LILO[47]
que es el encargado de cargar en memoria el núcleo y largarlo a correr.
El núcleo es un archivo mas. Normalmente se encuentra en el disco rígido[48]. Similar a un
archivo ejecutable, algún proceso debe ser el encargado de cargarlo y luego ejecutarlo. Como
todavía no se encuentra nada en memoria, la BIOS ejecuta código de un lugar especial en el
disco, llamado boot sector, que contendrá a LILO.
Una de las grandes funciones de LILO es la selección de núcleo a usar. Normalmente al
compilar diferentes núcleos hay que elegir, por ejemplo, entre alguno que tenga soporte para
clusters[49] o para emular SCSI con un dispositivo IDE[50].
También se pueden tener núcleos de otros sistemas operativos (en el caso de algún problema
serio neurológico) como OS/2, toda la gama de Windows, otros UNIX, etc.
El núcleo de Linux acepta parámetros para personalizarlo o en el caso de que no pueda auto
detectar ciertos dispositivos o recursos. Estos parámetros deben darse antes de que se cargue
el núcleo en si. Un ejemplo sería:
LILO: linux mem=256M

En este caso se saltea la auto detección de cantidad de memoria realizada por Linux y se
presume que existen 256 MB de memoria.
Una lista más detallada de estos parámetros se encuentra en /usr/src/linux/Documentation/.
En este directorio está toda la documentación de los desarrolladores de núcleo, separada por
módulo.

[47] LInux LOader: Cargador de Linux


[48] Es probable que en otros cursos veamos como arrancar una máquina sin disco rígido a
través de la red
[49] Cluster es una forma de utilizar varias computadoras para que todas calculen al mismo
tiempo como si fuera una sola
[50] Es muy común cuando se desea utilizar una grabadora de CD-R

110. Agregando módulos de Linux


La forma de agregar un módulo es relativamente simple. El comando es insmod y su sintaxis
es:
insmod módulo [parametros]
Siendo módulo el nombre del módulo y parametros los parámetros de ese módulo, que
configuran al dispositivo que controla. La documentación de los parámetros se encuentran en /
usr/src/linux/Documentation/.
El gran inconveniente de insmod es que no controla las dependencias necesarias, sólo intenta
cargar el módulo, si la operación no tiene éxito, finaliza su ejecución.
Debido a que es casi imposible tener en mente todo el árbol de dependencias, existe una
utilidad que realiza comprobaciones. Esta utilidad es modprobe. modprobe utiliza insmod en
el orden correcto y su sintaxis es:
modprobe modulo [parametros]

111. Automatizando un poco mas los módulos del


núcleo
Como estamos operando una máquina trataremos de automatizar lo más posible las
tareas rutinarias. Se supone que los cambios de configuración en el hardware se hacen
infrecuentemente. Entonces los parámetros en la carga de módulos es siempre la misma.
La gran mayoría de los módulos auto detectan su configuración, pero en ciertas ocasiones hay
que parametrizarla. Una alternativa poco elegante sería crear un script que cargue al módulo
con los parámetros correspondientes. Pero se vuelve engorroso tener un script por módulo.
En reemplazo a eso, los comandos insmod y rmmod utilizan un archivo de configuración: /etc/
modules.conf.
Este archivo puede contener una línea del estilo:
option nombre-modulo opt-1 [opt-2 .. opt-n]

Donde opt-1, opt-2, etc. son las opciones o parámetros del módulo.
Una configuración interesante es la creación de sobrenombre o alias a los módulos. Sirve para
no tener que recordar nombres como via82cxxx_audio y en reemplazo usar placa_sonido por
ejemplo. Su sintaxis es:
alias sobre-nombre nombre-modulo

Algunos scripts de configuración del sistema tienen palabras definidas para cargar los módulos
correspondientes y que el usuario edite /etc/modules.conf y asigne el módulo.
Un ejemplo clásico sería:
alias sound sb
alias eth0 ne2k-pci

Que asigna el seudónimo sound a un módulo de Sound Blaster y eth0[51] al módulo ne2k-pci
para la placa de red.
A medida que se utilizaban los módulos, era conveniente tener una utilidad que cargue el o los
módulos necesarios para hacer una tarea. Esta utilidad está contenida en el núcleo, se llama
{\tt kmod} y se configura en la sección Loadable Module Support, subsección Enable Loadable
Module Support, opción Kernel Module Loader
Con sólo incluir eso, prácticamente no hay que cargar a mano ni ningún módulo.
[51] Corresponde a la primera placa de red Ethernet

112. Cómo generar un módulo de Linux


Cuando compilamos el núcleo debemos especificar cuales controladores se compilaran como
módulos. Esto es muy sencillo, sólo hay que poner la letra M en el menú.
Figura 33. Seleccionando opciones como módulos

Siempre que terminamos de configurar la opciones del núcleo hay que ejecutar make dep.
Ejecutando make modules se compilarán todos los módulos que sean necesarios. Esto puede
tardar desde unos pocos segundos hasta una hora, dependiendo del hardware, la configuración
(cuantos módulos se eligieron) y la versión del núcleo.
Lo único que falta es copiar los módulos recién compilados al lugar indicado (el directorio /
lib/modules/(versión del Núcleo)/). Esto se puede hacer manualmente con cp o tipear make
modules\_install.

113. Introducción a los módulos del núcleo Linux


Una mejora extraordinaria al núcleo fue la modularización del mismo. En un principio el
núcleo era monolítico, es decir, un gran archivo que contenía todos los controladores para los
dispositivos.
Un núcleo monolítico es más eficiente que uno modularizado, en parte porque toda referencia
se conoce en tiempo de compilación y por otro lado el sistema entero está en memoria
siempre. Como desventaja tiene su gran tamaño, poca flexibilidad de incorporar nuevos
controladores y no acepta cambios en el código existente.
Los módulos como contrapartida, se pueden cargar y descargar de memoria en cualquier
momento. Dando la libertad de poder utilizar sólo lo necesario. Y si estamos programando un
controlador para cualquier periférico, compilamos el controlador, lo cargamos a memoria, lo
probamos y luego se puede sacar de memoria, recompilar y seguir probando. Todo esto sin
rearrancar el sistema, ni cerrar los programas que estamos usando.

114. Mostrando los módulos cargados de Linux


Una vez que tenemos varios módulos en el directorio /lib/modules/(versión del Núcleo)/[52]
podemos listar aquellos que están siendo usados.
El comando lsmod muestra los módulos usados. Una salida podría ser:
root@maquina:/root# lsmod
Module Size Used by
loop 9600 2 (autoclean)
lockd 32208 1 (autoclean)
sunrpc 54640 1 (autoclean) [lockd]
autofs 9456 2 (autoclean)
8139too 12064 1 (autoclean)
via82cxxx_audio 9024 0
soundcore 2800 2 [via82cxxx_audio]
ac97_codec 7088 0 [via82cxxx_audio]
ip_masq_vdolive 1440 0 (unused)
ip_masq_cuseeme 1184 0 (unused)
ip_masq_quake 1456 0 (unused)
ip_masq_irc 1664 0 (unused)
ip_masq_raudio 3072 0 (unused)
ip_masq_ftp 4032 0 (unused)
nls_cp437 3952 5 (autoclean)
vfat 9408 2 (autoclean)
fat 30432 2 (autoclean) [vfat]
supermount 14224 3 (autoclean)
ide-scsi 7664 0
reiserfs 128592 2

Como también podría estar vacía. Si es que ningún módulo se cargó o si el núcleo es
monolítico.
Tomemos el caso del módulo soundcore:
soundcore 2800 2 [via82cxxx_audio]

El tamaño en memoria del módulo es de 2800 bytes. Y el módulo via82cxxx_audio lo está


usando. Esto quiere decir que para sacar de memoria a soundcore primero hay que sacar a
via82cxxx_audio. Y viceversa, si necesitamos agregar via82cxxx_audio primero tendremos que
agregar soundcore.
Podemos darnos cuenta de que existe un árbol de dependencias entre módulos. Y en algún
lugar debe estar. Bueno así es, es el archivo /lib/modules/(versión de núcleo)/modules.dep y es
generado en la compilación.

[52] Aquí se muestra como generarlos, pero, la mayoría de las distribuciones ya vienen casi
todos los módulos compilados

115. Retirando los módulos de la memoria


También se pueden retirar módulos de memoria. El comando es rmmod y es similar al insmod
en lo que respecta a comprobaciones en el árbol de dependencias.
Un módulo puede estar siendo utilizado por otro módulo, pero también puede estar siendo
utilizado por un programa de usuario. En este caso el usuario va a tener que liberar el
dispositivo/recurso antes de poder retirar el módulo de memoria.

116. Soporte de hardware


En un principio, el hardware que el núcleo Linux soportaba se debía exclusivamente al arduo
trabajo de unos cuantos hackers del núcleo, que pasaban incontables horas de trabajo
intentando descubrir como una pieza de hardware funcionaba (realizando lo que se llama
ingeniería inversa), para luego escribir un manejador para que Linux pudiera utilizar ese
dispositivo. La mayoría de las empresas fabricantes de dispositivos no entregaba la información
necesaria a los programadores del núcleo, y el soporte para los nuevos dispositivos muchas
veces se tardaba un tiempo.
Hoy en día, con el aumento de colaboradores en el desarrollo del núcleo, y con la creciente
cantidad de empresas que se han dado cuenta que GNU/Linux vale la pena, el soporte para
nuevos dispositivos no se hace esperar demasiado, y es por eso que el núcleo Linux soporta:
● Tarjetas de vídeo VGA, SVGA, Monocromo, etc.
● Controladores de discos IDE, EIDE, MFM, RLL, RAID, SCSI.
● Controladores de puertos seriales.
● Tarjetas multipuerto.
● Adaptadores de red Ethernet, ISDN, Frame Relay, Inalámbricas, X25, SLIP, PPP,
ARCnet, TokenRing, FDDI, AX.25, ATM.
● Tarjetas de sonido.
● Unidades de cinta.
● Unidades de CD-ROM.
● Unidades de grabadoras de CD-R.
● Unidades removibles, como por ejemplo Zip, Jaz, Bernoulli y tantas otras.
● Mouse serie, PS/2 y otros.
● Módems normales, y también algunos winmodems
● Impresoras matriciales, de inyección de tinta, y láser.
● Plotters.
● Cámaras digitales.
● Capturadoras de vídeo.
● Unidades de DVD-ROM.
● Puertos y dispositivos USB.
La lista es demasiado grande como para detallarla en este curso, pero para tener una idea
mucho mas detallada, basta con leer el “Hardware-HOWTO”, normalmente localizado en /usr/
doc/HOWTO/.
También debemos tener en cuenta que no todo el soporte del hardware listado es trabajo
exclusivo del núcleo Linux. Como ejemplo tenemos el caso de las impresoras, en el núcleo
no se necesita definir explícitamente que clase de impresora se tiene conectada al equipo,
solamente se necesita activar el soporte para el puerto paralelo (siempre y cuando se utilice
una impresora de puerto paralelo obviamente), y el resto del trabajo lo hará un programa a
través del núcleo; en el caso del ejemplo, el programa que se encarga de enviar datos a la
impresora se llama lpr.

117. Consiguiendo paquetes nuevos


Es muy probable que los programas especializados no se encuentren en el CD-ROM de GNU/
Linux, al igual que las versiones actualizadas que se deberán copiar de otros lugares. Un buen
lugar es Internet puesto que normalmente las últimas versiones aparecen allí.
Los paquetes deben ser elaborados a partir de una cantidad de archivos a instalar junto con
datos de configuración. Muchos programadores no fabrican su Software en paquetes RPM. Por
lo tanto tiene que haber alguna persona dedicada a "empaquetar" esos archivos.
Esto quiere decir que, si bien existen versiones nuevas de algunos programas, no
necesariamente están en paquetes RPM.

118. Buscando paquetes


Se pueden buscar en un buscador común. Como puede ser http://www.google.com o http://
www.altavista.com. Si bien no es la forma más óptima, muchas veces es un buen comienzo.
Otra alternativa es ir a sitios especializados en el tema. Existen varios rpmfinders[53] para
buscar infinidad de paquetes. Al principio suele desconcertar la cantidad que existen. No sólo
para computadoras tipo PC sino para diferentes arquitecturas.[54]
Un ejemplo de rpmfinder es http://www.rpmfind.net/linux/RPM
Siempre nos debemos asegurar de encontrar los paquetes que digan i386 para 386, 486 y
Pentium I, i586 para Pentium MMX y K6 II/III o i686 para Pentium II/III y similares.
Para bajar el paquete que hayamos seleccionado bastará con presionar el enlace
correspondiente y se nos mostrará el diálogo Guardar Como de nuestro navegador. A la hora
de elegir la ruta dónde almacenar nuestro paquete hemos de tener cuidado de no cambiar el
nombre del paquete puesto que, como hemos visto, este nos da información, sobre versiones y
tipos de arquitecturas.

[53] Buscadores de paquetes RPM.


[54] Recordemos que Linux es un sistema operativo multiplataforma.

119. Eliminación
Muchas veces los discos rígidos no son suficientes para cubrir todas las necesidades. A falta
de espacio en disco, se debe eliminar los paquetes menos usados o los más grandes.
La eliminación es tan fácil como la Instalación. Instalamos el paquete "xmms", ahora vamos a
proceder a eliminarlo.
Esta vez no hace falta poner el CD-ROM de GNU/Linux.
1. Se carga el "kpackage" mediante una terminal o consola escribiendo kpackage (siendo
root) o yendo al menú K->Utilidades->kpackage. (fig. Figure 1)
2. Seleccionar el paquete a desinstalar, como por ejemplo RPM-Application-Multimedia-
xmms. (fig. Figura 34. Selección del paquete a eliminar)
3. Figura 34. Selección del paquete a eliminar
4.

5. Hay que presionar Desinstalar en la pantalla principal. Saldrá un cuadro de diálogo


similar al de la figura Figura 35. Desinstalar un paquete
6. Figura 35. Desinstalar un paquete

7.

8. luego Desinstalar.
Es un procedimiento muy muy simple... hay que tener cuidado con varios paquetes:
● RPM-Applications-kpackage
● RPM-System Environment-Base-rpm
Son los programas usados para instalar/desinstalar programas. No hay problemas en
desinstalar ninguno de ellos pero al querer volverlos a instalar... no existe el instalador de
paquetes. (Juraría que estaba ahí hace segundos)
Una categoría muy peligrosa es RPM-System Environment y todas sus ramas. A pesar de
que estamos trabajando en memoria, si se corta la energía luego de eliminar esos paquetes,
es muy probable que no se pueda arrancar más el sistema. Y existen muchas cosas mas
entretenidas para hacer con GNU/Linux que reinstalar todo de cero.

120. Instalación
Uno de los propósitos que tiene el sistema de paquetes RPM es la instalación de paquetes
nuevos. Se puede encontrar todo el conjunto de paquetes a instalar en el CD-ROM de GNU/
Linux.
También se consiguen infinidad de paquetes en Internet listos para bajar. Existen utilidades y
sitios dedicados a encontrar paquetes de un determinado tipo.
Por ejemplo si queremos utilizar el reproductor de mp3 llamado "xmms" y no se encuentra
instalado:
1. Insertamos el CD-ROM de GNU/Linux
2. Si no se monta automáticamente, debemos ir a una terminal y montarlo escribiendo
mount /mnt/cdrom
3. Ejecutamos el comando kpackage, desde una Terminal o accediendo a través de K-
>Utilidades->kpackage
4. Va a preguntar la clave del root, debido a que los paquetes se hacen disponibles a
todos los usuario no tan sólo a uno.
5. Una vez en el programa kpackage debemos ver una pantalla similar a la figura Figura
36. Pantalla inicial del kpackage
6. Figura 36. Pantalla inicial del kpackage

7.

8. Buscamos el paquete "xmms", para eso vamos a Archivo->Buscar Paquete . (fig. Figura
37. Función de búsqueda de paquetes).
9. Figura 37. Función de búsqueda de paquetes
10.

11. Si está instalado va a aparecer con un icono de paquete que tiene una "R" (de RPM).
En este caso, elija otro paquete que no esté intalado en la categoría NEW.
12. En cambio si no está instalado, el icono es una "N" (de Nuevo) y se puede ver
información sobre el paquete. (fig. Figura 38. Vista de paquetes no instalados).
13. Figura 38. Vista de paquetes no instalados

14.

15. El botón Examinar contiene detalles acerca de la instalación. (fig. Figura 39. Detalles
sobre la instalación de paquetes).
16. Figura 39. Detalles sobre la instalación de paquetes
17.

18. Para instalar el paquete sólo hay que presionar el botón Instalar.
En el caso de que no haya problemas ya se podría ejecutar el comando xmms desde una
terminal o consola como muestra la figura Figura 40. Carga del xmms desde una consola.
Figura 40. Carga del xmms desde una consola

Para aquellos usuarios de la KDE 2.0 el proceso de instalación es casi igual pero existen
algunos matices que se deben tener en cuenta. Para ejecutar kpackage podemos ejecutar
kpackage desde un terminal en el que previamente hayamos ejecutado su porque de otra
manera nos dejará ver los paquetes instalados pero no permitirá la instalación de nuevos
paquetes. El entorno que nos presenta kpackage en la versión de KDE 2.0 es parecido al de la
KDE 1.1.x con lo que se puede aplicar todo lo visto hasta ahora sin ninguna complicación.

121. Saber sobre nombres de paquetes


Para copiar paquetes primero hay que saber qué es lo que estamos copiando.
Un nombre típico de paquete sería:
xmms-0.9.5-1.i386.rpm

donde:
xmms
es el nombre del paquete
0.9.5
es la versión, cuanto mayor, más nuevo es el paquete.
1
es la revisión. Sería la versión del empaquetado, no del programa.
i386
es la arquitectura, o sea el tipo de máquina donde va a ejecutarse.
rpm
es la extensión.
Ya veremos en detalle que hay que tener en cuenta al copiar.

122. Verificación
Muchas veces el uso incorrecto del sistema borra o modifica archivos que pertenecen a
paquetes y que son necesarios para su funcionamiento. Pasado un tiempo, al intentar ejecutar
programas, éstos no funcionan correctamente.
Una alternativa antes de instalar de nuevo el paquete defectuoso es la verificación del mismo
para que no se reinstale equivocadamente.
Cómo verificar un paquete:
● Seleccionamos el paquete (ej. RPM-Applicaciones-Multimedia-xmms)
● Ir a la lengüeta Lista de Archivos (fig. Figura 41. Listado de archivos correspondientes a
un paquete)
● Figura 41. Listado de archivos correspondientes a un paquete

Se indicará con una cruz roja cualquier archivo que no se encuentre, en cambio, se marcarán
los archivos existentes con un tilde verde.

123. Bibliotecas gráficas en X


Para dibujar en pantalla cualquier cosa, el servidor X provee a los programadores de la
biblioteca gráfica Xlib. Esta biblioteca provee de funciones de dibujo demasiado primitivas, y
el realizar un entorno de ventanas con estas funciones se hace demasiado complicado, es por
ésto que se han desarrollado distintas bibliotecas gráficas basadas en Xlib, pero que proveen
un conjunto mas rico y complejo de funciones que facilitan la tarea al programador y mejoran la
estética de los programas gráficos.
Como primeros ejemplos se tuvo a la biblioteca Motif, que se utilizaba mucho en programas
comerciales en los distintos UNIX. Motif visualmente es muy simple y a la vez no requiere de
muchos recursos del equipo para funcionar con buena velocidad.
Con el tiempo comenzaron a aparecer proyectos alternativos, primero fue la versión libre de
Motif llamada Lesstif, luego bibliotecas mas pulidas como XForms y finalmente Qt y GTK+.
En las figuras \ref{fig:BibliotecaQt} y \ref{fig:BibliotecaGTK} se pueden apreciar las diferencias
visuales de Qt y GTK+ respectivamente.
Figura 42. Entorno gráfico basado en Qt
Figura 43. Entorno gráfico basado en GTK+

Además de la diferencia visual de las bibliotecas gráficas, estas también difieren en lo que
respecta a los lenguajes de programación soportados. Tomando como ejemplo las dos
bibliotecas gráficas mas populares en estos días, Qt (y las kde-libs) principalmente usan C++
para el desarrollo de aplicaciones, en cambio las bibliotecas gráficas del proyecto GNOME
(GDK y GTK+) tiene como lenguaje de programación principal el C. Sin embargo, esto no es
una limitación hoy en día, ya que estas bibliotecas también soportan lenguajes alternativos
como el Perl, Python, Tcl/Tk, etc. de tal manera de poder dar cabida a más programadores
para cada entorno gráfico.

124. Porción: Modelo de capas del protocolo X11


El hecho de que el servidor X haya sido diseñado para ser portable a diferentes arquitecturas
hizo que el funcionamiento de éste con las aplicaciones gráficas funcionen en modo de
capas. La división de areas en distintas capas es algo que se ve en muchos aspectos del
funcionamiento de GNU/Linux dada la facilidad de mantenimiento de los programas que se
logra.
Figura 44. Modelo de capas con el entorno KDE
En la figura Figura 44. Modelo de capas con el entorno KDE vemos que como capa inferior,
se tiene al hardware, el cual interactúa con su capa inmediata superior, que en este caso es
el servidor X, es decir que X se encarga de lidiar con las particularidades de cada tarjeta de
vídeo, manejar las funciones de red, y el dibujado básico en pantalla [55] Estas funciones de
dibujado, X se las provee a su capa superior la cual dependerá del entorno gráfico que se esté
manejando. En el caso de KDE por ejemplo, la capa superior a X es la biblioteca llamada Qt,
ésta provee las funciones de armado de ventanas, movimiento de las mismas, y dibujado de
botones, flechas, punteros, etc. las cuales son aprovechadas por la capa correspondiente a
las kde-libs es decir, a las bibliotecas de KDE dedicadas a dar una colección de funciones de
construcción de cajas de diálogos estándar, menúes, etc. a las aplicaciones KDE y al entorno
KDE propiamente dicho.
En el caso del entorno gráfico GNOME [56] el esquema de capas es muy similar al anterior,
como se ve en la figura Figura 45. Modelo de capas con el entorno GNOME
Figura 45. Modelo de capas con el entorno GNOME

Lo único que cambia son las capas por encima del servidor X, y es por eso que es posible tener
en un mismo equipo varios entornos gráficos y usar el que mas se ajuste a las necesidades del
usuario, a diferencia de otros sistemas operativos que sólo poseen una opción.
Lo interesante del modelo de capas, es que éstas son intercambiables: si por ejemplo se
cambia la tarjeta de vídeo (la capa mas inferior), no es necesario tener que cambiar el resto
del conjunto de programas, sólo basta con que la capa superior (el servidor X en este caso)
pueda comunicarse con la nueva capa de hardware para que todo funcione correctamente.
Otra ventaja es que si el desarrollo de las diferentes capas se realiza por diferentes grupos
de personas, cuando se actualiza una de las capas el conjunto en su totalidad se actualiza
automáticamente, si por ejemplo el equipo GNOME lanza su nueva versión de la biblioteca
GTK+, solamente hará falta instalar esta nueva versión y el resto de los programas que
conforman las otras capas no deberían tocarse, quedando todo funcionando correctamente [57]

[55] Cuando se habla de dibujado básico, se está hablando de pintado de puntos en pantalla.
[56] Se dan estos dos ejemplos ya que son los entornos gráficos mas populares en estos días.
[57] Esto es lo que normalmente ocurre, pero a veces puede tomar un poco más de trabajo
dependiendo del nivel de actualización.

125. Configuración y utilización de Leafnode


La configuración de Leafnode es relativamente sencilla, se concentra en un sólo archivo. Para
RedHat lo encontraremos en /etc/leafnode/config, que es donde se instala por defecto. Para
Debian en /etc/news/leafnode/config. Este archivo tiene varias opciones que vamos a explicar a
continuación:
server
el servidor al que se conectará Leafnode.
supplement
un servidor de apoyo para bajar aquellas noticias que no encontremos en el principal o cuando
éste no esté disponible.
expire
el tiempo máximo que permanecerán las noticias en el servidor Leafnode.
username
nombre de usuario para acceder al servidor.
password
la clave para permitir el acceso.
port
puerto al que se conectará Leafnode para bajar las noticias si es diferente del 119.
timeout
máximo tiempo de espera si no se conecta.
nodesc
aquí decidimos si queremos bajar los grupos con descripciones, valor 1, o sin descripciones,
por defecto, valor 0.
filterfile
fichero en el que se encuentran los filtros.
groupexpire
tiempo de caducidad de las noticias dentro de un grupo determinado.
maxfetch
número máximo de noticias que se bajarán desde el servidor en una sesión.
initialfetch
el número de noticias que se obtienen la primera vez que Leafnode baja un grupo de noticias.
Útil cuando se trata de grupos que tengan mucho tráfico, de esta manera se bajarán los más
actuales.
delayboy
para bajar sólo los encabezados en un primer momento y, posteriormente, los cuerpos de
aquellas noticias que hayamos seleccionado con el lector de noticias. Hay que tener cuidado
porque da problemas con el lector de noticias del Netscape.
maxcrosspost
número máximo al que se ha enviado una noticia, si excede el número, la noticia no será
almacenada.
maxage
con esta opción indicamos la antigüedad máximo de las noticias a bajar.
maxlines
número máximo de líneas que puede contener la noticia.
maxbytes
tamaño máximo de las noticias, para evitar la descarga de binarios.
timeout_short
indica el número de días que Leafnode mantendrá un grupo de noticias antes de darlo de baja
cuando no tiene a nadie suscrito al mismo.
timeout_long
es el número de días que Leafnode seguirá bajando noticias a un grupo que nadie está
leyendo, luego lo dará de baja.
timeout_active
con esta opción indicamos a Leafnode un intervalo en días para que actualize la lista de grupos
desde los servidores.
create_all_links
para aquellos que usen lectores de noticias que permitan puntuar/matar, valor 1 para activar, 0
para desactivar.
hostname
nombre del servidor de noticias que saldrá en la noticia en el caso de que Leafnode no lo
resuelva de forma satisfactoria.
Este es el fichero de configuración que viene con Leafnode, he optado por dejar los
comentarios en inglés y poner, opcionalmente, algunos comentarios en español al final de cada
sección.
## This is the NNTP server leafnode fetches its news from.
## You need read and post access to it. Mandatory.

server = news.servidor_principal.com

#Puede que necesite poner usuario y clave para lo que usaremos:


#username = usuario
#password = clave
#******************************************************************

## Unread discussion threads will be deleted after this many days if


## you don't define special expire times. Mandatory.

expire = 5

#Este es el tiempo de caducidad por defecto de todos los grupos.


#******************************************************************

# Todo lo que viene después son parámetros opcionales.


##
## All the following parameters are optional
##
## I have free access to my news server. If you don't have, comment out
## the following two lines and change them accordingly.
## username = name
## password = pass

## Standard news servers run on port 119. If your newsserver doesn't, comment
## out the following line and change it accordingly.
# port = 8000
#El puerto en el que escucha leafnode es el 119, con port se puede cambiar.
#***************************************************************************

## This is another news server which stores some groups that are not
## available on the first one. You can define username, password and port
## for each server separately.

server = news.un_servidor.com
username = usuario
password = clave
server = news.otro_servidor.com.es
username = usuario
password = clave

#Esta parte es si se necesita tener servidores adicionales por si el principal


#falla o para complementar las noticias.
#*****************************************************************************

## This is a news server which does not understand the


## "LIST NEWSGROUP news.group" command. For this reason, we don't try to
## download newsgroups descriptions when getting new newsgroups. This is
## achieved by putting "nodesc = 1" somewhere behind the server
## line.
# server = broken.upstream.server
# nodesc = 1

## Here we have another news server which has a very slow connection. For
## that reason, we wait a full minute before we give up trying to connect.
## The default is 10 seconds.
# server = really.slow.snail
# timeout = 60

## Non-standard expire times (glob(7) wildcard constructs possible)


# groupexpire comp.os.linux.* = 5 # groups too big to hold articles 20 days
# groupexpire any.local.newsgroup = 100 # very interesting, hold articles longer
#groupexpire es.comp.os.linux.* = 20

## Never fetch more than this many articles from one group in one run.
## Be careful with this; setting it much below 1000 is probably a bad
## idea.
maxfetch = 100
## Fetch only a few articles when we subscribe a new newsgroup. The
## default is to fetch all articles.
initialfetch = 30

## If you want to use leafnode like an offline newsreader (e.g. Forte


## Agent) you can download headers and bodies separately if you set
## delaybody to 1. In this case, fetch will only download the headers
## and only when you select an article, it will download the body.
## This can save a huge amount of bandwith if only few articles are really
## read from groups with lots of postings.
## This feature works not very well with Netscape, though (which is not
## a fault of Leafnode).
delaybody = 0

## To avoid spam, you can select the maximum number of crosspostings


## that are allowed in incoming postings. Setting this below 5 is
## probably a bad idea. The default is unlimited crossposting.
maxcrosspost = 2

## If you suffer from repeatedly receiving old postings (this happens


## sometimes when an upstream server goes into hiccup mode) you can
## refuse to receive them with the parameter "maxage" which tells the
## maximum allowed age of an article in days. The default maxage is 10
## days.
maxage = 10

## maxlines will make fetch reject postings that are longer than a certain
## amount of lines.
# maxlines = 100

## minlines will make fetch reject postings that are shorter than a certain
## amount of lines.
# minlines = 2

## maxbytes will make fetch reject postings that are larger


maxbytes = 1048576
#maxbytes = 5120

## timeout_short determines how many days fetch gets a newsgroup which


## has been accidentally opened. The default is two days.
# timeout_short = 1

## timeout_long determines how many days fetch will wait before not getting
## an unread newsgroup any more. The default is seven days.
# timeout_long = 6

## timeout_active determines how many days fetch will wait before re-reading
## the whole active file. The default is 90 days.
# timeout_active = 365
## If you want to have your newsreader score/kill on Xref: lines, you might
## want to uncomment this.
# create_all_links = 1

## If you want to filter out certain regular expressions in the header,


## create a "filterfile" (how this is done is explained in the README)
## and set
filterfile = /etc/leafnode/filters

## If your newsreader does not supply a Message-ID for your postings


## Leafnode will supply one, using the hostname of the machine it is
## running on. If this hostname is not suitable, this parameter can be
## used to override it. Do not use a fantasy name, it may interfere with
## the propagation of your messages. Most modern newsreaders do provide
## a Message-ID.
# hostname = host.domain.country

Leafnode consta de una serie de programas que tienen como objetivo el control del servidor:
fetchnews
con este comando se prepara a Leafnode para albergar los grupos de noticias y para bajar
las noticias cada vez que queramos. Presenta una serie de modificadores que nos ayudan
a controlar su funcionamiento. Los modificadores más destacados son v, f, x, l, n y P. Con
el modificador v hacemos que pase a modo de depuración, de esta manera irá mostrando
en pantalla los mensajes que va generando, con lo que podemos ver el estado actual o los
mensajes de error si los hubiera. La profundidad de depuración viene marcada por la cantidad
de v que se pongan. El modificador f se utiliza para volver a leer las listas de grupos desde
los servidores, puede tardar tiempo y se utiliza cuando Leanode comienza a dar problemas
al servir las noticias. El modificador x # nos permite bajar # noticias extras desde el exterior.
El modificador l se usa para que Leafnode no utilice los servidores suplementarios. Con el
modificador n se puede comunicar a Leafnode que no elimine los grupos que no se leen, esto
es, cuando nos inscribimos en un grupo que nos interesa pero que no leemos desde hace
tiempo. El modificador P se utiliza para mandar las noticias que hayamos recibido localmente a
los servidores externos pero no bajar ninguna noticia nueva.
texpire
este es el programa que retira del servidor todas aquellas noticias que superen el tiempo dado
en la directiva expire o groupexpire. Sus modificadores son dos, v y f. El modificador v es el
mismo que en el comando anterior. El modificador f se utiliza para forzar la caducidad de las
noticias independientemente del tiempo de acceso.
applyfilter
con este programa se busca dentro de las noticias almacenadas en el directorio news todas
aquellas que coincidan con los patrones dados dentro del fichero filters para ser retiradas. Su
sintaxis es applyfilter grupo de noticias, ha de notarse que se debe dar el nombre completo
del grupo, por ejemplo, para el grupo misc de la jerarquía ecol ha de ponerse applyfilter
es.comp.os.linux.misc.
checkgroups
se utiliza para actualizar las descripciones de los grupos.
newsq
con este vemos las noticias que hay en la cola listas para ser enviadas al servidor en la
próxima conexión.
Figura 46. Viendo las noticias en knode

126. Introducción a Leafnode


El servidor Leafnode se utiliza para redes pequeñas que necesiten un servidor de noticias
offline, esto es, leer las noticias desconectados de la red, o cuando se tiene una conexión lenta.
Leafnode se utiliza para replicar grupos de noticias que obtiene desde otro servidor ya que, por
el momento, no es capaz de generar grupos locales, aunque parece que en el futuro soportará
esta característica.
Su mayor ventaja está en su pequeño tamaño y su fácil instalación. Por contra, sólo se puede
utilizar para pocos usuarios puesto que no es escalable. Si se necesita dar servicio de noticias
a una gran cantidad de usuarios hay mejores alternativas, como INN.

127. Los filtros en Leafnode


Aquí es dónde apunta la directiva filterfile del archivo de configuración. En este archivo se
colocan todas aquellas reglas destinadas al filtrado de mensajes que no queramos recibir.
Dentro de Usenet hay una práctica que se va extendiendo y que es perjudicial, el denominado
Spam, con el filtrado de las direcciones desde las que se remiten los mensajes no solicitados
se consigue que los mensajes que leamos se ajusten a la materia del grupo de noticias al que
estemos apuntados. Otra manera de controlar estos mensajes es con la directiva maxcrosspost
del archivo de configuración que evita leer mensajes que vayan a más de una determinada
cantidad de grupos a la vez, el denominado crossposting, y que es muy utilizado por los
spammers.
Las expresiones para el fichero de filtros siguen la misma estructura que las expresiones
regulares de Perl.
Con la siguiente línea filtramos cualquier noticia que tenga como remitente de correo
\comando{todosexo@sex.com}:
^(i?:from):.*[< ]todosexo@sexo.com(>|$| )

Ejemplo de filtro para el apartado Asunto (Subject en inglés):


^Subject.*\[Cursos-linux\]*.

Con esta regla filtramos todas las noticias que tengan en el asunto [Cursos-linux].
De esta forma podremos evitar bajar noticias que contengan unas determinadas palabras
o unos remitentes molestos. En http://www.escomposlinux.org/spam/ se pueden encontrar
consejos para filtrar el spam y filtros constantemente actualizados que filtran los spammers
dentro de la jerarquía es.comp.os.linux.*.

128. Obtención e instalación de Leafnode


Se puede obtener Leafnode desde la página oficial del programa http://www.leafnode.org.
Si se quieren bajar paquetes en formato rpm se puede acudir a http://rpmfind.net para el
formato Debian se deberá acudir a http://www.debian.org. Aunque normalmente el paquete de
Leafnode viene con la mayoría de las distribuciones.
Figura 47. Página de Leafnode
Su instalación es sencilla:
Paquetes RPM
desde la línea de comandos ejecutaremos la orden rpm -i leafnode-1.9.17-1.rpm, teniendo en
cuenta que la versión puede ser distinta, en este caso, 1.9.17-1.
Paquetes Deb
desde la línea de comandos ejecutamos apt-get install leafnode y con esto nos aseguramos
que se instalan todas las dependencias necesarias.
Código fuente
procederemos a desempaquetar el archivo con las fuentes con la orden tar xvzf archivo y
buscaremos el fichero README para ver la información de compilación.
Una vez realizada la instalación, habrá que verificar la existencia del usuario news. Dentro del
fichero /etc/inetd.conf debe existir:
nntp stream tcp nowait news /usr/sbin/tcpd /usr/local/sbin/leafnode
Estas comprobaciones no son necesarias porque el sistema de instalación las trae
automatizadas, pero servirán para descartar problemas si el servicio no funciona
correctamente.
Si estamos utilizando xinet en lugar de inet, deberemos crear un fichero llamado leafnode
dentro del directorio /etc/xinetd.d/, con el siguiente contenido:
service nntp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/leafnode
log_on_success += USERID
log_on_failure += USERID }

El siguiente paso lógico es editar el fichero de configuración con el objeto de adpatar el


servicio a nustras necesidades e indicarle a Leafnode una información vital para su correcto
funcionamiento.
El último paso sería automatizar los comandos para bajar los grupos y las noticias. Para esto
se puede poner el fetchnews dentro del script ip-up para bajarlos cuando hagamos la conexión
a Internet o bien añadiendo una línea dentro del cron. Aunque siempre nos queda el método
manual, esto es, ejecutarlo desde la línea de comandos.
Reiniciamos el demonio inetd o xinetd:
kill -HUP `cat /var/run/inetd.pid`
kill -HUP `cat /var/run/xinetd.pid`

o bien:
/etc/init.d/xinetd reload

En el fichero /etc/hosts.deny pondremos:


leafnode: ALL EXCEPT LOCAL

Ejecutamos fetchnews después de haber hecho los cambios en el fichero de configuración,


con lo que se bajarán la lista de grupos disponibles. Luego nos conectaremos desde nuestro
cliente favorito, teniendo en cuenta que el servidor será local y no se necesitará usuario ni
contraseña.
Ejecutamos fetchnews por segunda vez y comenzarán a bajar las noticias de los grupos
suscritos hasta un máximo que ha sido definido en el fichero de configuración.

129. Códigos de salida


Una vez que termina cada programa, puede brindar al entorno un Código de salida para que
otros programas o el intérprete sepan como concluyó la aplicación.
Tomemos un ejemplo de la vida de un administrador. Es común que la administración sea
remota, por lo que vamos a considerar que en nuestra tarea no tenemos conocimiento de lo
que está pasando en una máquina alejada en la que se está ejecutando arreglar-base-de-
datos.
El script arreglar-base-de-datos es un script que corrige posibles errores en una hipotética
gran base de datos. Y el resultado de esa corrección interesa, especialmente, si no se pudo
arreglar.
Vamos a suponer que hay 2 posibles alternativas:
Salida exitosa
La base de datos no tuvo ningún error. En este caso sólo hay que agregar al archivo /var/log/
BD.registro una línea con la fecha de comprobación y el responsable en ese momento.
Se detectaron errores pero no se repararon
Esta situación es peor. Hay que escribir información detallada en /var/log/BD.registro y además
enviar correo-e [58] a una lista de encargados y directivos de la empresa.
Para diferenciar cada caso se asigna un código de salida a cada uno. Luego de ejecutar
arreglar-base-de-datos se verifica en base al código, los comandos a ejecutar.
El algoritmo sería algo similar a:
if arreglar-base-de-datos
then
date >> /var/log/BD.registro
echo $RESPONSABLE_BD >> /var/log/BD.registro
else
informar-errores.sh >> /var/log/BD.registro
enviar-mail "Errores en BD" lista-encargados lista-directivos
fi

¿Y dónde están los códigos de salida? Bueno, el comando interno [59] if analiza el código de
salida, y si es 0 (cero) ejecuta la lista de comandos después del then, en caso contrario (y si
existe) la lista de comandos después del else hasta encontrar un fi.
Por lo tanto el script arreglar-base-de-datos tiene que devolver 0 en caso de éxito. Éste es el
comportamiento normal de la mayoría de los comandos en Linux y otros Unix, y un valor para
varios errores.
Las páginas man suelen tener una sección llamada Exit Status que contiene los códigos que
devuelve el programa.

[58] Por ridículo que parezca es la forma correcta de mencionar a los emails
[59] Built-in command en inglés.

130. Archivos de configuración del intérprete de


comandos bash
La configuración de un intérprete de comandos consiste mayormente en establecer las
variables de entorno, los aliases de comandos y el formato del prompt que se necesiten.
Dependiendo del tipo de uso que se le dará al intérprete de comandos, habrá diferentes
necesidades de configuración de estos valores.
Existen dos modalidades de uso del intérprete de comandos bash:
interactiva
es la común
no interactiva
es propicia para scripts
Por esto, el intérprete de comandos tiene unos cuantos archivos que se ejecutan al inicio.
Los archivos pueden categorizarse en:
no-login
cada vez que se ejecuta el bash (incluso desde el interprete de comandos), se leen estos
archivos. Es el caso más común, cada vez que se abre una konsole, xterm, gnome-terminal
o equivalente, se ejecutan.
login
sólo cuando el usuario comienza la sesión se ejecuta. En tiempos de terminales y consolas era
fácil identificar cuando el usuario se logueaba. Hoy en día es muy popular el login gráfico, el
cual no carga inmediatamente un bash como antes.

131. Entrada, salida y error estándar


Haremos una breve introducción a los conceptos que definen los componentes de un programa
en línea de comandos. Tal vez muchos piensen que se necesitan herramientas de funciones
complejas para administrar un sistema GNU/Linux. Como contracara nos encontramos con 20
o más comandos de funciones básicas y relativamente simples. Vamos a detallar un ejemplo
para ver cual a proximación es más útil.
Un ejemplo de la vida cotidiana para entender la filosofía de las herramientas en línea de
comandos se puede encontrar en las paginas info de "Text utilities" - "Opening the software
toolbox" - "Toolbox introduction". Una traducción no oficial sería algo como:
«Mucha gente lleva una navaja de la Armada Suiza en los bolsillos de sus pantalones (o
cartera). Una navaja de la Armada Suiza es una herramienta útil de tener: tiene varias hojas
de cuchillo, un destornillador, pinzas, palillo para dientes, sacacorchos y probablemente unas
cuantas cosas más. Para trabajos pequeños misceláneos de todos los días donde se necesita
una herramienta de propósito general, es la herramienta indicada. Por otro lado, un carpintero
experimentado no construye una casa utilizando una navaja de la Armada Suiza. En cambio,
posee una caja de herramientas llena de herramientas especializadas -una sierra, un martillo,
un destornillador, etc. Y conoce exactamente dónde y cuando utilizar cada herramienta; no va a
martillar clavos con el mango del destornillador.»
La filosofía de Unix (en línea de comandos) cree que un único programa especializado para
hacer todas las tareas no es bueno, al menos no para usuarios avanzados o administradores.
Los usuarios finales sin conocimientos en áreas informáticas pueden preferir tener un sólo
programa para todo, pero este único programa tiene dificultades para el mantenimiento y
modificación. Se vuelve monstruoso y complicado.
En reemplazo se prefiere la navaja de la Armada Suiza para tareas cotidianas, o sea, un
conjunto de programas pequeños de gran simplicidad que en conjunto se potencian.
Para que los programas trabajen en conjunto se utiliza el concepto de flujo como una corriente
de bytes.
Al igual que con las tuberías reales (digamos caños, los grifos o canillas, duchas, etc.) de una
casa, se conectan unos a otros donde cada uno tiene una entrada, una función y una salida. El
concepto de «tuberías» lo veremos en la sección Tuberías (pipes) por ahora vamos a distinguir
los otros tres aspectos con un ejemplo.
El comando sort puede ordenar por orden alfabético. Ésta sería la función del programa. Pero
¿qué ordena? bueno aquí es donde interviene la entrada. Que sin utilizar la magia de las
tuberías, será el teclado la entrada.
Haremos una prueba:
$ sort
El
comando
sort
puede
ordenar
por
orden
alfabético

... luego presionamos Ctrl-D que significa "fin de archivo" en la mayoría de los casos,
apareciendo en pantalla:
alfabético
comando
El
orden
ordenar
por
puede
sort

Con este ejemplo nos damos cuenta que la salida es la pantalla.


A estas alturas uno podría preguntarse "Pero no es la única entrada que posee mi programa";
es verdad que un programa puede tener muchas entradas y muchas salidas. Por ejemplo
cuando lee un archivo, éste es una entrada más. Pero los conceptos que venimos estudiando
son entradas y salidas especiales, llamadas entrada estándar y salida estándar.
También existe un tipo de salida adicional que es el error estándar. Por este flujo se canalizan
todos los mensajes de error o avisos del programa. Facilitando varias tareas. Una muy común
es reunir todos los errores en un archivo separado en caso de problemas, para su posterior
análisis.
En nuestro ejemplo si sort intentaba abrir un archivo y no existía, es preferible que escriba:
Fichero o directorio no existe

Antes de que lo canalice como salida estándar y diga


directorio
existe
Fichero
no
o

Teniendo claro los conceptos vamos a ver cómo utilizamos las tuberías para «unir» los
programas entre sí.

132. Programación en shell


Una de las grandes ventajas que ofrece un intérprete de comandos es la programación en un
lenguaje rústico pero poderoso para automatizar infinidad de tareas.
Como todo lenguaje, posee reglas sintácticas que establecen la forma de escribir las
sentencias a ejecutar.
Para quienes poseen conocimiento de otros lenguajes de programación, el signo «punto y
coma» (;) es utilizado frecuentemente como separador o terminador de sentencias. En bash no
es necesario y puede ser reemplazado por Enter. Es común encontrar una línea de este tipo:
# comando1 ; comando2
(ejecución de comando1 seguido de comando2)

es equivalente a:
# comando1
(ejecución de comando1)
# comando2
(ejecución de comando2)

En el primer ejemplo con una sola línea se ejecutan ambos comandos. Es muy buen ejemplo
cuando se quiere encadenar tareas que consumen mucho tiempo y tienen que ser seguidas.
Hay que tener presente que no se ejecutan en paralelo. Cuando termina de ejecutarse
comando1 empieza a ejecutarse comando2.

133. Práctica
1. Hacer un script que compile un programa [60] y SÓLO en el caso de que la compilación
sea exitosa, realice el enlazado (o linkado) del mismo [61] .
2. Suponiendo que el comando cant-mb-libres retorna la cantidad de MB libres en el
disco, hacer un script que compruebe la capacidad disponible, y si es mayor a 640MB,
copia el directorio /usr/local al directorio /backup. En caso contrario mandar un correo a
<administrador@lejos.ch>, también utilizando un hipotético comando: enviar-mail.
3. En base al listado del directorio /backup, enviar a la impresora (o agregar al archivo /
dev/lp0 que es equivalente) los primeros 30 elementos. Si existía mayor cantidad de
archivos escribir una línea final que diga "y más...". Este ejercicio realizarlo con while o
for en lugar de tuberías.

[60] Se puede realizar con gcc -c main.c


[61] Aquí podemos realizar gcc main.o -o main

134. Redirección
Si bien nuestro ejemplo es ilustrativo, es bueno ver los resultados en pantalla. En repetidas
ocasiones en la vida de un sistema es mejor tener todo en archivos, ya sea para guardar algún
historial o para automatizar ciertas funciones dentro de scripts.
Para almacenar o sacar información de archivos y vincularlas con entradas o salidas
estándares se utilizan Redirecciones.
La redirección se expresa con los símbolos «Mayor» (>) y «Menor» (<). Se pueden utilizar en
forma simple o doble.
Ejemplo 30. Uso de la redirección
Utilizando el comando cat se puede hacer una copia de arch1.txt a arch2.txt utilizando
redirección.
$ cat arch1.txt > arch2.txt

Se puede redireccionar una archivo para visualizarlo con less


$ less < arch1.txt

135. Escritura
Para escribir un archivo se utiliza (>). Hay que tener mucho cuidado de no borrar un archivo
sobreescribiéndolo. Cuando se utilizan redirecciones, debido a su utilidad en los scripts, no
se realizan confirmaciones. Si el archivo a escribir existe y posee información valiosa, aplicar
>archivo-importante lo sobreescribe con el contenido del flujo.
En cambio el operador (>>) realiza un agregado [62] de los datos en el flujo.
No hay nada mejor que un ejemplo clarificador:
$ escribe-en-salida-estandar > archivo.txt

El (falso) comando escribe-en-salida-estándar justamente hace eso, escribe unas cuantas


cosas en salida estándar. Puede ser un ls, un cal o cualquier comando antes visto, así como
también una combinación de comandos por tuberías.
En este punto, el contenido de archivo.txt es lo mismo que saldría en pantalla. Si ejecutamos
otro comando redireccionado a archivo.txt, éste pierde su contenido y el resultado de la
operación pasa a estar en el archivo.
Cuando se necesita tener una lista de acontecimientos, no se quiere que un acontecimiento
nuevo borre a todos los anteriores. Para lograr esto agregamos en vez de sobreescribir.
$ echo Este es el acontecimiento Nro. 1 > bitacora.log
$ echo Este es el segundo acontecimiento >> bitacora.log

Va a escribir dos líneas en el archivo bitacora.log sin eliminar nada.


Ejemplo Si queremos combinar el ejemplo de las tuberías en la sección Tuberías (pipes) con lo
aprendido recientemente podríamos escribir:
$ cat archivo.txt | sort | sacar-repetidas | diccionario >> glosario.txt

136. Lectura
Para la lectura es el símbolo menor (<) y se utiliza de la siguiente manera:
$ comando-que-acepta-stdin < archivo-de-entrada.txt

Preferimos emplear el comando cat para estas operaciones, pues brinda una mayor legibilidad.

137. Práctica
1. Con los comandos aprendidos, mostrar de un directorio de varios archivos los primeros
10.
2. Modificar el ejercicio anterior para mostrar los 10 archivos de mayor tamaño, ordenados
alfabéticamente.
3. En un directorio con varios archivos, mostrar sólo los que tienen una determinada
terminación como por ejemplo .txt utilizando grep y find.
4. Utilizando find o una composición de varios comandos por tuberías, mostrar sólo
los enlaces simbólicos existentes, en caso de no poseer, crear varios en varios
subdirectorios con el comando ln.

138. Tuberías (pipes)


Podríamos representar cada programa como una «caja negra» que tiene una entrada y una
salida que se pueden unir entre ellos.
El ejemplo que utilizamos se encuentra esquematizado en la figura Figura 48. Esquema
de entrada y salida estándar del ejemplo siendo la entrada estándar el teclado y la salida
estándar «el terminal» o por simplicidad la pantalla.
Figura 48. Esquema de entrada y salida estándar del ejemplo
Vamos a suponer un caso ficticio donde necesitamos todas las definiciones de cada palabra en
un texto. Primero las ordenamos alfabéticamente, luego utilizamos un comando ficticio llamado
diccionario que toma palabras de la entrada estándar y las reescribe junto a su significado en
la salida estándar.
Su esquema se ve en la figura Figura 49. Esquema de entrada y salida estándar del ejemplo
2. En este caso nombramos por separado las entradas y salidas estándares de los dos
programas, pero la «unión» entre ambos programas se puede considerar como un sólo «tubo».
Figura 49. Esquema de entrada y salida estándar del ejemplo 2

En ese tubo, el flujo está en un estado intermedio, donde está ordenado, pero no tiene las
definiciones de diccionario.
En la línea de comandos esto se escribe de la siguiente manera:
$ sort | dicccionario

Donde el caracter | representa la conexión entre la salida estándar de un programa y la entrada


estándar de otro.
Con este fuerte y simple concepto se pueden concatenar gran cantidad de programas como si
fuera una línea de producción en serie para generar resultados complejos.
Para mejorar nuestro ejemplo sacaremos las palabras repetidas, antes de mostrarlas con
definiciones. Suponiendo que exista un programa llamado sacar-repetidas, la línea de
comando sería:
$ sort | sacar-repetidas | diccionario

Simple, utilizando herramientas sencillas logramos algo un poco más complicado. El


inconveniente que tenemos en este ejemplo es que hay que escribir aquello a procesar.
Normalmente queremos utilizar archivos como entrada de nuestros datos. Es necesario un
comando que envíe a salida estándar un archivo, así se procesa como la entrada estándar
del sort y continúa el proceso normalmente. Este comando es cat. La sintaxis es simple cat
nombre-de-archivo.
Quedando nuestro ejemplo:
$ cat archivo.txt | sort | sacar-repetidas | diccionario
... crea un glosario de las palabras que se encuentren en archivo.txt
La combinación de comandos es incalculable y brinda posibilidades enormes. Veamos algunos
ejemplos.
Ejemplo 31. Uso de Tuberías
En el caso que se quieran buscar procesos con el string http:
$ ps ax | grep http
3343 ? S 0:00 httpd -DPERLPROXIED -DHAV
3344 ? S 0:00 httpd -DPERLPROXIED -DHAV
3975 ? S 0:00 httpd -DPERLPROXIED -DHAV
12342 pts/6 S 0:00 grep http

Si queremos eliminar la ultima linea podemos volver a usar grep con la opcion -v
$ ps ax | grep http | grep -v grep
3343 ? S 0:00 httpd -DPERLPROXIED -DHAV
3344 ? S 0:00 httpd -DPERLPROXIED -DHAV
3975 ? S 0:00 httpd -DPERLPROXIED -DHAV

Se pueden filtrar las líneas que contengan la palabra linux del archivo arch1.txt y luego
mostrarlas en un paginador como less
$ cat arch1.txt | grep linux | less

Podemos enviar los resultados por correo a un amigo,


$ cat arch1.txt | grep linux | mail amigo@email.com

139. Variables de entorno


Las variables de entorno tienen la funcionalidad de configurar ciertos aspectos del entorno del
intérprete de comandos y otros programas, que pueden cambiar con el tiempo. Estas variables
se establecen cuando se abre una sesión, y la mayoría son configuradas por los scripts de
inicio del intérprete de comandos [63] .
Aunque se pueden establecer nombres de variables con minúsculas, por costumbre se utilizan
nombres en mayúsculas, el comando para establecer las variables de entorno se llama
export[64], y se utiliza de la siguiente forma:
export VARIABLE=valor

Para ver el contenido de una variable, se puede usar el comando echo de la siguiente manera:
echo $VARIABLE
Para eliminar una variable, se utiliza el comando interno del intérprete bash, llamado unset
pasándole como parámetro el nombre de la variable.
Es importante notar que una vez que se sale de una sesión, las variables establecidas se
pierden. Es por eso que si se necesita disponer de variables específicas cada vez que se abra
una sesión en GNU/Linux, es imprescindible agregar dichas configuraciones a los archivos de
inicio del intérprete de comandos.
Otro uso común de estas variables es en los scripts, programas hechos en el lenguaje del
intérprete; las variables de entorno son de gran ayuda para establecer configuraciones
fácilmente cambiables en dichos programas.

[63] En el caso del intérprete bash, estos scripts incluyen el .bashrc, .bash_profile, y otros.
[64] En bash.

139. Variables de entorno


Las variables de entorno tienen la funcionalidad de configurar ciertos aspectos del entorno del
intérprete de comandos y otros programas, que pueden cambiar con el tiempo. Estas variables
se establecen cuando se abre una sesión, y la mayoría son configuradas por los scripts de
inicio del intérprete de comandos [63] .
Aunque se pueden establecer nombres de variables con minúsculas, por costumbre se utilizan
nombres en mayúsculas, el comando para establecer las variables de entorno se llama
export[64], y se utiliza de la siguiente forma:
export VARIABLE=valor

Para ver el contenido de una variable, se puede usar el comando echo de la siguiente manera:
echo $VARIABLE

Para eliminar una variable, se utiliza el comando interno del intérprete bash, llamado unset
pasándole como parámetro el nombre de la variable.
Es importante notar que una vez que se sale de una sesión, las variables establecidas se
pierden. Es por eso que si se necesita disponer de variables específicas cada vez que se abra
una sesión en GNU/Linux, es imprescindible agregar dichas configuraciones a los archivos de
inicio del intérprete de comandos.
Otro uso común de estas variables es en los scripts, programas hechos en el lenguaje del
intérprete; las variables de entorno son de gran ayuda para establecer configuraciones
fácilmente cambiables en dichos programas.

[63] En el caso del intérprete bash, estos scripts incluyen el .bashrc, .bash_profile, y otros.
[64] En bash.
140. .bash_profile
Este archivo es del tipo login, por lo que se ejecuta una sola vez en una sesión.
Todos los archivos son scripts por lo que en la sección Programación en shell se ven ejemplos
de programación en bash. Permiten personalizar el bash enormemente u obligando a los
usuario a ejecutar ciertas tareas administrativas en cuanto ingresan al sistema o bien ejecutan
el interprete de comandos.

141. .bashrc
Este archivo es del tipo no-login. Primero se carga el archivo global al sistema /etc/bashrc y
luego se pasa al archivo .bashrc en el directorio personal del usuario.
Es un archivo que probablemente llame a otros como por ejemplo .profile y establezca las
variable se entorno.

142. El comando for


Para quienes programan en otros lenguajes el comando for se comporta distinto a la clásica
sentencia for. Este comando asigna de una lista de elementos, el valor a una variable y repite
una lista de comandos con esa variable.
Si bien la explicación puede ser un poco confusa, el concepto es bastante fácil de entender al
ver un ejemplo.
for cantidad in dos tres cuatro cinco seis siete
do
echo ${cantidad} elefantes se balancaban sobre la tela de una araña
echo como veian que resistía fueron a llamar a otro elefante...
done

dos (...) siete


son los elementos.
cantidad
es la variable que iteración a iteración va tomando los valores de la lista de elementos
do; echo (...);done
es el bloque de comandos a iterar.
Esta es la forma más simple de utilizar el comando for, pero con pocas variaciones se puede
realizar cosas muy útiles, por ejemplo:
for archivo in `ls`
do
touch ${archivo}
done
La lista de elementos se obtiene del resultado del comando ls. Es decir, primero se ejecuta
ls, el cual dará el listado de todos los archivos de un directorio, y a todos esos archivos se les
aplica un touch [65].

[65] El comando touch cambia la fecha de modificación de un archivo a la fecha actual

143. El comando if
Ya vimos un ejemplo sencillo utilizando if, que a su vez puede ser de gran utilidad. Ya
hablamos de la equivalencia entre el «;» y el «Enter» pero hay veces que pasa desapercibido el
detalle de que if y then deben estar en diferentes líneas por lo que:
# if COMANDO then COMANDO fi

Este último ejemplo va a dar error de sintaxis. La forma correcta de expresar es:
# if COMANDO; then COMANDO ; fi

o bien:
# if COMANDO
> then COMANDO
> fi

No hace falta crear un archivo que contenga las instrucciones, en cambio, esta programación
se puede ir realizando «en línea». Es decir, introducirla por línea de comandos en una terminal.
Muchas veces es necesario hacer comparaciones o comprobaciones para tomar decisiones.
Por ejemplo "Si el usuario no posee el archivo ~/.configuracion con la configuración por
defecto" o bien "Si el número de archivos es mayor a 20 escribir no se puede transferir".
Existe el comando test para hacer estas evaluaciones y en base al resultado, código de error
de test será 0 u otro número. Por ejemplo, para saber si un archivo .configuracion existe en el
home del usuario el comando puede ser:
# test -e $HOME/.configuracion

para facilitar la notación dentro del comando if se hace un enlace simbólico [66] a un comando
llamado [. Parece extraño llamar a un comando con un corchete abierto pero veamos un
ejemplo:
if test -e $HOME/.configuracion

Puede traducirse a:
if [ -e $HOME/.configuracion ]
donde el ] (corchete cerrado) final no tiene importancia y la programación queda menos
engorrosa.
Podríamos utilizar lo aprendido para crear un script que "Si el usuario no posee el archivo /
HOME/.configuracion con la configuracion por defecto entonces crearlo." en unas pocas líneas:
if [ -e $HOME/.configuracion ]
then
crear-configuracion >> $HOME/.configuracion
fi

El comando test permite la composición de condiciones con AND y OR lógicos con los
modificadores -a y -o respectivamente y el modificador NOT con !. Se podría agregar a la linea
del if anterior la condición "y además no posee el archivo SinConfiguracion" de la siguiente
forma:
if [ -e $HOME/.configuracion -a ! -e SinConfiguracion]

Ejemplos mucho más interesantes de analizar se pueden encontrar en el directorio /etc/rc.d/


init.d [67] .

[66] symbolic link en inglés, utilizando el comando ln -s


[67] Este directorio puede variar según las distribuciones, también puede ser /etc/init.d

144. El comando while


El comando test se utiliza cuando se itera con el comando while. En este comando es muy útil
la comparación de valores.
test puede comparar números al igual que cadenas de caracteres.
while [ ${CANT_USUARIOS} -le 1 ]
do
echo Todavia no hay suficientes jugadores
sleep 1
done
echo Ahora hay más de 1 usuario

Este ejemplo comprueba si la variable CANT_USUARIOS es menor o igual (-le significa less
or equal en inglés) a uno; de ser así, repite cada 1 segundo, «Todavía no hay suficientes
jugadores». En cuanto la cantidad de usuarios sea mayor a 1 sale del ciclo.
También es posible hacer un ciclo infinito utilizando test (o bien llamado [) para que devuelva
siempre verdadero (con [ 1 ]). Se recomienda usar el comando true que devuelve un código de
salida exitoso (cero) y el while no termina a menos que se le envíe una señal con Ctrl-C.
while true
do
clear
mailq
sleep 2
done

Este simple algoritmo muestra el contenido de la «bandeja de salida» de sendmail cada 2


segundos. Vemos que con pocos conocimientos en bash se pueden lograr infinidad de cosas.

354. Arranque
En Windows el programa StarOffice se arranca desde el menú Inicio, carpeta Programas,
carpeta StarOffice 5.2, opción StarOffice 5.2. En Windows y en GNU/Linux se pueden añadir
accesos directos en el escritorio o en otros puntos del menú Inicio, el menú GNOME o el menú
del gestor de ventanas que se esté utilizando.

355. Las barras de símbolos


Consisten en una serie de botones que activan funciones del programa. Normalmente son
funciones que ya están disponibles en alguno de los menús. Resultan muy cómodos para tener
a mano aquello que hace falta a menudo. No es necesario recordar exactamente el cometido
de cada botón, ya que al pasar el ratón sobre cada uno, aparece un pequeño rectángulo
amarillo (llamado "globo") con el nombre de la función asociada.

356. Barras más usuales


Hay varias barras disponibles, pero las más usuales son:
● Barra de funciones. Permite acceder a cualquier carpeta, archivo o dirección de
Internet simplemente escribiendo su nombre, así como avanzar y retroceder entre los
elementos ya vistos. También incorpora las funciones generales más habituales.
● Barra de objetos. Según el tipo de documento, esta barra irá cambiando.
● Barra de herramientas. Aparece en vertical en las ventanas de documento.

357. Configuración
Las barras de símbolos se hacen aparecer o no eligiéndolas en el menú Ver, submenú Barra
de Símbolos. Se puede cambiar su altura arrastrando el borde inferior. Tienen un menú de
contexto desde el que se pueden personalizar fácilmente, añadiendo o quitando botones.
Cuando no caben en la pantalla todos los botones de la barra, aparecen en el extremo derecho
dos flechitas que permiten ir viendo todos los botones. Pueden estar fijas en un extremo de
la ventana o bien flotantes en su propia ventana (que se podrá cambiar de forma y posición);
se pasa de un modo a otro haciendo una doble pulsación sobre ellas, en algún punto libre,
mientras se pulsa la tecla Ctrl.

358. Las ventanas


Cuando por fin arranca StarOffice, ocupa su propia ventana, que es una ventana de aplicación.
Dentro de esta ventana se situarán las ventanas de documento, una para cada documento que
se desee visualizar, además de una ventana para el escritorio propio de StarOffice (en ingles,
desktop). La imagen Figura 50. Desktop de StarOffice muestra una pantalla típica en la que,
además de la ventana principal, se ve el desktop.
Figura 50. Desktop de StarOffice

359. La ventana del desktop


Según cómo se haya instalado StarOffice, en el desktop aparecerán sólo los iconos del
programa, como en la ilustración, o bien aparecerán todos los iconos del escritorio de MS
Windows.

360. La ventana principal


Recorriendo desde arriba hacia abajo la ventana principal, vemos:
● La barra de título.
● El menú principal.
● Dos barras de símbolos.
● La zona de trabajo, ocupada completamente por el desktop, pero en la que más
adelante irán apareciendo las ventanas de los documentos.
● La barra de tareas propia de StarOffice, con su botón Inicio a la izquierda y reloj a
la derecha. Esta barra de tareas repite la funcionalidad de la de MS Windows, pero
hay que recordar que en otros sistemas operativos no existe, de ahí que StarOffice
incorpore la suya propia.

361. Modos de Visualización


StarOffice puede aparecer en pantalla de varios modos distintos:
● Si en el menú Ver se marca la opción Escritorio Integrado, el programa ocupará toda la
pantalla y desaparecerán el marco de su ventana, la barra de título, así como la barra
de tareas de Windows.
● Si en el menú Ver se marca la opción Pantalla Completa, desaparecerán casi todos los
elementos de la ventana principal, y sólo se verá la ventana del documento. Quedarán
la barra de tareas de StarOffice y un icono Figura 51. Pantalla Completa que permite
volver al modo anterior. En esta situación no se puede acceder al menú principal con el
ratón, pero sí se pueden usar los atajos de teclado y el menú de contexto.
● Figura 51. Pantalla Completa

362. El Beamer
Es un visor de archivos. Cuando en el explorador se señala una carpeta, en el Beamer se ve
la relación de sus archivos; cuando en el Explorador se señala un archivo de la Galería, en el
Beamer se ve su aspecto.

364. Otros Elementos


Además de los elementos ya vistos y las ventanas de los documentos, en StarOffice pueden
estar visibles otros dos elementos, el Explorador y el Beamer. Ambos se activan y desactivan
desde el menú Ver. En la Figura 52. Otros elementos de StarOffice se observa un aspecto
de StarOffice con el Explorador a la izquierda, el Beamer a la derecha arriba y el desktop a la
derecha abajo.
Figura 52. Otros elementos de StarOffice
365. Aviso a la salida
Si se sale de StarOffice sin guardar los cambios en algún documento, aparece un cuadro de
diálogo como el de la Figura 53. Aviso al salir, advirtiendo del hecho. Si se elige Guardar, se
guardan los cambios y luego se sale. Si se pulsa Rechazar, no se guardan pero sí se sale; y si
se pulsa Cancelar, ni se guardan ni se sale.
Figura 53. Aviso al salir

366. Salida de StarOffice


Para concluir la ejecución de este programa basta elegir en el menú Archivo la opción
Terminar.

367. Instalación
Para poder utilizar el programa es necesario instalarlo en el disco duro. El proceso de
instalación consiste en la creación de un nuevo directorio, la grabación de todos los ficheros
necesarios y el ajuste de ciertos datos internos. De todo ello se encarga el programa de
instalación, de modo que el usuario apenas tiene que responder unas preguntas.
Existen varios modos de instalar StarOffice en GNU/Linux. Aquí se va a explicar la que parece
más razonable para la mayoría de las situaciones:
● El usuario root realiza la instalación básica general de los archivos del programa.
● Cada usuario que desee utilizar el programa hace una mínima instalación en la que
copia unos pocos archivos a su directorio home.

368. Instalación de root


La instalación se debe comenzar desde un terminal de X-Window, aunque pronto cambia a
modo gráfico. En la Figura 54. Terminal de X-Window se muestra un ejemplo de cómo dar las
órdenes.
Figura 54. Terminal de X-Window

1. Se monta la unidad de CD-ROM con permiso de ejecución.


2. Se ejecuta desde el CD-ROM el programa de instalación (el del CD oficial es setup, el
de otras versiones puede cambiar) con la opción -n.
3. El programa de instalación da unos mensajes y en unos momentos pasa a modo
gráfico.
4. Después de algunas preguntas, pide el nombre del directorio en el que instalar el
programa. Recomendamos /opt/staroffice.
5. Más adelante Figura 55. Método de Instalación presenta un cuadro de diálogo en el que
hay que especificar genéricamente cómo se desea hacer la instalación (se ve abajo a la
izquierda). Si se elige la instalación personalizada, aparecerá el cuadro que se ve abajo
a la derecha; en él se puede especificar qué módulos hay que instalar.
6. Figura 55. Método de Instalación

7.

8. Cuando está todo definido, se pulsa el botón Siguiente y el programa se encarga de


todo.

369. Instalación de Usuario


El programa arranca ejecutando /opt/staroffice/program/soffice; ya que no se realiza
automáticamente, es conveniente que el usuario cree una entrada en el menú GNOME para
este programa, tal como se explicó en la hoja Personalización de GNOME, de la parte GNU/
Linux.
La primera vez que cada usuario ejecuta el programa, éste detecta que aún no ha sido
instalado por ese usuario y realmente se arranca el programa de instalación. Se le piden
algunos datos básicos y dos respuestas importantes:
1. El tipo de instalación que quiere realizar, con las dos posibilidades que se ven en la
Figura 56. Instalación como Usuario. Hay que elegir la opción Instalación estándar de
estación de trabajo.
2. Figura 56. Instalación como Usuario
3.

4. El directorio en el que instalar los archivos personales de usuario. Recomendamos


staroffice, dentro del directorio home del usuario.

370. Instrucciones detalladas


En la distribución de StarOffice se encuentra un documento de más de setenta páginas
llamado "Manual de instalación", en formato PDF, con toda la información necesaria para
instalar el programa, en cualquiera de las tres plataformas admitidas.

371. Primeros Arranques


Las dos primeras veces que se arranca StarOffice, se siguen haciendo preguntas relativas
al proceso de instalación. La primera vez aparece el cuadro de diálogo Figura 57. Autopiloto
Configuración Internet, y la segunda vez aparecen el aviso para usar StarOffice como
navegador de Internet y la petición de registro, que es opcional, pero se recomienda seguir.
Para registrarse es necesario disponer de conexión a Internet.
Figura 57. Autopiloto Configuración Internet

372. Aviso a la salida


Si se sale de StarOffice sin guardar los cambios en algún documento, aparece un cuadro de
diálogo como el de la Figura 53. Aviso al salir, advirtiendo del hecho. Si se elige Guardar, se
guardan los cambios y luego se sale. Si se pulsa Rechazar, no se guardan pero sí se sale; y si
se pulsa Cancelar, ni se guardan ni se sale.
Figura 58. Aviso a la salida

373. Creación de un documento


Partiendo de un documento en blanco, se siguen estos pasos:
1. Se escribe el comienzo del texto, se ponen los datos iniciales y rápidamente se
almacena y se le pone un nombre. En el menú Archivo se elige la opción Guardar Como
y se abre el cuadro de diálogo Guardar Como, que se estudia más adelante.
2. Según se va trabajando, de vez en cuando, se guardan los cambios que se van
haciendo. En el menú Archivo se elige la opción Guardar; el programa almacena la
versión actualizada y en seguida devuelve el control para seguir trabajando.
3. Cuando se ha terminado de confeccionar el documento y ya se ha guardado por última
vez, se cierra. En el menú Archivo se elige la opción Cerrar.

374. El cuadro de diálogo "Abrir"


Se examina ahora con más detalle este importante cuadro de diálogo, que puede presentar el
aspecto que se ve en la Figura 59. Cuadro de Diálogo Abrir.
Figura 59. Cuadro de Diálogo Abrir

El cuadro se abre en el mismo directorio en que se trabajó la última vez. En la zona grande
de trabajo aparecen los directorios de ese directorio y los documentos encontrados. Haciendo
doble pulsación sobre un directorio, se pasa a examinar su contenido. El cuarto botón de la
barra de herramientas permite volver al directorio padre del que se está viendo. El segundo y
tercer botón sirven para elegir el modo de presentar la lista de documentos encontrados. Se
recomienda el modo Detalles, ya que así se puede navegar más fácilmente por el árbol de
directorios, pulsando en los + y -.
El cuadro de texto Nombre del archivo puede usarse para escribir directamente el nombre
(o el nombre completo) del documento que se desea abrir. También se puede escribir un
nombre usando caracteres comodín; al pulsar el botón Abrir, aparecerán aquellos nombres
de documento que encajen con el patrón dado en los comodines. La lista desplegable Tipo
de Archivo tiene exactamente esta utilidad, pero con una serie de nombres de fichero ya
preestablecida.
Por fin, cuando se decida el documento que hay que abrir, se pulsa sobre él y luego sobre el
botón Abrir.

376. Guardar con contraseña


Una buena medida para progeter datos secretos es guardar archivos protegidos con
contraseña. En el cuadro de diálogo Guardar como se marca la casilla Guardar con contraseña;
así, el programa pide una contraseña (ilustración de la derecha en la Figura 61. Guardar con
contraseña).
Figura 61. Guardar con contraseña

377. Manejo de archivo


Desde los dos cuadros de diálogo es posible acceder a una serie de funciones sencillas para
crear directorios, copiar y borrar archivos, etc. Aunque esto es mucho más cómodo de realizar
desde los gestores de archivos, algunas veces es útil disponer de estas opciones directamente
desde StarOffice.
Si se pulsa sobre el nombre de un documento con el botón derecho del ratón, aparece un menú
de contexto que permite algunas manipulaciones; como muestra la Figura 62. Menú para la
Gestión de Archivos.
Figura 62. Menú para la Gestión de Archivos
378. Modificación de un documento
Si ya se ha creado un documento, se encuentra almacenado en el disco duro o en un disquete
y se desea realizar algún cambio, se siguen estos pasos:
1. Se abre el documento, es decir, se lee desde el disco duro o disquete y se coloca en la
memoria RAM, con lo que se ve en la pantalla de StarOffice. Para hacerlo, en el menú
Archivo se elige la opción Abrir y se abre el cuadro de diálogo Abrir, que se estudia más
adelante.
2. Según se va trabajando, de vez en cuando, se guardan los cambios que se van
haciendo. En el menú Archivo se elige la opción Guardar; el programa almacena la
versión actualizada y en seguida devuelve el control para seguir trabajando.
3. Cuando se ha terminado de modificar el documento y ya se ha guardado por última vez,
se cierra. En el menú Archivo se elige la opción Cerrar.

605. Introducción
GNU/Linux no necesita un entorno de ventanas para funcionar. Ciertamente, cuando comenzó
no existía dicho entorno. La pantalla era un intérprete de comandos de aspecto similar a los
Unix o una ventana de MS-DOS. Las aplicaciones que funcionan bajo terminales o consolas las
llamaremos aplicaciones de texto.
Tiempo después se portó un sistema de ventanas llamado X/Window, muy popular en el mundo
Unix.
Es un sistema de control de mouse y pantalla, pero no maneja las ventanas y operaciones con
ventanas (como mover, minimizar, cerrar, etc.). Por lo tanto hay que utilizar algún programa
administrador de ventanas. Se eligió para el curso es el KDE. Existen muchos otros entre los
cuales está el GNOME, CDE, WindowMaker y AfterStep.
Las aplicaciones que funcionan bajo X/Window las llamaremos aplicaciones gráficas. Necesitan
X/Window para funcionar pero no necesitan un administrador de ventanas. Sin embargo el
administrador de ventanas facilita el uso de los programas.

606. Requerimientos
Como es de esperarse las consolas y terminales son mucho más antiguas que las pantallas
con entornos gráficos, por lo tanto los requerimientos son menores.
Los requerimientos mínimos para usar GNU/Linux son, tan solo, una 386 con 4 MB de RAM.
Esto no quiere decir que va a funcionar rápido, pero va a funcionar. En algunos trabajos no es
necesario un equipo más potente. Es común pensar que si no se tiene la última máquina que
está en el mercado junto los últimos periféricos no se puede usar nada. Este es un concepto
erróneo.
Tener en cuenta el uso que se dará a la computadora. Por ejemplo para compartir Internet
entre varios amigos o dentro de una pequeña empresa, una 386 con 4 MB de Ram sería
suficiente. En cambio para la creación de planos en un sistema CAD esto no sería un equipo
óptimo.
Si bien la computadora funciona con esa configuración, el aspecto es similar al de terminales
hace varios años atrás. Para usuarios recién iniciados y poco familiarizados con terminales,
suele parecer un entorno poco amigable. Pero si se necesita rapidez con poco hardware no
queda otra opción.
Normalmente para usar una terminal gráfica [68], con KDE se requiere aproximadamente un
Pentium (166MHz o 200MHz) con 32MB de RAM para trabajar. Y para trabajar cómodamente
con StarOffice es necesario 64MB de RAM.
Para mayor detalle sobre terminales gráficas ejecutar man X que detalla como funciona el
servidor que atiende a KDE, llamado X/Window (es sin `s' final) Para mayor detalle sobre KDE
ir a K-Ayuda KDE

607. Texto en entornos gráficos


Hasta ahora hemos presentado a ambos tipos de aplicaciones como opuestas y sin conexión
entre ellas. Pero en la vida real no es así, es muy común usar aplicaciones de texto en
entornos gráficos Se utiliza un programa gráfico que emula (o simula como gusten) a una
terminal de texto. Sobre esa terminal emulada se ejecutan las aplicaciones de texto como
puede ser bash, un intérprete de comandos.
El bash a su vez puede ejecutar otra aplicación de texto. Este es el funcionamiento normal.
Cuando utilizamos el programa gráfico konsole este emula una terminal ejecutando bash. Y a
partir del bash tipeamos el nombre de otro programa (por ejemplo mc) para que se ejecute en
esa terminal. Para salir del mc hay que presionar F10.
Pero no sólo se ejecutan aplicaciones de texto. También se pueden ejecutar aplicaciones
gráficas que salgan en pantalla. Tranquilamente estando en konsole se puede tipear kedit y
saldrá una ventana con el editor de texto de KDE.
Figura 74. ejecución del kedit en konsole
Al probar esto último podemos observar que en konsole no aparece el prompt [69] . Existen
dos alternativas: cerrar el editor de texto o apretar Ctrl-C para que konsole mate al editor.

[69] el prompt suele ser el símbolo $. más alguna información del tipo [usuario@maquina
directorio]

608. Ventajas y desventajas


Las aplicaciones de texto, tienen la ventaja de ocupar poco espacio, ser rápidas y la mayoría
tiene mucho desarrollo. Hay que pensar que las terminales existen hace mucho tiempo.
Como desventajas se puede decir que los programas de texto son poco amigables y tienen una
interfaz restringida. Son ideales para tareas administrativas de la computadora, terminales con
enlaces lentos, y software en general para computadoras de poca capacidad.
Como contrapartida existen las aplicaciones gráficas, con una interfaz mejorada pero con
mayor lentitud en mostrar información. Son ideales para tareas de usuarios finales, personas
con poca práctica en computación, etc.
Las tareas administrativas más importantes (añadir/eliminar usuarios, configurar hardware, dar
permisos, etc.) se pueden hacer en ambas interfaces, tanto en la de texto como en la gráfica.

609. Ejemplo práctico: configuración inicial de la red


Para poder realizar un ejemplo con VPN conviene armar un esquema de red que simule un par
de redes locales conectadas entre sí a través de una red pública (simulando Internet).
En Figura 75. Configuración del esquema de red se presenta una manera de simular el caso
anteriormente mencionado. Para ésto se necesitan 5 PCs:
Máquina A
Estación de trabajo de la red izquierda. Esta máquina representa a cualquier máquina en la red
local, por lo que no debe llevar ninguna configuración específica de la tecnología VPN que se
esté utilizando.
Máquina B
Esta máquina debe funcionar como pasarela de red, dando conectividad a la red local
(192.168.1.0/24) contra la red pública. Además, debe hacer de pasarela de seguridad teniendo
el software de VPN correspondiente instalado y configurado.
Máquina C
Para simular a una red pública como Internet se utiliza una máquina con dos interfaces de
red. Ésta máquina debe proveer servicios de ruteo entre ambas redes públicas que conoce
(10.1.1.0/24 y 10.1.2.0/24) pero para que la simulación sea correcta, no debe conocer las redes
locales ni cómo llegar a ellas.
Máquina D
Este equipo cumple las mismas funciones que la máquina B, pero en la red derecha.
Máquina E
La máquina E representa a cualquier estación de trabajo en la red derecha, deberá tener
configurada la ruta por defecto a la máquina D y nada más.
Figura 75. Configuración del esquema de red

A nivel de red, estamos suponiendo que las máquinas B y D son pasarelas a Internet de
cada red local, esto quiere decir que ambas máquinas poseen dos interfaces de red, una que
corresponde a la red local y otra que corresponde a una red con el proveedor de conexión, la
cual tiene una dirección IP ruteable, mientras que las direcciones IP de las redes locales no lo
son.
Para lograr este escenario simulado de la vida real, se necesitan entonces ciertas
configuraciones en cada máquina, las mismas se detallan a continuación.
Máquina A
Necesita la configuración de red local y nada más.
# ifconfig eth0 192.168.1.25 netmask 255.255.255.0
# route add default gw 192.168.1.1

Máquina E
Necesita una configuración similar a la máquina A, respetando los valores de su propia red
local.
# ifconfig eth0 192.168.2.43 netmask 255.255.255.0
# route add default gw 192.168.2.1

Máquina B
Tiene que funcionar como pasarela, es por eso que no se debe olvidar activar la capacidad de
IP forwarding para el traspaso de paquetes IP de una red a la otra.
# ifconfig eth0 192.168.1.1 netmask 255.255.255.0
# ifconfig eth1 10.1.1.22 netmask 255.255.255.0
# echo 1 > /proc/sys/net/ipv4/ip_forward
# route add default gw 10.1.1.100

La ruta por defecto que se establece en la pasarela B es para simular la ruta por defecto que
toda máquina conectada a Internet debe tener configurada con su proveedor de conexión.
Máquina D
Este equipo tiene la misma funcionalidad que la máquina B, por lo que sus configuraciones son
muy similares.
# ifconfig eth0 192.168.2.1 netmask 255.255.255.0
# ifconfig eth1 10.1.2.33 netmask 255.255.255.0
# echo 1 > /proc/sys/net/ipv4/ip_forward
# route add default gw 10.1.2.100

Máquina C
Esta máquina simula ser el punto de acceso a la red pública que ofrecen los proveedores
de conexión. Este equipo sólo tiene conocimiento sobre las redes públicas 10.1.1.0/24 y
10.1.2.0/24, nada sabe sobre las redes locales de ambos extremos, por lo que no puede rutear
paquetes a esas redes.
# ifconfig eth0 10.1.1.100 netmask 255.255.255.0
# ifconfig eth0 10.1.2.100 netmask 255.255.255.0
# echo 1 > /proc/sys/net/ipv4/ip_forward

Como este equipo necesita realizar retransmisión de paquetes IP entre ambas redes, necesita
el IP Forwarding activado.
Lo que queda es configurar las máquinas B y D para que trabajen como pasarelas seguras y
generen el túnel VPN necesario para comunicar ambas redes locales.
610. Configuración de IPSec para el ejemplo
Para este ejemplo se da por hecho que el núcleo del sistema operativo tiene ya incluído
el soporte para FreeS/WAN, que la clave RSA se ha generado y que todos los paquetes
necesarios se han instalado. Además, se supondrá que el esquema de red explicado en
Ejempo práctico: configuración inicial de la red fue entendido y armado correctamente.
De acuerdo con lo explicado en Configuración de FreeS/WAN, se debe crear el archivo /etc/
ipsec.conf con el siguiente contenido:
config setup
interfaces="ipsec0=eth1"
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search

conn %default
keyingtries=0

conn sitio1-sitio2
left=10.1.1.22
leftsubnet=192.168.1.0/24
leftnexthop=%defaultroute
right=10.1.2.33
rightsubnet=192.168.2.0/24
rightnexthop=%defaultroute
auto=start
authby=rsasig
leftid=@sg1.curso.com
rightid=@sg2.curso.com
leftrsasigkey=
rightrsasigkey=

Luego, se deben ingresar las claves públicas de cada pasarela de seguridad. En la máquina
B se ejecuta el comando ipsec showhostkey --left y la salida se la añade como valor de
leftrsasigkey. Lo mismo se debe hacer con la máquina D, sólo que se ejecuta el comando
ipsec showhostkey --right y su salida se agrega a la opción rightrsasigkey.
Una vez finalizada la creación del archivo, se debe tener cuidado de que sea el mismo para
ambas máquinas B y D. Luego se reinicia el servicio de IPSec, y se prueba la conectividad
desde la máquina A hacia la máquina E con un ping:
# ping 192.168.2.43

El túnel establecido permitirá la conexión de tipo red-a-red, es decir que sólo las estaciones de
trabajo de una red local podrán comunicarse con las de la red opuesta. Si se quiere comunicar
cada pasarela de seguridad con la red local opuesta, habrá que generar túneles específicos
para esta tarea.

611. Configuración de FreeS/WAN


La implementación que se utiliza en GNU/Linux se denomina FreeS/WAN, es un proyecto de
software libre que tiene su página del proyecto en http://www.freeswan.org.
FreeS/WAN es un proyecto que no admite colaboradores de los EEUU, para evitar el posible
problema que tienen los ciudadados de ese país con respecto a la exportación de software de
cifrado fuerte.
Para generar una clave RSA de 1024 bits (lo mínimo recomendable) se debe ejecutar lo
siguiente:
# ipsec rsasigkey 1024 >> mykey

y luego se debe copiar la clave privada en el archivo /etc/ipsec.secrets.


Figura 76. Esquema de ejemplo para la configuración del FreeS/WAN

Siguiendo el esquema de Figura 76. Esquema de ejemplo para la configuración del FreeS/
WAN, la configuración básica para un túnel red-a-red se realiza editando el archivo /etc/
ipsec.conf
config setup
interfaces="ipsec0=eth0"
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search

conn %default
keyingtries=0

conn sitio1-sitio2
left=10.1.1.2
leftsubnet=192.168.1.0/24
leftnexthop=%defaultroute
right=10.1.2.2
rightsubnet=192.168.0.0/24
rightnexthop=%defaultroute
auto=start
authby=rsasig
leftid=@sg1.curso.com
rightid=@sg2.curso.com
leftrsasigkey=0x--left-public-key
rightrsasigkey=0x--right-public-key

En los valores de leftrsasigkey y rightresasigkey deberán ir las claves públicas de las pasarelas
de seguridad, se deberán extraer de ambos equipos, con el siguiente comando:
# ipsec showhostkey --right
# ipsec showhostkey --left

Según corresponda, se le pasará la opción --left o --right, y esa salida, agregarla al /etc/
ipsec.conf. El archivo resultante deberá ir en ambas pasarelas de seguridad. Una vez reiniciado
el servicio de ipsec, para conocer el estado del túnel, se puede utilizar el comando:
# ipsec auto --status
000 interface ipsec0/eth0 10.1.1.2
000
000 algorithm ESP encrypt: id=3, name=ESP_3DES
000 algorithm ESP auth attr: id=1, name=AUTH_ALGORITHM_HMAC_MD5
000 algorithm ESP auth attr: id=2, name=AUTH_ALGORITHM_HMAC_SHA1
000
000 "sitio1-sitio2": 192.168.1.0/24===10.1.1.2[@sg1.curso.com]---10.1.1.1...10.1.2.1---
10.1.2.2[@sg2.curso.com]===192.168.0.0/24
000 "sitio1-sitio2": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz:
100%; keyingtries: 0
000 "sitio1-sitio2": policy: RSASIG+ENCRYPT+TUNNEL+PFS; interface: eth0; trap erouted
000 "sitio1-sitio2": newest ISAKMP SA: #0; newest IPsec SA: #0; eroute owner:
#0000 "sitio1-sitio2": ESP algorithms wanted: 3/000-1/000, 3/000-2/000,
000 "sitio1-sitio2": ESP algorithms loaded: 3/168-1/128, 3/168-2/160,
000
000 #74: "sitio1-sitio2" STATE_MAIN_I1 (sent MI1, expecting MR1); EVENT_RETRANSMIT
in 4s

Esto que se muestra, indica que el túnel está establecido utilizando 3DES como algoritmo de
cifrado, MD5 y SHA1 como algoritmos de cifrado para autenticación, y otros datos interesantes.

612. Introducción a IPSec


IPSec (IP Security) es un protocolo que provee seguridad punto a punto en IPv4 e IPv6 (en
IPv6 el soporte IPSec viene implementado por defecto). IPSec es un estándar que poco a poco
se está aceptando en las distintas plataformas, en GNU/Linux tenemos al proyecto FreeS/WAN
(http://www.freeswan.org). Este protocolo implementa cifrado a nivel del protocolo IP, por lo que
todos los protocolos por encima de IP se pueden utilizar con IPSec de forma transparente.
Los servicios que provee este protocolo son múltiples, que en conjunto establecen el esquema
de seguridad de IPSec.
Servicios de seguridad de IPSec
Control de Acceso
Se establecen politicas de establecimiento de conexiones IPSec.
Autenticación del originario de los datos
El que recibe un paquete está seguro que proviene del host supuesto.
Integridad de mensaje
Un atacante no puede modificar un paquete y éste ser aceptado.
Protección contra reenvíos
Un atacante no puede reenviar paquetes previamente enviados, y éste ser aceptado.
Confidencialidad
Un atacante no puede leer datos interceptados.
Como se dijo anteriormente, IPSec es una grupo de protocolos, entre ellos se encuentran:
Authentication Header(AH)
Provee integridad de mensaje y autenticación del originario del mensaje. La protección que AH
provee incluye a la información de encabezado de los paquetes, como ser las direcciones en
origen y destino.
Encapsulating Security Payload (ESP)
Provee cifrado y protección limitada contra análisis de flujo de datos.
Internet Security Association Key Management Protocol (ISAKMP)
Es utilizado por AH y ESP para la administración de claves. ISAKMP no define por si mismo los
algoritmos de generación de claves, sino que permite el uso de distintos tipos de algoritmos,
aunque el estándar pide un set mínimo en las implementaciones. Para el intercambio de
claves, se utiliza el protocolo IKE (Internet Key Exchange), esto se hace por separado para
independizar el método de intercambio de claves del protocolo IPSec. La estandarización de
IKE permite la interoperabilidad entre distintos sistemas, la implementación de IKE de FreeS/
WAN se llama Pluto.
El establecimiento del túnel IPSec se hace básicamente en dos fases:
1. IKE - Fase 1: los gateways negocian un canal bidireccional (SA) que se utilizará para
crear los canales de la siguiente fase. Se presentan los algoritmos de cifrado probables,
y las claves de autenticación para armar los túneles IPSec.
2. IKE - Fase 2: usando el canal generado en la fase uno, se establece un par de SAs
(unidireccionales, uno para cada sentido) con los parámetros de refresco de claves,
método de cifrado, y el protocolo a usar: AH o ESP.

612.1. Filtrado de paquetes IPSec


Los protocolos AH y ESP están implementados sobre la capa IP, AH es el protocolo IP 51 y
ESP es el protocolo IP 50. El protocolo ISAKMP usa el puerto UDP 500 para envío y recepción.
En el caso en que se tenga un firewall delante del gateway de seguridad, habrá que tener en
cuenta estos protocolos para su filtrado.

612.2. Desventaja y limitaciones de IPSec


La única desventaja que se le ve a IPSec por el momento, es la dificultad de configuración con
sistemas Windows. El Windows 2000 y Windows XP proveen herramientas para configurar
túneles con IPSec, pero su configuración es bastante difícil (Microsoft nombra a todas las cosas
en forma diferente de lo estándar), y además posee algunas limitaciones (como ser: necesita si
o si IP estáticos).
Limitaciones de IPSec
● IPSec no es seguro si el sistema no lo es: Los gateways de seguridad deben estar en
perfectas condiciones para poder confiar en el buen funcionamiento de IPSec.
● IPSec no provee seguridad de usuario a usuario: IPSec no provee la misma clase de
seguridad que otros sistemas de niveles superiores. Por ejemplo, el GPG que se utiliza
para cifrar mensajes de correo electrónico, si lo que se necesita es que los datos de un
usuario los pueda leer otro usuario, IPSec no asegura esto y se tendrá que utilizar otro
método.
● IPSec autentica máquinas, no usuarios: el concepto de identificación y contraseña
de usuarios no es entendido por IPSec, si lo que se necesita es limitar el acceso a
recursos dependiendo del usuario que quiere ingresar, entonces habrá que utilizar otros
mecanismos de autenticación en combinación con IPSec.
● IPSec no evita los ataques DoS[70] : estos ataques se basan en sobrecargar la
máquina atacada de tal modo de que sus usuarios no puedan utilizar los servicios que
dicha máquina les provee.

[70] Denial of Service Attacks, ataques de denegación de servicio

613. Configuración de Road Warriors


Road Warriors se los denomina a aquellos extremos de un túnel que no poseen una dirección
IP fija. Este es el caso de alguna persona que viaja constantemente pero necesita con su
notebook conectarse de manera segura a la red interna de su organización para hacer alguna
transferencia de información.
El caso mas común es establecer un túnel entre dos equipos conectados a Internet con una
dirección IP fija, entonces en el archivo de configuración /etc/ipsec.conf deberán ir esos datos,
pero cuando un extremo no lleva dirección fija, entonces se deben hacer algunos retoques para
que funcione.
Supongase un caso como el que se muestra en Figura 77. Ejemplo de Road Warrior:
Figura 77. Ejemplo de Road Warrior

En este caso, el Road Warrior se está conectando desde cualquier tipo de conexión con IP
dinámico, como ser un módem, ADSL, o cualquier servicio similar que provea IP pública pero
no fija.
En este caso, el archivo de configuración variará un poco para el Road Warrior con respecto al
de la pasarela de seguridad, a continuación se muestran ambos casos.

613.1. Archivo /etc/ipsec.conf del SG2


config setup
interfaces="ipsec0=eth0"
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search

conn %default
keyingtries=1

conn rw1-sg2
left=0.0.0.0
leftsubnet=
leftnexthop=
right=10.1.2.2
rightsubnet=192.168.0.0/24
rightnexthop=%defaultroute
auto=add
authby=rsasig
leftid=@rw1.curso.com
rightid=@sg2.curso.com
leftrsasigkey=0x--left-public-key
rightrsasigkey=0x--right-public-key

La opción auto=add en este caso, no fuerza al túnel a iniciarse, sino que se activa pero queda a
la espera de conexión, la cual va a iniciar el Road Warrior cuando se conecte a Internet.
Nótese que los datos correspondientes al Road Warrior no se agregan, ya que sus detalles de
conexión no se conocen en forma previa.

613.2. Archivo /etc/ipsec.conf del RW1


config setup
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search

conn %default
keyingtries=1

conn rw1-sg2
left=%defaultroute
leftsubnet=
leftnexthop=
right=10.1.2.2
rightsubnet=192.168.0.0/24
rightnexthop=%defaultroute
auto=start
authby=rsasig
leftid=@rw1.curso.com
rightid=@sg2.curso.com
leftrsasigkey=0x--left-public-key
rightrsasigkey=0x--right-public-key

En este caso, las claves públicas se deberán agregar de la misma manera como se explica en
Configuración de FreeS/WAN.

614. Introducción a las VPNs


La masificación de la gran red de redes, Internet, produjo un acercamiento de los individuos y
organizaciones, en lo que a comunicaciones respecta. De repente, enviar una carta o un FAX
a otro lugar se tornó mas lento y mas caro que enviar un mensaje de correo electrónico, el
tener una conferencia telefónica se convirtió en una actividad obsoleta a la par de una video
conferencia o una simple charla por IRC o cualquier otro servicio de chat. Todo esto a través de
Internet.
A medida que Internet se popularizó, las empresas comenzaron a ver este medio como algo
que les permitía enviar y recibir información de todo tipo de manera rápida y económica. Pero
cuando uno habla de información, normalmente no clasifica esa información, y así como
Internet es masiva, es también insegura en lo que respecta a privacidad durante el tránsito de
la información.
En el caso de los correos electrónicos, la solución es muy fácil: utilizar una herramienta como
GnuPG, que realice cifrado de los mensajes para que nadie que pueda interceptar los correos
entre el remitente y el destinatario, pueda leer sus contenidos, ¿pero que se puede hacer
con otro servicios, como por ejemplo conexión a base de datos, a servidores web internos, o
cualquier otro servicio que exista o esté por existir?
La solución a esta problemática requiere de un medio de transferencia seguro, que se
establezca sobre el medio inseguro pero extremadamente barato y disponible como es Internet.
Este medio proveería lo necesario para que las conexiones se realicen de forma transparente y
segura. A este medio se lo denomina VPN, o Red Privada Virtual.
Una red privada y virtual tiene, como su nombre lo indica, dos componentes:
Virtual
Es virtual porque la conexión que se establece no es una conexión de red física como se
acostumbra a configurar, sino que se crean interfaces de red virtuales de tal manera de
engañar a las aplicaciones que se posee una red adicional, y de esta manera poder utilizarlas
sin ningún requerimiento extra sobre estos tipos de conexiones.
Privada
De nada sirve simular una conexión de red solamente, en lo que respecta a privacidad, es
necesario además agregar un componente de cifrado de algún tipo, que se realice al nivel de la
capa de red, en la capa inmediata superior a la interfaz virtual, de modo tal que sólo pueda ser
descifrada la información al otro lado de la conexión, y por lo tanto, mantener la privacidad de
los datos enviados y recibidos.
Figura 78. Concepto de una red privada virtual
En Figura 78. Concepto de una red privada virtual se puede ver a modo conceptual como
funciona una red privada virtual. Se forma un túnel, y entre los extremos de dicho túnel, la
información se transmite de forma cifrada, pero esto es transparente a las máquinas que se
encuentran detrás de esos extremos.
En apariencia, ambas redes locales estarán interconectadas directamente por un enlace físico,
pero ese enlace estará provisto por el túnel VPN que se establece entre las máquinas que se
encuentran en ambos extremos del mismo. Estas máquinas normalmente se las denomina
Security Gateways (pasarelas de seguridad), y son las que se encargan de establecer y
mantener la conexión VPN. Las demás máquinas de cada red local, deberán configurarse para
que el tráfico a la otra red local lo envíen a través de su pasarela de seguridad, y eso es todo lo
necesario para que el resto de los servicios comience a funcionar a través de la VPN.

615. PPTP (Point-to-Point Tunneling Protocol)


PPTP es un protocolo basado en PPP y GRE (Generic Routing Encapulation) que se usa para
establecer túneles a nivel IP, permitiendo armar redes privadas virtuales (VPNs).
La ventaja del protocolo PPTP es que es ampliamente soportado por plataformas Windows,
pudiendo un Linux trabajar como servidor PPTP y Windows (95 en adelante) conectarse como
clientes, o en el caso de Windows NT, 2000 y XP se daría el caso inverso.
La gran desventaja de este protocolo reside en su diseño, que no es del todo seguro: antes
que el túnel GRE se establezca, parte del inicio de sesión, autenticación y demás se hace por
protocolo TCP en forma de texto claro, parte de la información que pasa de este modo es el IP
del cliente y el servidor, el nombre de usuario, la contraseña cifrada, etc...datos que cualquiera
que esté en el medio puede llegar a usar para intentar entrar.
Además, la implementación de Microsoft agrega un poco mas de fallas a su implementación
del protocolo, usando un sistema de clave simétrico para la autenticación: RC4 de 40 y 128
bits. La versión de 40 bits es demasiado débil para poder ser considerada segura, pero además
de todo, la clave la basa en la contraseña del usuario (de esta manera el usuario puede tener
múltiples sesiones con su propia clave). El problema de esto es que la clave debería cambiarse
cada tanto (mas aún cuando las sesiones PPTP son prolongadas) y esto realmente no sucede
casi nunca.

616. Configuraciones de un cliente PPTP


El cliente que se usa en GNU/Linux para el protocolo PPTP se llama PPTPClient y la página
del proyecto es http://pptpclient.sf.net Los requerimientos para usar el protocolo son:
Soporte MPPE en el kernel
el MPPE (Microsoft Point-to-Point Encryption) se mete en el kernel por medio de un parche que
se puede conseguir en http://pptpclient.sf.net/ (en el mismo paquete que el pptpclient)
Soporte MPPE en el pppd
a partir de la versión 2.4.2 del pppd el soporte de MPPE está incluido, si no se tiene esa
versión, se puede bajar un pppd con soporte desde http://public.planetmirror.com/pub/mppe/
Instalación y configuración
La configuración se realiza con el comando «pptp-command» en las distribuciones derivadas
de RedHat.

617. Servidor PPTP detrás de un firewall


Si se tiene la oportunidad, es conveniente situar el servidor PPTP detrás de un firewall,
evitando tenerlo expuesto a Internet, por las razones de seguridad que nombramos al
comienzo, para esto se deberá utilizar un redirector de puertos:
TCP 1723

IP 47
La entrada al firewall, y la salida se deberá adecuar el núcleo del firewall para el
enmascaramiento del tráfico PPTP. Esto se hace agregando unos parches al núcleo tal como
se describe en:
http://bmrc.berkeley.edu/people/chaffee/linux_pptp.html

http://www.impsec.org/linux/masquerade/ip_masq_vpn.html

618. Parches extras al PPTP


Para soportar estos protocolos utilizados por las implementaciones de Microsoft, se deben
aplicar algunos parches al núcleo del sistema operativo (y recompilarlo, por supuesto) y al
pppd. No es el objetivo de esta clase detallar este proceso, pero de todas formas listamos
algunas direcciones en Internet para el alumno interesado en profundizar en estos temas:
http://lab.digitol.net/poptop-linux-howto.html

http://www.taniz.org/pptp-mini-howto.pdf

619. Configuraciones de un servidor PPTP


El software de servidor PPTP de GNU/Linux se llama PopTop y su sitio web se encuentra en
http://www.poptop.org. Actualmente (28/4/2003) la versión estable es la 1.0.1.

619.1. Configuración
El archivo /etc/ppp/options.pptpd
debug
name servername
auth
require-chap
proxyarp

+chap
+chapms
+chapms-v2
mppe-40
mppe-128
mppe-stateless

ms-dns 192.168.1.200
ms-wins 192.168.1.200

/etc/pptpd.conf:
speed 115200
option /etc/ppp/options.pptpd
localip 192.168.0.234-238
remoteip 192.168.1.234-238

/etc/ppp/chap-secrets:
# Secrets for authentication using CHAP
# client server secret IP addresses
username * password *
Características soportadas:
● Compatible con clientes Windows 2000.
● Compatible con los esquemas de encriptación MPPE de Microsoft, mediante un parche
al pppd. (RC4 a 40 bits y 128 bits).
● Compatible con clientes PPTP Windows 95/98/NT.
● Compatible con clientes PPTP Linux.

También podría gustarte