पैरेंट डायरेक्टरी से नई फाइल की अनुमति कैसे प्राप्त करें?


85

मेरे पास एक निर्देशिका है data। फिर मैं यूजर आईडी 'रोबोट' के तहत एक स्क्रिप्ट चला रहा हूं। रोबोट dataडायरेक्टरी को लिखता है और फाइलों को अपडेट करता है। dataमुझे और रोबोट दोनों को अपडेट करने के लिए विचार खुला है।

इसलिए मैं अनुमति और मालिक समूह को इस तरह से सेटअप करता हूं

drwxrwxr-x  2 me robot-grp 4096 Jun 11 20:50 data

जहाँ मैं और रोबोट दोनों 'रोबोट-जीआरपी' से संबंधित हैं। मैं अनुमति और मालिक समूह को मूल निर्देशिका की तरह पुनरावर्ती रूप से बदलता हूं।

मैं नियमित रूप से dataनिर्देशिका में नई फ़ाइलों को अपलोड करता हूं rsync। दुर्भाग्य से, अपलोड की गई नई फाइलें माता-पिता की निर्देशिका की अनुमति को प्राप्त नहीं करती हैं जैसा कि मुझे उम्मीद है। इसके बजाय यह इस तरह दिखता है

-rw-r--r-- 1 me users       6 Jun 11 20:50 new-file.txt

जब रोबोट अपडेट करने का प्रयास करता है new-file.txt, तो फ़ाइल अनुमति के अभाव में यह विफल हो जाता है।

मुझे यकीन नहीं है कि umask सेट करने में मदद करता है। किसी भी फाइल में नई फाइलें वास्तव में इसका पालन नहीं करती हैं।

$ umask -S
u=rwx,g=rx,o=rx

मैं अक्सर Unix फ़ाइल की अनुमति से भ्रमित हूँ। क्या मेरे पास एक सही योजना भी है? मैं डेबियन लेन का उपयोग कर रहा हूं।

जवाबों:


53

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

सबसे पहले, सुनिश्चित करें कि निर्देशिका जिस वॉल्यूम पर है, उसके लिए एसीएल सक्षम हैं। यदि आपके पास है tune2fs, तो आप निम्नलिखित कार्य कर सकते हैं:

# tune2fs -l /dev/sda1 | grep acl
Default mount options:    user_xattr acl

यदि आपके पास नहीं है tune2fs, तो जांच करें fstabs:

# cat /etc/fstab 
/dev/system/root        /                       ext3    defaults        1 1
/dev/system/home        /home                   ext3    defaults        1 2
/dev/storage/data       /data                   ext3    defaults        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2

4 वां कॉलम जो कहता है कि "डिफॉल्ट्स" का मतलब है मेरे सिस्टम पर (CentOS 5.5), ACL हैं। जब संदेह में, इसे चूक के रूप में छोड़ दें। यदि आप ACL सेट करने का प्रयास करते हैं और यह गलत हो जाता है, तो वापस जाएं और डिफ़ॉल्ट के ठीक बाद acl विकल्प / etc / fstab में जोड़ें defaults,acl:।

जो मैं समझता हूं, आप चाहते हैं कि उपयोगकर्ता समूह के सभी लोग डेटा निर्देशिका तक पहुंच लिखें। यह निम्नलिखित द्वारा पूरा किया गया है:

setfacl -Rm g:users:rwX,d:g:users:rwX data/

मैंने इस कमांड का उपयोग किया है लेकिन यह मेरी समस्या को ठीक नहीं करता है, मैं इस कमांड को कैसे पूर्ववत कर सकता हूं?
इटई गनोट

Ubuntu पर चाल के साथ किया था sudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_something। PHPUnit परीक्षणों के साथ समस्या थी। रनिंग टेस्ट से लॉग फाइल बनाने के बाद अपाचे यूजर www-dataउन्हें लिख / पढ़ नहीं सकता था।
s3m3n

2
@ इट गणोट - setfaclमैन पेज के अनुसार , -bया --remove-allविस्तारित ACL को हटाता है।
jww

