Professional Documents
Culture Documents
Tabla de Contenidos
El Kernel Linux......................................................................................................................................... 11
1. Conceptos del Kernel ........................................................................................................................ 11
2. El Kernel Modular.............................................................................................................................. 12
3. Rutina de recompilación de un kernel................................................................................................ 13
4. Ejercicios............................................................................................................................................ 18
Arrancando Linux..................................................................................................................................... 20
1. Entendiendo los niveles de arranque.................................................................................................. 20
2. El archivo inittab................................................................................................................................. 22
3. LILO el gestor de arranque................................................................................................................. 23
4. Del arranque a la shell bash............................................................................................................... 24
5. Ejercicios............................................................................................................................................ 26
Configuración de red................................................................................................................................ 35
1. La interfaz de red................................................................................................................................ 35
2. Información de host............................................................................................................................ 36
3. Detener e iniciar la red....................................................................................................................... 37
4. Enrutado............................................................................................................................................. 38
5. Herramientas comunes de red........................................................................................................... 40
6. Ejercicios............................................................................................................................................ 42
Redes TCP/IP............................................................................................................................................ 43
1. Números binarios............................................................................................................................... 43
2. Direcciones de red, broadcast y máscara de red............................................................................... 43
3. Clases de red..................................................................................................................................... 45
4. Subredes............................................................................................................................................ 46
5. La pila TCP/IP.................................................................................................................................... 47
6. Puertos y servicios TCP/IP................................................................................................................. 49
7. Ejercicios............................................................................................................................................ 50
Servicios de red........................................................................................................................................ 51
1. El demonio inetd (antiguo).................................................................................................................. 51
2. El demonio xinetd............................................................................................................................... 52
3. TCP wrappers.................................................................................................................................... 53
4. Configurando NFS.............................................................................................................................. 53
5. SMB y NMB........................................................................................................................................ 54
6. Servicios DNS.................................................................................................................................... 56
7. Configuración de Sendmail................................................................................................................ 60
8. El servidor Apache............................................................................................................................. 60
9. Ejercicios............................................................................................................................................ 62
Bash Scripting.......................................................................................................................................... 64
1. El entorno bash.................................................................................................................................. 64
2. Principios de Scripting........................................................................................................................ 65
3. Evaluaciones Lógicas......................................................................................................................... 66
4. Cucles................................................................................................................................................ 67
5. Esperando entrada del usuario........................................................................................................... 69
6. Trabajando con números................................................................................................................... 69
7. Ejercicios............................................................................................................................................ 70
Asesores & Soporte Linux SAC Soportelinux.com
Seguridad básica...................................................................................................................................... 71
1. Seguridad local................................................................................................................................... 71
2. Seguridad de red................................................................................................................................ 73
3. La shell segura SSH........................................................................................................................... 76
4. Configuración de la hora.................................................................................................................... 77
5. Seguridad del Kernel.......................................................................................................................... 78
Configurando PPP.................................................................................................................................... 91
1. Módems seriales................................................................................................................................ 91
2. Configuración Dialup.......................................................................................................................... 92
3. Chat y pppd........................................................................................................................................ 92
4. Peers PPPD ...................................................................................................................................... 93
5. Wvdial................................................................................................................................................ 94
Impresión.................................................................................................................................................. 95
1. Filtros y gs.......................................................................................................................................... 95
2. Impresoras y colas de impresión........................................................................................................ 95
3. Herramientas de impresión................................................................................................................ 96
4. Los archivos de configuración............................................................................................................ 97
5. Ejercicios.......................................................................................................................................... 100
El Kernel Linux
A: Monolítico
Un kernel monolítico es uno que tiene todo el soporte para hardware, red y sistemas de
archivos compilado en un único archivo imagen.
B: Modular
Un kernel modular es uno que tiene algunos drivers compilados como ficheros objeto, los mismos
que el kernel puede cargar y eliminar en demanda. Los módulos cargables son almacenados en
/lib/modules.
La ventaja de un kernel modular es que no siempre necesita ser recompilado cuando nuevo hardware es
agregado o reemplazado en el sistema. Los kernels monolíticos arrancan ligeramente más rápido que los
modulares pero superan a estos últimos.
Muchos componentes del kernel Linux pueden ser compilados como módulos que el kernel puede cargar
dinámicamente y eliminarlos según sea requerido.
Los componentes que mejor convienen ser modularizados son aquellos no requeridos en el momento del
arranque, por ejemplo soporte para dispositivos periféricos y sistemas de archivos suplementarios.
Los módulos del Kernel modules son controlados por el paquete modutils que contiene las siguientes
herramientas:
– lsmod
– rmmod
– insmod
– modprobe
– modinfo
Muchos módulos dependen de la presencia de otros. Un archivo que contiene las dependencias de todos
estos módulos es /lib/modules/<kernel-version>/modules.dep el cual es generado por el comando
depmod. Este comando es ejecutado por el script rc.sysinit cuando se arranca el sistema.
-- /etc/modules.conf es consultado para saber los parámetros de algunos módulos (IRQ y puertos IO) pero
la mayoría de veces este archivo contiene una serie de alias. Estos alias permiten que las aplicaciones se
puedan referir a los dispositivos por un nombre común. Por ejemplo la primera interfaz de red siempre es
referida como eth0 y no por el nombr del driver específico.
• Eliminar el enlace simbólico antiguo que apuntaba a la versión antigua de las fuentes del kernel:
rm linux
Las fuentes del kernel instaladas generalmente como un paquete RPM a menudo crean un enlace simbólico
llamado linux-2-4
Nota: Las fuentes de la rama 2.2.x del kernel crean un directorio llamado linux en lugar de crear uno
de nombre linux-version. Este es el por qué es tan importante el primer paso, de otro modo se puede
sobreescribir una versión antigua de las fuentes del kernel con una nueva. Desde la rama 2.4.x del kernel el
directorio creado se llama linux-version.
ln -s linux-2.4.29 linux
• El kernel está ahora casi listo para ser configurado, pero primero necesitamos asegurarnos que todos los
archivos binarios antiguos son limpiados del directorio de las fuentes, y esto es realizado con el comando
make mrproper.
El kernel ahora está listo para ser configurado. Esto esencialmente significa crear un archivo de
configuración llamado .config. Esto es realizado desde el directorio de las fuentes del kernel (/usr/src/linux)
con cualquiera de los siguientes comandos:
make menuconfig
make xconfig
make config
A menudo es más sencillo configurar un nuevo kernel usando un archivo .config antiguo usando el comando
make oldconfig. Esto realizará consultas al usuario solamente acerca de nuevas características en el kernel
(si el kernel es nuevo o ha sido parchado)
Aviso: Algunas distribuciones como RedHat tienen un subdirectorio configs con algunos archivos de
configuraciones predeterminadas listos para ser usados como archivos .config en la compilación.
Para habilitar ciertas características del kernel (con make menuconfig) entraremos en la categoría del nivel
superior desplazándonos con las tecla hacia arriba y presionando Enter para entrar a la categoría deseada.
Una vez dentro de la categoría escogida, presionando la barra espaciadora nos permitirá cambiar el soporte
en el kernel para una característica o driver determinado.
Las mismas alternativas están disponibles con otros comandos como make config y make xconfig
make dep
Una vez que la configuración del kernel se ha completado, es necesario reflejar dichos cambios en todos los
subdirectorios del directorio de las fuentes del kernel. Esto es posible con el comando make dep. Los
archivos de nombre .depend que contengan rutas a archivos encabezados (.h) presentes en el directorio del
kernel (/usr/src/linux/include) son generados con el destino dep.
make clean
El comando make obtiene instrucciones desde un Makefile y compilará así lo que sea necesario. Si algunos
archivos están ya presentes entonces make los usará tal como están, en particular los archivos de extensión
.o. Para asegurarnos que todas las opciones de configuración en el archivo .config son usados para
recompilar los archivos necesarios uno debe ejecutar el comando make clean (esto elimina todos los
archivos *.o).
Aviso: No se necesita ejecutar “make clean” en esta etapa si ya se ha preparado el directorio de las fuentes
con “make mrproper”
make zImage
make bzImage
Cuando el comando termina sin errores, se creará un archivo llamado vmlinux dentro de /usr/src/linux/.
Este es el kernel descomprimido.
Los otros dos comandos escribirán unos archivos adicionales llamados zImage y bzImage dentro de
/usr/src/linux/arch/i386/boot called zImage and bzImage. Estos son kernels comprimidos usando gzip y
bzip2. Ver la siguiente sección Instalando un nuevo kernel para saber cómo proceder con estos archivos.
make modules
Los módulos del kernel son compilados con el comando make modules.
make modules_install
Una vez que los módulos son compilados éstos necesitan ser copiados en los subdirectorios
correspondientes dentro de /lib/modules. El comando make modules_install hace justamente eso.
make dep
make clean
make bzImage
make modules
make modules_install
/usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-<full-kernel-version>
Luego el archivo /etc/lilo.conf o /boot/grub/grub.conf necesita ser editado para agregar una entrada
correspondiente al nuevo kernel recién compilado. Copiar la sección “image” del kernel actual y agregar una
nueva sección imagen al final del archivo como se muestra a continuación:
image=/boot/vmlinuz
label=linux
root=/dev/hda6 Sección existente
read-only
image=/boot/vmlinuz-<version-completa-del-kernel>
label=linux-new Sección agregada
root=/dev/hda6
read-only
----------snip-------------------------------
La tabla de símbolos para varios de los procesos del kernel puede ser copiado al directorio /boot:
cp /usr/src/linux/System.map /boot/System.map-<version-completa-del-kernel>
uname -r
Esta versión de kernel es también mostrada en las terminales virtuales si la opción \k está presente en el
archivo /etc/issue.
Si cualquier módulo compilado dinámicamente es requerido en el momento del arranque (por ejm. un driver
para SCSI, o el soporte para el sistema de archivos raíz) ellos serán cargados usando una imagen inicial
conocida como “initial ramdisk“.
El initial ramdisk es creado con el comando mkinitrd que solamente requiere dos parámetros: el nombre del
archivo y el número de la versión del kernel.
Si usamos un initial ramdisk entonces será necesario agregar una línea initrd= en el archivo /etc/lilo.conf
Ejemplo:
3.6 Opcional
Finalmente LILO necesita ser ejecutado nuevamente para poder actualizar el gestor de arranque. Primero
lilo puede ser ejecutado en modo de pruebas para ver si hay algún error en el archivo de configuración:
AVISO
El gestor de arranque LILO necesita ser actualizado usando lilo cada vez que un cambio es realizado en
/etc/lilo.conf
4. Ejercicios
Antes de empezar con los ejercicios asegurémonos que no tenemos ningún directorio de fuentes del kernel
bajo /usr/src/. Si es así, prestar atención al enlace simbólico /usr/src/linux.
- Obtener el paquete kernel-version.src.rpm desde rpmfind o un CD. Instalando este paquete también
obtendremos una lista de dependencias tales como el compilador gcc o el paquete binutils si aún no han
sido instalados.
- Copiar la configuración del kernel que coincida con nuestra arquitectura en el directorio actual y
renombrarlo a .config
- Ejecutar
make oldconfig
- Editar el archivo Makefile y asegurarse que la versión no sea la misma que el kernel actual. Podemos
obtener información del kernel actual en ejecución con el comando uname –a.
- Ejecutar:
- Cuando salimos del programa el archivo .config es modificado pero los cambios aún no se reflejarán en
el resto del código fuente. A continuación debemos ejecutar:
make dep
- Finalmente para forzar a que los archivos objeto (.o) sean compilados según los últimos cambios
realizados debemos eliminarlos con:
make clean
- Los módulos están ahora instalados en el directorio /lib/modules/version. El kernel es llamado ahora
bzImage y está en el directorio:
/usr/src/linux/arch/i386/boot/
2. Dado que instalamos el paquete kernel-version.src.rpm podemos ahora usar este paquete y
recompilar un kernel preconfigurado para RedHat. Nótese que aunque no se requiere intervención del
usuario no será posible modificar el menu .config.
Arrancando Linux
Descripción
Dar una mirada más cercana al proceso de arranque ayuda a poder comprender mejor cualquier
problema o inconveniente que pueda darse tanto con el hardware así como con funciones
administrativas.
Primero nos enfocaremos en el rol del programa init y su configuración asociada en el archivo /etc/inittab.
El rol de LILO en el momento del arranque es estudiado en mayor profundidad. Finalmente pasaremos a
resumir el proceso de arranque. El documento “From Power to Bash Prompt” escrito por Greg O'Keefe así
como las páginas man de boot(7) son buenas referencias para este módulo.
A diferencia de la mayoría de sistemas operativos no-UNIX que solamente tienen dos modos funcionales
(ON y OFF), los sistemas UNIX incluido Linux tienen diferentes niveles de arranque tales como el nivel de
“mantenimiento” o “multiusuario”, etc. Los niveles de arranque son numerados del 0 al 6.
Tanto init como telinit son usados para cambiar de un nivel a otro. Recordar que init es el primer programa
ejecutado luego de que el kernel ha sido inicializado en el arranque. El PID para el proceso init siempre es
1.
En cada nivel de arranque el sistema arrancará o detendrá una serie de servicios. Estos programas son
guardados en /etc/rc.d/init.d. Este directorio contiene todos los servicios que el sistema puede requerir. Una
vez que estos programas son ejecutados ellos permanecerán activos hasta que un nuevo nivel de arranque
sea invocado. Los siguientes servicios son también llamados demonios.
/etc/rc.d/init.d/httpd restart
Cuando trabajamos con niveles de arranque se ha de instruir a una serie de programas iniciarse y a otros
tantos detenerse. Digamos que deseamos pasar al runlevel 2 tipearíamos lo siguiente:
/sbin/init 2
Esto forzaría a init a leer su archivo de configuración /etc/inittab para saber qué sucedería en este nivel.
En particular (asumiento que estamos cambiándonos al runlevel 2) la siguiente línea en inittab es ejecutada:
l2:wait:/etc/rc.d/rc 2
Si miramos en el archivo /etc/inittab la línea del comando “/etc/rc.d/rcn N” inicia todos los servicios en el
directorio /etc/rc.d/rcN.d que empiecen con una letra S y detendrá aquellos servicios que empiecen con una
letra K. Estos servicios son enlaces simbólicos apuntando a los rc-scrips en el directorio /etc/rc.d/init.d.
Si deseamos que un proceso no corra en un runlevel N determinado podemos eliminar el enlace simbólico
correspondientes en /etc/rc.d/rN.d empezando con una K.
2. El archivo inittab
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
-----------------------snip----------------------------------
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
-----------------------snip----------------------------------
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
El campo id puede ser cualquier cosa. Si un runlevel es especificado entonces el comando y la accion
requerida serán ejecutadas solamente en un runlevel específico. Si ningún número es especificado entoncs
la línea es ejecutada en cualquier runlevel.
El runlevel por defecto: esto es configurado al inicio del archivo con el identificador id y la acción
initdefault. Nótese que ningún comando es especificado. Esta línea simplemente le dice a init cuál es el
runlevel por defecto.
Primer programa invocado por init: /etc/rc.d/rc.sysinit. Este script configura los valores por defecto del
sistema tales como la variable de entorno PATH, determina si se activará el soporte de red, el nombre del
host, etc.
Servicios del runlevel por defecto: Si el runlevel por defecto es 3 entonces solamente la línea “l3” será
ejecutada. La acción es “wait”, ningún otro programa es ejecutado hasta que todos los servicios en el
runlevel 3 estén ya en ejecución.
Las terminales getty: Las líneas con identificadores (id) del 1 al 6 inicializan las terminales virtuales. Es
aquí donde se pueden alterar el número de terminales.
Runlevel 5: La línea final en inittab ejecuta el gestor de pantalla (Display Manager) si el runlevel 5 es
alcanzado.
Observaciones:
1. Podemos configurar un módem para la escucha de conexiones en inittab. Si el módem está enlazado a
/dev/ttyS1 entonces la siguiente línea permitirá conexión de datos (no fax) luego de dos marcados:
2. Cuando realizemos cambios a /etc/inittab necesitaremos forzar a que init relea su fichero de
configuración. Esto es posible de la siguiente forma:
/sbin/init q
La información necesitada por el gestor es actualizada por /sbin/lilo (el instalador del gestor de arranque)
que lee su fichero de configuración /etc/lilo.conf.
Durante el arranque LILO necesita conocer información esencial tal como dónde se encuentra el kernel
(usualmente en /boot) y dónde se aloja la partición raíz.
LILO no entiende la estructura de un sistema de archivos o dónde se encuentran los archivos. Solamente
entiende ubicaciones o zonas de un disco físico. Si estamos instalando una segunda distribución de Linux B
que no está en ejecución mientras configuramos lilo.conf, entonces necesitaremos montar la partición que
contenga el directorio /boot de dicha distribución B. También debemos mantener un registro de la ubicación
de la partición B.
Parámetros de init:
Asímismo, LILO puede pasar los parámetros del runlevel a init. Una vez que el kernel ha sido cargado, init
toma el control del proceso de arranque. Si ningún parámetro se le ha pasado entonces init iniciará con el
runlevel por defecto especificado en /etc/inittab.
Boot: linux s
Los parámetros para el kernel pueden ser pasados a través del prompt de LILO o especificados en
/etc/lilo.conf con la directiva append.
Ejemplos
append= "pci=bisoirq"
append=”ram=16M”
append=”/dev/hdc=ide-scsi” (for CD writers)
Los parámetros pasados al kernel en el momento del arranque son destinados generalmente para los
módulos compilados y que a menudo facilitan la detección de hardware.
Durante el arranque todos los mensajes del kernel son guardados en /var/log/dmesg por defecto. Este
archivo puede ser leido o impreso en la salida estándar con el comando dmesg
Si un initial ramdisk es especificado es cargado aquí. Los módulos son insertados del initial ramdisk.
El kernel entonces monta el sistema de archivos raíz (/) de acuerdo con la configuración que recibe de LILO
(usualmente read-only).
init lee el archivo /etc/inittab y sigue sus instrucciones. En particular rc.sysinit es ejecutado. Un chequeo
(fsck) es realizado a los sistemas de archivos de acuerdo a las configuraciones respectivas en /etc/fstab.
Luego init va al runlevel por defecto, los procesos getty se inicial y el proceso de arranque culmina.
Luego /bin/login le pide al usuario que ingrese su contraseña; el usuario la tipea y presiona Enter.
5. Ejercicios
Dar una mirada a la página man boot(7), cubre la mayoría de lo descrito en este módulo.
6. Use las herramientas chkconfig o ntsysv para deshabilitar el demonio sshd en los runlevels 2, 3, 4, y 5.
Verificar que los enlaces simbólicos en los directorios rc2.d, rc3.d, rc4.d y rc5.d hayan cambiado.
7. Reiniciar el sistema. En el prompt de arranque pasar el parámetro apropiado init= para saltar /sbin/init e
iniciar solamente una sesión de bash.
El comando useradd agrega nuevos usuarios al sistema y generalmente el enlace simbólico useradd apunta
a él.
Sintaxis:
useradd [opciones] nombre-de-login
useradd rufus
Los valores por defecto serán usados cuando ninguna opción es especificada. Podemos ver estos valores
por defecto con useradd –D.
Para permitir al usuario acceder a su cuenta el administrador debe asignarle una contraseña al usuario
usando la herramienta passwd.
Sintaxis:
passwd login-name
Estos pasos crean un nuevo usuario. Esto también ha definido el entorno del usuario tal como el directorio
personal y la shell por defecto. Al usuario también se le ha asignado un grupo, su grupo primario.
Cada nuevo usuario creado es asignado a un grupo inicial (o primario). Dos convenciones existen.
Tradicionalmente este grupo primario es el mismo para todos los usuarios y es llamado users con un ID de
grupo (GID) de 100. Muchas distribuciones de Linux se adhieren a esta convención.
Como una consecuencia, cuando se usa el esquema tradicional para los grupos el umask (ver LPI 101) es
asignado a 022, mientras que en el esquema UPG el umask es asignado a 002.
Pertenencia a grupos:
Un usuario puede pertenecer a cualquier cantidad de grupos. Sin embargo en un instante determinado
(cuando se crea un archivo por ejemplo) solamente un grupo es el grupo efectivo.
La lista de todos los grupos a los que un usuario pertenece es obtenida con los comandos groups o id.
id
➔ ► uid=0(root) gid=0(root) groups=0(root), 1(bin), 2(daemon), 3(sys),
4(adm), 6(disk), 10(wheel), 600(sales)
groups
➔ ► root bin daemon sys adm disk wheel sales
Uniéndose a un grupo:
Unirse a un grupo cambia el grupo efectivo de un usuario e inicia una nueva sesión desde la cual el usuario
puede cerrar sesión. Esto es realizado con el comando newgrp.
newgrp sales
Si el comando groups es ejecutado, el primer grupo en la lista ya no sería root sino sales.
La herramienta groupadd es usada para administrar grupos. Esto agregará una entrada en el archivo
/etc/group.
groupadd devel
Las tareas administrativas sobre grupos puede realizada con la herramienta gpasswd. Uno puede agregar
(-a) o eliminar (-d) usuarios de un grupo y asignarle un administrador (-A). Esta herramienta fue
originalmente diseñada para asignar únicamente una contraseña a un grupo, permitiendo que los miembros
del mismo grupo puedan iniciar sesión con la misma contraseña. Por razones de seguridad esta
característica ya no trabaja más.
3. Archivos de configuración
Los nombres de todos los usuarios son almacenados en /etc/passwd. Este archivo tiene la siguiente
estructura:
Estos 7 campos están separados por dos puntos (:), tal como el ejemplo de abajo:
george:$1$K05gMbOv$b7ryoKGTd2hDrW2sT.h:Dr G Micheal:/home/georges:/bin/bash
Para poder esconder la contraseña encriptada de los usuarios ordinarios, debería usarse un archivo shadow.
El archivo /etc/shadow contiene los nombres de usuario y las contraseñas encriptadas siendo leíble este
archivo solamente por el usuario root.
Esto colocará una 'x' en el segundo campo del archivo /etc/passwd y creará el archivo /etc/shadow. Si ya no
deseamos usar contraseñas shadow entonces podemos usar el siguiente comando:
Advertencia: Cuando se usen contraseñas shadow el archivo /etc/passwd puede ser leíble por todos (644)
y el archivo /etc/shadow debe ser más estricto (600 o incluso 400). Sin embargo cuando se usa pwunconv
asegurarse de cambiar los permisos según lo recomendado.
De la misma manera, la información sobre los grupos es almacenada en /etc/group. Este archivo contiene 4
campos separados por dos puntos (:).
1. Nombre de grupo
2. El password de grupo (o x si gshadow existe)
3. El GID
4. Lista de miembros separada por comas (,)
Tal como para los usuarios existe un archivo /etc/gshadow que es creado cuando se usan contraseñas
shadow para los grupos. Las herramientas usadas para cambiar entre archivos de contraseñas shadow y
no-shadow para los grupos son las que siguen:
• El directorio de mail:
MAIL_DIR
El directorio /etc/skel contiene archivos por defecto que serán copiados al directorio personal de los usuarios
recién creados: .bashrc, .bash_profiles, ...
4. Opciones de comandos
useradd (opciones)
groupadd (opciones)
-g Asigna un GID
Todas las opciones disponibles mientras se crean usuarios o grupos pueden ser modificadas. La
herramienta usermod tiene las siguientes opciones:
usermod (opciones)
Asímismo, podemos cambiar detalles sobre un grupo con groupmod. Existen principalmente dos opciones:
groupmod (opciones)
-g El GID
-n El nombre de grupo
• Una cuenta de usuario puede ser bloqueada colocando un signo de exclamación (!) como prefijo a la
contraseña del usuario. Esto puede ser realizado también con las siguientes opciones de comando:
Bloquear Desbloquear
passwd -l passwd -u
usermod -L usermod -U
• Una opción menos práctica es remover la contraseña por completo con passwd -d
• Finalmente, uno puede asignar /bin/false como la shell por defecto del usuario en /etc/passwd
Por defecto una contraseña de usuario es válida por 99999 días, esto es equivalente a 2739 años (el valor
por defecto de PASS_MAX_DAYS). El usuario recibe una advertencia 7 días antes que su contraseña ha de
expirar (el valor por defecto de PASS_WARN_AGE) con un mensaje como el siguiente cuando inicia sesión:
Existe otro número de políticas de expiración llamado PASS_MIN_DAYS. Este es el mínimo número de días
que un usuario debe esperar antes que pueda cambiar su contraseña, es asignado a cero por defecto.
La primera opción -l lista las políticas de expiración actuales para el usuario. Solamente discutiremos la
opción -E. Esto bloquea una cuenta en una fecha determinada. La fecha es asignada en días UNIX o en el
formato YYYY/MM/DD.
Nótese que todos estos valores son almacenados en /etc/shadow, y pueden ser editados directamente.
Una cuenta de usuario puede ser removida con el comando userdel. Para asegurarse que el directorio
personal del usuario es también eliminado debe agregarse la opción -r al comando.
userdel -r jade
6. Ejercicios
1. Creando usuarios
Usar adduser para crear un usuario llamado tux con un UID de 600 y un GID de 550.
3. Archivos de configuración
Usar useradd -D para cambiar las configuraciones por defecto del sistema de modo tal que a cada nuevo
usuario creado se le asignará /bin/sh en lugar de /bin/bash como shell por defecto.
Editar /etc/login.defs y cambiar el valor de PASS_MAX_DAYS de modo tal que los nuevos usuarios creados
necesiten cambiar su contraseña cada 5 días.
Configuración de red
1. La interfaz de red
La tarjeta interfaz de red (NIC, Network Interface Card) debe ser soportada por el kernel. Para determinar
qué tarjeta estamos usando se puede obtener información desde dmesg, /proc/interrupts, lsmod o
/etc/modules.conf
Ejemplo:
dmesg
► Linux Tulip driver version 0.9.14 (February 20, 2001)
PCI: Enabling device 00:0f.0 (0004 -> 0007)
PCI: Found IRQ 10 for device 00:0f.0
eth0: Lite-On 82c168 PNIC rev 32 at 0xf800, 00:A0:CC:D3:6E:0F, IRQ 10.
eth0: MII transceiver #1 config 3000 status 7829 advertising 01e1.
cat /proc/interrupts
► 0: 8729602 XT-PIC timer
1: 4 XT-PIC keyboard
2: 0 XT-PIC cascade
7: 0 XT-PIC parport0
8: 1 XT-PIC rtc
10: 622417 XT-PIC eth0
11: 0 XT-PIC usb-uhci
14: 143040 XT-PIC ide0
15: 180 XT-PIC ide1
/sbin/lsmod
► Module Size Used by
tulip 37360 1 (autoclean)
Del ejemplo de arriba vemos que el chipset de la tarjeta de red es Tulip, la dirección I/O es 0xf800 y la IRQ
es 10. Esta información puede ser usada si el módulo incorrecto es cargado o si los recursos (I/O o IRQ) no
están disponibles.
Esta información puede ser usada para insertar un módulo con una diferente dirección I/O (usando
modprobe o insmod) o puede ser guardado en /etc/modules.conf (esto guardará los cambios para la
próxima vez que se reinicie el sistema).
nameserver 192.168.1.108
nameserver 192.168.1.1
search soportelinux.com.pe
• Uno puede tambier asociar un nombre a una interfaz de red. Esto es realizado de modo diferente
entre las distribuciones.
• /etc/sysconfig/network define si la red debe ser iniciada o no. (puede también contener la variable
the HOSTNAME)
NETWORKING=yes
HOSTNAME=pclab2.soportelinux.com.pe
GATEWAY=192.168.254.1
GATEWAYDEV=
DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.254.255
IPADDR=192.168.254.201
NETWORK=192.168.254.0
ONBOOT=yes
USERCTL=no
Como resultado la interfaz de red puede ser encendida o apagada sin perder esta información mientras el
módulo del kernel siga cargado.
Otra herramienta es ifup. Esta herramienta lee la configuración del sistema en /etc/sysconfig y asigna los
valores almacenados para una interfaz determinada. El script para eth0 es llamado ifcfg-eth0 y ha de ser
configurado. Si un protocolo de arranque tal como DHCP es definido entonces ifup iniciará la negociación de
dicho protocolo.
/sbin/ifup eth0
/sbin/ifup ppp0
/sbin/ifdown eth0
En el momento del arranque la interfaz de red Ethernet es inicializada con el script /etc/rc.d/init.d/network.
Todos los archivos de configuración de red relevantes son almacenados en el directorio /etc/sysconfig.
Además el script también lee opciones de sysctl en /etc/sysctl.conf, es aquí donde puede configurarse el
sistema como un router (permitir el reenvío IP o IP Forwarding en el kernel). Por ejemplo la línea:
net.ipv4.ip_forward = 1
/etc/rc.d/init.d/network restart
Las siguientes herramientas pueden solicitar una nueva dirección IP a un servidor DHCP:
pump
dhcpclient
Un demonio cliente existe y es llamado dhcpcd (no confundir con el demonio del servidor DHCP llamado
dhcpd)
4. Enrutado
Ejemplos de enrutamiento:
Agregar una ruta estática a la red 10.0.0.0 a través del dispositivo eth1 y usar 192.168.1.108 como el
gateway para dicha red:
/sbin/route -n
► Kernel IP routing table
Destination Gateway Genmask Iface
192.168.1.0 0.0.0.0 255.255.255.0 eth0
10.1.8.0 192.168.1.108 255.0.0.0 eth1
127.0.0.0 0.0.0.0 255.0.0.0 lo
0.0.0.0 192.168.1.1 0.0.0.0 eth0
Default Gateway:
En el ejemplo anterior, el campo Destination contiene una lista de redes. En particular, 0.0.0.0 significa 'a
donde sea'. Con esto en mente, existen dos direcciones IP en el campo Gateway. ¿Cuál de los dos es el
default gateway?
Para evitar tener que ingresar rutas estáticas a mano los demonios especiales gated o routed son
ejecutados para actualizar dinámicamente las tablas de enrutamiento a través de una red.
Si pertenecemos a la red 192.168.10.0 y agregamos una ruta a la red 192.168.1.0 podemos notar que
las máquinas en esta última red no responden. Esto es porque ninguna ruta ha sido asignada desde la red
192.168.1.0 hacia nuestro host. Este problema es resuelto con enrutamiento dinámico.
Un escenario de enrutamiento:
Aquí hay una lista corta de herramientas útiles cuando se presenten inconvenientes con las conexiones de
red.
ping host:
Esta herramienta envia un datagrama ICMP ECHO_REQUEST a un host y espera un datagrama ICMP
ECHO_RESPONSE.
netstat:
Podemos obtener información de las conexiones de red actuales, la tabla de enrutamiento o estadísticas de
la interfaz de red dependiendo de las opciones usadas.
En la lista de arriba podemos ver que el host local ha establecido conexiones en los puertos 139, 22 y 80.
arp:
Ejemplo:
arp
► Address HWtype HWaddress Iface
192.168.1.71 ether 00:04:C1:D7:CA:2D eth0
traceroute:
Muestra la ruta tomada desde el host local hacia el host destino. traceroute fuerza a que las enrutadores
intermedios envíen de regreso mensajes de error (ICMP TIME_EXCEEDED) de manera deliberada asignando
el valor TTL (time to live) bastante bajo. Luego de la notificación TIME_EXCEEDED traceroute incrementa el
valor TTL forzando al siguiente paquete a llegar más lejos hasta que alcance su destino.
Ejemplo:
CMD: /usr/sbin/traceroute -n www.redhat.com
► traceroute: Warning: www.redhat.com has multiple addresses; using
216.148.218.197
traceroute to www.redhat.com (216.148.218.197), 30 hops max, 38 byte
packets
1 192.168.1.1 0.440 ms 0.347 ms 0.341 ms
---- snip ---
14 12.122.2.145 112.116 ms 110.908 ms 112.002 ms
15 12.122.2.74 156.629 ms 157.028 ms 156.857 ms
16 12.122.255.222 156.867 ms 156.641 ms 156.623 ms
17 216.148.209.66 159.982 ms 157.462 ms 158.537 ms
18 216.148.218.197 157.395 ms 156.789 ms 156.080 ms
6. Ejercicios
1. En la sección “escenario de enrutamiento” de este capítulo mostrar la tabla de enrutamiento para el
gateway de la LAN.
Listar los módulos del kernel. Asegurarse que el módulo de eth0 sea cargado (chequar /etc/modules.conf).
Verificar que podemos iniciar nuevamente la interfaz de red sin ingresar información nueva:
4. Detener la interfaz de red y descargar el módulo del kernel (rmmod module). ¿Qué sucede si repetimos el
paso 3(ii)?
-- Habilitar IP forwarding:
-- Iniciar un alias de interfaz de red (esto trabajará como una segunda interfaz).
-- Agregar una ruta a la otra red usando la máquina gateway (necsitaremos conocer la configuración
de eth0 o eth0:1 de este gateway dependiendo en qué red nos encontremos)
Redes TCP/IP
1. Números binarios
Números binarios
Esto significa que un número binario puede ser fácilmente convertido a notación decimal como sigue:
10000000 = 27 = 128
01000000 = 26 = 64
00100000 = 25 = 32
00010000 = 24 = 16
00001000 = 23 = 8
00000100 = 22 = 4
00000010 = 21 = 2
00000001 = 20 = 1
La dirección IP:
La dirección IP asignada a una interfaz de red consta de 4 bytes (4 veces 8 bits) separados por puntos; esto
para el caso de IPv4.
Decimal Binario
192.168.1.1 11000000.10101000.00000001.00000001
La máscara de red:
Una máscara de red es usada para definir qué parte de la dirección IP es usada para la red, es también
llamada máscara de subred.
Ejemplo: Con una máscara de red de 16-bit las siguientes direcciones IP están en la misma red:
De la misma manera, cualquier bit que sea cambiado fuera de la caja cambiará la dirección de la interfaz de
red sin cambiarse de red.
Por ejemplo con una máscara de 24-bit las dos direcciones de IP de abajo estarían en diferentes redes:
La dirección de red:
Cada red tiene un número que es necesitado cuando configuramos el enrutamiento del sistema. El número
de red es una porción de la dirección IP. La porción de la dirección del host es reemplazado con ceros.
Dirección de broadcast:
La dirección de broadcast de una máquina es un rango de hosts/interfaces que pueden ser accedidos en la
misma red. Por ejemplo un host con una dirección de broadcast 10.1.255.255 podrá acceder a cualquier
máquina con una dirección IP de la forma 10.1.x.x.
Operaciones lógicas simples pueden ser aplicadas a los números de broadcast, red y máscara.
Para obtener la dirección de red a partir de una dirección IP simplemente aplicar la operación AND entre la
IP y la máscara.
Ejemplo:
Tomemos la IP 192.168.3.5 con una máscara 255.255.255.0. Podemos realizar las siguientes operaciones:
11000000.10101000.00000011.00000000 (192.168.3.0)
Está claro del ejemplo de arriba que la dirección IP junto con la máscara de red es suficiente para obtener
todo el resto de información relativo a la red y el host.
3. Clases de red
● Direcciones IP reservadas
Para redes privadas un cierto número de direcciones IP son designadas las cuales jamás son usadas en
Internet. Estas direcciones IP son típicamente usadas para redes LAN. La siguiente tabla muestra los tipos
de clases de red privados/reservados.
● Clases de IP
Por ejemplo una máscara regular de clase A 255.0.0.0 puede ser alterada para permitir que el 1er. bit del
segundo byte sea parte de la red. Esto resulta en una dirección de red de 9-bit y número IP de host de 23-bit.
11111111.10000000.00000000.00000000 or 255.128.0.0
Otra forma para indicar que una dirección de red de 9-bit está en uso es mostrar el número IP 10.1.8.1 como
10.1.8.1/9
Tomaremos el ejemplo de una dirección de clase C 192.168.1.0. Investigamos una red de 25-bit y luego una
de 26-bit.
Red de 25-bit
Dado que Red = IP AND Máscara,notamos a partir de la máscara que dos direcciones de red pueden ser
formadas dependiendo del rango de hosts:
1. Las direcciones de hosts en el rango 192.168.1.0xxxxxxx resultan en una red 192.168.1.0. Decimos que
el número de red es 0.
2. Las direcciones de hosts en el rango 192.168.1.1xxxxxxx resultan en una red 192.168.1.128. Decimos
que el número de red es 128.
Tabla2: En ambos casos la sustitución de x por ceros o unos tienen un significado especial
Dado que la dirección de host es de una longitud de 7-bit y excluimos 2 valores (todos 1 y todos cero)
entonces tenemos 27 – 2 = 126 hosts en cada red con un total de 252 hosts.
Nótese ue si la máscara de subred por defecto 255.255.255.0 es usada tenemos 254 direcciones de host
disponibles. En el ejemplo de arriba 192.168.1.127 y 192.168.1.128 tienen un significado especial y ese es el
por qué solamente 252 direcciones de host pueden ser usadas.
Red de 26-bit
Aquí de nuevo dependiendo de la dirección de host 4 direcciones de red diferentes pueden ser determinadas
con la regla AND.
Sustituyendo las x con 1s en los números de arriba nos da la dirección de broadcast correspondiente:
5. La Pila TCP/IP
TCP/IP es una pila de protocolos usados en Internet. Se dice que el nombre describe varios protocolos que
son necesitados para poder transportar datos a través de la red. Los dos principales protocolos son TCP
Transmission Control Protocol e IP Internet Protocol.
Para simplificar, IP se encarga del manejo de paquetes o datagramas únicamente (dirección de destino,
tamaño, ...) mientras que TCP se ocupa de la conexión entre dos hosts. La idea es que los protocolos se
fíen unos de otros, cada uno especializándose en sus tareas. En este contexto uno se refiere simplemente a
la pila TCP/IP.
Los protocolos intervienen por lo tanto en varias capas del proceso de la comunicación en red.
● Descripción de protocolos
Internet Protocol; el protocolo IP es el transporte para datos TCP, UDP, y ICMP. IP
IP provee un servicio no orientado a conexión poco fiable, permitiendo que toda la
integridad sea controlada por uno de los protocolos de capas superiores, Ejm. TCP, o
algunos dispositivos específicos de aplicación. No se garantiza que un datagrama
alcance el host destino usando solamente protocolo IP. El protocolo IP maneja el
direccionamiento y enrutamiento entre redes. IP es el servicio de entrega de
datagramas.
Dado que el campo del numero de puerto es un digito de 16-bit, existen 65535 numeros disponibles.
Numeros desde 1 hasta 1023 son puertos privilegiados y son reservados para servicios que se ejecuten por
el usuario root. La mayoria de aplicaciones conocidas utilizan algunos de estos puertos.
Veremos la salida de un escaneo de puertos (portscans). Tener cuidado de que escaneo de puertos no
autorizados es ilegal a pesar de ello muchas personal lo utilizan.
Esto muestra los puertos abiertos, estos puertos estan siendo usados por alguna aplicacion.
ftp-data 20/tcp
ftp 21/tcp
telnet 23/tcp
smtp 25/tcp mail
domain 53/tcp
domain 53/udp
http 80/tcp # www is used by some broken
www 80/tcp # progs, http is more correct
pop-2 109/tcp # PostOffice V.2
pop-3 110/tcp # PostOffice V.3
sunrpc 111/tcp
sftp 115/tcp
uucp-path 117/tcp
nntp 119/tcp usenet # Network News Transfer
ntp 123/tcp # Network Time Protocol
netbios-ns 137/tcp nbns
netbios-ns 137/udp nbns
netbios-dgm 138/tcp nbdgm
netbios-dgm 138/udp nbdgm
netbios-ssn 139/tcp nbssn
imap 143/tcp # imap network mail protocol
NeWS 144/tcp news # Window System
snmp 161/udp
snmp-trap 162/udp
7. Ejercicios
Registrando un servicio con xinetd
1. Escribe un script en bash que muestre con el comando echo “Welcome” a la salida stdout. Grabarlo en
/usr/sbin/hi
2. En /etc/xinetd.d crear un nuevo archivo llamdo fudge con lo siguiente:
service fudge
{
socket_type = stream
server =/usr/sbin/hi
user = root
wait = no
disable = no
}
3. Agregar un servicio llamado fudge en /etc/services que use el puerto 60000.
4. Reiniciar xinetd y ejecutar el comando telnet al puerto 60000
5. Te han asignado un rango de Ips en la red 83.10.11.0/27.
Cuantas redes tienen los mismos 4 primeros bytes que tu?
Cuantos hosts existen en tu red?
Cual es la direccion broadcast para esta primera red?
Servicios de Red
Servicios de red pueden ser ejecutados como aplicaciones separadas(standalone), las cuales atienden
conexiones y manejan clientes directamente o pueden depender de un demonio de red inetd (antiguo) o
xinetd.
El demonio es iniciado en el momento del arranque y atiende a conexiones en puertos especificos. Esto
permite al servidor ejecutar un demonio de red especifico solo cuando es necesitado.
Por ejemplo, el servicio telnet tiene un demonio /usr/sbin/in.telnetd el cual maneja las sesiones telnet . En
vez de ejecutar este demonio todo el tiempo inetd es instruido a escuchar en el puerto 23. Estas
instrucciones estan fijadas en /etc/inetd.conf.
Ejemplo:
Aviso: El archivo /etc/services es usado para crear la correspondencia entre el nombre del servicio y el
numero de puertos del socket. Los campos en el archivo services son los siguientes:
2. El Demonio xinetd
Esta es la version mas reciente de inetd. El demonio tcpd ya no se encuentra usado, en vez de este ultimo
el demonio xinetd lo hace todo. La configuracion es realizada a traves del archivo /etc/xinetd.conf o
editando los archivos individuales en /etc/xinetd.d/ que corresponden a los servicios que estan siendo
monitoreados por xinetd. Es posible migrar desde el antiguo archivo de configuracion inetd a los archivos
de configuracion del moderno xinetd.
3. TCP wrappers
Si los programas han sido compilados con libwrap entonces estos pueden ser listados en /etc/hosts.allow y
/etc/hosts.deny. La libreria libwrap verificara estas lineas para buscar coincidencias con los hosts.
Se puede utilizar estos archivos para reportar servicios no autorizados. Esto puede ayudar como un sistema
de alerta en primera instancia. Aqui algunos ejemplos.
• /etc/hosts.allow
in.telnetd: LOCAL, .my.domain
• /etc/hosts.deny
in.telnetd: ALL : spawn (/usr/sbin/safe_finger –l @%h | mail root) &
• /etc/hosts.allow
in.telnetd: ALL : twist /dtk/Telnetd.pl
El ultimo ejemplo viene de dtk (Deception Tool Kit) que puede ser descargado desde
http://all.net/dtk/download.html
4. Configurando un NFS
• Configuracion de cliente
Un servidor NFS necesita portmap para que se ejecute antes de empezar el servidor nfs. El servidor nfs
deberia ser inicializado o parado con el script /etc/rc.d/init.d/nfs.
El archivo de configuracion principal es /etc/exports.
El directorio /usr/local/docs es exportado a todos los hosts como directorio de solo lectura, y lectura-escritura
a todos los hosts en el dominio .local.org
La opcion por defecto root_squash la cual evita que el usuario root (uid = 0) en el cliente tenga acceso al
recurso compartido en el servidor puede ser cambiado con la opcion no_root_squash .
En el archivo /etc/exports hace referencia a los hosts que coincidan con *.machine.com donde el archivo
/etc/hosts.allow deniega los hosts que coincidan con .machine.com
01111000
Si el archivo /etc/exports ha sido cambios entonces la utilidad exportfs debe ser ejecutada. Si los directorios
existentes en /etc/exportfs son modificados entonces es necesario que desmontemos todos los recursos
compartidos por nfs antes de remontar todo. Directorios individuales pueden ser montados o desmontados
con exportfs.
5. SMB y NMB
Maquinas con Linux pueden pueden acceder y proveer recursos compartidos de Windows (directorios e
impresoras). El protocolo usado para esto es el MS Windows Server Message Block SMB. Samba es la
herramienta mas comun de linux que provee software cliente y servidor.
La utilidad smbclient es usada para listar recursos compartidos. Directorios remotos son tipicamente
montados con smbmount, a traves de ‘mount –t smbfs’ puede tambien hacer lo mismo.
Ejemplos:
smbclient -M win98desk
El servidor Samba esta configurado con el archivo /etc/smb.conf. El servidor es parado y empezado con el
script /etc/rc.d/init.d/smb. Notar que smb tambien inicia el servicio NMB. Este es el NetBIOS Message
Block el cual habilita la resolucion de nombres en entornos Windows.
Si instalas el paquete swat entonces podras administrar el servidor samba via web conectandose por http al
puerto 901.
AVISO
La configuracion /etc/samba/smb.conf es una buena fuente de documentacion. Todas las
opciones son explicadas y pueden ser activadas borrando el caracter de comentario `;`
Tambien leer la pagina man smb.conf(5)
6. Servicios DNS
Los Clientes
Cuando un programa necesita que se resuelva el nombre de un host este usa un mecanismo llamado
resolvedor (resolver). El resolvedor primero consulta el archivo /etc/nsswitch (antes /etc/host.conf) y
determina cual metodo deberia ser usado para resolver los nombres de host (archivos locales, servidor de
nombres, NIS o servidor LDAP)
Ejemplo (/etc/nsswitch):
La primera linea indica los archivos (aqui /etc/hosts) que deberian ser consultados primero y luego el
servidor DNS si este falla. La segunda linea indica usar el archivo /etc/network para informacion de la red.
Con un numero pequeño de computadoras en red es posible convertir numeros IP decimales en nombres
usando el archivo /etc/hosts. Los campos son los siguientes:
192.168.1.233 io io.my.domain
61.20.187.42 callisto callisto.physics.edu
El archivo /etc/resolv.conf
Si el resolvedor necesita usar un servidor de nombres de dominio (DNS) entonces este consultara el archivo
/etc/resolv.conf para una lista de servidores disponibles para hacer consultas.
Servidores de nombre tienen una estructura jerarquica. Dependiendo en el lugar donde se encuentre en el
fully qualified domain name (FQDM) un dominio es llamado de primer nivel (top-level), segundo nivel o tercer
nivel.
Los dominios pueden ser divididos en subdominios. Esto limita la cantidad de informacion necesitada para
administrar un dominio. Las Zonas tienen un servidor de nombres de dominio maestro (tambien llamado
DNS primario) y uno o varios servidores de nombres de dominio esclavo (tambien llamado secundario).
La administracion de un servidor de nombres consiste en actualizar la informacion acerca de una zona en
particular. Los servidores maestros (master) se les llama autoritarios.
En antiguas versiones de BIND (antes de la version 8) el archivo de configuracion era /etc/named.boot. Con
la version 8 de BIND el archivo /etc/named.conf lo reemplazo. Una puede usar la utilidad named-
bootconf.pl para convertir antiguos archivos de configuracion.
directory /var/named
cache . named.ca
primary myco.org named.myco
primary 0.0.127.in-addr.arp named.local
primary 1.168.192.in-addr.arp named.rev
En /etc/named.conf:
Aplicando estos cambios a los archivos de configuracion de BIND4 generaremos los mismo para BIND8 y
BIND9 como esta a continuacion.
options {
directory “/var/named”;
};
zone “.” {
type hint;
file “named.ca”;
};
zone “myco.org” {
type master;
file “named.myco”;
};
zone “1.168.192.in-addr.arp” {
type master;
file “named.rev”;
};
zone “0.0.127.in-addr.arpa” {
type master;
file “named.local”;
};
Este es un archivo de zona muy simple pero nos da la suficiente informacion para entender el mecanismo
basico de un servidor de nombres.
La entrada @ significa que el archivo resolvera a la zona declarada en /etc/named.conf. Esto permite
cualquier archivo de zona ser usado como plantilla de zonas creadas posteriormente (ver los ejercicios).
@ IN SOA Inicio de autoridad (Start Of Authority). Identifica la zona seguida por las
opciones encerradas por parecentesis.
serial Es manualmente incrementado cuando la data es cambiada. Servidores
secundarios consultan al numero serial del servidor maestro. Si esta ha
cambiadom la zona entera es descargada
refresh Tiempo en segundos antes de que el servidor secundario deberia hacer
una consulta en el registro SOA del dominio primario. Este deberia
realizarse una vez al dia.
retry Intervalo de tiempo en segundos antes de intentar una transferencia de
una nueva zona si la descarga anterior ha fallado.
expire Tiempo despues del cual un servidor secundario desecha toda la data de
la zona si contacta al servidor primario. Deberia ser una vez a la semana
como minimo
minimum El tiempo minimo de la data en memoria. Por defecto es un dia (86400
segundos) pero deberia ser mas largo en redes estables.
El script sendmail el cual inicia y para el demonio sendmail esta usualmente localizado en el directorio
/etc/rc.d/init.d/.
alias: user
Cuando se realizan cambios en el archivo /etc/aliases el comando newaliases debe ejecutarse para
reconstruir la base de datos /etc/aliases.db.
Cuando el correo es aceptado por el servidor este es concatenado en un archivo simple con el nombre de
usuario. Estos archivos son almacenados en /var/spool/mail/. Dependiendo del MTA, un usuario puede
almacenar tambien estos mensajes en su directorio home o descargarlo en otra maquina.
Si es el servidor esta haciendo relay, o si la red es lenta y muchos mensajes estan siendo enviandos, el
correo es almacenado en la cola de correo /var/spool/mqueue. Se puede consultar la cola con la utilidad
mailq o sendmail –bp. Un administrador puede refrescar la cola del servidor con sendmail –q.
Finalmente para registrar un nombre de dominio como un direccion de correo valida, un registro MX se
necesita para ser agregado a la base de datos del DNS.
Por ejemplo si mail.company.com es un servidor de correo, entonces para que pueda aceptar correos
como joe@company.com se deberia hacer la siguiente configuracion:
8. El servidor Apache
Archivos de configuracion
ServerType standalone/inetd
ServerRoot “/etc/httpd”
<Directory “/var/www/cgi-bin”>
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
<VirtualHost 122.234.32.12>
DocumentRoot “/www/docs/server1”
ServerName virtual.mydomain.org
</VirtualHost>
Ejecucion de Apache
Los archivos de reporte principales estan en /var/log/httpd/. Es bastante util por razones de seguridad
revisar constantemente los archivos error_log y access_log.
9. Ejercicios
2. En /var/named:
cp 127.0.0.zone 192.168.2.zone
cp local.zone gogo.zone
3. Cambiar apropiadamente los cambios en el nuevo archivo de zona. Agregar el host llamado harissa.
Administracion de Apache
2. Verificar si apache esta respondiendo con telnet localhost 8080. Deberias obtener:
Trying 127.0.0.1...
Connected to localhost.linuxit.org.
Escape character is '^]'.
3. Fijar “StartServer” a 15. Reiniciar el httpd y revisar que 15 procesos hayan empezado (en vez de los 8
por defecto )
<VirtualHost new-IP>
DocumentRoot /var/www/html/virtual
ServerName www1
</VirtualHost>
En la mayoria de casos no se necesitara agregar usuarios smb al sistema para hacer esto. Simplemente
editar smb.conf y agregar lo siguiente:
[public]
comment = Example Shared Directory
path = /home/samba
guest ok = yes
writeable = yes
[global]
--- snip ---
printcap name = /etc/printcap
load printers = yes
[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
# Set public = yes to allow user 'guest account' to print
guest ok = yes
writable = no
printable = yes
Bash Scripting
1. El entorno bash
Variables
Cuando tipeas un comando en la consola el shell bash usara la variable PATH para encontrar cual
ejecutable en el sistema quieres ejecutar. Puedes revisar el valor de la variable usando el comando echo:
echo $PATH
/usr/bin:/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/sbin/:/usr/local/sbin/
De hecho muchas variables son necesitadas por el shell para ser acomodadas por cada entorno de usuario.
Por ejemplo PWD, HOME, TERM y DISPLAY son algunas variables.
VARIABLE=VALUE
Recuerda no poner ningun espacio alrededor del signo ‘=’. Una vez que una variable es declarada e
inicializada esta puede ser referenciada usando el simbolo de dolar al frente como se ve a continuacion:
echo $VARIABLE
Cuando una sesion de shell es empezada un numero de archivos de configuracion son leidos y la mayoria
de variables son fijadas.
Archivos de configuracion
Se puede distinguir entre archivos de configuracion los cuales se cargan al momento del logueo y aquellos
los cuales se cargan con cada sesion nueva de bash.
Aarchivos que se cargan en el momento del logueo son /etc/profile y ~/.bash_profile (el bash revisa
archivos alternativos tambien como ~/.profile).
El siguiente bash carga los archivos de control de ejecucion (runtime) ~/.bashrc y (si este existe)
/etc/bashrc.
Sintaxis de funciones:
function-name ()
{
command1;
command2;
}
Se puede testear cuales archivos estan siendo cargados agregando una linea echo Profile en
/etc/profile, y luego tipear:
bash -norc
bash -noprofile
Notar que cualquier sesion de bash puede heredar las variables globales del bash anterior definidas en
/etc/profile y ~/.bash_profile.
Un script de shell es una lista de instrucciones grabadas en un archivo plano. Solo 2 cosas son necesarias.
1. La primera linea del script debe ser #!/bin/bash (para un script de bash)
2. El archivo debe ser de lectura y ejecucion (con permisos 755 por ejemplo)
bash program-name
Variable insertadas desde la linea de comandos son referenciadas dentro del script como $1 para el primer
argumento, $2 para el segundo , etc …
#!/bin/bash
cat $1
Este script esta esperando un argumento, un archivo, y mostrara el contenido del archivo usando cat. Para
ejecutar este script en el archivo lilo.conf file, deberias ejecutar:
./mycat /etc/lilo.conf
#!/bin/bash
echo -n "Which file shall I display ?"
read
cat $REPLY
Variables Especiales
Variables especiales pueden ser solo referenciadas y son automaticamente fijadas por el bash. Estas son
las variables especiales mas comunes que puedes encontrar:
Para parametros posicionales $1, $2 etc … existe un operador shift el cual renombra cada parametro de
manera ciclica como esta a continuacion.
$2 se vuelve $1
$3 se vuelve $2 … etc
Esto puede ser resumido como $(n+1) $n
3. Evaluaciones Logicas
Las declaraciones logicas son evaluadas con el comando test o los corchetes [ ]. En ambos casos el
resultado es almacenado en la variable $? como se ve en:
Si la declaracion es verdadera entonces $? is 0
Si la declaracion es falsa entonces $? is not 0
Uno puede evaluar mas de una declaracion a la vez usando los operadores logicos || (OR) y && (AND)
desde la linea de comandos. Por ejemplo podrias testear si /bin/bash es un ejecutable y si /etc/inittab
existe:
Este es el mismo uso que si usaramos las opciones -o y -a sin el operador test por ejemplo
4. Bucles
loop si entonces
#!/bin/bash
if [ -x /bin/bash ] ; then
echo “The file /bin/bash is executable”
fi
loop mientras
#!/bin/bash
COUNTER=0
while [ $COUNTER -lt 100 ]; do
echo -n "#"
sleep 1
let COUNTER=COUNTER+1
done
Sintaxis:
#!/bin/bash
COUNTER=20
until [ $COUNTER -lt 10 ]; do
echo -n "#"
sleep 1
let COUNTER-=1
done
Sintaxis:
for VARIABLE in SET; do
command
done
#!/bin/bash
for line in `cat /etc/lilo.conf`; do
IMAGE=$(echo $line | grep image)
if [ “$IMAGE” != “” ]; then
echo Kernel configured to boot: $line
fi
done
Usando case
Sintaxis:
case $VARIABLE in
CHOICE command ;;
CHOICE command ;;
esac
Usando select
Sintaxis:
select VARIABLE in SET; do
if [ $VARIABLE = CHOICE ]; then
command
fi
if [ $VARIABLE = CHOICE ]; then
command
fi
Operaciones binarias
Agregando o multiplicando numeros juntos puede ser alcanzado usando el comando expr o el constructor
$(( )) construct.
Ejemplo:
Operadores de testeo:
Numeros Cadenas
-lt <
-gt >
-le <=
-ge >=
-eq =
-ne !=
7. Ejercicios
1. En la linea de comandos exportar la variable TEST
export TEST=old
2. Escribir el script
#!/bin/bash
echo old variable: $TEST
export $TEST=new
echo exported variable: $TEST
4. El siguiente script llamado test_shell mostrara el PID del shell que esta interpretando
test_shell
#!/bin/bash
if [ -n $(echo $0 |grep test) ]; then
echo The PID of the interpreter is: $$
else
Seguridad Basica
1. Seguridad Local
La BIOS
Si alguno tiene acceso a discos de rescate o un disco linux que arranque desde un disquet o un CDROM es
extremadamente facil el ganar acceso a cualquier archivo en el sistema. Para prevenir esto deberia fijarse
una contraseña para la BIOS.
LILO
A LILO se le puede dar opciones al momento del arranque. En particular algunas distribuciones de Linux no
preguntan alguna contraseña cuando arranca el sistema en modo monousuario o runlevel 1.
Restricted significa que LILO no puede dar ningun parametro sin el "password" especificado en lilo.conf.
boot=/dev/hda
install=/boot/boot.b
prompt
timeout=50
password="password"
restricted
Permisos de archivo
1) Hacer las herramientas de sistemas vitales inmutables, y archivos de log en modo solo-agregar:
chattr +i /bin/login
chattr +i /bin/ps
chattr +a /var/log/messages
Archivos Log
La herramienta last lista todos los logues satisfactorios y reinicios del sistema. La informacion es leida desde
el archivo /var/log/wtmp .
Las herramientas who y w listan todos los usuarios actualmente logueados en el sistema usando el archivo
/var/run/utmp.
Limites de usuario
Cuando el archivo /etc/nologin esta presente (puede estar vacio) este puede prevenir a todos los usuario de
loguearse en el sistema (a excepcion de usuario root). Si el archivo nologin contiene un mensaje este se
mostrara despues de una autenticacion satisfactoria.
En el directorio /etc/security/ existe una coleccion de archivos que permiten a los administradores limitar el
uso del tiempo de CPU por usuario, maximo tamaño de archivos, maximo numero de conexiones, etc
/etc/security/limits.conf
2. Seguridad de la Red
Seguridad de la Red puede ser separada en 2 categorias principales:
Accesos a recursos puede ser garantisado basado en el host que solicita un servicio. Esto es manejado por
tcp_wrappers. La libreria libwrap tambien conocida como tcp_wrappers provee listas de acceso basada en
hosts para una variedad de que servicios de red. Muchos servicios como xinetd, sshd, y portmap, son
compilados contra la libreria libwrap de tal modo que se habilita el soporte tcp_wrapper para estos servicios.
Cuando un cliente se conecta a un servicio con soporte tcp_wrapper, los archivos /etc/hosts.allow y
/etc/hosts.deny son analizados para verificar al host solicitando el servicio. Basado en el resultado el
servicio puede ser concedido o denegado.
Los archivos hosts_access files tienen 2 hasta 3 campos separados por dos puntos. El primer campo es el
nombre del proceso, el segundo es el The first field is the name of the process, the second is the fully
qualified nombre de host o el nombre del cominio con un “punto principal”, direccion IP o una subred con un
“punto arrastrado”. Wildcards como ALL y EXCEPT tambien son aceptadas.
Ejemplo:
/etc/hosts.deny
ALL: ALL EXCEPT .example.com
/etc/hosts.allow
ALL: LOCAL 192.168.0.
in.ftpd: ALL
sshd: .example.com
Tcp_wrappers pueden ejecutar comandos localmente sobre un host que esta en el archivo host_access
files.
Esto es realizado como comando spawn. Con el uso del caracter % character, las substituciones puede
hacerse para los nombres de host y servicio.
Ejemplo:
/etc/hosts.deny
Para mas informacion en el uso de substituciones % ver la pagina man host_access (5) .
Con la funcionalidad de filtrado de paquetes en el kernel de Linux, es posible limitar el acceso a los recursos
creando grupos de reglas con utilidades como ipchains e iptables, las cuales te permiten evaluar la entrada
de paquetes por cualquiera de sus interfaces de red, y determinar que es lo que ocurre con cada paquete.
Por ejemplo, cuando se usa ipchains todos los paquetes que ingresan por una interfaz de red atravesaran la
cadena input. Todos los paquetes no destinados para este host atravesaran la cadena forward.
Todos los paquetes generados dentro del host y paquetes que son remitidos atravesaran la cadena output.
Una regla ipchains e iptables puede especificar la fuente (s), destino (d), protocolo (p), y puerto.
Las reglas de Ipchains e iptables pueden ser manipuladas con las siguientes opciones
-A Agregar
-D Borrar
-P Cambiar la politica por defecto para una cadena
-I Insertar
-F Limpiar la o las reglas de una cadena
-N Crear una cadena definida por un usuario
-X Borrar una cadena definida por un usuairo
-L Listar
Ejemplo: La politica por defecto para un iptable puede ser cambiada de ACCEPT a DENY como se ve a
continuacion:
Con el desarrollo del kernel de Linux 2.4 vino el desarrollo del proyecto Netfilter, el cual usa la utilidad
iptables para manejar las reglas del firewall. La mayor diferencia entre iptables e ipchains es de que iptables
tiene soporte para evaluar los paquetes basados en su estado en terminos de otros paquetes que pasan a
traves del kernel. Esta es la evaluacion de paquetes basado en estados (stateful) que hace a iptables basa
packet evaluation that makes iptables far superior.
Abajo hay un ejemplo de como de como un firewall basado en estados puede ser usado, es una forma de
shell script ya que existe un numero de comandos a ser tipeados de manera que se obtiene el resultado
final.
Ejemplo:
#!/bin/sh
# Variables
IPTABLES="/sbin/iptables"
LAN_IFACE="eth0"
INET_IFACE="eth1"
INET_IP="1.2.3.4"
LOCALHOST_IP="127.0.0.1/32"
LAN_IP="192.168.0.1/32"
LAN_BCAST="192.168.0.0/24"
# Setup IP Masquerading
• ● Autenticacion de Host
Con ssh se autentica tanto el host como el usuario. La autenticacion por host es hecha por intercambio de
llaves. Las llaves publicas y privadas de los hosts son generalmente guardadas en /etc/ssh si se esta
usando OpenSSH. Dependiendo del protocolo usado la llave dl host puede ser llamado ssh_host_key para el
Protocolo 1 y ssh_host_rsa_key or ssh_host_dsa_key para el protocolo 2. Cada una de estas llaves tiene
sus llaves publicas correspondientes, por ejemplo ssh_host_key.pub.
Cuando un cliente se conecta a un servidor, el servidor da al host una llave publica en esta etapa el usuario
se le mandara una pantalla como la siguiente:
The authenticity of host 'neptune (10.0.0.8)' can't be established.
RSA key fingerprint is 8f:29:c2:b8:b5:b2:e3:e7:ec:89:80:b3:db:42:07:f4.
Are you sure you want to continue connecting (yes/no)?
Si tu aceptas continuar la conexion la llave publica del servidor sera adicionada al archivo local
$HOME/.ssh/known_hosts.
La autenticacion de usuarios puede involucrar intercambio de llaves. Para esto el usuario necesitara generar
un par de llaves publicas/privadas. Por ejemplo:
esto generara una llave DSA de 1024. Por defecto estas llaves seran guardadas en $HOME/.ssh y en este
ejemplo son llamadas id_dsa y id_dsa.pub.
Si asumimos que tenemos la id_dsa.pub podemos colocar esta llave en una cuenta remota y evitar tipear
contraseñas para conexiones futuras. Para hacer esto se necesita copiar el contenido del archivo
id_dsa.pub en un archivo llamado authorized_keys2 guardarlo en el directorio remoto $HOME/.ssh .
ALERTA
Todas las llaves privadas es /etc/ssh y ~/.ssh deberian tener permisos 600
# Host *
# ForwardX11 no
# RhostsAuthentication no
# RhostsRSAAuthentication no
# RSAAuthentication yes
# PasswordAuthentication yes
# HostbasedAuthentication no
# CheckHostIP yes
# IdentityFile ~/.ssh/identity
# IdentityFile ~/.ssh/id_rsa
# IdentityFile ~/.ssh/id_dsa
# Port 22
# Protocol 2,1
# Cipher 3des
date MMDDhhmmCCYY[.ss]
El reloj del hardware puede ser directamente cambiado con la utilidad hwclock. Las opciones principales
son:
-r or –-show muestra el tiempo actual
-w or –-systohc configura el reloj de hardware a un tiempo del sistema actual
-s or –-hctosys configura el tiempo del sistema al tiempo del reloj del hardware actual
Usando NTP
El Tiempo Universal Coordinado (UTC) es un estandar usado para almacenar usado para tener el tiempo
basado e la rotacion de la tierra. A pesar de esto debido a pequeñas irregularidades en la rotacion de la
tierra los segundos necesitan ser insertados en la escala UTC usando relojes atomicos.
Ya que las computadoras no estan equipadas con relojes atomicos la idea es usar un protocolo para
sincronizar los relojes de las computadores a traves de Internet. NTP se refiere a Network Time Protocol y
es uno de estos protocolos.
Una vez que el ntpd ha sido inicializado este sera un servidor NTP dando servicios por el puerto 123 usando
UDP.
● tcp_syncookies
Esto instruira al kernel para enviar un cookie al cliente en su respuesta SYN+ACK. En este modo el servidor
cierra el socket y espera el ACK del cliente con el cookie apropiado.
Aviso: Por default, aun si syncookies es soportado por el kernel, se necesitara activar el soporte agregando
un “1” al /proc/sys/net/ipv4/tcp_syncookies. Esto usualmente esta hecho en /etc/rc.d/rc.local. A pesar de
todo una solucion mas eficiente podria ser agregar una entrada en /etc/sysctl.conf
Este parche es mas relacionado a temas de la pila y va mas alla de los objetivos de este curso.
[root@nasaspc src]#pwd
/usr/src/
[root@nasaspc src]#rm -rf linux
Luego:
[root@nasaspc src]#tar xvzf linux-2.2.19.tar.gz
[root@nasaspc src]#tar xvzf linux-2.2.19-owl.tar.gz
Para probar tu sistema anda el directorio linux-2.2-19-owl. Aca hay un directorio llamado opcional que
contiene un archivo llamado stacktest.c.
[root@nasaspc optional]#pwd
/usr/src/linux-2.2.19-ow1/optional
[root@nasaspc optional]#gcc stacktest.c -o stacktest
[root@nasaspc optional]#stacktest
Usage: ./stacktest OPTION
Non-executable user stack area tests
[root@nasaspc optional]#stacktest -e
Attempting to simulate a buffer overflow exploit...
Succeeded.
[root@nasaspc linux]#pwd
/usr/src/linux
[root@nasaspc linux]#patch -p1 < /usr/src/linux-2.2-19-owl/linux-2.2.19-ow1.diff
Ahora si ejecutas make menuconfig deberias ver una nueva entrada llamada Security options. Las
selecciones por defecto estan bien. Desde aqui proceder con la compilacion e instalacion del kernel como
siempre.
El archivo /etc/syslog.conf
Cuando el syslogd es inicializado este lee el archivo de configuracion por defecto /etc/syslog.conf.
Tambien se puede inicializar syslogd con -f y la ruta de algun archivo de configuracion alternativo. Este
archivo debe contener una lista de items seguido por una prioridad, seguido por la ruta del archivo de
registro:
_____________________________________________________________________
70
LinuxIT Technical Education Centre
Administracion del Sistema Linux
alert
crit
err
warning
notice
info
debug
*
none
Las prioridades son minimas! Todas las prioridades altas seran registradas tambien. Para forzar una
prioridad para ser solo info se necesita usar un simbolo '=' como en:
user.=info /var/log/user_activity
Listado de /etc/syslog.conf
2. Utilidades de Registro
El comando logger
_____________________________________________________________________
71
LinuxIT Technical Education Centre
Administracion del Sistema Linux
Si tipeas el siguiente comando:
configuraciones locales
La utilidad logger registra los mensajes en /var/log/messages por defecto. Hay items locales definidos que
pueden ayudar a crear tus propios archivos de registro como a continuacion. local0 a local7 estan
disponibles para uso de administracion. La disponibilidad depende en el sistema (RedHat local7 reporta
informacion del momento de arranque en /var/log/boot.log). Agrega la siguiente linea a /etc/syslog.conf:
local4.* /dev/tty9
Reiniciar el syslogd
logrotate
Los archivos de registro son actualizados usando logrotate. Usualmente logrotate se ejecuta diariamente
como un trabajo de cron. El archivo de configuracion /etc/logrotate.conf contiene los comandos para crear
o comprimir archivos.
_____________________________________________________________________
72
LinuxIT Technical Education Centre
Administracion del Sistema Linux
rotate 4
# send errors to root
errors root
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own lastlog or wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
3. Tareas Automatizadas
Usando cron
El programa responsable de ejecutar los crons es llamado crond. Cada minuto el crond leera los archivos
especificos conteniendo los comandos a ejecutarse. Estos archivos son llamados crontabs.
El sistema cronta es /etc/crontab. Este archivo ejecuta periodicamente todos los scripts en /etc/cron.* esto
incluye cualquier enlace simbolico apuntando a los scripts o binarios del sistema.
Para manipular entradas cron se usa la utilidad crontab. Tareas programadas son vistas con la opcion -l
como se ve abajo:
crontab -l
➔ # DO NOT EDIT THIS FILE - edit the master and reinstall
# (/tmp/crontab.1391 installed on Tue Jul 17 17:56:48 2001)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
0 * * 07 2 /usr/bin/find /home/penguin -name core -exec rm {} \;
Similarmente la opcion -e abrira tu editor por defecto y te dejara entrar una entrada de cron.
El usuario root puede usar la opcion -u para ver y cambiar cualquier entrada cron de los usuarios. Para
borrar el archivo crontab usar crontab -r.
_____________________________________________________________________
73
LinuxIT Technical Education Centre
Administracion del Sistema Linux
Permisos:
Por defecto cualquier usuario puede usar crontab. Pero puedes controlar la accesibilidad con
/etc/cron.deny y /etc/cron.allow.
Los trabajos at son ejecutados por el demonio atd. Los trabajos son guardados en /var/spool/at/
El comando at es usado para calendarizar una tarea con la sintaxisis used to schedule a one off task with
the syntax
at [time]
now
3am + 2days
midnight
10:15 Apr 12
teatime
Se puede obtener una lista de comandos que son calendarizados con atq o at -l. Los trabajos at jobs son
grabados en /var/spool/at/:
ls /var/spool/at/
➔ a0000100fd244d spool
Cuando se usa atq se deberia tener una lista de trabajos procedido por un numero. Se puede usar este
numero para desencolarlo:
atq
➔ 1 2001-07-17 18:21 a root
Desde el listado de atq vemos que el numero de trabajo es 1, por eso podemos remover el trabajo del
directorio spool.
at -d 1
Permisos:
Por defecto at esta restringido al usuario root. Para invalidar esto se debe tener un archivo vacio
/etc/at.deny o tener un /etc/at.allow con los nombres apropiados.
4. Compresion y Backups
Estrategias de backupeo
_____________________________________________________________________
74
LinuxIT Technical Education Centre
Administracion del Sistema Linux
Hay tres estrategias principales para backupear un sistema:
Ejemplo: Si tu haces un backup completo y 3 backups diferenciales antes de un colapso, cuantas cintas
necesitarias para la restauracion ?
La opcion principal para crear un archivo con tar es -c. Tambien puedes especificar el nombre del archivo
como el primer argumento si se usa la opcion -f.
Si no se especifica el archivo como un argumento tar -c simplemente mandara el archivo como una salida
estandar:
La extraccion es directa. Reemplazar la opcion -c por una -x. Esto causara que se creen directorios si es
necesario y se copien los archivos en tu directorio actual. Para redireccionar la salida de los archivos
extraidos en el directorio /usr/share/doc, por ejemplo, puedes hacer:
Compresiones
Todos los archivos pueden ser comprimidos usando diferentes utilidades de compresion. Estas opciones
estan disponibles cuando se crea, prueba o se extrae un archivo:
La utilidad cpio
La utilidad cpio es usada para empaquetar varios archivos. La lista de archivos debe pasarse a cpio a
traves de una tuberia (como cuando se usa con find) o via una redireccion como a continuacion;
_____________________________________________________________________
75
LinuxIT Technical Education Centre
Administracion del Sistema Linux
find /etc | cpio -o > etc.cpio
5. Documentacion
Paginas Man y la base de datos whatis
Estas son las secciones principales que generalmente se encuentra en las paginas man.
La base de datos whatis almacena la seccion NAME de todas las paginas man en el sistema. Esto se hace
diariamente a traves de un cron diario. La base de datos whatis tiene las siguiente 2 entradas:
La salida de las seccion NAME completa de las paginas man donde string coincidie con named(key)
Tambien se puede usar el comando man para consultar la base de datos whatis. La sintaxis es
man -k <string>
A diferencia de whatis es que esta consulta tanto las entradas “name” y la “one line description” de la base
de datos. Si la cadena coincide con una palabra en cualquiera de estos campos la consulta retornara la
seccion NAME completa.
whatis lilo
lilo (8) - install boot loader
lilo.conf [lilo] (5) - configuration file for lilo
man -k lilo
grubby (8) - command line tool for configuring grub, lilo, and elilo
lilo (8) - install boot loader
lilo.conf [lilo] (5) - configuration file for lilo
_____________________________________________________________________
76
LinuxIT Technical Education Centre
Administracion del Sistema Linux
La FHS recomienda las paginas man a ser guardadas en /usr/share/man
Manpage Sections
Section 1 Information on executables
Section 2 System calls, e.g mkdir(2)
Section 3 Library calls, e.g stdio(3)
Section 4 Devices (files in /dev)
Section 5 Configuration files and formats
Section 6 Games
Section 7 Macro packages
Section 8 Administration commands
Section 9 Kernel routines
man N command
Ejemplos:
man mkdir
man 2 mkdir
man crontab
man 5 crontab
Paginas info
La FHS recomienda que las paginas info sean guardadas en /usr/share/info. Estas paginas son archivos
comprimidos que se pueden leer con la herramienta info .
Las herramientas GNU originales usan las paginas info mas que las paginas man. Ya que la mayoria de
paginas info han sido reescritas como paginas man. A pesar de esto la informacion acerca de los proyectos
GNU como gcc o glibc es mas extensa en las paginas info comparado con las paginas man.
Documentos en linea
Los proyectos GNU incluyen documentos como FAQ, README, CHANGELOG y algunas veces guias de
usuario/administracion . Los formatos pueden ser tambien ASCII text, HTML, LateX o postscript.
_____________________________________________________________________
77
LinuxIT Technical Education Centre
Administracion del Sistema Linux
El proyecto de documentacion de linux provee muchas documentos detallados de temas especificos. Estos
son guias estructuradas explicando conceptos e implementaciones. La URL del website es www.tldp.org.
Los documentos DP son libremente redistribuibles y se puede contribuir con ellos tambien usando el tipo de
licencia GPL .
Los grupos de noticias para Linux son los grupos comp.os.linux.* (ejem. comp.os.linux.networking,
comp.os.linux.security ...). Una vez que se tOnce you have setup a news reader to connect to a news server
(usually available through an ISP or a University campus) one downloads a list of all existing discussion
groups and subscribes/unsubscribes to a given group.
There are many experienced as well as new users which rely on the newsgroups to get information on
specific tasks or projects. Take the time to answer some of these questions if you feel you have the relevant
experience.
NOTICE
The man -k option queries both fields in the whatis database. This will find everything about a given item.
There is a tool called apropos (meaning about) which will do the same thing as man -k.
5. Ejercicios
Reportes
1. Cambiar /etc/syslog.conf para que salgan algunos logs por (reiniciar syslogd para que la salida este
realmente redireccionada)
2. Agregar un item local5 item con prioridad critica a /ect/syslog.conf y direccionar la salida a /dev/tty10.
Reiniciar syslogd y usar logger para escribir informacion via local5.
3. Leer el script /etc/rc.d/init.d/syslog y cambiar /etc/sysconfig/syslog para permitir hosts remotos para
enviar reportes a las salidas.
Calendarizacion
4.Crear una entrada del cron que empieza el reloj cada 2 minutos. Recuerda que cron is unaware of system
variables such as PATH and DISPLAY.
Manejo de archivos
6. Usar find para listar todos los arcivos que han sido modificados durante las 24 horas pasadas.
(tip: Redireccionar la salida de find -mtime –1 a un archivo)
(ans: Usar el archivo creado arriba y hacer cat FILE | cpio –ov > Incremental.cpio)
8 Usar xargs y tar crear un archivo de todos los archivos accesados o cambiados 5 minutos atras.
_____________________________________________________________________
78
LinuxIT Technical Education Centre
Administracion del Sistema Linux
9. Do the same using the –exec option to find. Note that the files listed by find can be referenced by the {}
symbol.
Configurando PPP
1. Modems Seriales
Linux asume generalmente que los modems seriales son conectados a un puerto serial (uno de los
dispositivos /dev/ttySN ). Por eso primero necesitas encontrar a cual puerto serial esta conectado.
El comando setserial –g hara las consultas a los puertos seriales. Si el recurso no esta disponible el valor
del UART sera desconocido.
setserial -g /dev/ttyS[0-3]
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
Para modems no-seriales es posible obtener informacion acerca de los recursos disponibles en /proc/pci.
Aca las configuraciones de i/o y IRQ pueden ser aplicadas a un dispositivo libre /dev/ttyS?. Esto se logra
con las siguientes dos lineas:
La ultima lina solo trata de aplicar las configuraciones apropiadas para UART.
Estas configuraciones se perderan la proxima vez que reinicie la maquina y pueden grabarse en
/etc/rc.serial. Este script es uno de los scripts ejecutados por rc.sysinit en el momento de inicio del
sistema.
_____________________________________________________________________
79
LinuxIT Technical Education Centre
Administracion del Sistema Linux
El script rc.serial :
#!/bin/bash
TTY=/dev/ttyS2
PORT=0x2000
IRQ=3
2. Configuracion Dialup
Una vez que se sabe que el modem se conectara a un dispositivo serial, es posible enviar al modem una
instruccion como ATZ o ATDT. La herramienta que actuara como interfaz terminal es minicom.
pantalla de minicom
Otra herramienta muy comun es wvdialconf. Estas herramienta automaticamente escaneara modems en
las ttyS’s y creara un archivo de configuracion. Este archivo es usado para manejar la autenticacion por
contraseña y inicializara el demonio pppd una vez que la conexion se haya establecido.
3. pppd y chat
Primero que nada el script chat es usado para comunicarse con el modem del host remoto. Es una seria de
cadenas espera/envio. El formato es :
El script es leido secuencialmente y empieza con la consulta vacia ‘ ‘ la cual se hace coincidir con el
comando ‘ATZ’. Una vez que el modem se ha inicializado este devuelve la consulta ‘OK’. Para esto el
script respondera con un comando de marcacion ‘ATDT’ . Esta conversacion sucede hasta que el prompt
‘>’ es obtenido en la etapa en la cual uno puede ejecutar pppd.
_____________________________________________________________________
80
LinuxIT Technical Education Centre
Administracion del Sistema Linux
Ejemplo del script chat:
'ABORT' 'BUSY'
'ABORT' 'ERROR'
'ABORT' 'NO CARRIER'
'ABORT' 'NO DIALTONE'
'ABORT' 'Invalid Login'
'ABORT' 'Login incorrect'
'' 'ATZ'
'OK' 'ATDT01172341212'
'CONNECT' ''
'ogin:' 'adrian'
'ord:' 'adrianpasswd'
'TIMEOUT' '5'
'>' pppd
Esta es sola una manera de lograr esto. Tambien se puede empezar el pppd manualmente y luego invocar
el script chat como se ve a continuacion:
Las lineas debajo de los comandos pppd pueden ser grabados /etc/ppp/options. Este archivo contiene la
mayoria de caracteristicas las cuales hacen la fortaleza y flexibilidad del pppd. Por ejemplo require-chap
usara el /etc/ppp/chap-secrets para la autenticacion.
4. PPPD peers
Aca hay un directorio llamado peers en /etc/ppp/. En este directorio se puede crear un archivo que contenga
todas las opciones de linea de comandos necesarias para pppd. De esta manera las conexiones peer
pueden ser inicializadas por todos los usuarios.
El anterior archivo peer (llamado uk2) puede ser usado como a continuacion:
Esto marcara el numero especificada en el “script chat” y se autenticara como el usuario “uk2”.
Tener en cuenta de que esto requiere la entrada correspondiente en /etc/ppp/chap-secrets, y /etc/ppp/pap-
secrets. El formato para pap y chap secrets es la siguiente:
_____________________________________________________________________
81
LinuxIT Technical Education Centre
Administracion del Sistema Linux
uk2 * "uk2" *
Este formato permite que se usen diferentes contraseñas si te conectas a diferentes servidores. Tambien te
permite especificar un direccion IP. Esto probablemente no va a funcionar cuadno se conecte a un ISP, pero
cuando se hace conexiones privadas, se puede especificar una direccion IP si se necesita. Un ejemplo
podria ser cuando necesitas auditar la actividad de tu red, y quieres especificar cuales usuario tiene cierta
direccion IP.
5. Wvdial
Este el metodo por defecto usado por Red Hat para conectarse a una red dial up. Para configurar wvdial, es
nas facil usar una de las herramientas de configuracion proveidas de Gnome o KDE. Estas configuran el
archivo /etc/wvdial.conf.
[Modem0]
Modem = /dev/ttyS0
Baud = 115200
Dial Command = ATDT
Init1 = ATZ
FlowControl = Hardware (CRTSCTS)
[Dialer UK2]
Username = uk2
Password = uk2
Phone = 08456091370
Inherits = Modem0
Para usar wvdial desde la linea de comandos, se deberia ejecutar con la siguiente sintaxis:
# wvdial <dialer-name>
En el archivo de configuracion ejemplo el siguiente comando deberia marcar la conexion llamada “uk2”
# wvdial uk2
_____________________________________________________________________
82
LinuxIT Technical Education Centre
Administracion del Sistema Linux
Impresión
Los dos objetivos de este capitulo es en primer lugar una introduccion a las herramientas de impresion GNU
disponibles en las maquinas Linux y en segundo lugar entender los archivos de condfiguracion para un
servidor de impresion.
1. Filtros y gs
Para formatos no-texto los sistemas Linux y UNIX generalmente usan filtros. Estos filtros transforman los
formatos JPEG o troff en formato tipo postscript. Esto puede ser directamente enviado a una impresora
postscript, pero desde que ya no todas las impresoras genericas pueden manejar postscript, una
‘impresora virtual postscript’ intermedia usualmente llamado gs (ghostscript), finalmente transforma el
postscript en PCL.
La version comercial de ghostscript es Aladdin Ghostscript y la version GNU es una version mas antigua.
La utilidad gs tiene una base de datos de drivers de impresora que puede manejar (esta lista es usualmente
actualizada, por ejemplo muchas impresoras USB son soportadas) y convierten el postscript directly en PCL
para estos modeos conocidos. La utilidad gs juega un papel central en la impresion para sistemas Linux.
Todas las colas e impresoras son definidas en /etc/printcap. Aqui esta la configuracion completa de una
impresora remota 192.168.1.20 usando una cola remota llamada ‘lp’:
lp:\
:sd=/var/spool/lpd/lp:\
:mx#0:\
:sh:\
:rm=192.168.1.20:\
:rp=lp:
Las opciones escenciales son rm el host remoto, sd el directorio spool y rp el nombre de una cola remota.
Tener en cuenta que no se ha especificado algun filtro (podria usarse if para la entrada del filtro). Todo el
filtrado esta hecho en el host remoto.
_____________________________________________________________________
83
LinuxIT Technical Education Centre
Administracion del Sistema Linux
3. Herramientas de Impresion
lpr:
La utilidad lpr es usada para agregar trabajos a la impresora. Esta es una version moderna de lp (linea de
impresion). Desde el punto de vista del usuario es util entender que una impresora puede asociada con mas
de una cola. Aqui ves dos ejemplos para imprimir un archivo llamado LETTER.
lpq:
Un usuario puede monitorear el estado de las colas de impresion con la utilidad lpq. Aqui vemos algunos
ejemplos.
lprm:
Dependiendo de las opciones en /etc/lpd.perms los usuarios pueden estar permitidos para borrar colas de
trabajos usando lprm.
_____________________________________________________________________
84
LinuxIT Technical Education Centre
Administracion del Sistema Linux
Es posible remover un trabajo encolado especifico referenciandolo por su numero de trabajo; este numero
es dado por lpq.
lpc:
La utilidad de Control de Linea de Impresion es usada para controlar las colas de impresion y las impresoras.
Las colas de impresion pueden ser deshabilitadas o habilitadas. Tener en cuenta que lprm por otro lado
puede remover trabajos de una cola pero no puede parar la cola.
Se puede usar lpc interactivamente (lpc tiene su propio prompt), o desde la linea de comandos.
/etc/printcap
Como se vio anteriormente en este capitulo, el archivo define a todas las impresoras y colas que el sistema
puede usar (remota y local).
La impresora por defecto puede ser especificada con cualquiera de las variables LPDEST o PRINTER:
PRINTER=lp
Si no hay variables de entorno configuradas, la impresora por defecto es la primera impresora definida en
/etc/printcap.
/etc/lpd.conf
Este es un archivo muy largo y por defecto todas las opciones estan comentadas. Este archivo es usado si
un administrador deseara tener mas controll (i.e autenticacion para acceso remoto, permisos de usuario …)
sobre la impresion.
/etc/lpd.perms
Este archivo controla los permisos para las utilidades lpc, lpq y lprm. En particular se puede conceder
derechos a usuarios para sacar de la cola el trabajo actual (usando la herramienta lprm) con la linea :
_____________________________________________________________________
85
LinuxIT Technical Education Centre
Administracion del Sistema Linux
LPRng usa un sistema de llaves para acortar las entradas en lpd.perms. Esto a pesar de todo no es muy
entendible. Por ejemplo el servicio ‘M’ corresponde a lprm en la linea de arriba.
## Permissions are checked by the use of 'keys' and matches. For each of
## the following LPR activities, the following keys have a value.
##
## Key Match Connect Job Job LPQ LPRM LPC
## Spool Print
## SERVICE S 'X' 'R' 'P' 'Q' 'M' 'C'
## USER S - JUSR JUSR JUSR JUSR JUSR
## HOST S RH JH JH JH JH JH
## GROUP S - JUSR JUSR JUSR JUSR JUSR
## IP IP RIP JIP JIP RIP JIP JIP
## PORT N PORT PORT - PORT PORT PORT
## REMOTEUSER S - JUSR JUSR JUSR CUSR CUSR
## REMOTEHOST S RH RH JH RH RH RH
## REMOTEGROUP S - JUSR JUSR JUSR CUSR CUSR
## REMOTEIP IP RIP RIP JIP RIP RIP RIP
## CONTROLLINE S - CL CL CL CL CL
## PRINTER S - PR PR PR PR PR
## FORWARD V - SA - - SA SA
## SAMEHOST V - SA - SA SA SA
## SAMEUSER V - - - SU SU SU
## SERVER V - SV - SV SV SV
## LPC S - - - - - LPC
## AUTH V - AU AU AU AU AU
## AUTHTYPE S - AU AU AU AU AU
## AUTHUSER S - AU AU AU AU AU
## AUTHFROM S - AU AU AU AU AU
## AUTHSAMEUSER S - AU AU AU AU AU
##
## KEY:
## JH = HOST host in control file
## RH = REMOTEHOST connecting host name
## JUSR = USER user in control file
## AUTH will match (true) if authenticated transfer
## AUTHTYPE will match authentication type
## AUTHUSER will match client authentication type
## AUTHFROM will match server authentication type and is NULL if not from server
## AUTHSAMEUSER will match client authentication to save authentication in job
##
## Example Permissions
##
## # All operations allowed except those specifically forbidden
## DEFAULT ACCEPT
##
## #Reject connections from hosts not on subnet 130.191.0.0
## # or Engineering pc's
## REJECT SERVICE=X NOT REMOTEIP=130.191.0.0/255.255.0.0
## REJECT SERVICE=X NOT REMOTEHOST=engpc*
##
## #Do not allow anybody but root or papowell on
## #astart1.astart.com or the server to use control
## #facilities.
## ACCEPT SERVICE=C SERVER REMOTEUSER=root
## ACCEPT SERVICE=C REMOTEHOST=astart1.astart.com REMOTEUSER=papowell
##
## #Allow root on talker.astart.com to control printer hpjet
## ACCEPT SERVICE=C HOST=talker.astart.com PRINTER=hpjet REMOTEUSER=root
## #Reject all others
## REJECT SERVICE=C
##
## #Do not allow forwarded jobs or requests
## REJECT SERVICE=R,C,M FORWARD
_____________________________________________________________________
86
LinuxIT Technical Education Centre
Administracion del Sistema Linux
##
#
# allow root on server to control jobs
ACCEPT SERVICE=C SERVER REMOTEUSER=root
# allow anybody to get server, status, and printcap
ACCEPT SERVICE=C LPC=lpd,status,printcap
# reject all others
REJECT SERVICE=C
#
# allow same user on originating host to remove a job
ACCEPT SERVICE=M SAMEHOST SAMEUSER
# allow root on server to remove a job
ACCEPT SERVICE=M SERVER REMOTEUSER=root
REJECT SERVICE=M
# all other operations allowed
DEFAULT ACCEPT
/etc/hosts.{lpd,equiv}
Estos archivos fueron usados la suite de impresion LPR printing suite y presentaba un riesgo de seguridad.
Cuando se ejecuta un servidor de impresion se necesita especificar cuales hosts puede acceder a la
impresora en /etc/hosts.lpd. Tambien se puede agregar los hosts a /etc/hosts.equiv.
Estos archivos ahora han sido reemplzados en LPRng por el archivo /etc/lpd.perms
_____________________________________________________________________
87
LinuxIT Technical Education Centre
Administracion del Sistema Linux
5. Ejercicios
1. Iniciar printtool y crear una nueva cola local llamada lp.
2. Personalizar el dispositivo /dev/tty10 como el dispositivo de impresion (recuerda hacer chmod 666
/dev/tty10 para permitir la impresion en este dispositivo). Ahora tienes una impresora virtual en tu
sistema!
En cada caso
- revisar el archivo /etc/printcap. Cual filtro es usado? Como esta definido el host remoto?
- revisar el directorio /var/spool/lpd/ .
_____________________________________________________________________
88
LinuxIT Technical Education Centre
Appendix
__________________________________________________________________________
3. Printing
Print files
Manage print queues and manipulate print jobs. Add and remove jobs from printer queues. Convert text files
to postscript for printing.
Keywords: lpr, lpq, mpage
_________________________________________________________________________
All original materials are ©2002 LinuxIT. All Rights Reserved. Kleesh Consultants Ltd T/A LinuxIT registered
in England No:04470427. Visit www.linuxit.com for more information.
89
LinuxIT Technical Education Centre
Appendix
__________________________________________________________________________
4. Documentation
6. Administrative Tasks
_________________________________________________________________________
All original materials are ©2002 LinuxIT. All Rights Reserved. Kleesh Consultants Ltd T/A LinuxIT registered
in England No:04470427. Visit www.linuxit.com for more information.
90
LinuxIT Technical Education Centre
Appendix
__________________________________________________________________________
Configure and use system log files to meet administrative and security needs
Configure system logs. Manage type and level of information logged. Manually scan log files for notable
activity. Monitoring log files: automatic rotation and archiving. Track down problems noted in logs.
Keywords: logrotate, tail –f, /etc/syslog.conf, /var/log/*
7. Networking Fundamentals
Fundamentals of TCP/IP
Understand IP-addresses, network masks and broadcast address. Determine the network address,
broadcast address and netmask when given an IP-address and the number of bits. Network classes and
classless subnets (CIDR) and the reserved addresses for private network use. It includes the understanding
of the function and application of a default route. It also includes the understanding of basic internet protocols
(IP, ICMP, TCP, UDP) and the more common TCP and UDP ports (20, 21, 23, 25, 53, 80, 110, 119, 139,
143, 161).
Keywords: /etc/services, ftp, telnet, host, ping, dig, traceroute, whois
_________________________________________________________________________
All original materials are ©2002 LinuxIT. All Rights Reserved. Kleesh Consultants Ltd T/A LinuxIT registered
in England No:04470427. Visit www.linuxit.com for more information.
91
LinuxIT Technical Education Centre
Appendix
__________________________________________________________________________
Keywords: /etc/ppp/options.*, /etc/ppp/peers/*, /etc/wvdial.conf
/etc/ppp/ip-up, /etc/ppp/ip-down, wvdial, pppd
8. Networking Services
_________________________________________________________________________
All original materials are ©2002 LinuxIT. All Rights Reserved. Kleesh Consultants Ltd T/A LinuxIT registered
in England No:04470427. Visit www.linuxit.com for more information.
92
LinuxIT Technical Education Centre
Appendix
__________________________________________________________________________
9. Security
_________________________________________________________________________
All original materials are ©2002 LinuxIT. All Rights Reserved. Kleesh Consultants Ltd T/A LinuxIT registered
in England No:04470427. Visit www.linuxit.com for more information.
93
LinuxIT Technical Education Centre
Index
__________________________________________________________________________
Index
/etc/shadow 29 make modules_install15
chage32 make oldconfig14
cron79, 81 make xconfig13
date93 make zImage 15
depmod 12 man72
gpasswd28 modinfo12
groupadd30, 31 modprobe 12
groupadd 28 modules.conf12
groups 27 modules.dep12
id 27 passwd26
init19, 20, 21, 22 peers91
insmod12 rmmod12, 41
LILO17, 22, 23 route37
logrotate81 sendmail59
lpd94 shutdown21
lsmod12 socket51
make bzImage 15 syslog.conf79
make clean15 tar84
make config13 test77
make dep14 useradd26, 30, 31
make menuconfig13 usermod31
make modules 15