-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathsetting-up-server.asc
127 lines (104 loc) · 5.4 KB
/
setting-up-server.asc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
[[_setting_up_server]]
////
Laatst bijgewerkt van progit/progit2 referentie: 9a8258d7
////
=== 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.
[NOTE]
====
Het leeuwendeel van wat er hier beschreven is kan worden geautomatiseerd door het `ssh-copy-id`-commando, in plaats van het handmatig kopieren en installeren van publieke sleutels.
====
Als eerste maak je een 'git' gebruiker aan en een `.ssh` directory voor die gebruiker.
[source,console]
----
$ 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 de `git` 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:
[source,console]
----
$ 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:
[source,console]
----
$ 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:(((git commando's, init, bare)))
[source,console]
----
$ 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):
[source,console]
----
# 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 klonen en wijzigingen even gemakkelijk terug pushen:
[source,console]
----
$ 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:
[source,console]
----
$ 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 -e /etc/shells # and add the path to git-shell from last command
----
Nu kan je de shell wijzigen voor een gebruiker met `chsh <username> -s <shell>`:
[source,console]
----
$ sudo chsh git -s $(which 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:
[source,console]
----
$ 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.(((git commando's, help)))