 
 
 
 
 
 
 
  
 Siguiente: XWindow
 Subir: Algunos servicios y protocolos
 Anterior: Servidores WWW
     Índice General 
Los servicios r-* de Unix BSD (aparecieron inicialmente en la versión
4.2 de esta variante de Unix) son herramientas con una parte cliente y 
una servidora que permiten la conexión remota entre máquinas, principalmente
para servicios de terminal remota y transferencia de ficheros. Las herramientas
clientes son rsh, rlogin y rcp, mientras que las servidoras
son demonios como rexecd, rshd o rlogind (en algunas versiones
de Unix, con in. delante del nombre del demonio); rdist y rdistd, otro par de estas herramientas r-*, no los vamos a tratar 
aquí.
rlogin (puerto 513, TCP) se utiliza como terminal virtual de un 
sistema Unix , de una forma muy parecida a TELNET. rsh (puerto 514,
TCP) es utilizado para ejecutar comandos en una máquina remota sin 
necesidad de acceder a ella, y rcp (vía rsh) para copiar
ficheros entre diferentes máquinas:
luisa:~# rlogin -l toni rosita
Overflow on /dev/null, please empty the bit bucket.
rosita:~$ exit
logout
rlogin: connection closed.
luisa:~# rsh -l toni rosita id
uid=1000(toni) gid=100(users) groups=100(users)
luisa:~# rcp prueba.tex toni@rosita:/tmp/
luisa:~#
Como vemos, la última orden no ha solicitado ninguna contraseña; ha
copiado el fichero local `prueba.tex' en el directorio /tmp/ del
sistema remoto, bajo la identidad del usuario toni. A continuación
veremos por qué no se ha pedido clave para realizar esta acción.
Estos servicios pretenden evitar el tránsito de contraseñas por la red,
ya que este movimiento de claves implica molestias a los usuarios y también
problemas de seguridad; para conseguirlo, entran en juego lo que los 
diseñadores del sistema de red de Unix BSD denominaron `máquinas fiables'
y `usuarios fiables': cualquier usuario, puede hacer uso 
de recursos de una máquina remota sin necesidad de una clave si su conexión 
proviene de una máquina fiable o su nombre de usuario es fiable.
Una máquina se puede considerar fiable de dos formas: o bien su
nombre se encuentra en 
/etc/hosts.equiv, o bien se encuentra en un
fichero denominado .rhosts y situado en el $HOME de algún
usuario. Si estamos en el primer caso, cualquier usuario (excepto el root)
del sistema remoto - y fiable - puede hacer acceder a nuestro equipo 
bajo el mismo login que tiene en el primero, sin necesidad de claves. En
el segundo caso, utilizando los ficheros .rhosts, cualquier usuario del
sistema remoto podrá conectar al nuestro pero sólo bajo el nombre de 
usuario en cuyo $HOME se encuentra el archivo. Por ejemplo, imaginemos
la siguiente configuración:
rosita:~# cat /etc/hosts.equiv
luisa
rosita:~# cat ~toni/.rhosts
anita
rosita:~#
En esta situación, cualquier usuario de luisa puede acceder a rosita si su nombre de usuario es el mismo; además, el usuario toni de anita puede también conectar a rosita sin necesidad de 
ninguna contraseña:
anita:~$ rlogin rosita
In the long run, every program becomes rococo, and then rubble.
                -- Alan Perlis
rosita:~$ id
uid=1000(toni) gid=100(users) groups=100(users)
rosita:~$
Aparte de máquinas fiables habíamos hablado de usuarios fiables; la
idea es la misma que antes, pero aplicándola ahora a nombres de usuario junto
a (o en lugar de) nombres de máquina. Podemos indicar estos nombres tanto en 
/etc/hosts.equiv como en los archivos .rhosts; no obstante, la 
primera
opción no es recomendable, ya que estaríamos permitiendo al usuario
fiable del sistema remoto acceder sin contraseña a cualquier cuenta de
nuestra máquina. De esta forma, si deseamos crear usuarios fiables de 
sistemas remotos, es necesario hacerlo en los archivos .rhosts. Por 
ejemplo, imaginemos que el usuario toni de nuestra máquina tiene un 
nombre de usuario distinto (antonio) en un sistema remoto, y desea 
establecer una relación de confianza; para ello creará en su $HOME
el siguiente archivo .rhosts:
rosita:~# cat ~toni/.rhosts
amparo antonio
rosita:~#
Entonces, desde la máquina amparo el usuario antonio podrá 
acceder a la cuenta de toni en nuestro sistema sin utilizar contraseñas:
amparo:~$ id
uid=102(antonio) gid=10(staff)
amparo:~$ rlogin -l toni rosita
It is practically impossible to teach good programming style to
students that have had prior exposure to BASIC: as potential
programmers they are mentally mutilated beyond hope of
regeneration.
                -- Dijkstra
rosita:~$ id
uid=1000(toni) gid=100(users) groups=100(users)
rosita:~$
Como podemos ver, las relaciones de confianza entre equipos Unix pueden ser
muy útiles y cómodas, pero al mismo tiempo muy peligrosas: estamos confiando
plenamente en sistemas remotos, por lo que si su seguridad se ve comprometida
también se ve la nuestra. Las máquinas fiables se han de reducir a equipos
de la misma organización, y administrados por la misma persona; además, 
es necesario tener siempre presente que si tenemos habilitados los servicios
r-* cualquier usuario puede establecer relaciones de confianza, lo que
puede suponer una violación de nuestra política de seguridad. Es 
conveniente chequear los directorios $HOME en busca de ficheros .rhosts (en la sección 13.2.6 se presentaba un shellscript
que convenientemente planificado puede ayudarnos en esta tarea); muchos 
administradores prefieren no complicarse buscando estos ficheros, y configuran
sus sistemas para que en cada $HOME exista un fichero con este nombre,
propiedad de root y con modo 000: así los usuarios no tienen 
ocasión de otorgar confianza a sistemas remotos. Esto se puede conseguir 
con el siguiente shellscript:
#!/bin/sh
for i in `cat /etc/passwd |awk -F: '{print $6}'`; do
    cd $i
    > .rhosts
    chmod 0 .rhosts
done
Las relaciones de confianza son transitivas: si una máquina confía en
otra, lo hace también en todas en las que confía ella. De esta forma
se crean anillos de confianza entre máquinas, y como las relaciones suelen
estar basadas en el nombre del equipo se trata de objetivos ideales para un
atacante mediante IP Spoofing: si un pirata consigue hacer pasar su equipo
por uno de los confiables, automáticamente ha conseguido acceso - casi 
ilimitado - al resto de las máquinas.
 
 
 
 
 
 
 
  
 Siguiente: XWindow
 Subir: Algunos servicios y protocolos
 Anterior: Servidores WWW
     Índice General 
2003-08-08