Node:El servidor de autentificacion de contrasen~as, Next:Acceso anonimo, Previous:Iniciando un repositorio, Up:Administracion del Repositorio
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.