Gruptaki chmod (1) neden ACL maskesini etkiler?


17

Ben (ki Ubuntu 11.10 üzerinde test oluyor) bu Unix davranışını anlamaya çalışıyorum:

$ touch foo
$ setfacl -m u:nobody:rwx foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx
group::rw-
mask::rwx
other::r--

$ chmod g-rw foo
$ getfacl foo
# file: foo
# owner: michael
# group: michael
user::rw-
user:nobody:rwx         #effective:--x
group::rw-          #effective:---
mask::--x
other::r--

Chmod (1) komutunun ACL maskesini güncellediğine dikkat edin. Bu neden oluyor?

SunOS manpage söylemek aşağıdaki vardır:

ACL girişleri olan bir dosyadaki dosya grubu sahibi izinlerini değiştirmek için chmod (1) komutunu kullanırsanız, hem dosya grubu sahibi izinleri hem de ACL maskesi yeni izinlere değiştirilir. Yeni EKL maske izinlerinin, dosyada EKL girdileri olan ek kullanıcılar ve gruplar için etkin izinlerini değiştirebileceğini unutmayın.

Soruyorum çünkü chmod (1) bu davranışa sahip olmasaydı benim için uygun olurdu. Umarım neden yaptığını anlayarak dosya sistemi izinlerini nasıl ayarladığımı daha iyi tasarlayabilirim.


2
Şimdi bunu unix.stackexchange.com'da sormam gerekip gerekmediğini merak ediyorum. Doğru siteyi seçmeye çalışmak her zaman zordur.
Michael Kropat

Yanıtlar:


24

O olur değil eğer sizin için uygun olması chmod()bu davranışı yoktu.

Bu oldukça rahatsız edici olurdu, çünkü insanların geleneksel olarak Unix'ler üzerinde çalışmayı bekledikleri şeyler kırılacaktı. Bu davranış size iyi hizmet eder, biliyor muydunuz?

Dan - O işletim sistemleri geniş bir yelpazede bir standarttır, IEEE 1003.1e standart haline geldi ve on dört yıl sonra, Uygulamada 1998'de geri çekildi asla bu bir utanç Linux aracılığıyla FreeBSD için Solaris - aslında uygulamak.

