Alojo mi propio repositorio git en un VPS. Digamos que mi usuario es John.
Estoy usando el protocolo ssh para acceder a mi repositorio git, por lo que mi url es algo así ssh://[email protected]/path/to/git/myrepo/
.
Root es el dueño de todo lo que está debajo /path/to/git
Estoy tratando de dar acceso de lectura / escritura a John a todo lo que está debajo /path/to/git/myrepo
He intentado tanto chmod
y setfacl
al control de acceso, pero ambos fallar de la misma manera: se aplican los derechos de forma recursiva (con las opciones correctas) a todos los subdirectorios actuales existentes de /path/to/git/myrepo
, pero tan pronto como se crea un nuevo directorio, mi usuario no puede escribir en el nuevo directorio
Sé que hay ganchos en git que me permitirían volver a aplicar los derechos después de cada confirmación, pero estoy empezando a pensar que voy por el camino equivocado porque esto parece demasiado complicado para un propósito muy básico.
P : ¿Cómo debo establecer mi derecho para dar acceso a rw a john a cualquier cosa debajo /path/to/git/myrepo
y hacer que sea resistente al cambio de estructura de árbol?
P2 : Si debo dar un paso atrás, cambiar el enfoque general, por favor dígame.
Editar : la pregunta se respondió tal como está, pero esa fue la pregunta incorrecta. La pregunta correcta habría sido "¿Cómo configurar un repositorio git desnudo en el servidor para usar con acceso ssh?". Mira mi propia respuesta.
fuente
g+s
. Por supuesto, primero tendrás que entender los conceptos básicos dechmod
.{}
- es un marcador de posición para la sustitución de nombre de archivo.;
es el terminador del comando ejecutado por-exec
. Como;
tiene un significado especialbash
, debe escaparse con \. verman find
para más detallesEn realidad ese fue el enfoque equivocado. Después de investigaciones adicionales, descubrí que en mi caso tengo que usar las funciones de compilación de git para manejar el sistema de archivos directamente en el repositorio.
Básicamente se hace con la
shared
opción degit init
, que puede tener (entre otros) los siguientes valores:group
: inicialice el repositorio para que los archivos y directorios tengan acceso de escritura de usuarios y grupos, y todos los demás tengan acceso de lectura0660
: igual pero sin acceso de lectura para los demás.Los directorios y archivos recién creados tienen automáticamente los permisos correctos. También puede usar
git init
en un repositorio existente para reconfigurarlo sin perder su contenido.Así que al final lo que tuve que hacer:
mygitrepo
root:mygitrepo
Y ahora todos los usuarios del grupo pueden tirar / empujar, y nadie más puede, y eso sin meterse con los derechos del sistema de archivos.
http://www.kernel.org/pub/software/scm/git/docs/git-init.html para obtener más información.
fuente
Si las ACL son compatibles, puede hacerlo con las ACL predeterminadas. Tenga en cuenta que es fácil olvidarse de ellos, ya que no aparecen cuando lo hace
ls -l
.Pero, sospecho que es posible que desee hacer algo un poco más organizado. La implementación de gitolita puede proporcionar una mejor solución.
fuente
ls
(y creo que Squeeze también) obtienes un+
final de los permisos para decir que hay una ACL:drwxr-xr-x+ 2 anthony anthony 4096 Sep 28 11:16 i-have-an-acl
find ... -exec cmd {} +
sintaxis, donde{}
se reemplaza con la mayor cantidad posible de nombres de archivos encontrados (en caso de{} \;
que{}
solo se reemplaza con un archivo encontrado a la vez)