सवाल अभिभावक निर्देशिका से नई फ़ाइल अनुमति कैसे प्राप्त करें?


मेरे पास एक निर्देशिका है 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 -S
u=rwx,g=rx,o=rx

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


81
2018-06-12 04:06


मूल




जवाब:


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

सबसे पहले, सुनिश्चित करें कि निर्देशिका चालू होने वाली वॉल्यूम के लिए एसीएल सक्षम हैं। यदि आपके पास है 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

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

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

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

51
2018-06-13 02:10



मैंने इस कमांड का इस्तेमाल किया लेकिन यह मेरी समस्या को ठीक नहीं करता है, मैं इस आदेश को पूर्ववत कैसे कर सकता हूं? - Itai Ganot
क्या उबंटू पर चाल थी sudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_something। PHPUnit परीक्षणों में समस्या थी। परीक्षण अपाचे उपयोगकर्ता चलाने से लॉग फ़ाइलों को बनाने के बाद www-data उन्हें लिख / पढ़ नहीं सका। - s3m3n
@ इटाई गणोट - के अनुसार setfacl मैन पेज, -b या --remove-all विस्तारित एसीएल को हटा देता है। - jww
तो, आप बस संलग्न करेंगे setfacl -Rm g:users:rwX,d:g:users:rwX data/ के अंत में /etc/fstab? - 425nesp
@ पिना नं। आपके द्वारा / etc / fstab में एकमात्र परिवर्तन बदलना है defaults सेवा मेरे defaults,acl। setfacl एक आदेश है जो आपको टर्मिनल से चलाना चाहिए। data/ उस निर्देशिका के पथ से प्रतिस्थापित किया जाना चाहिए जिसे आप बदलना चाहते हैं। - Segfault


एक निर्देशिका setgid चिह्नित (g+s) नई फाइलें निर्देशिका के समूह स्वामित्व का उत्तराधिकारी बनाएगी, लेकिन -g rsync का विकल्प इसे ओवरराइड करने का प्रयास करेगा।


31
2018-06-12 04:13



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


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

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


4
2017-09-03 15:36





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

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


3
2018-06-12 04:43



"यूनिक्स फ़ाइल अनुमतियां वास्तव में एक बहुत ही सरल मॉडल हैं। मुझे एसीएल पूरी तरह से भ्रमित करने लगता है।" - मैं विपरीत महसूस करता हूं (लेकिन वैसे भी +1)। एसीएल (और एसीई को अस्वीकार / अस्वीकार) सरल हैं, और यूनिक्स अनुमतियों को कोई समझ नहीं है। लेकिन वह एक ऐसे व्यक्ति से आ रहा है जो पोस्टफिक्स / डोवकोट / क्लैम / स्पैमएसासिन इंस्टॉल कर रहा है। - jww