लिनक्स पर समूह की अनुमति प्राप्त करने के लिए नई फाइलें प्राप्त करना


87

मुझे लिनक्स सर्वर पर अनुमतियों की समस्या है। मैं बीएसडी का आदी हूं। जब निर्देशिका किसी समूह के स्वामित्व में होती है, तो वह उपयोगकर्ता जिसके पास www-data होता है, वह नहीं होता है, उसमें बनाई गई फ़ाइलें उस समूह के स्वामित्व में होंगी। यह महत्वपूर्ण है क्योंकि मैं चाहता हूं कि वेबसर्वर (जिसे मैं रूट के रूप में नहीं चलाऊंगा) द्वारा फ़ाइलों को पढ़ा जा सकता है, लेकिन इसलिए एक उपयोगकर्ता अभी भी निर्देशिका में नई फाइलें डाल सकता है। मैं उपयोगकर्ताओं को www-data में नहीं डाल सकता क्योंकि तब वे हर दूसरे उपयोगकर्ता वेबसाइटों को पढ़ सकते हैं।

मैं चाहता हूं कि वेबसर्वर सभी वेबसाइटों को पढ़ें, मैं चाहता हूं कि उपयोगकर्ता स्वयं को बदलने में सक्षम हों।

इस समय फ़ोल्डर्स पर अनुमतियाँ इस तरह सेट की गई हैं ...।

drwxr-x--- 3 john www-data 4096 Feb 17 21:27 john

यह इस तरह से काम करने की अनुमति के लिए बीएसडी पर मानक व्यवहार है। मुझे ऐसा करने के लिए लिनक्स कैसे मिलेगा?


2
क्या आप ACL का उपयोग कर सकते हैं?
स्लम

जवाबों:


128

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

उदाहरण

$ whoami
saml

$ groups
saml wheel wireshark

परमिट + मालिकों के साथ एक निर्देशिका सेटअप

$ sudo mkdir --mode=u+rwx,g+rs,g-w,o-rwx somedir
$ sudo chown saml.apache somedir
$ ll -d somedir/
drwxr-s---. 2 saml apache 4096 Feb 17 20:10 somedir/

इस dir में किसी फ़ाइल को saml के रूप में स्पर्श करें

$ whoami
saml

$ touch somedir/afile
$ ll somedir/afile 
-rw-rw-r--. 1 saml apache 0 Feb 17 20:11 somedir/afile

इससे आपको लगभग वैसा ही मिलेगा जैसा आप चाहते हैं। यदि आप वास्तव में वही चाहते हैं जो आपने हालांकि वर्णित किया है, तो मुझे लगता है कि आपको उस (एसीएल) को प्राप्त करने के लिए एक्सेस कंट्रोल लिस्ट की कार्यक्षमता का सहारा लेना होगा।

एसीएल

यदि आप निर्देशिका के तहत बनाई जाने वाली फ़ाइलों पर अनुमतियों पर थोड़ा और नियंत्रण प्राप्त करना चाहते हैं somedir, तो आप डिफ़ॉल्ट अनुमतियों को सेट करने के लिए निम्न ACL नियम जोड़ सकते हैं।

इससे पहले

$ ll -d somedir
drwxr-s---. 2 saml apache 4096 Feb 17 20:46 somedir

अनुमतियाँ सेट करें

$ sudo setfacl -Rdm g:apache:rx somedir
$ ll -d somedir/
drwxr-s---+ 2 saml apache 4096 Feb 17 20:46 somedir/

सूचना +अंत में, इसका मतलब है कि इस निर्देशिका यह करने के लिए लागू एसीएल है।

$ getfacl somedir
# file: somedir
# owner: saml
# group: apache
# flags: -s-
user::rwx
group::r-x
other::---
default:user::rwx
default:group::r-x
default:group:apache:r-x
default:mask::r-x
default:other::---

उपरांत

$ touch somedir/afile
$ ll somedir/afile 
-rw-r-----+ 1 saml apache 0 Feb 17 21:27 somedir/afile
$ 

