¿Cómo puedo configurar los permisos en Linux para que dos usuarios puedan actualizar la misma copia de trabajo SVN en el servidor?

StackOverflow https://stackoverflow.com/questions/164597

  •  03-07-2019
  •  | 
  •  

Pregunta

Mi servidor tiene instalados Subversion y Apache, y el directorio web de Apache también es una copia de trabajo de Subversion. La razón de esto es que el simple comando svn update / server / staging desplegará la última fuente en el servidor provisional.

Directorio web público de Apache: / server / staging - & nbsp; (Esta es una copia de trabajo SVN).

Tengo dos usuarios en mi servidor, 'richard' y 'austin'. Ambos son miembros del grupo de 'desarrolladores'. Establecí recursivamente permisos en el directorio / server para richard: developers, usando " sudo chown -R richard: developers / server " ;.

Luego configuro los permisos para leer, escribir y ejecutar tanto para 'richard' como para el grupo de 'desarrolladores'.

Entonces, ¿seguramente 'austin' debería poder usar el comando svn update / server / staging ? Sin embargo, cuando lo intenta, obtiene el error:

svn: Can't open file '/server/staging/.svn/lock': Permission denied

Si cambio recursivamente el propietario de / server a austin: developers, puede ejecutar el comando bien, pero luego 'richard' no puede.

¿Cómo soluciono el problema? Quiero crear un enlace posterior a la confirmación para implementar automáticamente el sitio de preparación cuando se confirman los archivos, pero no puedo ver una forma de que eso funcione para ambos usuarios. El gancho sería:

/usr/bin/svn update /server/staging

Usar la misma cuenta de usuario para ambos no sería realmente una solución aceptable, y no conozco ninguna forma de ejecutar el comando dentro del gancho como 'root'.

¡Se agradece cualquier ayuda!

¿Fue útil?

Solución

ID de grupo de conjunto de directorio

Si se establece el bit setgid en una entrada de directorio, los archivos en ese directorio tendrán la propiedad del grupo como el directorio, en lugar del grupo del usuario que creó el archivo.

Este atributo es útil cuando varios usuarios necesitan acceder a ciertos archivos. Si los usuarios trabajan en un directorio con el atributo setgid establecido, cualquier archivo creado en el directorio por cualquiera de los usuarios tendrá el permiso del grupo. Por ejemplo, el administrador puede crear un grupo llamado spcprj y agregar los usuarios Kathy y Mark al grupo spcprj. El directorio spcprjdir se puede crear con el conjunto de bits GID establecido y Kathy y Mark, aunque en diferentes grupos primarios pueden trabajar en el directorio y tener acceso completo a todos los archivos en ese directorio, pero aún no pueden acceder a los archivos en el grupo primario de cada uno. .

El siguiente comando establecerá el bit GID en un directorio:

chmod g+s spcprjdir

La lista de directorios del directorio " spcprjdir " ;:

drwxrwsr-x 2 kathy spcprj 1674 Sep 17 1999 spcprjdir

La " s '' en lugar del bit de ejecución en los permisos de grupo hace que todos los archivos escritos en el directorio " spcprjdir " pertenecer al grupo " spcprj " .

edit: source = Archivos de Linux y permisos de archivos

Otros consejos

Configuraría svnserve , que es un servidor Subversion simple que utiliza el protocolo svn: // . Puede configurar esto para que se ejecute bajo su propia cuenta de usuario, luego el repositorio solo será accedido por ese único usuario. Este usuario podría tener los privilegios correctos para ejecutar svn update / server / staging en un enlace posterior a la confirmación.

en su repositorio svn, puede encontrar un directorio 'conf' donde establezca permisos. tienes 3 archivos allí:

  • authz
  • passwd
  • svnserve.conf

establece en el archivo authz qué usuarios tienen qué tipo de acceso, por usuario o por grupo. configura grupos allí, grupos SVN no grupos de usuarios de Linux (las líneas sombreadas son comentarios):

[groups]
# harry_and_sally = harry,sally
projectgroup = richard,austin

# [/foo/bar]
# harry = rw  -- user harry has read/write access
# * =  -- everybody have no access

# [repository:/baz/fuz]
# @harry_and_sally = rw  -- harry_and_sally group members have read/write access
# * = r  -- everyone has read access

[/server/staging]
@projectgroup = rw
* = r

evite este ejemplo y configure su configuración. en el archivo 'passwd' configura las contraseñas de los usuarios. ejecutar

cat passwd

obtendrá un archivo comentado con una explicación de cómo configurarlo.

Uso WebDAV: todas las actualizaciones y confirmaciones de SVN se manejan a través de Apache y nunca tengo tales problemas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top