Dizin ve dosyalara erişim haklarının belirlenmesi için izinler kullanılmaktadır. Linux sistemlerde bu izinler 3 farklı grup olarak verilmektedir. Bunlardan ilki, dosyanın sahibinin izinleri, ikincisi, dosyanın grubunun izinleri, üçüncüsü, diğer kullanıcıların izinleri.
Dosyaların ve dizinlerin sahip oldukları izinleri görmek için, ll gibi bir komut kullanabiliriz.
Herhangi bir dizindeyken, ilk sütunda çıkan değerleri inceleyelim.
-rw-rw-r– |
1 |
khantunckale |
khantunckale |
792438 |
Oct 19 20:52 |
warning.jpg |
drwxrwxr-x |
2 |
khantunckale |
khantunckale |
4096 |
Oct 18 15:14 |
pictures/ |
-rw——- |
1 |
khantunckale |
khantunckale |
641 |
Oct 18 01:59 |
algoritma1.java~ |
-rw-r–r– |
1 |
root |
root |
1324 |
Oct 21 01:17 |
mysql.txt |
-rw-rw-r– |
1 |
khantunckale |
khantunckale |
0 |
Sep 30 21:42 |
mahmut.htm |
İlk sütunları inceledikten sonra, 4 farklı kısımdan oluştuğunu söyleyebiliriz.
İlk kısım, dosyanın tipini belirten kısımdır. Buna göre, dosyanın sadece bir dosya mı, yoksa dizin mi, veya link mi, ayırt edebiliriz. Normal dosyalarda, ilk kısımda, – işareti vardır. Dizinler için d harfi görünmektedir. Başka bir dosyayı işaret eden linkler (başka bir deyişle kısayol) için l harfi gösterilir.
İkinci kısımda, dosyanın sahibinin hakları, üçüncü kısımda dosyanın grubunun hakları, üçüncü kısımda ise diğer kullanıcıların hakları vardır.
Erişim hakları, Linux sistemlerde güvenliğin temelini oluşturur. Bu izinler her dosyaya ayrı ayrı verilebildiği için sistem yönetimi çok esnektir.
Dosya tipi |
Sahibin yetkileri |
Grubun yetkileri |
Diğer kullanıcılar |
d |
rwx |
rwx |
rwx |
– |
rwx |
— |
— |
Şimdi, bu izinlerin hangi anlamlara geldiğini inceleyelim.
r –> Okuma izni (read access): Dosyanın okuma izni var demek, dosyanın içeriği görülebilir demek. Dizinin okuma izni olduğunda ise, içerdiği dosyaların listesi görülebilir.
w –> Yazma izni (write access): Dosyanın yazma izni var demek, dosyanın içeriğini değiştirebilirsiniz yada dosyayı silebilirsiniz demek. Dizine yazma izni verildiğinde ise dizin altındaki dosyalar yazılabilir veya silinebilir.
x –> Çalıştırma izni (execute access): Dosyayı çalıştırma hakkı verir. Dizinler için çalıştırma hakkı, o dizine geçip geçememek anlamına gelmektedir.
Yukarıdaki gibi üçlüler birbiriyle aynı kalıptadır. Her üçlünün ilk pozisyonunda r harfi vardır, bu ilgili kullanıcının dosyayı okuma yetkisi olduğunu gösterir. Bu pozisyonda bir eksi işareti (-) varsa, kullanıcının okuma yetsiki olmadığını gösterir.
Dosya izinlerine bir kaç örnek verelim;
rwxrwxrwx |
: |
Dosyayı herkes okuyabilir, herkes bu dosyaya kayıt yapabilir, dosyanın adını değiştirebilir, dosyayı silebilir. Eğer bu bir program dosyası ise, herkes çalıştırabilir. |
rwxr-xr-x |
: |
Herkes okuyabilir ve program dosyası ise herkes çalıştırabilir. Ama sadece dosyanın sahibi bu dosyada değişiklik yapabilir. |
rwx—— |
: |
Bu dosyada sadece sahibi tüm işlemleri yapabilir, dosya diğer kullanıcılara kapalıdır. |
rw-r–r– |
: |
Dosya program dosyası değil, çünkü kimsenin çalıştırma yetkisi yok. Sahibi okuyup yazabilir ancak diğer kullanıcılar sadece okuyabilir. |
rwx–x–x |
: |
Sahibi tüm işlemleri yapar, diğer kullanıcılar sadece çalıştırabilirler. |
Dosya izinleri nasıl değiştirilebilir?
Dosya ve dizin izinleri sadece sahipleri ve root kullanıcı tarafından tarafından değiştirilebilirler. Bunun için chmod komutu kullanılır . chmod komutu iki şekilde çalıştırılabilir, biri yeni iznin sayısal değerle verilmesi ile diğeri yapılacak değişikliğin sembolik olarak verilmesi ile.
Örnek olarak, rw-r–r– izinini inceleyelim.
Verilen haklar için 1, verilmeyen haklar için 0 yazılarak, iznin 2 tabanındaki görüntüsünü elde edelim –> 110100100
Ardından bunu 10’luk tabana çevirelim –> 740
Dosyanın izinlerini, bunun gibi, yani kullanıcısına tüm hakları vermek ve diğer kullanıcıların hepsine sadece okuma iznini verme işlemini, şu şekilde gerçekleriz.
chmod 740 dosya_ismi
İzinleri ayarlarken chmod komutuna sembolik parametreler vermek de aşağıdaki şekilde yapılır.
Kullanıcı gruplarının sembolleri : Dosya sahibi (user) : u , dosyanın grubu (group) : g, diğer kullanıcılar (others) : o
İzinlerin sembollerinden yukarıda bahsetmiştik : Okuma (read) : r, yazma (write) : w, çalıştırma (execute) : x
Dosyaya izinleri vermek için +, izinleri çıkartmak için – işareti kullanılır. Örneğin herkese okuma izini vermek için chmod +r dosya_ismi komutunu kullanabiliriz. Aynı şekilde dosyanın sahibine tüm hakları vermek için chmod u+rwx dosya_ismi komutunu kullanbiliriz.
Dosyanın sahibi nasıl değiştirilebilir?
Bir dosyanın sahibini sadece sistemdeki root kullanıcı değiştirilebilir. Dosya sahibinin değiştirilmesi için chown komutu kullanılır. O da şu şekildedir;
chown zubizaretta dosya_ismi
Bu komut ile dosyanın sahibi zubizaretta olmuştur.
Kullanıcı grubunu değiştirmek için de chgrp komutu kullanılır. Örneğin chgrp www dosya_ismi ile, dosyanın kullanıcı grubunu www yapabiliriz. Ayrıca chown komutu, dosyanın kullanıcısını değiştirebildiği gibi kullanıcı grubunu da değiştirebilir. O da şu şekilde olur;
chown zubizaretta.www dosya_ismi
t ve s bitleri nedir?
Linux sistemlerde yetkilerin 3 bit uzunluğunda 3 bölümden nasıl oluştuğunu yukarıda kabaca inceledik. Ama aslında izinler için 3 bit uzunluğunda bir bölüm daha vardır.
Yani biz, chmod 644 kullandığımızda aslında chmod 0644 kullanmış oluruz. Şimdi biraz bunun hakkında konuşalım.
Normalde, (t biti dizinlere yerleştirilmeden) dosyaların silinebilmesi için, dizinin tuttuğu dosyalar, silen kişi tarafından okunabilir olmalı. Herkesin dosya koyabileceği bir dizinimiz varsa, burada herkes herkesin dosyasını silebilir anlamına gelmektedir.
t biti bu kuralı değiştirir. t biti kullandığımızda, yalnızca dosya sahibi dosyaları silebilir.
t bitini chmod 1777 şeklinde yada chmod a+tw şeklinde kullanbiliriz.
Örnek vermek gerekirse, iki kullanıcının olduğu bir sistemde t biti kullanmadığımızda, bir kullanıcı kendine ait olmayan dosyayı silebiliyorken, t biti kullandığımızda bu işlemi gerçekleştiremez. Böylece t bitinin işaretli olduğu bir dizinde herkes kendi oluşturduğu dosya ve dizinleri silebilir.
s biti genellikle çalıştırılabilir dosyalara uygulanır. Linux sistemlerde çalıştırılabilir bir dosyanın iki adet kullanıcı id’si mevcut olur. Bunlardan biri uygulamanın dosya sahibi, diğeri de uygulamayı çalıştıracak olan kullanıcıdır. s biti kullanıldığı zaman, uygulama, oturum açmış kullanıcı hakları ile değil uygulama dosyasının sahibinin hakları ile çalışır.
Örneğin rm komutunu ele alalım. Rm komutu ile root kullanıcı tüm dizinleri ve dosyaları silmekte yetkilidir. Ancak diğer kullanıcılar sadece kendi home dizinlerinde bu komutu kullanabilirler.
Root kullanıcının ana dizinde oluşturduğu bir dizini, normal kullanıcı silmeye çalıştığı zaman Permission denied hatası alacaktır.
Ancak, chmod u+s /bin/rm (veya chmod 4777 /bin/rm ) komutunu çalıştırdığımız zaman, normal kullanıcı da root kullanıcı gibi silme hakkına sahip olur.