10. Entrando y saliendo del sistema

"Jams pertenecera a un club en el que me aceptaran como miembro" 
(Groucho Marx)

Esta seccin describe lo que ocurre cuando un usuario accede o sale del 
sistema. Las diferentes interacciones de los procesos en segundo plano, 
ficheros de bitcora, ficheros de configuracin, y dems sern 
descritas en mayor o menor medida.

10.1. Accediendo a travs de terminales

La figura 10-1 muestra cmo se realiza la entrada a travs del 
terminal. En primer lugar, "init" se asegura que hay un programa "getty" 
disponible para la conexin del terminal (o consola). "getty" escucha el 
terminal y espera para notificar al usuario que est listo para acceder al 
sistema (generalmente eso significa que el usuario debe escribir algo). 
Cuando se detecta a un usuario, "getty" escribe un mensaje de 
bienvenida (almacenado en /etc/issue), pregunta por el nombre de usuario, y 
finalmente ejecuta el programa "login". "login" coge el nombre de usuario 
como parmetro, y le solicita al usuario su contrasea. Si estos 
concuerdan, "login" ejecuta el intrprete de comandos configurado para el 
usuario; de otra forma simplemente sale y termina el proceso (quiz despus 
de dar otra oportunidad al usuario para introducir su nombre de usuario 
y contrasea). "init" percibe que el proceso ha terminado, y ejecuta un 
nuevo "getty" para el terminal.

Figura 10-1. Accediendo a travs de terminales: la interaccin de init, 
getty, login y el intrprete de comandos.

Tenga en cuenta que el nico proceso nuevo es aqul creado por "init" 
(utilizando la llamada al sistema "fork"); "getty" y "login" nicamente 
reemplazan el programa ejecutado durante el proceso (utilizando la 
llamada al sistema "exec").

Se necesita un programa independiente, para avisar al usuario, en el 
caso de lneas series, ya que puede ser complicado (y tradicionalmente 
as es) darse cuenta cundo se activa un terminal. "getty" tambin se 
adapta a la velocidad y otros parmetros de la conexin, lo que es 
especialmente importante para conexiones telefnicas, donde estos parmetros 
pueden variar entre llamada y llamada.

Existen varias versiones de "getty" e "init" que se pueden utilizar, 
cada una con sus ventajas e inconvenientes. Es buena idea aprender las 
versiones de su sistema, y tambin las otras versiones (puede utilizar el 
"Linux Software Map" para buscarlas). Si no tiene conexin telefnica, 
probablemente no deba preocuparse sobre "getty", pero "init" ser 
todava importante.

10.2. Accediendo a travs de la red

Dos ordenadores de la misma red generalmente se encuentran enlazados 
mediante un cable fsico. Cuando se comunican por la red, los programas 
de cada ordenador que toman parte en la comunicacin estn conectados a 
travs de una conexin virtual, una especie de cable imaginario. En lo 
que concierne a cada uno de los programas involucrados en la conexin 
virtual, poseen el monopolio de su propio cable. Sin embargo, puesto que 
el cable no es real, nicamente imaginario, los sistemas operativos de 
ambos ordenadores pueden tener varias conexiones virtuales compartiendo 
el mismo cable fsico. De esta forma, utilizando un nico cable, varios 
programas pueden comunicarse sin tener en cuenta las otras comunicaciones. Es 
incluso posible que varios ordenadores utilicen el mismo cable; las conexiones 
virtuales existen entre dos ordenadores, y los otros ordenadores desconocen 
aquellas conexiones en la que no participan.

Esta es una descripcin complicada y abstracta de la realidad. Por otro 
lado puede resultar suficiente para comprender por qu los accesos por 
red son diferentes a los accesos normales. Las conexiones virtuales se 
establecen cuando hay dos programas en diferentes ordenadores que 
desean comunicarse. Como es en principio posible acceder desde un ordenador 
a cualquier otro de la red, existe un nmero elevado de conexiones 
virtuales potenciales. Debido a esto, no es prctico iniciar "getty" para 
cada acceso potencial.

Hay un nico proceso inetd (correspondiente a "getty") que maneja todos 
los accesos por la red. Cuando percibe que un acceso llega por la red 
(esto es, se da cuenta de que llega una nueva conexin virtual de algn 
otro ordenador), arranca un nuevo proceso para manejar ese acceso 
individual. El proceso original se mantiene y contina escuchando nuevos 
accesos.

Para hacer las cosas un poco ms complicadas, existe ms de un 
protocolo de comunicacin para accesos de red. Los dos ms importantes son 
"telnet" y "rlogin". Adems de accesos, existen muchas otras conexiones 
virtuales que se pueden realizar (mediante FTP, Gopher, HTTP, y otros 
servicios de red). Sera ineficiente tener procesos separados escuchando 
cada tipo de conexin, as que en su lugar hay uno slo escuchando que 
puede reconocer el tipo de conexin y puede iniciar el tipo de programa 
correcto para proveer el servicio. Este programa nico se llama "inetd"; 
vea la Gua de Administracin de Red de Linux para ms informacin.

10.2. Lo que hace login