IEEE 1003.1e çalışma taslağı # 17 ilginç bir okuma için yapar ve bunu tavsiye ederim. Ek B § 23.3'te çalışma grubu, POSIX EKL'lerinin eski S_IRWXGgrup izin bayraklarına göre çalışmasının biraz karmaşık bir yolu için ayrıntılı, sekiz sayfalık bir gerekçe sunmaktadır . (TRUSIX çalışanlarının on yıl önce aynı analizi sağladığını belirtmek gerekir.) Hepsini buraya kopyalamayacağım. Ayrıntılar için taslak standarttaki mantığı okuyun. İşte ise çok kısa Özetleyerek :

  • SunOS kılavuzu yanlış. Bu gerektiğini okumak

    Eğer kullanırsanız chmod(1), ACL girişlerle bir dosya üzerinde dosya grubu sahibi izinleri değiştirmek için komut ya dosya grubu sahibi izinleri veya ACL maskesini yeni izinler değiştirilir.

    Bu, mevcut manuel sayfanın söylediklerine rağmen, sorunuzda gerçekleşen davranıştır . Aynı zamanda taslak POSIX standardında belirtilen davranıştır. Bir ederse CLASS_OBJ(Sun'ın ve TRUSIX en terminolojisi için ACL_MASK) erişim kontrol girdisi varsa, bir grup bitleri chmod()kümesi o aksi takdirde set GROUP_OBJerişim kontrol girdisi.

  • Durum böyle değilse, chmod () `olarak çalışmasını bekleyen` `chmod () '' ile çeşitli standart şeyler yapan uygulamalar geleneksel olarak eski ACL Unix'lerde çalıştı, ya boşluk güvenlik delikleri bırakacak ya da güvenlik açıkları açığı olduğunu düşünüyorlar:

    • Geleneksel Unix uygulamaları, ile boru, aygıt veya dizine sahip bir dosyaya tüm erişimi reddedmeyi bekler chmod(…,000). ACL varlığı, bu sadece kapanır bütün halinde eski kullanıcı ve grup izinleri S_IRWXGharitalar için CLASS_OBJ. Bu olmadan, eski dosya izinlerini ayarlamak 000herhangi bir girişi USERveya GROUPgirişleri etkilemez ve diğer kullanıcılar şaşırtıcı bir şekilde nesneye hala erişebilir.

      Bir dosyanın izin bitlerini erişime geçici olarak geçici olarak değiştirmek chmod 000ve sonra tekrar değiştirmek, Unixes'in tavsiye görebilme mekanizmaları kazanmadan önce kullanılan ve gördüğünüz gibi insanların bugün hala kullandığı eski bir dosya kilitleme mekanizmasıydı .

    • Geleneksel Unix komut dosyaları çalışıp chmod go-rwxyalnızca nesnenin sahibinin nesneye erişebilmesini bekler . Yine - gördüğünüz gibi - bu hala on iki yıl sonra alınan bilgeliktir . Ve yine, bu eski olmadıkça çalışmaz S_IRWXGiçin haritalar CLASS_OBJaksi çünkü, eğer varsa chmodkomut herhangi kapatmak olmaz USERveya GROUPerişim denetim girdilerini sahibi ve bir şeye neden istinat grupları olmayan sahibi dışındaki kullanıcılara açan bir yalnızca sahip tarafından erişilebilir olması bekleniyor .

    • İzin bitlerinin başka şekilde ACL'lerden ayrı olduğu ve anddüzenlendiği bir sistem rwxrwxrwx, çoğu durumda dosya izni bayraklarının olmasını gerektirecek ve bu da dünya çapında yazılabilir olduğunu düşündüklerinde şikayet eden birçok Unix uygulamasının kafasını karıştıracaktır. şey.

      İzin bitlerinin aksi takdirde EKL'lerden ayrı olduğu ve ordüzenlendiği bir sistemde daha chmod(…,000)önce bahsedilen sorun yaşanır.

daha fazla okuma


Harika, bu çok mantıklı. Man sayfasındaki açıklamanız, davranış hakkındaki şüphelerimi doğrularken, üç açıklamanız tam olarak konuyla ilgili aydınlanmak için ihtiyacım olan şeydi. Tasarımın nedenlerini bildiğim için çok mutluyum ve bu soruya cevap vermekten çok mutluyum, bu da beni bir soruyu cevaplamak için tüm okumaları yapmaktan kurtardı.
Michael Kropat

@hopeseekr Artık izinleri kullanmamak için Linux'u, 100'lü GNU yardımcı programlarını ve 1000'lerce üçüncü taraf yazılım parçalarını çatallayabilirsiniz S_IRWXG. İşiniz bittiğinde beni arayın.
Tobia

0

Bu davranış yalnızca POSIX ACL girişleri için geçerlidir. Bunun nedeni burada bir klasörünüz varsa ve bu klasörün içinde bir dosya varsa, rwx (örneğin) klasörü ve dosyayı açabilirsiniz. Dosyanın grup izinleri rw- ise (ki bunlar tipik bir senaryo olabilir) maske böylece ACL açıkça rwx'i belirtmesine rağmen acl'ye rw- etkin izinlerini verir.

Öte yandan, neredeyse her zaman + x olan dizin, + x'e izin veren etkin ACL maske izinlerine sahiptir.

Özetle, bu maske temel olarak POSIX ACL seti için dosyalar ve klasörler arasındaki izni ayırt etmek için kullanılır, böylece bir dosyanın normalde olmaması gerektiğinde yürütülebilir hale gelmez.


Birinin bunu okuması durumunda, bu cevap tamamen yanlıştır.
pgoetz
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.