Node:El servidor de autentificacion de contrasen~as, Next:, Previous:Iniciando un repositorio, Up:Administracion del Repositorio



El servidor de autentificacion de contrasen~as

Antes de seguir los pasos necesarios para configurar el servidor de contrase�as vamos a examinar c�mo funcionan este tipo de conexiones en teor�a. Cuando un cliente remoto CVS usa el m�todo :pserver: para conectarse a un repositorio, el cliente est� contactando en realidad con un n�mero de puerto espec�fico en la m�quina servidora - en concreto el n�mero de puerto 2401 (que es 49 al cuadrado, si le interesan este tipo de cosas). El puerto 2401 es el puerto designado por defecto para el servidor pserver de CVS, aunque se podr�a configurar para usar un puerto diferente siempre que el cliente y el servidor est�n de acuerdo en ello.

El servidor CVS en realidad no est� esperando conexiones a ese puerto - el servidor no empezar� hasta que realmente llegue una conexi�n. En vez de ello, el programa Unix "inetd" (InterNET Daemon) est� escuchando en ese puerto, y necesita saber que cuando reciba una petici�n de conexi�n ahi, deber�a iniciar el servidor CVS y conectarlo al cliente entrante.

Esto se consigue modificando los ficheros de configuraci�n de inetd: /etc/services y /etc/inetd.conf. El fichero de servicios asigna n�meros de puerto a nombres de servicios e inetd.conf le dice a inetd qu� hacer para un nombre de servicio dado.

Primero ponga una l�nea como �sta en /etc/services (despu�s de asegurarse de que la l�nea no existe ya):

cvspserver	2401/tcp

Luego, escriba esto en /etc/inetd.conf:

cvspserver stream tcp nowait root /usr/local/bin/cvs cvs \
   --allow-root=/usr/local/nuevorepos pserver

(En el fichero real, esto deber� ser una �nica l�nea larga, sin barra inversa \). Si su sistema usa una envoltura de TCP ("tcp wrapper", N. del T.), puede que quiera usar algo como esto en vez de lo anterior:

cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/local/bin/cvs \
   --allow-root=/usr/local/nuevorepos pserver

Ahora reinicie inetd para que tenga en cuenta los cambios en sus ficheros de configuraci�n (si no sabe c�mo reiniciar el demonio, simplemente reinicie la m�quina - esto tambi�n funcionar�).

Esto es suficiente para permitir conexiones, pero tambi�n querr� configurar contrase�as especiales de CVS - separadas de las contrase�as de login de los usuarios - de modo que la gente pueda acceder al repositorio sin poner en peligro la seguridad general del sistema.

El fichero de contrase�as de CVS es CVSROOT/passwd en el repositorio. No se cre� por defecto cuando ejecut� cvs init, porque CVS no sabe seguro si usar� pserver. Incluso si el fichero de contrase�as se ha creado, CVS no tendr� forma de saber los nombres de usuario y contrase�as a crear. As� que usted tendr� que crear uno por s� mismo; aqu� hay una muestra de fichero CVSROOT/passwd:

kfogel:rKa5jzULzmhOo
anonymous:XR4EZcEs0szik
melissa:tGX1fS8sun6rY:pubcvs

El formato es tan simple como parece. Cada l�nea es:

<NOMBREUSUARIO>:<CONTRASE�A_CIFRADA>:<NOMBREUSUARIO_SISTEMA_OPCIONAL>

Los dos puntos adicionales seguidos de un nombre de usuario de sistema opcional le dicen a CVS que las conexiones autentificadas con NOMBREUSUARIO deber�an ejecutarse como la cuenta de sistema NOMBREUSUARIO_SISTEMA - en otras palabras, que la sesi�n CVS s�lo ser�a capaz de hacer en el repositorio las cosas que alguien conectado como NOMBREUSUARIO_SISTEMA podr�a hacer.

Si no se da un nombre de usuario de sistema, NOMBREUSUARIO deber� coincidir con un nombre de cuenta real del sistema, y la sesi�n se ejecutar� con los permisos de ese usuario. En cualquier caso, la contrase�a cifrada no deber�a ser la misma que la contrase�a real de acceso del usuario. Deber�a ser una contrase�a independiente usada s�lo para conexiones a CVS pserver.

La contrase�a se cifra usando el mismo algoritmo que las contrase�as est�ndar de Unix, almacenadas en /etc/passwd. Puede que se pregunte en este punto, �c�mo se consigue una versi�n cifrada de una contrase�a? Para las contrase�as de sistema Unix, la orden passwd se encarga del cifrado en /etc/passwd por usted. Por desgracia no hay una orden equivalente a passwd en cvs (se ha propuesto varias veces, pero nadie se ha puesto a escribirlo - �lo har� usted. quiz�?).

Esto es un inconveniente, pero s�lo peque�o. Si no hay otra opci�n, siempre podr� cambiar temporalmente la contrase�a de sistema de un usuario usando passwd, copiar y pegar el texto cifrado de /etc/passwd en CVSROOT/passwd, y restaurar la antigua contrase�a (en ciertos sistemas las contrase�as cifradas se encuentran en /etc/shadow y s�lo el administrador o root puede leerlas.)

