“umask” nedir ve nasıl çalışır?

157

Umarımın dosya izinlerini kontrol eden ancak tam olarak anlamayan bir şey olduğuna inanıyorum.

Bir terminalinde umask 0644 çalıştırdıktan sonra, oluşturduğum dosyaları komut satırı metin düzenleyicisi ile okuyamıyorum nano . Bu dosyanın izinlerinin, varsayılan 0022 yerine 0755 değerine ayarlandığını fark ettim.

umask nasıl çalışır? Umarım her rakamı 0777 , 7 - 6 = 1 ve 7 - 4 = 3 değerinden kaldırabileceğimi düşündüm, bu yüzden izinlerin 0133 olmasını bekledim, ancak görünüşe göre, durum böyle değil.

  1. Umask tam olarak nedir? Bana "Linux noob" gibi olduğumu açıkla
  2. Umask ile nasıl hesap yapabilirim?
  3. Umask için kullanım örnekleri nelerdir?
sordu Lekensteyn 22.05.2011 22:42

5 cevap

124

Umask, uygulamaların dosyalara ayarlayamayacağı bir izin kümesi görevi görür. İşlemler için bir dosya modu oluşturma maskesidir ve dizinlerin kendisi için ayarlanamaz. Çoğu uygulama yürütme izinleri ayarlı dosyalar oluşturmaz, bu nedenle 666 değerine sahip olurlar. Bu, umask tarafından değiştirilir.

Umumi, sahibi için okuma / yazma bitlerini ve başkalarının okuma bitlerini kaldıracak şekilde ayarladığınız için, uygulamalarda 777 gibi bir varsayılan, dosya izinlerinin 133 olmasını sağlar. Bu, sizin (ve başkalarının) dosyayı çalıştırabileceği anlamına gelir ve diğerleri buna yazabilir.

Dosyaların sahibi tarafından herhangi bir kişi tarafından okunma / yazma / yürütme yapılmasını istemiyorsanız, grup & amp; için bu izinleri kapatmak üzere 077 gibi bir umask kullanmalısınız. diğerleri.

Buna karşılık, 000 umask, yeni oluşturulan dizinleri herkes için okunabilir, yazılabilir ve azalabilir hale getirecektir (izinler 777 olacaktır). Böyle bir umask son derece güvensizdir ve umask'u asla 000 olarak ayarlamamalısınız.

Ubuntu'daki varsayılan umask 022 'dir. Bu, yeni oluşturulan dosyaların herkes tarafından okunabileceği anlamına gelir, ancak yalnızca sahibi tarafından yazılabilir:

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw-r--r-- 1 user user 0 Apr  1 19:15 new-file-name

umask’ı görüntüleme ve değiştirme

Mevcut umask ayarınızı görüntülemek için bir terminal açın ve komutu çalıştırın:

umask

Mevcut kabuğun umask ayarını başka bir şeye değiştirmek için, 077 deyin:

umask 077

Bu ayarın çalışıp çalışmadığını test etmek için yeni bir dosyası oluşturabilir (varolan dosyanın dosya izinleri etkilenmez) ve dosyayla ilgili bilgileri gösterir, çalıştırın:

[email protected]:~$ touch new-file-name
[email protected]:~$ ls -dl new-file-name
-rw------- 1 user user 0 Apr  1 19:14 new-file-name

Umum ayarı, aynı kabuktan başlatılan işlemlerle miras alınır. Örneğin, terminalde gedit dosyasını çalıştırarak ve gedit'i kullanarak bir dosyayı kaydederek, metin editörü GEdit'i başlatın. Yeni oluşturulan dosyanın terminalde olduğu gibi aynı umask ayarından etkilendiğini göreceksiniz.

Kullanım durumu: çok kullanıcılı sistem

Birden çok kullanıcı tarafından paylaşılan bir sistemdeyseniz, diğerlerinin ev dizininizdeki dosyaları okuyamaması istenir. Bunun için umask çok faydalıdır. % Co_de% değerini düzenleyin ve yeni bir satır ekleyin:

umask 007

Etkinleştirmek için ~/.profile cinsinden bu umask değişikliği için yeniden giriş yapmanız gerekiyor. Ardından, dünyadaki okuma, yazma ve yürütme biti'ni kaldırarak, ev dizininizdeki dosyaların mevcut dosya izinlerini değiştirmeniz gerekir. Bir terminal açın ve yürütün:

chmod -R o-rwx ~

Bu umask ayarının sistemdeki tüm kullanıcılara uygulanmasını istiyorsanız, sistem genelindeki profil dosyasını ~/.profile adresinde düzenleyebilirsiniz.

    
verilen cevap ajmitch 22.05.2011 22:59
34

