forked from progit/progit2
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsetting-up-server.asc
150 lines (121 loc) · 9.87 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
[[r_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
----
Στη συνέχεια, πρέπει να προσθέσετε δημόσια κλειδιά 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, init, bare)))
[source,console]
----
$ cd /opt/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]
----
# on Johns 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 the README file'
$ git push origin master
----
Με αυτή τη μέθοδο, μπορείτε να ξεκινήσετε γρήγορα έναν διακομιστή Git ανάγνωσης/εγγραφής για μερικούς προγραμματιστές.
Σημειώστε ότι αυτή τη στιγμή όλοι αυτοί οι χρήστες μπορούν επίσης να συνδεθούν στον διακομιστή και να ανοίξουν ένα κέλυφος ως χρήστης `git`.
Εάν δεν θέλετε να συμβαίνει αυτό, θα πρέπει να αλλάξετε το κέλυφος σε κάτι άλλο στο αρχείο `/etc/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 <κέλυφος>`:
[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 ώστε να αποκτήσουν πρόσβαση σε οποιονδήποτε host μπορεί να φτάσει ο διακομιστής 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 shell help` για περισσότερες πληροφορίες σχετικά με την προσαρμογή του κελύφους στις προτιμήσεις σας. (((εντολές git, help)))