Este proceso es factible pero bastante inc�modo. Ser�a mucho m�s f�cil tener una utilidad de l�nea de �rdenes que tomara una contrase�a en texto plano como su argumento y diera como salida la versi�n cifrada. Aqu� est� esa herramienta, escrita en Perl:

#!/usr/bin/perl

srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift;
my $crypttext = crypt ($plaintext, $salt);

print "${crypttext}\n";

Yo guardo el gui�n anterior en /usr/local/bin/cryptout.pl:

floss$ ls -l /usr/local/bin/cryptout.pl

-rwxr-xr-x   1   root   root   265  Jun 14 20:41 /usr/local/bin/cryptout.pl
floss$ cryptout.pl "some text"
sB3A79YDX5L4s

floss$

Si usara la salida de este ejemplo para crear la siguiente entrada en CVSROOT/passwd

jluis:sB3A79YDX5L4s:craig

entonces la gente podr�a conectarse al repositorio con la siguiente orden:

remote$ cvs -d :pserver:jluis@floss.red-bean.com:/usr/local/nuevorepos login

Escribir�an entonces some text como contrase�a y a partir de entonces podr�an ejecutar �rdenes CVS con los mismos privilegios de acceso que el usuario de sistema craig.

Si alguien intenta autentificarse con un nombre de usuario y contrase�a que no aparecen en CVSROOT/passwd, CVS comprobar� si ese nombre de usuario y contrase�a est�n presentes en /etc/passwd. Si lo est�n (y si la contrase�a coincide, por supuesto), CVS proporcionar� el acceso. Se comporta de esta forma para comodidad del administrador, para no tener que a�adir entradas a CVSROOT/passwd por separado para los usuarios comunes del sistema. Sin embargo, este comportamiento tambi�n es un agujero de seguridad, porque significa que si uno de esos usuarios se conecta al servidor CVS, su contrase�a de acceso al sistema circular� por la red en texto claro, potencialmente vulnerable a los ojos de husmeadores de contrase�as. Un poco m�s adelante, aprender� c�mo desactivar este comportamiento "problem�tico", para que CVS consulte s�lo su propio fichero passwd. Tanto si lo deja activado o desactivado, probablemente deber�a obligar a los usuarios de CVS que tambi�n tengan cuentas en el sistema a mantener contrase�as distintas para las dos funciones.

Aunque el fichero passwd autentifica para todo el repositorio, con un poco de trabajo adicional podr� usarlo incluso para proporcionar acceso espec�fico de proyecto. Aqu� hay un m�todo:

Suponga que quiere proporcionar acceso a algunos desarrolladores remotos al proyecto foo, y a otros acceso al proyecto bar, y no quiere que los desarrolladores de un proyecto tengan acceso al env�o de cambios al otro. Puede conseguir esto creando cuentas de usuario y grupos espec�ficos de proyecto en el sistema y luego referirse a esas cuentas en el fichero CVSROOT/passwd.

Aqu� est� el extracto relevante de /etc/passwd en cuesti�n

cvs-foo:*:600:600:Cuenta P�blica CVS para el Proyecto Foo:/usr/local/cvs:/bin/false
cvs-bar:*:601:601:Cuenta P�blica CVS para el Proyecto Bar:/usr/local/cvs:/bin/false

y de /etc/group

cvs-foo:*:600:cvs-foo
cvs-bar:*:601:cvs-bar

y, finalmente, CVSROOT/passwd:

kcunderh:rKa5jzULzmhOo:cvs-foo
jmankoff:tGX1fS8sun6rY:cvs-foo
brebard:cAXVPNZN6uFH2:cvs-foo
xwang:qp5lsf7nzRzfs:cvs-foo
dstone:JDNNF6HeX/yLw:cvs-bar
twp:glUHEM8KhcbO6:cvs-bar
ffranklin:cG6/6yXbS9BHI:cvs-bar
yyang:YoEqcCeCUq1vQ:cvs-bar

Algunos de los nombres de usuario de CVS se refieren a las cuentas de usuario de sistema cvs-foo y otras a cvs-bar. Dado que CVS se ejecuta bajo la ID de usuario de la cuenta de sistema, simplemente tendr� que asegurarse de que en las partes de inter�s del repositorio s�lo pueden escribir los usuarios y grupos adecuados. Si se asegura de que las cuentas de usuario de sistema est�n bien atadas (sin contrase�a de acceso al sistema v�lida, con /bin/false como shell), el sistema ser� razonablemente seguro (�pero mire m�s adelante en este cap�tulo acerca de los permisos CVSROOT!). Adem�s, CVS registra los cambios e informes de cambios bajo el nombre de usuario de CVS, no bajo el nombre de usuario de sistema, as� que usted podr� saber qui�n es responsable de un cambio dado.