निर्देशिका और फ़ाइलों पर भिन्न ACLs सेट करना


15

मैं एक फ़ाइल शेयर के लिए डिफ़ॉल्ट अनुमतियाँ सेट करना चाहता हूं ताकि rwxसभी निर्देशिकाओं के सभी और सभी नए बनाए गए फ़ाइलों को कर सकें rw

हर कोई जो इस शेयर को एक्सेस कर रहा है, वह एक ही ग्रुप में है, इसलिए यह चिंता का विषय नहीं है।

मैंने सभी उपयोगकर्ताओं के यूमस्क और इस तरह के बदलाव के बिना एसीएल के माध्यम से ऐसा करने पर ध्यान दिया है। यहाँ मेरे वर्तमान चालान हैं:

setfacl -Rdm g:mygroup:rwx share_name
setfacl -Rm g:mygroup:rwx share_name

मेरी समस्या यह है कि जब मैं नव निर्मित के सभी चाहते है की उप-निर्देशिका होने के लिए rwx, मैं सिर्फ नव निर्मित चाहते फ़ाइलों होने के लिए rw

क्या किसी को मेरी इच्छित अंतिम परिणाम प्राप्त करने के लिए एक बेहतर विधि है? वहाँ एक तरह से नस chmod +xबनाम में फ़ाइलों से अलग निर्देशिकाओं पर ACLs सेट करने के लिए कुछ तरीका है chmod +X?

धन्यवाद

जवाबों:


12

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

4

भविष्य के पाठकों के लिए, setfaclआपकी फ़ाइलों में निष्पादन योग्य बिट को जोड़ने के बिना मौजूदा फ़ाइलों / फ़ोल्डरों पर उपयोग करने के लिए , समाधान @ मिक के उत्तर का यह हिस्सा है :

सेटफैक्ल का मेरा संस्करण एक्स को ठीक उसी तरह से अनुमति देता है जैसे आप चाहते हैं, जैसे:

setfacl g:mygroup:rwX

setfaclप्रलेखन से प्रासंगिक अंश :

परमिट फ़ील्ड उन वर्णों का एक संयोजन है जो अनुमतियों को इंगित करता है: पढ़ा (r), लिखना (w), निष्पादित (x), निष्पादित तभी करें जब फ़ाइल एक निर्देशिका हो या पहले से ही किसी उपयोगकर्ता (X) के लिए अनुमति निष्पादित हो


2

जहां तक ​​मैं लिनक्स ACL को समझता हूं, setfacl -Rdm g:mygroup:rwx share_nameवही करता है जो आप चाहते हैं। प्रयोग:

umask 007
mkdir foo
chgrp mygroup foo
chmod 2700 foo
setfacl -d -m group:mygroup:rwx foo
setfacl -m group:mygroup:rwx foo
touch foo/data
echo '#!/bin/ls' >foo/exec
chmod +x foo/exec

तब समूह में एक अलग उपयोगकर्ता के रूप में mygroup:

$ cat foo/*
#!/bin/ls
#!/bin/ls
$ ./foo/data
ash: ./foo/data: Permission denied
$ ./foo/exec
./foo/exec

क्या चल रहा है?

$ getfacl foo/data
# file: foo/data
# owner: myuser
# group: mygroup
user::rw-
group::---
group:mygroup:rwx                 #effective:rw-
mask::rw-
other::---

के लिए प्रभावी ACL, mygroupACL_MASK ACL_GROUPप्रविष्टि mygroup( rwx) के साथ ( ) प्रविष्टि के लिए ' and'ing का परिणाम है rw-

एसीएल (5) आदमी पेज के नीचे "प्रवेश की जांच एल्गोरिदम" गणना के इस बताते हैं। यह नहीं समझाता है कि ACL_MASKप्रविष्टियाँ कैसे उत्पन्न होती हैं, लेकिन व्यवहार में सही बात प्रतीत होती है।

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