User Tools

Site Tools


linux:securingsubversion

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
linux:securingsubversion [2011/12/31 16:01] rlunarolinux:securingsubversion [2022/12/02 22:02] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +====== Securing Subversion ======
 +
 +**Nota del autor:** Este documento es bastante antiguo (2003?) y supongo que algunas
 +de las directices que aquí se dan ya se han incorporado a las mayores distribuciones.
 +Por no decir que seguramente habrá guias mejores (incluso libros) editados al respecto. 
 +
 +Hecho este ''disclaimer'', vamos con lo que nos interesa. 
 +
 +Pasos para crear un repositorio seguro: 
 +
 +Por defecto, seremos paranoicos con los permisos y la seguridad: 
 +
 +    - establecer un path seguro
 +    - umask 022
 +
 +Crear un grupo "svn" de usuarios de svn: 
 +
 +<code>
 +groupadd svn
 +</code>
 +
 +Crear un usuario "svn" que será el que ejecute el servidor, y
 +el propietario del repositorio: 
 +
 +<code>
 +useradd -c 'Subversion unpriviledged user' -d /var/svn/ -g svn -G svn -s /bin/false svn
 +</code>
 +
 +Los comandos de subversion, que se ejecuten únicamente por el 
 +usuario svn y el grupo svn: 
 +
 +<code>
 +chupete:~# chgrp svn /usr/local/bin/svn*
 +chupete:~# chmod 550 /usr/local/bin/svn*
 +# el comando "svn" debe tener permisos de ejecución globales (555) debido
 +# a que todos los usuarios deberán tener acceso al mismo (por si quieren
 +# utilizar Subversion como cliente)
 +chupete:~# chmod 555 /usr/local/bin/svn
 +chupete:~# ls -la /usr/local/bin/svn*
 +-r-xr-xr-x    1 svn      svn        360019 Aug  8 17:22 /usr/local/bin/svn
 +-r-xr-x---    1 svn      svn        101569 Aug  8 17:23 /usr/local/bin/svnadmin
 +-r-xr-x---    1 svn      svn         89589 Aug  8 17:23 /usr/local/bin/svndumpfilter
 +-r-xr-x---    1 svn      svn        121222 Aug  8 17:23 /usr/local/bin/svnlook
 +-r-xr-x---    1 svn      svn        150360 Aug  8 17:23 /usr/local/bin/svnserve
 +-r-xr-x---    1 svn      svn         77564 Aug  8 17:23 /usr/local/bin/svnversion
 +</code>
 +
 +Aquí puede ser un buen momento para preguntar al usuario 
 +qué cuentas del sistema podrán ejecutar los comandos de svn
 +y los añadiremos al grupo "svn"
 +
 +<code>
 +chupete:/var# usermod -G svn rluna
 +chupete:/var# usermod -G svn pruebas1
 +</code>
 +
 +Aquí crearemos el directorio donde se alojará el repositorio. 
 +El directorio lo creará el usuario que ejecuta este script y luego 
 +cambiará los permisos para el usuario svn: 
 +
 +Haremos ''su svn'' y ejecutaremos: 
 +
 +<code>
 +umask 002
 +svnadmin create /var/svn
 +</code>
 +
 +Luego, pondremos los permisos de la siguiente forma (comprobar 
 +si esto es realmente necesario): 
 +
 +<code>
 +chonw svn:svn /var/svn * -R
 +chmod  775 /var/svn/conf
 +chmod  600 /var/svn/conf/passwd
 +chmod  600 /var/svn/conf/svnserve.conf
 +chmod  775 /var/svn/dav
 +chmod 2775 /var/svn/db
 +chmod 2775 /var/svn/db/transactions
 +chmod 2775 /var/svn/db/revprops
 +chmod  664 /var/svn/db/revprops/0
 +chmod 2775 /var/svn/db/revs
 +chmod  664 /var/svn/db/revs/0
 +chmod  664 /var/svn/db/current
 +chmod  664 /var/svn/db/fs-type
 +chmod  664 /var/svn/db/uuid
 +chmod  664 /var/svn/db/write-lock
 +chmod  775 /var/svn/hooks
 +chmod  644 /var/svn/hooks/*tmpl
 +chmod  775 /var/svn/locks
 +chmod  664 /var/svn/locks/*lock
 +chmod  444 /var/svn/format
 +chmod  775 /var/svn/
 +</code>
 +
 +**Configuración del acceso remoto al repositorio**
 +
 +Para el caso de ejecutar svnserve desde el superdemonio de internet, 
 +haremos: 
 +
 +<code>
 +chupete:~# joe /etc/services
 +[....]
 +mysql           3306/tcp                        # MySQL
 +mysql           3306/udp                        # MySQL
 +svn             3690/tcp                        # Subversion
 +svn             3690/udp                        # Subversion
 +rfe             5002/tcp                        # Radio Free Ethernet
 +rfe             5002/udp                        # Actually uses UDP only
 +</code>
 +
 +<code>
 +chupete:/etc# joe xinetd.conf
 +# Subversion
 +service svn
 +{
 +        socket_type     = stream
 +        protocol        = tcp
 +        wait            = no
 +        user            = svn
 +        group           = svn
 +        umask           = 002
 +        server          = /usr/local/bin/svnserve
 +        server_args     = -i -r /var/svn
 +}
 +</code>
 +
 +<code>
 +chupete:/var/svn/conf# joe svnserve.conf
 +[general]
 +### These options control access to the repository for unauthenticated
 +### and authenticated users.  Valid values are "write", "read",
 +### and "none" The sample settings below are the defaults.
 +anon-access = read
 +auth-access = write
 +### The password-db option controls the location of the password
 +### database file.  Unless you specify a path starting with a /,
 +### the file's location is relative to the conf directory.
 +### Uncomment the line below to use the default password file.
 +# password-db = passwd
 +### This option specifies the authentication realm of the repository.
 +### If two repositories have the same authentication realm, they should
 +### have the same password database, and vice versa.  The default realm
 +### is repository's uuid.
 +realm = Project TAS repository
 +</code>
 +
 +También es necesario configurar adecuadamente el fichero ''passwd'' que se
 +encuentra en el mismo directorio:
 +
 +<code>
 +chupete:/var/svn/conf# more passwd
 +### The name and password for each user follow, one account per line.
 +
 +[users]
 +rluna=pepinillo
 +</code>
 +
 +Finalmente, haremos las siguientes pruebas en el sistema para verificar 
 +que el cambio de permisos ha funcionado: 
 +
 +  - un usuario que no pertenezca al grupo "svn" intentará crear un repositorio
 +  - un usuario que sí pertenezca al grupo "svn" intentará crear un repositorio 
 +  - con el repositorio que hemos creado anteriormente, añadiremos un fichero
 +  - a través del super-demonio de internet, haremos un checkout 
 +