Cp ACL का सम्मान क्यों नहीं करता है?


15

समूह के भीतर फ़ाइल साझा करने के लिए निर्देशिका सेट करने का एक सामान्य तरीका है:

$ mkdir foo
$ chgrp felles foo
$ chmod g+ws foo
$ setfacl -m group:felles:rwx foo
$ setfacl -dm group:felles:rwx foo

यह सुनिश्चित करता है कि बनाई गई कोई भी फ़ाइल fooसमूह द्वारा पठनीय और लिखने योग्य है felles:

$ umask
0022
$ echo hi > foo/bar
$ ls -l foo
total 4
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar

हालाँकि, यदि आप किसी फ़ाइल को कॉपी करते हैं foo, तो डिफ़ॉल्ट ACL लागू नहीं होते हैं:

$ echo you > baz
$ cp baz foo/
$ ls -l foo
total 8
-rw-rw-r--+ 1 bhm felles 3 2010-09-23 00:18 bar
-rw-r--r--+ 1 bhm felles 4 2010-09-23 00:19 baz
$ getfacl foo/baz
# file: foo/baz
# owner: bhm
# group: felles
user::rw-
group::rwx          #effective:r--
group:felles:rwx        #effective:r--
mask::r--
other::r--

ऐसा क्यों होता है, और क्या इसके आसपास कोई रास्ता है?

( चलती निर्देशिका में एक फ़ाइल या तो एसीएल या समूह स्वामित्व सम्मान नहीं करता है, लेकिन मैं क्यों समझ सकते हैं:। आप एक फ़ाइल की अनुमतियों को बस बदलने के लिए है क्योंकि आप अपने नाम बदल नहीं चाहते हो सकता है)


serverfault.com/a/452678/46333 इस उत्तर में एक अच्छी व्याख्या है।
कान

जवाबों:


11