तो, आप setfacl -Rm g:users:rwX,d:g:users:rwX data/के अंत में बस /etc/fstabचाहते हैं?
425nesp

@ पायना नं। एकमात्र परिवर्तन जिसे आप / etc / fstab में बदलना है, को बदलना defaultsहै defaults,aclsetfaclएक कमांड है जिसे आपको टर्मिनल से चलाना चाहिए। data/जिस निर्देशिका को आप बदलना चाहते हैं, उसके लिए मार्ग से प्रतिस्थापित किया जाना चाहिए।
सेगफॉल्ट 16

32

डायरेक्टरी सेटगिड ( g+s) को चिह्नित करने से डायरेक्टरी के समूह के स्वामित्व की नई फाइलें बन जाएंगी, लेकिन -grsync का विकल्प इसे ओवरराइड करने का प्रयास करेगा।


11
सेटगिड बिट केवल बनाई गई फ़ाइलों को समूह के वारिस बनाता है / यदि / नई फ़ाइल बनाने वाला व्यक्ति उस समूह का सदस्य है; अगर बनाने वाला उपयोगकर्ता मालिक है, लेकिन समूह का सदस्य नहीं है, या निर्देशिका विश्व-योग्य है, तो सेटगिड बिट कुछ भी नहीं करेगा। और सभी फ़ाइल बनाने वाले उपयोगकर्ताओं के लिए umask को अभी भी उपयुक्त समूह एक्सेस की अनुमति देने के लिए सेट करने की आवश्यकता है।
dannysauer

1
@dannysauer "यदि बनाने वाला उपयोगकर्ता मालिक है, लेकिन समूह का सदस्य नहीं है ... सेटगिड बिट कुछ भी नहीं करेगा" - धन्यवाद। अब समझ में आता है - लेकिन rsync की कोई प्रतिक्रिया के साथ, सोच रहा था कि यह काम क्यों नहीं कर रहा था।
user12345

4

अन्य उत्तर एक सामान्य मामले में लागू होते हैं, लेकिन जैसा कि आप उल्लेख करते हैं कि rsync समस्या का एक स्रोत है, आपको बस इसके आह्वान को ट्यून करने की आवश्यकता हो सकती है।

एक शुरुआत के लिए, लोकप्रिय -aध्वज rsync प्रतिलिपि अनुमतियाँ बनाता है; ( या बिना किसी सिंक सिंक के) के लिए या जोड़ -rका उपयोग करें और (कोई समूह सिंक के लिए)। इसके अलावा rsync नई बनाई गई फ़ाइलों पर अनुमतियों को बदलने के लिए ध्वज का समर्थन करता है ।-a-no-p-no-g--chmod


3

आपकी अनुमति के लिए आपका umask गलत है। आप 002 का एक umask चाहते हैं। आपके पास वर्तमान में 022 का umask है। इसके अलावा, निर्देशिका सेटगिड बनाने के बारे में टिप्पणी सही है, लेकिन मुझे यकीन नहीं है कि फ़ाइल समूह का स्वामित्व कुछ ऐसा है जिसे आप बदलना चाहते हैं या नहीं।

यूनिक्स फ़ाइल अनुमतियां वास्तव में एक बहुत ही सरल मॉडल हैं। मुझे लगता है कि एसीएल खुद को पूरी तरह से भ्रमित कर रहा है। :-)


4
"यूनिक्स फ़ाइल अनुमतियां वास्तव में एक बहुत ही सरल मॉडल हैं। मुझे लगता है कि एसीएल खुद को पूरी तरह से भ्रमित कर रहे हैं।" - मैं विपरीत (लेकिन +1 वैसे भी) महसूस करता हूं। ACLs (और Allow / Deny ACEs) सरल हैं, और यूनिक्स की अनुमति का कोई मतलब नहीं है। लेकिन यह एक ऐसे व्यक्ति से आ रहा है जो पोस्टफ़िक्स / डवकोट / क्लैम / स्पैमसैसिन स्थापित कर रहा है।
jww
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.