Kabul edilen cevapta yapılan iyi tartışmalara ek olarak, 12.04 ve sonrasında nasıl yönetildiğine bağlı olarak, umask hakkında daha fazla puan eklememiz gerekir.

Umask ve pam_umask

% ko_de% cinsinden resmi not olarak varsayılan umask /etc/login.defs ve /etc/profile cinsinden değil:

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

/etc/profile aşağıda kısaca açıklanmıştır ve kullanıcının özel umask ayarını yerleştirmesi için varsayılan dosyanın hala Pam_umask olduğu belirtilmelidir.

~/.profile , önemli olan çok önemli PAM modüllerinden biridir. Ubuntu'nun çalışmasında (diğerlerinin sayfalarını bulmak için Pam_umask çalıştırın). % Co_de% için manpage ’de belirtildiği gibi

  

pam_umask, geçerli ortamın dosya modu oluşturma maskesini ayarlamak için bir PAM modülüdür. Umask etkiler          yeni oluşturulan dosyalara atanan varsayılan izinler.

Varsayılan umuma ilişkin bir not

apropos '^pam_' 'deki yeni klasörler, varsayılan 775 izinleri ile pam_umask ve varsayılan umask 022 olduğunda bile varsayılan 664 izinleriyle $HOME ile oluşturulan dosyalar tarafından oluşturulabilir. Bu, ilk başta çelişkili ve değere açıklayan.

Ubuntu'da varsayılan umask 022 iken, bu durum tüm hikaye değildir, çünkü mkdir 'de umask'un bir koşul karşılandığında root olmayan kullanıcılar için 002 olmasını sağlayan bir ayar vardır (aşağıdaki alıntıya bakınız) . Normal bir kurulumda, touch , /etc/login.defs ayarını içerir. İşte bu

  

umask grubu bitlerinin, sahip bitleriyle aynı olmasını ayarlamak için etkinleştirir    Kök kullanıcı olmayan kullanıcılar için (örnek: 022 -> 002, 077 -> 007)    gid ile aynıdır ve kullanıcı adı birincil grup adıyla aynıdır.

Bu nedenle, /etc/login.defs ile mayın gibi tek bir kullanıcı sisteminde USERGROUPS_ENAB yes oluşturulduğunda stat ile aşağıdakileri neden görüyorsunuz (uid ve gid aynı):

Access: (0775/drwxrwxr-x)  Uid: ( 1000/username)   Gid: ( 1000/username)

Daha fazla bilgi için bkz. mkdir ve Ubuntu manpages çevrimiçi .

    
verilen cevap user76204 02.04.2013 02:16
29

Bu oldukça eski, ama bu bahsetmeye değer. Dosya sistemi izinlerinden farklı olarak umask hesaplamak için. Sekiz umaslar, bitsel DEĞİL NOT'u kullanılarak argümanın tekli tamamlayıcısının bitly AND'si ile hesaplanır. Sekizlik gösterimleri şöyledir:

Octal value : Permission
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

Ardından, umask gibi uygun primlerini ayarlamak için hesaplayabilirsiniz:

$ umask 077
$ mkdir dir1
$ touch file
$ ls -ld dir1 file

drwx------ 2 amrx amrx 4096 2011-03-04 02:05 dir1
-rw------- 1 amrx amrx    0 2011-03-04 02:05 file

Dosyalar İçin Son İzinlerin Hesaplanması

Dosyanın son iznini aşağıdaki gibi belirlemek için umask 'ı temel izinlerden çıkarmanız yeterlidir:

666 – 022 = 644
  • Dosya tabanı izinleri: 666
  • umask değeri: 022
  • yeni dosya izinlerini almak için çıkar (666-022) : 644 (rw-r–r–)

Dizinler İçin Son İzin Hesaplaması

Dizinin son iznini belirlemek için umask'ı temel izinlerden çıkarmanız yeterlidir:

777 – 022 = 755
  • Dizin tabanı izinleri: 777
  • umask değeri: 022
  • Yeni dizinin izinlerini almak için çıkar (777-022) : 755 (rwxr-xr-x)
verilen cevap amrx 06.04.2016 10:27
24

Diğerleri, umasking kavramını gerçekten iyi açıkladı ve neden gerekli oldu. İki sentimi ekleyeyim ve izinlerin gerçekten nasıl hesaplandığı konusunda size matematiksel bir örnek vereyim.

Her şeyden önce, "Maske" aritmetik anlamda "çıkarma" anlamına gelmez - ikinci olarak, umask bir maskedir; Çıkarılacak bir sayı değil.

Üçüncü olarak, maske izin bitlerini kapatır. Zaten kapalıysa, umask izninde değişiklik yapmaz,

