Eagrú rochtana il-úsáideoirí ar an bhfreastalaí GIT

Nuair a bhíonn freastalaí Git á shuiteáil agus á chumrú, ardaítear an cheist maidir le rochtain a eagrú do roinnt úsáideoirí ar roinnt tionscadal. Rinne mé roinnt taighde ar an gceist agus fuair mé réiteach a chomhlíonann mo chuid riachtanas go léir: simplí, sábháilte, iontaofa.

Is iad mo mhianta:

  • nascann gach úsáideoir lena chuntas féin
  • Is féidir le húsáideoirí iolracha oibriú ar an tionscadal céanna
  • is féidir leis an úsáideoir céanna oibriú ar thionscadail iolracha
  • níl rochtain ag gach úsáideoir ach ar na tionscadail sin ar a n-oibríonn sé
  • ba cheart go bhféadfaí nascadh tríd an líne ordaithe, agus ní hamháin trí chomhéadan gréasáin de shaghas éigin

Bheadh ​​sé go hiontach freisin:

  • cearta inléite amháin a dheonú do dhaoine a rialú
  • ceadanna úsáideora a riar go caothúil in Git

Forbhreathnú ar roghanna féideartha chun rochtain a fháil ar an bhfreastalaí GIT

Ar an gcéad dul síos, ní mór duit fios a bheith agat cad atá le roghnú as, mar sin forbhreathnú gairid ar na prótacail Git.

  • ssh - úsáidtear cuntas úsáideora cruthaithe go speisialta chun rochtain a fháil ar an bhfreastalaí.
    • is aisteach an rud é nach molann Git gan cuntas amháin a úsáid chun rochtain a fháil ar gach stór. Ní shásaíonn sé seo mo chuid riachtanas ar chor ar bith.
    • Is féidir leat cuntais iolracha a úsáid, ach conas is féidir leat teorainn a chur le rochtain úsáideora ar eolairí áirithe amháin?
      • Níl sé oiriúnach an t-eolaire baile a dhúnadh, toisc go bhfuil sé deacair rochtain scríofa a eagrú d'úsáideoirí eile ann
      • Tá sé deacair naisc siombalacha ón eolaire baile a úsáid freisin mar ní léirmhíníonn Git iad mar naisc.
      • Srian le rochtain ar an ateangaire, bhuel, is féidir leat, ach níl aon ráthaíocht iomlán go n-oibreoidh sé seo i gcónaí
        • Go ginearálta is féidir leat d'ateangaire ordaithe féin a nascadh le haghaidh úsáideoirí den sórt sin, ach,
          • ar an gcéad dul síos, is cinneadh deacair éigin é seo cheana féin,
          • agus 2, is féidir é a sheachbhóthar.

    Ach b'fhéidir nach fadhb é go mbeidh an t-úsáideoir in ann aon orduithe a fhorghníomhú? .. Go ginearálta, ní féidir an modh seo a chur as an áireamh má dhéanann tú amach conas é a úsáid. Fillfimid ar an modh seo níos déanaí, ach faoi láthair déanfaimid breithniú gairid ar na roghanna eile atá fágtha, b'fhéidir go mbeidh rud éigin níos simplí ann.

  • is féidir prótacal áitiúil git a úsáid i gcomhcheangal le sshfs, is féidir ilúsáideoirí a úsáid, ach go bunúsach tá sé mar an gcéanna leis an gcás roimhe seo
  • http - inléite amháin
  • tá git inléite amháin
  • Tá sé deacair https a shuiteáil, ní mór duit bogearraí breise, cineál éigin de phainéal rialaithe chun rochtain úsáideora a eagrú ... tá cuma indéanta, ach ar bhealach tá gach rud casta.

An prótacal ssh a úsáid chun rochtain il-úsáideoir ar an bhfreastalaí Git a eagrú

Fillfimid ar an bprótacal ssh.

