Tại sao cp không tôn trọng ACL?


15

Một cách phổ biến để thiết lập một thư mục để chia sẻ tệp trong một nhóm là:

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

Điều này đảm bảo rằng bất kỳ tệp nào được tạo trong foođều có thể đọc và ghi được bởi nhóm 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

Tuy nhiên, nếu bạn sao chép tệp vào foo, ACL mặc định sẽ không được áp dụng:

$ 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--

Tại sao điều này xảy ra, và có một cách xung quanh nó?

( Di chuyển tệp vào thư mục không tôn trọng ACL hoặc quyền sở hữu nhóm, nhưng tôi có thể hiểu tại sao: bạn có thể không muốn quyền của tệp thay đổi chỉ vì bạn thay đổi tên của nó.)


serverfault.com/a/452678/46333 câu trả lời này chứa một lời giải thích tốt.
Kaan

Câu trả lời:


11

Nếu cptạo tệp đích, nó sẽ sao chép các quyền của tệp nguồn, ngoại trừ các bit được đặt trong ô. Đây là hành vi tiêu chuẩn (xem ví dụ bước 3.b trong thông số kỹ thuật Unix v3 (POSIX 2001) .

Tại sao cp được thiết kế theo cách này? Bởi vì có nhiều trường hợp hành vi này là mong muốn, ví dụ như bảo vệ quyền riêng tư của tệp khi các quyền ban đầu bị hạn chế và duy trì khả năng thực thi gần như luôn luôn là điều nên làm. Tuy nhiên, thật không may là ngay cả GNU cp cũng không có tùy chọn để tắt hành vi này.

Hầu hết các công cụ sao chép (ví dụ: pax, rsync) hoạt động theo cùng một cách. Bạn có thể đảm bảo tệp sẽ được tạo với sự cho phép mặc định bằng cách tách nguồn từ đích đến, ví dụ như với cat <baz >foo/baz.


Vâng, điều đó ít nhất giải thích động lực cho nó. (Tuy nhiên, điều kỳ lạ là quyền sở hữu nhóm được phép thay đổi thành "thông tin", cho phép nhiều người có khả năng đọc quyền truy cập vào tệp hơn.)
bhm

3

Vâng, một câu hỏi ba tuổi và nhiều hơn nhưng vẫn có liên quan. Đối với độc giả trong tương lai, tôi muốn thêm rằng dự kiến ​​các lệnh mv, cp không tuân theo ACL của thư mục đích. Câu trả lời của Gilles là ổn nhưng câu cuối cùng. Cách tốt hơn để áp dụng ACL của đích đến cho tệp được sao chép / di chuyển là cách được đề cập ở đây:

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

Trong trường hợp liên kết bị hỏng trong tương lai, tôi dán nội dung ở đây:

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

sao chép ACL của một tệp này sang tệp khác bằng getfacl và setfacl

CẢNH BÁO: ACL hiện tại sẽ bị mất.


1

Tôi gặp vấn đề tương tự với các tệp rsynced thiếu ACL mặc định thích hợp trong thư mục con đích. Cp không có cách thiết lập quyền trên mục tiêu. Nhưng, rsync có, sử dụng --chmod=ugo=rwxcờ. Xem câu trả lời của tôi ở đây .


0

Bạn cần sử dụng -phoặc --preservevới cp.

Từ man 5 acl:

THAY ĐỔI TIỆN ÍCH TẬP TIN

 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
Không chính xác. Anh ta muốn tập tin có cùng quyền với thư mục đích.
luckytaxi

0

Các ACL đang lan truyền chính xác, nhưng mặt nạ mặc định dường như không chính xác. Bạn có thể muốn mặt nạ mặc định của bạn là rwX.

setfacl -dm m::rwX foo

Nếu điều đó không làm việc, xin vui lòng gửi ACL cho foo.


Điều đó đã không làm việc. ACL cho foo (cả trước và sau lệnh của bạn) là # file: foo # own: bhm # group: felles # flags: -s- user :: rwx group :: rwx group: felles: rwx mask :: rwx other: : rx default: user :: rwx default: group :: rwx default: group: felles: rwx default: mask :: rwx default: other :: rx
bhm

-1

Hệ thống tập tin của bạn có được gắn với tùy chọn "ACL" không?

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

Nếu không, hãy thay đổi sau đó.

mount -o remount /wherefolderislocated

Nó được gắn với tùy chọn acl, vâng.
bhm

-1

Từ những gì tôi thấy bạn là chủ sở hữu của các tập tin (bhm) trước và sau cp. Như danh sách thư mục cho thấy chủ sở hữu đã truy cập đọc và viết!


Có lẽ tôi đã không rõ ràng: Tôi muốn nhóm ("felles") có thể (đọc và) viết tệp.
bhm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.