setfacl: क्या ये दोनों आज्ञाएं समान हैं?


10

मेरे पास एक परिनियोजन स्क्रिप्ट (कैपिफ़नी पर आधारित) है जो एक Symfony2 स्थापना के लिए विशिष्ट सर्वर पर टी अनुमतियाँ सेट करती है। इसमें कई निर्देशिकाओं के लिए ऐसा करने के लिए निम्नलिखित दो आदेश हैं:

setfacl -R -m u:www-data:rwx -m u:`whoami`:rwX app/cache
setfacl -dR -m u:www-data:rwx -m u:`whoami`:rwX app/cache

ये दोनों कमांड सिम्फनी 2 साइट पर अनुमतियों को ठीक करने के एक तरीके के रूप में हैं, हालांकि, ये मेरे जैसे ही दिखते थे। इसलिए मैंने मैनपावर के लिए एक नज़र डाली setfacl, और जो मैं समझ सकता था, उससे दूसरी कमांड ठीक वही करती है, जो पहले एक अतिरिक्त विकल्प के साथ करता है (जिसे मैं बिल्कुल नहीं समझता)। मेरा सवाल है, क्या मेरी धारणा सही है? यदि हां, तो क्या इसका वही प्रभाव होगा यदि मैं पहली कमांड हटाता हूं?

जवाबों:


15

पहला कमांड किसी भी पहले से मौजूद फाइल / निर्देशिका की अनुमतियों को बदल देगा। -dदूसरा आदेश में डिफ़ॉल्ट किसी भी निर्देशिका, जो बारी में इन निर्देशिका के भीतर किसी भी फ़ाइलों के लिए एसीएल के डिफ़ॉल्ट सेट प्रदान करेगा के लिए आगे बढ़ने के लिए अनुमति की स्थापना के लिए महत्वपूर्ण है।

नोट: कि दोनों मामलों में आदेश -Rस्विच के माध्यम से पुनरावर्ती रूप से चलेंगे ।

-dस्विच के बारे में , setfaclमैन पेज से:

   -d, --default
       All operations apply to the Default ACL. Regular ACL entries in the 
       input set are promoted to Default ACL entries. Default ACL  entries
       in the input set are discarded. (A warning is issued if that happens).

इस अंश को यह भी अच्छी तरह से समझाता है:

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

स्रोत: 8.2 एक्सेस ACLs सेट करना

उदाहरण

कहो कि मेरे पास यह निर्देशिका संरचना है।

$ tree
.
|-- dir1
|   |-- dirA
|   |   `-- file1
|   `-- fileA
`-- file1

2 directories, 3 files

अब setfaclअपने प्रश्न में पहले कमांड का उपयोग करके अनुमतियाँ सेट करें :

$ setfacl -R -m u:saml:rwx -m u:samtest:rwX .

जो निम्नलिखित में परिणाम:

$ getfacl dir1/ file1
# file: dir1
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x

# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--

-dRयहां कमांड चलाने के बिना , नई निर्देशिका आपके ACL द्वारा कवर नहीं की जाएगी:

$ mkdir dir2

$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
group::rwx
other::r-x

लेकिन अगर हम इस डायरेक्टरी को हटाते हैं और setfacl -dR ...कमांड चलाते हैं और ऊपर इस ऑपरेशन को दोहराते हैं:

$ rmdir dir2
$ setfacl -dR -m u:saml:rwx -m u:samtest:rwX .

अब अनुमतियाँ काफी अलग दिखती हैं:

$ getfacl dir1/ file1 
# file: dir1/
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x

# file: file1
# owner: saml
# group: saml
user::rw-
user:saml:rwx
user:samtest:rwx
group::rw-
mask::rwx
other::r--

और अब हमारी नई बनाई गई निर्देशिका इन "डिफ़ॉल्ट" अनुमतियों को उठाएगी:

$ mkdir dir2

$ getfacl dir2
# file: dir2
# owner: saml
# group: saml
user::rwx
user:saml:rwx
user:samtest:rwx
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:saml:rwx
default:user:samtest:rwx
default:group::rwx
default:mask::rwx
default:other::r-x

इन अनुमतियों के होने के बाद dir2अब इन अनुमतियों को फाइलों पर लागू किया जाएगा dir2:

$ touch dir2/fileA
$ getfacl dir2/fileA 
# file: dir2/fileA
# owner: saml
# group: saml
user::rw-
user:saml:rwx           #effective:rw-
user:samtest:rwx        #effective:rw-
group::rwx          #effective:rw-
mask::rw-
other::r--

आह, तो बस पुष्टि करने के लिए, आपका मतलब है अगर हमारे पास निर्देशिका है app/cacheजिसमें एक निर्देशिका कहा जाता है dev, तो पहली कमांड उस पर लागू होगी, लेकिन दूसरी नहीं? और अगर बाद में एक और निर्देशिका जोड़ी जाती है (जैसे prod), तो दूसरी कमांड अनुमतियाँ सेट करेगी? यदि यह मामला नहीं है, तो मुझे दूसरी कमांड को छोड़ना चाहिए?
होश सादिक

1
@HoshSadiq - नहीं -Rएक पुनरावर्ती आदेश है, इसलिए अनुमतियाँ लागू होती हैं। -dगार्ड किसी एक निर्देशिका बनाने या पेड़ में कुछ निर्देशिका के लिए कदम पर बाद में तो यह भी इस एसीएल लागू होता है कि के लिए गए थे, तो।
SLM

एक दम बढ़िया! चीजों को बहुत स्पष्ट करता है :) धन्यवाद!
होश सादिक़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.