የጂአይቲ አገልጋይ የባለብዙ ተጠቃሚ መዳረሻ አደረጃጀት

የጂት አገልጋይን ሲጭኑ እና ሲያዋቅሩ ጥያቄው የሚነሳው ለብዙ ተጠቃሚዎች የበርካታ ፕሮጄክቶች መዳረሻን ስለማደራጀት ነው። ጉዳዩን መርምሬያለሁ እና ሁሉንም መስፈርቶቼን የሚያሟላ መፍትሄ አገኘሁ፡ ቀላል፣ አስተማማኝ፣ አስተማማኝ።

ምኞቴ፡-

  • እያንዳንዱ ተጠቃሚ ከራሱ መለያ ጋር ይገናኛል።
  • ብዙ ተጠቃሚዎች በአንድ ፕሮጀክት ላይ ሊሠሩ ይችላሉ
  • ተመሳሳዩ ተጠቃሚ በብዙ ፕሮጀክቶች ላይ ሊሠራ ይችላል
  • እያንዳንዱ ተጠቃሚ የሚሠራባቸው ፕሮጀክቶች ብቻ ነው መዳረሻ ያለው
  • በአንድ ዓይነት የድር በይነገጽ ብቻ ሳይሆን በትእዛዝ መስመር መገናኘት መቻል አለበት።

እንዲሁም በጣም ጥሩ ይሆናል፡-

  • ለሚቆጣጠሩ ሰዎች ተነባቢ-ብቻ ፈቃዶችን ይስጡ
  • በጊት ውስጥ የተጠቃሚ መዳረሻ መብቶችን በምቾት አስተዳድር

የጂአይቲ አገልጋይን ለማግኘት ሊሆኑ የሚችሉ አማራጮች አጠቃላይ እይታ

በመጀመሪያ ከምን መምረጥ እንዳለቦት ማወቅ አለቦት፣ስለዚህ የጂት ፕሮቶኮሎች ፈጣን አጠቃላይ እይታ ይኸውና።

  • ssh - በልዩ ሁኔታ የተፈጠረ የተጠቃሚ መለያ አገልጋዩን ለመድረስ ጥቅም ላይ ይውላል።
    • Git ሁሉንም ማከማቻዎች ለመድረስ የአንድ መለያ አጠቃቀምን ከውሳኔዎቹ አለማካተቱ አስገራሚ ነው። ይህ የእኔን መስፈርቶች በፍጹም አያሟላም።
    • ብዙ መለያዎችን መጠቀም ትችላለህ፣ ግን የተጠቃሚ መዳረሻን ለተወሰኑ ማውጫዎች ብቻ እንዴት መገደብ ትችላለህ?
      • ወደ የቤት ማውጫ ውስጥ መዝጋት ተስማሚ አይደለም, ምክንያቱም እዚያ ለሌሎች ተጠቃሚዎች የመፃፍ መዳረሻ ማደራጀት አስቸጋሪ ስለሆነ
      • Git እንደ ማገናኛ ስለማይተረጉማቸው ከቤትዎ ማውጫ ሲምሊንኮችን መጠቀምም ከባድ ነው።
      • ወደ አስተርጓሚው መድረስን መገደብ ይቻላል, ነገር ግን ሁልጊዜ እንደሚሰራ ሙሉ ዋስትና የለም
        • በአጠቃላይ ለእንደዚህ አይነት ተጠቃሚዎች የራስዎን የትዕዛዝ አስተርጓሚ ማገናኘት ይችላሉ, ግን
          • በመጀመሪያ ፣ ይህ ቀድሞውኑ ከባድ ውሳኔ ነው ፣
          • እና ሁለተኛ, ይህ ሊገለበጥ ይችላል.

    ነገር ግን ምናልባት ተጠቃሚው ማንኛውንም ትዕዛዞችን ማስፈጸም መቻል ችግር ላይሆን ይችላል?... በአጠቃላይ ይህ ዘዴ በትክክል እንዴት እንደሚጠቀሙበት ካወቁ ሊገለሉ አይችሉም። ወደዚህ ዘዴ በኋላ እንመለሳለን, አሁን ግን ሌሎች አማራጮችን በአጭሩ እንመለከታለን, ምናልባት ቀለል ያለ ነገር ሊኖር ይችላል.

  • የጂት አካባቢያዊ ፕሮቶኮል ከ sshfs ጋር በማጣመር ጥቅም ላይ ሊውል ይችላል፣ ብዙ ተጠቃሚዎችን መጠቀም ይቻላል፣ ግን በመሠረቱ ከቀዳሚው ጉዳይ ጋር ተመሳሳይ ነው።
  • http - ተነባቢ-ብቻ
  • git ተነባቢ-ብቻ ነው።
  • https - ለመጫን አስቸጋሪ, ተጨማሪ ሶፍትዌር ያስፈልግዎታል, የተጠቃሚ መዳረሻን ለማደራጀት አንዳንድ አይነት የቁጥጥር ፓነል ... የሚቻል ይመስላል, ግን በሆነ መንገድ ሁሉም ነገር የተወሳሰበ ነው.

