डिफ़ॉल्ट स्वामी को "स्वचालित रूप से" सेट करने के लिए एक निर्देशिका की setuid
तरह व्यवहार करना होगा setgid
। हालाँकि, जब इसे FreeBSD पर कॉन्फ़िगर किया जा सकता है, तो अन्य UNIX और Linux सिस्टम केवल अनदेखा करते हैं u+s
। हालांकि आपके मामले में, एक और समाधान हो सकता है।
मैं चाहता हूं कि एक निर्देशिका होनी चाहिए जिसे एक उपयोगकर्ता के लिए एक समूह जोड़कर साझा किया जा सकता है। इस निर्देशिका में बनाई गई कोई भी चीज़ अपने माता-पिता से अनुमति योजना प्राप्त करती है। अगर मैं जो कोशिश कर रहा हूं, उससे बेहतर तरीका है, मैं सब कान हूं।
इसलिए, मूल रूप से, मैं जो देखता हूं, आप समूह तंत्र का उपयोग करके एक निर्देशिका तक पहुंच को नियंत्रित करना चाहते हैं। हालाँकि, इसके लिए आपको संपूर्ण निर्देशिका संरचना में अनुमतियों को प्रतिबंधित करने की आवश्यकता नहीं है। वास्तव में, निर्देशिका --x
निष्पादन बिट सिर्फ वही हो सकता है जिसकी आपको आवश्यकता है। मैं आपको एक उदाहरण देता हूं। ऐसा मानते हुए...
group_dir
निर्देशिका तक पहुंच को नियंत्रित करने वाला समूह है ourgroup
।
- केवल
ourgroup
समूह के लोग ही पहुंच सकते हैं group_dir
।
user1
और user2
से संबंधित हैं ourgroup
।
- डिफ़ॉल्ट umask 0022 है।
... निम्नलिखित सेटअप पर विचार करें:
drwxrws--- root:ourgroup |- group_dir/
drwxr-sr-x user1:ourgroup |---- group_dir/user1_submission/
drwxr-sr-x user2:ourgroup |---- group_dir/user2_submission/
-rw-r--r-- user2:ourgroup |-------- group_dir/user2_submission/README
यहां, मान लें कि प्रत्येक आइटम को उसके स्वामी द्वारा बनाया गया था।
अब, इस सेटअप में:
- सभी निर्देशिकाओं को सभी के द्वारा स्वतंत्र रूप से ब्राउज़ किया जा सकता है
ourgroup
। समूह में से कोई भी अंदर कहीं भी फ़ाइलें बना सकता है, ले जा सकता है, हटा सकता है group_dir
(लेकिन गहरा नहीं)।
- जो कोई भी अंदर नहीं है
ourgroup
, उसे अवरुद्ध किया जाएगा group_dir
, और इसलिए इसके तहत कुछ भी हेरफेर करने में असमर्थ होगा। उदाहरण के लिए, user3
(जो सदस्य नहीं है ourgroup
), पढ़ नहीं सकता group_dir/user2_submission/README
(भले ही उसके पास r--
फ़ाइल पर अनुमति हो)।
हालाँकि, इस मामले में थोड़ी समस्या है: क्योंकि विशिष्ट umask के कारण, उपयोगकर्ताओं द्वारा बनाई गई वस्तुओं को समूह के अन्य सदस्यों द्वारा हेरफेर नहीं किया जा सकता है। यह वह जगह है जहाँ ACLs आते हैं। डिफ़ॉल्ट अनुमतियाँ सेट करके, आप umask मान के बावजूद सब कुछ ठीक कर देंगे:
$ setfacl -dRm u::rwX,g::rwX,o::0 group_dir/
यह कॉल सेट:
rw(x)
स्वामी के लिए डिफ़ॉल्ट अनुमतियां
rw(x)
समूह के लिए डिफ़ॉल्ट अनुमतियाँ।
- दूसरों के लिए डिफ़ॉल्ट रूप से कोई अनुमति नहीं। ध्यान दें कि चूंकि अन्य
group_dir
वैसे भी एक्सेस नहीं कर सकते हैं , इसलिए यह वास्तव में कोई फर्क नहीं पड़ता कि उनकी अनुमतियाँ इसके नीचे क्या हैं।
अब, यदि मैं एक आइटम बनाता हूं user2
:
$ touch group_dir/user2_submission/AUTHORS
$ ls -l group_dir/user2_submission/AUTHORS
rw-rw---- user2:ourgroup group_dir/user2_submission/AUTHORS
इस ACL के साथ, हम अपनी पिछली संरचना के पुनर्निर्माण की कोशिश कर सकते हैं:
drwxrws---+ root:ourgroup |- group_dir/
drwxrws---+ user1:ourgroup |---- group_dir/user1_submission/
drwxrws---+ user2:ourgroup |---- group_dir/user2_submission/
-rw-rw----+ user2:ourgroup |-------- group_dir/user2_submission/README
यहां फिर से, प्रत्येक आइटम को उसके मालिक द्वारा बनाया गया है।
इसके अतिरिक्त, यदि आप निर्देशिका का उपयोग करने वालों को थोड़ी अधिक शक्ति / सुरक्षा देना चाहते हैं, तो आप एक चिपचिपा सा विचार करना चाह सकते हैं। उदाहरण के लिए, इसे user1
हटाने से रोका जाएगा user2_submission
(क्योंकि उसकी -w-
अनुमति है group_dir
):
$ chmod +t group_dir/
अब, यदि वह निर्देशिका user1
को हटाने user2
की कोशिश करता है , तो उसे एक प्यारा मिलेगा Operation not permitted
। ध्यान दें कि हालांकि यह निर्देशिका संरचना संशोधनों को रोकता है group_dir
, इसके नीचे मौजूद फाइलें और निर्देशिकाएं अभी भी सुलभ हैं:
user1@host $ rm -r user2_submission
Operation not permitted
user1@host $ cat /dev/null > user2_submission/README
user1@host $ file user2_submission/README
user2_submission/README: empty (uh-oh)
एक और बात यह है कि जिन ACL का उपयोग हमने डिफ़ॉल्ट अनुमतियों के लिए किया है। इसलिए यह संभव है कि किसी आइटम के मालिक से जुड़ी अनुमतियों को बदल दिया जाए। उदाहरण के लिए, user2
पूरी तरह से चला सकते हैं ...
$ chown g= user2_submission/ -R
or
$ chgrp nobody user2_submission -R
... इसलिए समूह में किसी को भी अपनी पूरी सबमिशन निर्देशिका उपलब्ध नहीं है।
हालाँकि, जब से आप मूल रूप rws
से समूह में किसी को भी पूर्ण पहुँच देने को तैयार हैं , मैं मान रहा हूँ कि आप इन उपयोगकर्ताओं पर भरोसा कर रहे हैं, और आप उनसे बहुत से दुर्भावनापूर्ण कार्यों की अपेक्षा नहीं करेंगे।