User Tools

Site Tools


linux:securingsubversion

Differences

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

Link to this comparison view

Next revision
Previous revision
linux:securingsubversion [2011/12/27 12:43]
rlunaro creado
linux:securingsubversion [2014/12/24 10:42] (current)
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 ​
 +
  
linux/securingsubversion.txt · Last modified: 2014/12/24 10:42 (external edit)