Git
Chapters ▾ 2nd Edition

4.4 Git op de server - De server opzetten

De server opzetten

Laten we het opzetten van SSH toegang aan de server kant eens doorlopen. In dit voorbeeld zul je de authorized_keys methode gebruiken om je gebruikers te authenticeren. We gaan er ook vanuit dat je een standaard Linux distributie gebruikt zoals Ubuntu. Als eerste maak je een git gebruiker aan en een .ssh directory voor die gebruiker.

$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

Vervolgens moet je een aantal publieke SSH sleutels van ontwikkelaars aan het authorized_keys bestand toevoegen voor die gebruiker. Laten we aannemen dat je een aantal sleutels per e-mail ontvangen hebt en ze hebt opgeslagen in tijdelijke bestanden. Nogmaals, de publieke sleutels zien er ongeveer zo uit:

$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair

Je voegt ze eenvoudigweg toe aan het authorized_keys bestand van de git gebruiker in de .ssh directory:

$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys

Nu kun je een lege repository voor ze instellen door git init uit te voeren met de --bare optie, wat de repository initialiseert zonder een werkdirectory:

$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /opt/git/project.git/

Daarna kunnen John, Josie of Jessica de eerste versie van hun project in de repository pushen door het als een remote toe te voegen en een branch te pushen. Merk op dat iemand met een shell op de machine zal moeten inloggen en een kale repository moet creëren elke keer dat je een project wilt toevoegen. Laten we gitserver als hostnaam gebruiken voor de server waar je de git gebruiker en repository hebt aangemaakt. Als je het binnenshuis draait, en je de DNS instelt zodat gitserver naar die server wijst, dan kun je de commando’s vrijwel ongewijzigd gebruiken (aangenomen dat myproject een bestaand project is met bestanden):

# on Johns computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/opt/git/project.git
$ git push origin master

Vanaf dat moment kunnen de anderen het clonen en wijzigingen even gemakkelijk terug pushen:

$ git clone git@gitserver:/opt/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master

Op deze manier kun je snel een lees/schrijf Git server draaiend krijgen voor een handjevol ontwikkelaars.

Je moet je ervan bewust zijn dat al deze gebruikers ook de server op kunnen en een shell als de git gebruiker kunnen krijgen. Als je dat wilt beperken, moet je de shell in iets anders veranderen in het passwd bestand.

Je kunt eenvoudig de git gebruiker beperken tot alleen Git activiteiten met een beperkte shell-tool genaamd git-shell wat met Git wordt meegeleverd. Als je dit als login shell voor je git gebruiker instelt, dan kan de git gebruiker geen normale shell toegang hebben op je server. Specificeer git-shell in plaats van bash of csh voor je gebruikers login shell om dit te gebruiken. Om dit te doen moet je eerst git-shell aan /etc/shells/ moeten toevoegen als dat al niet gebeurd is:

$ cat /etc/shells   # see if `git-shell` is already in there.  If not...
$ which git-shell   # make sure git-shell is installed on your system.
$ sudo vim /etc/shells  # and add the path to git-shell from last command

Nu kan je de shell wijzigen voor een gebruiker met chsh <gebruikernaam>:

$ sudo chsh git  # en geef het pad naar git-shell op, normaal gesproken: /usr/bin/git-shell

Nu kan de git gebruiker alleen de SSH verbinding gebruiken om Git repositories te pullen en pushen en kan hij niet naar een shell op de machine gaan. Als je het probeert, zie je een login-weigering als dit:

$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.

De Git netwerk commando’s zullen nog steeds blijven werken, maar gebruikers zullen niet in staat zijn een reguliere shell te starten. Zoals de uitvoer aangeeft, kan je ook een directory opgeven in de home directory van de git gebruiker die het git-shell commando een beetje aanpast. Als voorbeeld, je kunt de Git commando’s die de server accepteert beperken of je kunt het bericht aanpassen dat de gebruikers zien als ze op deze manier met SSH verbinding maken. Roep git help shell aan voor meer informatie hoe de shell aanpassing te doen.