Los comandos r de Berkeley son un conjunto de programas informáticos diseñados para permitir a los usuarios de un sistema Unix iniciar sesión o emitir comandos a otro ordenador Unix a través de una red informática TCP/IP . [1] Los comandos r fueron desarrollados en 1982 por el Grupo de Investigación de Sistemas Informáticos de la Universidad de California, Berkeley , basándose en una implementación temprana de TCP/IP (la pila de protocolos de Internet ). [2]
El CSRG incorporó los comandos r en su sistema operativo Unix , Berkeley Software Distribution (BSD). Los comandos r se estrenaron en BSD v4.1. [2] Entre los programas de la suite se encuentran: (remote copy ), (remote execution ), (remote login ), (remote shell ), , y (remote who ). [2] [3]rcp
rexec
rlogin
rsh
rstat
ruptime
rwho
Los comandos r fueron una innovación significativa y se convirtieron en estándares de facto para los sistemas operativos Unix. [4] [5] Con una adopción pública más amplia de Internet, sus vulnerabilidades de seguridad inherentes se convirtieron en un problema, [6] y a partir del desarrollo de los protocolos y aplicaciones Secure Shell en 1995, su adopción suplantó por completo la implementación y el uso de los comandos r (y Telnet ) en sistemas en red. [7]
El paquete original de Berkeley también proporciona rlogin
funciones como rcp
(copia remota, que permite copiar archivos a través de la red) y rsh (shell remoto, que permite ejecutar comandos en una máquina remota sin que el usuario inicie sesión en ella).
A modo de ejemplo, el protocolo es el siguiente: [11]
Cliente:<nulo> nombre
de usuario en el cliente<null> nombre
de usuario en el servidor<null>tipo de terminal / velocidad en baudios del terminal <null>Servidor:
El servidor comprobará que el usuario tenga acceso. Si es así, devuelve un mensaje sin nada (ni siquiera un carácter nulo ), lo que significa que la conexión está establecida. Por ejemplo:
Cliente:<nulo>bostic<nulo>kbostic<nulo>vt100/9600<nulo>Servidor:
Tanto rlogin
y rsh
comparten el esquema de control de acceso /etc/hosts.equiv
(se aplica a todos los usuarios del servidor) como $HOME/.rhosts
(se aplica solo al usuario que coloca el archivo en su carpeta de inicio), aunque se conectan a diferentes demonios. rlogin
se conecta a rlogind
, mientras que rsh
se conecta a rshd
. hosts.equiv
y .rhosts
utiliza el mismo formato. A continuación se muestran algunos aspectos del formato: [12] [13]
anfitrión1host2 usuario_a-host3+@grupo1 -usuario_b-@grupo2
Esto permite que todos los usuarios del host1 inicien sesión, que el usuario_a inicie sesión en el host2, que ningún usuario del host3, todos los usuarios del grupo1 excepto el usuario_b y ningún usuario del grupo2.
rlogin
permite a un usuario iniciar sesión en otro servidor a través de una red informática , utilizando el puerto de red TCP 513.
rlogin
es también el nombre del protocolo de capa de aplicación utilizado por el software, parte del conjunto de protocolos TCP/IP . Los usuarios autenticados pueden actuar como si estuvieran físicamente presentes en la computadora. El RFC 1282, en el que se definió, establece: "La función proporciona un terminal virtual controlado por flujo local y con eco remoto con un vaciado adecuado de la salida". se comunica con un demonio , , en el host remoto. es similar al comando Telnet , pero no es tan personalizable y solo puede conectarse a hosts tipo Unix.rlogin
rlogin
rlogind
rlogin
rsh
Abre un shell en una computadora remota sin un procedimiento de inicio de sesión . Una vez conectado, el usuario puede ejecutar comandos en la computadora remota a través de la interfaz de línea de comandos del shell . rsh
Pasa la entrada y la salida a través de los flujos estándar y envía la salida estándar a la consola del usuario . A través de la red, la entrada estándar y la salida estándar fluyen a través del puerto TCP 514, mientras que el error estándar fluye a través de un puerto TCP diferente, que el rsh
daemon ( rshd
) abre. [14]
Al igual que rsh
, rexec
permite al usuario ejecutar comandos de shell en una computadora remota. Sin embargo, a diferencia del servidor rsh, el rexec
servidor ( rexecd
) requiere inicio de sesión: autentica a los usuarios leyendo el nombre de usuario y la contraseña (sin cifrar) del socket de red . [15] rexec
utiliza el puerto TCP 512.
rcp
puede copiar un archivo o directorio del sistema local a un sistema remoto, de un sistema remoto al sistema local o de un sistema remoto a otro. [16] Los argumentos de la línea de comandos de cp
y rcp
son similares, pero en rcp
los archivos remotos se anteponen con el nombre del sistema remoto:
archivo rcp.txt subdominio.dominio:~/home/foo/archivo.txt
Al igual que el comando de copia de Unix cp , rcp
sobrescribe un archivo existente del mismo nombre en el destino; a diferencia de cp
, no proporciona ningún mecanismo para advertir al usuario antes de sobrescribir el archivo de destino. [16] Al igual que rsh
, rcp
utiliza el puerto TCP 514. [17]
Así como el comando who enumera los usuarios que han iniciado sesión en el sistema Unix local, rwho
también enumera aquellos usuarios que han iniciado sesión en todos los sistemas Unix multiusuario de la red local. [18] rwho
El demonio de , rwhod
mantiene una base de datos del estado de los sistemas Unix en la red local. El demonio y su base de datos también son utilizados por el ruptime
programa. [19]
rstat
devuelve estadísticas de rendimiento del kernel.
Así como el uptime
comando muestra cuánto tiempo ha estado funcionando un sistema Unix desde el último reinicio, ruptime
solicita un informe de estado de todos los equipos de la red local. Luego devuelve el informe de tiempo de actividad. Si un equipo no respondió dentro del límite de tiempo, ruptime
informa que el sistema está inactivo . [20] Esta información es rastreada y almacenada por el daemon rwhod
, que también es utilizado por el comando rwho. [19]
Los comandos r que implican autenticación de usuario ( rcp
, rexec
, rlogin
, y rsh
) comparten varias vulnerabilidades de seguridad graves:
.rlogin
(o .rhosts
) es fácil de usar de forma indebida. Están diseñados para permitir inicios de sesión sin contraseña , pero su dependencia de nombres de usuario, nombres de host y direcciones IP remotos es explotable. Por este motivo, muchos administradores de sistemas corporativos prohíben .rhosts
los archivos y examinan activamente sus redes en busca de infractores.rlogin
cliente de la parte remota proporcione información honesta, incluido el puerto de origen y el nombre del host de origen. Un cliente malintencionado puede falsificar esto y obtener acceso, ya que el rlogin
protocolo no tiene medios para autenticar que el cliente se está ejecutando en una máquina confiable. Tampoco puede verificar si el cliente solicitante en una máquina confiable es el rlogin
cliente real, lo que significa que los programas maliciosos pueden simular ser un rlogin
cliente que cumple con los estándares utilizando los mismos protocolos..rhosts
archivos falsos, lo que significa que cualquiera de sus fallas de seguridad plagará automáticamente rlogin
.Debido a estos problemas, los comandos r cayeron en un desuso relativo (muchas distribuciones Unix y Linux ya no los incluyen de forma predeterminada). Muchas redes que antes dependían de ellos rlogin
los telnet
han reemplazado por SSH y su rlogin
equivalente slogin
. [21] [22]