जैसा कि गाइल्स बताते हैं, 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 '{}' ';'