د GIT سرور ته د څو کاروونکو لاسرسي تنظیم کول

کله چې د Git سرور نصب او تنظیم کړئ، پوښتنه د ډیری کاروونکو لپاره څو پروژو ته د لاسرسي تنظیم کولو په اړه راپورته کیږي. ما دا مسله څیړله او یو حل یې وموند چې زما ټولې اړتیاوې پوره کړي: ساده، خوندي، د باور وړ.

زما هیلې دا دي:

  • каждый пользователь подключается со своим собственным аккаунтом
  • ډیری کاروونکي کولی شي په یوه پروژه کار وکړي
  • ورته کارونکي کولی شي په ډیری پروژو کار وکړي
  • هر کارونکی یوازې هغه پروژو ته لاسرسی لري چې په هغه کې کار کوي
  • دا باید ممکنه وي چې د کمانډ لاین له لارې وصل شي ، او نه یوازې د یو ډول ویب انٹرفیس له لارې

دا به هم ښه وي:

  • د کنټرول وړ اشخاصو ته یوازې د لوستلو اجازه ورکړئ
  • په ګیټ کې د کارونکي لاسرسي حقونه په اسانۍ سره اداره کړئ

د GIT سرور ته د لاسرسي لپاره د ممکنه اختیارونو عمومي کتنه

له هرڅه دمخه ، تاسو اړتیا لرئ پوه شئ چې څه شی غوره کړئ ، نو دلته د Git پروتوکولونو ګړندۍ کتنه ده.

  • ssh - یو ځانګړی جوړ شوی کارن حساب سرور ته د لاسرسي لپاره کارول کیږي.
    • دا عجیب خبره ده چې Git د خپلو سپارښتنو څخه د ټولو زیرمو ته د لاسرسي لپاره د یو حساب کارول نه خارجوي. دا زما اړتیاوې نه پوره کوي.
    • تاسو کولی شئ ډیری حسابونه وکاروئ ، مګر تاسو څنګه کولی شئ یوازې ځینې لارښودونو ته د کارونکي لاسرسی محدود کړئ؟
      • د کور لارښود ته تړل مناسب ندي ، ځکه چې د نورو کاروونکو لپاره هلته د لیکلو لاسرسي تنظیم کول ګران دي
      • ستاسو د کور لارښود څخه د سیملنکونو کارول هم ستونزمن دي ځکه چې Git دوی د لینکونو په توګه نه تشریح کوي
      • دا ممکنه ده چې ژباړونکي ته لاسرسی محدود کړي، مګر هیڅ بشپړ تضمین شتون نلري چې دا به تل کار وکړي
        • تاسو کولی شئ په عمومي ډول د داسې کاروونکو لپاره د خپل قوماندې ترجمان سره وصل شئ، مګر
          • لومړی، دا دمخه یو ډول ستونزمن پریکړه ده،
          • او دوهم، دا کیدای شي مخنیوی وشي.

    مګر شاید دا کومه ستونزه نده چې کارونکي به وکولی شي کوم حکمونه اجرا کړي؟... په عموم کې، دا طریقه نشي رد کیدی که تاسو په سمه توګه پوه شئ چې دا څنګه کارول کیږي. موږ به وروسته دې میتود ته راستون شو، مګر د اوس لپاره موږ به په لنډه توګه نور بدیلونه په پام کې ونیسو، شاید یو څه ساده وي.

  • د git محلي پروتوکول د sshfs سره په ترکیب کې کارول کیدی شي ، ډیری کارونکي کارول کیدی شي ، مګر اساسا د تیرې قضیې په څیر ورته
  • http - یوازې لوستل
  • git یوازې د لوستلو وړ دی
  • https - نصب کول ستونزمن دي، تاسو اضافي سافټویر ته اړتیا لرئ، د کارونکي لاسرسي تنظیم کولو لپاره یو ډول کنټرول پینل ... دا ممکنه ښکاري، مګر یو څه هر څه پیچلي دي.

د Git سرور ته د څو کاروونکو لاسرسي تنظیم کولو لپاره د ssh پروتوکول کارول

راځئ چې بیرته ssh پروتوکول ته ورشو.

څنګه چې تاسو د git لپاره ssh لاسرسی کاروئ، تاسو اړتیا لرئ د سرور ډیټا امنیت ډاډمن کړئ. هغه کارن چې د ssh له لارې وصل کیږي د لینکس سرور کې خپل ننوتل کاروي، نو دوی کولی شي د ssh مراجع له لارې وصل شي او د سرور کمانډ لاین ته لاسرسی ومومي.
د دې ډول لاسرسي پروړاندې بشپړ محافظت شتون نلري.

