Curso LINUX
Introducción
En este curso, se impartirán los conocimientos necesarios que les permitirán a los
estudiantes presentar un examen de certificación Novell CLP, sin detrimento de los
nuevas tecnologías que esta distribución de Linux ofrece día a día.
Novell CLP consta de tres cursos bases: SLES Fundamentals, SLES Administration y
SLES Advanced Administration.
Este curso sin ser uno dedicado a SLES específicamente tratará la mayor parte de sus
temas en esta distribución de Linux.
Estos son requisitos básicos fundamentales antes de entrar en la segunda parte del curso
cuyos objetivos son.
Las tareas que se cumplen siguiendo estos objetivos, son elementos rutinarios en un
ambiente corporativo con infraestructura basada en Linux.
-Audiencia
La primera parte de este curso está dirigida a administradores de servidores que estén
interesados en Linux, candidatos a certificaciones Linux con experiencia en otros sistemas
operativos y estudiantes de Ingeniería en Sistemas, Ingeniería en Computación,
Licenciatura en Computación y público en general con conocimientos básicos de sistemas
operativos.
La segunda parte de este curso tendrá como audiencia todo aquel que tenga el
conocimiento impartido en la primera parte de este curso.
-Certificación y Pre-requisitos
Este curso ayudará al estudiante a prepararse para el examen práctico de certificación
Novell CLP. Este examen está basado en escenarios reales en los que se aplica el
conocimiento adquirido durante este curso, en el cual demostraran que saben qué hacer y
cómo hacer durante un problema real.
Nuevo Administrador de
Sistemas Linux
SLES Fundamentals
Usuarios Noveles en Linux
(Primera Parte de este curso)
SLES Administration
(Segunda Parte de este curso)
-Agenda
TEMA Tiempo
Introducción 00:30
Historia de Linux 01:30
Instalación 02:00
Escritorio de Linux 02:00
Usar un Editor de Texto 02:00
Administración de la Plataforma 02:00
Administración de Archivos 06:00
Shells 02:00
Usuarios, Grupos y Permisos Administrar el Sistema de Archivos 06:00
Administrar Accesos de Usuarios Configuración de Red, Manual 08:00
Administración de Servicios
Monitorear Sistema Linux Configurar el Sistema de Inicio 08:00
Administración de Software 04:00
Respaldos de Seguridad 04:00
Configuración de Acceso Remoto 02:00
Servicio de Impresión CUPS 02:00
Servidor de Archivos con SAMBA 08:00
Servicio de Nombres de Dominio (No contenido en este manual) 04:00
Servicio Web (No contenido en este manual) 08:00
Servicio de Correo Electronico (No contenido en este manual) 06:00
EXAMEN DE CURSO 02:00
TOTAL DE HORAS DEL CURSO 80:00:00
-Escenario
El estudiante deberá tener en cuenta el escenario siguiente durante todo este curso:
Una vez completado este entrenamiento, usted podrá ser capaz de instalar un SLES y
configurar un sistema para futuras pruebas.
Texto itálico/negrita. Hace referencia a una situación específica, tal como el nombre
de host de su servidor. Por ejemplo, si su servidor tiene como nombre de host LI90, y
en el texto de este documento aparece: hostname.oesa.edu.ni usted deberá ingresar
LI90.oesa.edu.ni
10.0.0.xx. esta es la dirección IP que esta asignada a su servidor SLES. Por ejemplo,
si su IP es 10.0.0.90, y en el texto de este documento aparece 10.0.0.xx, entonces
usted deberá de introducir 10.0.0.90
Cualquier duda, el instructor/capacitador debe de estar capacitado para aclarar las que
este instructivo no logre explicar.
Objetivos
Al final de los años 60, muchos sistemas operativos estaban diseñados para operaciones
‘batch’. Si se requería correr un programa, se insertaba una pila de tarjetas perforadas o
un rollo de cinta perforada en un dispositivo de lectura y esperar a que el resultado fuera
enviado a la impresora.
Este procedimiento fue por largo tiempo el método por el cual los desarrolladores
trabajaron, obviamente es ineficiente, y los desarrolladores necesitaban encontrar una vía
para permitir que un número mayor de usuarios accedieran al sistema y así aprovechar
todos los recursos que este podía brindarles.
MULTICS fue uno de los primeros programas creados para suplir esta demanda. Permitía
trabajar en una „caja de dialogo‟ con la computadora, pero esta fue muy influenciada por
las operaciones „batch‟, y su uso era extremadamente difícil.
Debido a que Laboratiorios BELL (una compañía subsidiaria de AT&T) preveía a las
universidades documentación y el texto fuente de UNIX a un bajo costo, este sistema fue
adoptado con relativa rapidez.
En 1983, AT&T inicia el mercadeo de UNIX System V, usando para esto una compañía
hermana (USL) y proclamando que System V era „el‟ UNIX Estándar.
Los sistemas operativos UNIX actuales están separados unos más de System V y otros
más de BSD, pero no son sistemas completamente „puros‟ de uno u otro tipo.
Como Linux fue escrito en „C‟, este está disponible para una gran cantidad de plataformas
diferentes, estas incluyen:
Newsgroups: comp.os.minix
Message-ID: <1991Aug25.205708.9541@klaava.Helsinki.FI>
I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This
has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as
my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things).
I've currently ported bash(1.08) and gcc(1.40), and things seem to work. This implies that I'll get something practical
within a few months, and I'd like to know what features most people would want. Any suggestions are welcome, but I
won't promise I'll implement them :-)
Linus (torvalds@kruuna.helsinki.fi) PS. Yes - it's free of any minix code, and it has a multi-threaded fs. It is NOT portable
(uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have :-(.
Linus Torvalds hizo que el código fuente de su kernel Linux estuviese disponible con GPL
(GNU General Public License). GLP permite leer y editar el código fuente, también
requiere que cualquier edición del código fuente esté disponible al público en general.
Las funciones del kernel incluyen los controles de entrada y salida, dispositivos de control,
administración de procesos, y administración de archivos. Otros componentes del sistema
(utilidades de Shell, programas de red, e implementaciones de kernel en procesadores
diferentes de Intel) son integradas después por otras personas o grupos de personas.
-Las diferencias de software entre las distribuciones para usuarios y las distribuciones para
servidores
Por ejemplo, SLES 10 está basado en la distribución para usuarios SUSE Linux 10.1. El
tiempo entre las liberaciones de estas distribuciones de usuarios y las liberaciones de las
de SLES son utilizadas para pruebas intensivas y aplicación de parches de seguridad y
para estabilizar el sistema.
10.
10
10.
10.
9.3
SUSE LINUX
Open Open SUSE ENTERPRISE
Source LINUX SERVER
Los paquetes de software que posee uno y otro también son importantes diferencias,
mientras que Open SUSE posee alrededor de 1000 paquetes, SLES posee alrededor de
3500, la mayor parte de los paquetes eliminados son aplicaciones de escritorio.
Correr estas capacidades sobre un mismo procesador requería que los procesos
esperaran para poder usar las entradas y salidas del procesador, esto mientras otros
procesos estuvieran utilizando el procesador.
UNIX implemento multitarea por división de tiempo, en este sistema cada proceso se le
permitía el uso del procesador por un tiempo máximo predeterminado por el sistema.
Cuando este tiempo expira, el sistema operativo suspende las tareas del proceso,
almacena su estado y sus variables y lo hace esperar mientras otros procesos pasan a
utilizar el procesador hasta volver a tener el turno cerrando un circuito de espera del
proceso.
Los sistemas operativos deben de coordinar la disponibilidad de los recursos del sistema
(disco duro, cintas de respaldo, interfaces, etc.). Si existe competencia de parte de un
proceso por un recurso, por ejemplo, la unidad de cinta de respaldo, solamente uno de los
procesos tendrá garantizado el acceso a este recurso. Los otros serán rechazados.
Las tareas de coordinación son muy complejas y no hay sistema operativo que logre
implementar una solución definitiva. El problema clásico envuelve situaciones en la que
dos o más procesos necesitan acceso exclusivo a un mismo recurso o conjunto de
recursos, tal como se ilustra en la imagen siguiente:
PROCESO A PROCESO B
Acceso Acceso
Solicitud
Recurso 1 Recurso 2
1
Andrew S. Tanenbaum,
Sistemas Operativos Modernos
Tercera edición,
Capitulo 6,
Página 433
Requerimientos Mínimos:
o 256 Mb en RAM
o 500 Mb de Disco Duro Libre para aplicaciones
o 500 Mb de Disco Duro Libre para datos del usuario
Requerimientos Mínimos Recomendados:
o 512 Mb a 3 Gb en RAM
o 4 Gb de espacio en Disco Duro
o Interface de Red
Para estar completamente seguros de que estamos preparados para la instalación de una
distribución de Linux, se necesita considerar lo siguiente:
2
En el caso de SLES es: http://www.novell.com/partnerguide/section/481.html
Si en 20 segundos no se ha seleccionado
ninguna opción del menú, la primera opción
de la lista (Iniciar desde el Disco Duro) será
seleccionada automáticamente. Para
detener este proceso de selecciona
automática, simplemente presione una
tecla cualquiera (excepto ENTER).
Las siguientes son las opciones más importantes de esta pantalla de bienvenida:
Iniciar desde el Disco Duro: Inicia el sistema operativo que tenga instalado el Disco
Duro.
Instalar: Inicia el proceso normal de instalación.
Instalar – APIC Local Deshabilitada: Los sistemas basados en APIC (Advanced
Programmable Interrupt Controller), cada CPU es de un solo núcleo y tiene un APIC
local. La APIC es responsable de las configuraciones de las interrupciones específicas
de la CPU. En este tipo de instalación, se deshabilitan los elementos de APIC que trae
esta distribución de Linux en particular.
Instalar – Modo Seguro: Algunos computadores viejos no tienen ningún tipo de
administración de energía o aceleración de disco duro. Si se tiene problemas con la
instalación, se recomienda probar con esta instalación.
Sistema de Rescate: Es un sistema Linux mínimo (sin la interfaz gráfica) que se inicia
desde el DVD y le permitirá reparar la instalación de Linux que se encuentre en su
Disco Duro.
Test de Memoria: Revisa la memoria RAM física en busca de errores.
3
Para incrementar la seguridad de su sistema, asegúrese de instalar solamente el software que su
sistema usará.
-Instalación Básica
4
Si seleccionó el lenguaje usando la tecla „F2‟, esta tarea será omitida por YaST
5
Búsqueda y solución de problemas.
Con esta información básica, YaST muestra un resumen de las tareas y configuraciones a
realizar durante el proceso de instalación, definiendo:
Sistema.
Productos Add-On.
Proceso de Inicio.
Zona Horaria.
Lenguaje.
Modo de Inicio por defecto.
Una vez que comience el proceso de instalación la primera tarea que realiza YaST es
formatear las particiones en las que el sistema será instalado.
-Configuración
Durante la fase de instalación del nuevo sistema operativo, se deberán configurar los
siguientes elementos:
FQDN
La opción „Cambiar Nombre via DHCP‟ se puede activar si se tiene un DHCP Server en la
red, y este a su vez ya tiene configurado la asignación de IP a la MAC de la NIC del
servidor donde está siendo instalado Linux.
Dispositivos de red
Modo de Red
Muro de Fuego
Interfaces de Red
Conexiones DSL
Adaptadores ISDN
Modems (Dial-UP)
Administración Remota VNC
Proxy
Usuarios
LDAP. Las cuentas de los usuarios son administradas de manera centralizada por un
Servidor LDAP. Todos los usuarios deben autenticarse via LDAP si el entorno de
trabajo de red tiene ambos, UNIX y Windows, como sistemas operativos clientes.
NIS. Las cuentas de los usuarios son administradas de manera centralizada por un
servidor NIS. Esta opción solamente puede
ser utilizada en ambientes de red UNIX
puro.
Dominio Windows. Las cuentas de
usuario son administradas de manera
centralizada por un servidor Windows o un
servidor SAMBA. SAMBA normalmente
permite la autenticación en ambientes
Windows.
Hardware
Tarjeta Grafica
Impresoras
Sonido
YaST configura la tarjeta grafica y la tarjeta de sonido de manera automática, pero solo
puede detectar impresoras conectadas directamente en el sistema.
Una vez aceptada la configuración, aparecerá una ventana preguntando si desea clonar la
instalación, normalmente y para efectos de este documento quitaremos la selección de
esta opción.
Objetivos
Una partición, divide el espacio disponible del disco duro en porciones más pequeñas.
Esto permite instalar más de un sistema operativo en un mismo disco duro físico o usar
diferentes áreas de disco para programas y datos.
Cada disco duro (en la plataforma Intel) tiene una tabla de particiones con espacio para
cuatro entradas. Una entrada en la tabla de particiones puede corresponder a una
partición primaria o a una partición extendida, solamente una partición extendida puede
existir en la tabla de particiones.
Una partición primaria consiste en un rango contiguo de cilindros (áreas de disco físico)
asignado a un sistema de archivos en particular. Si se desea usar solamente particiones
primarias, entonces se está limitado a cuatro particiones por disco (debido a que la tabla
de pariciones solamente permite cuatro particiones primarias).
Este es el motivo por las que las particiones extendidas son utilizadas. Una partición
extendida es un rango contiguo de cilindros en el disco, pero pueden ser subdivididos en
particiones lógicas. Las particiones lógicas no requieren entradas en la tabla de
particiones. En otras palabras, una partición extendida es un contenedor para particiones
lógicas.
Si se necesitan más de cuatro particiones, se debe crear una partición extendida en vez
de cuatro particiones primarias. La partición extendida puede contener el espacio libre
sobrante. Se pueden entonces crear múltiples particiones lógicas dentro de la partición
extendida. El número máximo de particiones lógicas es de 15 en discos SCSI y de 63 en
discos EIDE.
Partición de Intercambio (SWAP). Esta partición es usada por Linux para mover
datos no utilizados desde la memoria principal al disco duro, esto libera espacio de
memoria principal para que pueda ser utilizada por otros procesos.
Partición Raiz (root). Esta es la partición de la que depende toda la estructura de
directorios de Linux, es llamada también „directorio root‟.
Sin importar que esquema de particiones se seleccione, siempre se necesitarán estas dos
(swap y root).
800 Mb. Esto le permitirá una instalación mínima, sin interfaz grafica. Con este
espacio de disco para la partición root solamente se pueden usar aplicaciones para
consola.
1300 Mb. Esto le permitirá una instalación con una interfaz grafica mínima. Incluye el
sistema X-Windows y algunas aplicaciones graficas.
2 Gb. Esto le permitirá la instalación por defecto propuesta por YaST. Incluye un
escritorio moderno (KDE o GNOME), y provee espacio para muchas aplicaciones
adicionales.
4 Gb. Esto le permitirá una instalación completa, incluyendo toda la paquetería
incluida con SLES.
Como se puede intuir por lo descrito en este capítulo, se puede dejar una partición por
cada „carpeta‟ del sistema. Si se realiza así la instalación, la partición para la carpeta „root‟
puede ser mucho más pequeña que lo descrito en párrafos anteriores.
Para que YaST nos muestre las opciones de particiones, debemos dar click en
„Particionamiento‟, nos aparecerá el dialogo anteriormente mostrado.
NOTA: Los cambios hechos en este modo, no se escriben en el disco duro de manera
inmediata, se pueden descartar usando el botón „Atrás‟, o volviendo a entrar desde la
ventana que muestra el resumen de la instalación.
6
Logical Volume Manager
7
Enterprise Volume Management System
8
Redundant Array of Independent Disks
Las siguientes entradas son desplegadas por cada disco duro del sistema:
Administrar Volumenes LVM y Software RAID serán cubiertos con mas detalles en
„Administrar el Sistema de Archivos de Linux‟. EVMS9 y Particiones Cifradas, no son
cubiertos por este curso.
9
http://evms.sourceforge.net/
Crear nuevas particiones abrirá un cuadro de dialogo, la información que solicite este
dependerá de la configuración del disco duro.
Si se tiene más de un disco duro físico en el sistema, YaST pedirá que seleccione el
disco donde se creará la nueva partición.
Para editar una partición existente, se debe seleccionar primero la partición luego dar click
en el botón „Editar‟. Se puede editar solamente particiones primarias y lógicas en el modo
experto. No se pueden editar las particiones extendidas o la información física del disco.
Para eliminar una partición, únicamente se debe seleccionar la partición a eliminar y dar
click en el botón „Borrar Partición‟.
Si se selecciona la partición del disco duro, se eliminaran todas las particiones del mismo.
-Re-dimensionar particiones existentes
Para re-dimensionar una partición, se debe primero seleccionar y luego dar click en el
botón „Re-dimensionar‟.
En algunas ocasiones, los paquetes de software necesitan otros para poder ejecutarse.
La información de estas dependencias esta almacenada en los paquetes RPM. YaST
puede seleccionar la paquetería que otros paquetes requieren para ejecutarse
correctamente.
-Iniciar el proceso de Instalación
En este tema nos detendremos un poco en las configuraciones del entorno de red.
Omitir Configuración.
Usar la siguiente Configuración.
Modo de Red.
Muro de Fuego.
Interfaces de Red.
Conexiones DSL.
Adaptadores ISDN.
Modems.
Administración Remota VNC.
Proxy.
-Interfaces de Red
Una vez aceptados los cambios, el asistente retornará al cuadro de dialogo donde se
muestra la lista de dispositivos de red.
Si la tarjeta de red que está instalada en el sistema es reconocida por YaST, podemos
editar sus propiedades seleccionándola y presionando el botón „Editar‟.
Configuración de Dirección
Automática (DHCP). Si en la red existe un
servidor DHCP, se puede dejar esta
configuración. También se puede usar esta
opción si se está usando una conexión DSL
sin direccionamiento estático. Si se decide
usar DHCP, se necesitara configurar los
detalles seleccionando „Opciones DHCP‟,
en las opciones „Avanzadas‟
Configuración de Dirección Estática.
Esta opción es para la configuración de
direcciones IP de manera estática, se
deben ingresar la dirección y mascara de
red.
Nombre de host y DNS. En esta opción se configuran el nombre del equipo y el DNS
de la red, si usa direccionamiento estático, estas opciones deben configurarse
manualmente.
Enrutamiento. En esta opción se configuran las rutas (puerta de enlace
predeterminada, etc.)
Zona del Firewall. En esta se determina que interfaces pertenecerán a la zona Interna,
Externa, o DMZ, o si todo el tráfico será bloqueado (sin zona asignada).
Para eliminar una configuración existente, selecciona la NIC y presiona el botón „Borrar‟
Una vez completadas las tareas de agregar, editar o borrar configuraciones de las NIC,
debes „Guardar‟ la configuración y retornar a la pantalla de resumen de configuración de
„Interfaces de Red‟.
Luego de aceptar las conexiones de red, YaST tratará de probar la conexión a Internet.
Este dialogo tiene las siguientes opciones:
Si, Probar conexión a Internet. YaST probará la conexión a internet para comprobar el
estado de las actualizaciones y bajar las mismas.
No, Omitir esta prueba. Omite la prueba de conexión a Internet. Si se omite esta
prueba, el sistema no se actualizará el sistema durante el proceso de instalación.
El siguiente cuadro solicitará que se configure los Servicios de Red [ver Configuración], la
manera en que los usuarios se autenticaran sigue después de este dialogo.
Cámbialo
Objetivos
Introducción
Si instalas Windows, no podrás prescindir del entorno grafico de usuario (GUI). En Linux,
la GUI es una aplicación más, de la que se puede prescindir, o sea que podemos
instalarla o no.
Estabilidad. Cada aplicación contiene errores que pueden volver su sistema inestable.
Mientras menos programas se instalen, más estable será el sistema. Una GUI es un
programa grande que contiene un número igualmente grande de errores sin descubrir.
Desempeño. Cada programa en ejecución necesita recursos del sistema. Mientras
menos programas se estén ejecutando, mas se incrementa el desempeño.
X11 fue creado en 1984 por el MIT. La idea principal del desarrollo era correr aplicaciones
graficas en la red, independientemente del hardware.
NOTA: la comunicación entre X-Server y la Aplicación Cliente, usa los protocolos de red
TCP/IP aun si ambos se encuentran en el mismo sistema.
El administrador de ventana:
En este ejemplo X-Server corre en la maquina da5, mientras que en da1 y da2 se están
ejecutando aplicaciones cliente (X-Client). Todas las maquinas tienen instalado un
sistema operativo diferente, y las aplicaciones X-Client son controlados por el X-Server de
la maquina da5.
Iniciar Sesión
Cerrar Sesión y Apagar el Sistema
Identificar componentes del Escritorio GNOME
Administrar Iconos en GNOME
Usar el Administrador de Archivos de GNOME (Nautilus)
-Iniciar Sesión
Si seleccionamos „Cerrar
Sesión‟ una ventana de
confirmación aparecerá.
A la derecha del panel contiene algunos ítems adicionales. Estos iconos aparecerán en
dependencia del hardware del sistema.
Similar a Windows, se pueden ejecutar aplicaciones desde el escritorio, dando doble click
sobre el icono que las representa, y también en el ícono que se encuentre ubicado en el
menú principal.
En la parte superior del menú principal esta un menú desplegable de las que se puede
seleccionar tres filtros diferentes:
Aplicaciones Favoritas
Aplicaciones Usadas Recientemente
Documentos Recientes
En el extremo derecho del menú principal [ver: Cerrar Sesión y Apagar Sistema], se
tienen disponibles cinco opciones de sistema:
Ayuda.
Centro de Control. Inicia el Centro de Control de GNOME, con el que se puede
configurar el escritorio GNOME.
Instalar Aplicaciones.
Bloquear Pantalla.
Cerrar Sesión.
Apagar Sistema.
En la parte inferior derecha, se puede tener acceso al estado del disco duro y a los
dispositivos en red.
-Administrar Iconos en GNOME
Se puede administrar los iconos del escritorio de muchas maneras diferentes. Para
simplicidad, describiremos los métodos más importantes.
Escritorio
Panel
Menú Principal
Escritorio
Panel
Se puede agregar nuevos programas al panel, con solo dar click con el botón secundario
del mouse sobre un área libre del mismo, y seleccionando la opción „Añadir al Panel‟.
Menú Principal
Solamente el usuario „root‟ tiene privilegios de agregar nuevas entradas al menú principal,
los usuarios normales solo las pueden declarar dentro de „Aplicaciones Favoritas‟. Para
realizar esto se debe hacer:
Linux tiene hasta seis terminales ejecutándose en el sistema (F1-F6). Para acceder a
ellas basta presionar Ctrl+Alt+Fx, con esta combinación de teclas se puede conmutar
entre terminales, si se desea retornar a la terminal grafica basta con presionar
Ctrl+Alt+F7.
Se puede determinar cual terminal virtual se está usando gracias a su número de tty
(teletype), tty es otra manera de nombrar a las terminales virtuales.
hostname login:
Otra manera de acceder a las terminales es utilizando la emulación que ofrece GNOME.
La aplicación „GNOME Terminal‟ ofrece esta alternativa, con esta la terminal se ejecuta en
una ventana dentro del entorno grafico que entre otras cosas nos permite copiar y pegar
dentro de la ventana de la terminal y modificar su apariencia, como su fuente y color de
fondo.
Objetivos
Conocer YaST
Entender los roles de SuSEconfig
Administrar la información de configuración de red desde YaST}
Instalar los paquetes de aplicaciones
Administrar las fuentes de instalación
En este proceso entra en función SuSEconfig, esta aplicación sirve para configurar el
sistema acorde a las variables que son el conjunto de varios archivos en la carpeta
„/etc/sysconfig/‟ y sus subdirectorios.
Configuración de Direcciones
Automática (DHCP).
Configurar Direcciones Estáticas.
Mascara de Red.
Nombre de Host y Nombre de
Servidor.
En este dialogo también se encuentra el cuadro de texto „Buscar‟, que sirve para buscar
paquetes mediante su nombre o algún texto similar al nombre del paquete.
Objetivos
Un nombre de archivo en Linux, puede ser hasta de 255 caracteres de longitud. Puede
contener cualquier numero de caracteres especiales.
Para poder comprender este tema especifico revisaremos los siguientes temas:
El concepto del sistema de archivos de Linux envuelve una jerarquía de archivos que
pueden ser descritas como una estructura de árbol.
Este árbol no está limitado a una partición local. se distribuye a través de muchas
particiones, y a través de las conexiones de red de muchas computadoras. Todo
comienza en la raíz („/‟), desde donde el administrador del sistema comienza.
/bin
/boot
/dataX
/dev
/etc
/home /home/geeko/
/lib /home/tux/
/mnt
/media /media/cdrom/
/opt /media/usbdisk/
/
/proc /media/dvd/
/root
/sbin
/srv
/subdomain
/sys
/tmp
/usr
/var
/windows
El carácter de separación entre directorios individuales se llama „slash‟ (“/”). El path puede
ser definido de dos maneras:
La ruta absoluta siempre inicia con slash („/‟), que es el símbolo para el directorio raíz.
etc home
El FHS no especifica todos los detalles. El FHS define dos niveles de jerarquía.
Debido al kernel no se encarga de todas las tareas del sistema operativo, los programas
que inician deben de estar en esta partición.
10
http://www.pathname.com/fhs/
Esto incluye varios „shells‟, los comandos mas importantes para trabajar con archivos y
muchos comandos para el análisis y configuración del sistema.
Archivo Descripción
/bin/bash El Shell bash
/bin/cat Despliega el contenido de un archivo
/bin/cp Copia archivos
/bin/dd Copia archivos en modo binario
/bin/gzip Comprime archivos
/bin/mount Monta sistemas de archivos
/bin/rm Borra archivos
/bin/vi Editor „vi‟
El directorio /boot contiene archivos estaticos que permiten al gestor de arranque del
sistema GRUB11. Estos archivos son necesarios para el proceso de arranque.
El respaldo de la información del MBR12 y el mapa del sistema de archivos también son
almacenados aquí. Este ultimo contiene información sobre donde exactamente se ubica el
kernel en la partición. Adicionalmente este directorio contiene el kernel llamado vmlinuz.
-Otras particiones (/data)
Si YaST encuentra otras particiones (no Windows) u otros discos duros durante el
proceso de instalación, procede a crear puntos de montaje para cada una de las
particiones etiquetándolas como: /data1, /data2, /data3, etc…
-Archivos de dispositivo (/dev)
Los componentes de hardware son direccionados por estos archivos para leer o escribir
sobre estos mediante estos archivos. Dos tipos de archivos son definidos para los
dispositivos:
11
GRand Unified Bootloader
12
Master Boot Record
El dispositivo „null‟ (/dev/null) también es ubicado en este directorio. Cualquier dato que se
envíe a este dispositivo, será purgado del sistema.
Usuarios normales pueden leer todos estos archivos, pero no podrán editar ninguno de
ellos. De acuerdo a las normas FHS, programas NO-EJECUTABLES pueden ser
ubicados aquí.
Archivo Descripción
/etc/SuSE-release Número de versión del sistema SUSE instalado
/etc/inittab Archivo de configuración para el proceso de arranque del sistema
/etc/init.d/* Almacena los script para iniciar servicios
/etc/modprobe.conf Archivos de configuración de los módulos del kernel
Cada usuario de un sistema Linux tiene su propio espacio de trabajo, en este puede crear,
editar y eliminar directorios y archivos. Este espacio es llamado directorio „home‟ del
usuario. Cada vez que un usuario ingresa al sistema, este se „abre‟ en su directorio
„home‟.
Archivo Descripción
.profile Script para el proceso de ingreso, personalizado para este
usuario
.bashrc Archivo de configuración para el Shell bash
.bash_history Lista de comandos previamente utilizados con el Shell bash
Muchos programas usan funciones específicas que también son usadas por otros
programas. Estas funciones estándar son removidas del programa y almacenadas en el
sistema, y solamente son llamadas cuando el programa las necesita. A estas funciones se
les llama „librerías compartidas‟.
Este directorio contiene las librerías que son usadas por los programas que están
ubicados en /bin y /sbin. Los módulos del kernel son ubicados en el directorio
/lib/modules/. También se pueden encontrar más librerías en el directorio /usr.
SUSE Linux crea directorios en el directorio /media/ con el objetivo de montar dispositivos
de uso temporal como por ejemplo:
/media/floppy/
/media/cdrom/
/media/cdrecorder/
/media/dvd/
/media/usbdisk/
/media/media_name/
-Directorio de Aplicaciones (/opt)
Los programas que se instalen en el sistema pueden almacenar sus archivos estaticos en
el directorio /opt. Dentro de este directorio deben de ubicarse las carpetas con los
nombres de los programas instalados.
-Directorio del usuario root (/root)
El directorio home del usuario root, no se encuentra en el directorio por defecto para todos
los usuarios (/home/), esto se debe a que el usuario root no es un usuario común. Este
usuario es el administrador y super-usuario de los sistemas „like-UNIX‟, tiene todos los
privilegios de acceso y permisos de lectura y escritura en todo el árbol de directorios.
Tener un home diferente le garantiza a este usuario el ingreso sin tener que apropiarse
directamente del directorio raíz del árbol de directorios („/‟).
-Binarios del sistema (/sbin)
Este directorio contiene programas importantes para la administración del sistema. Estos
programas pueden ser ejecutados por usuarios normales tal como los programas
ubicados en /bin. A pesar de poder ser ejecutados por usuarios normales, estos no
pueden modificar los archivos de configuración de estas aplicaciones, esta labor solo
puede ser ejecutada por el usuario root.
Archivo Descripción
/sbin/SuSEconfig Inicia el modulo SuSEconfig en el directorio /sbin/conf.d/
/sbin/conf.d/* Contiene los scripts para la familia SuSEconfig que son llamadas
por /sbin/SuSEconfig
Estos son usados para configurar el sistema, evaluar entradas en
los archivos de configuración en el directorio /sbin/sysconfig/, y
escribir futuros archivos de configuración.
/sbin/yast Herramienta de administración para SUSE
/sbin/fdisk Modifica particiones
/sbin/fsck* Verifica los sistemas de archivo (file system check)
/sbin/init Inicializa el sistema
/sbin/mkfs* Crea un sistema de archivos (formateando)
/sbin/shutdown Apaga el sistema
Esta es la ubicación estándar para todas las aplicaciones, archivos de la interfaz grafica,
librerías adicionales, programas instalados localmente, y comúnmente directorios
compartidos que contienen documentos.
Archivo Descripción
/usr/X11R6/ Archivos para el sistema X-Windows
/usr/bin/ Contiene en teoría todos los programas ejecutables
/usr/lib/ Librerías.
/usr/local/ Programas instalados localmente, actualmente con frecuencia se
encuentran también en el directorio /opt/
/usr/sbin/ Programas para administración del sistema
/usr/share/doc/ Documentación
/usr/share/man/ Manuales, descripciones de los comandos
/usr/src/ Archivos fuentes de todos los programas y del kernel
Este directorio y sus subdirectorios contienen archivos que pueden ser modificados
mientras el sistema este en ejecución.
Archivo Descripción
/var/lib/ Librerías de variables (tales como las bases de datos para los
comandos de ubicación y rpm)
/var/log/ Archivos de log de muchos servicios
/var/run/ Archivos con información de los procesos en ejecución
/var/spool/ Directorio para las colas (colas de impresión o de correo)
/var/lock/ Archivos bloqueados para proteger dispositivos.
Si YaST encuentra cualquier partición con un sistema de archivos Microsoft, este crea un
directorio /Windows automáticamente. Dentro de este directorio existen subdirectorios
etiquetados con los caracteres de discos tipo Windows (ejemplo C, D, etc…).
-Archivos de procesos (/proc)
Linux toma información sobre los procesos en ejecución, esta información está disponible
en los archivos de este directorio. Este directorio en realidad no contiene ningún archivo
real y por lo tanto no utiliza espacio de disco, los archivos son generados
automáticamente cuando se manda a listar el contenido del directorio (ls /proc/)
Archivo Descripción
/proc/cpuinfo Información sobre el procesador
/proc/dma Uso de los puertos DMA
/proc/interrupts Uso de las interrupciones
/proc/ioports Uso de los puertos I/O intrasystem
/proc/filesystems Formatos de sistema de archivos que el kernel entiende
/proc/modules Módulos activos
/proc/mounts Sistemas de archivos montados
/proc/net/* Información sobre las especificaciones de red y estadísticas en
formato humano.
/proc/partitions Particiones existentes
/proc/bus/pci Dispositivos PCI existentes
/proc/bus/scsi/ Dispositivos SCSI existentes
/proc/sys/* Información del sistema y del kernel
/proc/versión Versión del kernel
Todos los archivos de este dispositivo ahora están disponibles a través del directorio /mnt.
Para desmontar el dispositivo se usa el comando „umount‟
umount /mnt
Para montar estos tipos de sistemas de archivos, primero debemos crear un directorio
para el mismo. Este directorio sirve para referenciar estos sistemas de archivos con los
puntos de montaje.
Directorio Descripción
/home Directorio home de los usuarios
/opt Directorio de las Aplicaciones
/usr Unix Specific Resources
Directorio Descripción
/bin Programas importantes
/boot Archivos de arranque y del kernel
/dev Archivos de dispositivos
/etc Archivos de configuración
/lib Librerías
/sbin Programas importantes para la administración del sistema
Los tipos de archivos en Linux que son „normales‟ y „directorios‟ son también conocidos
por otros sistemas operativos, pero aparte de estos existen los siguientes:
Archivos de Dispositivos
Enlaces
Sockets
FIFOs
-Archivos Normales
Los archivos normales se refieren a los archivos que son reconocidos también por otros
sistemas operativos, estos son un conjunto de datos contiguos con un nombre. Esto
incluye todos los archivos normalmente escrito bajo estos términos (archivos de texto,
programas ejecutables, archivos gráficos, etc…). Estos archivos no necesitan asociar el
tipo con una extensión de su nombre (archivo.txt), Linux no necesita esta separación para
operar sobre estos archivos. La extensión en estos archivos es necesaria para asociar al
archivo mismo a una aplicación específica, ya sea un editor de texto o un compilador.
-Directorios
Los directorios tienen dos entradas con la que la estructura jerárquica del sistema de
archivos se implementa. Una de esas entradas (“.”) define al directorio en sí. La otra
entrada (“..”) define al directorio „padre‟ del mismo, o sea define al directorio de nivel
superior al directorio actual.
-Archivos de Dispositivos
Los archivos de tipo enlace referencian ubicaciones de otros archivos del sistema. El
mantenimiento de los datos es simplificado mediante el uso de este tipo de archivo. Los
cambios solamente se realizan en el archivo original. El cambio realizado inmediatamente
se actualiza en todos los enlaces del archivo.
-Sockets
Un archivo de tipo socket, es un archivo especial cuando los datos son comunicados entre
dos procesos ejecutándose localmente, esto puede ser implementado entre archivos del
sistema.
FIFO13 también llamado tubería, es un término usado para los archivos de intercambio de
datos entre procesos. Estos archivos pueden enviar datos solamente en una dirección.
Se pueden usar los siguientes comandos para cambiar el directorio activo y listar el
contenido de un directorio:
cd
ls
pwd
NOTA: Recordemos que Linux es “case sensitive”, los comandos están diseñados para
ser invocados con minúsculas.
-cd
Se puede usar el comando „cd‟14 para navegar o moverse entre directorios. Como ejemplo
de uso de este comando tenemos:
-ls
El comando „ls‟15, lista los archivos específicos. Si un directorio es incluido con „ls‟, el
contenido del directorio será desplegado. Si no se ingresa opciones, „ls‟ listara el
contenido del directorio actual.
13
First In First Out
14
Change directory
15
List
-pwd
Se puede usar el comando „pwd‟16 para desplegar la ruta del directorio actual. Combinado
con la opción „-P‟, este comando imprime el directorio físico obviando los enlaces
simbólicos.
16
Print working directory
geeko@da51:~> ls
bin Desktop Documents public_html
geeko@da51:~> touch example.html
bin Desktop Documents example.html public_html
geeko@da51:~>
Se puede usar el comando „cat‟ para visualizar el contenido de un archivo. Este comando
debe de tener como parámetro el nombre del archivo del que se desea visualizar el
contenido. Observemos el ejemplo:
Tecla Descripción
Barra Espaciadora Mueve el contenido una pantalla hacia abajo.
b Mueve el contenido una pantalla hacia arriba.
Flecha Abajo Mueve el contenido una línea hacia abajo.
Flecha Arriba Mueve el contenido una línea hacia arriba.
?palabra Busca „palabra‟ en el archivo de manera descendente.
n Mover hacia la siguiente coincidencia de búsqueda
N Mover hacia la coincidencia de búsqueda previa
q Salir
Con el comando „head‟, se puede visualizar solamente las primeras líneas de un archivo.
Con el comando „tail‟ se puede visualizar las últimas líneas de un archivo. El estándar de
este comando es mostrar solamente las 10 últimas líneas. Para cambiar esto se debe
agregar la opción –number.
Cuando este comando se usa con la opción –f se despliega en tiempo real las
actualizaciones de las últimas líneas del archivo. Si una se agrega una línea al final del
archivo mientras el comando „tal –f‟ esta en ejecución, la línea en cuestión se despliega
en la pantalla. Para salir del comando „tail –f‟ se debe presionar la combinación [Ctrl]+[c].
Para copiar y mover archivos y directorios, debemos conocer los comandos para realizar
esta acción:
Se puede usar el comando „mv‟ para mover un archivo de un directorio a otro. Por ejemplo
para mover todos los archivos con extensión „txt‟ al directorio /tmp se ingresa el comando:
mv *.txt /tmp
mv example.html index.html
Opción Descripción
-i Consulta y pide confirmación antes de mover o renombrar un
archivo. Esto previene que archivos existentes no se sobre
escriban.
-u Mueve solamente los archivos mas recientes al destino. Esto es
útil cuando el destino ya contiene archivos y se planea mover
archivos con nombres ya existentes en ese directorio.
Copiar archivos
Se puede usar el comando „cp‟ para copiar archivos y directorios (usando la opción –r). La
sintaxis de este comando es la siguiente:
cp origen destino
cp –R /tmp/quarterly-1 tmp/expenses
La siguiente tabla muestra las opciones mas comunes del comando „cp‟
Opción Descripción
-a, --archive Copia un directorio y subdirectorios, los enlaces simbólicos,
permisos de archivos, propietarios, y fechar de los
archivos/directorios no son modificados.
--help Despliega la ayuda del comando cp
-i, --interactive Pregunta antes de sobre escribir
-R. –r, --recursive Copia directorios de manera recursiva (el directorio con sus
subdirectorios)
-s, --symbolic-link Crea enlaces simbólicos en vez de copias.
-u, --update Copia un archivo únicamente si el origen es mas reciente que el
destino o cuando el archivo destino no existe.
-Crear directorios
mkdir –p /home/geeko/dir1/dir2/dir3
Con esto el comando creara dentro de la carpeta /home/geeko/ un directorio llamado dir1
y dentro de este otro llamado dir2 y dentro de dir2 otro directorio llamado dir3.
-Borrar archivos y directorios
rmdir nombre_del_directorio
Se puede utilizar el comando „rm‟ para borrar archivos. La sintaxis de este comando es:
rm nombre.*
Este ejemplo elimina todos los archivos llamados „nombre.‟, cuando elimina archivos el
comando no pide confirmación, otro detalle es que este comando „purga‟ los archivos
eliminados, o sea, los archivos eliminados con este comando no podrán ser restaurados.
Las siguientes opciones son las mas utilizadas en conjunto con este comando:
Opción Descripción
-i Solicita la confirmación de eliminación de archivo
-r Esta opción le permite a este comando eliminar el árbol de directorios.
-f Combinando –r con –f el comando elimina sin mostrar mensajes de error o
solicitud de confirmación.
-Archivos de Enlace
Cada archivo es descrito por un „inodo17‟. Para listar los números de los inodos con el
comando „ls‟ se debe de agregar la opción „-i‟: ls –i.
Los inodos tienen un tamaño de 128bytes y contienen toda la información sobre el archivo
aparte del nombre del archivo. Esto incluye información tal como su propietario, privilegios
de acceso, tamaño, diferentes fechas, y los enlaces a los bloques de datos del archivo.
El comando „ln‟ crea enlaces. Un enlace es una referencia a un archivo. Con un enlace, se
puede acceder a un archivo desde cualquier parte del sistema de archivos usando
diferentes nombres. Esto significa que el archivo en si no esta duplicado, pero puede ser
encontrado mediante diferentes nombres.
Enlaces Duros18
Enlaces Simbólicos19
17
Index Node, o, Information Node
18
Hard Links
Para crear un enlace duro se usa simplemente el comando „ln‟ con la siguiente sintaxis:
ln archivo_viejo enlace_duro_de_archivo_viejo
De esta manera el archivo podrá ser accedido utilizando cualquiera de los dos nombres.
El hecho que ambos archivos tengan el mismo inodo, hace prácticamente imposible el
discernir cual de los dos nombres es el original y cual fue creado después mediante este
comando.
Estos enlaces solo pueden ser utilizados si ambos archivos se encuentran en el mismo
sistema de archivos, esto debido a que los inodos son entradas únicas en cada uno de los
sistemas de archivos.
Para crear un enlace simbólico se le debe agregar al comando la opción „-s‟. Un enlace
simbólico tiene asignado su propio inodo por tanto podemos tener información diferente
tanto del archivo original como de su enlace simbólico. La sintaxis del comando es:
ln –s archivo_viejo enlace_duro_de_archivo_viejo
La ventaja de este tipo de enlace es que se puede crear enlaces a directorios y en otros
sistemas de archivos.
Para comprender el tema, supongamos que los siguientes archivos existen y están
repartidos por todo el árbol de directorios:
La siguiente tabla mostrara los resultados de diferentes formas de búsqueda en las cuales
se combinan los comodines antes mencionados:
19
Symbolic Links
File1a
File1b
File2
File2a
¿ile* File
file
File1
File1a
File1b
File2
File2a
En Linux las búsquedas dentro del Escritorio gráfico (GNOME), tenemos dos
herramientas para ejecutar estas búsquedas:
Para proceder con la búsqueda, basta con seleccionar el directorio donde se ejecutará la
búsqueda y colocar un texto en el cuadro de dialogo „Nombre contiene:‟ y presionar el
botón „Buscar‟
Para buscar archivos desde la línea de comandos, se usa el comando „find‟, la sintaxis de
este comando es la siguiente:
Este comando tiene una multitud de opciones, para leer sobre ellas use el comando „man
find‟ para leer los manuales del comando.
La acción se refiere a las opciones que influencian las condiciones de búsqueda. Por
ejemplo „-print‟ y „-exec‟, este ultimo solicita un comando del Shell para ser ejecutado en
conjunto con „find‟.
-Comando locate
El comando „locate‟ es una alternativa de uso al „find‟, este debe ser instalado por
separado, no viene preinstalado en ninguna distribución de Linux. El comando find busca
el archivo o carpeta en dependencia de la ruta, y si esta se define como „/‟ el comando
sería muy lento.
locate file
locate umount
Este comando retorna los binarios (-b), manuales (-m) y fuentes (-s) del comando
especificado.
NOTA: Para listar el contenido de la variable PATH use el comando: „echo $PATH‟
-Comando type
Este comando puede ser usado para mostrar la ruta de los comandos y si es de Shell (un
comando que es esencial para el interprete de comandos) lo informará.
Comando grep
Expresiones Regulares
-Comando grep
El comando „grep‟ y sus variantes son usados para buscar archivos con ciertos patrones,
su sintaxis es:
El comando busca en „archivo‟ e imprime en pantalla, todos los textos que concuerden
con el patrón de búsqueda.
Se puede especificar muchos archivos, en cuyo caso la salida no solo muestra la línea de
texto que concuerda con el patrón de búsqueda, sino que también muestra el archivo que
contiene el patrón.
Opción Descripción
-i Ignora mayúsculas – minúsculas.
-l Muestra solo los nombres de los archivos que contienen el
patrón de búsqueda
-r Busca en el árbol de directorios completo.
-v Muestra todas las líneas aunque no contengan el patrón de
búsqueda
-n Muestra el número de la línea
-h No muestra los nombres de los archivos
man 7 regex
Objetivos
El Shell acepta las entradas de los usuarios, las interpreta, convierte estas en llamadas al
sistema, y envía los mensajes del sistema de regreso al usuario, convirtiéndolo en un
intérprete de comandos.
Tipos de Shell
Archivos de configuración de bash
Completar los comandos y nos nombres de archivos
-Tipos de Shell
UNIX tiene muchas series de Shell, muchos de estos son provistos por Linux en versiones
libres. A continuación ejemplos de los Shell más populares.
Cada Shell puede ser iniciado como un programa y se pueden conmutar entre ellos
usando solamente sus archivos ejecutables.
-Archivos de configuración de bash
Para personalizar para una sesión interactiva de bash, se necesita conocer los archivos
de configuración y el orden en que deben ser procesados.
Login Shell
Login Shell
Un „Login Shell‟ se inicia siempre que un usuario accede al sistema. Los Shell que son
cargados sin que exista un usuario en el sistema son llamados „non-login shell‟, los
siguientes archivos son leídos cuando un usuario accede al sistema:
1. /etc/profile. Este archivo se lee cada vez que se accede un usuario al sistema. Este
almacena las configuraciones globales de bash. También sirve como archivo de
configuración para otros shells. El archivo ~/.profile es una archivo creado para cada
usuario, cada usuario puede personalizar su propio archivo profile.
2. /etc/bash.bashrc. algunas de las configuraciones más completas están ahí por
ejemplo:
a. La apariencia del prompt
b. Colores para el comando ls
c. Aliases
-Completar los comandos y nos nombres de archivos
Si existen más de una posibilidad, bash mostrará todas las posibilidades cuando se
presione [Tab] por segunda ocasión. Esta funcionalidad hace que entrar nombres de
archivos muy largos sea muy fácil.
Función „history‟
Conmutar hacia el usuario „root‟
-Función ‘history’
El Shell bash almacena los comandos que se ingresan, así se tiene fácil acceso a ellos.
Por estándar, el histórico de los comandos se almacena en el archivo .bash_history en el
directorio home de cada usuario, y logra almacenar (por defecto) hasta 1000 entradas.
Antes de eso debemos asegurarnos de que somos o no „root‟, para eso usamos el
comando „id‟ o el comando „whoami‟, una vez comprobado que no somos el „root‟, nos
podemos conmutar usando el comando „su –‟ o el comando „su – root‟ y luego ingresando
la contraseña del „root‟.
Variables de entorno
Aliases
-Variables de entorno
Con las variables de entorno, podemos habilitar y ajustar el entorno con sus propios
requerimientos.
Las variables de entorno son usadas para controlar el entorno de los programas iniciados
desde el Shell. Las variables del Shell, por otro lado, son usadas para controlar el entorno
del Shell en sí.
Para desplegar el contenido de estas variables se usa el comando „echo‟, su sintaxis es:
echo $PATH
echo $HOME
echo $USER
MYVAR=myvalue
echo $MYVAR
myvalue puede ser un numero, un carácter o una cadena. Si la cadena incluye espacios,
se debe escribir el valor entre comillas dobles, por ejemplo:
Definir aliases nos permite crear accesos directos de comandos y sus opciones, o para
crear comandos con nombres completamente diferentes.
Los comandos Linux „ls‟ y „mkdir‟ tienen aliases definidos, estos son „dir‟ y „md‟
respectivamente.
Podemos ver si un comando es un aliases de otro usando el comando „alias‟, por ejemplo:
alias md
alias dir
NOTA: Los aliases son validos para el Shell en que se crea, pero no serán reconocidos
por sub-shell.
Para hacer que un alias sea persistente, se necesita almacenar la definición en uno de los
archivos de configuración del Shell. Podemos crear aliases personalizados por usuario,
editando el archivo ~/.alias.
Este archivo es leído por ~/.bashrc, cuando un comando es incluido para este efecto. Los
aliases no son relevantes para los scripts del Shell, pero pueden ser un ahorro de tiempo
significativo al momento de estar trabajando en el entorno de comandos.
Para conocer las variables que determinan la ubicación. Se debe usar el comando „locale‟
, esto mostrará las variables de ubicación.
geeko@da51:~> locale
LANG= es_ES.UTF-8
LC_CTYPE=es_ES.UTF-8
LC_NUMERIC="es_ES.UTF-8"
LC_TIME="es_ES.UTF-8"
LC-COLLATE="es_ES.UTF-8"
LC_MONETARY="es_ES.UTF-8"
LC_MESSAGES="es_ES.UTF-8"
LC_PAPER="es_ES.UTF-8"
LC_NAME="es_ES.UTF-8"
LC_ADDRESS="es_ES.UTF-8"
LC_TELEPHONE="es_ES.UTF-8"
LC_MEASUREMENT="es_ES.UTF-8"
LC_IDENTIFICATION="es_ES.UTF-8"
LC_ALL=
geeko@da51:~>
geeko@da51:~> locale
LANG=POSIX
LC_CTYPE=es_ES.UTF-8
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC-COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
geeko@da51:~>
Para „root‟ la variable LANG está configurada con „POSIX‟, que significa que la
codificación de caracteres es ASCII.
-Expansión de nombres usando patrones de búsqueda
20
UCS Transformation Format
21
Universal Character Set
Recordemos que existen caracteres que tienen un significado especial para el Shell, para
evitar que este los interprete de manera errónea, se deben „enmascarar‟, por ejemplo:
Entrada estándar. El programa en ejecución lee la entrada estándar por este canal
(generalmente el teclado)
Salida estándar. El programa en ejecución envía su salida por este canal
(generalmente el monitor)
Error estándar. Los errores del sistema se envían por este canal (generalmente el
monitor)
Cada canal puede ser re direccionado por el Shell. Por ejemplo, las entradas, salidas y
errores pueden ser direccionadas a un archivo directamente. Los siguientes son
caracteres de re-dirección:
Carácter Descripción
< Redirige la entrada estándar
> Redirige la salida estándar
2> Redirige el error estándar
NOTA: > Sobre escribe un archivo existente. Si la salida debe ser agregada a un archivo
existente, se debe usar >> o 2>>
El uso de la tubería se define con el carácter „|‟22, este permite unir dos o más comandos
para ejecutar dos labores que de lo contrario seria necesario varios, por ejemplo:
22
pipe
Objetivos
Debido a que muchos servicios de un sistema Linux son configurados mediante archivos
de texto ASCII, se necesita un editor de texto. En Linux existen muchos editores de texto,
por ejemplo:
vi
emacs
xemacs
xedit
gedit
kwrite
Cada uno de ellos con sus ventajas y desventajas. Existen editores para la interfaz gráfica
y para la línea de comandos. La principal ventaja de los editores de línea de comandos es
que no se necesita cargar la interfaz gráfica para realizar la labor.
En SLES, vim23 desarrollado por Bram Moolenaar es el editor estándar. „vi‟ es un enlace
simbólico a este editor de texto.
-Iniciar vi
vi exercise
El símbolo „~‟ indica que la línea no existe en el archivo. En este archivo el cursor se ubica
en la primera línea del editor.
23
Vi improved
Se puede mover el cursor a través del archivo usando las teclas k24,j25,h26, y l27 o usando
las teclas direccionales.
-Aprender algunos modos de trabajo
En contraste con otros editores, „vi‟ es orientado a modo. Cuando se ejecuta, entra en
modo comando. Cualquier cosa que se ingrese estando en este modo, el programa lo
interpreta como un comando. Se debe conmutar al modo inserción para poder ingresar
datos al archivo, esto puede resultar muy frustrante para usuarios que no están
familiarizados con este editor. Adicionalmente para conmutar a otros modos, se debe
conocer las combinaciones de teclas para esto, aun así la cantidad de comandos
necesarios para trabajar con „vi‟ son relativamente pocos y se pueden aprender con
facilidad.
Para poder introducir texto en el archivo se debe conmutar al modo de inserción usando la
tecla „i‟, en la parte inferior del editor aparecerá el mensaje --INSERT--. Presionando la
tecla [Esc], salimos del modo de inserción y retornamos al modo comando. Estando en el
modo comando, la tecla [:] precede los comandos que se pueden ejecutar en „vi‟.
La siguiente tabla resume los comandos más comunes del modo comando:
Comando Resultado
i Conmuta al modo inserción.
x Borra el carácter en el que se encuentre ubicado el cursor.
dd Borra la línea completa en la que se encuentre ubicado el cursor.
D Borra el resto de la línea desde donde se encuentre ubicado el cursor.
yy Copia en el buffer de memoria la línea en la que se encuentre ubicado el
cursor.
u Deshace la última operación sobre el archivo
/patrón Busca el patrón en el archivo de la posición del cursor hacia adelante en
el archivo.
?patrón Busca el patrón en el archivo de la posición del cursor hacia atras en el
archivo.
Nón Repite la búsqueda en dirección opuesta o en la misma dirección.
24
Una línea arriba
25
Una línea abajo
26
A la izquierda
27
A la derecha
Para :w, :q, y :wq, se le puede agregar al final el símbolo „!‟ que le indicará a la aplicación
que realice las acciones de este comandos de manera „forzada‟.
Objetivos
Debido a que el sistema puede tener un número alto de usuarios (con nombres de usuario
y contraseña), el sistema identifica a cada uno con un número único. Este número se
denomina UID28. Cada sistema Linux tiene un único usuario privilegiado, el usuario „root‟.
Este usuario siempre tendrá el UID „0‟. Este usuario también funge como administrador
del sistema.
Así como los usuarios, cada grupo tiene asociado un número único en el sistema, este
número es llamado GID29, y puede ser de uno de estos tipos: grupos normales, grupos
usados por el sistema, el grupo root (GID=0).
28
User IDentifier
29
Group IDentifier
Nombre de usuario
Nombre completo
UID
Grupo asociado.
Se puede crear una nueva cuenta de usuario o editar una cuenta existente con solo
presionar „Agregar‟ o „Editar‟.
Como cualquier otro sistema operativo, Linux controla el acceso a los archivos
implementando los siguientes componentes:
Debido a la cantidad de usuarios que puede tener el sistema, Linux administra los
usuarios y grupos con números. El número asignado a los usuarios se denomina UID.
Cada sistema Linux tiene un único usuarios privilegiado (root) este usuario tiene un
UID=0. En SLES los usuarios normales tienen un UID que inicia en 1000.
Así como los usuarios los grupos tienen asociado un número único llamado GID. Los
usuarios normales se incluyen en el grupo „users‟. Otros grupos también son creados para
roles o tareas especiales. Se puede usar el comando „id‟ para obtener la información del
UID y GID de los usuarios.
geeko@da51:~> id
uid=1001(geeko) gid=100(users) grupos=16(dialout),33(video),100(users)
geeko@da51:~>
Usuarios regulares. Estas son cuentas de usuario que se crean para acceder a un
ambiente Linux. Esto permite asegurar el entorno de acceso a datos y aplicaciones.
Estas cuentas de usuario son administradas por el administrador del sistema.
Usuarios de sistema. Estas cuentas se crean al momento de la instalación del
sistema, y son usadas por los servicios, utilidades y otras aplicaciones que hacen que
el servidor funcione adecuadamente y eficientemente.
Para tener una cuenta de usuario en Linux, se debe habilitar un área personal protegida
de las modificaciones o visualizaciones que puedan realizar otros usuarios. Cada usuario
puede configurar su propio entorno de trabajo. Como parte de esta seguridad, cada
usuario en el sistema tiene su propio directorio en el directorio /home/
La excepción a esta regla es la cuenta del root. Este tiene su propio directorio home en el
directorio /root/.
Los directorios home permiten que los usuarios almacenen datos y configuraciones que
son propios de estos usuarios y solo ellos tendrán acceso.
Archivos de configuración de usuarios y contraseñas
NOTA: de ser posible, estos archivos no deben ser modificados con editores de texto. En
vez de eso, se puede usar el modulo de „Usuarios y Seguridad‟ provisto en YaST o la
herramienta de línea de comandos descritas en el siguiente tema.
La modificación de estos archivos puede acarrear errores (especialmente en el
/etc/shadow), y provocar que los usuarios no logren acceder al sistema.
/etc/passwd
Este archivo almacena información de cada usuario tal como su nombre de usuario, el
UID, el directorio home y el Shell. Este archivo solamente puede ser modificado por el
root.
#1 #2 #3 #4 $5 #6 #7
geeko : x : 1001 : 100 : Geeko Chamaleon : /home/geeko : /bin/bash
/etc/shadow
#1 #2 #3 #4 $5 #6 #7 #8
geeko : $wer1234ASd1341!”#%”$% : 13181 : 0 : 99999 : 7 : -1 : :
/etc/group
Este archivo almacena información del grupo. Cada línea representa un registro único
para el grupo, su estructura es la siguiente:
#1 #2 #3 #4
users : x : 100 :
useradd
El usuario root puede usar el comando „useradd‟ para realizar las mismas labores de
administración de usuarios que se realizan con YaST.
NOTA: la opción –p debe especificarse con una contraseña encriptada, no debe colocarse
texto plano. La aplicación mkpasswd se usa para generar contraseñas encriptadas para
este propósito.
-e. Esta opción le permite configurar una fecha de expiración para las cuentas de
usuario, el formato debe ser: YYYY-MM-DD, como en el siguiente ejemplo:
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
GROUPS=video,dialout
CREATE_MAIL_SPOLL=no
Antes de eliminar una cuenta de usuario, es importante obtener su UID, esto debido a que
userdel solamente elimina los archivos contenidos en el home, pero puede ser que
existan archivos del usuario en otras ubicaciones del sistema de archivos por ejemplo
/var/spool/mail/. Para eliminar estos archivos se debe usar el comando:
Las opciones de usermod son básicamente las mismas del comando useradd, por
ejemplo:
En este ejemplo el comando passwd es acompañado con la opción „–l‟, lo que bloquea el
acceso al usuario „geeko‟ al cambiarle la contraseña.
Con este comando se pueden crear grupos, sus opciones son dos:
-g: se usa para especificar un GID al grupo, por ejemplo: groupadd –g 200 grupo
-p: se usa para especificar una contraseña encriptada para el grupo.
groupdel
Con este comando se elimina un grupo. Este comando no tiene opciones y solamente se
puede eliminar el grupo si no tiene asociado ningún usuario.
groupmod
Con este comando se modifican algunos ajustes del grupo, tales como el GID, nombre, y
usuarios. Veamos los ejemplos (asumiendo que el grupo wáter existe):
Con este comando podemos cambiar el grupo efectivo del usuario a otro en que este
registrado, por ejemplo:
geeko@da51:~> id
uid=1001(geeko) gid=100(users) grupos=16(dialout),33(video),100(users)
geeko@da51:~> newgrp video
geeko@da51:~> id
uid=1001(geeko) gid=33(video) grupos=16(dialout),33(video),100(users)
geeko@da51:~> exit
geeko@da51:~> id
uid=1001(geeko) gid=100(users) grupos=16(dialout),33(video),100(users)
geeko@da51:~>
Como se notará el grupo primario cambio después del comando newgrp, y retorno a su
posición original con el comando exit.
Si el grupo definido por newgrp tiene configurado una contraseña, esta será solicitada, si
el usuario no está agregado al grupo y conoce la contraseña este será agregado
automáticamente al mismo.
-Crear mensajes de texto para los usuarios que acceden al sistema
Crear estos mensajes es importante, ya que despliega información cuando los usuarios
accesan al modo comando en un ambiente Linux.
/etc/issue. Este es el archivo para configurar el mensaje inicial para los usuarios que
acceden al sistema localmente.
/etc/issue.net. Este es el archivo para configurar el mensaje inicial para los usuarios
que acceden al sistema vía red.
/etc/motd. Editar este archivo configura el mensaje del día.
Nos debemos asegurar de dejar uno o dos espacios después del mensaje para identificar
bien el promtp del sistema.
Como estudiamos ya el comando „ls –l‟ despliega el contenido del directorio actual y
muestra los privilegios de acceso asignados a los archivos y directorios dentro del
directorio. Por ejemplo:
geeko@da51:~> ls -l
-rw-r--r-- 1 geeko users 0 2012-11-16 19:10 my_file
geeko@da51:~>
Se observa que los primeros caracteres son los siguientes: „-rw-r--r--'. Estos caracteres son
los que definen los privilegios de acceso al archivo my_file.
-. Archivo Normal
d. Directorio
l. Enlace
Los restantes nueve caracteres muestran los permisos de archivo. Estos son:
Lectura (r). Este permiso permite el acceso a la lectura del contenido del archivo.
Escritura (w). Este permiso permite el acceso de escritura al archivo.
Ejecución (x). Este permiso permite la ejecución del archivo.
Los primeros tres caracteres representan los privilegios del propietario del archivo.
Los siguientes tres caracteres representan los privilegios del grupo al que pertenece el
propietario del archivo.
Los últimos tres caracteres representan los privilegios de todos los demás usuarios del
sistema.
Los privilegios también pueden ser representados por la representación en decimal de sus
binarios correspondientes:
Para modificar los privilegios de acceso a los archivos se usa el comando „chmod‟.
Existen dos maneras de realizar esta acción, la primera es usando la representación con
caracteres y la segunda usando la representación decimal del privilegio a configurar.
chmod usando código de caracteres
Para usar el código de caracteres para agregar privilegios se usa el símbolo „+‟ y para
eliminar privilegios „-„, a este símbolo se le agrega las opciones „u‟ para el propietario, „g‟
para el grupo, „o‟ para los otros usuarios y „a‟ para todos los privilegios. A continuación
mostramos ejemplos usando chmod:
Ejemplo Resultado
chmod u+x El propietario obtiene privilegios de ejecución.
chmod g=rw Todos los miembros del grupo podrán leer y escribir.
chmod u=rwx El propietario obtiene todos los permisos.
chmod u=rwx,g=rw,o=r Todos los permisos al propietario, lectura y escritura a los
miembros del grupo y solo lectura a los otros usuarios.
chmod +x Todos los usuarios (propietario, miembros del grupo y otros)
reciben permisos de ejecución.
chmod a+x Ídem del anterior.
Con la opción –R, chmod puede cambiar los privilegios de un directorio y su contenido.
chmod usando código decimal
Teniendo en cuenta los privilegios de este archivo, vamos a operar los mismos ejemplos
de la tabla anteriormente vista:
Ejemplo Resultado
chmod 744 my_file El propietario agrega privilegios de ejecución.
chmod 664 my_file A todos los miembros del grupo se les agrega poder leer y
escribir.
chmod 744 my_file El propietario obtiene todos los permisos.
chmod 764 my_file Todos los permisos al propietario, lectura y escritura a los
miembros del grupo y solo lectura a los otros usuarios.
chmod 755 my_file Todos los usuarios (propietario, miembros del grupo y otros)
reciben permisos de ejecución.
Si solo se desea cambiar el propietario, solamente basta con omitir „.grupo‟ y se realizara
el cambio. De igual manera si solo se desea cambiar el grupo se elimina „usuario‟ y el
cambio del grupo será realizado (esta variante la puede usar un usuario normal). El
comando „chgrp‟ realiza también este último cambio, su sintaxis es:
En los ajustes originales de acceso, los archivos al momento de crearse toman los
siguientes privilegios 666 y los directorios 777.
Para modificar (restringir) estos accesos por defecto se puede usar el comando „umask‟.
Se debe usar este comando con tres dígitos numéricos tales como 022. Los permisos
definidos con el comando, son removidos de los permisos por defectos. Por ejemplo,
ingresamos umask 022 se tiene el siguiente resultado:
Directorios Archivos
rwx rwx rwx rw- rw- rw-
Permisos Estándar
7 7 7 6 6 6
--- -w- -w- --- -w- -w-
umask
0 2 2 0 2 2
rwx r-x r-x rw- r-- r--
Resultado
7 5 5 6 4 4
Por ejemplo, cuando un usuario intenta acceder a la tarjeta de sonido para reproducir
sonidos, el acceso al dispositivo es determinado por los ajustes de los privilegios en el
archivo de dispositivo ubicado en el directorio /dev/.
Para asegurar una seguridad básica del sistema de archivo, se necesita conocer lo
siguiente:
Como regla general, un usuario normal solo tiene acceso de escritura en los siguientes
directorios: el directorio home del usuario y el directorio /tmp para el almacenamiento de
archivos temporales.
Algunos dispositivos pueden tener acceso de escritura (por ejemplo los las unidades
ópticas R/W), que necesitan enviar datos por dicho dispositivo.
-Reglas básicas para definir usuarios con acceso de lectura.
Algunos archivos en el sistema pueden estar protegidos para que los usuarios no accedan
a leer sus datos. Esto es muy importante para los archivos que almacenan contraseñas.
Los usuarios normales no deben tener acceso al contenido de estos archivos. Por tanto
cuando la contraseña en un archivo esta encriptada, los archivos deben de estar
protegidos de cualquier acceso no autorizado.
NOTA: esta lista no es una lista completa. En su sistema pueden existir mas archivos
conteniendo contraseñas, eso depende de la configuración del mismo y de las
aplicaciones instaladas.
Algunas contraseñas pueden ser leídas por usuarios que no son root. Esto normalmente
ocurre cuando el usuario tiene un UID de un demonio en ejecución. Por ejemplo, el
servidor web Apache se ejecuta bajo el UID del usuario wwwrun. Por esta razón, los
archivos de contraseña pueden ser leídos por el usuario wwwrun. En este caso, se debe
de estar seguro que solamente la cuenta del demonio tiene permitido el acceso de lectura
al archivo y lo los otros usuarios.
Objetivos
Es muy importante tener en mente que no existe un sistema de archivos que sea lo mejor
para todos los tipos de aplicaciones. Cada sistema de archivos tiene sus propias
fortalezas y debilidades, que afectan las cuentas de usuario creadas en el sistema
operativo. También debemos siempre tener en cuenta que un sistema de archivos
sofisticados JAMAS sustituirá una estrategia razonable de respaldos de la información.
-El sistema de archivos de Linux
Los tipos de archivos que se seleccionen dependerán de muchos factores. Este tema
describirá los sistemas de archivos y sus formatos que están disponibles en Linux.
Todos los tipos sistemas de archivos son incluidos en el kernel de Linux 2.6. Para ver los
sistemas de archivos soportados por el kernel de su sistema operativo Linux lea el archivo
/proc/filesystems.
30
Logical Volume Manager
31
File System Journaling
Ext2: el sistema de archivos „ext2‟ está basado en inodos, diseñado para ser rápido,
es eficiente y no fragmenta la información con facilidad. Debido a estas propiedades,
este sistema de archivos es usado por muchos administradores, aun cuando no
provee datos adicionales. Este sistema de archivos se puede actualizar al formato
„ext3‟ con suma facilidad.
MS-DOS/VFAT32: FAT es el primer sistema de archivos para usuarios para Microsoft
Windows® estuvo disponible hasta la versión „Me‟ de ese sistema operativo. VFAT es
una versión de 32 bits de FAT que incluye soporte para nombres de archivos largos.
Minix: el sistema de archivos minix es viejo y muy limitado, pero en ocasiones es
usados por discos flexibles o RAM disks.
Sistema de Archivo ‘Journaling’
32
File Allocation Table
33
Virtual file System
Este es un nivel de abstracción que provee el kernel que tiene definido estas interfaces
para los procesos. Incluye funciones como abrir archivos, escribir en un archivo, y leer un
archivo.
VFS
Una de las características del VFS es desplegar características del archivo para el usuario
de cómo son conocidos por los sistemas de archivos UNIX. Esto incluye permisos de
acceso, eso cuando existen.
-El sistema de archivos interno de Linux
Los sistemas de archivos en Linux están caracterizados por el factor de que los datos y la
administración de su información están separados. Cada archivo es descrito por un inodo.
Cada inodo tiene un tamaño de 128 bytes y contiene toda la información sobre el archivo,
excepto el nombre. Esto incluye detalles tales como: propietario, permisos de acceso,
tamaño, timestamps y los enlaces a los bloques de datos del archivo. Como se
almacenan los datos difieren entre los diferentes sistemas de archivos. Se explicara lo
básico de la organización de los datos en cuatro sistemas de archivos de Linux.
Formato del sistema de archivos ext2fs
Debe de existir un inodo por cada archivo o directorio en la partición. El número de inodos
también determina el número máximo posible de archivos. Normalmente un inodo
representa 4096 bytes de espacio en disco. En promedio cada archivo debe de ser de
4Kb de tamaño para que la partición se utilice de manera óptima. Si existen un gran
número de archivos menores a 4Kb, mas inodos serán utilizados, disminuyendo la
capacidad total del sistema de archivos.
El espacio de una partición se divide en „bloques‟. Estos bloques son definidos con un
tamaño de 1024, 2048 ó 4096 bytes. Esto debe ser especificado cuando el sistema de
archivos es creado, no se puede modificar posteriormente. El tamaño del bloque
determina cuanto espacio es reservado para un archivo.
En el formato del sistema de archivos clásico, los datos son almacenados en un arreglo
lineal de bloques del mismo tamaño. Un número específico de bloques es agrupado para
formar un grupo de bloques, y cada grupo de bloques consiste de 32768 bloques.
El sistema de archivos ext2 puede procesar nombres de archivos con longitudes de hasta
255 caracteres. Con la ruta completa el nombre puede llegar a tener un máximo de 4096
caracteres. El tamaño máximo del archivo es de 2Tb (con bloques de 1024 bytes) ó 16Tb
(con bloques de 4096 bytes).
NOTA: Por razones de seguridad, se almacena una copia del súper bloque.
Formato ReiserFS
En el sistema de archivos ext2 un bloque puede ser de 1024 bytes, un archivo de 8195
bytes usa 8 bloques completamente y un noveno con 3 bytes, aunque solo se usan 3
bytes, este bloque ya no está disponible para el uso por otro archivo. Esto significa que el
11% de espacio está en desuso. Si el archivo es de 1025 bytes, dos bloques serán
necesarios para almacenarlo, uno completamente y el otro con 1 byte, esto es el 50% de
espacio sin uso. Un caso aun peor ocurre cuando el archivo es realmente pequeño,
supongamos 50 bytes, esto significa que el 95% del bloque se desperdicia.
Otra ventaja de ReiserFS es el acceso rápido a los archivos. Esto se debe a el uso de
árboles binarios balanceados en la organización de los bloques de datos. Esto requiere
más poder de procesamiento debido a que cada vez que se escribe un archivo el árbol
debe ser re balanceado
La versión actual de ReiserFS (3.6) contenido en la versión del kernel 2.4.x permite una
partición de 16Tb y el mismo tamaño máximo de un archivo. La misma limitación existe en
el ext2.
Directorios
da51:~/Desktop # ls –i /
2 . 103002 cdrom 80045 floppy 104081 mnt 103782 sbin
2 .. 99068 dev 95657 home 81652 opt 80044 tmp
104005 bin 104004 dvd 102562 lib 1 proc 4 usr
2 boot 95722 etc 95718 media 81598 root 80046 var
da51:~/Desktop #
Cada nombre de archivos es precedido por el número del inodo. Como los inodos son
únicos para cada sistema de archivos, puede haber dos inodos iguales debido a que
están en sistemas de archivos distintos.
Formato del sistema de archivos de red
Los sistemas de archivos son básicamente bases de datos que almacenan archivos y
usan información de archivos tales como los nombres de archivos y timestamp (llamadas
metadatos) para organizar y ubicar los archivos en disco.
Debido a que son dos operaciones distintas, la corrupción de datos puede ocurrir cuando
una de las operaciones se realiza y la otra no, esto resulta en una diferencia entre los
datos y los metadatos.
Esto puede ser causados, por ejemplo por un alto voltaje. Puede ser necesario escribir los
datos nuevamente, pero los metadatos no será necesario actualizarlos nuevamente.
Cuando hay una diferencia entre los datos y los metadatos, el estado del sistema del
archivos es incoherente y requiere una revisión del sistema de archivos y posiblemente su
reparación. Para ext2, esto incluye una revisión del sistema del archivos entero que
consumiría mucho tiempo en los discos duros actuales que tienen centenares de GB de
capacidad.
Después de que los datos del archivo y su metadato se copian, el Journaled realiza una
entrada al Journal indicando que el archivo se creó de manera exitosa.
34
Network File System
35
Server Message Block
36
Netware Core Protocol
Cada sistema de archivos de Linux tiene su propio sitio web en el que se puede encontrar
listas de correo, documentación técnica, y FAQ‟s. Los sistemas de archivos que
estudiamos incluyen estos sitios:
Un tutorial bastante comprensible sobre los sistemas de archivos de Linux puede ser
encontrado en IBM developerWorks en el URL siguiente:
http://www-106-ibm.com/developerworks/library/l-fs.html
La jerarquía estándar del Sistema de Archivos de Linux (FHS) puede ser encontrada en:
http://www.pathname.com/fhs/
La siguiente tabla muestra los nombres de los dispositivos Linux usados para discos
duros:
Las particiones siguen la convención de nombres obteniendo el mismo del nombre del
dispositivo y el número de la partición del mismo. Por ejemplo, la primera partición en el
primer DD IDE será /dev/hda1 (/dev/hda + 1 que es la primer partición). La primera
partición lógica definida en un DD IDE siempre será la número 5.
Como ejemplo supondremos que vamos a instalar un Linux en un sistema que tiene dos
discos duros IDE, en el primero definiremos las particiones swap y /, y en el segundo se
colocaran los logs, mail, y directorios home. También asumiremos que el CD-ROM es
esclavo en el primer controlador IDE.
La distribución del espacio en disco. Dependiendo del espacio total en el disco duro de su
sistema, y del espacio total a utilizar (estimado):
Hasta 4 Gb. Se debe crear una partición swap y una partición para /. En este caso
todo la partición / contendrá todos los directorios del árbol.
Mas de 4 Gb. Se debe crear una partición swap de 1Gb, y una partición para cada
directorio:
o /boot/. Depende del hardware, puede ser necesario crear una partición boot,
para contener los mecanismos de arranque del kernel de Linux. Esta partición
será ubicada en el inicio del disco en el cilindro 1. Generalmente esta partición
tiene un tamaño de 100 Mb. Generalmente YaST propone la creación o no de
esta partición, pero si no se está seguro de si el hardware necesita o no esta
partición, es mejor crearla.
o /opt/. Muchas aplicaciones instalan sus datos en esta partición. En este caso,
se debe crear esta partición por separado cuyo tamaño va desde los 4Gb a
más, en dependencia de los aplicativos a instalar. Por ejemplo KDE y GNOME
son instalados en /opt/.
o /usr/. Apartando los directorios contenedores de datos de los usuarios, esta
carpeta es la más grande del sistema. Colocarla en una partición separada
permite opciones especiales de montaje, como montarla de solo lectura para
evitar cambios en los programas. La actualización de las aplicaciones requerirá
un re-montaje del sistema para permitir la lectura y escritura.
o /var/. Si la computadora es usada como un servidor de correos, puede ser una
gran idea colocar esta carpeta en una partición separada. Esto debido a que
mientras más buzones y mensajes almacena el sistema, este se puede volver
inestable. Por separado, se puede llenar la partición /var/ pero no la partición /,
esto permitirá al administrador reparar las fallas del sistema.
o /srv/. En esta carpeta (partición) se almacenan los datos de los usuarios o las
páginas web, si la computadora es usada como servidor web o ftp.
o /home/. Poner esta carpeta en una partición separada previene a que los
usuarios usen todo el espacio de disco y facilita las actualizaciones. Y si fuera
necesario reinstalar el sistema se puede preservar los datos de los usuarios
manteniendo esta partición sin cambios.
o /tmp/. Si se coloca esta carpeta en una partición separada nos permitirá el
montaje con opciones especiales, tales como „no ejecutable‟, y previene que
los procesos llenen el sistema de archivos con archivos temporales.
o Particiones adicionales. Si el particionamiento se realiza con YaST u otras
particiones son detectadas por este, estas particiones son agregadas en el
archivo /etc/fstab para habilitar fácil acceso a los datos.
-Administrar particiones con YaST
Se puede usar YaST Expert Partitioner durante la instalación del sistema para
personalizar la configuración de particiones existentes.
Para entrar a esta aplicación, se debe ejecutar YaST como usuario root, seleccionar
„Sistema‟ y „Particionador‟. Este le permitirá modificar las particiones existentes en el
disco. Se puede crear, editar, borrar y dimensionar particiones existentes.
Los discos duros se listan sin números (/dev/hda, /dev/hdb, /dev/sda, /dev/sdb). Las
particiones en los mismos se listan como partes de estos dispositivos.
El comando fdisk se utiliza para particionar discos duros desde la línea de comandos.
Para ver el esquema actual se usa la opción ‘-l’, para cambiar el esquema de particiones
se debe ingresar el nombre del dispositivo como un parámetro del comando: ‘fdisk
/dev/sda’ luego de esto solicitara una acción que se define usando uno de las siguientes
teclas:
Carácter Acción
d Borra una partición.
m Muestra un resumen corto de los comandos de fdisk
n Crea una nueva partición
p Muestra una lista de particiones que se encuentren disponibles en el disco
duro especificado
q Finaliza fdisk sin almacenar cambios
t Cambia el system id de una partición
w Guarda los cambios hechos en el disco duro y finaliza la ejecución del
comando.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disk.
da51:~/Desktop #
Como dice la salida de fdisk, no se puede usar directamente las nuevas particiones. Se
debe reiniciar el sistema como se sugiere, pero se puede usar el comando partprobe para
que el kernel pueda usar la nueva tabla de particiones.
Se puede usar YaST para crear un sistema de archivos (ext3, ReiserFS, etc.) en una
partición. Esto se realiza con la herramienta YaST Expert Partitioner. Una vez en la
herramienta se selecciona la partición en la que se creara el nuevo sistema de archivos y
seleccionar „EDITAR‟, para dar formato a la partición y crearle un sistema de archivos se
debe seleccionar „Formato‟. En el combo Sistema de Archivos se debe seleccionar el
sistema de archivos que deseamos crear.
-Crear un sistema de archivos usando las herramientas de línea de comandos.
Existen varios comandos para crear sistemas de archivos, estos incluyen mke2fs,
mkfs.ext3 y mkreiserfs para crear los sistemas de archivos que soporta el Linux que se
tenga instalado.
La alternativa de uso es el comando mkfs, este es un comando para unir los antes
mencionados. Cuando se usa este comando, la opción –t sirve para la creación de los
sistemas de archivos.
Cuando se crean sistemas de archivos ext2 ó ext3 con el comando mkfs, se deben usar
las siguientes opciones:
Opción Descripción
-b blocksize Se puede usar esta opción para indicar el tamaño de los
bloques de datos en el sistema de archivos. Los valores 1024,
2048, … , 16384 están disponible para estos sistemas de
archivos.
-i bytes_per_inode Se puede usar esta opción para indicar cuantos inodos serán
creados en el sistema de archivos.
-j Se puede usar esta opción para crear un Journal en el sistema
de archivos ext3.
Si no se incluyen las opciones –b y –i, mkfs define estos valores en dependencia del
tamaño de la partición.
This filesystem will be automatically checked every 32 mounts or 180 days, whichever comes
first. Use tune2fs -c or -i to override.
da51:~/Desktop #
Este ejemplo crea un sistema de archivos ext3 en una partición con los siguientes valores:
da51:~/Desktop #
En sistemas Windows, son letras de disco las que representan las diferentes particiones.
Linux no usa letras para designar las diferentes particiones, se montan las particiones en
directorios del sistema de archivos. Los directorios usados para montar las particiones son
llamados puntos de montaje.
Por ejemplo, para agregar un nuevo disco duro en un sistema Linux, primero se debe dar
formato a la partición, entonces se puede usar un directorio (ejemplo /data/) del sistema
de archivos y montar el sistema de archivos en dicho directorio usando el comando
mount. Para desmontar el sistema de archivos el comando a usar es umount.
37
Universally Unique Identifier
Mientras /etc/fstab lista los sistemas de archivos y ellos son montados en el árbol de
directorios durante el arranque del sistema, en el archivo /etc/mtab, se muestran
exactamente los sistemas de archivos montados en el momento. El uso del comando
mount y del comando umount, afecta el contenido de este archivo.
El kernel también obtiene información del archivo /proc/mounts, que lista todas las
particiones actualmente montadas.
Visualización de los sistemas de archivos actualmente montados.
Para visualizar los sistemas de archivos montados actualmente se debe usar el comando
mount.
da51:~/Desktop # mount
/dev/sda2 on / type reiserfs (rw,acl,user_xattr)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
debugfs on /sys/kernel/debug type debugfs (rw)
udev on /dev type tmpfs (rw)
devpts on /dev/pts type devpts (rw,mode=0620,gid=5)
securityfs on /sys/kernel/security type securityfs (rw)
da51:~/Desktop #
La tabla siguiente muestra algunas opciones que se pueden usar al momento de montar
un sistema de archivos usando este comando, o editando directamente el archivo
/etc/fstab:
Opción Descripción
remount Esta opción hace que el sistema de archivos recién montado, se
monte nuevamente.
rw, ro Esta opción indica que el sistema de archivos tiene permisos de
escritura (rw) o de solo lectura (ro).
sync, async Esta opción configura las operaciones I/O del sistema de
archivos a que sean síncronas o asíncronas. Si no se define el
comando monta el sistema de archivo en modo asíncrono.
atime, noatime Esta opción define si se almacena o no la etiqueta de fecha en
la que se accesa a los archivos en los inodos de los mismos. La
opción „noatime‟ optimiza el desempeño, pero se pierde la
bitácora.
nodev, dev La opción „nodev‟ previene que el archivo de dispositivo (/dev/)
sea interpretado como tal en el sistema de archivos.
noexec, exec Se puede prohibir la ejecución de programas en un sistema de
archivos usando la opción „noexec‟
nosuid, suid La opción „nosuid‟ asegura que el suid y sgid se ignore en el
sistema de archivos.
Opción Descripción
auto, noauto Los sistemas de archivos que se configuran con la opción
„noauto‟ en este archivo, no son montados cuando el sistema de
archivos es arrancado.
user, nouser Esta opción permite a los usuarios montar y desmontar el
sistema de archivos. Normalmente este privilegio solo lo tiene el
usuario root.
defaults Esta opción hace que las opciones normales puedan ser usadas
(rw, suid, dev, exec, auto, nouser y async).
Las opciones „noauto‟ y „user‟ normalmente son usadas para el montaje de medios
removibles, tales como cdrom y floppy.
Desmontar un sistema de archivos.
Una vez un sistema de archivos es montado, se puede usar el comando umount para
desmontar un sistema de archivos. Este comando toma como parámetro el archivo de
dispositivo o el punto de montaje, por ejemplo se puede desmontar la unidad de CD
usando el comando de la siguiente manera.
umount /media/cdrecorder
o
umount /dev/hdb
Para asegurarnos que el sistema de archivos no está en estado „busy‟ es salir de todos
los sistemas de archivos con el comando „cd /‟ con el que nos aseguramos estar en la
raíz del árbol de directorios.
Una vez que tenemos configurados nuestros sistemas de archivos Linux, podemos
monitorear el estado y salud de los sistemas, en este apartado aprenderemos algunos
comandos para garantizar esta tarea.
La siguiente tabla nos muestra el uso de los comandos df y du, cuya utilidad es
monitorear el tamaño en uso de carpetas y archivos en las particiones.
Comando Descripción
df Este comando provee información de punto de montaje y del porcentaje de
uso de los discos duros y sus diferentes particiones y de otros dispositivos
de almacenamiento.
Algunas de sus opciones incluye „-h‟ para que el formato sea de fácil lectura
para los humanos, „-i‟ lista la información del uso de los inodos.
Algunas de sus opciones incluyen „-c‟ que despliega el gran total, „-h‟ para
mostrar el resultado en formato humano, y --exclude=pattern que excluye
los archivos que coincidan con „pattern‟. Por ejemplo, para desplegar la
información de archivos en formato humano y que se excluyan los archivos
que terminen en „.o‟ se debe escribir el comando asi:
du –h --exclude=’*.o’
Algunas de sus opciones incluyen „-c x‟ que lista archivos que inician con „x‟; „-s‟ despliega
el tamaño de los archivos; y „-u x‟ que lista los archivos abiertos por el usuario „x‟. por
ejemplo para listar los archivos abiertos por los usuarios root y geeko y que incluyan los
tamaños de los archivos se debe ingresar el comando:
lsof –s –u root,geeko
Identificar procesos usando archivos (fuser)
El comando fuser despliega los PID‟s de los procesos usando archivos específicos o
sistema de archivos.
En el despliegue normal, cada archivo es seguido por una letra que describe el tipo de
acceso:
Carácter Descripción
C Directorio actual
E Ejecutable actual
F Archivo abierto
R Directorio root
M Archivo de memoria mapeada o librería compartida
Algunas de sus opciones incluyen „-a‟ que retorna información de todos los archivos aun
cuando estos no sean accesados por algún proceso; „-v‟ para el modo detallado; „-u‟ que
muestra el propietario del proceso; „-m‟ muestra la memoria mapeada o librería
compartida.
Revisarlost+found (solamente ext2 y ext3)
El comando fsck permite revisar y opcionalmente reparar uno o más sistemas de archivos
Linux. Normalmente, fsck intenta ejecutarse en sistemas de archivos ubicados en
diferentes discos físicos de manera simultánea, esto reduce el tiempo total utilizado para
revisar todos los sistemas de archivos.
En caso que el sistema se apague sin desmontar correctamente los sistemas de archivos,
puede ser que estos tengan errores al momento de encender nuevamente nuestro
sistema. Como se expreso anteriormente, el sistema detectara que ocurrió un apagado de
manera abrupta y procederá a una revisión exhaustiva de sus sistemas de archivos, si se
encuentra algún error el sistema tratara de repararlo, de lo contrario el sistema no iniciara
apropiadamente y se necesitara entrar la contraseña del root, en todo caso si el daño al
sistema de archivos es extenso, se debe evaluar la posibilidad de restaurar el sistema en
vez de reparar el mismo.
NOTA: para sistemas de archivos con bloques de datos de 4k, una copia de seguridad del
superblock se almacena cada 32768 bloques.
Después de crear un volumen lógico usando LVM, se puede hacer (con cierto límite)
redimensionar y mover volúmenes lógicos mientras estén montados y en ejecución.
También podemos usar LVM para administrar volúmenes lógicos por sus nombres (tales
como “desarrollo” y “ventas”) en vez de nombres de dispositivos físicos como “sda” y
“sdb”.
Básicamente las particiones convencionales en los sistemas Linux son inflexibles. Cuando
una partición se llena, se necesita mover datos a otro medio antes de redimensionar la
partición, crear un nuevo sistema de archivos, y restaurar los datos nuevamente.
Normalmente, estos cambios no pueden llevarse a cabo sino se cambia las particiones
adyacentes, cuyos datos también necesitan ser respaldados en otros medios de
almacenamiento y restaurados después del redimensionamiento.
Esto permite redimensionar el medio físico mientras el sistema está en funciones sin
afectar el estado de las aplicaciones.
/usr /var
Volúmenes lógicos
Grupo de Volumen
Volúmenes Físicos
Volumen Físico: un volumen físico puede ser una partición o un disco duro completo.
Grupo de volumen: este consiste en uno o muchos volúmenes físicos agrupados. Las
particiones físicas pueden representar diferentes tipos de discos duros. Se puede
agregar discos duros o particiones al grupo de volumen cuantas veces sea necesario.
Este también puede reducirse de tamaño si se eliminan discos duros o particiones.
Volumen lógico: un volumen lógico es una parte del grupo de volumen. Este puede ser
formateado y montado como si fuera una partición física estándar.
Se puede generar la asociación siguiente: el grupo de volumen puede verse como el disco
duro físico completo y los volúmenes lógicos como las particiones de dicho disco duro.
- Como usar características VM
LVM se puede utilizar en cualquier computador por su flexibilidad para adaptarse a las
necesidades de cambios en los espacios de almacenamiento. A continuación se
mencionan algunas de sus características que ayudan a implementar soluciones de
almacenamiento:
Los siguientes pasos son básicos para configurar LVM con YaST:
Definir la partición LVM (volúmenes físicos) en el disco duro.
En la versión 1 del LVM, este campo también define el tamaño máximo de volúmenes
lógicos. El valor en 4 Mb, se permite configurar volúmenes lógicos de 256 Gb. Con la
versión 2 de LVM, esta limitante ya no existe.
Si no se está seguro que valor colocar, siempre se puede usar los valores estándares.
Una vez ingresados los valores en el cuadro anterior, aparecerá el siguiente dialogo:
Añadir. Añadir un nuevo volumen lógico al VG. Cuando se selecciona esta opción el
siguiente dialogo aparece:
Este dialogo permite configurar un volumen lógico usando las mismas opciones utilizadas
para crear un sistema de archivos.
Configurar LVM desde la línea de comandos conlleva ejecutar varios pasos, cada uno con
una herramienta especifica.
No se cubrirán todas las herramientas LVM. Para ver las herramientas LVM instaladas en
el sistema se usa el comando rpm –ql lvm2 | less en línea de comandos, luego usar las
páginas de manuales (man) de cada herramienta.
Las particiones o discos duros enteros pueden servir como volúmenes físicos para las
LVM.
El ID de una partición usada como parte de una LVM puede ser ‘Linux LVM, 0x8e’. Aun
con el ID ‘0x83, Linux’, el sistema trabaja bien.
Para usar el disco duro completo como un volumen físico, este no debe contener una
tabla de particiones. Para sobrescribir cualquier tabla de particiones existente se usa ‘dd’:
da51:~ #
da51:~ #
da51:~ # pvscan
PV /dev/hda9 lvm2 [242,95 MB]
Total: 1 [242,95 MB] / in use: 0 [0 ] / in no VG: 1 [242,95 MB]
da51:~ #
La herramienta pvmove es usada para mover datos de un volumen físico a otro, esto se
usa antes de eliminar un volumen físico de las LVM.
Herramientas para administrar grupos de volúmenes.
La herramienta vgcreate es usada para crear un nuevo VG. Para crear el grupo de
volúmenes de sistema, y agregar el volumen físico /dev/hda9 al mismo:
da51:~ #
En el ejemplo anterior se usa pvscan para visualizar los cambios en el volumen físico.
Para agregar más volúmenes físicos al grupo, se usa la herramienta ‘vgexpand’. Para
eliminar volúmenes físicos sin uso, se usa la herramienta ‘vgreduce’, se debe recordar
mover los datos usando la herramienta ‘pvmove’ antes de remover el volumen físico con
la herramienta anterior, para eliminar un grupo de volúmenes se usa ‘vgremove’, se debe
recordar que no se puede eliminar un VG que tiene volúmenes lógicos.
Herramientas para administrar volúmenes lógicos.
da51:~ #
da51:~ # lvscan
ACTIVE ‘/dev/system/data’ [100,00 MB] inherit
da51:~ # mkreiserfs /dev/system/data
mkreiserfs 3.6.19 (2003 www.namesys.com)
…
ReiserFSissuccessfullycreatedon /dev/system/data.
da51:~ # mount /dev/system/data /data
Como se puede observar ‘lvscan’ se usa para visualizar volúmenes lógicos. Este muestra
el dispositivo que se puede usar para formatear y montar.
38
RedundantArray of Independent (orInexpensive) Disks
Software RAID: los discos duros son combinados por el sistema operativo, este ve
cada uno de los discos como dispositivos separados y necesita configurarse para
poder usarlos como un sistema RAID.
RAID 0. Este nivel provee mejor desempeños de acceso a los datos, la debilidad de
este tipo de configuración es que no provee seguridad para los datos. Si uno de los
discos duros falla, todos los datos se perderán.
RAID 1. Este nivel provee seguridad reforzada para los datos debido a que estos son
copiados en uno de los muchos discos duros. Esto se conoce como „disco duro
espejo‟. Si uno de los discos duros se destruye, una copia de su contenido esta
siempre disponible en otro disco. El mínimo número de discos para realizar esta
configuración es dos.
RAID 5. Esta es una optimización entre RAID 0 y RAID 1 en términos de desempeño y
redundancia. Datos y „checksum‟ son distribuidos en todos los discos. El número
mínimo de discos (o particiones) requeridos para RAID 5 es tres. Si uno de los discos
falla, este debe ser reemplazado a la brevedad posible para evitar el riesgo de pérdida
de datos. Los datos contenidos en el disco duro dañado será reconstruido en el disco
nuevo mediante los datos y „checksum‟ contenidos en los otros discos. Si más de un
disco duro falla al mismo tiempo, los datos se perderán.
RAID 6. Este nivel es comparable con RAID 5, la diferencia es que dos discos duros
pueden fallar y no perder datos. La cantidad de discos duros mínima para usar esta
configuración es cuatro.
NOTA IMPORTANTE: Se recomienda que los discos duros o las particiones a utilizar en
la configuración de cualquier nivel RAID, sean del mismo tamaño. Esto es para optimizar
el desempeño y evitar pérdidas de datos.
NOTA: para propósitos de prueba, las particiones pueden residir en el mismo disco duro.
Esto no proporcionara ninguna mejora en el desempeño o seguridad de los datos.
NOTA: un RAID no es un sustituto de los respaldos de datos. Una configuración RAID,
por ejemplo, no protege contra eliminaciones accidentales de archivos.
/ /export /var
/aquota.user
/export/aquota.user
Sin cuota
Cuando el sistema es iniciado, las cuotas para el sistema de archivos deben ser
activados. Se puede indicar para cada sistema de archivos las activaciones de las cuotas
configuradas en el archivo /etc/fstab.
da51:~ # vi /etc/fstab
/dev/hda2 / reiserfs acl,user_xattr,usrquota,grpquota 1 1
/dev/hda1 swap swap defaults 0 0
proc /proc proc defaults 0 0
…
da51:~ #
En este ejemplo, las cuotas son configurados en el sistema de archivos „/‟ (root). Las
cuotas son siempre definidos para los sistemas de archivos (particiones de disco).
da51:~ #
NOTA: en las versiones de kernel superiores a la 2.4, estos archivos se llaman quota.user
y quota.group, y son creados después de que el comando quotacheck es ejecutado.
El comando quotacheck –avug realiza las siguientes acciones: (-a) revisa todos los
bloques de datos e inodos que están siendo ocupados por los usuarios (-u) y grupos (-g),
visualizando los detalles de la revisión (-v). Cuando se revisan los sistemas montados, se
debe usar la opción –m para forzar la revisión. Asumiendo que las entradas de cuotas
existen para /, después de ejecutar quotacheck los siguientes archivos son creados:
da51:~ #
Para que las cuotas sean inicializadas cuando el sistema es arrancado, los enlaces
apropiados deben ser hechos en los directorios de niveles de ejecución (runlevels)
ejecutando el comando insserv boot.quota (insserv quotad para NFS). Para iniciarlizar
el sistema de cuotas el comando a ejecutar es: /etc/init.d/boot.quota start. Se puede
iniciar o detener los sistemas de cuotas ejecutando uno de los siguientes comandos:
/sbin/quotaon filesystem
/sbin/quotaoff filesystem
Se puede usar la opción –a para activar y desactivar las cuotas en todos los sistemas de
archivos montados (excepto para NFS).
- Configurar y administrar cuotas de usuarios y grupos.
La configuración de cuotas para usuarios y grupos, se necesita conocer como realizar las
siguientes acciones:
Configurar límites suaves y duros para bloques e inodos.
Con el comando edquota y las siguientes opciones, se pueden editar los ajustes actuales
de las cuotas para usuarios y grupos.
Los ajustes son desplegados mediante el editor vi cuando ejecuta el comando edquota,
de modo tal que se pueden editar los limites suaves y duros. Los valores bajo bloques e
inodos muestran los bloques e inodos usuados actualmente, esta información es
mostrada solamente para visualizarla, los cambios que se efectúen en ella no surtirán
efectos. Para ejemplo, configuraremos las cuotas para el usuario geeko:
edquota –u geeko
Blocks. Muestra el uso actual en disco, con referencia a los límites suaves y duros.
Los bloques tienen un tamaño de 1Kb, independientemente del tamaño de bloque del
sistema de archivos. Por ejemplo, el valor 7820 en el ítem blocks, indica que el usuario
geeko está usando cerca de 8Mb de espacio en disco.
El límite suave, indica la cuota del usuario que no puede ser excedida permanentemente.
El límite duro, indica la cuota máxima de espacio o inodos que pueden ser usados.
Si el usuario se acerca al límite suave, se activa un tiempo de gracia para liberar espacio
borrando archivos o bloques de datos. Si este excede el periodo de gracia, no podrá crear
nuevos archivos hasta eliminar archivos y estar por debajo del limite suave.
Configurar periodos de gracia para bloques e inodos.
Para editar el periodo de gracia para bloques e inodos se debe de ejecutar edquota –t.
Se puede copiar las cuotas de usuario de un usuario a otro ejecutando edquota –p.
Por ejemplo, ejecutando edquota –p tux geeko, se puede copiar las cuotas del usuario
tux al usuario geeko.
Generar un reporte de cuota.
Los archivos del sistema de cuotas contienen información, en formato binario, sobre el
espacio ocupado por usuarios y grupos, y cuales cuotas están configuradas. Se puede
desplegar esta información ejecutando el comando repquota. Por ejemplo, ejecutando el
comando repquota –aug se despliega un reporte similar al siguiente de todos los
usuarios y grupos:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Objetivos
Por ejemplo, cuando un usuario ingresa a un sistema Linux en una terminal virtual, un
programa llamado login se encarga de la autenticación.
Antes que PAM se integrara al kernel de Linux, todos las aplicaciones que requerían
autenticación, tal como login, FTP, o SSH debían tener su propio soporte de
autenticación en el sistema. PAM hace que todas las aplicaciones que requieran
autenticación tengan el mismo método y por lo tango más sencillo de administrar. PAM
crea un nivel de software con interfaces claramente definidas entre las aplicaciones (tal
como login) y el mecanismo de autenticación actual. En vez de modificar cada programa,
se genera un nuevo modulo PAM para la autenticación.
La siguiente ilustración muestra una grafica del papel que juega PAM en la autenticación
de los usuarios en un sistema Linux.
39
Access Control Lists
40
Pluggable Autentication Modules
PAM
Vendedores pueden proveer otros módulos PAM para habilitar autenticación específica
para sus productos, tal como el modulo PAM para habilitar la autenticación LUM41 con
eDirectory.
PAM provee una variedad de módulos, cada uno de ellos para propósitos diferentes. Por
ejemplo, un modulo revisa la contraseña, otros verifican la ubicación desde donde se está
accediendo al sistema, mientras que otro puede leer los ajustes de usuario específicos.
Cada aplicación que requiere un modulo PAM tiene su propio archivo de configuración en
/etc/pam.d/aplicación. Por ejemplo, el archivo de configuración para el programa
„passwd‟ se llama: /etc/pam.d/passwd.
Hay una configuración especial en el archivo con el nombre other. Este archivo contiene
la configuración estándar para las aplicaciones que requieren PAM pero que no tengan un
modulo especifico.
Adicionalmente, los archivos de configuración global para muchos módulos PAM están en
/etc/security/, que definen la conducta de cada modulo. Estos archivos incluyen
pam_env.conf, pam_pwcheck.conf, pam_unix2.conf y time.conf.
Cada aplicación que usa módulos PAM invoca un conjunto de funciones de PAM. Estas
funciones son implementadas en módulos que mejoran los procesos de autenticación de
acuerdo a la información contenida en los archivos de configuración y retorna el resultado
a la aplicación que los invoco.
- Configuración de PAM.
41
Linux User Management
o requisite. Un modulo con esta bandera también puede procesarse con éxito.
En caso de éxito, otros módulos son procesadas en consecuencia, tal como los
módulos con la bandera requerida. En caso de fallo el modulo retoma
inmediatamente su posición anterior para el usuario y futuros procesos no son
procesados. Se puede usar la bandera „requisite‟ como un filtro básico,
revisando la existencia de ciertas condiciones que son esenciales para una
correcta autenticación.
o optional. El fallo o éxito de un modulo con esta bandera no tiene
consecuencias directas. Los módulos con esta bandera se usan para enviar
mensajes a los usuarios sin solicitar ninguna acción.
o sufficient. Después que un modulo con esta bandera es procesado con éxito,
la aplicación solicitante recibe un mensaje inmediatamente sobre el éxito y no
se procesan mas módulos. La falla de un modulo con esta bandera no tiene
consecuencias directas, en otras palabras, los módulos adicionales son
procesados en su respectivo orden.
o include. Este realmente no es una bandera de control, pero indica que el
„keyword‟ en la siguiente columna será interpretado como un archivo con
nombre relativo a /etc/pam.d/ este debe ser incluido en esta ubicación. El
archivo incluido tiene que tener la misma estructura como cualquier otro
archivo de configuración PAM. El propósito de „include‟ es simplificar cambios
en muchas aplicaciones.
Modulo. Los módulos PAM son ubicados en el directorio /lib/security/. Cada archivo
de un modulo inicia con el prefijo „pam_‟. No se necesita agregar la ruta completa,
todos los módulos son ubicados en el directorio estándar /lib/security/. Algunos
módulos PAM pueden ser usados en muchos tipos de módulos.
Argumentos (Opciones). Se pueden agregar opciones en esta columna para un
modulo, tal como „debug42‟ o „nullok43‟.
- Ejemplos de archivos de configuración de PAM.
da51:~ #
42
Habilita registros de eventos.
43
Habilita el uso de contraseñas vacias.
da51:~ #
Estos módulos realizan las siguientes tareas (no se incluyen todas las configuraciones):
Aun la mejor configuración de seguridad puede ser vulnerada si los usuarios seleccionan
contraseñas fáciles de deducir. Hoy en día, el poder de procesamiento de las
computadoras nos permite romper una contraseña sencilla en cuestión de minutos. Estos
ataques, también llamados „ataques de acceso‟, se realizan con un programa simple que
prueba una contraseña tras otra contenidas todas en un diccionario de contraseñas, y
agrega a las palabras del diccionario algunas variables simples y en muchos casos
comunes. Por lo tanto, una contraseña jamás debe ser una palabra que pueda estar
contenida en un diccionario. Una contraseña segura, debe contener números y caracteres
en minúsculas y mayúsculas.
Para verificar que la contraseña del usuario llena estos requerimientos, se puede habilitar
un modulo especial de PAM para comprobar la contraseña antes de que el usuario la
almacene en la base de datos de autenticación. Este modulo se llama pam_pwcheck.so y
usa la librería „cracklib‟ para comprobar la seguridad de la contraseña.
Manual para programadores de módulos PAM. Este documento resume los tópicos
que un programador necesita saber, con la información sobre cómo escribir y compilar
módulos PAM.
Guia de desarrollo de aplicaciones PAM para Linux. Este documento incluye todo
lo necesario para que un desarrollador de aplicaciones pueda usar las librerías PAM.
Se puede usar el comando su44 para tomar el UID del usuario root o de otro usuario.
Por ejemplo, para cambiarse al usuario geeko, el comando es: su geeko. Para cambiar al
usuario root: su root o su (sin un nombre de usuario). Si se necesita cargar el Shell del
usuario al que se desea conmutar se debe acompañar el comando „su‟ con „-„, por
ejemplo: su – geeko, su – root o su –.
NOTA: el usuario root puede conmutarse a cualquier usuario sin necesidad de conocer la
contraseña de dicho usuario.
Para cambiar al usuario root y ejecutar un comando sencillo, se debe de usar la opción -c:
da51:~ #
44
Switch User
Un usuario puede ser miembro de muchos grupos diferentes, pero solamente un GID es
su grupo efectivo (actual) en un momento del tiempo. Normalmente este se denomina
„grupo primario‟, y se especifica en el archivo /etc/passwd. Si un usuario crea directorios o
archivos, estos pertenecerán al usuario y al grupo efectivo en el que el usuario se
encuentre en ese momento.
Se puede cambiar el GID del grupo efectivo con en comando „newgrp‟ o „sg‟.
En el escritorio Gnome se puede ejecutar cualquier aplicación con un UID diferente (se
debe conocer la contraseña) usando el comando „gnomesu‟.
Desde la línea de comandos del escritorio Gnome45, ejecutar „gnomesu‟. En ese momento
se le solicitara la contraseña del root, después de esto una ventana de terminal se abrirá.
Nótese que la ruta que aparece en la terminal es el directorio home del usuario. Si se
desea acceder al entorno del usuario root se debe ingresar el comando „su -‟ en dicha
ventana terminal.
NOTA: algunas aplicaciones no necesitan ser ejecutadas con el comando „gnomesu‟, por
ejemplo yast2, el estándar de esta aplicación es ser ejecutada solamente por el root.
45
Alt + F2
We trust you have received the usual lecture from the local System Administrator.
It usually boils down to these three things:
root's password:
da51:~ #
Se puede cambiar la configuración de „sudo‟ para que solicite la contraseña del usuario en
vez de la contraseña del root. Para realizar esto se debe comentar las dos líneas en
/etc/sudoers usando el comando „visudo‟:
Defaults targetpw # ask for the password of the target user i.e. root
ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults
# targetpw'!
Usando „visudo‟, se puede especificar que comando el usuario puede o no puede ejecutar
configurando el archivo /etc/sudoers. La sintaxis general de una entrada de configuración
en dicho archivos es: user/group host = comando1, comando2, …. Por ejemplo: geeko
ALL = /sbin/shutdown. En este ejemplo, el usuario geeko tendrá acceso al comando
/sbin/shutdown con los privilegios del root en todos los computadores (ALL). En
/etc/sudoers se especifica el permiso para copiar el mismo archivo en diferentes
computadoras sin tener que permitir los mismos privilegios en todas las computadoras
involucradas. El siguiente ejemplo es más complejo e ilustra la flexibilidad de „sudo‟:
Las líneas del 1 al 9 definen aliases. De la línea 15 a la 17, dichos aliases son usados por
las reglas de „sudo‟
El comando useradd sirve también para crear un esquema estándar para las nuevas
cuentas de usuario con la opción --save-defaults:
YaST provee un modulo de seguridad local que permite configurar los ajustes locales para
un servidor Linux en los siguientes ítems:
Ajustes de la contraseña.
Configuración de arranque.
Ajustes de ingreso.
Ajustes para la creación de usuarios.
Permisos de acceso.
Las ACL‟s proveen una extensión de este concepto tradicional de privilegios de acceso.
Estas permiten asignar privilegios de acceso a usuarios individuales o grupos incluso si
estos no corresponden a propietario o grupo original.
Las ACL forma parte del kernel de Linux y los sistemas de archivos ReiserFS, Ext2, Ext3,
JSF y XFS, brindan soporte a las mismas. Usando ACL se puede crear escenarios
complejos sin implementar complejos modelos de permisos en el nivel de aplicación, por
ejemplo: Samba soporta las ACL para otorgar privilegios de acceso a los usuarios.
- Comandos básicos
Existen dos comandos básicos para las ACL: setfacl (set file ACL) para configurar las
ACL en los archivos y getfacl (get file ACL) para visualizar las ACL de un archivo o
directorio.
Para permitir que un usuario tenga acceso de escritura en un archivo, sin que el usuario
sea el propietario, en el escenario estándar, se debe crear un nuevo grupo, agregar al
propietario y al usuario que tendrá acceso al archivo y asignar el nuevo grupo al archivo,
con sus respectivos privilegios.
Con el modelo de ACL, se realiza la misma acción, con la diferencia que no se necesita
crear grupos, cambiar los propietarios y asignar privilegios al grupo.
46
Access Control Lists
Otra ventaja de las ACL es que el administrador del sistema no está envuelto en la
creación del esquema, creando grupos y asignando privilegios. Todo lo decide el usuario.
Note que la salida del comando „ls‟ cambia cuando una ACL es definida. El símbolo „+‟ se
agrega al segmento dedicado a los privilegios, los privilegios entonces obtienen un
significado diferente.
- Términos importantes
Termino Definición
user class Este es el concepto convencional de privilegios en POSIX, usa tres
clases de usuarios para asignar privilegios en el sistema: propietario,
grupo y otros.
Tres privilegios pueden ser asignados por cada tipo de usuario, siendo
estos: lectura (r), escritura (w), y ejecución (x).
access ACL Determina los privilegios de acceso de usuarios y grupos para todo
tipo de objetos en el sistema (archivos y directorios).
default ACL Estas ACL pueden ser aplicadas únicamente a los directorios. Estos
determinan los privilegios heredables de los objetos contenidos en el
directorio al momento de ser creados.
ACL entry Cada ACL consiste de un conjunto de entradas ACL. Una entrada
contiene un „tipo‟, un calificador para usuario o grupo a la que la
entrada se refiere, y un conjunto de permisos. Para algunos tipos de
entrada, el calificador de usuarios o grupos es indefinido.
- Tipos
Las ACL permiten cambiar los paradigmas de privilegios de Linux al definir los siguientes
tipos de privilegios:
named user. Con este tipo se puede asignar privilegios a usuarios individuales.
named group. Con este tipo se puede asignar privilegios a grupos individuales.
mask. Con este tipo, se puede limitar los privilegios anteriores.
Tipo Formato
owner user::rwx
named user user:nombre:rwx
owning group group::rwx
named group group:nombre:rwx
mask mask::rwx
other other::rwx
Los privilegios definidos en „owner‟ y „other‟ son siempre efectivos. Exceptuando para la
entrada „mask‟, todas las otras entradas pueden ser efectivas o enmascaradas. Si los
privilegios existentes en „named user‟, „owner user‟ o „named group‟, son las mismas que
las definidas en la máscara, estas son efectivas (operador „y‟ lógico). Los privilegios
contenidos solamente en la entrada „mask‟ o solamente en una de las entradas, no son
efectivas.
Para ilustrar esto, el siguiente ejemplo determina los privilegios para el usuario „jane‟:
Esta ACL contiene dos entradas, una para el usuario „jane‟ y una para la entrada „mask‟.
Jane tiene privilegios de lectura y ejecución en el archivo, pero „mask‟ solo contiene
privilegios de lectura y escritura. Debido a que los privilegios de acceso se obtienen
usando el operador lógico „y‟ (AND) se obtiene como privilegio efectivo solamente el
acceso a lectura.
- Como las ACL define privilegios de acceso
En ambos casos (ACL mínima y extendida), los privilegios de la clase propietario son
mapeados de la entrada „owner‟ de la ACL. Los privilegios de la clase „other‟ son
mapeados de las entradas respectivas de la ACL. Mapear los privilegios de la clase del
grupo es diferente en el segundo caso.
En caso de una ACL sin mascara, los privilegios de la clase grupo son mapeados de la
ACL de la entrada „owning group‟. En el caso de una ACL extendida con mascara, los
privilegios de la clase grupo son mapeados de la ACL de la entrada „mask‟.
El mapeo asegura la interacción de las aplicaciones con el usuario, esto sin necesidad de
que la aplicación soporte o no ACL.
- Como usar las herramientas de línea de comandos de ACL
Como se explico anteriormente, solo existen dos comandos para la definición y ajustes de
las ACL en Linux:
getfacl
setfacl
En la siguiente tabla se describen las opciones más importantes del comando „setfacl‟:
Opción Descripción
-m Agrega o modifica una entrada ACL
-x Elimina una entrada ACL
-d Configura una ACL estándar
-b Elimina todas las entradas de una ACL extendida
Las opciones –m y –x esperan la definición de una ACL. Los siguientes ejemplos aclaran
las definiciones de las ACL:
Para configurar el acceso a un directorio con una ACL, se debe realizar lo siguiente:
Los directorios pueden configurarse con ACL estándar, este tipo especial de ACL define
los privilegios de acceso a objetos dentro del directorio cuando estos son creados. Este
tipo de ACL afecta los archivos y directorios bajo el árbol de directorios donde fue
declarado. Existen dos formas de que una ACL se replique en los objetos dentro del
directorio en el que se aplica:
Todas las funciones del sistema involucrados en creación de objetos del sistema de
archivo usan un parámetro que define los permisos de acceso para el nuevo objeto
creado. Si el directorio padre no tiene asociado una ACL, entonces los privilegios del
nuevo objeto estarán definidos por la mascara (umask). En caso de tener una ACL
asociada, los privilegios asignados al nuevo objeto serán el traslape entre la máscara y la
ACL asignada.
A continuación tres ejemplos que muestran las operaciones principales para directorios y
ACL estándar.
Definir una ACL estándar al directorio mydir (ver ejemplos anteriores): setfacl –d –m
g:jungle:r-x mydir
La opción „-d‟ ordena a setfacl que ejecute las acciones definidas al comando (-m) y
en la definición de la ACL estándar.
Note que getfacl retorna ambas ACL definidas hasta este momento en ese directorio
(ACL de acceso y ACL estándar). La ACL estándar está claramente definida por la
palabra „defaul‟ al inicio de cada línea.
Se debe recordar que este tipo de ACL no tiene efecto inmediato en el esquema de
privilegios de acceso, esta comienza a reflejarse al momento que se van creando
nuevos objetos en el sistema de archivos.
Crear un directorio dentro de mydir, llamado mysubdir, este heredara los privilegios de
acceso y la definición de ACL de mydir.
Nótese que el directorio creado „mysubdir‟ tiene privilegios de acceso que se derivan
de la ACL estándar del directorio padre. La ACL de acceso de este objeto es un reflejo
exacto de la ACL estándar de mydir.
Crear un archivo dentro del directorio mydir, llamado myfile, y otro en el directorio
mydir/mysubdir, llamado myfile2, estos heredaran los privilegios de acceso y la
definición de ACL de mydir.
El comando touch crea los archivos con el modo 0666, lo que significa que todos los
tipos de usuarios tienen privilegios de lectura y escritura sin las restricciones
impuestas por „umask‟. Esto significa que todos los privilegios de acceso no
contenidos en el modo son removidos por la entrada de la ACL que le corresponda.
- Opciones adicionales de setfacl
Las entradas de usuario son eliminadas con la opción „-x‟: setfacl –x g:jungle mydir
La opción „-b‟ se usa para eliminar todas las entradas de ACL.
Para realizar un respaldo de una ACL se usa getfacl y se envía a un archivo (usando
„pipes‟), luego se usa „setfacl‟ con la opción –M:
Como se describe en la sección precedente, se puede usar las ACL para implementar
escenarios complejos de privilegios de acceso o para que se cumplan los requerimientos
de algunas aplicaciones.
Los comandos básicos (cp, mv, ls y otros más) soportan ACL, pero muchos editores y
administradores de archivos no (konkeror o Nautilus), por ejemplo cuando se copia
archivos o directorios con uno de esos dos administradores de archivos, la configuración
de ACL se pierde. En ocasiones (depende del editor) cuando se modifica un archivo con
algún editor, la configuración de ACL se preserva y en otras ocasiones no.
47
Solamente en la distribución SUSE de Linux.
Para desplegar la configuración de todas las interfaces el comando es: ip address show.
Dependiendo de la configuración del sistema, la información será similar a lo siguiente:
La información es agrupada por interfaces. Cada entrada inicia con un digito, llamado
„índice de la interface‟, con el nombre de la interface desplegada después del índice de la
interface.
lo. Es el dispositivo loopback. Este está presente en cada sistema Linux, aun cuando
no se tenga ninguna interface instalada. Con este dispositivo virtual, las aplicaciones
pueden usar la red para comunicarse con otras aplicaciones. Por ejemplo se puede
usar la dirección IP de la loopback para visualizar la pagina web en un servidor web,
solo basta colocar la URL „http://127.0.0.1‟ y el navegador buscara la pagina web
localmente.
eth0. Este es el primer adaptador Ethernet en el sistema (y en el ejemplo). Si
existieran mas adaptadores Ethernet se numerarían asi: eth0, eth1, eth2, etc.
sit0. Este es un dispositivo virtual especial, se usa para encapsular paquetes IPv4 en
paquetes IPv6. Normalmente no se usa en redes IPv4.
Si se habilita el soporte para IPv6, siempre se tendrán las interface „loopback‟ y „sit‟ y
dependiendo de la configuración del sistema, se tendrán más de una interface Ethernet.
Veamos la información de la interface eth0 del ejemplo anterior:
La línea: „inet 10.0.0.2/24 brd 10.0.0.255 scope global eth0‟ nos muestra la dirección IPv4,
su máscara y la dirección de broadcast de la red, seguido del nombre de la interfaz.
UP. El dispositivo esta activo. En otras palabras, en este estado puede enviar y recibir
paquetes desde el sistema a la red y viceversa.
LOOPBACK. Determina si el dispositivo es de tipo loopback.
BROADCAST. El dispositivo puede enviar paquetes a todos los host dentro del
segmento de red.
POINTOPOINT. El dispositivo solo se puede conectar a otro dispositivo directamente.
MULTICAST. El dispositivo puede enviar paquetes a un grupo de otros sistemas al
mismo tiempo.
PROMISC. El dispositivo escucha todos los paquetes de la red, no solamente los que
son enviados a su MAC. Esto se usa normalmente en los monitores de red.
Estadísticas del dispositivo
Para desplegar información estadística del dispositivo se debe agregar la opción „-s‟ al
comando „ip‟, este lucirá así: ip –s link show eth0
Dos secciones adicionales se despliegan por cada dispositivo. Cada una de las secciones
describe la información mostrada.
La sección que inicia con RX despliega información sobre los paquetes recibidos, y la
sección que inicia con TX despliega información sobre los paquetes enviados.
Para comprender completamente este ítem debemos repasar los siguientes temas:
Para asignar una dirección IP a un dispositivo, el comando a ejecutar debe ser similar al
siguiente48:
48
Depende de la configuración del sistema.
También se pueden cambiar los atributos de los dispositivos, el comando básico es: ip
link set [dispositivo] [atributo]. Los posibles atributos ya fueron descritos anteriormente
(ver Atributos del Dispositivo). Los atributos más importantes son „up‟ y „down‟, estos
habilitan y deshabilitan la interface respectivamente.
Todos estos cambios se perderán en el siguiente reinicio del sistema. Para que estos
cambios sean permanentes estos deben ser almacenados en los archivos de
configuración de las interfaces de red. Estos archivos están ubicados en
/etc/sysconfig/network. Si los dispositivos fueron instalados con YaST, un archivo de
configuración por cada uno se creó en dicho directorio.
Para dispositivos Ethernet, los nombres de estos archivos se nombrarían asi: ifcfg-eth-id-
y su dirección MAC, por ejemplo nuestra interface (ver ejemplos anteriores) tiene la MAC:
00:30:05:4b:98:85, por lo tanto el archivo tendrá por nombre:
„ifcfg-eth-id- 00:30:05:4b:98:85‟.
Si se tiene más de una interfaz de red instalada, puede ser difícil encontrar el archivo de
configuración correspondiente a cada NIC, para esto se debe hacer uso del comando ip
link show, comentado anteriormente, con el fin de identificar la interface correcta.
El archivo de configuración consta de muchas líneas. Cada línea tiene una opción y un
valor asignado a esta opción, se tratara de explicar cada una de ellas:
BOOTPROTO='static'
REMOTE_IPADDR=''
STARTMODE='auto'
UNIQUE='rBUF.+xOL8ZCSAQC'
_nm_name='bus-pci-0000:00:0b.0'
BROADCAST=''
IPADDR='10.0.0.2'
NETMASK='255.255.255.0'
NETWORK=''
MTU=''
ETHTOOL_OPTIONS=''
Para configurar un dispositivo para que tome una dirección IP de manera dinámica,
usando el protocolo DHCP, basta con colocarle el valor DHCP a la opción BOOTPROTO.
Las demás opciones no son necesarias, ya que estas son reescritas por las
configuraciones enviadas por el servidor DHCP.
Arrancar y Detener interfaces.
Para aplicara los cambios realizados en los archivos de configuración, se debe detener y
arrancar las interfaces correspondientes. Esto se realiza con los comandos ifdown e ifup
más la interface correspondiente. Ejemplo: ifdown eth0 e ifup eth0.
49
Maximum Transmission Unit
NOTA: los temas de enrutamiento son tópicos de otros cursos, en este ítem se tocaran los
escenarios de enrutamiento más comunes.
Para visualizar la tabla de rutas, el comando es: ip route show. Para muchos sistemas, la
salida será similar a lo siguiente:
Esta línea representa la ruta hacia la red local. Todos los paquetes del sistema dirigidos
hacia un nodo dentro del mismo segmento de red son enviados directamente por el
dispositivo eth0.
Esta línea muestra la ruta para la red 169.254.0.0. Los host usan esta red cuando se auto
configuran (cuando no encuentran un servidor DHCP). La ruta a esta red siempre está
presente, especialmente cuando el sistema en si no tiene una IP asignada.
Esta línea es la entrada para la ruta estándar. Todos los paquetes que no puedan ser
enviados mediante las rutas anteriormente configuradas, serán enviadas al „default
gateway‟ definido en esta línea.
Una ruta para la red local al que el sistema este directamente conectado.
Una ruta para el „default gateway‟ para todos los otros paquetes.
Este ítem se divide en varias tareas que nos permitirán comprender la estructura de la
tabla de enrutamiento del kernel de Linux:
Definir una ruta para la red local.
El comando que se debe ingresar para definir una ruta hacia nuestra red local (la red a la
que el sistema está directamente conectada) es:
El comando que se debe ingresar para definir una ruta hacia otra red es:
Todos los paquetes hacia la red 192.168.1.0 son enviados a través del Gateway
10.0.0.100
Definir un ‘default gateway’
Los paquetes que no se pueden enviar mediante la configuración previa, o mediante las
configuraciones de la tabla de enrutamiento, serán enviados al „default gateway‟
10.10.10.254.
- Borrar rutas de la tabla de enrutamiento.
Todos los paquetes enviados a la red 192.168.1.0 con mascara 255.255.255.0, son
enviados a través del Gateway 10.0.0.100 conectado en la interface eth-id-
00:30:05:4b:98:85.
default 10.0.0.254 - -
Para aplicar los cambios definidos en el archivo de configuración, se necesita reiniciar los
dispositivos de red afectados, usando los comandos ifdown e ifup.
La herramienta „ping‟ nos permite verificar la conexión entre dos hosts. Si la información
devuelta por ping es de éxito, significa que ambos adaptadores (uno por host) están
configurados correctamente. Este comando usa paquetes ICMP, esto permite enviar
paquetes al destino y esperar una respuesta del mismo.
Cada línea representa un paquete de datos enviado por ping. El comando seguirá
realizando esta acción hasta que el usuario presione Ctrl + c.
Si no existe una respuesta exitosa del comando ping, debemos asegurarnos que la
configuración de las interfaces de red y el enrutamiento estén correctamente
configurados.
A continuación una tabla describiendo algunas opciones del comando ping que pueden
ser utilizados para troubleshooting:
Opción Descripción
-c cantidad Define la cantidad de paquetes a enviar. Después de enviar la cantidad
definida ping detiene su ejecución.
-I interface (i mayúscula) Especifica la interface de red a usar, esto es útil en
sistemas con muyas interfaces.
-i segundos Especifica el tiempo (en segundos) de espera entre envíos de paquetes.
El estándar es de 1 segundo.
-f Los paquetes son enviados uno tras otro en la medida que sus
respuestas llegan. Solamente root puede usar esta opción, el estándar
para los otros usuarios es de 200 milisegundos.
-l preload (L minúscula) Sirve para enviar paquetes sin esperar la respuesta del
mismo.
-n Salida numérica de la dirección IP. No se usa la resolución de nombres.
-t TTL Especifica el TTL en los paquetes a enviar.
-w segundos Especifica una interrupción en segundos, parando ping sin tener en
cuenta cuantos paquetes se enviaron o recibieron.
-b Envía paquetes a la dirección de broadcast de la red.
Primero, se envían al host de destino tres datagramas con un TTL=1, luego otros tres con
un TTL=2, y sucesivamente. Este TTL se reduce en 1 cada vez que el datagrama pasa
por un enrutador.
50
Round Trip Time
La primera línea refleja la información general sobre el comando. Cada línea enumerada
representa un enrutador encontrado en el camino (ruta) hacia el host destino.cada línea
de enrutador refleja su nombre y dirección IP.
El comando también refleja el RTT de los tres datagramas retornados por cada enrutador.
El asterisco reflejado en vez de un dato de tiempo representa que el enrutador no
respondió dicho datagrama. La última línea representa la respuesta a cada datagrama por
parte del host destino.
51
Fully Qualified Domain Name
Search. El nombre de dominio de esta opción se usa para completar nombres de host
incompletos. Por ejemplo, si se realiza un nslookup al host da50, el nombre es
completado automáticamente a su FQDN quedando asi: da50.digitalairlines.com.
Nameserver. Cada entrada iniciada con „nameserver‟ es seguida de una dirección IP,
esta debe ser la dirección IP de un servidor DNS, se pueden configurar hasta 3 DNS,
si el primero falla, el siguiente en la lista es usado.
El siguiente esquema muestra la relación entre los procesos demonio y los procesos de
usuario.
En este ejemplo, durante el arranque del sistema Linux, el proceso „init‟ ejecuta muchos
demonios (servicios) incluyendo un demonio llamado „user login‟. Después que el usuario
se autentica en una consola de texto, un Shell le permite iniciar procesos manualmente
(procesos de usuario).
ID del proceso (PID). Es un identificador único asignado a cada proceso cuando este
es iniciado.
Proceso hijo. Es un proceso que es iniciado por otro (este se denomina proceso
padre).
Proceso padre. Es un proceso que ejecuta otros procesos (ver definición anterior).
ID del proceso padre. Es el PID del proceso padre que ejecuto el proceso actual.
El siguiente esquema muestra la relación entre los procesos padre e hijos y sus PID.
En este ejemplo, el Proceso #1 tiene asignado un PID igual a 134. Este proceso ejecuta al
Proceso #2 que tiene asignado el PID 291 y al Proceso #3 que tiene asignado el PID 348.
Debido a que el Proceso #1, ejecuta al Proceso #2 y #3, estos son considerados procesos
hijos del Proceso #1, por tanto el PPID de estos es el mismo PID del Proceso #1.
- Tareas y procesos
En Linux se usa un identificador de tareas (normalmente llamado job ID) para referirse a
los procesos que son ejecutados desde la línea de comandos. El job ID es un valor
numérico asociado a un Shell, que identifica a un programa cuando este es ejecutado por
un Shell.
Independiente del Shell, cada proceso es identificado usando un PID, que es único en
todo el sistema. Todos las tareas tienen un PID, pero no todos los procesos tienen un job
ID asociado.
Cuando se requiere cambiar un proceso de segundo plano al primer plano, se usa el job
ID.
- Administrar procesos en primer y segundo plano
Cuando se ejecuta un proceso en primer plano desde una terminal, este se ejecuta hasta
completarse, en otras palabras, no retornamos al prompt hasta que la ejecución del
proceso se finalice. Un proceso se ejecuta en segundo plano cuando se ejecuta el
proceso y se regresa al prompt sin que el proceso finalice su ejecución.
Existen procesos que pueden cambiarse del primer al segundo plano (y viceversa) bajo
las siguientes circunstancias:
NOTA: los procesos que requieren algún tipo de entrada, también pueden ser movidos al
segundo plano, pero cuando este necesite de dicha entrada, su ejecución se suspenderá
hasta ser movido a primer plano y así proveerle de la entrada necesaria.
da51:~ # xeyes
[1]+ Stopped xeyes
da51:~ # bg
[1]+ xeyes &
da51:~ #
El símbolo „&‟ que aparece al final del nombre del proceso después de ejecutar „bg‟, nos
indica que dicho proceso ya está siendo ejecutado en segundo plano.
En este ejemplo, se visualizan tanto el job ID ([2]) como el PID (4351) del proceso que se
envió al segundo plano.
Cada proceso iniciado desde el Shell tendrá asociado un job ID para el control de tareas
del propio Shell. El comando jobs mostrara la lista de tareas en ejecución:
da51:~ # jobs
[1]+ Stopped xeyes
[2] Running xeyes &
[4]- Running sleep 99 &
da51:~ #
da51:~ # fg 1
xeyes
[4]- Done sleep 99
Con este comando se pueden visualizar procesos en ejecución. Este comando tiene una
serie de opciones de las cuales se describirán las más usadas:
Opción Descripción
a Muestra todos los procesos.
x Muestra los procesos ejecutados desde la terminal y también lo que no se
ejecutaron en una terminal.
da51:~ # ps
PID TTY TIME CMD
3103 pts/0 00:00:00 bash
3129 pts/0 00:00:00 sleep
3130 pts/0 00:00:00 ps
da51:~ # ps axl
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
...
0 1013 4170 4169 15 0 3840 1760 wait4 Ss pts/0 0:00 -bash
0 1013 4332 4170 15 0 4452 1812 finish T pts/0 0:00 xeyes
0 1013 4351 4170 15 0 4452 1812 schedu S pts/0 0:01 xeyes
0 1013 4356 4170 17 0 2156 652 - R+ pts/0 0:00 ps axl
da51:~ # ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
geeko 4170 0.0 0.3 3840 1760 pts/0 Ss 12:10 0:00 -bash
geeko 4332 0.0 0.3 4452 1812 pts/0 T 12:59 0:00 xeyes
geeko 4351 0.3 0.3 4452 1812 pts/0 S 13:01 0:03 xeyes
geeko 4375 0.0 0.1 2156 680 pts/0 R+ 13:19 0:00 ps aux
da51:~ #
En este ejemplo se pueden observar tres formas de visualizar información con el comado
„ps‟ y algunas opciones.
A continuación una breve descripción de las columnas mostradas por este comando:
Columna Descripción
UID ID del Usuario
PID ID del Proceso
PPID ID del Proceso Padre
TTY Numero de terminal
PRI Prioridad
NI Influencia la prioridad dinámica
STAT Estado de proceso actual
TIME Tiempo de uso en CPU
COMMAND Nombre del comando
Estos y otros campos son explicados con mas detalles en los manuales de „ps‟. El campo
STAT puede tener uno de los siguientes códigos:
Código Descripción
R El proceso está en ejecución
S El proceso está esperando un evento externo
D El proceso no puede ser terminado por el momento
T El proceso está suspendido
X El proceso esta „muerto‟
Z El proceso finalizo, pero está retornando valores que reinician el proceso
Comando ‘pstree’
Para finalizar una serie de procesos, se debe encontrar el proceso padre apropiado y
finalizarlo. La opción –p despliega el PID de los procesos y la opción –u despliega el UID
de los mismos.
Linux siempre intenta distribuir el tiempo uso del CPU de manera equilibrada. Aun así se
puede asignar a los procesos más o menos tiempo de cómputo. Para esta labor existe el
comando nice:
Este comando asigna a un proceso un valor nice específico que afecta la prioridad del
proceso (debido al incremento o decremento). Si no se ingresa un valor nice, el proceso
es iniciado con el valor +10.
La columna NI (ver ejemplo de ps), contiene el valor nice de cada proceso. El valor
estándar 0 determina que el proceso es neutral.
Se puede asignar valores nice en el rango [-20,19]. A menor valor mayor la prioridad, por
ejemplo, un proceso con valor nice -20, se ejecuta con mayor prioridad que otro con valor
nice 19 (más baja prioridad).
El nivel nice es usado por el organizador de tareas para determinar con cuanta frecuencia
un proceso es atendido por el CPU.
Solamente al root se le permite iniciar procesos con un valor negativo (nice –n -3 sleep
99), si un usuario normal trata de hacer esta acción, un mensaje de error se desplegará.
También se puede cambiar la prioridad a los procesos que están en ejecución, esto se
hace con el comando renice: „renice 5 1712‟
En el ejemplo anterior, el comando asigna al proceso con PID 1712 un nuevo valor nice
(5).
Solamente el root puede decrementar los valores nice de procesos en ejecución, los otros
usuarios solo pueden incrementarlos.
Comando ‘top’
El comando top permite visualizar procesos de manera continua, en una lista que se
actualiza en un periodo corto de tiempo. Esto provee una vista en tiempo real de los
procesos ejecutándose en el sistema, este comando también puede ser utilizado para
asignar nuevos valores nice a los procesos o para finalizarlos.
La información mostrada por top puede ser filtrada por usuario u ordenada por medio de
un campo específico. La prioridad de un proceso se modifica ingresando „r‟ durante la
ejecución de top. Mismas restricciones del comando renice.
Columna Descripción
PID ID del Proceso
USER Nombre del Usuario
PR Prioridad
NI Valor nice
VIRT Imagen Virtual (Kb)
RES Espacio Residente (Kb)
SHR Espacio de Memoria Compartida (Kb)
S Estado del Proceso
%CPU % de uso del CPU
%MEM % de uso de Memoria
TIME+ Tiempo en CPU
COMMAND Nombre del comando
Para obtener una lista completa de los comandos disponibles una vez se está ejecutando
el comando „top‟, se usa el símbolo „?‟ o „h‟, la tabla siguiente muestra los comandos de
top más comunes:
Comando Descripción
r Asigna un nuevo valor nice a un proceso en ejecución.
k Envía a un proceso en ejecución la señal de finalización.
N Ordena por PID
P Ordena por uso de CPU
i Muestra únicamente los procesos non-idle
Las opciones se usan para modificar el comportamiento de top, por ejemplo top –d 5
modifica la espera de actualización (el estándar es 3), en este caso, se esperará 5
segundos antes de la actualización.
El comando top –n 3 provoca que top detenga su ejecución en la 3ra actualización. Esta
opción es especialmente útil en combinación con la opción „-b‟, por ejemplo top –b –n 1.
- Fin de un proceso
Los procesos normalmente finalizan su ejecución cuando finalizan las tareas que tienen
programadas de manera exitosa. En algunos casos, algunos procesos, se comportan de
manera inesperada consumiendo recursos y haciendo que todo el sistema se comporte
de manera errada. Es para estos casos que existen en Linux procesos que permiten
detener y finalizar otros procesos, aparte por supuesto de la orden „k‟ dentro de la
ejecución del comando „top‟
Los comandos ‘kill’ y ‘killall’
Se puede usar los comandos kill y killall para terminar un proceso. El comando killall
„mata‟ todos los procesos que tengan el mismo nombre del indicado, el comando kill
„mata‟ solamente un proceso, que debe ser pasado como parámetro del comando.
El comando kill usa como parámetro el PID del proceso a detener, en cambio killall usa
como parámetro el nombre del comando.
Por ejemplo, si el comando xeyes es ejecutado y está siendo ejecutado con el PID 18734
y se necesita detener el proceso (por cualquier motivo), se necesitara el comando kill
18734 o el comando killall xeyes con cualquier variante el comando xeyes detendrá su
ejecución.
Un proceso puede realizar una de las siguientes acciones cuando recibe la señal de
finalización por parte de estos comandos:
En todo caso, los procesos no tienen control sobre las siguientes dos formas de
detenerlos (las señales siguientes forman parte del kernel):
Se debe usar la señal SIGKILL con precaución, debido a que el sistema operativo cierra
todos los archivos que estén abiertos sin salvar cambios, los datos en el buffer no son
procesados. Esto significa que algunos procesos serán cerrados en un estado indefinido y
su reinicio puede ser algo complicado de realizar.
52
Para una lista completa de las señales, use el comando kill –l o man 7 signal.
Estos servicios basados en red, crean un listener en un puerto TCP o UDP donde ellos
fueron iniciados, usualmente durante el inicio del sistema. Este listener espera que
aparezca tráfico de red en el puerto asignado, y cuando se detecta tráfico, el programa lo
procesa como entradas, generando salidas que son enviadas al emisor.
Por ejemplo, cuando un navegador web conecta al servidor web, este envía una solicitud
al servidor web, el servidor web procesa la solicitud y devuelve una respuesta. La
respuesta entonces es tomada por el navegador y la convierte en una página legible por
humanos.
Muchos servicios basados en red trabajan de manera similar, pero los datos no siempre
viajan en texto plano como en el ejemplo anterior.
- Administrar servicios
Esta es la razón por la que los demonios sean independientes de una terminal (símbolo „?‟
en la columna TTY del comando „ps x‟).
En muchos casos se puede reconocer un proceso demonio ya que al final del nombre
llevan una „d‟, por ejemplo: sshd, syslogd, named, httpd, etc. También existen otros
demonios en la que esta regla no se aplica, por ejemplo: cron y portmap.
Demonios controlados por señal. Estos se activan cuando existe una tarea que le
corresponda (por ejemplo cupsd).
Demonios controlados por intervalo. Estos siempre se activan en ciertos intervalos
(por ejemplo cron o atd).
Los demonios tienen sus scripts almacenados en /etc/init.d/. Cada script puede ser
controlado y ejecutado con los siguientes parámetros:
Parámetro Descripción
start Inicia el servicio
stop Detiene el servicio
reload Vuelve a cargar los archivos de configuración del servicio, o detiene el
(restart) servicio y vuelve a iniciarlo.
Se puede iniciar los servicios ingresando la ruta completa (/etc/init.d/sshd start), o si existe
un enlace en /usr/sbin/ o en /sbin/ (en estos directorios se encuentran los programas
ejecutables de estos demonios) se puede usar rcsshd start.
Este servicio verifica a cada minuto con el fin de ejecutar las tareas definidas para ese
momento.
Tareas del sistema.
Se puede controlar las tareas del sistema desde el archivo /etc/crontab. Después de la
instalación solo hay una tarea que corre los script contenidos en los siguientes directorios
en los intervalos correspondientes:
Directorio Intervalo
/etc/cron.hourly Tareas que se ejecutan a cada hora.
/etc/cron.daily Tareas que se ejecutan diariamente.
/etc/cron.weekly Tareas que se ejecutan semanalmente.
/etc/cron.monthly Tareas que se ejecutan mensualmente.
Se pueden agregar líneas a este archivo, pero no se debe eliminar las líneas creadas
durante la instalación.
da51:~ # ls -l /etc/cron*
-rw------- 1 root root 11 2006-05-08 20:47 /etc/cron.deny
-rw-r--r-- 1 root root 255 2006-05-08 20:47 /etc/crontab
/etc/cron.d:
insgesamt 0
/etc/cron.daily:
insgesamt 32
-rwxr-xr-x 1 root root 393 ... logrotate
-rwxr--r-- 1 root root 948 ... suse-clean_catman
-rwxr-xr-x 1 root root 1875 ... suse.de-backup-rc.config
-rwxr-xr-x 1 root root 2059 ... suse.de-backup-rpmdb
-rwxr-xr-x 1 root root 1320 ... suse.de-clean-tmp
-rwxr-xr-x 1 root root 371 ... suse.de-cron-local
-rwxr--r-- 1 root root 1196 ... suse-do_mandb
/etc/cron.hourly:
insgesamt 0
/etc/cron.monthly:
insgesamt 0
/etc/cron.weekly:
insgesamt 0
da51:~ #
Estos scripts como podrá notarse son propios del sistema operativo, y cambiaran
(sobrescribirán) al momento de una actualización del mismo.
Se puede especificar a los usuarios que pueden crear tareas con cron usando el archivo
/var/spool/cron/allow y a los que no se tiene permitido crear /var/spool/cron/deny, y estos
se evalúan en este orden. Si estos archivos no existen, solamente el root podrá definir
trabajos con cron.
Tareas de usuario.
Opción Descripción
-e Crear o editar tareas, se emplea el editor „vi‟.
file El archivo especificado contiene una lista de tareas con el formato apropiado y
reemplaza cualquier archivo crontab existente para el usuario.
-l Despliega las tareas programadas actuales.
-r Elimina todas las tareas.
Cada línea del archivo contiene 6 campos que definen la tarea programada. Los primeros
5 campos definen el tiempo en el que se ejecutara la tarea, y el ultimo campo define a la
tarea en sí, que puede ser un comando o script. Una vez que se programa la tarea, la
interacción con el usuario no es posible.
Campo Rango
Minutos 0 - 59
Horas 0 - 23
Día del Mes 1 - 31
Mes 0 - 12
Día de la Semana 0-7
Si se necesita ejecutar una tarea en cada momento, se debe ingresar un asterisco (*)
en el campo que le corresponda.
En este ejemplo, de lunes a viernes (1-5) cada 10 minutos (*/10) entre las 8:00 y las 17:00
horas (8-17), se debe ejecutar el comando fetchmail que buscan o solicita los nuevos
correos entrantes del servidor de correos mailserver.
Cuando Linux arranca, muchas líneas de código pasan en la pantalla, estas están
diseñadas para una lectura rápida, si ocurre algún error en el inicio del sistema, es muy
posible que no se pueda visualizar o leer. Estos mensajes son almacenados en el buffer
del kernel, y como la capacidad del buffer es limitada, las entradas más viejas son
eliminadas al momento de que nuevas entradas son añadidas. Con el objetivo de
mantener una bitácora de estos mensajes, estos se almacenan en /var/log/boot.msg.
Pero a diferencia de los mensajes en pantalla durante el proceso de arranque a cada
línea en pantalla se agregan muchas en este archivo (más detalles). El comando para
visualizar el buffer del kernel es dmesg y su salida es similar a lo siguiente:
da51:~ #
La salida de dmesg muestra los mensajes generados durante el proceso de inicio del
hardware por el kernel o por los módulos del kernel.
...
System Boot Control: The system has been set up
Skipped features: boot.cycle
System Boot Control: Running /etc/init.d/boot.local
done<notice>killproc: kill(874,3)
INIT: Entering runlevel: 5
Boot logging started on /dev/tty1(/dev/console) at Wed May 24 10:31:51
2006
Master Resource Control: previous runlevel: N, switching to runlevel: 5
Loading AppArmor profiles - AppArmor already loaded with profiles. Not
loading profiles. warning
Initializing random number generatordone
<notice>startproc: execve (/usr/bin/dbus-daemon) [ /usr/bin/dbus-daemon
--system ], [ CONSOLE=/dev/console ROOTFS_FSTYPE=reiserfs TERM=linux
SHELL=/bin/sh ROOTFS_FSCK=0 LC_ALL=POSIX INIT_VERSION=sysvinit-2.86
REDIRECT=/dev/tty1 COLUMNS=123 PATH=/bin:/usr/bin:/sbin:/usr/sbin
vga=0x317 RUNLEVEL=5 PWD=/
SPLASHCFG=/etc/bootsplash/themes/SuSE-SLES/config/bootsplash-1024x768.cfg
PREVLEVEL=N LINES=44 SHLVL=2 HOME=/ splash=silent SPLASH=yes
ROOTFS_BLKDEV=/dev/sda2 _=/sbin/startproc DAEMON=/usr/bin/dbus-daemon ]
acpid: no ACPI support in kernelskipped
Starting D-BUS daemondone
...
Se puede usar YaST para visualizar el contenido del archivo: YaST > Misceláneos >
Visualizar Start-Up Log. O iniciar el modulo directamente desde una consola (solo root):
yast2 view_anymsg.
- Información del hardware (/proc/).
Se puede visualizar información disponible usando comandos tales como: „cat‟, „more‟, o
„less‟ agregando el nombre del archivo (ejemplo: cat /proc/cpuinfo).
A continuación una tabla en la que se describen los archivos que son consultados con
mayor frecuencia:
Archivo Descripción
/proc/devices Visualiza los dispositivos usados en la instalación actual de
Linux.
/proc/cpuinfo Visualiza información del procesador.
/proc/ioports Visualiza los puertos I/O de su equipo. Los puertos I/O son las
A continuación se detallan algunas utilidades que se pueden usar desde el Shell del
sistema:
Por ejemplo, el comando uptime nos permite visualizar la hora actual, la cantidad de
tiempo que el sistema a estado activo, la cantidad de usuarios en el sistema, el porcentaje
de tareas en la cola de ejecución durante los últimos 1, 5 y 15 minutos
53
Direct Memory Access
54
Peripheral Component Interconnect
55
Small Computer System Interface
56
System Information GAthering
.
da51:~ # uptime
1:13pm up 2:42, 1 user, load average: 0.02, 0.12, 0.09
da51:~ #
Comando netstat
Mientras el comando „ps‟ provee información a nivel de procesos, se puede usar netstat
para visualizar la salida en los puertos de red que estén ofreciendo algún servicio y cuya
conexión este en estado „establecido‟ tal como se muestra en el ejemplo:
Opción Descripción
-p Muestra los procesos (solo la puede usar root)
-a Muestra todas las conexiones (listening y no listening)
-t Muestra información TCP
-u Muestra información UDP
-n No resuelve nombres de host
-e Despliega información adicional
-r Despliega información de enrutamiento
Comando uname
Este comando sirve para visualizar la versión actual del kernel de Linux:
da51:~ # uname -a
Linux da51 2.6.16.14-6-smp #1 SMP Tue May 9 12:09:06 UTC 2006 i686 i686 i386 GNU/Linux
da51:~ #
Comando xosview
Desde el escritorio grafico, se puede ejecutar la utilidad xosview para desplegar el estado
de muchos parámetros del sistema, tal como uso del CPU, promedio de carga, uso de la
memoria, espacio swap usado, uso de la red, interrupciones y estados de los puertos en
serie.
Para ejecutar esta utilidad, desde la ventana terminal ejecutar xosview &.
Cada parámetro es desplegado en una barra horizontal separada por regiones con código
de color, cada región representa el porcentaje de uso de este recurso.
- Monitor de espacio de disco.
Los comandos „df‟ y „du‟ que ya hemos estudiado nos proporcionan información de las
particiones.
Este demonio es usado por muchos servicios para administrar las bitácoras del sistema.
La ventaja de usar un servicio único es que todas las bitácoras pueden ser administradas
desde un archivo de configuración único.
El demonio syslog-ng tiene la ventaja (sobre syslogd) de filtrar los mensajes basándose
no solamente en los medios y prioridades si no también en el contenido de cada mensaje.
Este demonio acepta mensajes provenientes de los servicios del sistema, y dependiendo
de su configuración, de otros hosts y servicios definidos en los archivos de configuración
/etc/sysconfig/syslog y /etc/syslog-ng/syslog-ng.conf. Este último es creado por YaST
durante la instalación del sistema.
/etc/sysconfig/syslog
Este archivo contiene los parámetros generales de manera similar al demonio syslogd.
El conjunto de parámetros en este archivo, son evaluados en el inicio del sistema por el
script /etc/init.d/syslog. Además, en la distribución SUSE, SuSEconfig usa este erchivo
para agregar canales al archivo /etc/syslog-ng/syslog-ng.conf cuando se genera desde
/etc/syslog-ng/syslog-ng.conf.in.
...
## Type: string
## Default: ""
## Config: ""
## ServiceRestart: syslog
#
# if not empty: parameters for syslogd
# for example SYSLOGD_PARAMS="-r -s my.dom.ain"
#
SYSLOGD_PARAMS=""
## Type: string
## Default -x
## Config: ""
## ServiceRestart: syslog
#
# if not empty: parameters for klogd
# for example KLOGD_PARAMS="-x" to avoid (duplicate) symbol resolution
#
KLOGD_PARAMS="-x"
## Type: list(syslogd,syslog-ng)
## Default: syslogd
## Config: syslog-ng
## Command: /sbin/rcsyslog restart
## PreSaveCommand: /sbin/rcsyslog status && /sbin/rcsyslog stop
#
# The name of the syslog daemon used as
# syslog service: "syslogd", "syslog-ng"
#
SYSLOG_DAEMON="syslog-ng"
...
/etc/syslog-ng/syslog-ng.conf.in
Este archivo es una plantilla que se usa para crear el archivo /etc/syslog-ng/syslog-
ng.conf que es el que usa el demonio syslog para cargar sus configuraciones. Ambos
archivos tienen la misma sintaxis.
Esto significa que cada vez que se ejecute SuSEconfig, el archivo /etc/syslog-ng/syslog-
ng.conf será reescrito y todos las modificaciones manuales realizadas se perderan.
/etc/syslog-ng/syslog-ng.conf
Los demonios syslogd y syslog-ng comparten dos conceptos que se deben comprender
antes de proceder a configurarlos:
Medios
Prioridades
Origen
Filtro
Destino
Ruta de bitácora
Medios
Medio Descripción
authpriv Usado por todos los servicios que usan el sistema de seguridad o
autorización, todos los mensajes PAM usan este medio.
El demonio SSH usa el medio „auth‟
cron Acepta mensajes de „cron‟ y „at‟
daemon Usado por varios demonios que no poseen su propio medio, tal como el
demonio „ppp‟
kern Acepta todos los mensajes de kernel.
lpr Acepta todos los mensajes del demonio de impresión.
mail Acepta todos los mensajes del demonio de correos. Esto es importante ya
que muchos mensajes pueden arribar simultáneamente.
news Acepta todos los mensajes del demonio de noticias. Y similar al medio
„mail‟ muchos mensajes pueden arribar de manera simultánea.
syslog Mensajes internos del demonio syslog.
user Es un medio general para mensajes a nivel de usaurio.
uucp Acepta todos los mensajes del demonio de uucp.
local0-local7 Estos 8 medios están disponibles para configuración del usuario. Todos las
categorías „local‟ pueden ser usadas por aplicaciones desarrolladas por los
usuarios.
Prioridades
La prioridad provee detalles sobre la urgencia de los mensajes. A continuación una lista
de las prioridades disponibles (ordenadas de menor a mayor relevancia):
Prioridad Descripción
Debug Usado solamente para propósitos de reporte de eventos.
Infor Usado solamente para propósitos informativos.
Notice Usado por mensajes que describen el estado del sistema que deben ser
escritos en bitácora.
Warning Usado por mensajes que describen situaciones anómalas del sistema.
Err Usado por mensajes que describen errores.
Crit Usado por mensajes que describen condiciones críticas de un programa.
Alert Usado por mensajes que informan al administrador que se necesita una
acción inmediata para que el sistema pueda seguir funcionando.
Emerg Usado por mensajes que previenen que el sistema puede dejar de
funcionar.
Orígenes
source src {
# include internal syslog-ng messages
# note: the internal() soure is required!
internal();
unix-dgram("/dev/log");
En este ejemplo, un origen para mensajes internos del demonio syslog-ng y se define el
canal /dev/log.
Filtros
Los filtros son expresiones booleanas que son aplicadas a los mensajes y son evaluadas
como verdaderas o falsas. La sintaxis general es:
El <identificador> debe ser único y será usado posteriormente para configurar la bitácora
actual. A continuación un extracto de /etc/syslog-ng/syslog-ng.conf que muestra algunos
filtros usados en la distribución SUSE de Linux:
#
# Filter definitions
#
filter f_iptables { facility(kern) and match("IN=") and match("OUT="); };
filter f_console { level(warn) and facility(kern) and not
filter (f_iptables) or level(err) and not facility(authpriv); };
filter f_newsnotice { level(notice) and facility(news); };
filter f_newscrit { level(crit) and facility(news); };
filter f_newserr { level(err) and facility(news); };
filter f_news { level(news); };
...
filter f_messages { not facility(news, mail) and not filter (f_iptables); };
...
Como podrá notarse, medio y prioridad pueden ser usados dentro de los filtros.
Destinos
destination <identifier> {
destination-driver(params);
destination-driver(params); ... };
Los posibles destinos puede ser: archivos, fifos, canales, tty de ciertos usuarios,
programas, u otros hosts.
Ruta de bitácora
Las rutas son los puntos donde todo converge, ahí se almacenan los mensajes
dependiendo el origen, filtro y destino. La sintaxis general es:
En la primera línea, los mensajes del origen definido57 y son enviados al tty10 si pasan el
filtro f_console.
57
Ver ejemplos anteriores
La mejor manera de leer una bitácora almacenada en un archivo es usar el comando „tail‟
(tail /var/log/messages). Este despliega las últimas 10 entradas de la bitácora. Con la
opción „-n [líneas]‟ se puede definir la cantidad de líneas que se desea visualizar de la
bitácora (tail –n 30 /var/log/messages). Si lo que se necesita es que la entrada sea
visualizada inmediatamente se debe usar la opción interactiva „-f‟ (tail –f
/var/log/messages)
Archivo Descripción
/var/log/audit/ Este directorio guarda la bitácora de Novell AppArmor (audit.log).
/var/log/cups/ Este directorio guarda la bitácora del sistema de impresión CUPS.
/var/log/news/ Este directorio guarda la bitácora del sistema de noticias.
/var/log/YaST2/ Este directorio guarda la bitácora de YaST.
/var/log/boot.msg Cuando el sistema inicia, todos los mensajes de los scripts de
arranque se despliegan en la primera consola virtual, estos pasan
rápidamente que en ocasiones no logramos leer todos los mensajes.
En este archivo se almacenan todos estos mensajes.
/var/log/mail Los mensajes del sistema de correos son escritos en este archivo.
Debido a que el sistema genera una gran cantidad de mensajes, se
generan archivos de bitácora adicionales:
/var/log/mail.err
/var/log/mail.info
/var/log/mailwarn
/var/log/lastlog Este archivo contiene información sobre los usuarios que accedieron al
sistema, desde donde y cuanto tiempo. Este archivo está cifrado y solo
puede verse su contenido usando el comando lastlog.
Es muy importante, para todo administrador, que las particiones de disco no lleguen a
niveles de saturación, si este caso llega a ocurrir, el sistema deja de funcionar
apropiadamente hasta que se libere espacio en las particiones de disco.
También es importante que los archivos de bitácora no crezcan a tamaños muy grandes y
se vuelvan virtualmente inmanejables. Es por esa razón que los archivos de bitácora son
revisados constantemente por el demonio „logrotate‟. Este se ejecuta diariamente
mediante un cron. Este revisa todos los archivos de bitácora revisando sus propios
archivos de configuración y realizando las acciones requeridas en estos.
Se puede configurar los ajustes en los archivos que le indiquen a logrotate cuando un
archivo debe ser comprimido o borrado en intervalos regulares o cuando alcanza un
tamaño determinado.
Opción Descripción
weekly El archivo de bitácora es creado o reemplazado una vez a la semana.
rotate 4 Si no se define esta opción, el archivo rotado es eliminado (la vieja versión).
En este ejemplo, se configura en 4, significa que las ultimas 4 versiones se
mantienen en el disco.
create El archivo viejo se almacena con otro nombre y se crea un archivo nuevo
vacio.
compress Si esta opción es activada, la versión vieja se comprime.
Muchos paquetes RPM contienen archivos pre configurados para evaluación por
logrotate, estos están almacenados en /etc/logrotate.d/. Los archivos contenidos en este
directorio son leídos por logrotate si la siguiente línea esta activa en el archivo de
configuración /etc/logrotate.conf:
...
include /etc/logrotate.d/
...
Cualquier ajuste en los archivos de esta carpeta súper seden los ajustes generales de
logrotate.conf.
...
#
# Please note, that changing of log file permissions in this
# file is not sufficient if syslog-ng is used as log daemon.
# It is required to specify the permissions in the syslog-ng
# configuration /etc/syslog-ng/syslog-ng.conf.in as well.
#
/var/log/warn /var/log/messages /var/log/allmessages
/var/log/localmessages /var/log/firewall {
compress
dateext
maxage 365
rotate 99
missingok
notifempty
size +4096k
create 640 root root
sharedscripts
postrotate
/etc/init.d/syslog reload
endscript
}
...
...
Opción Descripción
size +4096k Archivos que no serán rotados semanalmente, por el contrario se
rotaran cuando se alcance el tamaño máximo de 4096Kb.
rotate 99 99 versiones de los archivos rotados serán almacenados.
compress Los archivos rotados serán comprimidos.
maxage 365 El archivo que tenga una edad de 365 días será eliminado.
notifempty Si un archivo de bitácora esta vacio, no se realiza la rotación.
create 640 root root Los nuevos archivos de bitácora serán creados con este propietario
y estos permisos.
postrotate Estos son script ejecutados después de la rotación. Por ejemplo,
… algunos servicios tienen que ser reiniciados después de realizar el
endscript cambio.
En este ejemplo, el demonio syslog debe releer sus archivos de
configuración después de la rotación (/etc/init.d/syslog reload).
Este comando muestra a los usuarios actuales dentro del sistema y la información del
tiempo desde que ingreso. La opción „-H‟ despliega la información con encabezados, la
opción „-r‟ despliega la información en base al nivel de ejecución actual, „-a‟ despliega
información con más detalles.
da51:~ # who -H
NAME LINE TIME COMMENT
root pts/0 2006-05-24 10:33 (da51.digitalairlines.com)
geeko :0 2006-05-24 13:54
geeko pts/1 2006-05-24 13:54
da51:~ #
- Comando ‘w’
Este comando despliega información sobre los usuarios actuales en el sistema y los
procesos que están ejecutando.
La primera línea incluye información, tal como el tiempo que el sistema ha estado en
ejecución, cuantos usuarios han ingresado al sistema, y los promedios de carga de los
pasados 1, 5 y 15 minutos.
Debajo de la primera línea, se muestra una línea por cada usuario en el sistema, con el
nombre de usuario, su tty asociada, el host remoto, tiempo en el sistema, tiempo ocioso,
JCPU58, PCPU59, y la línea de comando en ejecución.
Se puede usar la opción „-h‟ para no desplegar el encabezado, „-s‟ para no desplegar la
información de tiempos, y „-V‟ para desplegar la información de la versión.
da51:~ # w
15:06:45 up 4:35, 4 users, load average: 0.00, 0.00, 0.00
USER TTY LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10:33 0.00s 0.73s 0.02s w
geeko :0 13:54 ?xdm? 1:15 0.58s /bin/sh
/opt/kde3/bin/startkde
...
da51:~ #
58
Es el tiempo que han usado todos los procesos vinculados al tty
59
Es el tiempo usado por el proceso actual definido en el campo „What‟.
Este comando despliega información sobre usuarios del sistema local y remoto.
Nombre de usuario
Nombre completo del usuario
Nombre de la terminal asociada
Tiempo ocioso
Tiempo de acceso (y desde donde)
da51:~ # w
Login Name Tty Idle Login Time Where
geeko Geeko *:0 - Wed 13:54
geeko Geeko pts/1 1:13 Wed 13:54
geeko Geeko *pts/3 1:02 Wed 13:55
root root pts/0 - Wed 10:33 da51.digitalairlines.com
da51:~ #
- Comando ‘last’
Este comando despliega una lista de los últimos usuarios que accedieron al sistema.
Este comando lee de atrás para adelante el archivo /var/log/wtmp (o el archivo definido
por la opción „-f‟), y despliega una lista de todos los usuarios que entraron (y salieron)
desde que el archivo fue creado.
Se puede especificar nombres de usuarios y tty‟s para mostrar información con esta
entrada únicamente.
Opción Descripción
-num Número de líneas a mostrar.
-a Despliega el nombre del host en la última columna
-x Despliega las entradas de apagado y los cambios de nivel de ejecución.
da51:~ # lastlog
Username Port Latest
at **Never logged in**
bin **Never logged in**
...
root pts/0 Wed May 24 10:33:36 +0200 2006
sshd **Never logged in**
suse-ncc **Never logged in**
uucp **Never logged in**
wwwrun **Never logged in**
geeko :0 Wed May 24 13:54:29 +0200 2006
...
da51:~ #
- Comando ‘faillog’
#%PAM-1.0
auth requiredpam_securetty.so
auth requiredpam_tally.so no_magic_root per_user
auth include common-auth
auth requiredpam_nologin.so
account requiredpam_tally.so no_magic_root
...
Si se requiere que esta funcionalidad este en el escritorio grafico, se deben agregar las
líneas anteriores al archivo /etc/pam.d/xdm o al archivo /etc/pam.d/gdm, dependiendo
del administrador de acceso que se use.
Se puede usar las opciones „-u‟ para desplegar información de un usuario especifico, y „-p‟
para que la información se ordene por UID.
También podemos ajustar los intentos de acceso, por ejemplo, limitar a los usuarios a 3
intentos requerirá un comando similar al siguiente: faillog –m 3. Para asegurar que el
usuario root no se bloquee debemos definir intentos infinitos: faillog –u root –m 0. En
este caso el orden de las opciones si es relevante. Para garantizar acceso a un usuario
que fue bloqueado por muchos intentos el comando es: faillog –r [user].
BIOS
Carga en memoria
kernel initrd
kernel
kernel
Se descomprime el mismo
Encuentra la RAM y HD
El inicio del sistema requiere los montajes initrd
Inicia el kernel
Initrd no existe => controladores para montar /
linuxrc
estan en el kernel
Carga linuxrc
Modulos
para montar /
initrd
Inicia desde el HD
Inicia el sistema
init
Inicia init
Procesos, scripts
Las tareas ejecutadas por el BIOS60 incluye la realización de una auto revisión de
encendido (POST61), conduce la detección inicial y la instalación del hardware, y el
acceso a dispositivos de arranque (tales como CD o Discos Duros [HD]).
El kernel revisa y ajusta la consola (los registros del BIOS de tarjeta grafica y el formato
de salida en pantalla), lee los ajustes del BIOS e inicializa las interfaces de hardware
básicas, siguen los controladores, que son parte del kernel, buscan el hardware instalado
y se inicializan de acuerdo a estos.
Este es un archivo cpio que el kernel puede cargar en un disco RAM. Provee un entorno
Linux mínimo que habilita la ejecución de programas antes que el actual sistema de
archivos root (/) sea montado. initramfs siempre provee de un ejecutable llamado init que
puede ejecutar el programa de inicio instalado en / para que el proceso de arranque
proceda.
El kernel inicia el programa init contenido en el initramfs. Este es un script de Shell que,
entre otras cosas, carga los módulos del kernel necesarios para montar el / actual, montar
/ y finalmente iniciar /sbin/init desde el /.
Para poder visualizar el script init en initramfs, se debe desempaquetar el archivo cpio:
60
Basic Input Output System
61
Power-On Self Test
62
Master Boot Record
Una vez que el proceso init arranca, este inicia accediendo el script /etc/init.d/boot, este
controla el inicio de los servicios, tales como „quota disk‟ y el monitoreo del sistema de
archivos local.
Después que este script completa su ejecución, init ejecuta el script /etc/init.d/rc, este se
usa para configurar los niveles de ejecución y arrancar los servicios y demonios.
Cada nivel de ejecución tiene su propio conjunto de servicios que son iniciados. Por
ejemplo el nivel de ejecución 5 incluye los componentes de X Windows que ejecutan el
escritorio grafico de Linux.
Para iniciar un sistema, se necesita un programa que pueda cargar el sistema operativo
en memoria. Este programa llamado „boot loader‟, carga el kernel del sistema operativo,
es entonces que se carga el sistema.
Fase 2: esta fase contiene al cargador actual. Los archivos de esta fase están
ubicados en el directorio /boot/.
- Administradores de arranque en SUSE Linux
Soporte a sistemas de archivos. Las segunda fase incluye controladores para los
sistemas de archivos ReiserFS, ext2, ext3, Minix, JFS, XFS, FAT, y FFS (BSD). Por
esta razón, el cargador puede acceder archivos aun antes de que el sistema operativo
se cargue. Esto es útil cuando la configuración del administrador de arranque falla y
se necesita buscar y cargar manualmente el kernel.
Control Interactivo. GRUB tiene su propio Shell que habilita controles interactivos
para el administrador de arranque.
Administrador de arranque LILO
Estos mapas simplemente señalan al número del bloque en el disco que comprenden a
los archivos lógicos. Cuando un mapa es procesado, el BIOS carga todas las secuencias
de bloques físicos tal como el mapa lo define colocando el archivo lógico en memoria.
En contraste con LILO que confía completamente en los mapas, GRUB intenta ser
independiente de los mapas en un momento temprano del arranque del sistema. GRUB
logra esto por medio de los códigos del sistema operativo, que habilita acceso a archivos
usando especificaciones de la ruta conforme al número del bloque.
63
LInux LOader
Debido a que GRUB tiene su propio Shell, se puede cargar el sistema manualmente si
este no se inicia automáticamente debido a un error en el administrador de arranque.
Iniciar el Shell de GRUB en el sistema en ejecución
Para iniciar el Shell de GRUB mientras el sistema está en ejecución, basta con ejecutar el
comando grub como root:
da51:~ # grub
GNU GRUB version 0.94 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command
completions. Anywhere else TAB lists the possible completions of a device/filename. ]
grub> find /boot/vmlinuz
(hd0.2)
grub> quit
da51:~ #
Opciones Generales:
o color White/blue black/ligtt-gray. Colores del menú del administrador de
arranque.
o default 0. La primera entrada del menú (número 0) es la entrada de arranque
estándar e inicia automáticamente si no se selecciona otra entrada con el
teclado.
o timeout 8. La entrada estándar de arranque será iniciada automáticamente
después de 8 segundos.
o gfxmenu (hd0,0)/boot/message. Esto define donde está almacenado el menú
grafico.
Después de las opciones generales, se colocan las opciones de los sistemas
operativos que puedan ser cargadas desde GRUB.
o title titulo. Cada entrada de sistema operativo inicia con un titulo.
o root (hd0,0). Esta entrada es relativa a la partición del disco duro mostrado en
la sintaxis de GRUB, en este ejemplo es la primer partición del primer disco
duro. GRUB no distingue entre discos SCSI e IDE. El disco duro reconocido
por el BIOS como el primer disco se le asigna el nombre hd0, el segundo hd1,
y sucesivamente. La primera partición del disco hd0 se nombra hd0,0, a la
segunda partición hd0,1, y sucesivamente.
o kernel /boot/vmlinuz. Esta entrada describe la ubicación del kernel, relativa a
la partición especificada anteriormente. A esto le siguen los parámetros del
kernel por ejemplo: root=/dev/hda1, vga=normal.
o initrd /boot/initrd. Esta entrada configura la ubicación del ramdisk inicial
(initramfs), relativo al root (hd0,0) especificado anteriormente. Este contiene
controladores de hardware necesarios para que el kernel pueda acceder a los
discos duros (tales como controladores IDE o tarjetas SCSI).
La pantalla de inicio de GRUB permite pasar parámetros que modifican el kernel de Linux
antes que este sea iniciado.
En la parte inferior del menú en pantalla se encuentra un campo de texto. Para agregar
opciones al arranque, se debe seleccionar el sistema operativo y digitar las opciones
adicionales en este campo.
Se puede usar esta opción para acceder a los sistemas de archivos y corregir alguna
configuración.
NOTA: los sistemas de archivos son montados con acceso de solo lectura. Para modificar
archivos de configuración se necesita remontar los sistemas de archivos con el comando:
Ejecutando exec /sbin/init desde el prompt de bash reemplaza el Shell por el programa
init y continua el proceso de arranque hasta que el novel de ejecución sea activado.
GRUB también permite el uso de contraseñas encriptadas con MD5 que se pueden
generar de la siguiente manera:
da51:~ # grub-md5-crypt
Password:
Retype password:
$1$FtTeK1$qaV.tOrzbg3EYAgVfNup40
Esta cadena puede ser copiada al archivo /boot/grub/menú.lst con la siguiente sintaxis:
password --md5 $1$FtTeK1$qaV.tOrzbg3EYAgVfNup40. El parámetro „lock‟ dentro de
la sección titulo de un sistema operativo, puede ser usado para forzar la solicitud de una
contraseña cuando esta opción sea seleccionada.
title Floppy
lock
chainloader (fd0)+1
Ahora, seleccionar el inicio desde la unidad Floppy será posible solo si se introduce la
contraseña.
NOTA: definir contraseñas solo mejora un poco la seguridad, aun asi no puede prevenir el
arranque de la computadora desde otros medios, como un sistema de rescate por
ejemplo, y que se pueda acceder a los archivos del disco duro.
Este proceso, o uno de sus hijos, inicia todos los procesos adicionales, asimismo es el
último en ser cerrado en el sistema, debido a esto también se encarga que todos los
procesos sean cerrados de manera apropiada. Esto significa que init controla tanto el
encendido como el apagado del sistema.
Debido a esta posición de privilegios y prioridades, SIGKILL que cuando se envía a los
procesos estos deben terminarse, no tiene ningún efecto en init.
Varios niveles de ejecución definen el estado del sistema en Linux. La siguiente tabla
muestra la totalidad de estos:
Runlevel Descripción
0 Apagar el sistema
S Usado para iniciar el sistema en modo mono usuario.
1 Modo mono usuario
2 Modo multiusuario sin servicios de redes
3 Modo multiusuario con servicios de redes
4 Reservado
5 Modo multiusuario con servicios de redes y X-Windows
6 Reiniciar el sistema
da51:~ # runlevel
N 3
da51:~ #
64
Niveles de Ejecución
Ahora veremos cómo se configura el programa init, este conocimiento lo veremos en dos
partes:
Sintaxis de inittab
id:r1:acción:proceso
En el que:
id. Es un nombre único para la entrada, este puede contener hasta 4 caracteres.
r1. Se refiere a uno o más niveles de ejecución en que esta entrada será evaluada.
acción. Describe que necesita hacer init.
proceso. Es el proceso conectado a esta entrada.
id:5:initdefault:
El parámetro „initdefault‟ señala al proceso init, cual debe ser el runlevel en que el sistema
debe iniciar. El runlevel estándar, generalmente es el 3, y en algunos casos el 5.
si:bootwait:/etc/init.d/boot
El parámetro „bootwait‟ indica que el comando debe esperar a que el sistema este iniciado
para poder ser ejecutado.
l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
#l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
ls:S:wait:/etc/init.d/rc S
~~:S:respawn:/sbin/sulogin
El modo mono usuario (S), es un caso especial, debido a que este trabaja aun si el
archivo /etc/inittab no se encuentre. El comando „sulogin‟ se ejecuta y este permite
solamente acceso al administrador. El parámetro „respawn‟ indica a init que espere el fin
del proceso y entonces reiniciarlo.
ca:ctrlaltdel:/sbin/shutdown –r –t 4 now
La acción „ctrlaltdel‟ es ejecutada por el proceso init solo si estas teclas se presionan. Si
no se requiere habilitar esta acción, se puede comentar o eliminar la línea.
Un largo bloque de entradas describen en que runlevels los procesos getty son iniciados:
El proceso getty provee el prompt para autenticación y espera el nombre de usuario como
respuesta. Estos se inician en los runlevels 2,3 y 5, el 4 es ignorado porque la línea que
define este runlevel se encuentra como comentario.
Si ocurre un error, se debe tratar de ingresar en el modo mono usuario (S), si esto
no funciona, aun es posible acceder al sistema digitando init=/bin/bash en la línea
de opciones para el kernel, estando ahí se puede reparar el sistema de arranque
manualmente.
El archivo /etc/inittab define cual runlevel debe ejecutarse cuando el sistema termine de
cargarse. Los servicios que necesiten ser iniciados en algún runlevel no son definidos en
/etc/inittab. Estos tienen enlaces simbólicos en los directorios /etc/init.d/rcx.d/ y /etc/init.d/.
Script de init
El directorio /etc/init.d/ contiene los Shell script que son utilizados para ejecutar ciertas
tareas tales como iniciar y detener servicios en el sistema en ejecución. La siguiente
imagen muestra la salida del comando ls –al /etc/init.d/65:
Si tenemos links a estos scripts en las carpetas /sbin/ o /usr/sbin/ podemos llamarlos
usando la sintaxis: rcscript parámetro.
65
Recordemos que nuestra distribución para estudio es SUSE Linux.
Parámetro Descripción
start Inicia un servicio que no está en ejecución.
restart Detiene un servicio que está en ejecución y lo inicia nuevamente.
stop Detiene un servicio que está en ejecución.
reload Carga nuevamente los archivos de configuración de un servicio sin
detenerlo.
force-reload Carga nuevamente los archivos de configuración de un servicio sin
detenerlo, si esta operación no es posible, el servicio es reiniciado.
status Despliega el estado actual del servicio.
Script Descripción
boot Este script es ejecutado directamente por init cuando el sistema se inicia.
Se ejecuta una sola vez. Este script evalúa la carpeta /etc/init.d/boot.d/ e
inicia todos los scripts que tengan en su nombre la letra „S‟ como inicio del
mismo.
boot.local Este script incluye comandos adicionales a ejecutar antes de cambiar al
nivel de ejecución estándar.
halt Este script se ejecuta si se cambia a los runlevels 0 ó 6. Este es llamado
por el comando halt que apaga completamente el sistema, o por el
comando reboot que apaga y luego enciende el sistema.
rc Este comando es el responsable por el correcto cambio de un nivel a otro.
Primero detiene el nivel de ejecución en la que el sistema se encuentre,
una vez finalizada, ejecuta los scripts definidos en el nuevo nivel de
ejecución.
servicio Cada servicio, (como cron, apache2, cups, etc.), tiene un script que
permite iniciar, detener, recargar, reiniciar y visualizar el estado del
servicio. Podemos crear nuestros propios scripts usando el archivo
/etc/init.d/skeleton como plantilla para los mismos.
66
RSL
Para acceder a cierto nivel de ejecución, init llama al script /etc/init.d/rc con el nivel de
ejecución como parámetro. Este script examina el directorio del nivel de ejecución
respectivo /etc/init.d/rcx.d/ e inicia o detiene los servicios en dependencia de los enlaces
en este directorio.
66
Runlevel Symbolic Links
da51:~ # ls /etc/init.d/rc3.d/
K10cron K17network S07auditd
K10smbfs K20haldaemon S07portmap
K11nscd K21acpid S07splash_early
K11postfix K21dbus S08nfs
K12alsasound K21fbset S08nfsboot
K12boot.apparmor K21irq_balancer S10alsasound
K12cups K21random S10boot.apparmor
K12microcode K21resmgr S10cups
K12powersaved S01acpid S10kbd
K12splash S01dbus S10microcode
K12sshd S01fbset S10powersaved
K14nfs S01irq_balancer S10splash
K14nfsboot S01random S10sshd
K15auditd S01resmgr S11nscd
K15portmap S02haldaemon S11postfix
K15splash_early S05network S12cron
K16novell-zmd S06novell-zmd S12smbfs
K16slpd S06slpd
K16syslog S06syslog
da51:~ #
La primera letra del nombre siempre es seguida por dos digitos y el nombre de un
servicio. Cuando un servicio es iniciado en un runlevel específico depende si existen los
archivos Sxxservice y Kxxservice en el directorio especifico del runlevel.
Con el comando ls –l en el subdirectorio del runlevel, nos mostrara cuales archivos son
enlaces simbólicos apuntando a scripts de servicios en /etc/init.d/:
da51:~ # ls –l /etc/init.d/rc3.d/
total 0
lrwxrwxrwx 1 root root 7 May 15 10:32 K10cron -> ../cron
lrwxrwxrwx 1 root root 8 May 15 10:48 K10smbfs -> ../smbfs
lrwxrwxrwx 1 root root 7 May 15 10:32 K11nscd -> ../nscd
lrwxrwxrwx 1 root root 10 May 15 10:32 K11postfix -> ../postfix
lrwxrwxrwx 1 root root 12 May 15 10:26 K12alsasound -> ../alsasound
...
lrwxrwxrwx 1 root root 7 May 15 10:31 S10sshd -> ../sshd
lrwxrwxrwx 1 root root 7 May 15 10:32 S11nscd -> ../nscd
lrwxrwxrwx 1 root root 10 May 15 10:32 S11postfix -> ../postfix
lrwxrwxrwx 1 root root 7 May 15 10:32 S12cron -> ../cron
lrwxrwxrwx 1 root root 8 May 15 10:48 S12smbfs -> ../smbfs
da51:~ #
Estos script (Sxx y Kxx) son enlaces a un mismo script, por ejemplo:
da51:~ # ls –l /etc/init.d/rc3.d/*network
lrwxrwxrwx 1 root root 10 May 15 10:23 /etc/init.d/rc3.d/K17network -> ../network
lrwxrwxrwx 1 root root 10 May 15 10:23 /etc/init.d/rc3.d/S05network -> ../network
da51:~ #
NOTA: algunas referencias nos indican que los enlaces Kxx se refiere a kill script,
mientras que los enlaces Sxx se refieren a start scripts. De hecho no existen scripts
separados para iniciar o detener servicios.
Como seres humanos sabemos que un servicio es iniciado con el parámetro „start‟ y
detenido con el parámetro „stop‟. Los mismos parámetros son usados cuando cambiamos
de un runlevel a otro.
Cuando cambiamos de runlevel, init llama al script rc con el runlevel como parámetro, más
o menos así: /etc/init.d/rc 3. Este script examina los directorios /etc/init.d/rcactual.d y
/etc/init.d/rcnuevo.d para determinar qué hacer.
Por ejemplo cuando cambiamos del nivel de ejecución 5 al nivel de ejecución 3, init tiene
tres opciones con los scripts:
El número después de la primera letra, determina la secuencia en que los script son
invocados. Por ejemplo el script K10cron es invocado antes del script K20haldaemon
que significa que cron es detenido antes de halddaemon.
Script S05network es invocado antes de S11postfix, que significa que los servicios de
red se inician antes de postfix. Esto es importante si postfix depende de algún servicio de
red para su ejecución.
Cuando se cambia al mismo runlevel (del runlevel 3 al runlevel 3), el programa init solo
verifica si el archivo /etc/inittab tiene cambios e inicia los pasos apropiados (tal como
iniciar getty en otra interface).
Aunque se puede crear enlaces simbólicos en los subdirectorios del nivel de ejecución
para modificar los servicios, una manera más sencilla de realizar esto es editar la
cabecera de un script y luego invocar a insserv.
El bloque „INIT INFO‟ al inicio de un script de un servicio, describe en cual runlevel debe
iniciarse/detenerse el servicio y que servicios deben estar en ejecución como un requisito
para el mismo.
Este bloque (INIT INFO) es usado por el programa insserv para determinar en cual
subdirectorio de runlevels deben ser colocados los enlaces y el valor a asociar después
de la primera letra del nombre del servicio (la secuencia de inicio).
Después de editar el bloque INIT INFO, ejecutar el comando: insserv –d service para
crear los enlaces necesarios y reenumerar el existente en caso de ser necesario.
Para eliminar todos los enlaces de un servicio (deshabilitar el servicio), se debe primero
detener el servicio si este está en ejecución (/etc/init.d/servicio stop), luego ejecutar:
insserv –r servicio.
Con el bloque INIT INFO, es posible el uso de ciertas variables. Estas son explicadas y
definidas en el archivo /etc/insserv.conf.
Una herramienta con funcionalidades similares es chkconfig. Esta puede ser usada para
habilitar y deshabilitar servicios y también para listar cuales servicios están habilitados en
los diferentes runlevels. A continuación una breve muestra de la salida del comando
chkconfig:
Esta labor también puede ejecutarse desde el entorno grafico de YaST, en lo personal, yo
recomiendo que se use un solo método para realizar esta labor (insserv o chkconfig o
YaST), no tener un solo método puede generar errores.
- Cambiar el nivel de ejecución.
Al momento de instalar un sistema, se puede elegir en cual runlevel se desea este inicie.
Una vez instalado y en ejecución se puede modificar esto.
Cambiar el runlevel al momento del inicio
Cualquier parámetro que no es evaluado por el kernel es pasado a init como parámetro
por el kernel. El runlevel deseado es simplemente añadido a las opciones del boot
especificado e GRUB, como en el siguiente ejemplo:
runlevel 1
Por esta razón el sistema debe ser apagado de manera correcta SIEMPRE. Se puede
apagar el sistema ejecutando init 0; reiniciarlo ejecutando init 6. Los comandos halt y
poweroff son equivalentes a init 0; el comando reboot es equivalente a init 6.
El comando shutdown puede ejecutarse con un mensaje de advertencia, tal como sigue:
Si el proceso de apagado que fue planeado para un tiempo posterior no debe ser
ejecutado, se puede revocar ejecutando shutdown –c.
Instalar aplicaciones con el formato RPM se puede efectuar tanto con el comando rpm
como con YaST. YaST controla la solución automática de dependencias, mientras que
rpm controla que no existan, la solución debe efectuarse manualmente.
- Componentes y características de RPM
Para evitar esto, las modificaciones deben ser en el archivo /etc/rpmrc (para la
configuración del sistema) o en el archivo ~/.rpmrc (para la configuración del usuario).
Base de datos RPM
Si la base de datos es más grande de lo esperado, puede ser útil reconstruirla ejecutando:
rpm --rebuilddb. Antes de realizar esta acción debemos tener un respaldo de la base de
datos anterior.
Se puede usar el comando rpm para administrar paquetes. Esto incluye consultas a la
base de datos RPM para detalles sobre la instalación de paquetes.
Se puede usar el comando rpmbuild para construir un paquete RPM instalable. Este
comando no está cubierto por este manual.
Todos los paquetes RPM (en nuestro caso de estudio) están firmados por la siguiente
llave GnuPG:
Para verificar que nuestros paquetes están firmados por SuSE podemos usar el comando:
rpm --checksig paquete (ejemplo: rpm --checksig apache2-2.2.0-10.i386.rpm). Aunque
no solamente SuSE publica paquetes para su distribución Linux.
Se pueden instalar muchos paquetes usando el comando rpm con la opción „-i‟:
rpm –i nombre_paquete.rpm
Cuando se instala un paquete RPM, los programas ejecutables, los archivos de:
documentación, configuración y scripts, son copiados a los directorios apropiados en el
sistema de archivos.
Durante la instalación, la base de datos RPM se asegura de que no existan conflictos. Los
paquetes son instalados solamente si todas las dependencias están cubiertas y no existan
conflictos con los paquetes instalados.
Se pueden usar opciones para que RPM ignore estas advertencias, así que tenemos la
opción „--nodeps‟ que ignora las dependencias de los paquetes o „--force' que sobre
escribe los archivos si fuera necesario, pero estas opciones son para los administradores
expertos que conocen las consecuencias de realizar este tipo de acciones.
Con la opción „-v‟ una cantidad mayor de información sobre la instalación será
desplegada, y la opción „-h‟ producirá una barra de estado de la instalación.
Actualizar paquetes
rpm –F paquete.rpm
Este comando remueve los archivos de la versión anterior e inmediatamente instala los
nuevos archivos. En todo caso si no existe el paquete (si no hay nada que actualizar), la
actualización no es ejecutada.
Si existe una versión anterior instalada, la opción –U hace lo mismo que –F, en caso que
no exista una versión que actualizar la opción –U instala la nueva versión.
Desinstalar paquetes
Rpm –e paquete
Se puede forzar la eliminación con la opción „--nodeps', pero esto provocara que los
paquetes que dependan del paquete eliminado no funcionen mas.
Consultas a la base de datos y archivos RPM
Con la opción „-q‟, se puede consultar la base de datos RPM y además la opción „-p‟,
inspecciona los archivos RPM que no han sido instalados.
Opción Resultado
-a Lista todos los paquetes instalados
-i Lista la información de un paquete
-l Despliega una lista
-d Lista archivos de documentación solamente
-c Lista archivos de configuración solamente
--provides Lista las características de los paquetes que otros paquetes pueden
requerir con --requires
--requires, -R Lista los requerimientos que un paquete pueda tener.
--scripts Lista los scripts de instalación
--changelog Despliega información detallada sobre un paquete especifico.
Authors:
--------
Hrvoje Niksic <hniksic@srce.hr>
Distribution: openSUSE 10.3 (i586)
da51:~ #
Este ejemplo retorna información de los paquetes rpm y wget. Con la ayuda de la base de
datos, se puede ejecutar la verificación de paquetes, esto se realiza con la opción „-V‟, o „-
-verify‟. Si cualquier archivo en el paquete ha sido modificado después de la instalación se
desplegara esta información. RPM usa los siguientes caracteres para proveer información
sobre los cambios:
Carácter Descripción
5 Check sum MD5
S Tamaño
L Enlace simbólico
T Fecha de modificación
D Numero del dispositivo
U Propietario
G Grupo
M Modo
Para garantizar que un sistema opere con seguridad, se debe actualizar los paquetes
frecuentemente.
Se puede actualizar un paquete completo, o puede usar un parche RPM. El parche RPM
tiene la ventaja de ser pequeño, reduciendo el tiempo de descarga.
La salida indica que el parche está disponible para dos versiones diferentes de procmail.
La versión en el ejemplo esta en lista también, por tanto el parche puede ser instalado.
Los archivos afectados por el parche pueden ser visualizarse fácilmente con la opción „-P‟:
Los parches RPM pueden ser instalados tal como se instalan los paquetes RPM. La única
diferencia es que el paquete ya debe de estar instalado antes de instalar el parche.
¿Cuál parche tiene instalado el sistema y para que versión del paquete?
Se puede desplegar una lista de todos los parches instalados en el sistema con el
comando rpm –qPa:
Si después de instalar un parche se requiere saber cual versión era la original, se debe
realizar una consulta a la base de datos RPM:
Este ejemplo instala el paquete ethereal y cualquier paquete adicional que sea necesario
que ethereal necesite para su ejecución. La ventaja de usar este comando es que las
dependencias son corregidas automáticamente.
A continuación las tres opciones que están definidas para esto con YaST.
Opción Descripción
-i, --install Instala un paquete
--update Actualiza un paquete
--remove Elimina (desinstala) un paquete
Tener un gran esquema de seguridad no garantiza que los datos no se pierdan, de hecho
siempre existe la posibilidad que este evento ocurra por algunos de los siguientes
sucesos:
Para superar estos problemas, se pueden emplear otros métodos aparte del respaldo
completo:
Respaldo Incremental
Con este método, normalmente se programa un respaldo completo una vez a la semana,
y se respalda diariamente solo los archivos que han sido modificados desde la última vez
que se realizo un respaldo. Por ejemplo: si se realiza un respaldo completo en domingo, el
lunes se respaldaran los archivos que sufrieron cambios desde el domingo, el martes se
respaldaran los archivos que sufrieron cambios desde el lunes, y sucesivamente. Como
cualquier método, este tiene ventajas y desventajas:
Ventaja: debido a que solo se respaldan los archivos que sufren modificaciones desde
el ultimo respaldo, la ventana de respaldos puede ser extremadamente pequeña en
comparación con la ventana de respaldo que se requiere para un respaldo completo.
Desventaja: el tiempo de recuperación es mayor. Por ejemplo, se realiza un respaldo
completo en domingo, y respaldos incrementales en lunes, martes y miércoles, el
jueves el sistema colapsa y todos los datos se pierden.
Para restaurar los datos, se necesitan todos los respaldos incrementales y el respaldo
completo del domingo, estos deben de restaurarse en el orden adecuado.
Respaldo Diferencial
Con este método, normalmente se programa un respaldo completo una vez a la semana,
y se respalda diariamente solo los archivos que han sido modificados desde la última vez
que se realizo un respaldo completo. Por ejemplo: si se realiza un respaldo completo en
domingo, el lunes se respaldaran los archivos que sufrieron cambios desde el domingo, el
martes se respaldaran los archivos que sufrieron cambios desde el domingo, y
sucesivamente. Como cualquier método, este tiene ventajas y desventajas:
A continuación una imagen para comprender las diferencias entre ambos métodos:
67
Respaldo Completo
68
Respaldo Incremental
69
Respaldo Diferencial
Las cintas de respaldo son las más usadas ya que estas ofrecen en mejor
costo/desempeño/capacidad. Normalmente son instalados como dispositivos SCSI,
facilitando el acceso a los medios al tener una estructura básica estándar en el sistema de
archivos, estos medios pueden ser DAT, EXABYTE o DLT. Aparte de eso, las cintas de
respaldo son reusables.
Otros medios para realizar respaldos, pueden ser los CD o DVD, discos externos y
dispositivos MO70. Otra opción es la SAN71. Con una SAN, se puede configurar el
almacenamiento de red de manera exclusiva para respaldos de los diferentes
computadores en un servidor central de respaldos. Pero aparte de una SAN, se debe usar
un medio de respaldo en cintas.
También se puede realizar un respaldo manual, para evitar crear un perfil de respaldo.
70
Magnetic-Optical
71
Storage Area Network
Si el archivo se almacena en un
NFS, se debe especificar el servidor remoto
y el directorio.
o Directorios
o Sistemas de Archivos
o Expresiones Regulares
Ejecutar el comando yast restore. Se abrirá una ventana que solicitará la ubicación
del archivo de respaldo.
Una vez definido el archivo, aparecerá un dialogo con las propiedades del archivo.
o Se puede visualizar el contenido del archivo seleccionando „Contenido del
Archivo‟
Seleccionando „Siguiente‟ aparecerá un dialogo que nos permitirá seleccionar los
archivos que requerimos respaldar.
El comando tar primero espera una opción, luego el nombre del archivo a almacenar en el
sistema o en la cinta magnética, por ultimo espera el nombre del directorio a respaldar.
Todos los directorios y archivos dentro de este directorio serán respaldados. La sintaxis
del comando será similar a la siguiente:
72
Tape ARchiver
En el ejemplo anterior, el comando tar respalda el contenido completo del directorio /etc
en el archivo /backup/etc.tar
Cuando un archivo es creado, las rutas absolutas son cambiadas por rutas relativas. Esto
significa que el primer / es removido. Se puede ver esto con el siguiente comando:
/home/user1/.bashrc
/home/user2/Text*
El comando tar puede usar un snapshot que contenga información sobre el ultimo proceso
de respaldo. Este archivo necesita ser especificado con la opción –g.
Primero, se necesita realizar un respaldo completo con el comando tar con la siguiente
sintaxis:
En este ejemplo, el comando „tar‟ usa el snapshot para determinar cuáles archivos o
directorios fueron modificados desde el último respaldo realizado. Solo los archivos
modificados (o creados) son incluidos en el nuevo respaldo /backup/bk_lunes.tar.gz
Usar el comando ‘find’ para buscar archivos a respaldar
Se puede usar el comando „find‟ para buscar archivos que necesitan se respaldados con
la estrategia: respaldo diferencial.
Ahora se usa el siguiente comando para respaldar los archivos modificados más
recientemente que el último respaldo completo realizado:
En este ejemplo, todos los archivos (-type f) en el directorio /home que son mas nuevos
que el archivo /backup/bk_completo.tar.gz serán respaldados.
Las opciones -print0 y --null asegura que los archivos con espacios en sus nombres sean
también respaldados. La opción -T determina que los archivos entubados por stdin serán
incluidos en el respaldo.
Un problema con la línea de comando anterior es el tiempo de ejecución (puede ser muy
lento de ejecutarse cuando se respaldan grandes cantidades de datos). Si un archivo es
creado después que el comando se inicie pero antes de completarse, este archivo es más
viejo que el archivo de respaldo referenciado y al mismo tiempo no se incluirá en el
respaldo.
Las siguientes son las opciones más usadas por el comando „tar‟:
Opción Descripción
-c Crear un archivo tar
-C Cambiar al directorio especificado
-d Compara archivos en el respaldo con su contraparte en el sistema
-f Usa un archivo especifico o dispositivo
-j Comprimir o descomprimir directamente el archivo tar, usando bzip2, un
programa moderno y eficiente de compresión de datos.
-r Agrega archivos al respaldo
-u Solo incluye archivos en el respaldo que son mas nuevos que la versión del
respaldo (actualizar)
-v Despliega los archivos que son procesados
-x Extrae archivos del respaldo
-X Excluye archivos listados en un archivo
-z Comprimir o descomprimir directamente el archivo tar, usando gzip.
Por razones de compatibilidad con otras versiones UNIX, se incluyen dos enlaces
simbolicos: /dev/rmt0 y /dev/nrmt0. Se puede consultar el estado de la cinta ejecutando el
siguiente comando:
mt -f /dev/st0 status
En este ejemplo, la opción -f es usada para indicar el nombre del dispositivo para cintas.
La salida de este comando luce similar a lo siguiente:
Para posicionar la cinta al inicio del siguiente archivo se usa el siguiente comando:
mt -f /dev/nst0 fsf 1
En este ejemplo, la opción fsf mueve la cinta la cantidad de archivos determinado por el
valor numérico siguiente. Si ahora se corre el comando para ver el estado, se desplegara
la siguiente información:
Ahora el número del archivo esta en 1, y al final de la salida del comando aparecen las
siglas EOF73 en vez de BOT74. Con la opción bsf, la cinta puede ser re posicionada hacia
el inicio una cantidad de archivos. Esto se usa en general, cuando posicionamos la cinta
en dispositivos no rebobinables. Si se requiere que la cinta este colocada al inicio
después del proceso de leer o escribir, se ejecuta el siguiente comando:
mt -f /dev/nst0 rewind
mt -f /dev/nst0 offline
mt -f /dev/nst0 datcompression
Esto muestra si la compresión está habilitada o no. Si se coloca el parámetro „on‟ (o „off‟)
se habilitará la compresión (o deshabilitara).
73
End Of File
74
Beginning Of Tape
Se puede copiar todo tipo de datos con este comando, incluyendo particiones de disco
completos. Para copiar un archivo la sintaxis del comando es:
El uso de la opción if= especifica el archivo a ser copiado, y la opción of= se usa para
especificar el nombre de la copia.
En este ejemplo el MBR del disco /dev/sda es copiado al archivo /tmp/mbr_copy usando
un bloque de datos de 512.
Cuando se copia datos, rsync compara el directorio origen y destino y transfiere solo los
datos que fue modificada o creada.
75
Master Boot Record
76
Remote Synchronization
Este comando es ideal para crear un espejo del contenido de un directorio o restaurar el
respaldo desde la red.
- Ejecutar una copia local con rsync
Las siguientes son las opciones más usadas por el comando „rsync‟:
Opción Descripción
-l Enlaces simbólicos
-p Privilegios de acceso
-o Propietarios
-g Miembros de grupo
-t Time Stamp
-r Copia directorios recursivamente
-x Guarda archivos de un solo sistema de archivos. Esto significa que no se
siguen los enlaces simbólicos hacia otros sistemas de archivo.
-v Muestra información sobre el progreso de la copia.
-z Comprime los datos durante el proceso de transferencia. Esto es útil para
sincronizaciones remotas.
--delete Elimina archivos que ya no existen en el directorio original.
--exclude-from No respalda los archivos especificados en el archivo de exclusión.
En este ejemplo, la opción -e especifica al Shell remoto (ssh) que será usado para la
transmisión de datos. El directorio origen se especifica con la expresión
root@da50:/home/tux. Esto significa que rsync ingresara a da50 como root y transferirá
el directorio /home/tux.
da51:~ # crontab -l
0 22 * * 5 /root/bin/backup
da51:~ #
En este ejemplo, el script (debe ser creado) /root/bin/backup se ejecuta cada Viernes a las
10 P.M.
Con SSH, el flujo de datos aun puede ser revisado e inclusive almacenado en un tercer
host, pero el contenido de los datos al estar encriptados y debido a que no se puede
desencriptar, estos son prácticamente ilegibles para dicho host.
Nuestra distribución de Linux, instala los paquetes OpenSSH como parte de su estándar,
el paquete incluye ssh, scp y sftp como alternativas a Telnet, rlogin, rsh, rcp y FTP.
- Fundamentos de criptografía
Con este método o procedimiento, la misma llave se usa para encriptar y desencriptar los
datos. Si esta llave se conoce, los datos encriptados pueden ser desencriptados.
Las siguientes son algunos de los más importantes tecnologías de encriptación simétrica:
77
Data Encryption Standar
78
Electronic Frontier Foundation
La ventaja del cifrado simétrico es que provee cifrado y descifrado de datos de manera
eficiente. La desventaja son las dificultades asociadas con la distribución y administración
de las llaves.
Encriptación asimétrica
En un cifrado asimétrico existen dos llaves, una pública y otra privada. Los datos que son
cifrados con la llave privada solo pueden ser descifrados con la llave pública, y los datos
cifrados con la llave pública solo pueden ser descifrados con la llave privada. La principal
ventaja de este método, es que la llave pública puede ser distribuida libremente. Una
desventaja es su bajo rendimiento en el procesamiento de los datos.
Aun así, se pueden combinar ambos métodos. Por ejemplo, una llave para cifrado
simétrico se transmite usando canales cifrados asimétricamente. SSH usa una
combinación de ambos procedimientos.
Las llaves para este método son mucho más largas que las usadas por los
procedimientos simétricos. Por ejemplo, la longitud mínima para que RSA sea
considerado un método seguro es de 1024 bits.
- Arquitectura y propiedades de SSH
El Shell seguro no solo provee todas las funcionalidades de telnet, rlogin, rsh y rcp, sino
que también incluye algunas propiedades de FTP.
SSH soporta X11 y todas las conexiones TCP, proveyendo un canal criptográficamente
seguro. A continuación se listan las funcionalidades básicas provistas por SSH:
79
National Institute of Standar and Technology
80
Digital Signature Algorithm
SSH no solo cifra el tráfico y autentica al cliente, también autentica a los servidores. Son
varios los procedimientos disponibles para autenticación de un servidor.
Versiones del protocolo SSH
Los protocolos SSH1 y SSH2 están actualmente disponibles para el paquete SSH.
La siguiente ilustración trata de explicar el proceso que SSH1 usa para transmitir datos
sobre una conexión segura:
SSH2 provee mecanismos para evitar este tipo de ataques. Este mecanismo es llamado
HMAC81 y se describe con detalles en el RFC 2104.
La siguiente ilustración trata de explicar el proceso que SSH2 usa para transmitir datos
sobre una conexión segura:
La diferencia básica entre SSH1 y SSH2 son los mecanismos que tiene el protocolo para
garantizar la integridad de la conexión. HMAC es usado para este propósito. La llave de
sesión es diferente (Diffie-Hellman).
Para verificar que versión de SSH existe disponible en el servidor, se debe iniciar una
sesión telnet en el puerto 22, una de las siguientes líneas será la respuesta:
81
keyed-Hash Message Authentication Code
da51:~ #
da51:~ #
da51:~ #
En el primer ejemplo (la versión 1.5) solo responde con SSH1, en el segundo ejemplo,
responden SSH1 y SSH2, y en el tercer ejemplo solamente SSH2.
Configuración del mecanismo de autenticación de SSH.
El servidor SSH puede descifrar la llave de sesión generada y cifrada por el cliente
solamente si tiene la llave privada. Si el servidor no logra descifrar la llave de sesión, la
comunicación finaliza. Una condición absoluta para la seguridad de este procedimiento es
que el cliente puede verificar si la llave pública del servidor pertenece realmente a ese
servidor.
Actualmente SSH no usa ningún servicio de directorio (como LDAP) o ningún certificado
(como SSL) para la administración de la llave pública. Esto significa que el par de llaves
aleatorias puede ser creada fácilmente en otros equipos, por eventuales atacantes, e
incluirse en el dialogo de autenticación.
Cuando se contacta por primera vez con un servidor desconocido, es posible „aprender‟
su llave de host. En este caso, el cliente SSH escribe esta llave en la base de datos de
llaves local. A continuación un ejemplo:
Si se responde „SI‟ (yes) a la pregunta: ¿Está seguro de continuar con la conexión? (Are
you sure you want to continue connecting (yes/no)?), entonces la llave publica es
almacenada, de lo contrario la comunicación es abortada en ese instante.
Muchos mecanismos están disponibles en el lado del servidor para autenticar a los
clientes. Los mecanismos disponibles por el servidor son especificados en el archivo de
configuración /etc/ssh/sshd_config.
A continuación se describen los dos más importantes con los parámetros de configuración
apropiados en paréntesis.
Opción Descripción
AllowUsers Habilita el acceso SSH solo para los usuarios listados, estos
deben estar separados por espacio.
DenyUsers Deshabilita el acceso SSH solo para los usuarios listados,
estos deben estar separados por espacio.
Protocol Especifica la versión del protocolo.
ListenAddress Especifica la dirección local en la que el demonio sshd
esperará conexiones, Direccion_IP:Puerto
Port Especifica el número del puerto en la que el demonio sshd
escucha conexiones. El estándar es 22. Se pueden declarar
múltiples opciones.
PasswordAuthentication Especifica si se usara un método de autenticación. Si se
requiere deshabilitar, configurar esta opción y UsePAM en
„no‟.
UsePAM Habilita la interface PAM
Si un usuario quiere asegurarse que solo servidores conocidos sean aceptados, este
debe configurar la opción StricthostKeyChecking en „yes‟. Esto evita que el cliente SSH
agregue nuevas llaves de servidores desconocidos al archivo ~/.ssh/known_hosts.
Cualquier nueva llave debe ser agregada manualmente usando un editor. Las conexiones
a servidores en los que se modifique la llave serán rechazadas.
Para las versiones posteriores a 1.2.20, se pueden definir tres valores a esta opción: „yes‟,
„no‟ y „ask‟. El estándar es „ask‟, que significa que antes de agregar nuevas llaves, el
usuario debe decidir que acción debe tomar.
La siguiente tabla muestra las opciones más comunes usadas en los clientes SSH:
Comando Descripción
ssh Este es el cliente SSH, este viene a reemplazar las herramientas: rlogin,
rsh y telnet. Existe un enlace simbólico a ssh y es slogin.
Cada usuario puede usar ssh en lugar de telnet.
scp Este comando copia archivos de manera segura entre dos computadoras
usando ssh, este comando reemplaza a rcp y ftp.
sftp Este comando ofrece una interfaz similar a la línea de comandos del
cliente ftp. Se puede visualizar archivos en la maquina remota usando ls
y transferir archivos usando put y get.
ssh-keyscan Es una utilidad para leer las llaves públicas desde varios servidores SSH.
Las llaves son visualizadas en la salida estándar.
ssh-keygen Este comando genera llaves RSA
ssh-agent Este comando puede tomar llaves RSA privadas. Esto simplifica la
autenticación.
ssh-add Este comando registra nuevas llaves con el comando ssh-agent.
SSH puede ser usado para proteger tráfico sin cifrado, por ejemplo POP3, realizando un
túnel SSH. Los siguientes ejemplos ilustra esto:
En este ejemplo, el usuario geeko@da51 reenvía las conexiones entrantes por el puerto
4242 local al puerto 110 (POP3) del host remoto da20.digitalairlines.com vía túnel SSH.
En este ejemplo, el usuario geeko@da51 reenvía las conexiones entrantes por el puerto
4242 local al puerto 110 (POP3) del host remoto da30.digitalairlines.com vía túnel SSH.
Este host entonces reenvía los paquetes al puerto 110 (POP3) del host
da20.digitalairlines.com usando una conexión sin cifrado.
- Administración de la autenticación de llave publica
Para usar la autenticación con llave pública, la llave pública de un usuario debe estar
almacenada en el servidor, en el directorio home del usuario que quiere acceder. Estas
llaves públicas son almacenadas en el archivo ~/.ssh/authorized_keys. La llave privada
correspondiente debe ser almacenada en la computadora cliente.
Con las llaves almacenadas en los lugares apropiados, ocurre lo siguiente en el proceso
de autenticación:
1. El cliente informa al servidor que llave pública está usando para la autenticación.
2. El servidor verifica si la llave pública es conocida.
3. El servidor cifra un número aleatorio usando la llave pública y transfiere esta al cliente.
4. Solo el cliente es capaz de descifrar el número aleatorio con su llave privada.
5. El cliente envía al servidor un checksum MD5 que es calculada usando la llave de
sesión.
6. El servidor ahora calcula su propio checksum y si ambos son idénticos, el usuario es
autenticado con éxito.
7. Si la autenticación mediante llave pública falla, y se tiene habilitado la autenticación
por contraseña, entonces se le solicita al usuario la contraseña de su usuario.
Crear una pareja de llaves.
Se pueden crear la pareja de llaves con el comando ssh-keygen. Una llave diferente es
requerida por SSH1 y SSH2. Por esta razón se debe crear llaves separadas para cada
versión.
Para la autenticación usando llaves RSA o DSA, se necesita copiar la llave publica al
servidor, entonces se añade la llave publica al archivo ~/.ssh/authorized_keys.
Ahora la llave debe ser agregada al archivo ~/.ssh/authorizes_keys sin reescribir las llaves
ya registradas:
Se puede en este momento ejecutar el cliente para verificar si la autenticación con DSA
está trabajando apropiadamente:
Para posteriores conexiones que use el procedimiento de llave pública solicitara la frase
segura.
De hecho, este modulo activa el acceso remoto a todo el entorno grafico, no solo a la
administración remota.
Una conexión de administración remota es menos segura que SSH, que cifra todos los
datos transmitidos. Por esta razón, se recomienda usar este tipo de conexiones
solamente
- Administración remota con YaST usando VNC
Los sistemas operativos de ambos equipos no necesariamente deben ser los mismos,
esto incluye: Microsoft Windows, Apple MacOS, y Linux.
82
Virtual Network Computing
Si se encuentra en una consola grafica, se deben cerrar todas las aplicaciones y desde la
consola alterna (Ctrl + Alt + F2) ejecutar el comando: rcxdm restart.
- Acceder al servidor para administrarlo remotamente
Para acceder al servidor se debe usar un cliente VNC o un navegador con JAVA
habilitado.
Como se explico anteriormente, con el navegador se coloca el nombre del equipo mas el
puerto 5801:
http://hostname:5801
83
Common UNIX Printing System
84
Internet Printing Protocol
Los siguientes paquetes son necesarios instalar para instalar un servidor de impresión.
Paquete Contenido
cups Es el que provee al demonio cups
cups-client Provee las herramientas de impresión en línea de comandos.
cups-libs Debe ser instalado siempre, debido a que muchas aplicaciones
se enlazan a través de las librerías.
cups-drivers Provee los archivos para las colas de impresión en PPD.
cups-drivers-stp
cups-suse-ppds-dat Provee un archivo pregenerado /etc/cups/ppds.dat
Estos archivos son instalados automáticamente si se usa YaST para configurar el servidor
de impresión. YaST también crea los enlaces simbólicos en los directorios de niveles de
ejecución para asegurar que el demonio CUPS sea iniciado automáticamente cuando el
sistema arranca.
El dialogo que aparece cuando necesitamos configurar una impresora con YaST, es la
mismo que aparece durante la instalación (ver figura anterior).
Para agregar una impresora que no se encuentre listada, por ejemplo, una impresora en
red, se debe presionar el botón „Agregar‟.
Esta opción aparecerá solamente si se tiene una impresora configurada. Agregar una cola
a una impresora existente es útil si se usa, por ejemplo, una calidad de impresión
diferente por cola de impresión.
El primer dialogo sirve para seleccionar la impresora a la que se le agregara una nueva
cola, en el segundo dialogo se pueden realizar los cambios necesarios por cada ítem
listado. Para probar la configuración se debe seleccionar „Probar‟. Una vez ajustadas
todas las propiedades se selecciona „Ok‟ para aceptar los cambios y retornar al dialogo de
configuración de impresoras.
Una vez definidas todas estas configuraciones, el dialogo que aparecerá es el mismo en
que se definen las propiedades de la impresora, una vez aceptados estos ajustes de
configuración la impresora se mostrará en la lista de impresoras disponibles.
Impresora de red.
CUPS soporta los protocolos IPP, LPD85, SMB86 y socket. A continuación la descripción
de estos protocolos:
Protocolo Descripción
IPP IPP es relativamente un protocolo nuevo (1999), basado en HTTP.
Comparado con otros protocolos, este transmite mucho más datos.
CUPS usa IPP para transmisión interna de datos. Este es el protocolo
estándar para el reenvío de colas entre servidores CUPS.
El número para el puerto de IPP es 631.
Ejemplo con un dispositivo URI87: ipp://cupsserver/printers/printqueue
El dispositivo URI puede ser usado para especificar una impresora.
LPD El protocolo LPD es descrito en el RFC 1179.
Algunos datos relacionados a trabajos de impresión, son enviados a la cola
de impresión después de la data actual. Esto significa que una cola de
impresión puede ser especificada cuando configura el protocolo LPD para la
transmisión de datos.
Las implementaciones de muchos fabricantes de impresoras son flexibles
cuando se especifica un nombre a la cola de impresión. Si es necesario se
debe leer el manual de la impresora para saber cómo estructurar el nombre
de la cola de impresión (ejemplos: LPT, LPT1 o LP1).
El número para el puerto de LPD es 515.
Ejemplo con un dispositivo URI: lpd://host_printer/LPT1
SMB CUPS también soporta impresión o impresoras conectadas y compartidas
en sistemas Windows. El protocolo usado para este propósito es SMB.
SMB usa los números de puertos: 137, 138 y 139.
Ejemplo con un dispositivo URI:
smb://usuario:contraseña@grupo_trabajo/servidor/impresora
smb://usuario:contraseña@host/impresora
smb://servidor/impresora
socket Este protocolo es usado para conectar una impresora con puerto de red,
como la tecnología HP JetDirect. Los puertos usados por este protocolo
comúnmente son: 9100 o 35.
Ejemplo con un dispositivo URI:
socket://servidor_impresion:9100/
85
Line Printer Daemon
86
Standard Message Block
87
Universal Resource Identifier
Impresora
CLIENTE SERVIDOR
lpr archivo.ps cupsd
CLIENTE SERVIDOR
Impresora Impresora
cupsd
Con esta configuración, se deben modificar los ajustes del firewall, y especificar desde
cuales direcciones se deben aceptar tráficos de broadcast.
No se debe usar la opción –E como primera opción del comando. Para todos los
comandos CUPS, -E como primer argumento implica el uso de una conexión cifrada y
como último argumento habilita que la impresora acepte trabajos de impresión.
Por ejemplo, para habilitar una impresora con bus en paralelo, el comando es similar al
siguiente:
lpadmin -p ps -v socket://10.10.10.200:9100/ –P \
/usr/share/cups/model/Postscript-level1.ppd.gz -E
Las herramientas CUPS, permiten el uso de comandos con dos diferentes estilos o
convenciones llamadas:
Comparado con Berkely, System V provee un rango más extenso de características para
la administración de impresión.
- Generar un trabajo de impresión
88
Postscript Printer Description
Los comandos pueden ser ligeramente diferentes para la impresión en colas remotas:
Se pueden usar los siguientes comandos para generar una lista de los trabajos de
impresión:
da51:~ # lpq
draft is ready and printing
Rank Owner Job File(s) Total Size
Active root 14 fstab 1024 bytes
da51:~ #
La opción „–P‟ permite listar los trabajos de impresión de una cola diferente.
La opción „-a‟ se usa para desplegar los trabajos de impresión activos de todas las colas.
Lo siguiente muestra la salida para los comandos: lpqstat –o cola –p cola; lpqstat –a
Las opciones específicas para impresión afectan los aspectos físicos de salida y
almacenamiento en el archivo PPD para cada cola en el directorio: /etc/cups/ppd/.
Durante la instalación del Sistema Operativo, muchos archivos PPD son pre instalados,
de esta manera, incluso impresoras sin soporte de PostScript pueden ser utilizadas.
Para visualizar los ajustes actuales de una cola de impresión ejecutando el comando:
lpoptions –p cola –l. la secuencia de las opciones es importante, si se especifica primero
„-l‟, los ajustes de la cola primaria se mostraría, sin importar lo que se especifica después
de „-p‟.
Lo siguiente es un ejemplo:
da51:~ # lpoptions -l
HalftoningAlgorithm/Halftoning Algorithm: Accurate *Standard WTS
REt/REt Setting: Dark Light *Medium Off
TonerDensity/Toner Density: 1 2 *3 4 5
Duplex/Double-Sided Printing: *DuplexNoTumble DuplexTumble None
Manualfeed/Manual Feed of Paper: Off On
InputSlot/Media Source: *Default Tray1 Tray2 Tray3 Tray4 Envelope Manual
Auto
Copies/Number of Copies: *1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...
PageSize/Page Size: *A4 Letter 11x17 A3 A5 B5 Env10 EnvC5 EnvDL EnvISOB5
EnvMonarch Executive Legal
PageRegion/PageRegion: A4 Letter 11x17 A3 A5 B5 Env10 EnvC5 EnvDL EnvISOB5
EnvMonarch Executive Legal
Resolution/Resolution: 75x75dpi *150x150dpi 300x300dpi 600x600dpi
Economode/Toner Saving: *Off On
LowToner/Behaviour when Toner Low: *Continue Stop
da51:~ #
Los símbolos „*‟ delante de los valores indican los ajustes actuales activos. El significado
de algunas de estas opciones es la siguiente:
Opción Descripción
REt/REt Setting (Ajustes de Resolución) Hay tres modos de para mejorar la calidad
de la resolución: „dark‟, „light‟ y „medium‟
TonerDensity / Esta opción especifica la cantidad de tóner (1= poca, 5=mucha)
Toner Density
Duplex / Double- Esta opción deshabilita o habilita la impresión a doble cara,
Sided Printing asumiendo que la impresora soporta impresión a doble cara.
89
PostScript Printer Description
Para cambiar cualquiera de las opciones de una cola, la sintaxis del comando es:
lpoptions –p cola –o opción=valor. El siguiente comando cambia el tamaño de la
página en la cola „lp‟ a „Carta‟:
El rango de los usuarios afectados por los nuevos ajustes varía, dependiendo de cual
usuario realiza los cambios:
Esta es una forma de para que el root modifique los ajustes en el archivo PPD de
cualquier cola local. Los cambios se aplicarían a todos los usuarios de la red que envían
trabajos de impresión a la cola correspondiente.
CUPS provee colecciones de impresoras llamadas „clase de impresora‟. Los trabajos son
enviados a una clase y esta lo reenvía a la primera impresora de la clase. Se puede usar
el comando lpadmin para:
Por ejemplo, para agregar una cola a una clase, se ejecuta: lpadmin –p cola –c clase. Si
la clase no existe, esta es creada automáticamente.
Para eliminar una cola de una clase, se ejecuta: lpadmin –p cola –r clase. Si la clase
está vacía, como resultado de este comando se eliminaría la clase.
Como root, se puede iniciar o detener el demonio cupsd manualmente con los siguientes
comandos:
/etc/initd/cups start, o, rccups start
/etc/initd/cups stop, o, rccups stop
Si se realizan cambios manualmente al archivo /etc/cups/cupsd.conf, se necesita reiniciar
el demonio con uno de los siguientes comandos:
/etc/initd/cups restart, o, rccups restart
da51:~ # ls /usr/lib/cups/backend
. canon http lpd parallel scsi smb usb
.. Epson ipp novell pipe serial socket
da51:~ #
1 2 3 4 5 6 8 9
7 8 9
1. Archivo
2. Cola de Impresión
3. Especificación del formato del archivo
4. Conversión a PostScript
5. Lenguaje PostScript
6. Filtrado con pstops
7. Conversión a lenguaje de Impresora
8. Lenguaje de la impresora (PostScript u otro)
9. Impresora final (PostScript u otra)
- Colas de impresión
Con CUPS, los dispositivos de impresión son direccionadas usando colas de impresión.
En vez de enviar los trabajos de impresión directamente a la impresora, estos se envían a
una cola de impresión asociado con el dispositivo. En un servidor de impresión, cada cola
de impresión es registrada con su nombre en el archivo: /etc/cups/printers.conf.
Entre otras cosas, este archivo define el direccionamiento de las colas hacia la impresora,
como está conectada, y mediante cual interface se conecta.
Muchas colas de impresión puedes estar definidas para una sola impresora, así como el
ejemplo siguiente:
Por ejemplo: en el caso de una impresora a color es útil tener dos colas, una para
impresiones en blanco y negro y otra para impresión a color.
Este archivo lista cada recurso HTTP que es accedido por un navegador web o cliente
CUPS/IPP.
Campo Descripción
Host Muestra el nombre del host que accede al servidor cupsd. En este caso se
muestra el nombre „hostname‟.
Grupo El campo grupo, siempre contiene el símbolo „-„ en CUPS.
Usuario Este campo se refiere al nombre del usuario. Si no se suple el usuario y
contraseña, el campo contendrá „-„
Tiempo Este campo muestra la fecha y hora del envío del trabajo de impresión ( en
el ejemplo [15/Ene/2013:09:48:47 -0600] )
Método Este campo especifica cual método HTTP se usa en la impresión (GET,
PUT o POST)
Recurso Especifica el nombre del archivo del recurso solicitado, estos pueden ser:
/
/admin/
/printers/
/jobs/
Versión Especifica la versión HTTP usada en el trabajo
Estado Especifica el código del estado HTTP de la solicitud.
Usualmente es „200‟, pero otros códigos de estado HTTP son posibles. Por
ejemplo „401‟ que indica acceso no autorizado.
Tamaño Este campo contiene el número de bytes en la solicitud. Para solicitudes
POST, este campo contiene el número de bytes recibidos por el cliente.
Este archivo lista los mensajes adicionales tales como errores y advertencias.
Campo Descripción.
Nivel Este campo contiene el tipo del mensaje:
E. Un error ocurrió.
W. El servidor no puede ejecutar una acción.
I. Mensaje de Información.
D. Mensaje de advertencia de nivel bajo.
Tiempo Este campo contiene la fecha y hora de la entrada, por ejemplo cuando
una página comienza a imprimirse.
Mensaje Este campo tiene una forma libre (sin formato definido) de describir el
mensaje.
El page_log
Campo Descripción
Impresora Contiene el nombre de la impresora que imprime la pagina, en este
ejemplo es „greyscale‟
Usuario Contiene el nombre del usuario que envió el trabajo de impresión.
ID del trabajo Contiene el ID del trabajo de impresión
Tiempo Contiene la fecha y hora en que se realiza la impresión
Cantidad Contiene el número de páginas a imprimir
Copia Contiene el número de copias a imprimir
Costo Contiene los costos de la impresión, este es un atributo provisto por
Para registro y troubleshooting, se debe ajustar esto a debug2. Después de cambiar esta
configuración, se debe reiniciar CUPS.
- Archivo de Configuración.
Varias opciones son usadas para configurar el archivo en sí, filtros, aspectos de red,
navegación y acceso. Estos últimos serán cubiertos en el siguiente tema.
CUPS puede distribuir información sobre las impresoras disponibles a todos los clientes
de red por medio de las propiedades de navegación.
El servidor CUPS puede usar la transmisión broadcast para distribuir la información de las
impresoras. Si se habilita, el servidor transmite la información de sus impresoras cada 30
segundos. Esta información típicamente usa solamente 80 bytes por impresora. Se
pueden agregar una gran cantidad de servidores e impresoras.
10.10.10.254
Laser
10.10.10.12
10.10.10.255
Impresoras Disponibles:
ipp://10.10.10.254/printers/laser .
ipp://10.10.10.254/printers/multifuncional
Multifuncional
10.10.10.11
10.10.10.10
Para configurar con YaST esta opción, se debe acceder al centro de control de YaST,
seleccionar Hardware > Impresoras, en ese dialogo seleccionar Otro > Ajustes de
Experto CUPS.
Se puede restringir el acceso a varios recursos de CUPS. Los recursos son desplegados
como directorios (/printers o /jobs).
Recurso Descripción
/ La restricción de acceso para este recurso se aplica para todos los recursos
subsecuentes si no existen otras restricciones especificadas.
/printers Todas las impresoras o colas.
http://localhost:631/printers
http://localhost:631/admin
<Location />
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
Allow From 127.0.0.2
Allow From @LOCAL
</Location>
<Location /admin>
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Location>
<Location /printers>
Deny From All
Allow From 10.10.10.0/24
Allow From 10.10.20.10
Order Allow,Deny
</Location>
Campo Descripción
Order Define el orden de la reglas y la directiva estándar:
Allow,Deny. Habilita la respuesta para todos los sistemas excepto
para los listados en la directiva Deny.
Deny,Allow. Habilita la respuesta solamente para los listados en la
directiva Allow.
Deny From All Todos los accesos al recurso son prohibidos
Allow From El acceso es permitido.
Mientras que el recurso /printers concierne a todas las colas de impresión, se puede
especificar restricciones en un par de colas básicas;
<Location /printers/color>
Deny From All
Allow From 10.10.10.10/24
Order Deny,Allow
</Location>
<Printer printer>
...
AllowUser user1
AllowUser user2
AllowUser @users
</Printer>
<Location /admin>
AuthType BasicDigest
AuthClass Group
AuthGroupName sys
Order Deny,Allow
Deny From All
Allow From 127.0.0.1
</Location>
Campo Descripción
AuthType BasicDigest Este es un usuario especial de la base de datos CUPS usado
para la autenticación. (/etc/cups/passwd.md5)
Los siguientes tipos son posibles:
None. Sin autenticación.
Basic. Autenticacion básica, usando los archivos de
usuarios y grupos de UNIX.
Digest. Esta tipo usa el archivo /etc/cups/passwd.md5 para
realizar la autenticación.
BasicDigest. Autenticación básica usando el archivo
/etc/cups/passwd.md5
AuthClass Group El acceso solamente es posible para usuarios validos que son
miembros del grupo de sistema (sys)
AuthGroupName Nombre del grupo de sistema (en este ejemplo sys)
Este archivo no existe y no es creado durante la instalación, para crearlo se debe usar
este comando:
Este comando agrega al usuario root en el grupo sys. Cualquier usuario puede ser
agregado al grupo, y estos no necesariamente deben ser usuarios del sistema local.
Los servicios de SMB, son provistos por el protocolo NetBIOS. Este habilita su propio
espacio de nombres, que puede ser completamente diferente al utilizado por el DNS.
Este espacio de nombres puede ser accedido mediante notación UNC91: todos los
servicios provistos por un servidor son direccionados así: \\Servidor\Nombre_Servicio.
Los servicios de impresión o archivos que ofrece el servidor también son llamados
„recursos compartidos‟.
90
Server Message Block
91
Unique Naming Convention
A partir de la versión 3.0.22 de samba, este tiene soporte para Kerberos en „winbind‟. Esto
permite la habilitación de integración basado en Kerberos en dominios Active Directory.
Después de que los paquetes se instalan, se debe iniciar los demonios de samba:
rcnmb start
rcsmb start
Para agregar samba a los servicios que se inician junto con el sistema, se debe ejecutar
lo siguiente.
insserv nmb
insserv smb
- Entender el archivo de configuración de Samba
Las opciones dentro del archivo son agrupadas en diferentes secciones. Cada sección
inicia con una palabra clave encerrada en corchetes.
Crear una sección para la configuración general del servidor.
Esta sección inicia con la palabra clave „global‟ ([global]). Las siguientes líneas son un
ejemplo de la sección básica global:
[global]
workgroup = DigitalAirlines
netbios name = Fileserver
security = share
Campo Descripción
workgroup Esta línea configura el grupo de trabajo Windows en el servidor samba,
en este ejemplo es: DigitalAirlines
netbios name Este campo configura el nombre del host para el NetBIOS
Después de la sección global, se necesita agregar una sección para compartir los datos
del servidor de archivos. El siguiente ejemplo es la manera más simple de configurar un
recurso compartido:
[data]
comment = Data
path = /srv/data
read only = Yes
guest ok = Yes
Campo Descripción
[data] Este es el identificador de la sección y del recurso compartido. Este
recurso puede ser accedido mediante la dirección: \\Servidor\data.
comment Esta opción es un comentario con información adicional sobre el
recurso compartido. El comentario es desplegado cuando se navega en
la red con Windows Explorer.
path Esta opción define la ruta de los datos compartidos en el sistema local.
Se debe estar seguro que el usuario local tiene los privilegios
suficientes para acceder a los archivos de este recurso compartido.
read only Si esta opción se configura en „Yes‟, el cliente que acceda al recurso
compartido no tendrá privilegios de modificación, borrar o crear
archivos. Este es el valor estándar, si se elimina esta opción el recurso
será definido como „de solo lectura‟.
guest ok Si esta opción se configura en „Yes‟, una contraseña no es requerida
para acceder al recurso compartido.
Antes de reiniciar los demonios, se debe probar la sintaxis del archivo de configuración
con el comando:
testparm
El valor „user‟ en esta opción habilita la seguridad, solicitando la autenticación con usuario
y contraseña cuando el cliente intenta la conexión al servidor.
Los usuarios que necesiten acceso a los recursos SMB, deben primero ser creados como
usuarios del sistema. Luego se necesita definir una contraseña SMB usando el comando
smbpasswd.
92
User Level Security
Para remover un usuario SMB, se usa: smbpasswd –x usuario. Si se está como usuario
(no root), el comando smbpasswd (sin opciones) nos permite cambiar la contraseña del
usuario en el que estamos dentro del sistema. Es muy importante recordar que solo root
puede cambiar la contraseña de otros usuarios SMB (usando la opción –a).
- Configurar un recurso compartido que sea accesible solo por un usuario
El siguiente ejemplo configura un recurso compartido que será accedido solamente por el
usuario tux:
[tux-dir]
comment = Directorio del usuario tux
path = /srv/share
valid users = tux
read only = no
Campo Descripción
[tux-dir] Este es el identificador de la sección y del recurso compartido. Este
recurso puede ser accedido mediante la dirección: \\Servidor\tux-dir.
valid users Esta opción lista a todos los usuarios que tienen privilegios de
conectarse a este recurso. Los nombres de usuario deben de estar
separados por comas, tambien se puede agregar un grupo completo
usando la sintaxix: @nombre_grupo. Aun así todos los usuarios del
grupo UNIX necesitan cuentas de usuario en el archivo smbpasswd.
En el siguiente ejemplo crea un recurso compartido que es accedido por todos los
usuarios del grupo llamado „contabilidad‟:
[contabilidad]
comment = Departamento de Contabilidad
path = /srv/share
valid users = @contabilidad
force user = tux
force group = contabilidad
read only = no
Comparado con los anteriores ejemplos, las siguientes líneas son nuevas o tienen
cambios:
Campo Descripción
valid users En este ejemplo, se está definiendo acceso al grupo de usuarios
„contabilidad‟ completo.
force user Esta línea le indica al servidor samba que la ejecución de todas las
operaciones de archivos en este recurso serán efectuadas mediante el
usuario „tux‟.
Esto asegura que todos los archivos en el recurso tengan los mismos
privilegios de acceso para cada usuario que acceda al recuros.
force group Esta línea le indica al servidor samba que efectúe todas las
operaciones con el grupo de usuario „contabilidad‟.
El siguiente ejemplo, exporta los directorios home de todos los usuarios UNIX en el
servidor samba. Se necesita agregar los usuarios al archivo smbpasswd antes de
configurar esto:
[homes]
comment = Directorios HOME
valid users = %S
read only = No
browseable = No
Campo Descripción
valid users %S configura el nombre del recurso solicitado como posibles nombres
de usuario validos.
browseable Por razones de seguridad, los recursos no deben ser navegables.
Con esta herramienta, se puede acceder a los recursos SMB en la red. Esta herramienta
es muy útil para probar la configuración de un servidor samba.
Desplegar recursos provistos por un servidor
Para desplegar los recursos ofertados por un servidor SMB se puede usar el siguiente
comando: smbclient –L //Servidor_archivos.
El comando despliega todos los recursos del servidor SMB. Debajo de los recursos
configurados en el archivo smb.conf, el servidor SMB siempre oferta otros dos recursos:
IPC$. Este recurso provee información sobre los otros recursos disponibles en el
servidor SMB.
ADMIN$. En un computador Windows este recurso coloca el directorio donde
Windows está instalado. Esto es muy útil para las tareas administrativas. Cuando
samba intenta emular un servidor Windows, también oferta este recurso, aun así no
este recurso no es necesario para administrar un servidor Linux.
La parte baja de la salida de este comando, muestra información sobre el grupo de trabajo
del sistema. Este comando puede ser de mucho valor por propósitos de prueba. Después
de configurar un recurso, se debe verificar la disponibilidad del recurso con smbclient.
Algunos recursos no se muestran sin haber sido antes autenticados. En este caso se
puede enviar el usuario a smbclient de la siguiente manera:
En este ejemplo, smbclient conecta al servidor „Servidor‟ con el usuario „tux‟, y le solicitara
al cliente su contraseña.
En este caso, no es necesario definir usuario y contraseña debido a que el recurso „data‟
esta configurado con la opción „gest ok = yes‟. Un usuario puede ser provisto con la
opción „-U‟.
Smb: \>
Este comando (smbclient) puede ser usado como el cliente FTP. Los comandos mas
importantes son los siguientes:
Comando Descripción
ls Despliega el contenido del directorio actual
cd Cambia de directorio
get Copia un archivo desde el recurso compartido al directorio local
put Copia un archivo desde el directorio local al recurso compartido
Se puede usar el comando „print‟ dentro del comando smbclient después de realizar la
conexión al servidor. La opción „-c‟ ejecuta el comando definido inmediatamente después
de establecer la conexión.
Montar recursos en un sistema de archivos Linux.
El controlador de dominio provee una base de datos de usuario, que es usada para la
autenticación de usuarios cuando estos tratan de acceder a una de las computadoras
administradas.
Samba puede actuar como un controlador de dominio NT4. Las estaciones Windows 2000
y Windows XP Professional son compatibles para Windows NT4 y pueden por
consiguiente ser usados con samba. Aun así, las nuevas funciones de Active Directory no
estarán disponibles.
- Configurar /etc/samba/smb.conf
Las siguientes líneas son parte de la configuración básica del Controlador de Dominios en
el archivo smb.conf:
[global]
netbios name = da50
workgroup = berlin
security = user
passdb backend = ldapsam:ldap://da2.digitalairlines.com
logon script = %U.bat
domain master = yes
os level = 50
local master = yes
preferred master = yes
[netlogon]
path = /netlogon
Campo Descripción
passdb backend Especifica en cual tipo de base de datos la información del usuario y
grupo son almacenados.
Se pueden especificar uno de las siguientes opciones:
smbpasswd
tdbsam (smbpasswd más NT SAM)
ldapsam
Si es un controlador de dominio de respaldo (BDC) en la red, se
debe seleccionar aquí ldapsam y especificar el servidor LDAP.
El uso de una base de datos distinta a LDAP-SAM es
particularmente problemática debido a que los miembros del dominio
cambian periódicamente las contraseñas en su estación de trabajo.
Esta nueva contraseña debe ser almacenada localmente.
logon script Especifica un script, que es ejecutado en la maquina del cliente
cuando el usuario ingrese. La variable „%U‟ se reemplaza con el
nombre del usuario. En esta configuración cada usuario tiene su
propio script. El script puede ser ubicado en el directorio que es
especificado en el recurso netlogon.
domain master Esta opción es la que le indica a samba que será un controlador de
dominio
local master Esta opción permite a samba participar en la elección del local
master.
os level Este valor entero controla el nivel de advertencia de samba. Se
necesita un valor de 32 para ser PDC
preferred master Si esta opción se ajusta, el nmdb obliga a una elección
inmediatamente.
Para cada estación de trabajo Windows que proyectemos como miembros del dominio, se
necesita una cuenta para la estación en el servidor Samba. La cuenta de la estación de
trabajo es usada para establecer una relación de confianza para asegurar la conexión
entre el Controlador de Dominios y el cliente.
Para crear cuentas locales para estaciones de trabajo Windows NT, se usa el comando:
smbpasswd –a –m estacion_trabajo
Las cuentas de estaciones de trabajo son creadas con un „$‟ al final del nombre.
93
Active Directory Server
Active Directory Primary Domain Controller
El demonio winbind tiene soporte actualmente para Kerberos, que provee una manera de
autenticación en Active Directory.
Si se usa información del servidor SMB para autenticar usuarios Linux, se debe
seleccionar la opción correspondiente. Cuando se activa esta opción, dos cajas de
selección se activan.
Crear directorio Home al iniciar. Cuando se activa esta opción, un directorio Home
se creado automáticamente cuando un usuario se autentica la primera vez.
Autenticación fuera de línea. Estas opciones permiten autenticación aun cuando el
sistema no está conectado con el controlador de dominio. Esto puede ser una opción
muy útil para computadores portátiles.
Para imprimir con samba, se debe instalar un sistema de impresión CUPS en el servidor
samba y configurar la impresora conectada. Esto puede realizarse con el modulo de
impresión de YaST.
Antes de comenzar a configurar las impresoras compartidas con samba, se debe probar
la instalación de CUPS mediante la impresión con una aplicación local en Linux.
Una vez que el sistema CUPS y las impresoras son configuradas, samba puede ser
usado para compartir las impresoras CUPS con estaciones de trabajo Windows. En Linux,
el formato de impresión estándar que las aplicaciones producen es PostScript. Cuando
una impresora no entiende PostScript directamente, una controlador de impresora en el
sistema CUPS traduce los datos al formato nativo de la impresora.
Este tipo de configuración depende mucho del numero de impresoras que se necesite
compartir.
Compartir una impresora
[laserjet]
printable = yes
printer = lp_raw
path = /var/tmp
La opción „printable = yes‟ le indica a samba que este recurso es una impresora
compartida y no un directorio compartido.
Se usa la opción „printer‟ para especificar cuando la cola de la impresora debe ser usada
por medio de este recurso. Si se necesita pre procesar en el cliente, se debe especificar la
cola RAW aquí.
printing = CUPS
printcap name = CUPS
AIX LPRNG
BSD PLP
CUPS QNX
HPUx SYSV
[printers]
printable = yes
path = /var/tmp
Puede ser mejor almacenar los controladores en el servidor samba para que estos
puedan ser accedidos a través de la red.
[laserjet]
printable = yes
print command = lpr –Plp –I %s
Este recurso puede ser modificado solamente por el administrador y leídos por todos los
usuarios.
[print$]
path = /var/lib/samba/drivers
write list = root
Para agregar una impresora en Windows, se selecciona „Agregar Impresora‟ desde las
opciones de impresión del panel de control de Windows. En el dialogo que busca las
impresoras en red, se selecciona la impresora en el servidor samba:
da2: # ls /var/lib/samba/drivers/
. .. W32ALPHA W32MIPS W32PPC W32X86 WIN40
da2: # ls /var/lib/samba/drivers/W32X86/
. .. 2
da2: # ls /var/lib/samba/drivers/W32X86/2/
. .. HP2100_6.PPD PSCRIPT.DLL PSCRIPT.HLP PSCRPTUI.DLL