የ ssh ፕሮቶኮሉን በመጠቀም የብዙ ተጠቃሚ ወደ Git አገልጋይ መድረስን ለማደራጀት

ወደ ssh ፕሮቶኮል እንመለስ።

የssh መዳረሻን ለgit ስለሚጠቀሙ የአገልጋዩን ውሂብ ደህንነት ማረጋገጥ አለቦት። በssh በኩል የሚያገናኘው ተጠቃሚ በሊኑክስ አገልጋይ ላይ የራሱን መግቢያ ይጠቀማል፣ ስለዚህ በ ssh ደንበኛ በኩል መገናኘት እና የአገልጋዩን የትእዛዝ መስመር ማግኘት ይችላሉ።
እንደዚህ አይነት መዳረሻ ላይ ምንም ሙሉ ጥበቃ የለም.

ግን ተጠቃሚው ለሊኑክስ ፋይሎች ፍላጎት ሊኖረው አይገባም። ጠቃሚ መረጃ የሚቀመጠው በ git ማከማቻ ውስጥ ብቻ ነው። ስለዚህ, በትእዛዝ መስመር በኩል መዳረሻን መገደብ ሳይሆን ሊኑክስ መሳሪያዎችን በመጠቀም ተጠቃሚው የሚሳተፍባቸውን ሳይጨምር ፕሮጀክቶችን እንዳይመለከት መከልከል ይቻላል.
ግልጽ የሆነው ምርጫ የሊኑክስ ፍቃዶችን ስርዓት መጠቀም ነው.

ቀደም ሲል እንደተጠቀሰው, ለ ssh መዳረሻ አንድ መለያ ብቻ መጠቀም ይቻላል. ይህ ውቅረት ለብዙ ተጠቃሚዎች ደህንነቱ ያልተጠበቀ ነው፣ ምንም እንኳን በሚመከሩት የጂት አማራጮች ዝርዝር ውስጥ ቢካተትም።

በአንቀጹ መጀመሪያ ላይ የተሰጡትን መስፈርቶች ለመተግበር የሚከተለው የማውጫ መዋቅር ከመብቶች እና ከባለቤቶች ምደባ ጋር ተፈጠረ ።

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 ላይ እየሰራ ሲሆን "ገንቢ 2" በፕሮጄክቶች proj2 እና proj3 ላይ እየሰራ ነው።

ማንኛቸውም ገንቢዎች በትእዛዝ መስመር በኩል በ ssh በኩል ከተገናኙ መብቶቻቸው የማይሳተፉባቸውን የፕሮጀክት ማውጫዎች ይዘቶች ለማየት እንኳን በቂ አይሆንም። እሱ ራሱ ይህንን መለወጥ አይችልም።