مګر کارونکي باید د لینکس فایلونو سره علاقه ونلري. د پام وړ معلومات یوازې د git ذخیره کې زیرمه شوي. له همدې امله ، دا امکان نلري چې د کمانډ لاین له لارې لاسرسی محدود کړي ، مګر د لینکس وسیلو په کارولو سره کارونکي د پروژو لیدو څخه منع کوي ، پرته له هغه چې هغه پکې برخه اخلي.
ښکاره انتخاب د لینکس اجازې سیسټم کارول دي.

لکه څنګه چې مخکې یادونه وشوه، دا ممکنه ده چې د ssh لاسرسي لپاره یوازې یو حساب وکاروئ. دا ترتیب د ډیری کاروونکو لپاره غیر خوندي دی، که څه هم دا د وړاندیز شوي git انتخابونو لیست کې شامل دی.

د مقالې په پیل کې ورکړل شوي اړتیاو پلي کولو لپاره ، لاندې لارښود جوړښت د حقونو او مالکینو د ګمارنې سره رامینځته شوی:

1) د پروژې لارښود

dir1(proj1:proj1,0770)
dir2(proj2:proj2,0770)
dir3(proj3:proj3,0770)
...
چې
dir1, dir2, dir3 - د پروژې لارښودونه: پروژه 1، پروژه 2، پروژه 3.

proj1:proj1, proj2:proj2, proj3:proj3 په ځانګړي ډول د لینکس کاروونکي جوړ شوي چې د اړونده پروژې لارښودونو مالکینو په توګه ګمارل شوي.

د ټولو لارښودونو لپاره اجازه 0770 ته ټاکل شوې - د مالک او د هغه ډلې لپاره بشپړ لاسرسی او د هرچا لپاره بشپړ بندیز.

2) د پراختیا کونکي حسابونه

Разработчик 1: dev1:dev1,proj1,proj2
Разработчик 2: dev2:dev2,proj2,proj3

کلیدي ټکی دا دی چې پراختیا کونکي د ورته پروژې د سیسټم کارونکي مالک اضافي ګروپ ګمارل شوي. دا د لینکس سرور مدیر لخوا د یوې کمانډ سره ترسره کیږي.

په دې مثال کې، "Developer 1" په پروژو کار کوي proj1 او proj2، او "Developer 2" په پروژو proj2 او proj3 کار کوي.

که چیرې کوم پرمخ وړونکي د کمانډ لاین له لارې د ssh له لارې وصل شي ، نو د دوی حقونه به حتی د پروژې لارښودونو مینځپانګې لیدو لپاره کافي نه وي چیرې چې دوی برخه نه اخلي. هغه نشي کولی دا پخپله بدل کړي.

څرنګه چې د دې اصولو اساس د لینکس حقونو بنسټیز امنیت دی، دا سکیم د اعتبار وړ دی. سربیره پردې ، سکیم اداره کول خورا اسانه دي.

راځئ چې تمرین ته لاړ شو.

په لینکس سرور کې د Git ذخیره کول

راځئ چې وګورو.

[root@server ~]# cd /var/
[root@server var]# useradd gitowner
[root@server var]# mkdir gitservertest
[root@server var]# chown gitowner:gitowner gitservertest
[root@server var]# adduser proj1
[root@server var]# adduser proj2
[root@server var]# adduser proj3
[root@server var]# adduser dev1
[root@server var]# adduser dev2
[root@server var]# passwd dev1
[root@server var]# passwd dev2

په لاس لیکلو ستړی شوی یم...

[root@server gitservertest]# sed "s/ /n/g" <<< "proj1 proj2 proj3" | while read u; do mkdir $u; chown $u:$u $u; chmod 0770 $u; done

[root@server gitservertest]# usermod -aG proj1 dev1
[root@server gitservertest]# usermod -aG proj2 dev1
[root@server gitservertest]# usermod -aG proj2 dev2
[root@server gitservertest]# usermod -aG proj3 dev2

موږ باوري یو چې د کمانډ لاین څخه د نورو خلکو ذخیره کولو ته لاسرسی ناممکن دی او حتی د دوی مینځپانګې لیدل.

[dev1@server ~]$ cd /var/gitservertest/proj3
-bash: cd: /var/gitservertest/proj3: Permission denied
[dev1@server ~]$ ls /var/gitservertest/proj3
ls: cannot open directory /var/gitservertest/proj3: Permission denied

په ګیټ کې په ورته پروژه کې د ډیری پراختیا کونکو سره همکاري وکړئ

یوه پوښتنه پاتې ده، که یو پرمخ وړونکی نوی فایل معرفي کړي، نو نور پراختیا کونکي نشي کولی دا بدل کړي، ځکه چې هغه پخپله د هغې مالک دی (د بیلګې په توګه، dev1)، او د پروژې کارونکي مالک نه دی (د مثال په توګه، proj1). څرنګه چې موږ د سرور اړخ ذخیره لرو، لومړی، موږ باید پوه شو چې د ".git" لارښود څنګه جوړ شوی او ایا نوي فایلونه جوړ شوي.