$ getfacl somedir/afile
# file: somedir/afile
# owner: saml
# group: apache
user::rw-
group::r-x              #effective:r--
group:apache:r-x        #effective:r--
mask::r--
other::---

डिफ़ॉल्ट अनुमतियों ( setfacl -Rdm) सेट के साथ सूचना दें ताकि अनुमतियाँ r-xडिफ़ॉल्ट रूप से ( g:apache:rx) हो। यह किसी भी नई फाइल को केवल अपने rबिट सक्षम होने के लिए मजबूर करता है ।


मैं चाहता था कि कार्यक्षमता प्रदान करने के लिए लगता है, धन्यवाद।
जॉन टेट

यह मेरी समान समस्या को हल करने के लिए भी लगता है। हालाँकि, मैं अंतिम वाक्य को काफी नहीं समझता: "यह किसी भी नई फाइल को केवल अपने r बिट सक्षम करने के लिए मजबूर करता है।" X अनुमति सक्षम क्यों नहीं है? क्या डिफ़ॉल्ट रूप से इसे सक्षम करने का कोई तरीका है ??
योबिन

1
@ योबिन मुझे लगता है कि यह एक सुरक्षा की बात है, आप वास्तव में डिफ़ॉल्ट रूप से निष्पादन योग्य फ़ाइल नहीं चाहते हैं
cdarken

यह साथ काम नहीं करता है unzip?
datasn.io

@ datasn.io - के मैन पेज को देखें unzip। विशेष रूप से -Xस्विच।
स्लम

37

टी एल: डॉ; कंटेनर फ़ोल्डर के समूह को नई फ़ाइलें बनाने के लिए:

$ chmod g+s somefolder

नोट: इसके स्वीकृत उत्तर में निहित है, यह सिर्फ एक स्निपेट है।


3
सेटगिड का अर्थ है कि नई फ़ाइलों और फ़ोल्डरों में सही समूह होगा, लेकिन याद रखें कि यदि आप फ़ाइलों को पेड़ में स्थानांतरित करते हैं, तो उनके पास सही धन कॉन्फ़िगर नहीं होगा। ACL दृष्टिकोण (सामान्य रूप में) के साथ मुकाबला करता है।
क्रिस मॉर्गन

@ क्रिसमर्गन इसका सामना कैसे करता है? स्वीकृत जवाब से समाधान मेरे मामले में स्थानांतरित फ़ाइलों के लिए कुछ भी नहीं किया।
दान एम।

@DanM .: फ़ाइल मोड्स के साथ, आप उन अनुमतियों को सेट करते हैं जो विरासत में नहीं मिली हैं; लेकिन ACLs के साथ, आप उन अनुमतियों को सेट करते हैं जो विरासत में मिली हैं (हालाँकि बच्चे अपने स्वयं के ACLs को निर्दिष्ट कर सकते हैं जो उस से अलग हो जाते हैं), रनटाइम पर जाँच की जा रही है।
क्रिस मॉर्गन

@ क्रिसमर्गन हाँ। आप उसे कैसे करते हैं? ACL फॉर्म स्वीकृत उत्तर का उपयोग करने से समाधान काम नहीं करता है।
डैन एम।

10

स्लम के उत्तर के पूरक के रूप में, ध्यान दें कि, ext2 / 3/4 फाइल सिस्टम पर, आप bsdgroupsविभाजन पर माउंट विकल्प का उपयोग करके आपके द्वारा वर्णित बीएसडी व्यवहार को दोहरा सकते हैं । से mount(1)आदमी पेज:

grpid|bsdgroups and nogrpid|sysvgroups
              These options define what group id a newly  created  file  gets.
              When  grpid  is  set,  it takes the group id of the directory in
              which it is created; otherwise (the default) it takes the  fsgid
              of  the current process, unless the directory has the setgid bit
              set, in which case it takes the gid from the  parent  directory,
              and also gets the setgid bit set if it is a directory itself.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.