Linux’da, dosya ve klasörlere erişim kontrolü ve kimlik doğrulama, kullanıcılar arasında güvenliğin sağlanması ve verinin gizliliğini korumak adına oldukça önemlidir. Linux dosya izin sistemini üç ana başlıkta incelenebilir: dosya sahibi, grup ve diğerleri.
Bizim bu yazımızda ki ana amacımız Linux sistemlerindeki var olan izinleri öğrenmektir.
Linux, çoklu kullanıcı bir işletim sistemidir ve birden fazla kullanıcı, aynı anda sisteme erişebilmektedir. Linux’un bu esnekliği bazen istenmeyen durumlara veya tehlikelere yol açabilmektedir. Bu özellik üzerinden kötü niyetli kullanıcılar önemli verileri değiştirebilir veya silebilir.
Bu tip durumları önlemek için Linux işletim sistemi, yetkilendirme sistemini “Dosya sahipliği” ve “Yetkilendirme” olarak ikiye ayırmıştır. Dosya sahipliği ise kendi içerisinde üçe ayrılmıştır. Bunlar;
- Kullanıcı Grupları (User Group),
- Diğer Kullanıcılar (Other User)
- Sahip (Owner)
Varsayılan olarak, bir dosya oluşturulduğunda, dosyayı oluşturan kullanıcı doğrudan “owner” yetkilerine sahip olmaktadır.
Kullanıcı grupları ise içerisinde birden fazla kullanıcı barındabilirler. İlgili gruba ait dahil olan tüm kullanıcılar, o grubun yetkili olduğu dosyalara eşit seviyede haklara sahiptir. Eğer bir grubun, bir dosyayı sadece okuma yetkisi varsa, o gruba dahil tüm kullanıcılarda o dosyanın okuma yetkisine sahiptir. Yine aynı şekilde eğer, o grubun ilgili dosyayı değiştirme yetkisi varsa, o gruba dahil tüm kullanıcılarda ilgili dosyayı değiştirme yetkisine sahiptir.
Eğer bir konumda ki dosya ve dizinleri detaylı bir şekilde görmek isterseniz aşağıda ki komutu kullanabilirsiniz;
ls -lsa
Komutu inceleyecek olursak;
- ls: Dizin içeriğini listeler
- -l: İzinler, sahiplik, boyut ve değiştirme zamanı gibi ayrıntılı bilgileri sunar.
- -s: Dosyaların disk kullanımlarını gösterir.
- -a: Gizli dosyaları listeler
Eğer bir yönetici hakkına sahipseniz, dosyanın sahipliğini aşağıdaki komut ile değiştirebilirsiniz;
sudo chown root deneme2.txt
Bu komut ile deneme.txt dosyasının sahipliğini root kullanıcısına devredersiniz.
Yukarıda ki komut ile sadece kullanıcı bazında yetki devrini gerçekleştirdik. Ayrıca ilgili dosyanın grup sahipliğini de değiştirmek isterseniz aşağıdaki komutu girmelisiniz:
sudo chown utku:it deneme1.txt
Bu komutu inceleyecek olursak;
- sudo: komutu yönetici hakları ile çalıştırmanıza yarar.
- chown: Dosya veya dizin sahipliğini değiştirmemize yarayan komut.
- kali:it : Bu komut ile dosya sahipliğini “kali” kullanıcısına atarken, grubunu da it olarak değiştirmemizi sağlayacaktır.
- deneme.txt: Sahipliğini değiştireceğimiz dosya.
Eğer dosyanın sadece grubunu değiştirmek istersek;
chgrp grupadi klasoradi/
Yetkilendirme
Bu kısımda ise dosya ve klasörler ile ilgili yetkilendirme kısmına değineceğiz. Yazımızın başında bahsettiğimiz ls -lsa komutunu sistemimizde uyguladığımızda aşağıda ki gibi bir çıktı verecektir:
ls -lsa
total 8
4 drwxr-xr-x 3 mutkus mutkus 4096 Jun 15 11:10 a
4 drwxr----- 3 mutkus mutkus 4096 Jun 15 11:10 x
0 -rw-r--r-- 3 utku it 4096 Jun 15 11:10 deneme1.txt
0 -rw-r-xr-- 3 root mutkus 4096 Jun 15 11:10 deneme2.txt
4 -rw-r--r-- 3 mutkus mutkus 4096 Jun 15 11:10 deneme3.txt
Linux dosya izinleri çıktısını 1-3-3-3 şeklinde okuyabiliriz. İlk kısımda nesnenin türünü, sonraki ilk üç çıktıda sahiplik izinlerini, sonraki üç çıktıda grup izinlerini, en sonki üç çıktıda ise “diğer” erişimlerin izinlerini görüyoruz. Peki bu “d, r, w, x” ne demek?
- d: Bu çıktı ile ilgili nesnenin dizin olduğunu anlıyoruz. Eğer “d” çıktısı yerine “-” var ise, bunun bir klasör değil, bir dosya olduğunu anlıyoruz.
- r: Read, yani okuma izni demek. Eğer ilk üç kısımda varsa, dosya sahibinin okuma izni olduğuna, sonraki üçlü veri çıktısında varsa grubun okuma izni olduğuna, son üçlü grupta varsa diğer erişimlerde okuma izni var demektir.
- w: Write, yani yazma iznini belirtir. Aynı “r” maddesinde açıkladığımız gibi, hangi üçlü kısımda varsa, o kısmın yazma izninin olduğunu belirtir.
- x: Execute, yani çalıştırma iznini belirtir. Yine aynı şekilde, “r” ve “w” kısımlarında da olduğu gibi, ilgili dosya/klasörün kimleri çalıştırabileceğini belirtir.
Peki izinleri nasıl veriyoruz?
Linux sistemlerde dosya izinleri nasıl değiştirilir? İlk olarak numerik yolu inceleyelim;
0 | — |
1 | –x |
2 | -w- |
3 | -wx |
4 | r– |
5 | r-x |
6 | rw- |
7 | rwx |
O zaman deneme1.txt dosyasının izinlerini değiştirelim:
chmod 777 deneme2.txt
Bu izin ile deneme2.txt dosyasının izni şöyle gözükecektir;
0 -rwxrwxrwx 3 root mutkus 4096 Jun 15 11:10 deneme2.txt
Bu çıktıya baktığımızda, deneme2.txt dosyasına herkesin okuyabileceğini, yazabileceğini ve çalıştırabileceğini görüyoruz.
Numerik yolu gördük. Şimdi ise semboller ile nasıl değiştirebiliriz bakalım;
Operatörler
+ | Yetki ekle |
– | Yetkiyi sil |
= | İzni uygular ve daha önceki iznin üzerine yazar. |
İzin Tipleri
u | User |
g | Group |
o | Other |
a | All |
Şimdi deneme3.txt dosyasının izinlerini değiştirelim;
chmod ug+x deneme3.txt
Bu komut ile “User” ile “Group” kullanıcı ve gruba çalıştırma (execute) iznini vermiş olduk ve nesnenin izin çıktısı aşağıdaki gibi oldu;
4 -rwxr-xr-- 3 mutkus mutkus 4096 Jun 15 11:10 deneme3.txt
Böylece dosya sahibi, dosyada tam yetkilere sahip iken. Grup yetkisi olarak ise sadece okuma ve çalıştırma izni, diğer kısmında ise sadece okuma iznini vermiş olduk.