د ځایی Git ذخیره رامینځته کول او د Git سرور ته فشار ورکول

راځئ چې د پیرودونکي ماشین ته لاړ شو.

Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:gittest>git init .
Initialized empty Git repository in C:/gittest/.git/

C:gittest>echo "test dev1 to proj2" > test1.txt

C:gittest>git add .

C:gittest>git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   test1.txt

C:gittest>git commit -am "new test file added"
[master (root-commit) a7ac614] new test file added
 1 file changed, 1 insertion(+)
 create mode 100644 test1.txt
 
C:gittest>git remote add origin "ssh://[email protected]/var/gitservertest/proj2"

C:gittest>git push origin master
dev1:[email protected]'s password:
Counting objects: 3, done.
Writing objects: 100% (3/3), 243 bytes | 243.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://10.1.1.11/var/gitservertest/proj2
 * [new branch]      master -> master

C:gittest>

په ورته وخت کې، نوي فایلونه په سرور کې رامینځته شوي، او دا د هغه کارونکي پورې اړه لري چې فشار یې ترسره کړی

[dev1@server proj2]$ tree
.
├── 1.txt
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── 75
│   │   └── dcd269e04852ce2f683b9eb41ecd6030c8c841
│   ├── a7
│   │   └── ac6148611e69b9a074f59a80f356e1e0c8be67
│   ├── f0
│   │   └── 82ea1186a491cd063925d0c2c4f1c056e32ac3
│   ├── info
│   └── pack
└── refs
    ├── heads
    │   └── master
    └── tags

12 directories, 18 files
[dev1@server proj2]$ ls -l objects/75/dcd269e04852ce2f683b9eb41ecd6030c8c841
-r--r--r--. 1 dev1 dev1 54 Jun 20 14:34 objects/75/dcd269e04852ce2f683b9eb41ecd6030c8c841
[dev1@server proj2]$

کله چې تاسو د Git سرور ته بدلونونه اپلوډ کړئ، اضافي فایلونه او لارښودونه رامینځته کیږي، او د دوی مالک په حقیقت کې هغه کارن دی چې اپلوډ کوي. مګر بیا د دې فایلونو او لارښودونو ډله هم د دې کارونکي اصلي ډلې سره مطابقت لري ، دا د dev1 کارونکي لپاره dev1 ګروپ او د dev2 کارونکي لپاره dev2 ګروپ (د پراختیا کونکي کارونکي اصلي ګروپ بدلول به مرسته ونه کړي ، ځکه نو تاسو څنګه کولی شئ په ډیری پروژو کار وکړئ؟). په دې حالت کې، کارن dev2 به د دې توان ونلري چې د کاروونکي dev1 لخوا رامینځته شوي فایلونه بدل کړي، کوم چې کولی شي په فعالیت کې د خرابیدو لامل شي.

لینکس chown - د منظم کارونکي لخوا د فایل مالک بدلول

د فایل مالک نشي کولی خپل ملکیت بدل کړي. مګر هغه کولی شي د هغه فایل ګروپ بدل کړي چې د هغه پورې اړه لري، او بیا دا فایل د نورو کاروونکو لخوا بدلیدلی شي چې په ورته ګروپ کې دي. دا هغه څه دي چې موږ ورته اړتیا لرو.

د Git هک کارول

د هک لپاره کاري لارښود د پروژې اصلي لارښود دی. هوک یو اجرا وړ دی چې د کارونکي لاندې د فشار په کولو سره پرمخ ځي. په دې پوهیدل، موږ کولی شو خپل پلانونه پلي کړو.

[dev1@server proj2]$ mv hooks/post-update{.sample,}
[dev1@server proj2]$ sed -i '2,$ s/^/#/' hooks/post-update
[dev1@server proj2]$ cat <<< 'find . -group $(whoami) -exec chgrp proj2 '"'"'{}'"'"' ;' >> hooks/post-update

یا یوازې

vi hooks/post-update

راځئ چې د پیرودونکي ماشین ته راستون شو.

C:gittest>echo "dev1 3rd line" >> test1.txt

C:gittest>git commit -am "3rd from dev1, testing server hook"
[master b045e22] 3rd from dev1, testing server hook
 1 file changed, 1 insertion(+)

C:gittest>git push origin master
dev1:[email protected]'s password:
   d22c66e..b045e22  master -> master

په ګیټ سرور کې ، موږ د ژمنې وروسته د هک پوسټ تازه سکریپټ عملیات چیک کوو

[dev1@server proj2]$ find . ! -group proj2