यदि cpगंतव्य फ़ाइल बनाता है, तो यह स्रोत फ़ाइल की अनुमतियों की प्रतिकृति करता है, सिवाय उन बिटों के लिए जो ओम्स्क में सेट हैं। यह मानक व्यवहार है (उदाहरण के लिए एकल यूनिक्स v3 (POSIX 2001) विनिर्देश में चरण 3. बी देखें ।

Cp को इस तरह क्यों बनाया गया था? क्योंकि ऐसे कई मामले हैं जहां यह व्यवहार वांछनीय है, उदाहरण के लिए मूल अनुमतियों के प्रतिबंधात्मक होने पर फ़ाइल की गोपनीयता को संरक्षित करना, और निष्पादन क्षमता को संरक्षित करना लगभग हमेशा सही काम है। हालांकि यह दुर्भाग्यपूर्ण है कि जीएनयू सीपीपी के पास इस व्यवहार को बंद करने का विकल्प भी नहीं है।

अधिकांश कॉपी टूल (जैसे pax, rsync) एक ही तरह से व्यवहार करते हैं। आप यह सुनिश्चित कर सकते हैं कि गंतव्य से स्रोत को डिकूप करके फ़ाइल डिफ़ॉल्ट अनुमति के साथ बनाई जाएगी, उदाहरण के लिए cat <baz >foo/baz


ठीक है, कि कम से कम इसके लिए प्रेरणा की व्याख्या करता है। (अजीब, हालांकि, कि समूह के स्वामित्व को "फ़ॉल" में बदलने की अनुमति दी गई है, जिससे संभावित रूप से अधिक लोग फ़ाइल तक पहुंच पढ़ सकते हैं।)
bhm

3

खैर, तीन साल पुराना और अधिक प्रश्न लेकिन अभी भी प्रासंगिक है। भविष्य के पाठकों के लिए, मैं जोड़ना चाहता हूं कि यह अपेक्षित है कि mv, cp कमांड गंतव्य निर्देशिका के ACL का पालन नहीं करते हैं। गाइल्स का जवाब सब ठीक है लेकिन आखिरी वाक्य है। गंतव्य एसीएल को कॉपी / स्थानांतरित फ़ाइल में लागू करने का बेहतर तरीका यहां बताया गया है:

http://www.commandlinefu.com/commands/view/4281/copy-acl-of-one-file-to-another-using-getfacl-and-setfacl

यदि भविष्य में लिंक टूट जाता है, तो मैं यहां सामग्री चिपकाता हूं:

getfacl <file-with-acl> | setfacl -f - <file-with-no-acl>

Getfacl और setfacl का उपयोग करके एक फ़ाइल की ACL को दूसरी फ़ाइल में कॉपी करें

चेतावनी: मौजूदा ACL खो जाएगा।


1

मुझे एक समान समस्या थी कि लक्ष्यित उपनिर्देशिका में उचित डिफ़ॉल्ट ACL की कमी वाली rsynced फाइलों के साथ। Cp के पास लक्ष्य पर अनुमतियाँ सेट करने का एक तरीका नहीं है। लेकिन, rsync --chmod=ugo=rwxध्वज का उपयोग करता है । मेरा जवाब यहां देखें ।


0

आपको उपयोग करने की आवश्यकता है -pया --preserveसाथ cp

से man 5 acl:

फाइल इकाइयों को बदल देता है

 On a system that supports ACLs, the file utilities ls(1), cp(1), and
 mv(1) change their behavior in the following way:

 ·   For files that have a default ACL or an access ACL that contains more
     than the three required ACL entries, the ls(1) utility in the long
     form produced by ls -l displays a plus sign (+) after the permission
     string.

 ·   If the -p flag is specified, the cp(1) utility also preserves ACLs.
     If this is not possible, a warning is produced.

 ·     The mv(1) utility always preserves ACLs. If this is not possible, a
     warning is produced.

 The effect of the chmod(1) utility, and of the chmod(2) system call, on
 the access ACL is described in CORRESPONDENCE BETWEEN ACL ENTRIES AND
 FILE PERMISSION BITS.

1
बिल्कुल नहीं। वह चाहता है कि फ़ाइल में लक्ष्य फ़ोल्डर की तरह ही अनुमति हो।
किस्मत

0

ACL सही ढंग से प्रचार कर रहे हैं, लेकिन डिफ़ॉल्ट मास्क सही नहीं लगता है। आप शायद चाहते हैं कि आपका डिफ़ॉल्ट मास्क rwX हो।

setfacl -dm m::rwX foo

अगर वह काम नहीं करता है, तो कृपया फू के लिए ACL पोस्ट करें।


वह काम नहीं आया। फू के लिए ACL (पूर्व और आपके आदेश के बाद दोनों) # फ़ाइल है: foo # मालिक: bhm # समूह: गिरता है # झंडे: -s- उपयोगकर्ता :: rwx समूह :: rwx समूह: गिरता: rwx मुखौटा :: wwx अन्य: : rx डिफ़ॉल्ट: उपयोगकर्ता :: rwx डिफ़ॉल्ट: समूह :: rwx डिफ़ॉल्ट: समूह: गिरता है: rwx डिफ़ॉल्ट: मास्क :: rwx डिफ़ॉल्ट: अन्य :: rx
bhm

-1

क्या आपका फ़ाइल सिस्टम "ACL" विकल्प के साथ आरोहित है?

/dev/sda4        /wherefolderislocated         ext3        defaults,acl     1   2

यदि नहीं, तो परिवर्तन करें।

mount -o remount /wherefolderislocated

यह acl विकल्प के साथ आरोहित किया गया था, हाँ।
bhm

-1

मैं जो देख रहा हूं उससे आप cp से पहले और बाद की फाइलों (bhm) के मालिक हैं। जैसा कि निर्देशिका लिस्टिंग से पता चलता है कि मालिक ने पहुंच को पढ़ा और लिखा है!


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