मैं किसी विशेष निर्देशिका के अंदर बनाई गई फ़ाइलों के लिए समूह और अनुमतियों को कैसे बाध्य करूं?


27

/ Var / www निर्देशिका में testuser खाते से बनाई गई फ़ाइलों के लिए , मुझे अनुमतियों के रूप में g + rwx और समूह के रूप में www-data की आवश्यकता है

इसे कैसे प्राप्त किया जा सकता है?

मैं SSH के माध्यम से फाइलें बना रहा हूं।


1
आपके उपयोगकर्ता फ़ाइलें कैसे बना रहा है? एफ़टीपी stor/ appe? HTTP PUT? एक शेल खाते के माध्यम से? ये विवरण महत्वपूर्ण हैं, क्योंकि वे संभावित उत्तरों को बहुत प्रभावित करते हैं, और आपके प्रश्न में होना चाहिए।
जेडीबीपी

इनपुट के लिए धन्यवाद :), मैं एसएसएच के माध्यम से सब कुछ बना रहा हूं।
श्रीमान्गो १३

जवाबों:


53

समूह सेट करने के लिए /var/www, सेटगिड बिट दें:

chgrp www-data /var/www
chmod g+s /var/www

उपनिर्देशिका को समायोजित करने के लिए: find /var/www -type d -exec chmod g+s {} +

यह सभी नई बनाई गई फ़ाइलों को उपयोगकर्ता के बजाय मूल निर्देशिका के समूह को इनहेरिट करेगा।


डिफ़ॉल्ट समूह अनुमतियाँ सेट करने के लिए, आपको ACL का उपयोग करना होगा । "डिफ़ॉल्ट" ACL सेट करें:

setfacl -m "default:group::rwx" /var/www

उपनिर्देशिका को समायोजित करने के लिए: find /var/www -type d -exec setfacl -m d:g::rwx {} +

नोट: फ़ाइल सिस्टम में ACL समर्थन सक्षम होना चाहिए। कभी-कभी यह डिफ़ॉल्ट रूप से चालू होता है; पर ext3 या ext4 आप हो "कार्रवाई समर्थित नहीं" हो सकता है, ऐसी स्थिति में इसे मैन्युअल रूप से सक्षम होने चाहिए:

  • वर्तमान में माउंट किए गए फ़ाइल सिस्टम के लिए: mount -o remount,acl /

  • स्थायी रूप से - एक नीचे दिए गए तरीकों:

    • fstab स्तर पर: विकल्प फ़ील्ड में /etc/fstabहोने के लिए संपादित करेंacl

    • फाइल सिस्टम स्तर पर: tune2fs -o acl /dev/diskname


क्या आप chmod -R g + s / var / www के साथ उपनिर्देशिका नहीं प्राप्त कर सकते हैं? ऐसा लगता नहीं है कि आपको खोज आदेश की आवश्यकता होनी चाहिए।
bobpaul

4
@bobpaul: नहीं, क्योंकि chmodसभी फाइलें भी मिल जाएंगी।
ग्रैविटी

ध्यान दें कि कुछ कमांड, विशेष रूप से install, किसी भी तरह से डिफ़ॉल्ट ACL को बाईपास करने का प्रबंधन करते हैं।
उलरिच श्वार्ज़

@grawity यह एक बहुत अच्छा जवाब है और मुझे यकीन है कि मेरी समस्या के लिए वहाँ एक समाधान है, लेकिन मैं इसका पता नहीं लगा सकता। मेरे पास एक /var/www/html/projectsफ़ोल्डर है और जब www-data एक फाइल बनाता है तो इसकी rw-rw-rअनुमति होती है लेकिन जब मैं कंसोल में कुछ करता हूं तो यह एक फाइल बनाता है rw-r--r। मैं हमेशा rw-rw-rअनुमति के लिए नई बनाई गई फ़ाइलों को कैसे मजबूर कर सकता हूं ?
lewis4u

@ lewis4u: विश्व स्तर पर या प्रति-निर्देशिका? वैश्विक (अच्छी तरह से, प्रति-प्रक्रिया) डिफ़ॉल्ट अनुमतियाँ द्वारा नियंत्रित की जाती हैं umask। मुख्य निर्देशिका के रूप में प्रति-निर्देशिका डिफ़ॉल्ट अनुमतियाँ परिवर्तनशील हैं setfacl
ग्रिटिटी

3

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

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir

$ chmod g+s dir                                    #no errors

$ ls -ld dir
drwxrwxr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #but nothing changed

$ touch dir/nosudo && ls -l dir/
-rw-rw-r-- 1 luke luke 0 Mar  9 10:51 nosudo       #and the group is still wrong


$ sudo chmod g+s dir

$ ls -ld dir
drwxrwsr-x 2 luke testgroup 4096 Mar  9 10:44 dir  #the setgid bit is now on

$ touch dir/withsudo && ls -l dir/
-rw-rw-r-- 1 luke luke      0 Mar  9 10:51 nosudo
-rw-rw-r-- 1 luke testgroup 0 Mar  9 10:51 withsudo #and group is set

इससे पहले कि मैं भागता मैं अपने बालों को बाहर निकाल रहा था। धन्यवाद।
एंड्रयूस्वेन्स

0

किसी उपयोगकर्ता द्वारा बनाई जा रही फ़ाइलों का समूह उस उपयोगकर्ता का समूह (/ / आदि / समूह में) है। अनुमतियाँ UMASK पैरामीटर द्वारा नियंत्रित होती हैं यह देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.