- خالي، هرڅه سم دي.

په Git کې د دوهم پراختیا کونکي سره وصل کول

راځئ چې د دویم پراختیا کونکي کار انډول کړو.

په مشتري باندې

C:gittest>git remote remove origin

C:gittest>git remote add origin "ssh://[email protected]/var/gitservertest/proj2"

C:gittest>echo "!!! dev2 added this" >> test1.txt

C:gittest>echo "!!! dev2 wrote" > test2.txt

C:gittest>git add test2.txt

C:gittest>git commit -am "dev2 added to test1 and created test2"
[master 55d49a6] dev2 added to test1 and created test2
 2 files changed, 2 insertions(+)
 create mode 100644 test2.txt

C:gittest>git push origin master
[email protected]'s password:
   b045e22..55d49a6  master -> master

او په ورته وخت کې، په سرور کې ...

[dev1@server proj2]$ find . ! -group proj2

- بیا خالي، هرڅه کار کوي.

د Git پروژې حذف کول او د Git سرور څخه پروژه ډاونلوډ کول

ښه، تاسو کولی شئ یو ځل بیا ډاډ ترلاسه کړئ چې ټول بدلونونه خوندي شوي.

C:gittest>rd /S /Q .
Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.

- د Git پروژې حذف کولو لپاره ، په ساده ډول لارښود په بشپړ ډول پاک کړئ. راځئ چې رامینځته شوي غلطۍ سره مخ شو ، ځکه چې د دې کمانډ په کارولو سره د اوسني لارښود حذف کول ناممکن دي ، مګر دا واقعیا هغه چلند دی چې موږ ورته اړتیا لرو.

C:gittest>dir
 Содержимое папки C:gittest

21.06.2019  08:43    <DIR>          .
21.06.2019  08:43    <DIR>          ..

C:gittest>git clone ssh://[email protected]/var/gitservertest/proj2
Cloning into 'proj2'...
[email protected]'s password:

C:gittest>cd proj2

C:gittestproj2>dir
 Содержимое папки C:gittestproj2

21.06.2019  08:46    <DIR>          .
21.06.2019  08:46    <DIR>          ..
21.06.2019  08:46               114 test1.txt
21.06.2019  08:46                19 test2.txt
C:gittestproj2>type test1.txt
"test dev1 to proj2"
"dev1 added some omre"
"dev1 3rd line"
"!!! dev2 added this"

C:gittestproj2>type test2.txt
"!!! dev2 wrote"

په Git کې د لاسرسي شریکول

اوس راځئ چې ډاډ ترلاسه کړو چې حتی د Git له لارې دوهم پراختیا کونکی نشي کولی د Proj1 پروژې ته لاسرسی ومومي ، په کوم کې چې هغه کار نه کوي.

C:gittestproj2>git remote remove origin

C:gittestproj2>git remote add origin "ssh://[email protected]/var/gitservertest/proj1"

C:gittestproj2>git push origin master
[email protected]'s password:
fatal: '/var/gitservertest/proj1' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

اوس موږ د لاسرسي اجازه ورکوو

[root@server ~]# usermod -aG proj1 dev2

او له هغې وروسته هرڅه کار کوي.

C:gittestproj2>git push origin master
[email protected]'s password:
To ssh://10.1.1.11/var/gitservertest/proj1
 * [new branch]      master -> master

د نورو معلوماتو لپاره،

سربیره پردې ، که چیرې د فایلونو او لارښودونو رامینځته کولو پرمهال د ډیفالټ اجازې سره ستونزه وي ، په CentOS کې تاسو کولی شئ کمانډ وکاروئ

setfacl -Rd -m o::5 -m g::7 /var/gitservertest

همدارنګه په مقاله کې تاسو کولی شئ په کوچنیو ګټورو شیانو وخورئ:

  • په لینکس کې د لارښود ونې جوړولو څرنګوالی
  • څنګه کولای شو په sed کې له یوې ټاکلې کرښې څخه د فایل پای ته د ادرسونو لړۍ تیر کړو، دا دا دی چې د لومړۍ کرښې پرته په ټولو لینونو کې په sed کې ځای پرځای کړئ
  • په لینکس موندلو کې د لټون حالت بدلولو څرنګوالی
  • د لینکس شیل کې د یو لاینر په کارولو سره لوپ ته د څو لینونو لیږدولو څرنګوالی
  • په باش کې د واحد نرخونو څخه د خلاصون څرنګوالی
  • د وینډوز کمانډ لاین کې د ټولو مینځپانګو سره لارښود څنګه حذف کړئ
  • د بیا لیکلو پرته د فایل نوم بدلولو لپاره bash mv څنګه وکاروئ

تاسو د پاملرنې څخه مو مننه.

سرچینه: www.habr.com

Add a comment