-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathsetting-up-server.asc
149 lines (121 loc) · 8.93 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
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` методу за аутентификацију својих корисника.
Претпостављамо и да имате стандардну Линукс дистрибуцију као што је Убунту.
[NOTE]
====
Већи део овога што је приказано у овом одељку може да се аутоматизује употребом команде `ssh-copy-id` command, без потребе да ручно копирате и инсталирате јавне кључеве.
====
На почетку креирате `git` кориснички налог i `.ssh` директоријум за тог корисника.
[source,console]
----
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
----
Затим је потребно да додате неколико јавних SSH кључева програмера у фајл `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`, која иницијализује репозиторијум, а не креира радни директоријум:(((гит команде, 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/
----
Џон, Џоси или Џесика тада могу да гурну прву верзију свог пројекта на тај репозиторијум тако што ће га додати као удаљени репозиторијум и гурнути грану на њега.
Обратите пажњу на то да неко мора искористити љуску за приступ машини и да направи огољени репозиторијум сваки пут када желите да додате нови пројекат.
Користићемо `gitserver` као име хоста сервера на коме сте подесили `git` корисника и репозиторијум.
Ако се интерно извршава и подесили сте DNS за `gitserver` тако да показује на тај сервер, команде онда можете да користите на уобичајен начин (под претпоставком да је пројекат `myproject` постоји и садржи неке фајлове):
[source,console]
----
# на Џоновом компјутеру
$ 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
----
Овом методом можете брзо да поставите и покренете Гит сервер са дозволом читања и уписа за неколико програмера.
Треба да обратите пажњу на то да тренутно сви корисници такође могу и да се пријаве на сервер и уђу у љуску као корисник `git`.
Ако то желите да спречите, љуску ћете у фајлу `passwd` морати да промените на нешто друго.
`git` корисника ћете лако моћи да ограничите тако да му буду дозвољене само Гит активности користећи алат ограничене љуске под називом `git-shell` који долази уз програм Гит.
Ако ово подесите као логин љуску корисника `git`, он неће имати класичан приступ серверу из љуске.
То се ради тако што као корисникову логин љуску уместо `bash` или `csh` поставите `git-shell`.
Најпре треба да у `/etc/shells` додате име потпуне путање `git-shell` команде ако се тамо већ не налази.
[source,console]
----
$ cat /etc/shells # погледај да ли је `git-shell` већ тамо. Ако није...
$ which git-shell # проверите да је git-shell инсталиран на ваш систем.
$ sudo -e /etc/shells # па додајте из последње команде путању до git-shell
----
Сада можете изменити љуску за корисника командом `chsh <име_корисника> -s <љуска>`:
[source,console]
----
$ sudo chsh git -s $(which git-shell)
----
Сада корисник `git` још увек може да користи SSH конекцију да гура и повлачи Гит репозиторијуме, али нема приступ машини преко класичног љуске.
Ако покуша, видеће поруку одбијања пријаве сличну овом:
[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 прослеђивање порта за приступ било ком хосту који је доступан са гит сервера.
Ако то желите да спречите, можете да уредите фајл `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-shell`.
На пример, можете ограничити Гит команде које ће сервер прихватити, или можете изменити поруку коју корисници виде када покушају да се повежу преко SSH.
За више информација о начину прилагођавања љуске, извршите `git help shell`.(((гит команде, help)))