Configurar un servidor GIT
El paquete git nos permite configurar un servidor git en nuestro PC. Aunque existen alternativas, nuestro servidor sera inseguro, todos lo usuarios con permiso de acceso podras hacer push y clone del repositorio.
La seguridad, o mas bien, el control de accesos se realiza empleando la clave publica de los usuarios y el authorized_keys del usuario git en el servidor.
Descripcion
Proceso de instalacion y configuraion de un servidor git en Archlinux.
Procedimiento
El primer paso es instalar la herramienta git.
~]# pacman -S git
Segun las instruccion, para poder hacer push al repositorio debemos modificar nano /usr/lib/systemd/system/git-daemon\@.service Añadir el parametro –enable=receive-pack a la linea ExecStart
Una vez modificado el fichero de configuraion lanzamos el servior en systemd.
systemctl start git-daemon.socket
O bien, si queremos que se active automaticamente tras reinciar:
systemctl enable git-daemon.socket
Control de accesos basado en SSH
Realmente este control de accesos permitira a todos los usuario hacer push. Todo ellos se logean en el servidor git, como el usuario git empleando sus rsa.pub.
Durante la instalacion pacman crea el usuario git. Pero lo crea sin directorio home. Tal vez seria mas limpio, primero crear el usuario con
~]# useradd -r -m -U -d /srv/git -s /bin/bash git
Pero en caso, de que el usuario ya exista podemos crear su directorio home empleando el paquete mkhomedir_helper
~]# mkhomedir_helper git
La cuenta git, por defecto se crea expirada, si queremos solucionarlo: ~]# chage -E -1 git
.
Ahora que git, ya dispone de un directorio home, crearemos .ssh para almacenar las credenciales de acceso:
~]# passwd git
~]# mkdir -p ~/.ssh && chmod 0700 ~./ssh
~]# chown git:git .ssh
~]# touch .ssh/authorized_keys
~]# chown git:git .ssh/authorized_keys
~]# chmod 0600 .ssh/authorized_keys
Para poder logearnos empleando nuestra clave privada debemos actulizarel home_dir del usuario git en /etc/passwd Cambiar esto: git:x:975:975:git daemon user:/:/usr/bin/git-shell por esto git:x:975:975:git daemon user:/srv/git:/bin/bash
Finalmente, para poder connectarnos al servidor, debemos copiar la clave publica de los usuario en el fichero authorized_keys. Las claves publicas se encuentran en ~/.ssh/id_rsa.pub, en caso de que no exista ninguna la podemos crear empleando:
~]$ ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"
Este metodo requiere cambiar la shell en passwd a /bin/bash dejando de lado la shell restrictiva original /usr/bin/git-shell
~]$ cat ~/.ssh/id_rsa.pub | ssh git@remote-server "sudo mkdir -p ~/.ssh && sudo cat >> ~/.ssh/authorized_keys"
Una vez copiado, lo mas correcto seria devolver la shell de git a la original /usr/bin/git-shell en /etc/passwd. git:x:975:975:git daemon user:/srv/git:/usr/bin/git-shell
En caso, de no haber cambiado la shell siempre podemos hacer un cortar pegar
~]$ cat ~/.ssh/id_rsa.pub | xclip -target clipboard
Crear un repositorio
Para crear un repositorio, desde el lado del servidor debemos crear una carpeta e inicializar el repositorio git en ella.
~]$ cd /srv/git
~]$ sudo -u git git --bare init test-project.git
Ahora en el PC de los clientes:
~]$ mkdir test-project
~]$ git init
~]$ touch README.md
~]$ git add .
~]$ git commit -am "Initial commit"
~]$ git remote add origin git@udit76.iaa.es:/srv/git/test-project.git
~]$ git push origin master
~]$ git status
Listo!!
Conclusiones
Este repositorio, aunque no se puede identificar a los usuarios que tienen acceso, esta protegido gracias a ssh. Todos acceden al repositorio como el usuario git, y por lo tanto, todos pueden hacer push en todos los repositorios.
Referencias
ArchLinux Wiki Step-by-Step tutorial Git-SCM book OSTechNix how-to articles