UMASK Nedir?

Bu kılavuza başlamadan önce, GNU/Linux dizin ve dosya izinleri hakkında bilginiz olması gerekmektedir. 

Bir kullanıcı Linux veya UNIX altında bir dosya veya dizin oluşturduğunda, bunu sistemin varsayılan izinlerle yapar. Çoğu durumda, sistem varsayılanları dosya paylaşımı amacıyla izinleri çok kısıtlı tutmaz. Örneğin, bir metin dosyasının 666 izni varsa, herkese okuma ve yazma izni verir. Benzer şekilde, 777 izne sahip bir dizin herkese okuma, yazma ve yürütme izni verir. Bu varsayılan izinler değiştirmek için umask kullanırız.

Kullanıcı dosya oluşturma modu maskesi yani, umask, yeni oluşturulan dosya ve klasörler için varsayılan izinleri ayarlamanıza izin veren bir linux komutudur.

Linux'ta her dosya ve klasör için üç izin kategorisi vardır.

  • Kullanıcı: Her bir kullanıcı için izinleri tanımlar. Varsayılan olarak, dosya veya klasör oluşturan kullanıcı sahip olarak belirlenir.
  • Grup: Aynı erişim düzeyini paylaşan bir grup kullanıcı için izinleri tanımlar.
  • Diğer: Önceki iki kategoriye dahil olmayan herkes için izinleri tanımlar.

umask komutu yalnızca yeni oluşturulan dosyalarda kullanılabilir,  umask kullanılmadan önce sistemdeki eski dosya izinlerinde hiçbir değişiklik olmaz.

syntax

umask [options] 
  • mask : Uyguladığınız yeni izinler maskesi. Varsayılan olarak, maske sayısal (sekizlik) bir değer olarak sunulur.
  • -S : Geçerli maskeyi sembolik bir değer olarak görüntüler.
  • -p :  Komutla birlikte geçerli maskeyi görüntüler ve umask gelecekteki bir girdi olarak kopyalanıp yapıştırılmasına izin verir.

umask değerinin hesaplanması

Umask çalışmasını daha iyi anlamak için sekizli mod güvenlik ayarlarını anlamamız gerekiyor. Üç  tane harf olan "rwx" izni yani (Okuma-Yazma-Yürütme) değeri, üç bitlik ikili değerlere dönüştürülür ve aşağıdaki tabloda gösterildiği gibi tek bir sekizlik değerle temsil edilir:

izinler Sekizlik Değer İkili Değer Tanım
0 000 İzin yok
-x 1 001 sadece yürütme izni 
-w- 2 010 sadece yazma izni
-wx 3 011 yazma ve yürütme izni
r- 4 100 sadece okuma izni
rx 5 101 okuma ve yürütme izni
rw- 6 110 okuma ve yazma izni
rwx 7 111 üçünü de yapma izni, yani okuma, yazma ve yürütme

Yukarıdaki tabloyu daha iyi anlamak için ilk başta kafa karıştırıcı görünebilir, ancak oldukça basit, hatırlamanız gereken tek şey üç mod, rwx (okuma-yazma-yürütme).

Linux, aşağıdaki varsayılan maskeyi ve izin değerlerini kullanır.

Sistem varsayılan izin değerleri, klasörler için 777  (rwxrwxrwx) ve dosyalar için 666  (rw-rw-rw- ) şeklindedir. Bu bize, nihai izin değerinin, varsayılan izin değerinden (777 veya 666) umask değerinin çıkarılmasının sonucu olduğunu gösterir.

normal bir kullanıcı için varsayılan maske 002'dir, yani klasör izinleri 777-002=775 ve dosya izinleri 666-002=664 olarak ayarlanır.

root kullanıcı için varsayılan maske 022, yani klasör izinlerini 777-022=755  ve dosya izinlerini 666-022=644 olarak ayarlanır.

Sistem açılışında kök kullanıcı ve normal kullanıcı umask bitleri /etc/login.defs dosyasından varsayılan olarak gelmektedir.

Örneğin, klasör izin değerini 777'den yani “okuma, yazma ve tümü için yürütme” 444'e yani (tümü için okuma) değiştirmek istiyorsanız, 333'lük bir umask değeri uygulamanız gerekir.

777 - 444 = 333

umask 333 

Yukarıdaki örneğe baktığımız zaman, umask değerini güncellediğimiz zaman, artık yeni oluşturduğumuz dizin ve dosyalar tüm kişiler için sadece okuma yetkisi olduğunu görebiliyoruz.

umask güncellendiği zaman umask değeri geçici olarak değişmektedir. Yani mevcut kabuğu sonlandırdığınız zaman varsayılan değerlere tekrar geri dönecektir.

umask  güncellenmesi