Ós rud é go n-úsáidtear rochtain ssh le haghaidh git, ní mór sonraí an fhreastalaí a bheith slán. Úsáideann an t-úsáideoir a nascann trí ssh a logáil isteach féin ar an bhfreastalaí Linux, ionas gur féidir leo nascadh tríd an gcliant ssh agus rochtain a fháil ar líne ordaithe an fhreastalaí.
Níl aon chosaint iomlán in aghaidh rochtain den sórt sin a fháil.

Ach níor cheart go mbeadh suim ag an úsáideoir i gcomhaid Linux. Ní stóráiltear faisnéis bhríoch ach amháin sa stór git. Mar sin, ní féidir leat rochtain a shrianadh tríd an líne ordaithe, ach trí Linux, toirmeasc a chur ar an úsáideoir féachaint ar thionscadail, gan iad siúd a ghlacann sé páirt a áireamh.
Is léir an córas ceadanna Linux a úsáid.

Mar a luadh cheana, ní féidir ach cuntas amháin a úsáid le haghaidh rochtana ssh. Níl an chumraíocht seo sábháilte do roinnt úsáideoirí, cé go bhfuil sé san áireamh i liosta git de na roghanna molta.

Chun na ceanglais a thugtar ag tús an ailt a chur i bhfeidhm, cruthaítear an struchtúr eolaire seo a leanas le sannadh cearta agus úinéirí:

1) eolairí tionscadail

dir1 (pro1: proj1,0770)
dir2 (pro2: proj2,0770)
dir3 (pro3: proj3,0770)
...
i gcás
dir1, dir2, dir3 - eolairí tionscadail: tionscadal 1, tionscadal 2, tionscadal 3.

proj1: proj1, proj2: proj2, proj3:proj3 is úsáideoirí Linux cruthaithe go speisialta iad a sanntar mar úinéirí na n-eolairí tionscadail faoi seach.

tá na cearta do gach eolaire socraithe go dtí 0770 - rochtain iomlán don úinéir agus a ghrúpa, agus cosc ​​iomlán do gach duine eile.

2) cuntais fhorbróra

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

Is é an príomhphointe ná go sanntar grúpa breise d’úsáideoir an chórais ar leis an tionscadal comhfhreagrach é do na forbróirí. Déanann riarthóir freastalaí Linux é seo le hordú amháin.

Sa sampla seo, tá Forbróir 1 ag obair ar thionscadail proj1 agus proj2, agus tá Forbróir 2 ag obair ar thionscadail proj2 agus proj3.

Má nascann aon cheann de na Forbróirí trí ssh tríd an líne ordaithe, ansin ní leor a chearta fiú féachaint ar a bhfuil in eolairí na dtionscadal nach bhfuil sé rannpháirteach iontu. Ní féidir leis é féin a athrú.

Ós rud é gurb é bunús an phrionsabail seo slándáil bhunúsach chearta Linux, tá an scéim seo iontaofa. Ina theannta sin, tá an scéim an-éasca a riar.

Bímid ar aghaidh chun cleachtadh.

Stórálacha Git a Chruthú ar Fhreastalaí Linux

Déanaimid seiceáil.

