CP neden ACL'lere saygı duymuyor?


15

Bir grup içinde dosya paylaşımı için bir dizin oluşturmanın yaygın bir yolu şudur:

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

Bu, oluşturulan tüm dosyaların foogrup tarafından okunabilir ve yazılabilir olmasını sağlar 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

Ancak, bir dosyayı içine kopyalarsanız foo, varsayılan ACL'ler uygulanmaz:

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

Bu neden oluyor ve çevresinde bir yol var mı?

( Bir dosyayı dizine taşımak , ACL'lere veya grup sahipliğine saygı göstermez, ancak nedenini anlayabiliyorum: yalnızca dosya adını değiştirdiğiniz için bir dosyanın izinlerinin değişmesini istemeyebilirsiniz.)


serverfault.com/a/452678/46333 Bu cevap iyi bir açıklama içeriyor.
Kaan

Yanıtlar:


11

Eğer cphedef dosyası oluşturur, bu umask içinde ayarlanmış bitler haricinde, kaynak dosyasının izinlerini çoğaltır. Bu standart bir davranıştır (örneğin, Single Unix v3 (POSIX 2001) spesifikasyonundaki adım 3.b'ye bakınız ) .

CP neden bu şekilde tasarlandı? Bu davranışın istendiği birçok durum olduğu için, örneğin orijinal izinler kısıtlayıcı olduğunda bir dosyanın gizliliğini korumak ve çalıştırılabilirliği korumak neredeyse her zaman yapılacak doğru şeydir. Ancak GNU cp'nin bile bu davranışı kapatma seçeneği olmaması talihsiz bir durumdur.

Çoğu kopyalama aracı (örn. Pax, rsync) aynı şekilde davranır. Örneğin, ile kaynağı hedeften ayırarak dosyanın varsayılan izinle oluşturulmasını sağlayabilirsiniz cat <baz >foo/baz.


En azından bunun motivasyonunu açıklıyor. (Bununla birlikte, grup sahipliğinin "felles" olarak değişmesine izin vermesi gariptir, bu da potansiyel olarak daha fazla kişiye dosyaya okuma izni verir.)
bhm

3

Üç yaşında ve daha fazla soru ama yine de alakalı. Gelecekteki okuyucular için, mv, cp komutlarının hedef direktörün ACL'sini izlememesi beklendiğini eklemek istiyorum. Gilles'in cevabı son cümleden başka bir şey değildir. Hedefin EKL'sini kopyalanan / taşınan dosyaya uygulamanın en iyi yolu burada belirtilen yöntemdir:

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

Bağlantının gelecekte kesilmesi durumunda içeriği buraya yapıştırıyorum:

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

getfacl ve setfacl kullanarak bir dosyanın ACL'sini diğerine kopyala

UYARI: Mevcut ACL kaybolacaktır.


1

Hedef alt dizinde uygun varsayılan ACL eksik rsynced dosyaları ile benzer bir sorun vardı. Cp'nin hedef üzerindeki izinleri ayarlamanın bir yolu yoktur. Ancak, rsync --chmod=ugo=rwxbayrağı kullanarak yapar . Cevabımı burada görebilirsiniz .


0

-pVeya --preserveile kullanmanız gerekir cp.

Gönderen man 5 acl:

DOSYA YARDIMCILARINDAKİ DEĞİŞİKLİKLER

 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
Tam olarak değil. Dosyanın hedef klasörle aynı izne sahip olmasını istiyor.
luckytaxi

0

ACL'ler doğru şekilde yayılıyor, ancak varsayılan maske doğru görünmüyor. Muhtemelen varsayılan maskenizin rwX olmasını istiyorsunuz.

setfacl -dm m::rwX foo

Bu işe yaramazsa, lütfen ACL'yi foo için gönderin.


Bu işe yaramadı. Foo için ACL (hem komutunuzdan önce hem de sonra) # file: foo # owner: bhm # grup: felles # flags: -s- user :: rwx group :: rwx grup: felles: rwx mask :: rwx diğer: : rx varsayılan: kullanıcı :: rwx varsayılan: grup :: rwx varsayılan: grup: felles: rwx varsayılan: maske :: rwx varsayılan: diğer :: rx
bhm

-1

Dosya sisteminiz "ACL" seçeneği etkin olarak monte edilmiş mi?

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

Değilse, değişikliği yapın ve ardından yeniden takın.

mount -o remount /wherefolderislocated

ACL seçeneği ile monte edilmiş, evet.
bhm

-1

Gördüğüm kadar önce ve sonra cp dosyalarının (bhm) sahibi vardır. Dizin listesinin gösterdiği gibi, sahibinin okuma ve yazma erişimi vardır!


Belki de belirsizdim: Grubun ("felles") dosyayı (okuma ve yazma) yapabilmesini istiyorum.
bhm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.