Cree un usuario SSH con privilegios limitados para usar solo el repositorio Git

12

Tengo un repositorio git alojado en mi servidor SunOS, que uso de forma remota a través de ssh

git clone ssh://[email protected]/path/to/git

Ahora necesito agregar más usuarios para poder acceder a ese repositorio, pero no estoy seguro de cómo hacerlo.

He agregado un testUser a ssh, pero parece que no puedo limitar esos privilegios de usuario para usar solo git.

testUser es capaz de navegar y navegar por todo el servidor.

¿Cómo puedo crear usuarios que solo puedan acceder a git de forma remota, para clonar / jalar / empujar, etc.?

Gracias

Llevar una vida de soltero
fuente

Respuestas:

12

Puede considerar usar gitolite con un solo usuario en lugar de configurar múltiples usuarios de git-shell (y el grupo requerido y los permisos de grupo para que puedan compartir el acceso a los repositorios).

gitolite se ejecuta bajo un solo usuario normal en el servidor y usa claves públicas SSH para diferenciar el acceso a los repositorios de Git (vea " cómo gitolite usa ssh " para algunos de los detalles de cómo gitolite realiza su identificación basada en SSH). gitolite ofrece control de acceso por repositorio, por rama e incluso por ruta.

Chris Johnsen
fuente
1
+1 para gitosis ... Fue hecho exactamente para esta configuración.
Jeremy Bouse
12

Básicamente tienes dos opciones.

  1. Como mencionó topdog, cuando cree usuarios en el servidor, configure su shell en git-shell ( entrada de libro aquí ). Esto permitirá que el usuario inicie sesión a través de SSH, pero en lugar de ejecutar un shell normal con todas las funciones (por ejemplo, sh, bash, etc.) ejecutará git-shell, que solo proporciona acceso a la funcionalidad git.

  2. Alternativamente, puede hacer que sus repositorios estén disponibles a través de otro protocolo, como TCP (usando git-deamon ) o HTTP / HTTPS. Sin embargo, solo recomendaría este escenario para el acceso de solo lectura.

Menciona que desea admitir la funcionalidad 'push' para sus usuarios, por lo que realmente debería ir con la opción # 1.

chuckx
fuente
5

necesita cambiar su shell a git-shell, eso solo les dará acceso a las funciones de git solamente.

mandamás
fuente
Gracias topdog. Básicamente, el usuario usará su propio git shell en su Mac. Realmente no quiero que él pueda enviar ssh al servidor. Entonces, si el repositorio de git está en mydomain.com desde testUser computer / Mac, en el terminal podría simplemente solicitar su contraseña para clonar ssh: //[email protected]/path/to/git, luego descargue el repositorio. Intenté ahora configurar su caparazón en git-shell. Aparece cuando se llama a clonar pero la contraseña se rechaza.
Bach
debe configurar myUsers shell en git-shell si todo lo que quiere que hagan en el servidor es ejecutar comandos git y no poder shell. para las solicitudes de contraseña, use las teclas. Para obtener una cobertura más detallada de git en un servidor, consulte el libro git gratuito progit.org/book/ch4-0.html
topdog
gracias por la referencia del libro! muy útil. Terminé usando gitolite, aunque todavía tengo problemas con la configuración.
Bach
git-shell : "Este es un shell de inicio de sesión para cuentas SSH para proporcionar acceso Git restringido. Permite la ejecución solo de comandos Git del lado del servidor que implementan la funcionalidad pull / push, además de comandos personalizados presentes en un subdirectorio llamado git-shell-command en el directorio de inicio del usuario ". En Linux, agregue "/ bin / git-shell" a "/ etc / shells" y luego "usermod --shell / bin / git-shell $ USER". Por cierto, el libro de git está ahora en git-scm.com/book/en/ch4-0.html
David Tonhofer
0

Otra forma de hacerlo es limitando el acceso de los usuarios dentro de ssh.

( http://prefetch.net/blog/index.php/2006/09/05/limiting-access-to-openssh-directives/ )

El ejemplo es solo usando un solo usuario, pero si los usuarios están en el mismo grupo, puede filtrarlos usando la directiva de grupo. Algo como

AllowTcpForwarding yes
X11Forwarding yes

Match Group Users
         AllowTcpForwarding no
         X11Forwarding no
         $Here is a directive for git$
Nikolaidis Fotis
fuente