El programa "login" cuida de la autenticacin del usuario (asegurndose 
que el nombre de usuario y contrasea concuerdan), y establece un 
entorno inicial para el usuario activando permisos para la lnea serie e 
iniciando el intrprete de comandos.

Como parte de la configuracin inicial se incluye mostrar el contenido 
del archivo /etc/motd (un pequeo mensaje para cada da) y comprobar el 
correo electrnico. Esto puede desactivarse creando un archivo llamado 
.hushlogin en el directorio inicial del usuario.

Si el archivo /etc/nologin existe, los accesos son deshabilitados. Ese 
archivo se crea tpicamente al hacer "shutdown" y similares. "login" 
comprueba la existencia de este archivo, y no aceptar ningn acceso si 
existe. En el caso de que exista, "login" muestra su contenido en el 
terminal antes de salir.

"login" almacena todos los accesos fallidos en un archivo de registro 
del sistema (a travs de "syslog"). Tambin almacena todos los accesos 
de root. Todos ellos pueden ser tiles para seguir la pista de intrusos.

La gente actualmente conectada aparece en el archivo /var/run/utmp. 
Este archivo es vlido nicamente hasta que el sistema es reiniciado o 
apagado; se limpia cuando el sistema es iniciado. Muestra cada usuario y 
el terminal (o conexin de red) que est usando, adems de alguna 
informacin til. Los comandos "who", "w" y similares miran en utmp para ver 
quin est conectado.

Todos los accesos con xito se registran en /var/log/wtmp. Este archivo 
crecer sin lmite, as que debe ser limpiado de manera regular, por 
ejemplo a travs de un trabajo semanal "cron" que se encargue de 
limpiarlo. [37] El comando "last" muestra el contenido de wtmp.

Tanto utmp como wtmp se encuentran en formato binario (vea la pgina de 
manual de utmp); desafortunadamente no es conveniente examinarlos sin 
programas especiales.

10.4. X y xdm

X proporciona accesos a travs de xdm; tambin: xterm -ls

10.5. Control de acceso

Tradicionalmente la base de datos de usuarios se encuentra en 
/etc/passwd. Algunos sistemas utilizan contraseas "shadow", y las almacenan 
en 
/etc/shadow. Los sitios con muchos ordenadores que comparten las 
cuentas utilizan NIS o algn otro mtodo para almacenar la base de datos de 
usuarios; pueden copiar automticamente la base de datos de una 
localizacin central al resto de ordenadores.

La base de datos de usuarios contiene no slo las contraseas, sino 
tambin informacin adicional sobre los usuarios, como sus nombres reales, 
directorios iniciales, y los intrpretes de comandos. Esta otra 
informacin necesita ser pblica, de manera que cualquiera pueda leerla. De 
esta forma la contrasea se almacena encriptada. Esto provoca que 
cualquiera con acceso a la contrasea pueda usar varios mtodos criptogrficos 
para adivinarla, sin ni siquiera intentar acceder al sistema. Las 
contraseas "shadow" intentan evitar esto moviendo las contraseas a otro 
archivo, el cul slo puede leer root (la contrasea se almacena 
igualmente encriptada). En cualquier caso, instalar las contraseas "shadow" 
ms adelante en un sistema que no las soporta puede ser complicado.

Con o sin contraseas, es importante asegurar que todas las contraseas 
en un sistema son vlidas, es decir, no son fcilmente adivinables. El 
programa "crack" puede utilizarse para romper contraseas; cualquier 
contrasea que pueda encontrar es por definicin una mala contrasea. 
Mientras que "crack" puede ser ejecutado por intrusos, tambin puede ser 
ejecutado por el administrador del sistema para evitar malas 
contraseas. El propio programa "passwd" puede forzar buenas contraseas; esto 
es 
de hecho ms eficiente en trminos de ciclos de CPU, ya que romper 
contraseas necesita de bastantes clculos.

La base de datos de los grupos se guarda en /etc/group; para sistemas 
con contraseas "shadow", puede existir /etc/shadow.group.

Generalmente root no puede acceder a travs de la mayora de terminales 
o a travs de la red, slo mediante los terminales listados en el 
archivo /etc/securetty. Esto hace necesario tener acceso fsico a uno de 
estos terminales. Por lo tanto es posible acceder mediante cualquier 
terminal como otro usuario, y utilizar el comando "su" para convertirse en 
root.

10.6. Intrprete de comandos

Cuando un intrprete de comandos se inicia, automticamente ejecuta uno 
o ms archivos predefinidos. Interpretes diferentes ejecutan archivos 
diferentes; vea la documentacin de cada uno para ms informacin.

La mayora de intrpretes de comandos primero ejecutan un archivo 
global, por ejemplo, el intrprete Bourne (/bin/sh) y sus derivados ejecutan 
/etc/profile; adicionalmente, ejecutan .profile del directorio inicial 
del usuario. /etc/profile permite al administrador del sistema tener un 
entorno comn para los usuarios, especialmente estableciendo la 
variable PATH para incluir directorios de comandos locales adems de los 
normales. Por otro lado, .profile permite al usuario personalizar el entorno 
a su propio gusto sobreescribiendo, si es necesario, el entorno por 
defecto.



