जैसा कि गाइल्स बताते हैं, setfaclडिफ़ॉल्ट अनुमतियाँ अधिकतम अनुमतियों को निर्दिष्ट करती हैं, मूल रूप से प्रतिस्थापित करती हैं umask। इसलिए नई बनाई गई फाइलें rwतब तक रहेंगी जब तक कि फाइल बनाने वाले एप्लिकेशन को विशेष रूप से इसके निष्पादन योग्य नहीं कहा जाएगा।
$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--
$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x #effective:r--
group:mygroup:rwx #effective:rw-
mask::rw-
other::r--
ऊपर दिए गए प्रभावी परमिटों पर ध्यान दें। (केवल कुछ ही प्रोग्राम हैं जो gccनिष्पादन योग्य बिट्स को उन फ़ाइलों पर सेट करने के लिए कहेंगे जो इसे बनाता है, उदाहरण के लिए निष्पादन योग्य और cpयदि फ़ाइल की प्रतिलिपि बनाई जा रही है तो निष्पादन योग्य थी।)
या आप मतलब है कि पहले setfacl कमांड आप चाहते थे जिस तरह से काम कर रहा था, लेकिन दूसरा नहीं था? दूसरे शब्दों में, आप पुरानी फ़ाइलों पर अनुमतियों को ठीक करना चाहते हैं, यह सुनिश्चित करते हुए कि निर्देशिकाएं ट्रैवर्सेबल हैं, अन्य नियमित फ़ाइलों को अनुमति दिए बिना?
आप चाहते हैं की तरह मेरे संस्करण की setfaclअनुमति देता Xहै, जैसे:
setfacl g:mygroup:rwX
$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513 4 drwxr-xr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-r--r-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxr-xr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513 4 drwxrwxr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-rwxr-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxrwxr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513 4 drwxrwxr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-rw-r-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxrwxr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
यदि आपके संस्करण का setfaclसमर्थन नहीं करता है, तो उपयोग क्यों नहीं किया जाता है find?
अनुमतियाँ अधिलेखित करें, उन्हें फ़ाइलों के लिए rw और dirs के लिए rwx सेट करें
$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)
मौजूदा समूह अनुमतियों के आधार पर mygroup ACL अनुमतियाँ सेट करें
$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)
आप शायद यह जांचना चाहेंगे कि समूह मास्क प्रभावी अनुमति प्रदान करता है। यदि नहीं, तो आपको इसे भी चलाना होगा:
$ find . -type d -exec chmod g+rwX '{}' ';'