Linux'ta ACL ve MASK başlıklı bu örneği buldum . Bu makalede, ACL'lerin nasıl umask
birbirleriyle 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 0666
uygulanırken, bir dizin oluşturulduğunda varsayılan izinler 0777
uygulanır.
örnek 1 - dosya
Umask'ımızı 077 olarak ayarladığımızı ve bir dosyaya dokunduğumuzu varsayalım. Bunu strace
yaparken 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 077
daha 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 mkdir
komutu kullanıyoruz . mkdir
Komut 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 022
aşağıdaki izinlerin bir umask kaldırılır ( ----w--w-
), bu yüzden rwxr-xr-x
dizinler 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::rwx
dizinin oluşturulduğu zamanki gibi değil ?
luvly
Dosyanı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
mask::rw-
. Ama bu gerçekten senin sorunun değil, değil mi?