Umask ACL'leri nasıl etkiler?


12

umaskACL'ler etkinleştirilirse birisi bana yeni oluşturulan dosyaların varsayılan maskesini nasıl etkilediğini açıklayabilir mi? Bununla ilgili bazı belgeler var mı?

Misal:

$ mkdir test_dir && cd test_dir
$ setfacl -m d:someuser:rwx -m u:someuser:rwx .  # give access to some user
$ getfacl .
# file: .
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:someuser:rwx
default:group::---
default:mask::rwx
default:other::---
$ umask # show my umask
077
$ echo "main(){}" > x.c # minimal C program
$ make x # build it
cc     x.c   -o x
$ getfacl x
# file: x
# owner: myUsername
# group: myGroup
user::rwx
user:someuser:rwx           #effective:rw-
group::---
mask::rw-
other::---

Ben beklerdim mask:rwx. Aslında umaskörneğin ayarladıktan sonra 027beklenen davranışı elde.


077 umask ile bir alırsınız mask::rw-. Ama bu gerçekten senin sorunun değil, değil mi?
slm

@slm Bu, sorumun bir parçası. Yeni dosyaların maskesinin umask'a nasıl bağlı olduğunu bilmek istiyorum. Oldukça şaşırdım 077 ile dizinin varsayılan maskesi olan olsun mask::rw-değil mask::rwx.
jofel

Tamam, şimdi cevabımı bu sorunun giderilmesine yardımcı olacak örneklerle güncelliyoruz. Bana birkaç dakika ver.
slm

Bu soru yakından ilişkilidir.
jofel

Yanıtlar:


10

Linux'ta ACL ve MASK başlıklı bu örneği buldum . Bu makalede, ACL'lerin nasıl umaskbirbirleriyle nasıl etkileşime girdiğini anlamaya yardımcı olduğunu düşündüğüm aşağıdaki örnekler gösterilmiştir .

Arka fon

Linux sisteminde bir dosya oluşturulduğunda, varsayılan izinler 0666uygulanırken, bir dizin oluşturulduğunda varsayılan izinler 0777uygulanır.

örnek 1 - dosya

Umask'ımızı 077 olarak ayarladığımızı ve bir dosyaya dokunduğumuzu varsayalım. Bunu straceyaparken gerçekten neler olduğunu görmek için kullanabiliriz :

$ umask 077; strace -eopen touch testfile 2>&1 | tail -1; ls -l testfile
open("testfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
-rw-------. 1 root root 0 Sep 4 15:25 testfile

Bu örnekte sistem çağrısının open()0666 izinleriyle yapıldığını görebiliriz , ancak umask 077daha sonra çekirdek tarafından uygulandığında aşağıdaki izinler kaldırılır ( ---rwxrwx) ve rw-------aka 0600 ile kalırız .

örnek - 2 dizin

Aynı kavram dizinlere uygulanabilir, ancak varsayılan izinler 0666 yerine 0777'dir.

$ umask 022; strace -emkdir mkdir testdir; ls -ld testdir
mkdir("testdir", 0777)                  = 0
drwxr-xr-x 2 saml saml 4096 Jul  9 10:55 testdir

Bu sefer mkdirkomutu kullanıyoruz . mkdirKomut ardından sistem çağrısı denir mkdir(). Yukarıdaki örnekte mkdir, mkdir()sistem adı verilen komutun varsayılan izinlerle 0777( rwxrwxrwx) çağrıldığını görebiliriz . Bu kez 022aşağıdaki izinlerin bir umask kaldırılır ( ----w--w-), bu yüzden rwxr-xr-xdizinler oluşturulduğunda 0755 ( ) ile kalır.

örnek 3 (Varsayılan EKL'yi uygulama)

Şimdi bir dizin oluşturalım ve içindeki ACL ile birlikte varsayılan ACL uygulandığında ne olacağını gösterelim.

$ mkdir acldir
$ sudo strace -s 128 -fvTttto luv setfacl -m d:u:nginx:rwx,u:nginx:rwx acldir

$ getfacl --all-effective acldir
# file: acldir
# owner: saml
# group: saml
user::rwx
user:nginx:rwx          #effective:rwx
group::r-x          #effective:r-x
mask::rwx
other::r-x
default:user::rwx
default:user:nginx:rwx      #effective:rwx
default:group::r-x      #effective:r-x
default:mask::rwx
default:other::r-x

Şimdi dosyayı yaratalım aclfile:

$ strace -s 128 -fvTttto luvly touch acldir/aclfile

# view the results of this command in the log file "luvly"
$ less luvly

Şimdi yeni oluşturulan dosyanın izinlerini alın:

$ getfacl --all-effective acldir/aclfile 
# file: acldir/aclfile
# owner: saml
# group: saml
user::rw-
user:nginx:rwx          #effective:rw-
group::r-x          #effective:r--
mask::rw-
other::r--

Maskeye dikkat edin mask::rw-. Neden mask::rwxdizinin oluşturulduğu zamanki gibi değil ?

luvlyDosyanın oluşturulması için hangi varsayılan izinlerin kullanıldığını görmek için günlük dosyasını kontrol edin :

$ less luvly |grep open |tail -1
10006 1373382808.176797 open("acldir/aclfile", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3 <0.000060>

Burası biraz kafa karıştırıcı oluyor. Maske rwx, dizinin oluşturulduğu zamana ayarlandığında , dosyanın oluşturulması için aynı davranışı beklersiniz, ancak bu şekilde çalışmaz. Bunun nedeni, çekirdeğin open()işlevi varsayılan izinleriyle çağırmasıdır 0666.

Özetlemek

  • Dosyalar yürütme iznine sahip olmayacak (maskeleme veya etkili). Hangi yöntemi kullandığımız önemli değil: ACL, umask veya mask & ACL.
  • Dizinler yürütme izinleri alabilir, ancak maskeleme alanının nasıl ayarlandığına bağlıdır.
  • EKL izinleri altındaki bir dosya için yürütme izinleri ayarlamanın tek yolu, bunları kullanarak el ile ayarlamaktır chmod.

Referanslar


@jofel - bunun mantıklı olup olmadığını bana bildirin.
slm

Detaylı cevabınız için çok teşekkür ederim. Beni asıl sorunuma yaklaştırıyor: chmod syscall'daki grup izni dosyanın maskesini etkiler ( chmod("file",0760)-> mask:rw, chmod("file",0770)-> mask:rwx). Belki de
bununla

@jofel - evet bu başka bir soruya benziyor.
slm

@sIm ve burada zaten cevaplandı .
jofel

"Bir Linux sisteminde bir dosya oluşturulduğunda, varsayılan izinler 0666 uygulanır ..." - bu tam olarak doğru değildir, çünkü oluşturma uygulamasına bağlıdır.
ilkkachu

2

güvenlik amacıyla, linux işletim sistemi yürütme biti olan bir dosyanın otomatik olarak oluşturulmasına izin vermez. Bu, siber saldırganların bu tür dosyalara program yazmasını ve sunucunuza erişmeleri durumunda bu dosyaları yürütmelerini önlemektir. Bu sadece bir güvenlik önlemidir. Chmod yardımcı programı ile oluşturduktan sonra dosyalardaki yürütme bitini sonsuza kadar manuel olarak ayarlamanız gerekir.

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.