-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy pathsetting-up-server.asc
executable file
·124 lines (101 loc) · 7.65 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
[[_setting_up_server]]
=== Налаштування Серверу
Розглянемо покрокове налаштування SSH доступу на сервері.
У цьому прикладі, ми використаємо метод авторизованих ключів (`authorized_keys`) для авторизації ваших користувачів.
Ми знову припустимо, що на вашому сервері стандартний дистрибутив Лінукс, наприклад 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
----
Далі, треба додати публічні 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`, яка створює сховище без робочої теки:(((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/
----
Після цього, Джон, Джосі та Джесіка можуть викласти першу версію свого проекту до того сховища, якщо додадуть його як віддалене сховище та викладуть до нього гілку.
Завважте що хтось має заходити до машини та створювати чисте сховище щоразу, коли ви хочете додати проект.
Використаймо `gitserver` як ім'я хосту (`hostname`) серверу, на якоми ви налаштували користувача `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 the README file'
$ git push origin master
----
За допомогою цього метода, ви можете швидко отримати працюючий сервер Git з доступом на читання та запис для декількох програмістів.
Зауважте, що наразі усі ці користувачі також можуть заходити на сервер та отримують доступ до оболонки (shell) як користувач `git`.
Якщо ви не хочете цього дозволяти, вам треба змінити програму оболонки на щось інше у файлі `passwd`.
Ви легко можете обмежити користувача `git` до виключно активності Git за допомогою утиліти `git-shell`, що входить до поставки Git.
Якщо ви вкажете її для вашого користувача `git`, як програму, що запускається при вході, то користувач `git` не зможе здобути нормальний доступ до вашого серверу.
Щоб цим скористатись, задайте `git-shell` замість bash чи csh як оболонку при вході для вашого користувача.
Щоб це зробити, треба спочатку додати `git-shell` до `/etc/shells`, якщо його там ще нема:
[source,console]
----
$ cat /etc/shells # перевірте, може `git-shell` вже є у файлі. Якщо ні...
$ which git-shell # переконайтесь, що git-shell присутній на вашій системі.
$ sudo vim /etc/shells # та додайте шлях до git-shell за допомогою останньої команди
----
Тепер ви можете відредагувати оболонку для користувача за допомогою `chsh <ім'я користувача> -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.
----
Тепер мережеві команди Git продовжать працювати без проблем, проте користувачі не зможуть отримати оболонку.
Як і стверджує вивід, ви тепер можете створити теку в домашній теці користувача `git`, що трохи змінити поведінку команду `git-shell`
Наприклад, ви можете обмежити команди Git, які прийме сервер, або ви можете змінити повідомлення, яке бачать користувачі, якщо вони спробують зайти через SSH.
Виконайте `git help shell` для докладнішої інформації про це.(((git commands, help)))