የዚህ መርህ መሰረት የሊኑክስ መብቶች መሰረታዊ ደህንነት ስለሆነ ይህ እቅድ አስተማማኝ ነው. በተጨማሪም, መርሃግብሩ ለማስተዳደር በጣም ቀላል ነው.

ወደ ልምምድ እንሂድ።

በሊኑክስ አገልጋይ ላይ የጂት ማከማቻዎችን መፍጠር

እንፈትሽ።

[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 አገልጋይ መግፋት

ወደ ደንበኛ ማሽን እንሂድ።

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 የተፈጠሩ ፋይሎችን መለወጥ አይችልም ይህም ወደ ተግባር መበላሸት ሊያመራ ይችላል።

ሊኑክስ ቾውን - የፋይሉን ባለቤት በመደበኛ ተጠቃሚ መለወጥ

የፋይሉ ባለቤት ባለቤትነትን መቀየር አይችልም። ነገር ግን የእሱ የሆነውን የፋይል ቡድን መቀየር ይችላል, ከዚያም ይህ ፋይል በተመሳሳይ ቡድን ውስጥ ባሉ ሌሎች ተጠቃሚዎች ሊስተካከል ይችላል. እኛ የምንፈልገው ያ ነው።

Git መንጠቆን በመጠቀም

ለ መንጠቆ የሚሠራው ማውጫ የፕሮጀክቱ ዋና ማውጫ ነው። መንጠቆ የሚገፋውን በተጠቃሚው ስር የሚሄድ executable ነው። ይህንን በማወቅ እቅዶቻችንን ተግባራዊ ማድረግ እንችላለን.

[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

- ባዶ ፣ ሁሉም ነገር ደህና ነው።

በጊት ውስጥ ሁለተኛ ገንቢን በማገናኘት ላይ

የሁለተኛውን ገንቢ ስራ እንመስለው።

በደንበኛው ላይ

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

- እንደገና ባዶ ፣ ሁሉም ነገር ይሰራል።

የጂት ፕሮጄክትን መሰረዝ እና ፕሮጀክቱን ከጊት አገልጋይ ማውረድ

ደህና፣ ሁሉም ለውጦች መቀመጡን በድጋሚ ማረጋገጥ ይችላሉ።

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

- የጂት ፕሮጄክትን ለመሰረዝ በቀላሉ ማውጫውን ሙሉ በሙሉ ያጽዱ። ይህንን ትእዛዝ በመጠቀም የአሁኑን ማውጫ መሰረዝ ስለማይቻል የተፈጠረውን ስህተት እንታገስ ፣ ግን እኛ የምንፈልገው ይህ ባህሪ ነው።

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 በኩል እንኳን ሁለተኛው ገንቢ የማይሰራበትን የፕሮጅ1 ፕሮጄክት መድረስ እንደማይችል እናረጋግጥ።

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 ምትክ ያድርጉ ።
  • በሊኑክስ ፍለጋ ውስጥ የፍለጋ ሁኔታን እንዴት መለወጥ እንደሚቻል
  • በሊኑክስ ሼል ውስጥ ባለ አንድ መስመርን በመጠቀም ብዙ መስመሮችን ወደ loop እንዴት ማለፍ እንደሚቻል
  • በ bash ውስጥ ነጠላ ጥቅሶችን እንዴት ማምለጥ እንደሚቻል
  • በዊንዶውስ የትእዛዝ መስመር ውስጥ ሁሉንም ይዘቶች የያዘ ማውጫ እንዴት መሰረዝ እንደሚቻል
  • ፋይሉን እንደገና ሳይጽፍ እንደገና ለመሰየም bash mv እንዴት መጠቀም እንደሚቻል

የእርስዎን ትኩረት እናመሰግናለን.

ምንጭ: hab.com

አስተያየት ያክሉ