dosya ve dizin oluştururken varsayılan izinleri ayarlamak için umask komutunu kullanabiliriz. Bunun için, umask komutunu ve ardından 000-777 arasında bir tamsayı olması gereken bir parametreyi kullanarak varsayılan umask değeri ayarlanabilir. Yukarıda umask değerinin nasıl ayarlanabileceğini zaten gördük. Şimdi en çok kullanılan umask değerlerine bakalım.

Bir linux dağıtımı kurduğunuzda, normal bir kullanıcının umask değeri  varsayılan olarak 002'dir. root kullanıcısı için  varsayılan olarak 022'dir.

Sisteme login olduktan sonra ilk olarak, umask değerine bakalım.

umask 

Yukarıdaki sonuçtan bir linux dağıtımı kurduğunuzda umask değerinin 0002 olduğunu görüyoruz. Yani, aynı gruptaki diğer kullanıcılarla veri paylaştığınızda 0002'lik bir umask iyidir. Grubunuzun üyeleri veri dosyaları oluşturabilir ve değiştirebilir; grubunuz dışındakiler veri dosyasını okuyabilir, ancak değiştiremez. 

Sistemde umask değerini 4 rakam görmeniz normaldir. Bunu merak ediyorsanız, özel izinleri incelemeniz gerekmektedir.

Peki gerçekten dosya/dizin izinleri bu şekilde olup olmadığını test edelim. Şimdi bir tane umask adında dosya ve dizin oluşturuyorum.

Yukarıdaki dosya ve dizin izinlerine baktığım zaman, yukarıda bahsettiğim gibi gerçekten varsayılan olarak dosya izinleri 664 dizin izinleri ise 775 olarak oluşmaktadır. Buraya kadar tamam. Birde doğrulamasını yapalım. Sistem varsayılan izin değerleri, klasörler için 777 dosyalar için 666 olduğunu biliyoruz. Varsayılan izinlerden kendi sistemimizdeki umask değerini çıkaralım. Sistemde 0002 umaks değeri çıkmıştı. İşlemi gerçekleştirelim.

0666 - 0002 = 0664

Sonuç dosyalar için  0664 iken, 

klasörlere baktığımız zaman 0775 çıkmaktadır..

0777 - 0002 = 0775

Şimdi kafamızda bir şeyler oturdu ise, umask işlemlerini nasıl kullanabildiğimize bakalım. Farklı güvenlik seviyelerini ayarlamak için umask komutu aşağıdaki gibi kullanılabilir:
 

umask değeri Güvenlik seviyesi Etkili izin (dizin)
022 izin veren 755
026 Ilıman 751
027 Ilıman 750
077 Şiddetli 700
  • 022'lik bir umask, yalnızca sizin veri yazmanıza izin verir, ancak herkes verileri okuyabilir.
  • 077'lik bir umask, tamamen özel bir sistem için iyidir. Umask 077 olarak ayarlanmışsa, başka hiçbir kullanıcı verilerinizi okuyamaz veya yazamaz.
  • Aynı gruptaki diğer kullanıcılarla veri paylaştığınızda 002'lik bir umask iyidir. Grubunuzun üyeleri veri dosyaları oluşturabilir ve değiştirebilir; grubunuz dışındakiler veri dosyasını okuyabilir, ancak değiştiremez. Grup üyesi olmayan kullanıcıları tamamen hariç tutmak için umask'ınızı 007 olarak ayarlayın .

trick: Eğer dizin ve dosyalardaki tüm izinleri kaldırmak isterseniz, umask değerini, 777 olarak güncellemeniz yeterlidir.

 0777 - 0000 = 0777

umask kalıcı olarak güncellenmesi

umask değerini güncellediğiniz zaman, kabuk sonlanana kadar geçerli olur. Ancak kabuk sonlandıktan sonra umask değerleri tekrar eski haline döner. Umask değerlerini kalıcı olarak ayarlamak için her zaman ki gibi sistem üzerinde değişiklik yapmamız gerekmektedir

Çoğu Linux dağıtımında, umask değeri aşağıdaki konumlarda bulunabilir ve yapılandırılabilir.

  • /etc/profile - sistem genelindeki varsayılan değişkenlerin depolandığı yer burasıdır
  • /etc/bash.bashrc - bu, varsayılan kabuk yapılandırma dosyalarının depolandığı yerdir.
  • /etc/profil eve içindeki dosyalar /etc/profile.d oturum açma kabukları tarafından okunur. Bu, alt süreçler tarafından devralınan ortam değişkenlerini ayarlamak gibi şeyler yapmak için iyidir. İşlev tanımları gibi kabuk ayarları için iyi değildir, çünkü bunlar yalnızca o kabuk örneğinde kullanılabilir.
  • Kabuk ayarları için, oturum yapılandırma dosyası yerine bir kabuk yapılandırma dosyası kullanmanız gerekir. Bash için bu bireysel kullanıcılarda ~/.bashrc, dosyası iken tüm kullanıcılarda  /etc/bash.bashrc. dosyasını düzenlemek gerekmektedir.

