Servicios Unix
Servicios Unix
Servicios Unix 9
Contenidos
Arranque del sistema 190 Inicio de sesión remoto 195 Administración de permisos 201
Interfaces de administración 203 syslog Eventos de sistema 206 El superservidor inetd 208
Programación de tareas con cron y atd 210 Programación de tareas asincrónicas: anacron 213 Cuotas 214
Respaldo 215 Conexión en caliente: hotplug 219
Gestión de energía: interfaz avanzada de configuración y energía (ACPI: «Advanced Configuration and Power Interface) 223
Este capítulo cubre un número básico de servicios que son comunes a varios sistemas
Unix. Todos los administradores deberían estar familiarizados con ellos.
9.1. Arranque del sistema
Cuando inicia el equipo, los muchos mensajes que aparecen en la pantalla muestran varias ini-
cializaciones y configuraciones automáticas que se están ejecutando. Algunas veces deseará al-
terar ligeramente cómo funciona esta etapa, lo que significa que necesitará entenderlas bien.
Éste es el propósito de esta sección.
Primero el BIOS toma el control del equipo, detecta los discos, carga el registro maestro de ar-
ranque («MBR») y ejecuta el gestor de arranque. Este toma el control, busca el núcleo en el disco,
lo carga y lo ejecuta. Luego se inicializa el núcleo y empieza la búsqueda y montaje de la parti-
ción que contiene el sistema de archivos raíz y finalmente ejecuta el primer programa — init.
Frecuentemente esta «partición raíz» y su init están, de hecho, ubicados en un archivo virtual
del sistema que sólo existe en RAM (de aquí el nombre «initramfs», anteriormente llamado «ini-
trd» por «disco RAM de inicialización»: «initialization RAM disk»). El gestor de arranque carga
este sistema de archivos en memoria, muchas veces desde un archivo en el disco duro o desde
la red. Contiene sólo lo mínimo requerido por el núcleo para cargar el «verdadero» sistema de
archivos raíz: estos pueden ser módulos de controladores para el disco duro u otros dispositivos
sin los cuales el sistema no puede iniciar o, más frecuentemente, scripts de inicialización y mó-
dulos para ensamblar arreglos RAID, abrir particiones cifradas, activar volúmenes LVM, etc. Una
vez que se montó la partición raíz el initramfs entrega el control al verdadero init y la máquina
regresa al proceso de inicio estándar.
Actualmente sysv-rc («System V») provee el «init real» y esta sección documenta este sistema
de inicio.
CASO ESPECÍFICO En algunas situaciones, se puede configurar el BIOS para que no ejecute el
Arranque desde la red MBR sino que busque su equivalente en la red, haciendo posible construir
equipos sin disco duro o que son completamente reinstalados en cada ar-
ranque. Esta opción no está disponible en todo el hardware y generalmente
necesita una combinación apropiada de BIOS y placa de red.
El arranque desde la red puede utilizarse para ejecutar debian-installer o
FAI (revise la Sección 4.1, «Métodos de instalación» página 50).
Init pone en marcha varios procesos, siguiendo instrucciones del archivo /etc/inittab. El
primer programa ejecutado (el cual corresponde al paso sysinit) es /etc/init.d/rcS, un script
que ejecuta todos los programas en el directorio /etc/rcS.d/.
Entre estos encontrará sucesivamente programas a cargo de:
configurar el teclado de la consola;
SEGURIDAD Por convención el primer proceso iniciado es el programa init. Sin embargo,
Usar una consola como init es posible proveer una opción init al núcleo indicando un programa diferente.
para obtener derechos de Cualquier persona con acceso al equipo puede presionar el botón Reset y así
root reiniciarla. Entonces es posible, en el prompt del gestor de arranque, pasar la
opción init=/bin/sh al núcleo para obtener acceso root sin conocer la con-
traseña del administrador.
Para prevenirlo puede proteger el gestor de arranque con una contraseña.
También podría pensar en proteger el acceso al BIOS (casi siempre tiene
disponible un mecanismo de protección por contraseña) sin el cual un intruso
malicioso podría iniciar la máquina desde un medio removible que contiene
su propio sistema Linux, el cual podría utilizar para tener acceso a los datos
del disco duro del equipo.
Finalmente, tenga en cuenta que la mayoría de los BIOS tiene disponible
una contraseña genérica. Inicialmente destinado a resolver los problemas
de quienes han olvidado su contraseña, éstas ahora son públicas y están
disponibles en Internet (revíselo por su cuenta buscando «contraseñas genéri-
cas de BIOS» en algún motor de búsqueda). Todas estas protecciones im-
pedirán el acceso no autorizado a la máquina sin poder evitarlo por completo.
No existe una forma segura de proteger un equipo si el atacante puede acceder
a él físicamente; podría quitar el disco duro para conectarlo a un equipo bajo
su control de cualquier manera, o aún robar la máquina completa o borrar la
memoria del BIOS para eliminar la contraseña…
VOLVER A LOS Los módulos del núcleo también tienen opciones que puede configurar agre-
CIMIENTOS gando algunos archivos en /etc/modprobe.d/. Estas opciones se definen con
Módulos y opciones del directivas como: options nombre-del-módulo nombre-opción=valor-opción.
núcleo Puede especficar varias opciones con una sola directiva si es necesario.
Estos archivos de configuración están destinados a modprobe — el programa
que carga un módulo de núcleo con sus dependencias (los módulos también
pueden llamar otros módulos). El paquete kmod provee este programa.
Luego de esta etapa, init toma el control e inicia los programas activados en el nivel de ejecu-
ción («runlevel») predeterminado (generalmente el nivel 2). Ejecuta /etc/init.d/rc 2, un
script que inicia todos los servicios enumerados en /etc/rc2.d/ y aquellos cuyos nombres
comiencen con la letra «S». Los números de dos cifras que le sigue fueron utilizados histórica-
mente para definir el orden en el que se iniciarán los servicios, pero actualmente el sistema de
inicio predeterminado utiliza insserv, que programa todo automáticamente basándose en las
init distingue varios niveles de ejecución («runlevel») y puede cambiar de uno a otro ejecutan-
do telinit nuevo-nivel. Inmediatamente, init ejecuta nuevamente /etc/init.d/rc con el
nuevo nivel de ejecución. Luego, este script ejecutará los servicios faltantes y detendrá aquellos
que ya no se desean. Para hacerlo, se refiere al contenido del archivo /etc/rcX.d (donde X rep-
resenta el nuevo nivel de ejecución). Los scripts cuyos nombres comienzan con «S» (por «start»,
iniciar) son los servicios a iniciar; aquellos cuyos nombres comienzan con «K» (por «kill», matar)
NORMATIVA DEBIAN Los scripts de mantenimiento para paquetes Debian a veces reinician algunos
Reinicialización de servicios servicios para asegurar su disponibilidad o conseguir que tengan en cuenta
algunas opciones. El script que controla un servicio — /etc/init.d/servicio
operación — no tiene en cuenta el nivel de ejecución, asume (incorrectamente)
que el servicio está siendo utilizado actualmente y, por lo tanto, puede iniciar
operaciones incorrectas (iniciar un servicio que fue detenido deliberadamente
o detener un servicio que no está ejecutando, etc.). Por lo tanto, Debian in-
trodujo el programa invoke-rc.d: los scripts de mantenimiento deben uti-
lizar este programa para ejecutar scripts de inicialización de servicios que sólo
ejecutarán las órdenes necesarias. Sepa que, contrario al uso común, aquí se
utiliza el sufijo .d en el nombre de un programa y no en un directorio.
Finalmente, init inicia los programas de control para varias consolas virtuales (getty). Muestra
un prompt esperando por un nombre de usuario y luego ejecuta login usuario para iniciar una
sesión.
VOCABULARIO Los primeros equipos generalmente estaban separados en varias partes muy
Consola y terminal grandes: el compartimiento de almacenamiento y la unidad de procesamiento
central estaban separados de los dispositivos periféricos que los operadores
utilizaban para controlarlos. Éstos eran parte de un mobiliario separado: la
«consola». Se mantuvo este término pero cambió su significado. Se convirtió,
de cierta forma, en sinónimo de «terminal» (un teclado y una pantalla).
Con el desarrollo de la tecnología, los sistemas operativos han ofrecido varias
consolas virtuales que permiten varias sesiones independientes al mismo tiem-
po, aún si sólo hay un teclado y pantalla. La mayoría de los sistemas GNU/Lin-
ux ofrecen seis consolas virtuales (en modo texto) a las que puede acceder
presionando las combinaciones de teclas Control+Alt+F1 a Control+Alt+F6.
Por extensión, los términos «consola» y «terminal» también pueden hacer
referencia a emuladores de terminales en una sesión gráfica X11 (como xterm,
gnome-terminal o konsole).
Es esencial para el administrador poder conectarse a un equipo de forma remota. Los servidores,
aislados en su propia habitación, rara vez están equipados con monitores y teclados perma-
nentes — pero están conectados a la red.
El protocolo SSH (interprete de órdenes seguro: «Secure SHell») fue diseñado pensando en la
seguridad y la confiabilidad. Las conexiones que utilizan SSH son seguras: la otra parte es aut-
enticada y se cifran todos los datos intercambiados.
CULTURA Antes de SSH, Telnet y RSH eran las principales herramientas para sesiones
Telnet y RSH son obsoletos remotas. Actualmente son generalmente obsoletas y no debería utilizarlas aún
cuando Debian todavía las provee.
SSH también ofrece dos servicios de transferencia de archivos. scp es una herramienta para
la terminal que puede utilizar como cp excepto que cualquier ruta a otro equipo utilizará un
prefijo con el nombre de la máquina seguido de dos puntos («:»).
$ scp archivo equipo:/tmp/
sftp es un programa interactivo similar a ftp. En una sola sesión sftp puede transferir varios
archivos y es posible manipular archivos remotos con él (eliminar, renombrar, cambiar per-
misos, etc.).
VOLVER A LOS Una bifurcación («fork»), en el campo de soware, significa que comienza un
CIMIENTOS nuevo proyecto como clon de un proyecto existente y que competirá con él.
Bifurcación: «fork» Desde allí, ambos programas generalmente divergirán rápidamente en térmi-
nos de nuevos desarrollos. Por lo general son un resultado de desacuerdos
dentro del equipo de desarrollo.
La opción de bifurcar un proyecto es un resultado directo de la naturaleza
misma del soware libre; es un evento saludable cuando permite la contin-
uación de un proyecto como soware libre (por ejemplo, en el caso de cambios
de licencia). Una bifurcación generada por desacuerdos técnicos o personales
usualmente es un desperdicio de recursos; se prefiere otra solución. También
ocurren fusiones de dos proyectos que anteriormente habían bifurcado.
OpenSSH está dividido en dos paquetes: la parte del cliente se encuentra en el paquete openssh-
client y el servidor en el paquete openssh-server. El metapaquete ssh depende de ambas partes y
facilita la instalación conjunta (apt-get install ssh).
Cada vez que alguien inicia sesión a través de SSH, el servidor remoto pide una contraseña para
autenticar al usuario. Esto puede ser problemático si desea automatizar la conexión o si utiliza
una herramienta que necesita conexiones frecuentes sobre SSH. Es por esto que SSH ofrece un
sistema de autenticación basada en llaves.
El usuario genera un par de llaves en la máquina cliente con ssh-keygen -t rsa; la llave públi-
ca se almacena en ~/.ssh/id_rsa.pub mientras que la llave privada correspondiente estará
almacenada en ~/.ssh/id_rsa. Luego, el usuario utiliza ssh-copy-id servidor para agregar
su llave pública al archivo ~/.ssh/authorized_keys en el servidor. Si no se protegió la llave
privada con una «frase de contraseña» al momento de crearla, todos los inicios de sesión sigu-
ientes al servidor funcionarán sin contraseña. De lo contrario, debe descifrar la llave privada
cada vez ingresando la frase de contraseña. Afortunadamente, ssh-agent permite mantener
llaves privadas en memoria para no tener que ingresar la frase de contraseña regularmente.
Para ello, simplemente utilizaría ssh-add (una vez por sesión de trabajo) siempre que la sesión
ya esté asociada con una instancia funcional de ssh-agent. De forma predeterminada, Debian
activa este comportamiento en sesiones gráficas pero lo puede desactivar cambiando el archivo
/etc/X11/[Link]. Para una sesión en consola, puede iniciarlo manualmente con
eval $(ssh-agent).
CULTURA La biblioteca OpenSSL, como fue provista inicialmente en Debian Etch, tenía
Falla OpenSSL en Debian un serio problema en su generador de números aleatorios (RNG: «Random
Etch Number Generator»). El desarrollador Debian había realizado una modifi-
cación para que los programas que la utilizan no generaran advertencias mien-
tras eran objetivo de análisis por herramientas de pruebas de memoria como
valgrind. Desafortunadamente, este cambio también significaba que el RNG
sólo utilizaba una fuente de entropía que correspondía al número de proceso
(PID); pero los 32000 valores posibles del mismo no ofrecen suficiente aleato-
riedad.
è [Link]
Específicamente, cuando utilizaba OpenSSL para generar una llave, siempre
producía una llave dentro de un conjunto conocido de cientos de miles de
llaves (32000 multiplicado por una pequeña cantidad de longitudes de llaves).
Esto afectaba llaves SSH, llaves SSL y certificados X.509 utilizados por nu-
merosas aplicaciones, como OpenVPN. Un «cracker» sólo debía intentar todas
estas llaves para obtener un acceso no autorizado. Para reducir el impacto del
problema, se modificó el demonio SSH para rechazar las llaves problemáticas
incluidas en los paquetes openssh-blacklist y openssh-blacklist-extra. Además,
el programa ssh-vulnkey permite identificar posibles llaves comprometidas
en el sistema.
Un análisis más detallado de este problema resaltó que era el resultado de
múltiples problemas (pequeños), tanto en el proyecto OpenSSL así como tam-
bién con el encargado del paquete Debian. Una biblioteca tan utilizada como
OpenSSL no debería — sin modificaciones — generar advertencias cuando es
probada con valgrind. Lo que es más, el código (especialmente las partes tan
sensibles como el RNG) deberían tener mejores comentarios para evitar es-
tos errores. El encargado Debian por su parte, deseando validar sus modifica-
ciones con los desarrolladores de OpenSSL, simplemente explicó sus modifi-
caciones sin proveer el parche correspondiente para revisar. Tampoco se iden-
tificó a sí mismo claramente como el encargado del paquete Debian corre-
spondiente. Finalmente, en sus elecciones como encargado, no documentó los
cambios al código original claramente; todas las modificaciones fueron alma-
cenadas en un repositorio Subversion, pero terminaron agrupadas en sólo un
parche durante la creación del paquete fuente.
Bajo tales condiciones es difícil encontrar las medidas correctivas para evitar
que ocurran incidentes similar. La lección a aprender aquí es que cada di-
vergencia que Debian introduce al soware de origen debe estar justificada,
documentada, enviada al proyecto de origen cuando sea posible y publicitada
ampliamente. Es desde esta perspectiva que se desarrollaron el nuevo forma-
to de paquete fuente («3.0 (quilt)») y el sistema de seguimiento de parches
Debian.
è [Link]
El protocolo SSH permite redirigir datos gráficos (sesión «X11» por el nombre del sistema gráfico
más utilizado en Unix); el servidor luego mantiene un canal dedicado para estos datos. Específi-
camente, el programa gráfico ejecutado remotamente puede mostrarse en el servidor [Link] de
la pantalla local y toda la sesión (datos ingresados y lo que sea mostrado) será segura. De forma
predeterminada, esta funcionalidad está desactivada porque permite que aplicaciones remotas
interfieran con el sistema local. Puede activarla especificando X11Forwarding yes en el archivo
de configuración del servidor (/etc/ssh/sshd_config). Finalmente, el usuario también debe
solicitarlo agregando la opción -X al ejecutar ssh.
Las opciones -R y -L le permiten a ssh crear «túneles cifrados» entre dos equipos, redirigiendo
de forma segura un puerto TCP local (revise el recuadro « TCP/UDP» página 228) a un equipo
remoto o viceversa.
VOCABULARIO Internet, y la mayoría de las redes de área local conectadas a ella, funcionan
Túnel bajo conmutación de paquetes y no bajo conmutación de circuitos, lo que sig-
nifica que un paquete enviado de un equipo a otro será detenido en varios
routers intermedios para encontrar su ruta al destino. Todavía puede simu-
lar el modo de conexión en el que el flujo esté encapsulado en paquetes IP
normales. Estos paquetes siguen su ruta usual pero se reconstruye el flujo sin
cambios en el destino. A esto le llamamos un «túnel», el análogo a un túnel vial
en el que los vehículos conducen directamente desde la entrada a la salida sin
encontrase con intersección alguna a diferencia de una ruta en la superficie
que involucraría intersecciones y cambios de dirección.
Puede utilizar esta oportunidad para agregar cifrado al túnel: así el flujo del
mismo no puede ser reconocido desde el exterior, pero al salir del túnel se
encuentra descifrado.
ssh -L 8000:servidor:25 intermediario establece una sesión SSH con el equipo intermedi-
ario y escucha en el puerto local 8000 (revise la Figura 9.2, “Redirección de un puerto local con
SSH” página 199). Para cualquier conexión en este puerto, ssh iniciará una conexión desde el
equipo intermediario al puerto 25 de servidor y unirá ambas conexiones.
ssh -R 8000:servidor:25 intermediario también establece una sesión SSH al equipo in-
termediario, pero es en este equipo que ssh escuchará en el puerto 8000 (revise la Figura 9.3,
“Redirección de un puerto remoto con SSH” página 199). Cualquier conexión establecida en este
puerto causará que ssh abra una conexión desde el equipo local al puerto 25 de servidor y unirá
ambas conexiones.
En ambos casos, se realizan las conexiones en el puerto 25 del equipo servidor, que pasarán a
través del túnel SSH establecido entre la máquina local y la máquina intermediario. En el primer
caso, la entrada al túnel es el puerto local 8000 y los datos se mueven hacia la máquina interme-
diario antes de dirigirse a servidor en la red «pública». En el segundo caso, la entrada y la salida
VNC (computación en redes virtuales: «Virtual Network Computing») permite el acceso remoto
a escritorios gráficos.
Esta herramienta se utiliza más que nada para asistencia técnica; el administrador puede ver los
errores con los que se enfrenta el usuario y mostrarle el curso de acción correcto sin tener que
estar a su lado.
SEGURIDAD Si desea conectarse con VNC y no desea que se envíen sus datos en texto
VNC sobre SSH plano a través de la red, es posible encapsular los datos en un túnel SSH (revise
la Sección [Link], «Creación de túneles cifrados con redirección de puertos»
página 198). Simplemente tiene que saber que, de forma predeterminada, VNC
utiliza el puerto 5900 para la primera pantalla (llamada «localhost:0»), 5901
para la segunda (llamada «localhost:1»), etc.
La orden ssh -L localhost:5901:localhost:5900 -N -T equipo crea un
túnel entre el puerto local 5901 en la interfaz de «localhost» y el puerto 5900
de equipo. La primera ocurrencia de «localhost» restringe a SSH para que sólo
escuche en dicha interfaz en la máquina local. El segundo «localhost» indica
que la interfaz en la máquina remota que recibirá el tráfico de red que ingrese
en «localhost:5901». Por lo tanto, vncviewer localhost:1 conectará el cliente
VNC a la pantalla remota aún cuando indique el nombre de la máquina local.
Cuando cierre la sesión VNC, recuerde también cerrar el túnel saliendo de la
sesión SSH correspondiente.
VOLVER A LOS gdb, kdm, lightdm y xdm son gestores de pantalla. Toman el control de la interfaz
CIMIENTOS gráfica poco después del inicio para proveer al usuario una pantalla de inicio de
Gestor de pantallas sesión. Una vez que el usuario inició sesión, ejecutan los programas necesarios
para iniciar una sesión gráfica de trabajo.
VNC también funciona para usuarios móviles o ejecutivos de empresas que ocasionalmente
necesitan iniciar sesión desde sus casas para acceder a un escritorio remoto similar al que uti-
lizan en la oficina. La configuración de tal servicio es más complicada: primero instale el paque-
te vnc4server, modifique la configuración del gestor de pantalla para aceptar pedidos XDMCP
Query (en gdm3 puede hacerlo agregando Enable=true en la sección «xdmcp» del archivo
/etc/gdm3/[Link]). Finalmente, inicie el servidor VNC con inetd para que se inicie una
sesión automáticamente cuando el usuario intente hacerlo. Por ejemplo, puede agregar la sigu-
iente línea al archivo /etc/[Link]:
5950 stream tcp nowait [Link] /usr/bin/Xvnc Xvnc -inetd -query localhost -
å once -geometry 1024x768 -depth 16 securitytypes=none
SEGURIDAD Dos permisos particulares son relevantes para archivos ejecutables: setuid y
Ejecutables setuid y setgid setgid (representados con la letra «s»). Sepa que frecuentemente haremos
referencias a «bits» ya que cada uno de estos valores booleanos pueden rep-
resentarse con un 0 o un 1. Estos dos permisos le permiten a cualquier usuario
ejecutar el programa con los permisos del dueño o del grupo respectivamente.
Este mecanismo provee acceso a funcionalidades que necesitan más permisos
de los que tendría normalmente.
Dado que un programa cuyo dueño es root con setuid activado ejecutará sis-
temáticamente con la identidad del súperusuario, es muy importante asegu-
rar que es seguro y confiable. De hecho, un usuario que pueda comprometerlo
para ejecutar otro programa de su elección podría hacerse pasar por el usuario
root y obtener todos los permisos sobre el sistema.
Hay dos formas de representar permisos. Entre ellas, la representación simbólica es probable-
mente la más sencilla de entender y recordar. Involucra las letras mencionadas anteriormente.
Puede definir permisos para cada categoría de usuarios (u/g/o) definiéndolos explícitamente
(con =, agregar permisos (+) o eliminar (-) permisos. Por lo tanto, la fórmula u=rwx,g+rw,o-r
provee al dueño permisos de lectura, escritura y ejecución, agrega permisos de lectura y escrit-
ura al grupo dueño y elimina el permiso de lectura para los otros usuarios. Los permisos que no
son modificados cuando se agreguen o eliminen permisos en estas fórmulas se mantienen in-
tactos. La letra a (por «all», todos) incluye las tres categorías de usuarios, por lo que a=rx otorga
los mismos permisos (lecutra y ejecución, pero no escritura) a las tres categorías de usuario.
La representación numérica (octal) asocia cada permiso con un valor: 4 para lectura, 2 para
escritura y 1 para ejecución. Asociamos cada combinación de permisos con la suma de dichos
valores. Se asigna cada valor a las diferentes categorías de usuarios uniéndolos en el orden usual
(dueño, grupo, otros).
Por ejemplo, chmod 754 archivo configurará los siguientes permisos: lectura, escritura y eje-
cución para el dueño (ya que 7 = 4 + 2 + 1); lectura y ejecución para el grupo (ya que 5 = 4 +1);
sólo lectura para los otros usuarios. 0 significa ningún permiso; por lo tanto chmod 600 archivo
provee permisos de lectura y escritura al dueño y ningún permiso para todos los demás. La com-
binación de permisos más frecuente es 755 para archivos ejecutables y directorios y 644 para
archivos de datos.
SUGERENCIA A veces debemos cambiar los permisos a un árbol de archivos completo. Todos
Operación recursiva los programas mencionados aceptan la opción -R para trabajar recursivamente
en subdirectorios.
La distinción entre archivos y directorios a veces causa problemas con opera-
ciones recursivas. Es por eso que se introdujo la letra «X» en la representación
simbólica de permisos. Representa el permiso de ejecución sólo para directo-
rios (y no para archivos que no tengan este permiso). Por lo tanto, chmod -
R a+X directorio sólo agregará permisos de ejecución para todas las cat-
egorías de usuarios (a) en todos los subdirectorios y aquellos archivos en los
que al menos una de las categorías de usuario (aún si sólo es el usuario dueño)
ya posea permisos de ejecución.
YENDO MÁS ALLÁ Cuando una aplicación crea un archivo asigna permisos indicativos, sabien-
umask do que el sistema automáticamente elimina algunos permisos, dados por el
programa umask. Ejecuta umask en una consola; verá una máscara como 0022.
Ésta es simplemente una representación octal de los permisos que serán elim-
inados sitemáticamente (en este caso, el permiso de escritura para el grupo y
otros usuarios).
Si provee un nuevo valor octal, el programa umask modificará la máscara. Si lo
utiliza en un script de inicialización de consola (por ejemplo ~/.bash_profile)
efectivamente cambiará la máscara predeterminada en sus sesiones de traba-
jo.
Esta es, sin lugar a dudas, una de las interfaces de administración más existosas. Es un sistema
modular administrador a través de un servidor web, que incluye un amplio rango de áreas y
herramientas. Lo que es más, está internacionalizada y está diponible en muchos idiomas.
Lamentablemente, webmin ya no es parte de Debian. Su encargado en Debian — Jaldhar H. Vyas
— eliminó los paquetes que creó porque ya no tenía el tiempo necesario para mantenerlos en
un nivel de calidad aceptable. Nadie asumió ese trabajo oficialmente, por lo que Wheezy no tiene
el paquete webmin.
Existe, sin embargo, un paquete no oficial distribuido en el sitio web [Link]. A diferencia
de los paquetes Debian originales, este paquete es monolítico; de forma predeterminada se in-
stalan y activan todos sus módulos de configuración, aún si el servicio correspondiente no está
instalado en el equipo.
SEGURIDAD Durante la primera sesión debe identificarse con el usuario root y su con-
Modificación de la traseña usual. Es recomendable cambiar la contraseña que utiliza webmin tan
contraseña de root pronto como pueda para que, si es comprometido, no se involucre la con-
traseña de root del servidor; aún si esto provee permisos administrativos im-
portantes en el equipo.
¡Cuidado! Dado que webmin posee tanta funcionalidad, un usuario malicioso
que acceda a él puede comprometer la seguridad de todo el sistema. En gen-
eral, no se recomiendan este tipo de interfaces para sistemas importantes con
fuertes limitaciones de seguridad (firewall, servidores sensibles, etc.).
Webmin se utiliza a través de una interfaz web, pero no necesita instalar Apache. Esencialmente,
este software tiene su propio miniservidor web integrado. De forma predeterminada, este servi-
dor escucha en el puerto 10000 y acepta conexiones HTTP seguras.
Los módulos incluidos cubren una amplia variedad de servicios, entre ellos:
todos los servicios base: creación de usuarios y grupos, administración de archivos
crontab, scripts de inicio, visualización de registros, etc.
Después de realizar unas pocas preguntas durante la instalación a través de Debconf, muchos
paquetes son configurados automáticamente. Puede reconfigurar estos paquetes ejecutando
dpkg-reconfigure paquete.
En la mayoría de los casos, estas configuraciones son muy simples; sólo modifican unas pocas
variables importantes en el archivo de configuración. Generalmente se agrupan estas variables
entre dos líneas de «demarcación» para que la reconfiguración del paquete sólo afecte el área
entre ellas. En otros casos, la reconfiguración no realizará cambios si el script detecta una modi-
ficación manual del archivo de configuración para preservar estas intervenciones humanas (de-
bido a que el script no puede asegurar que sus propias modificaciones no afectarán la configu-
ración existente).
NORMATIVA DEBIAN La Normativa Debian estipula expresamente que se debe hacer todo para
Preservación de cambios preservar los cambios manuales en los archivos de configuración, por lo que
más y más scripts toman precauciones al editar archivos de configuración. El
principio general es simple: el script sólo realizará cambios si conoce el estado
del archivo de configuración, lo que controla comparando la suma de verifi-
cación del archivo con la del último archivo generado automáticamente. Si son
iguales, el script está autorizado a realizar cambios en el archivo de configu-
ración. De lo contrario, determina que el archivo fue modificado y pregunta
por la acción a tomar (instalar el nuevo archivo, guardar el archivo existente
o intentar integrar los nuevos cambios en el archivo actual). Este principio de
El selector es una lista separada por punto y coma de pares [Link] (por ejem-
plo: [Link];[Link]). Un asterisco puede representar todos los subsistemas o todas las
prioridades (por ejemplo: *.alert o mail.*). Puede agrupar varios subsistemas separándolos con
una coma (por ejemplo: auth,[Link]). La prioridad indicada también incluye los mensajes de
prioridad igual o mayor; por lo tanto, [Link] indica los mensajes del subsistema auth de pri-
oridad alert o emerg. Si se agrega un signo de exclamación (!) como prefijo, indica lo contrario;
en otras palabras, prioridades estrictamente menores. Por lo tanto, auth.!notice sólo incluye los
mensajes del subsistema auth con prioridades info o debug. Si se agrega un signo igual (=) como
prefijo corresponde única y exactamente con la prioridad indicada (auth.=notice sólo incluye
los mensajes del subsistema auth con prioridad notice).
Cada elemento en la lista del selector reemplaza elementos anteriores. Así es posible restringir
un conjunto o excluir ciertos elementos del mismo. Por ejemplo, [Link];kern.!err significa
los mensajes del núcleo con prioridades entre info y warn. La prioridad none indica el conjunto
vacío (ninguna prioridad) y puede servir para excluir un subsistema de un conjunto de mensajes.
Por lo tanto *.crit;[Link] indica todos los mensajes con prioridad igual o mayor a crit que no
provengan del núcleo.
VOLVER A LOS Una tubería con nombre es un tipo particular de archivo que funciona como
CIMIENTOS una tubería tradicional (la tubería que crea con el símbolo «|» en una con-
La tubería («pipe») con sola), pero a través de un archivo. Este mecanismo tiene la ventaja de poder
nombre, una tubería relacionar dos procesos que no están relacionados. Todo lo que se escriba en
persistente una tubería con nombre bloquea el proceso que escribe hasta que un proceso
intente leer los datos escritos. Este segundo proceso lee los datos escritos por
el primero, que puede luego continuar ejecutando.
Puede crear estos archivos con el programa mkfifo.
SEGURIDAD Es buena idea grabar los registros más importantes en una máquina separada
Reenvío de registros (tal vez dedicada a este propósito), ya que evitará que cualquier intruso elimine
los rastros de su intromisión (a menos, por supuesto, que también comprometa
este otro servidor). Lo que es más, en el caso de un problema mayor (como un
fallo abrupto del núcleo) tendrá disponible los registros en otro equipo, lo que
aumenta sus probabilidades de determinar la secuencia de eventos que llevó
al fallo.
Para aceptar mensajes de registro enviados por otras máquinas debe recon-
figurar rsyslog: en la práctica es suficiente activar las líneas ya preparadas en
el archivo /etc/[Link] ($ModLoad imudp y $UDPServerRun 514).
NORMATIVA DEBIAN Frecuentemente los paquetes desean registrar un nuevo servidor en el archivo
Registro de un servidor en /etc/[Link], pero la Normativa Debian prohíbe que un paquete mod-
[Link] ifique un archivo de configuración que no le pertenece. Es por esto que se
creó el script updated-inetd (en el paquete del mismo nombre): administra el
archivo de configuración y otros paquetes pueden utilizarlo para registrar un
nuevo servidor en la configuración del superservidor.
Cada línea significativa del archivo /etc/[Link] describe un servidor con siete campos
(separados con espacios):
El número de puerto TCP o UDP o el nombre del servicio (asociado con un número de
puerto estándar con la información en el archivo /etc/services).
El tipo de zócalo: stream para una conexión TCP, dgram para datagramas UDP.
cron es el demonio responsable de ejecutar tareas programadas y recurrentes (todos los días,
todas las semanas, etc.); atd está encargado de los programas a ejecutar una sola vez pero en un
momento específico en el futuro.
En un sistema Unix, muchas tareas están programadas para ejecutarse regularmente:
De forma predeterminada, todos los usuarios pueden programar tareas para ejecutar. Cada
usuario tiene su propio «crontab» en el que pueden almacenarlas. Puede editarlo ejecutan-
do crontab -e (el contenido del mismo es almacenado en el archivo /var/spool/cron/
crontabs/usuario).
El usuario root tiene su propio «crontab», pero también puede utilizar el archivo /etc/crontab
o escribir archivos «crontab» adicionales en el directorio /etc/cron.d. Estas dos últimas solu-
ciones tienen la ventaja de poder especificar el usuario bajo el que se ejecutará el programa.
De forma predeterminada, el paquete cron incluye algunas tareas programadas que ejecutan:
Muchos paquetes Debian dependen de este servicio: agregan sus scripts de mantenimiento en
estos directorios, los cuales garantizan un funcionamiento óptimo de sus servicios.
CASO ESPECIAL En Debian, cron tiene en cuenta los cambios de hora (para horarios de verano
cron y horarios de verano. o, de hecho, cualquier cambio importante en la hora local) de la mejor forma
que le es posible. Por lo tanto, las tareas que deben ejecutarse durante una hora
que nunca existió (por ejemplo: aquellas programadas para las 02:30 durante
el cambio de horario de verano en Francia, ya que el reloj salta de las 02:00 a
las 03:00 directamente) se ejecutarán poco después del cambio de hora (por
lo tanto, alrededor de las 03:00 DST). Por otro lado, en otoño, las tareas serán
ejecutadas sólo una vez cuando podrían ser ejecutadas varias veces (a las 02:30
DST y luego a las 02:30 en horario estándar ya que a las 03:00 DST el reloj
vuelve a las 02:00).
Tenga cuidado, sin embargo, si el orden y el tiempo entre ejecuciones de tar-
eas programadas importa. Debe revisar la compatibilidad de estas limitaciones
con el comportamiento de cron; si es necesario, puede preparar una progra-
mación especial para las dos noches problemáticas del año.
Cada línea significativa de un archivo crontab describe una tarea programada con los siguientes
seis (o siete) campos:
el valor del minuto (número de 0 a 59);
el valor de la hora (de 0 a 23);
el valor del día del mes (de 1 a 31);
el valor del mes (de 1 a 12);
el valor de los días de la semana (de 0 a 7, donde 1 es el lunes y el domingo es tanto el 0
como el 7; también es posible utilizar las tres primeras letras del nombre del día en inglés,
como Sun, Mon, etc.);
el nombre de usuario bajo el que se ejecutará el programa (en el archivo /etc/crontab y
en los fragmentos ubicados en /etc/cron.d/, pero no en los archivos de cada usuario);
el programa a ejecutar (cuando se cumpla la condición definida por los primeros cinco
campos).
Todos estos detalles están documentados en la página de manual crontab(5).
Puede expresar cada valor como una lista de valores posibles (separados por coma). La sintaxis
a-b describe el intervalo de todos los valores entre a y b. La sintaxis a-b/c describe el intervalo
#Formato
#min hora dia mes dds programa
SUGERENCIA Para ejecutar un programa sólo una vez, justo después de iniciar el equipo,
Ejecución de un programa puede utilizar el macro @reboot (reiniciar cron no disparará aquello progra-
durante el inicio mado con @reboot). Este macro reemplaza los primeros cinco campos de un
elemento en el archivo «crontab».
anacron es el demonio que completa cron en equipos que no están encendidos todo el tiempo.
Dado que generalmente las tareas recurrentes están programadas para la mitad de la noche, no
ejecutarán nunca si la máquina está apagada en esos momentos. El propósito de anacron es eje-
cutarlas teniendo en cuenta los períodos de tiempo en los que el equipo no estuvo funcionando.
Sepa que anacron frecuentemente ejecutará dichos programas unos minutos después de iniciar
la máquina, lo que utilizará poder de procesamiento del equipo. Es por esto que se ejecutan
las tareas en el archivo /etc/anacrontab con el programa nice que reduce su prioridad de
ejecución, limitando así su impacto en el resto del sistema. Tenga en cuenta que el formato
de este archivo no es el mismo que el de /etc/crontab; si tiene necesidades especiales para
anacron revise la página de manual anacrontab(5).
VOLVER A LOS Los sistemas Unix (y, por lo tanto, Linux) son sistemas multitarea y mul-
CIMIENTOS tiusuario. Varios procesos puede ejecutar en paralelo y pertenecer a diferentes
Prioridades y nide usuarios: el núcleo mediará el acceso a los recursos para los diferentes pro-
cesos. Como parte de esta tarea tiene el concepto de prioridad, que permite
favorecer a ciertos procesos por sobre otros según sea necesario. Cuando sabe
que un proceso puede ejecutar con prioridad baja, puede indicarlo ejecután-
dolo con nice programa. El programa entonces tendrá una porción más pe-
queña del CPU y tendrá un menor impacto sobre otros procesos en ejecución.
Por supuesto, si no hay otros procesos que necesiten ejecutar el programa no
será restringido artificialmente.
nice funciona con niveles de «bondad»: los niveles positivos (de 1 a 19) re-
ducen progresivamente la prioridad mientras que los niveles negativos (de -
1 a -20) aumentan la prioridad — pero sólo root puede utilizar estos niveles
negativos. A menos que se indique lo contrario (revise la página de manual
nice(1)), nice aumentará en 10 el nivel actual.
Si descubre que una tarea que está procesando debería haberse ejecutado con
nice no es muy tarde para corregirlo; el programa renice modifica la prioridad
de cualquier proceso que está en ejecución en la dirección que desee (pero
reducir la «bondad» de un proceso está reservado para el usuario root).
Instalar el paquete anacron desactiva la ejecución via cron de los scripts en los directorios
/etc/[Link]/, /etc/[Link]/, /etc/[Link]/ y /etc/[Link]/. Esto
9.9. Cuotas
El sistema de cuotas permite limitar el espacio en disco reservado para un usuario o grupo de
usuarios. Para configurarlo, debe tener un núcleo compatible (compilado con la opción CONFIG_
QUOTA) — como es el caso de los núcleos Debian. Puede encontrar el software de administración
de cuotas en el paquete Debian quota.
Para activarlo en un sistema de archivos debe indicar las opciones usrquota y grpquota en el
archivo /etc/fstab para las cuotas de usuario y grupos, respectivamente. Al reiniciar el equipo
se actualizarán las cuotas cuando no exista actividad en el disco (una condición necesaria para
poder contabilizar apropiadamente el espacio en disco ya utilizado).
Ejecutar edquota usuario (o edquota -g grupo) le permite modificar los límites mientras
examina el uso actual del espacio en disco.
YENDO MÁS ALLÁ Puede utilizar el programa setquota en un script para modificar automática-
Definición de cuotas con un mente muchas cuotas. Su página de manual setquota(8) contiene los detalles
script de la sintaxis que debe utilizar.
Si ejecuta edquota -t puede definir un «período de gracia» máximo autorizado durante el que
se puede exceder un límite suave. Luego de este período se interpretará el límite suave como
uno duro y el usuario deberá reducir su uso de espacio en disco por debajo de este límite para
poder escribir en disco duro.
YENDO MÁS ALLÁ Para definir una cuota automática para usuarios nuevos, debe configurar un
Configuración de una cuota usuario patrón (con edquota o setquota) e indicar su nombre de usuario en
predeterminada para nuevos la variable QUOTAUSER en el archivo /etc/[Link]. Se aplicará automáti-
usuarios camente dicha configuración de cuota a cada nuevo usuario creado con el
programa adduser.
9.10. Respaldo
Habiendo descartado los respaldos en cintas por ser lentos y costosos, se respaldarán los datos
en discos duros en un servidor dedicado en el que utilizarán RAID por software (revise la Sección
12.1.1, «RAID por software» página 308) que protegerá los datos contra errores de disco duro.
No se respaldarán individualmente los equipos de escritorio, pero se le informa a los usuarios
que se respaldará su cuenta personal en el servidor de archivos del departamento. Se utiliza di-
bank:
/backup
exclude:
lost+found/
core
*~
Runall:
root 22:00
expire-default: +15 days
expire-rule:
# MIN HR DOM MON DOW STRFTIME_FMT
client: [Link]
tree: /
xdev: 1
index: gzip
image-default: %Y %m %d
exclude:
/var/cache/apt/archives/*.deb
/var/cache/man/**
/tmp/**
/var/tmp/**
*.bak
EN LA PRÁCTICA Cuando dirvish necesita guardar datos en una máquina remota, utilizará ssh
Respaldos remotos sobre para conectarse con ella, e iniciará rsync en modo servidor. Esto necesita
SSH que el usuario root pueda conectarse automáticamente. Las llaves de auten-
ticación SSH permiten esto exactamente (revise la Sección [Link], «Autenti-
cación basada en llaves» página 196).
Los equipos de escritorio, que no son respaldados, serán fáciles de reinstalar desde DVD-ROMs
personalizados que fueron preparados con Simple-CDD (revise la Sección 12.3.3, «Simple-CDD: la
solución todo-en-uno» página 353). Dado que se realiza una instalación desde cero, se pierden
todas las personalizaciones que pueden haberse realizado luego de la instalación inicial. Esto
no es un problema ya que los sistemas están conectados a un directorio LDAP central para las
cuentas de usuario y la mayoría de las aplicaciones de escritorio son preconfiguradas gracias a
dconf (revise la Sección 13.3.1, «GNOME» página 370 para más información al respecto).
Los administradores de Falcot Corp están al tanto de las limitaciones de sus políticas de respaldo.
Debido a que no pueden proteger el servidor de respaldo tan bien como una cinta en una caja
fuerte a prueba de fuego, lo instalaron en una habitación separada para que desastres como
fuego en la sala de servidores no destruyan los respaldos junto con todo lo demás. Lo que es
más, realizan un respaldo incremental en DVD-ROM una vez por semana — sólo se incluyen los
archivos que fueron modificados desde el último respaldo.
YENDO MÁS ALLÁ Muchos servicios (como bases de datos SQL y LDAP) no pueden respaldarse
Respaldo de servicios SQL y simplemente copiando sus archivos (a menos que sean interrumpidos apropi-
LDAP adamente mientras se crean estos respaldos, lo que frecuentemente es prob-
lemático ya que fueron pensados para estar disponibles todo el tiempo). Como
tal, es necesario utilizar un mecanismo de «exportación» para crear un «vol-
cado de datos» que pueda ser respaldado de forma segura. Generalmente son
archivos grandes, pero se comprimen fácilmente. Para reducir el espacio de
almacenamiento necesario, sólo almacenará un archivo de texto completo por
semana y diferencias (diff) cada día, que puede crear utilizando algo simi-
lar a diff archivo_de_ayer archivo_de_hoy. El programa xdelta produce
diferencias incrementales de volcados binarios.
CULTURA Históricamente, la forma más sencilla de realizar un respaldo en Unix era al-
TAR, el estándar para macenar un compendio TAR en una cinta. Inclusive el programa tar obtuvo
respaldos en cinta su nombre de «compendio en cinta» («Tape ARchive»).
9.11.1. Introducción
Antes que existieran las conexiones en caliente, era sencillo asignar un nombre fijo a un dis-
positivo. Simplemente estaba basado en la posición del dispositivo en su canal correspondiente.
Pero esto no es posible cuando dichos dispositivos puede aparecer y desaparecer del canal. El ca-
so típico es el uso de una cámara digital y una llave USB, ambos serán un disco para el equipo. El
primero en conectarse puede ser /dev/sdb y el segundo /dev/sdc (siempre que /dev/sda rep-
resente el disco duro del equipo en sí). El nombre del dispositivo no es fijo, depende del orden
en el que se conecte los dispositivos.
Además, más y más controladores utilizan valores dinámicos para los números mayor/menor
de los dispositivos, lo que hace imposible tener elementos estáticos para dichos dispositivos ya
que estas características esenciales puede cambiar luego de reiniciar el equipo.
Se creó udev precisamente para solucionar este problema.
EN LA PRÁCTICA Muchos equipos poseen múltiples tarjetas de red (a veces dos interfaces ca-
Administración de tarjetas bleadas y una interfaz inalámbrica) y, con la mayoría de los canales compat-
de red ibles con hotplug, el núcleo 2.6 ya no garantiza un nombre fijo para cada in-
terfaz de red. ¡Pero un usuario que desea configurar su red en /etc/network/
interfaces necesita un nombre fijo!
Sería difícil pedirle a todos los usuarios que creen sus propias relgas udev
para evitar este problema. Es por esto que se configuró udev de una for-
ma particular: cuando inicia por primera vez (y, de forma más general, cada
vez que detecta una nueva tarjeta de red) utiliza el nombre de la interfaz de
red y su dirección MAC para crear nuevas reglas que le asignarán el mismo
nombre cada vez que inicie. Almacena estas reglas en /etc/udev/rules.d/
[Link].
Este mecanismo tiene unos efectos secundarios que debería conocer. Consid-
eremos el caso de una máquina que sólo tiene una tarjeta de red PCI. Lógi-
camente, la interfaz de red se llama eth0. Digamos ahora que la tarjeta de-
ja de funcionar y el administrador la reemplaza; la nueva tarjeta tendrá una
Consideremos el caso de una simple llave USB e intentemos asignarle un nombre fijo. Primero
debe encontrar los elementos que la identificarán de manera unívoca. Para ello, conéctela y
ejecuta udevadm info -a -n /dev/sdc (reemplazando /dev/sdc con el nombre real asignado
a la llave).
# udevadm info -a -n /dev/sdc
[...]
looking at device '/devices/pci0000:00/[Link].3/usb1/1-2/1-2.2/1-2.2:1.0/host9/
å target[Link]/[Link]/block/sdc':
Una vez que haya guardado estas reglas en un archivo, llamado por ejemplo /etc/udev/rules.
d, puede desconectar y conectar la llave USB. Podrá ver que /dev/usb_key/disk representa el
disco asociado con la llave USB y /dev/usb_key/part1 como su primera partición.
YENDO MÁS ALLÁ Al igual que muchos demonios, udevd almacena registros en /var/log/
Depuración de la [Link]. Pero no es muy descriptivo de forma predeterminada y gen-
configuración de udev eralmente no son suficientes para entender lo que está sucediendo. Ejecu-
tar udevadm control --log-priority=info aumenta el nivel de información
y soluciona este problema. udevadm control --log-priority=err vuelve al
valor predeterminado.