एक निश्चित निर्देशिका में नई फ़ाइलों के लिए डिफ़ॉल्ट समूह और अनुमतियां निर्दिष्ट करें


15

मेरे पास एक निश्चित निर्देशिका है जिसमें कई उपयोगकर्ताओं द्वारा साझा की गई एक परियोजना है। ये उपयोगकर्ता इस निर्देशिका तक पहुंच प्राप्त करने और फ़ाइलों को संशोधित / बनाने के लिए SSH का उपयोग करते हैं।

यह परियोजना केवल उपयोगकर्ताओं के एक निश्चित समूह के लिए लेखन योग्य होनी चाहिए: इसे "माइग्रुप" के नाम से जाने देती है। SSH सत्र के दौरान, वर्तमान उपयोगकर्ता द्वारा बनाई गई सभी फाइलें / निर्देशिकाएं डिफ़ॉल्ट रूप से समूह "mygroup" के स्वामित्व में होनी चाहिए और समूह-लेखन योग्य अनुमतियाँ होनी चाहिए।

मैं अनुमतियों की समस्या को हल कर सकता हूं umask:

$ cd project
$ umask 002
$ touch test.txt

फ़ाइल "test.txt" अब समूह-लेखन योग्य है, लेकिन फिर भी मेरे डिफ़ॉल्ट समूह ("गलत", मेरे उपयोगकर्ता नाम के समान) और "माइग्रुप" से संबंधित नहीं है। मैं chgrpइच्छित समूह को सेट करने के लिए पुनरावृत्ति कर सकता हूं , लेकिन मैं यह जानना चाहता था कि कुछ समूह को स्पष्ट रूप से सेट करने का एक तरीका है जैसे umask एक सत्र के दौरान डिफ़ॉल्ट अनुमतियों को बदलता है।

यह विशिष्ट निर्देशिका एक काम की नकल के साथ एक साझा Git रेपो और मैं चाहता हूँ git checkoutऔर git resetसंचालन काम कर प्रतिलिपि में बनाए गए नए फ़ाइलों के लिए सही मुखौटा और समूह स्थापित करने के लिए। ओएस उबुन्टु लिनक्स है।

अपडेट: एक सहकर्मी सुझाव देता है कि मुझे POSIX ACL के गेटफेकल / सेटफैक्ल में देखना चाहिए लेकिन umask 002मौजूदा सत्र में संयुक्त समाधान मेरे लिए काफी अच्छा है और बहुत अधिक सरल है।

जवाबों:


19

किसी दिए गए डायरेक्टरी इनहेरिट ग्रुप राइट्स के तहत सभी फाइलें रखने के लिए, आपको अपनी डायरेक्टरी पर सेटगिड बिट का उपयोग करना होगा। इस लिंक को देखें ।

 $ mkdir test
 $ sudo chown raphink.staff test
 $ ls -lhd test
     drwxr-xr-x 2 raphink staff 4.0K 2009-12-21 16:19 test
 $ sudo chmod g+s test # Set the setgid bit
 $ ls -lhd test
     drwxr-sr-x 2 raphink staff 4.0K 2009-12-21 16:21 test
 $ touch test/foo
 $ ls -lh test
     total 0
     -rw-r--r-- 1 raphink staff 0 2009-12-21 16:23 foo

धन्यवाद। दिलचस्प है कि मुझे यह
गोग्लिंग

6

यदि आप मौजूदा फ़ोल्डर के साथ ऐसा करना चाहते हैं, तो आपको यह सुनिश्चित करने की आवश्यकता है कि सभी सबफ़ोल्डर्स के लिए भी सेटगिट बिट सक्षम है। हालाँकि, आपको फ़ाइलों पर इसकी आवश्यकता नहीं है, और आप शायद इसे फ़ाइलों पर भी नहीं चाहते हैं। यहां बताया गया है कि इसे सभी सबफ़ोल्डर्स के लिए पुनरावर्ती रूप से कैसे सेट किया जाए।

find /path/to/base/dir -type d -exec chmod g+s {} +

4

मुझे स्रोत वापस नहीं मिल रहा है, लेकिन setgidनंगे गिट रिपॉजिटरी के लिए इस मुद्दे को हल करने के लिए उपयोग करना, जो मुझे लगता है कि आपका मामला है, पदावनत है, और कुछ मामलों में समस्या पैदा कर सकता है।

core.sharedRepositoryध्वज के माध्यम से Git इस सब का ध्यान रख सकता है । मेरे पास एक ही मुद्दा था और इसे इस प्रकार हल किया:

मान लें repogroupकि आपका समूह है, और आपके पास cdरेपो निर्देशिका है:

पहले साझा किए गए झंडे को इसमें बदलें group:

git config core.sharedRepository group 

नोट: यहां आपको कीवर्ड का उपयोग करना होगा group, समूह के नाम का नहीं। यह विकल्प के साथ नंगे भंडार बनाने के बराबर है --shared=group

फिर पूरे रिपॉजिटरी के लिए समूह बदलें:

chgrp -R repogroup .

यह सुनिश्चित करने के लिए कि मौजूदा निर्देशिकाएं समूह-लेखन योग्य ( g+w) हैं, और मौजूदा निष्पादक भी समूह-निष्पादन योग्य बन जाते हैं ( g+X)

chmod -R g+wX .

एक बार जब आप इस किया है, Git सम्मान shared=groupझंडा और, बाद में समूह की अनुमतियों की देखभाल, मौजूदा और नए फ़ाइलों के लिए तो आप को फिर से आवश्यकता नहीं होगी umaskया chgrp

अगर मुझे यह वापस मिल जाए तो मैं स्रोत को एक टिप्पणी में डालूँगा।


3

जब मैं * निक्स की तरफ आता हूं तो मैं ज्यादा एक्सपर्ट नहीं हूं, लेकिन मुझे लगता है कि आप जिसे ढूंढ रहे हैं उसे सेटगिड कहा जाता है।

देखें यहाँ


1

ACL का उपयोग किए बिना लिनक्स / UNIX में पेरेंट डायरेक्टरी परमिशन को इनहेरिट करना मुश्किल है। लेकिन डिफ़ॉल्ट फ़ाइल अनुमतियाँ असाइन करने का एक तरीका है, bellow लिंक की जाँच करें

क्या आप मूल निर्देशिका अनुमतियाँ प्राप्त कर सकते हैं।

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