2009-09-02 36 views
11

¿Cómo se puede usar Git sin Sudo en múltiples cuentas en una Ubuntu?Usando Git sin Sudo en muchas cuentas

Mi Ubuntu tiene muchas cuentas. La creación de nuevas cuentas ha hecho que Git sea inaccesible para mí sin sudo.

he cambiado el propietario para ser yo, Masi, y el grupo al ser admin donde el Masi pertenece. tengo los siguientes permisos para Git

800 -rwxrwxrwx 1 masi admin 813744 2009-02-20 23:01 /usr/bin/git 

me sale el siguiente mensaje al tratar de usar Git

git status 
fatal: unable to create '.git/index.lock': Permission denied 

corro find . -iregex ".*index.l.* que devuelve coincidencias por lo que no parece haber ningún bloqueo en index.lock el sistema. Ejecuto el mismo comando también con sudo sin éxito.

+0

"La creación de nuevas cuentas ha hecho Git inaccesibles por mí sin sudo " Debe tomar esto como una señal de que algo está mal con su cuenta, la configuración de su sistema o su instalación. Ese es un comportamiento extremadamente anormal: git es una aplicación de espacio de usuario normal, accesible para todos los usuarios normales en una instalación normal de Ubuntu. – kampu

+0

Como referencia, los permisos/propiedad correctos para/usr/bin/git * son 755/root.root, como se indica en la respuesta de hillu. Es posible que haya establecido accidentalmente los permisos para que solo los miembros del grupo o el propietario puedan ejecutar 'git' (es decir, los permisos son 744 aka -rwxr - r-- en lugar de 755). No corregir esos permisos representa un serio riesgo de seguridad para su sistema. – kampu

Respuesta

17

Si entiendo bien su pregunta, es necesario conceder varias cuentas de usuario * nix acceso de escritura al mismo repositorio git. El uso del argumento de línea de comando --share para git init debe habilitar esto. El GitWiki tiene a few words to say about this. Esto debería hacer el truco:

git --bare init --shared=all 

Si ya ha creado su repositorio, deberá ser capaz de convertirlo en un "repositorio compartido" al lanzar este comando:

git repo-config core.sharedRepository true 

en su repositorio, como se menciona en a blog post at moserei.de.

2014 actualización: Esto es todavía posible pero el comando ha cambiado de repo-config para config.

git config core.sharedRepository true 
+0

¿Hay alguna manera de crear retroactivamente un repositorio de git, compartido si hiciste una inicial inicial de git no compartido? –

+0

@Steve Folly: creo que la segunda muestra de código en mi respuesta debería resolver esto. Aunque realmente no lo intenté yo mismo. –

+0

@ Jørn Schou-Rode: doh! lo siento, debería haber estado prestando más atención! –

5

Conjeturaría el propietario del directorio de .git son el problema.

No debe usar un árbol fuente de diferentes usuarios, es probable que cause problemas.

El git ejecutable no es la cuestión. Debe ser propiedad de root y tener 755 permisos. (-rwxr-xr-x)

En otras palabras, se pueden utilizar git de varias cuentas, pero no debe compartir un directorio de trabajo individual.

7

Git está destinado a ser distribuido. Entonces, cada usuario debería tener un repositorio separado propio. El método anterior contradice esta metodología. Aparte de eso, sospecho los permisos del directorio .git.

3

Tener los permisos de cualquier conjunto ejecutable para que un usuario normal pueda sobrescribir el ejecutable es un riesgo de seguridad considerable. (Intente sobrescribir /usr/bin/git con un script de shell que llame al rm -rf $HOME.)

Cambie los permisos a 755 y haga que git sea propiedad de root: root nuevamente.(El administrador de paquetes de Ubuntu restablecería los permisos en la próxima actualización de todos modos a menos que haya usado dpkg-statoverride(8))

Estoy de acuerdo con aquellos que dicen que puede no ser una buena idea que varios usuarios compartan un repositorio de git. Si aún cree que es necesario, considere la posibilidad de configurar un nuevo grupo, chgrp, el directorio que contiene el repositorio y todos los archivos incluidos en ese grupo y establecer el bit setgid en los directorios. (El parámetro --shared a git init también puede hacer algo de esto). Luego, agregue todos los usuarios al grupo que debería tener derechos de confirmación.

0

Puede verificar miembros utilizando

members groupname 

continuación, puede establecer el nivel de permiso para el nombre de usuario: par nombre de grupo,

change the ownership 
sudo chown -v -R username:groupname sprout 
chmod -R g+w .git/*