Bir dosya oluşturduğunuzda -- touch ile boş bir dosya açtığınızda, bir düzenleyicide kaydettiğinizde ya da bir uygulama log dosyası yazdığında -- chmod çalıştırmadığınız halde dosya elinize belirli bir izinle geçer. Bu izin rastgele değildir; umask adı verilen bir maskeleme değeri tarafından belirlenir. umask'in nasıl çalıştığını bilmek, sunucuda yeni oluşturulan dosyaları hangi kullanıcıların okuyabileceğini, yazabileceğini veya çalıştırabileceğini önceden kestirebilmek için gereklidir.
umask nedir?
umask, yeni oluşturulan dosya ve dizinlerden hangi izinlerin çıkarılacağını belirleyen bir maskedir. Linux çekirdeği ve standart araçlar (touch, mkdir, metin düzenleyiciler, çoğu uygulama) yeni bir dosya veya dizin oluştururken önce bir temel izin talep eder: dosyalar için 666 (rw-rw-rw-), dizinler için 777 (rwxrwxrwx). Bu iki değer dosyanın fiilen alacağı izin değildir, yalnızca üst sınırdır. Dizinlerde çalıştırma (x) biti dizine girebilmek anlamına geldiği için 777'den başlanır; dosyalarda çalıştırma biti varsayılan olarak istenmediği için 666'dan başlanır. umask, bu üst sınırdan belirli bitleri kaldırarak dosya veya dizinin gerçek izniyle sonuçlanan değeri üretir.
Varsayılan umask değeri dağıtımdan dağıtıma değişebilir. Kullanıcı özel grup (user private group) şemasını kullanan bazı dağıtımlarda -- her kullanıcının kendi adını taşıyan ayrı bir grubu olduğu düzende -- normal kullanıcılar için varsayılan umask genellikle 002 olarak ayarlanır, çünkü aynı gruptaki tek üye kullanıcının kendisidir. Paylaşımlı grup yapısı kullanan diğer sistemlerde ise varsayılan genellikle 022'dir. root kullanıcısı için de çoğu dağıtımda ayrı bir varsayılan tanımlanır. Bu nedenle bir sunucuya yeni giriş yaptığınızda önce mevcut umask değerini kontrol etmek, o sistemin izin davranışını yanlış varsaymamak için gereklidir.
Hesaplama nasıl yapılır
umask hesaplaması basit bir çıkarma işlemi değil, bit bazında AND NOT işlemidir: temel iznin her biti, umask'teki karşılık gelen bitin tersiyle eşleştirilir. umask değerinde bir bit "1" ise, o bit temel izinden kaldırılır; "0" ise temel izin olduğu gibi kalır. Standart değerlerde sonuç aritmetik çıkarmayla aynı görünse de (örneğin 666 - 022 = 644), gerçek mantık bit maskelemedir. umask üç rakamdan oluşur ve her rakam 0-7 arasındadır; rakamlar sırasıyla sahip (owner), grup (group) ve diğerleri (other) için hangi izin bitlerinin kaldırılacağını belirtir. Sık kullanılan bazı umask değerlerinin dosya ve dizinlerde bıraktığı sonuç aşağıdaki gibidir.
| umask | Dosya izni (666 üzerinden) | Dizin izni (777 üzerinden) |
|---|---|---|
| 000 | 666 (rw-rw-rw-) | 777 (rwxrwxrwx) |
| 002 | 664 (rw-rw-r--) | 775 (rwxrwxr-x) |
| 022 | 644 (rw-r--r--) | 755 (rwxr-xr-x) |
| 027 | 640 (rw-r-----) | 750 (rwxr-x---) |
| 077 | 600 (rw-------) | 700 (rwx------) |
umask 022 örneği adım adım
En yaygın kullanılan umask değeri 022'dir ve çoğu Linux dağıtımında normal kullanıcılar için varsayılandır. Üç rakam sırasıyla sahip, grup ve diğerleri içindir: ilk rakam olan 0 sahipten hiçbir şey kaldırmaz; ikinci ve üçüncü rakam olan 2 ise grup ve diğerlerinin yazma (w) bitini kaldırır. Dosyalar için temel izin 666 (rw-rw-rw-) idi; grup ve diğerlerinin yazma biti kaldırılınca 644 (rw-r--r--) kalır: sahip okuyup yazabilir, grup ve diğerleri sadece okuyabilir. Dizinler için temel izin 777 (rwxrwxrwx) idi; aynı mantıkla grup ve diğerlerinin yazma biti kaldırılınca 755 (rwxr-xr-x) kalır: sahip dizin içinde dosya oluşturup silebilir, grup ve diğerleri dizinin içeriğini listeleyip dizine girebilir ama yeni dosya oluşturamaz veya var olanları silemez.
Mevcut umask değerini görüntüleme ve değiştirme
Bir terminal oturumunda hangi umask değerinin aktif olduğunu görmek için parametresiz umask komutu çalıştırılır; komut aktif değeri oktal olarak (örneğin 0022) döndürür.
umask
Aktif kabuk oturumunda geçerli olan umask değerini gösterir.
Örnek: umask
0022
Değeri değiştirmek için umask komutuna oktal bir değer verilir. Bu değişiklik yalnızca komutun çalıştırıldığı terminal oturumu için geçerlidir; oturum kapatılıp yeniden açıldığında sistemin veya kullanıcının varsayılan değerine geri döner.
umask DEĞER
Aktif oturumdaki umask değerini belirtilen oktal değere ayarlar.
Örnek: umask 022
Değişikliğin her yeni oturumda otomatik uygulanmasını istiyorsanız, umask komutunu kabuğun başlangıç dosyasına eklemeniz gerekir. Tek bir kullanıcı için ~/.bashrc dosyasının (kullanılan kabuğa göre ~/.zshrc veya ~/.profile) sonuna satırı ekleyin; sistemdeki tüm kullanıcılar için ise /etc/profile ya da dağıtıma göre /etc/login.defs dosyasındaki UMASK satırını düzenleyin.
# ~/.bashrc dosyasinin sonuna eklenir
umask 022
umask, chmod'un yerini tutmaz
umask ile chmod sık karıştırılan iki farklı mekanizmadır. umask yalnızca o an oluşturulmakta olan yeni dosya ve dizinlerin alacağı izni etkiler; sistemde zaten var olan dosyaların izinlerine hiçbir etkisi yoktur. chmod ise tam tersine, halihazırda diskte duran belirli bir dosya veya dizinin iznini değiştirir. umask'i 027 olarak ayarlamak, dün oluşturulmuş bir dosyanın izinlerini otomatik olarak değiştirmez; o dosyanın iznini güncellemek için ayrıca chmod çalıştırmak gerekir. İkisini birlikte düşünmek gerekir: umask geleceği, chmod geçmişi ve şimdiki zamanı düzenler.
027 veya 077) yaygın bir güvenlik sertleştirme adımıdır: grup ve diğerlerinin yeni oluşturulan dosyalara erişimini baştan kısıtlayarak, sonradan izinleri düzeltmeyi unutma riskini ortadan kaldırır. Sistem geneli için bu değer genellikle /etc/profile veya /etc/login.defs içinde tanımlanır.Sık yapılan hatalar
- umask değerini chmod ile karıştırıp doğrudan sonuç izni (ör. 644) girmek; umask, sonucu değil temel izinden kaldırılacak bitleri ifade eder.
- Paylaşımlı bir sunucuda umask'i
000gibi aşırı gevşek bırakmak; bu durumda yeni oluşturulan her dosya sunucudaki diğer tüm kullanıcılar tarafından okunup yazılabilir hale gelir. - Bir terminal oturumunda
umaskkomutuyla yapılan değişikliğin kalıcı olduğunu sanmak; oturum kapanınca değer sıfırlanır, kalıcılık için~/.bashrcveya/etc/profiledüzenlenmelidir. - Servis olarak çalışan süreçlerin (systemd birimleri, cron görevleri, web sunucusu process'leri) umask değerini otomatik olarak kabuktan miras aldığını varsaymak; bu süreçler kendi yapılandırmalarında ayrı bir umask tanımlayabilir.
- Zaten diskte var olan dosyaların izinlerini düzeltmek için sadece umask değiştirmenin yeterli olacağını düşünmek; mevcut dosyalar için ayrıca
chmod(gerekirsechmod -R) çalıştırmak gerekir.
umask değerinin dosya ve dizinlerde bırakacağı sonucu kafadan hesaplamak, özellikle 027 veya 075 gibi daha az kullanılan kombinasyonlarda hataya açıktır. Bit maskeleme işlemini elle yürütmek yerine değeri doğrudan hesaplayıp oktal ve sembolik gösterimi görmek, sunucu yapılandırmasında yanlış izin bırakma riskini azaltır.
Bir umask değeri girin, dosya ve dizinler için ortaya çıkacak izinleri oktal ve sembolik gösterimle anında görün.