-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetting-up-server.asc
More file actions
151 lines (122 loc) · 6.35 KB
/
Copy pathsetting-up-server.asc
File metadata and controls
151 lines (122 loc) · 6.35 KB
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
[[_setting_up_server]]
=== Configuració del Servidor
Configurem l'accés SSH al costat del servidor.
En aquest exemple, utilitzareu el mètode `authorized_keys` per autenticar els usuaris.
També assumim que esteu executant una distribució Linux estàndard com Ubuntu.
[NOTE]
====
Una bona part del que es descriu aquí es pot automatitzar utilitzant l'ordre `ssh-copy-id`, en lloc de copiar i instal·lar manualment les claus públiques.
====
Primer, creeu un compte d'usuari `git` i un directori `.ssh` per a aquest usuari.
[source,console]
----
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
----
A continuació, heu d'afegir algunes claus públiques SSH dels desenvolupadors al fitxer `authorized_keys` per a l'usuari `git`.
Suposem que teniu algunes claus públiques de confiança i les heu desades en fitxers temporals.
Un altre cop, les claus públiques semblen alguna cosa com això:
[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
----
Simplement les afegiu al fitxer `authorized_keys` de l'usuari `git` al seu directori `.ssh`:
[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
----
Ara, podeu configurar un repositori buit per a ells executant `git init` amb l'opció `--bare`, que inicialitza el repositori sense un directori de treball:
(((git commands, init, bare)))
[source,console]
----
$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
----
Llavors, John, Josie o Jessica poden fer push de la primera versió del seu projecte a aquest repositori afegint-lo com a remot i fent push d'una branca.
Noteu que algú ha d'accedir a la màquina i crear un repositori buit cada vegada que vulgueu afegir un projecte.
Utilitzem `gitserver` com a nom d'amfitrió del servidor on heu configurat el vostre usuari `git` i repositori.
Si l'esteu executant internament, i heu configurat DNS per a `gitserver` per apuntar a aquest servidor, llavors podeu utilitzar els comandaments gairebé tal com estan (assumint que `myproject` és un projecte existent amb fitxers):
[source,console]
----
# a l'ordinador de John
$ cd myproject
$ git init
$ git add .
$ git commit -m 'Initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
----
En aquest punt, els altres poden clonar-lo i fer push de canvis de nou amb la mateixa facilitat:
[source,console]
----
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'Correcció per al fitxer README'
$ git push origin master
----
Amb aquest mètode, podeu tenir ràpidament un servidor Git de lectura/escriptura en funcionament per a un grapat de desenvolupadors.
Heu de tenir en compte que actualment tots aquests usuaris també poden iniciar sessió al servidor i obtenir una shell com a usuari `git`.
Si voleu restringir això, haureu de canviar la shell a una altra cosa al fitxer `/etc/passwd`.
Podeu restringir fàcilment el compte d'usuari `git` a només activitats relacionades amb Git amb una eina de shell limitada anomenada `git-shell` que ve amb Git.
Si configureu això com la shell d'inici de sessió del compte d'usuari `git`, llavors aquest compte no pot tenir accés normal a la shell al vostre servidor.
Per utilitzar això, especifiqueu `git-shell` en lloc de `bash` o `csh` per a la shell d'inici de sessió d'aquest compte.
Per fer això, primer heu d'afegir el camí complet de l'ordre `git-shell` a `/etc/shells` si no hi és ja:
[source,console]
----
$ cat /etc/shells # vegeu si git-shell ja hi és. Si no...
$ which git-shell # assegureu-vos que git-shell està instal·lat al vostre sistema.
$ sudo -e /etc/shells # i afegiu el camí a git-shell de l'última ordre
----
Ara podeu editar la shell per a un usuari utilitzant `chsh <username> -s <shell>`:
[source,console]
----
$ sudo chsh git -s $(which git-shell)
----
Ara, l'usuari `git` encara pot utilitzar la connexió SSH per fer push i pull de repositoris Git però no pot obtenir una shell a la màquina.
Si ho intenteu, veureu un rebuig d'inici de sessió com aquest:
[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.
----
En aquest punt, els usuaris encara poden utilitzar el reenviament de ports SSH per accedir a qualsevol host al qual el servidor git pugui accedir.
Si voleu evitar això, podeu editar el fitxer `authorized_keys` i anteposar les següents opcions a cada clau que vulgueu restringir:
[source,console]
----
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
----
El resultat hauria de semblar així:
[source,console]
----
$ cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6h
PB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541N
YsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcC
IicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBd
LQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJ
ICUvax2T9va5 gsg-keypair
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDEwENNMomTboYI+LJieaAY16qiXiH3wuvENhBG...
----
Ara les ordres de xarxa de Git encara funcionaran perfectament però els usuaris no podran obtenir una shell.
Com indica la sortida, també podeu configurar un directori a la carpeta personal de l'usuari `git` que personalitzi una mica l'ordre `git-shell`.
Per exemple, podeu restringir les ordres Git que el servidor acceptarà o podeu personalitzar el missatge que veuen els usuaris si intenten iniciar sessió amb SSH.
Executeu `git help shell` per obtenir més informació sobre com personalitzar la shell.(((git commands, help)))