एक निर्देशिका में सभी नई फ़ाइलों को एक समूह के लिए सुलभ बनाओ


131

मान लीजिए कि मेरे पास दो उपयोगकर्ता ऐलिस और बॉब हैं और एक ग्रुप ग्रुपनेम और एक फ़ोल्डर है foo, दोनों उपयोगकर्ता ग्रुपनेम (लिनक्स और एक्सटी 3 का उपयोग करके) के सदस्य हैं।

अगर मैं उपयोक्ता ऐलिस के रूप में एक फाइल के तहत सहेजता हूं foo, तो अनुमतियाँ हैं -rw-r--r-- Alice Alice:। हालाँकि, क्या यह संभव है कि प्रत्येक फ़ाइल कुछ fooअनुमतियों के तहत अप्रत्यक्ष रूप से सहेजी गई है -rwxrwx--- Alice GROUPNAME(अर्थात स्वामी एलिस, ग्रुप ग्रुपनाम)?


जवाबों:


91

आप नियत अनुमति बिट्स को नियंत्रित कर सकते हैं umask, और समूह को निर्देशिका सेटगिड बनाकर नियंत्रित कर सकते हैं GROUPNAME

$ umask 002            # allow group write; everyone must do this
$ chgrp GROUPNAME .    # set directory group to GROUPNAME
$ chmod g+s .          # files created in directory will be in group GROUPNAME

ध्यान दें कि आपको प्रत्येक उपनिर्देशिका के लिए chgrp/ करना है chmod; यह स्वचालित रूप से प्रचार नहीं करता है (कि है, एक के तहत न तो मौजूदा और न ही बाद में बनाए निर्देशिका setgid निर्देशिका की जाएगी setgid , हालांकि बाद समूह में हो जाएगा GROUPNAME)।

यह भी ध्यान दें कि umaskएक प्रक्रिया विशेषता है और उस प्रक्रिया और उसके बच्चों द्वारा बनाई गई सभी फाइलों पर लागू होती है (जो समय umaskपर उनके माता-पिता के प्रभाव में विरासत में मिली हैं fork())। उपयोगकर्ताओं को इसे सेट करने की आवश्यकता हो सकती है ~/.profile, और आपकी निर्देशिका से असंबंधित चीजों के लिए देखने की आवश्यकता हो सकती है जिन्हें अलग-अलग अनुमतियों की आवश्यकता होती है। यदि आप अलग-अलग चीजों को करते समय विभिन्न सेटिंग्स की आवश्यकता होती है तो मॉड्यूल उपयोगी हो सकते हैं।

यदि आप POSIX ACL का उपयोग कर सकते हैं तो आप चीजों को थोड़ा बेहतर नियंत्रित कर सकते हैं; यह एक अनुमति मुखौटा और एक समूह दोनों को निर्दिष्ट करने के लिए संभव होना चाहिए, और उन्हें समझदारी से प्रचारित करना चाहिए। POSIX ACLs के लिए समर्थन कुछ परिवर्तनशील है, हालांकि।


6
मूल निर्देशिका पर सेटगिड सेट करने के बाद बनाए गए उपनिर्देशिका में सेटगाइड सेट स्वचालित रूप से होगा।
एरोमास्टर

2
@ एरोमास्टर: कुछ प्रणालियों पर, शायद, लेकिन सभी नहीं; मैंने OSX पर परीक्षण किया और यह कम से कम गैर-रूट के लिए प्रचारित नहीं करता है।
गीकॉउसर

2
अच्छी तरह से डेबियन (और मैं अधिकांश अन्य लिनक्स डिस्ट्रोस को मानता हूं) सेटगिड और समूह का नाम दोनों प्रचार करते हैं।
एरोमास्टर

3
ओएस एक्स पर, एक निर्देशिका पर सेटगिड बिट को केवल अनदेखा किया जाता है; नई फ़ाइलों और निर्देशिकाओं को हमेशा उनकी निर्देशिका वाले समूह को दिया जाता है।
जॉन फ्लैटनेस

क्या यह भी संभव है कि प्रतिलिपि बनाई गई या foo (cp resp। Mv का उपयोग करके) वांछित अनुमतियों को स्वचालित रूप से प्राप्त करें ( -rwxrwx--- A G)?
छात्र

106

यदि संभव हो तो, एक्सेस कंट्रोल लिस्ट (ACL) का उपयोग करें ।

लिनक्स के तहत, सुनिश्चित करें कि आप जिस फाइलसिस्टम का उपयोग कर रहे हैं, वह एसीएल (ज्यादातर यूनिक्स फाइलसिस्टम करते हैं) का समर्थन करता है। ACLs को सक्षम करने के लिए आपको माउंट विकल्पों को बदलने की आवश्यकता हो सकती है: ext2 / ext3 / ext4 के साथ, आपको aclमाउंट विकल्प को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है , इसलिए प्रविष्टि /etc/fstabको इसमें दिखना चाहिए /dev/sda1 / ext4 errors=remount-ro,acl 0 1mount -o remount,acl /रिबूट किए बिना ACL को सक्रिय करने के लिए चलाएँ । एसीएल कमांड लाइन टूल भी स्थापित करें getfaclऔर setfacl, आमतौर पर नामक एक पैकेज में प्रदान किया जाता है acl

अब जब एक बार का सेटअप समाप्त हो गया है, तो समूह को लिखने की अनुमति देने के लिए डायरेक्टरी के एसीएल को बदल दें और इन अनुमतियों को अन्य निर्मित फाइलों से विरासत में प्राप्त करें। लिनक्स के तहत:

setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory

यदि ACL एक विकल्प नहीं हैं, तो समूह के स्वामित्व वाली निर्देशिका बनाएं GROUPNAME, और इसकी अनुमतियों को 2775 या 2770 पर सेट करें chmod g+rwxs /path/to/directorysयहाँ setgid बिट का मतलब है, एक निर्देशिका के लिए, इसका मतलब है कि इस निर्देशिका में बनाई गई फ़ाइलें उस समूह से संबंधित होंगी जो निर्देशिका का मालिक है।

आपको डिफ़ॉल्ट रूप से अपनी सभी फ़ाइलों को समूह-योग्य बनाने के लिए ऐलिस और बॉब के उमस्क सेट करना होगा । अधिकांश सिस्टम पर डिफ़ॉल्ट umask 022 है, जिसका अर्थ है कि फ़ाइलों में समूह और अन्य द्वारा लिखित को छोड़कर सभी अनुमतियाँ हो सकती हैं। 002 में बदलें, जिसका अर्थ केवल लिखने-दर-अन्य अनुमति देने से मना करना है। आप आमतौर पर उस सेटिंग को अपने में डालेंगे ~/.profile:

umask 002    # or 007 to have files not readable by others

6
+1 - बहुत गहन उत्तर। मुझे कभी नहीं पता था कि कोई भी मक्खी निकाल सकता है। जानकार अच्छा लगा।
बोहेज

1
Thie setfacl -d कमांड मेरे लिए काम नहीं करता है क्योंकि उस डायरेक्टरी में मौजूद फाइलों में एक r-- मास्क होता है जो किसी भी लिखने की अनुमति को नकार देता है। कुछ मदद पसंद करेंगे। देखें unix.stackexchange.com/questions/71743/…
बेन

2
@its_me Q1: मैं विकल्प के mountसाथ एक कमांड दिखाता हूं remount, इसलिए यह उपयोग नहीं करता है fstabaclदो बार होने का मतलब है कि फाइलसिस्टम aclपहले से ही विकल्प के साथ आरोहित था , और यह हानिरहित है। हाल के गुठली में ext4 के लिए acl डिफ़ॉल्ट है, वैसे (जब मैंने यह उत्तर लिखा था तो पैच अभी भी नया था)। Q2: आप आदेशों को किसी भी क्रम में चला सकते हैं।
गाइल्स

1
@its_me हाँ, आपकी समझ सही है, यह सिर्फ इतना है कि आप प्रविष्टियों को जोड़ने के क्रम में कोई फर्क नहीं पड़ता
गाइल्स

8
आपको उत्तर को बेहतर बनाना चाहिए , GROUPNAMEइसके बजाय उपयोग करने के लिए G, इसे और अधिक स्पष्ट करने के लिए
knocte

24

यह प्रश्न लिनक्स के लिए एक अच्छा फिट है acl। चूँकि आप अपने OS को राज्य नहीं करते हैं, इसलिए मैं लिनक्स को इस प्रकार मानता हूँ। यहाँ एक उदाहरण सत्र है।

मुझे वास्तव में अच्छे aclट्यूटोरियल की जानकारी नहीं है, लेकिन आप http://www.vanemery.com/Linux/ACL/linux.com/acc.html से भी बदतर काम कर सकते हैं

ध्यान दें कि डिफ़ॉल्ट aclएक स्थानीय umask की तरह व्यवहार करता है। चूंकि कम से कम लिनक्स में, उम्म वैश्विक स्तर पर लागू होते हैं, यह एकमात्र तरीका है जो मुझे स्थानीय उमर के प्रभाव को प्राप्त करने के लिए पता है। किसी कारण से यह एक छोटी ज्ञात विशेषता है। एक स्थानीय umask ओवरराइड के बारे में पूछने वाले लोगों के साथ नेट फंसा हुआ है, लेकिन लगभग किसी को भी उपयोग करने के बारे में नहीं लगता है acl

यह भी ध्यान दें कि आपको उस विभाजन को माउंट करने की आवश्यकता है जो आप aclसमर्थन में काम कर रहे हैं , जैसे।

/dev/mapper/debian-acl /mnt/acl        ext3    defaults,acl        0       2

सत्र निम्नानुसार है:

/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x

के समूह सेट fooहोने के लिए staff, और समूह और के उपयोगकर्ता की एसीएल सेट fooकरने के लिए rwx

/mnt/acl$ chgrp staff foo
/mnt/acl$ setfacl -R -m u::rwx,g::rwx foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x

rwxसाथ ही उपयोगकर्ता और समूह के डिफ़ॉल्ट एसेल्स सेट करें । यह उन अनुमतियों को परिभाषित करता है जो फाइलों और निर्देशिकाओं से विरासत में मिली हैं foo। इसलिए फू के तहत बनाई गई सभी फाइलों और निर्देशिकाओं में समूह की अनुमति होगी rw

/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

अब fooउपयोगकर्ताओं के रूप में कुछ फ़ाइलें बनाएँ faheemऔर john

/mnt/acl$ cd foo
/mnt/acl/foo$ touch bar

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

फाइलों को सूचीबद्ध करें। ध्यान दें कि दोनों फाइलें faheemऔर स्वामित्व वाली फाइलें johnसमूह अनुमतियों के साथ बनाई गई हैं rw

/mnt/acl/foo$ ls -la
total 3
drwxrwxr-x+ 2 faheem staff  1024 May  9 01:22 .
drwxr-xr-x  4 faheem faheem 1024 May  9 01:20 ..
-rw-rw----  1 faheem faheem    0 May  9 01:20 bar
-rw-rw----  1 john   john      0 May  9 01:22 baz
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.