Örneğin, 077 'sinin 666 ve 777 dizinine sahip olan dosyalar için sistem varsayılan değerlerinden maskesini kaldırmanız gerektiğini varsayalım.

Kullanacağınız komut,

umask 077

(ikilide değeri kaldırmak, 000 111 111 )

Bu maskenin yapacağı şey, eğer 1 değerindeyse ve herhangi biri zaten kapalıysa hiçbir değişiklik yapmayacaksa, ilk altı LSB'den (en az anlamlı bit) herhangi birini kapatacaktır.

Son iznin nasıl hesaplandığı:

file permisison 666 = 110 110 110 
unmask value    077 = 000 111 111
will result in, 600 = 110 000 000

Hem 110 değerlerinin 000 olarak nasıl değiştiğini gözlemleyin.

Aynı şekilde,

directory permission 777 = 111 111 111 
unmask value         077 = 000 111 111
will result in,      700 = 111 000 000
    
verilen cevap Sufiyan Ghori 05.06.2016 16:09
9

Temel kavram:

Eğer çoğu insan gibiysen ve "hece umaslarının bitsel kullanarak argümanın tekli tamamlayıcısı ile bitumlu ümitleri hesaplandığını" anlamıyorsan , burada basit bir açıklama var. :

Her şeyden önce, bir "maske" nin ne olduğunu düşünün. Bir maske bir şeyi engeller. Maskeleme bandı düşünün. Bu durumda, umask yeni bir dosya veya dizin oluştururken izinleri engellemek / devre dışı bırakmak için maskeleme bandı gibidir.

Yeni bir direk oluştururken varsayılan izinler octal 777 (111 111 111) , yeni bir dosya octal 666 (110 110 110) . Umumuzu belirli izinleri engellemek / devre dışı bırakmak için ayarladık.

  • 1 adlı bir maske biti bu izni engellemek / devre dışı bırakmak (maskeleme bandını bu bitin üzerine koymak) anlamına gelir.
  • 0 'lik bir maske biti, izinlerin geçmesine izin verecektir (bu biti üzerinden maskeleme bandı yok).

Dolayısıyla, octal 022 (000 010 010) mask, group write ve others write 'i devre dışı bırakmak ve diğer tüm izinlerin geçmesine izin vermek anlamına gelir.

Hesaplama:

İşte 022 umask ile yeni bir dosya için bir örnek hesap (varsayılan 666 izni):

  perm mask result
----------------------------
u 1    0    1 (pass through)
  1    0    1 (pass through)
  0    0    0 (pass through)
----------------------------
g 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)
----------------------------
o 1    0    1 (pass through)
  1    1    0 (disable)
  0    0    0 (pass through)

Yani yeni bir dosya oluşturduğunuzda 644 sonucuna ulaşırsınız.

Daha kolay yol:

Ancak, ters maskeleme hesaplamaları sadece kafa karıştırırsa, sembolik umask notasyonunu kullanmanın daha kolay bir yolu vardır. Bu yöntemi kullandığınızda, sadece maske bitleri yerine geçiş bitlerini belirtirsiniz.

  • umask u=rwx,g=rx,o=rx , user rwx , group rx , other rx için geçiş izni anlamına gelir. Hangi group w , others w devre dışı bırakmayı gerektirir. Bu komutu çalıştırırsanız umask değerini kontrol edin, 022 değerini alacaksınız.
  • umask u=rwx,g=,o= , user rwx için geçiş izni anlamına gelir. Hangi, group ve others için tüm erişimi devre dışı bırakır. Bu komutu çalıştırırsanız umask değerini kontrol edin, 077 değerini alacaksınız.

Bonus hesaplaması:

Eğer gerçekten fiili umasklerin bitsel kullanarak argümanın tekli tamamlayıcısının bitsel VE bit eşiği kullanılarak hesaplanmasının ne demek olduğunu anlamak istemiyorsanız. Burada, göstermeye yardımcı olabilecek bazı mantık tabloları vardır. Unutmayın, bir maske biti 1 devre dışı demektir, 0 geçiş demektir.

perm mask result
----------------
0    1    0     (mask 1 always disables)
1    1    0     (mask 1 always disables)
0    0    0     (mask 0 passes through)
1    0    1     (mask 0 passes through)

Tabloyu NOT(mask) ile yaparsanız, artık sadece AND mantık tablosu var!

perm NOT(mask) result
---------------------
0    0         0     (mask 1 always disables)
1    0         0     (mask 1 always disables)
0    1         0     (mask 0 passes through)
1    1         1     (mask 0 passes through)

Yani bunun için formül: result = perm AND (NOT mask)

    
verilen cevap wisbucky 04.04.2017 00:30

Etiketlerdeki diğer soruları oku