पुल पर अनुमतियों और स्वामित्व को बदलने से रोकने का कोई तरीका है?


11

हर बार जब मैं करता हूं git pullया git reset, gitअनुमतियाँ और मेरे द्वारा किए गए स्वामित्व में परिवर्तन करता है। अपने आप को देखो:

#!/usr/bin/env bash
rm -rf 1 2

mkdir 1
cd 1
git init
echo 1 > 1 && git add 1 && git ci -m 1

git clone . ../2
cd $_
chmod 0640 1
chgrp http 1

cd ../1
echo 12 > 1 && git ci -am 2

cd ../2
stat 1
git pull
stat 1

उत्पादन:

$ ./1.sh 2>/dev/null | grep -F 'Access: ('
Access: (0640/-rw-r-----)  Uid: ( 1000/    yuri)   Gid: (   33/    http)
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    yuri)   Gid: ( 1000/    yuri)

क्या इसके आसपास काम करने का कोई तरीका है?

मैं वेब सर्वर द्वारा लिखने के लिए कुछ फाइलों / निर्देशिकाओं को सुलभ बनाना चाहता हूं।

जवाबों:


4

ऐसा लगता है कि आपके द्वारा चलाए जा रहे उपयोगकर्ता के पास डिफ़ॉल्ट समूह सेट है yuri। आप इस तरह की पुष्टि कर सकते हैं:

$ id -a
uid=1000(saml) gid=1000(saml) groups=1000(saml),10(wheel),989(wireshark)

आपके खाते का UID यह है: uid=1000(saml)जबकि डिफ़ॉल्ट समूह है git=1000(saml)और उसके बाद कोई भी द्वितीयक समूह है।

नोट: यदि आप चाहते हैं कि गिट क्लोन का विशिष्ट स्वामित्व हो, तो आपके पास कम से कम 2 विकल्प हैं।

विकल्प 1

अनुमतियों के साथ एक मूल निर्देशिका सेट करें जैसा आप चाहते हैं:

$ mkdir topdir
$ chgrp http topdir
$ chmod g+s topdir

$ cd topdir
$ git clone ....

इसने इस निर्देशिका topdirको किसी भी बाल निर्देशिका को लागू करने के लिए मजबूर कर दिया है जिसके पास समूह httpलागू है। यह बड़े पैमाने पर काम करेगा, लेकिन समस्याओं को जन्म दे सकता है, क्योंकि यदि आप फ़ाइलों को इस git क्लोन कार्यक्षेत्र में स्थानांतरित करते हैं, तो उन फ़ाइलों को ऊपर किए गए परिवर्तनों द्वारा लागू नहीं किया जाएगा।

विकल्प 2

काम करने से पहले, अपने डिफ़ॉल्ट समूह को इस httpतरह बदलें :

$ newgrp http
$ git clone ...

यह विधि httpआपके सामान्य डिफ़ॉल्ट समूह के बजाय उनके समूह को सेट करने के लिए बनाई गई किसी भी नई फ़ाइल को बाध्य करेगी yuri, लेकिन यह केवल तब तक काम करेगी जब तक आप newgrpइस कार्यक्षेत्र में काम करने से पहले याद रखें ।

अन्य विकल्प

यदि इनमें से कोई भी स्वीकार्य नहीं लगता है तो आप git कार्यक्षेत्र निर्देशिका पर ACL का उपयोग करने का प्रयास कर सकते हैं। इस साइट पर कई क्यू एंड ए में चर्चा की गई है, जैसे कि इस प्रश्नोत्तर में शीर्षक: लिनक्स के लिए समूह की अनुमति के लिए नई फाइलें प्राप्त करना


पहले, आपको अर्थ होना चाहिए newgrp। फिर, क्या यह केवल वर्तमान शेल के लिए समूह बदलता है? और अंत में, बिंदु केवल विशिष्ट फ़ाइलों / निर्देशिकाओं को वेब सर्वर द्वारा लिखने के लिए सुलभ बनाना था। आखिरकार, मुझे शायद उन्हें मैन्युअल रूप से ठीक करना चाहिए, या कुछ gitहुक सेट करना चाहिए ...
x-yuri

@ एक्स-यूरी - हाँ क्षमा करें यह यहाँ 5 बजे है और मैं 8- बेड पर जाने वाला हूँ।) हां यह केवल वर्तमान शेल के लिए बनी रहती है, इसलिए यह उस दृष्टिकोण के लिए नकारात्मक होगा। यदि आप वेबसर्वर के लिए केवल निश्चित पहुंच का इरादा कर रहे हैं, तो यह मुश्किल हो जाएगा, और आप एसीएल का उपयोग करना चाहेंगे। इसके अलावा, आप इन विवरणों को अपने Q में जोड़ना चाहते हैं। जैसा कि यह है, यह स्पष्ट नहीं है कि आपका इच्छित उद्देश्य क्या है, इसलिए मैं केवल आपको गैर-विशिष्ट शब्दों में उत्तर दे सकता हूं।
स्लम

1
@ x-yuri - इस तरह की पोस्ट अपडेट हुक अधिक उपयुक्त हो सकती है: stackoverflow.com/questions/9613545/…
slm

1
: - @ एक्स-यूरी अनुमतियों को नियंत्रित हुक के तहत Git किताब में चर्चा की है git-scm.com/book/en/Customizing-Git-Git-Hooks
SLM

मैं वास्तव में यह नहीं देखता कि ईमानदार होने के लिए केवल मौजूदा शेल के लिए समूह बदलना एक नकारात्मक पहलू कैसे हो सकता है। मैं इसके बारे में चिंतित था कि बाकी ऐप्स के काम करने के तरीके में बदलाव न हो।
x- यूरी

2

मैं जिस समाधान का उपयोग करता हूं वह कमांड को उस उपयोगकर्ता के रूप में चलाना है जिसके पास अनुमतियाँ हैं जिन्हें आप रखना चाहते हैं:

sudo -u user command

यह अनुमतियाँ बदलने से रहता है। मैं अपने VPS पर git रिपॉजिटरी को अपडेट करते समय इसका उपयोग करता हूं, जबकि वेबसर्वर उपयोगकर्ता के लिए फ़ाइल अनुमतियाँ सेट करता हूं।

यहां भी वही सवाल देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.