Dizinler ve dosyalar üzerinde farklı ACL'ler ayarlama


15

Herkesin rwxtüm dizinleri ve böylece yeni oluşturulan tüm dosyaları böylece bir dosya paylaşımı için varsayılan izinler ayarlamak istiyorum rw.

Bu paylaşıma erişen herkes aynı gruptadır, bu yüzden bu bir endişe kaynağı değildir.

Tüm kullanıcıların umasks ve benzeri değiştirmeden ACL'ler aracılığıyla bunu baktım. İşte mevcut çağrılarım:

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

Benim sorunum yeni oluşturulan tüm isterken olmasıdır alt dizinleri olması rwx, sadece yeni oluşturulan istediğiniz dosyaları olmak rw.

İstediğim sonuca ulaşmak için daha iyi bir yöntem var mı? Ayrı dosyalardan dizinleri üzerinde ayarlanan ACL için bir yol benzer bir damarda, var mı chmod +xvs. chmod +X?

Teşekkürler

Yanıtlar:


12

Gilles'in işaret ettiği gibi, setfaclvarsayılan izinler temel olarak yerine geçen maksimum izinleri belirtir umask. Yeni oluşturulan dosyalar rw, dosyayı oluşturan uygulama özel olarak yürütülebilir olmasını istemedikçe olacaktır.

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

Yukarıdaki etkili izinlere dikkat edin. (Yürütme bitini oluşturduğu dosyalara, örneğin gccyürütülebilir dosyalar ve cpkopyalanan dosyanın yürütülebilir olup olmadığını ayarlamayı isteyen birkaç program vardır .)

Yoksa ilk setfacl komutunun istediğiniz şekilde çalıştığını mı söylediniz, ikincisi de öyle değildi? Başka bir deyişle, eski dosyalarda izinleri düzeltmek mi istiyorsunuz, diğer normal dosyaları yürütme izinleri vermeden dizinlerin sürülebilir olduğundan emin misiniz?

Benim sürümüm tam olarak istediğiniz gibi setfaclizin verir X, örneğin:

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

Sürümünüz setfaclbunu desteklemiyorsa neden kullanmıyorsunuz find?

izinlerin üzerine yazma, dosyalar için rw ve dirs için rwx olarak ayarlama

$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)

grup ACL izinlerini mevcut grup izinlerine göre ayarlama

$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
      -o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)

Muhtemelen grup maskesinin etkili izinler sağlayıp sağlamadığını kontrol etmek isteyeceksiniz. Değilse, bunu da çalıştırmanız gerekir:

$ find . -type d -exec chmod g+rwX '{}' ';'

4

Gelecekteki okuyucular için, setfacldosyalarınıza yürütülebilir bit eklemeden mevcut dosyalarda / klasörlerde kullanmak için çözüm @ Mikel'in cevabının bu kısmıdır :

Setfacl sürümüm X'in tam istediğiniz gibi olmasını sağlar, örneğin:

setfacl g:mygroup:rwX

setfaclBelgelerden ilgili alıntı :

İzinler alanı, izinleri gösteren karakterlerin birleşimidir: read (r), write (w), execute (x), yalnızca dosya bir dizinse veya zaten bazı kullanıcılar (X) için yürütme iznine sahipse çalıştır .


2

Linux ACL'lerini anladığım kadarıyla setfacl -Rdm g:mygroup:rwx share_name, tam olarak ne istediğinizi yapar. Deney:

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

Ardından gruptaki farklı bir kullanıcı olarak mygroup:

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

Neler oluyor?

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

Etkili ACL mygroupand'ing sonucudur ACL_GROUPgirişini mygroup( rwxACL_MASK girişi ile) ( rw-).

Acl (5) man sayfasına “Erişim kontrol algoritmaları” altında hesaplama bu açıklıyor. ACL_MASKGirişlerin nasıl üretildiğini açıklamıyor , ancak pratikte doğru şey oluyor gibi görünüyor.

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.