Linux'ta umask nasıl hesaplanır?


15

Yani umaskbu formatı kullanarak ayrıcalıklı kullanıcıları kısıtlayabileceğimi biliyorum umask ugo.

Anlıyorum okuma = 4, yazma = 2, ve exec = 1. Ancak, ben yazarken umask, öyle 4 hane döndüren 0022veya 0073. Bunun nasıl çalıştığını anlamıyorum, çünkü fazladan bir rakam var. Bu ekstra rakam nedir ve ne anlama 0022geliyor?

Yanıtlar:


18

Varsayılan 0666 maskesinin olduğunu varsayalım. umask0022 yeni maskeyi 0644 (0666-0022 = 0644) yapar, yani grup ve diğerlerinin okuma (yazma veya yürütme yok) izinleri vardır.

"Ekstra" basamak (ilk sayı = 0), özel mod olmadığını belirtir.

Mod bir rakamla başlarsa, sekizli olarak yorumlanır, aksi takdirde sembolik olması gerekir.

0, 1 (yapışkan bit için) veya 6 (SGID için) olduğu gibi bir basamaktır. Gibi bir komut , kullanıcı ve gruba okuma ve yazma izinlerini nereye ekleyeceğiniz chmodgibi diğer yöntemlerle çağrılabilir chmod ug+rw mydir. Bu durumda modun (ug + rw) bir rakamla başlamadığını, bu nedenle sekizlik olarak değil, sembolik olarak yorumlanacağını unutmayın.

Bkz en.wikipedia.org/wiki/Chmod#Symbolic_examples simgecilik yanı sıra www.lifeaftercoffee.com/2007/03/20/special-permission-modes-in-linux-and-unix/ için özel modları üzerinde biraz.

İlk parçanın maskesini kaldıracağınızı bilmiyorum umask, ancak teknik olarak yapabilirsiniz. Neden neredeyse her zaman sıfır olarak gördüğünüzü açıklar.

Pinkfloydx33'e kredi

Maskenin ilk basamağı, sahip / grup / diğer modele çok iyi uymayan özel izinlerle ilgilidir. Bir dosya izni için dört hane sağlandığında, ilki şu özel değerlere başvurur:

4000 = SUID
2000 = SGID
1000 = sticky bit

Set-user-ID kısaltması olan SUID biti, yürütülebilir bir programın sahibinin etkin kullanıcı kimliğiyle (uid) çalışmasına neden olur; Bu, kök ayrıcalıkları gerektiren, ancak normal kullanıcılar tarafından çalıştırılması amaçlanan şeyleri yapan programlarda yaygın olarak görülür: passwdböyle bir örnektir.

Set-grup-ID kısaltması olan SGID biti çok benzerdir ancak sahibinin etkin grup kimliği (gid) ile çalışır .

Yapışkan bit biraz daha karmaşıktır, bu konuda daha fazla bilgi istiyorsanız, man sayfasını okuyabilirsiniz sticky.

Bu bitler dizinlerle de kullanılabilir, ancak anlamları değişir.

Aslında umaskbu ekstra bitlerden herhangi birini varsayılan olarak etkinleştirmenize izin verecek şekilde ayarlayabileceğinize inanmıyorum , ancak muhtemelen bunu yine de yapmak istemezsiniz.

Kullanıcıya kredi470379


1
Aslında, son 3 basamaktan başka sıfır dışında bir değer sağlayamazsınız. Posix'e göre: "Dosya izni bitleri dışındaki dosya modu bitlerini belirten mod değerlerinin yorumu belirtilmemiş." Göre man 2 umask(ilgili sistem çağrısı) "sadece dosya izin bitleri maskkullanılır". İçinde bash, umask 1000 bir hata üretir: "sekizli sayı aralık dışında". Peki neden ekstra 0? Sanırım sadece sayının sekizlik olduğunu göstermek.
rici

O çöp kutusunun umask için herhangi bir referansı yok, bu yüzden nasıl alakalı olduğunu görmüyorum. chmod, ilk üç bitin ayarlanmasına izin verir, ancak umask onların maskelenmesine izin vermez. (yani yazmış olabilirsiniz chmod 6777 dropbox. Ve bu arada, aynı zamanda chmod ug+s.)
rici

Evet, haklısın, ne düşündüğümü bilmiyorum.
Braiam

@Braiam: Yeni maskeyi hesaplama formülünüz yanlış, değil 0666-0022, öyle 0666 & ~0022.
cuonglm

1
İtiraz, sayıların yazılma şekli değil, çıkarma operatörünün (-) bitsel ve (&) yerine kullanımı olduğunu düşünüyorum.
BowlOfRed
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.