-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathsetting-up-server.asc
More file actions
149 lines (121 loc) · 8.58 KB
/
Copy pathsetting-up-server.asc
File metadata and controls
149 lines (121 loc) · 8.58 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
[[_setting_up_server]]
=== Настройка на сървъра
Нека преминем през настройката на SSH достъпа от страна на сървъра.
В този пример, ще използвате метода `authorized_keys` за автентикиране на вашите потребители.
Подразбираме също така, че използвате стандартна Linux дистрибуция, например Ubuntu.
[NOTE]
====
Голяма част от описаното тук може да се автоматизира с командата `ssh-copy-id`, вместо чрез ръчно копиране и инсталиране на публични ключове.
====
Първо, създавате `git` потребител и `.ssh` директория за него.
[source,console]
----
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
----
След това, трябва да добавите няколко публични ключа на разработчици към файла `authorized_keys` на потребителя `git`.
Нека кажем, че имате няколко такива ключа и ги съхранявате във временни файлове.
Да припомним, публичните ключове изглеждат така:
[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
----
Просто трябва да ги добавите към `authorized_keys` файла на потребителя `git` в `.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
----
Сега можете да инициализирате празно хранилище за тях изпълнявайки `git init` с опцията `--bare`, което ще създаде хранилище без работна директория:(((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/
----
След като направите това, John, Josie, или Jessica могат да изпратят първата версия на своя проект в това хранилище като го добавят като отдалечено и изпратят някой клон.
Отбележете, че е необходимо някой да се логва в тази машина и да създава празно хранилище всеки път, когато искате да добавите проект.
Нека ползваме `gitserver` за име на сървъра, който настроихме.
Ако го използвате само локално и настроите DNS сървъра си да сочи към адреса му, тогава може да използвате командите буквално така (подразбираме, че `myproject` е съществуващ проект с файлове):
[source,console]
----
# от компютъра на 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
----
Сега вече другите могат да клонират проекта и да изпращат промени към него също така лесно:
[source,console]
----
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'Fix for README file'
$ git push origin master
----
Ползвайки този подход можете лесно да пуснете read/write Git сървър за малък екип разработчици.
Следва да сте забелязали, че сега всички тези потребители могат също така да се логнат на сървъра като потребител `git`.
Ако искате да ограничите това, ще трябва да смените шела на `git` с нещо различно във файла `/etc/passwd`.
Можете лесно да ограничите `git` потребителя само до Git дейности с рестриктивния инструмент `git-shell`, който идва с Git.
Ако го използвате за login шел за вашия `git` потребител, то той ще има доста по-ограничени права в сървъра.
Просто използвайте `git-shell` вместо `bash` или `csh` за шел на потребителя.
За да го направите, първо трябва да добавите `git-shell` към `/etc/shells`, ако той вече не е там:
[source,console]
----
$ cat /etc/shells # проверявате дали git-shell е вече във файла и ако не е...
$ which git-shell # уверете се, че git-shell е инсталиран на системата
$ sudo -e /etc/shells # и добавете пътя до него, който показва командата which
----
Сега можете да редактирате шела за даден потребител изпълнявайки `chsh <username> -s <shell>`:
[source,console]
----
$ sudo chsh git -s $(which git-shell)
----
Сега вече `git` потребителят може да използва SSH комуникация само за да изтегля и изпраща Git хранилища и няма да има пълноценен шел достъп в машината.
Ако пробвате, ще получите отказ:
[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.
----
В този момент обаче, потребителите все още могат да използват SSH port forwarding за достъп до всеки хост, който git сървърът вижда.
Ако искате да избегнете това, може да редактирате файла `authorized_keys` и да добавите следните опции за всеки ключ, който искате да ограничите:
[source,console]
----
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
----
Резултатът трябва да изглежда така:
[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...
----
Сега мрежовите команди на Git ще работят нормално, но потребителите няма да имат шел достъп.
Както се вижда от изхода на командата, можете също така да направите директория в домашната такава на потребителя `git`, което ще специализира малко `git-shell` командата.
Например, можете да ограничите наличните Git команди, които сървърът приема или да промените съобщението, които потребителите виждат, ако се опитат да се логнат през SSH.
Изпълнете `git help shell` за повече информация за настройване на шела.(((git commands, help)))