[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

tuirseach ag clóscríobh...

[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

Táimid cinnte go bhfuil sé dodhéanta rochtain a fháil ar stórtha daoine eile ón líne ordaithe agus fiú féachaint ar a bhfuil iontu.

[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

Comhoibriú in Git ó roinnt forbróirí ar thionscadal amháin

Tá ceist amháin fós ann, má thugann forbróir amháin comhad nua isteach, ansin ní féidir le forbróirí eile é a athrú, toisc gurb é féin a úinéir (mar shampla, dev1), agus ní an t-úsáideoir ar leis an tionscadal é (mar shampla, proj1). Ós rud é go bhfuil stór freastalaí againn, ar an gcéad dul síos, ní mór dúinn fios a bheith againn conas a socraítear an t-eolaire “.git” agus an gcruthaítear comhaid nua.

Cruthaigh stór áitiúil Git agus brúigh chuig freastalaí Git

A ligean ar bogadh ar aghaidh go dtí an meaisín cliant.

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>

Ag an am céanna, gintear comhaid nua ar an bhfreastalaí, agus baineann siad leis an úsáideoir a rinne an bhrú

[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]$

Nuair a dhéantar na hathruithe a uaslódáil chuig an bhfreastalaí Git, cruthaítear comhaid agus eolairí breise agus is leis an uaslódálaí iad. Ach ansin comhfhreagraíonn grúpa na gcomhad agus na heolairí seo freisin do phríomhghrúpa an úsáideora seo, is é sin, an grúpa dev1 don úsáideoir dev1 agus an grúpa dev2 don úsáideoir dev2 (ní chuideoidh sé le príomhghrúpa úsáideora an fhorbróra a athrú, mar gheall ar sin conas a bheith ag obair ar thionscadail iolracha?). Sa chás seo, ní bheidh an t-úsáideoir dev2 in ann na comhaid a chruthaigh an t-úsáideoir dev1 a mhodhnú, agus tá sárú ar fheidhmiúlacht ag baint leis seo.

Linux chown - ag athrú úinéir comhaid ag gnáthúsáideoir

Ní féidir le húinéir comhaid a úinéireacht a athrú. Ach is féidir leis an grúpa comhaid a bhaineann leis a athrú, agus ansin is féidir le húsáideoirí eile atá sa ghrúpa céanna an comhad seo a athrú. Sin a theastaíonn uainn.

Ag baint úsáide as an Hook Git

Is é an t-eolaire oibre le haghaidh Hook bun-eolaire an tionscadail. Is inrite é hook a ritheann faoin úsáideoir atá ag déanamh an bhrú. agus é seo á fhios againn, is féidir linn ár bpleananna a chur i gcrích.

[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

ceachtar díreach

vi hooks/post-update

A ligean ar dul ar ais go dtí an meaisín cliant.

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

Ar an bhfreastalaí Git, seiceáil obair an script iar-nuashonraithe hook tar éis an tiomantais

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

- folamh, tá gach rud go breá.

Ag Ceangal Dara Forbróir le Git

Déanaimis obair an dara forbróir a insamhail.

Ar an gcliant

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

Agus ag an am céanna, ar an bhfreastalaí ...

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

- arís folamh, oibríonn gach rud.

Tionscadal Git a scriosadh agus Tionscadal a Luchtú ó Fhreastalaí Git

Bhuel, is féidir leat a chinntiú arís go bhfuil na hathruithe go léir sábháilte.

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

- chun tionscadal Git a bhaint, níl le déanamh ach an t-eolaire a ghlanadh go hiomlán. Cuirimis suas leis an earráid a tugadh, ós rud é go bhfuil sé dodhéanta an eolaire reatha a scriosadh leis an ordú seo, ach is é seo go díreach an t-iompar a theastaíonn uainn.

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"

Rochtain a Chomhroinnt in Git

Anois déanaimis deimhin de nach féidir leis an dara forbróir rochtain a fháil ar thionscadal Proj1 trí Git, nach bhfuil sé ag obair air.

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.

Ceadaigh rochtain anois

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

agus ina dhiaidh sin oibríonn gach rud.

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

Le haghaidh tuilleadh eolais a fháil,

Ina theannta sin, má tá fadhb ann leis na ceadanna réamhshocraithe agus comhaid agus eolairí á gcruthú, ar CentOS is féidir leat an t-ordú a úsáid

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

Chomh maith leis sin san alt is féidir leat teacht ar rudaí beaga úsáideacha:

  • Conas crann eolaire a thógáil i linux
  • conas raon seoltaí a aistriú ó líne áirithe go dtí deireadh an chomhaid i sed, is é sin, athsholáthar a dhéanamh i sed i ngach líne ach amháin an chéad líne
  • Conas riocht cuardaigh a inbhéartú i Linux find
  • conas a théann línte iolracha trí aon-líneáil i blaosc linux
  • conas a éalú Sleachta aonair i bash
  • conas eolaire a scriosadh ina bhfuil gach ábhar i líne ordaithe windows
  • Conas comhad a athainmniú ag baint úsáide as bash mv gan é a athscríobh

Go raibh maith agat as do aird.

Foinse: will.com

Add a comment