-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsetting-up-server.asc
More file actions
150 lines (121 loc) · 8.45 KB
/
setting-up-server.asc
File metadata and controls
150 lines (121 loc) · 8.45 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
[[_setting_up_server]]
=== نصب و راهاندازی سرور (Setting up server)
اجازه دهید تا گام به گام به راهاندازی دسترسی SSH روی سرور بپردازیم.
در این مثال شما از متد `authorized_keys` برای تصدیق هویت کاربرانتان استفاده خواهید کرد.
همچنین ما فرض میکنیم که از یک توزیع استاندارد لینوکس مانند اوبونتو استفاده میکنید.
[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` در پوشه `.ssh` کاربر `git` اضافه میکنید:
[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` به عنوان نام هاست (Hostname) سروری که روی آن مخزن و کاربر `git` را راهاندازی کردیم استفاده کنیم.
اگر آن را به صورت داخلی کار میکنید و DNS برای`gitserver` راهاندازی میکنید تا به آن سرور اشاره کند، میتوانید از دستورات، تقریباً،
همانگونه که هستند استفاده کنید (با فرض اینکه `myproject` پروژهای از پیش موجود با فایلهایی در خود است).
[source,console]
----
# on John's computer
$ 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` یک شل در دست بگیرند.
اگر میخواهید از این موضوع جلوگیری کنید، میبایست شل را در داخل `/etc/passwd` به چیز دیگری تغییر دهید.
شما به سادگی میتوانید حساب کاربر `git` را فقط به فعالیتهای مربوط به گیت و با ابزار شل محدودی به نام `git-shell` که با گیت میآید محدود کنید.
اگر شما این ابزار را به عنوان شل ورودی حساب کاربری `git` تنظیم کنید، آن حساب کاربری نمیتواند دسترسی شل معمولی به سرور شما داشته باشد.
برای انجام این کار، باید ابتدا مسیر کامل دستور `git-shell` را به `/etc/shells` اضافه کنید:
[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
----
حالا میتوانید با استفاده از `chsh <username> -s <shell>` شل هر کاربر را تغییر دهید:
[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` را اجرا کنید.(((git commands, help)))