Tüm kullanıcılar için yukarıdaki dosyaları kullanarak umask ayarlayabilirsiniz . Çoğu Linux dağıtımı varsayılan olarak 0022 (022) veya 0002 (002) olarak ayarlar. 

Şimdi umask değerini kendi kullanıcımız da 022 diğer kullanıcıların hepsinde ise 077 olarak ayarlayalım.

Bulunduğunuz kullanıcıda, sistemin belirlediği umask değerini geçersiz kılmak için HOME dizininizdeki ~/.bashrc dosyasını düzenlememiz gerekmektedir. (bash kabuğu için geçerlidir.) 

vi  ~/.bashrc 

Kayıt edip çıkıyorum.

:wq!

Tüm modern Linux dağıtımlarında uygulamak için /etc/profile.d/umask.sh dosyasını (dosya ismi örnektir) oluşturmak veya düzenlemek daha iyidir. Bu tür işlemleri sistem üzerindeki dosyalar ile oynamadan yapmak, hem daha sağlıklı hemde daha yönetilebilir olmaktadır. 

sudo vi /etc/profile.d/umask.sh 

Kayıt edip çıkıyorum.

:wq! 

Sistemi kapatmadan mevcut kabukta test etmek için source komutunu kullanalım ve dosya içeriklerini okutalım. Diğer kullanıcılarda zaten profil.d içine oluşturduğumuz dosya sisteme login olurken otomatik okunacaktır.

source ~/.bashrc

Aşağıdaki görselde işlemleri yapmadan umask değerinin 002 olduğunu görebiliyoruz. Yaptığımız işlemlerden sonra, mevcut kullanıcımızın mask değer 022 diğer kullanıcılar ise 077 olduğunu görmekteyiz. Bu durumda mevcut kullanıcımızın profil.d dosyasında tüm kullanıcılara işlem yapsak bile kullanıcının bashrc dosyası her zaman baskın olduğunu anlayabiliriz. 

root kullanıcısı diğer kullanıcılar arasına girmediği için, umask değeri değişmeyecektir.

Sonuç olarak;

  • 022'lik bir umask, yalnızca sizin veri yazmanıza izin verir, ancak herkes verileri okuyabilir.
  • 077'lik bir umask, tamamen özel bir sistem için iyidir. Umask 077 olarak ayarlanmışsa, başka hiçbir kullanıcı verilerinizi okuyamaz veya yazamaz.

Kullanıcı HOME Dizin İzinleri Kısıtlanması

Yeni bir dosya veya dizin oluşturduğumuzda, Shell buna otomatik olarak varsayılan izni atar. Varsayılan izin, umask izninin ve önceden tanımlanmış ilk iznin çıkarılmasıdır. Kök kullanıcı ve kalan kullanıcılar için varsayılan umask izinleri sırasıyla 0022 ve 0002'dir.

Bu varsayılan izinler, sistemde çok riskli güvenlik açıklarına sebep olabilir. Aşağıda home dizinindeki mehmet.oz kullanıcısının dizin izinlerine kontrol ettiğimiz zaman, içerisine girip dosya okuma, kopyalama gibi işlemler yapabileceğimizi görüyoruz.

x kullanıcısından mehmet.oz kullanıcısının dosyalarını aşağıda görebiliyoruz.

Bu ayarları yeni oluşturulan kullanıcılarda değiştirmek için, login.defs dosyasındaki umask değerini değiştirmemiz gerekmektedir.

sudo nano /etc/login.defs

Dosyayı açtıktan sonra, umask değerini 077 olarak ayarlıyoruz.

077'lik bir umask, tamamen özel bir sistem için iyidir. Umask 077 olarak ayarlanmışsa, başka hiçbir kullanıcı verilerinizi okuyamaz veya yazamaz.

UMASK değerini 077 olarak kayıt ediyorum.

CTRL + X ile dosyayı kayıt edip çıkınız.

Şimdi yeni bir kullanıcı oluşturup, kullanıcının dizinine ulaşmaya çalışalım.

Yeni oluşturduğumuz kullanıcıların artık dizinlerine ulaşamıyoruz. Ancak bu eski kullanıcılarda geçerli olmayacaktır. Şimdi eski kullanıcının izinlerini de değiştirelim.

cd /home
sudo chmod 700 * 

İzinleri ayarladığımız zaman, artık eski kullanıcıların dizinlerine de ulaşmadığımızı görebiliyoruz.

Blog'a Dön