เหตุใด 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--

ทำไมสิ่งนี้ถึงเกิดขึ้นและมีวิธีแก้ไขไหม?

( การย้ายไฟล์ไปยังไดเรกทอรีไม่เกี่ยวข้องกับ ACLs หรือความเป็นเจ้าของกลุ่ม แต่ฉันเข้าใจได้ว่าทำไม: คุณอาจไม่ต้องการให้สิทธิ์การเปลี่ยนแปลงไฟล์เพียงเพราะคุณเปลี่ยนชื่อ)


serverfault.com/a/452678/46333คำตอบนี้มีคำอธิบายที่ดี
Kaan

คำตอบ:


11

หากcpสร้างไฟล์ปลายทางไฟล์จะจำลองการอนุญาตของไฟล์ต้นฉบับยกเว้นบิตที่ตั้งค่าไว้ใน umask นี่คือพฤติกรรมมาตรฐาน (ดูตัวอย่างขั้นตอนที่ 3 ขในข้อกำหนดคุณลักษณะUnix v3 (POSIX 2001)เดียว

เหตุใด cp จึงออกแบบวิธีนี้ เนื่องจากมีหลายกรณีที่พฤติกรรมนี้เป็นที่ต้องการตัวอย่างเช่นการรักษาความเป็นส่วนตัวของไฟล์เมื่อสิทธิ์ดั้งเดิมมีข้อ จำกัด และการรักษาความสามารถในการปฏิบัติงานเป็นสิ่งที่ถูกต้องเสมอ อย่างไรก็ตามเป็นเรื่องน่าเสียดายที่ไม่มีแม้แต่ GNU cp ที่มีตัวเลือกในการปิดการทำงานนี้

เครื่องมือคัดลอกส่วนใหญ่ (เช่น pax, rsync) จะทำงานในลักษณะเดียวกัน คุณสามารถมั่นใจได้ว่าไฟล์จะถูกสร้างขึ้นโดยได้รับอนุญาตเริ่มต้นโดย decoupling cat <baz >foo/bazแหล่งที่มาจากปลายทางเช่นกับ


อย่างน้อยก็อธิบายแรงจูงใจสำหรับมัน (แปลก แต่ที่กลุ่มเจ้าของได้รับอนุญาตให้เปลี่ยนเป็น "felles" ทำให้ผู้คนมีโอกาสมากขึ้นอ่านเข้าถึงไฟล์.)
bhm

3

เป็นคำถามที่อายุสามปีขึ้นไป แต่ก็ยังเกี่ยวข้องกัน สำหรับผู้อ่านในอนาคตฉันต้องการเพิ่มว่าคาดว่าคำสั่ง mv, cp ไม่เป็นไปตาม ACL ของไดเรกทอรีปลายทาง คำตอบของ Gilles นั้นใช้ได้ แต่ประโยคสุดท้าย วิธีที่ดีกว่าในการนำ 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>

คัดลอก ACL ของไฟล์หนึ่งไปยังอีกไฟล์โดยใช้ getfacl และ setfacl

คำเตือน: ACL ที่มีอยู่จะหายไป


1

ฉันมีปัญหาคล้ายกันกับไฟล์ rsynced ที่ไม่มี ACLs เริ่มต้นที่เหมาะสมในไดเรกทอรีย่อยเป้าหมาย CP ไม่มีวิธีการตั้งค่าการอนุญาตบนเป้าหมาย แต่ rsync ทำโดยใช้--chmod=ugo=rwxแฟล็ก ดูคำตอบของฉันที่นี่


0

คุณจำเป็นต้องใช้-pหรือมี--preservecp

จาก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
ไม่แน่นอน เขาต้องการให้ไฟล์ได้รับอนุญาตเช่นเดียวกับโฟลเดอร์เป้าหมาย
luckytaxi

0

ACLs กำลังแพร่กระจายอย่างถูกต้อง แต่รูปแบบเริ่มต้นดูเหมือนจะไม่ถูกต้อง คุณอาจต้องการหน้ากากเริ่มต้นของคุณเป็น rwX

setfacl -dm m::rwX foo

หากไม่ได้ผลโปรดโพสต์ ACL สำหรับ foo


ที่ใช้งานไม่ได้ ACL สำหรับ foo (ทั้งก่อนและหลังคำสั่งของคุณ) คือ # file: foo # owner: bhm # group: felles # flag: -s- ผู้ใช้ :: rwx group :: rwx group: rwx mask: rwx mask :: rwx other: : rx default: user :: rwx default: group :: rwx default: กลุ่ม: felles: rwx default: mask :: rwx default: other :: rx
bhm

-1

ระบบไฟล์ของคุณถูกเมาท์ด้วยตัวเลือก "ACL" หรือไม่?

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

ถ้าไม่ใช่ให้ทำการเปลี่ยนแปลงใหม่

mount -o remount /wherefolderislocated

มันถูกเมาท์ด้วยตัวเลือก acl ใช่
bhm

-1

จากสิ่งที่ฉันเห็นคุณเป็นเจ้าของไฟล์ (bhm) ก่อนและหลัง cp ในขณะที่รายชื่อไดเรกทอรีแสดงเจ้าของได้อ่านและเขียนเข้าถึง!


บางทีฉันไม่ชัดเจน: ฉันต้องการกลุ่ม ("felles") เพื่อให้สามารถ (อ่านและ) เขียนไฟล์
bhm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.