Erişim Yetkileri
Linux sistemlerinin yapısı gereği güvenlik açısından, dosya ve dizinlere ait birçok kısıtlama ve yetkilendirme ayarları vardır. Bu yetkilerin hepsine sahip olan tek kullanıcı ise root kullanıcısıdır. Bu yüzden sistemi kullanırken eğer root kullanıcısı isek önümüzde uyarıcı bizi kısıtlayıcı bir mekanizma olmayacağından, kimi durumlarda yapacağımız değişiklikler sistemle ilgili büyük sorunlara yol açabilir. Bu yüzden root kullanıcısıyken yapılan işlemlere dikkat etmek gerekir.(Hatta kimi dağıtımlarda root kullanıcı hesabı varsayılan olarak engellenmiştir, ancak istenildiği takdirde ve gereken ayarlar yapıldığında kullanılabilir duruma getirilir.)
Bu girizgahtan sonra, her kullanıcının kendine verilen yetkiler çerçevesince hareket edebildiğini öğrenmiş olduk. Kullanıcıların dosya veya dizinler ile ilgili yapabileceği üç eylem bulunmaktadır. Bunlar;
okuma(r): Klasör listesini ve dosya içeriğini görüntüleme.
yazma(w): Dosya veya klasör üzerinde değişiklik yapma.
çalıştırma(x): Hedef dosyayı çalıştırma veya klasör içerisine erişme.
Aslında bu eylemler sizlere yabancı gelmemeli. Zira daha önce chmod
komutu yardımı ile gerekli dosyanın iznini değiştirmiş ve dosyamızı çalıştırmayı başarmıştık.
Şimdi mevcut dosyalarımızın ne tür izinleri barındırdığına göz atalım. Bunun için komut satırına ayrıntılı liste yazdırmak üzere ls -l
komutumuzu veriyoruz.
Şimdi listemizi inceleyerek bulunan izinleri ele alalım.
drwxr-xr-x ve -rw-r--r-- şeklinde gördüğümüz kısımlar dosya izinlerini ifade ediyor.
Bazı ifadelerin başında olan d harfi o ifadenin dizin olduğunu belirtiyor.
Geriye kalan kısımları ayrı ayrı açıklayacak olursak - işareti ile ayrılan kısımlar o izine sahip kullanıcı grubunu temsil ediyor. Daha iyi anlamak için d harfi hariç - işaretini ayırdığımız zaman geri kalan harfleri üç adet üçlü grup haline getirelim;
rwxr-xr-x=rwx r-x r-x
rw-r--r--=rw- r-- r--
Sırayla; birinci harf kümesi dosya sahibinin izinlerini, ikinci harf kümesi grup izinleri ve son küme de diğer kullanıcıların izinlerini belirtir.
Buna göre yukarıdaki dosyalarda bulunan izinleri açıklayacak olursak;
r : okuma yetkisi
w : yazma yetkisi
x : çalıştırma yetkisi
rwx : dosyanın sahibi olan kullanıcı okuyabilir, yazabilir, çalıştırabilir.
r-x : dosya sahibi kullanıcı grubu ile aynı gruba dahil kullanıcılar okuyabilir, çalıştırabilir fakat yazamaz(değişiklik yapamaz).
r-x : diğer kullanıcılar okuyabilir, çalıştırabilir fakat yazamaz(değişiklik yapamaz).
Yetkilerin Değişimi(chmod)
Erişim yetkisini değiştirme işlemini, ancak en yetkili kişi olan root yapabilir. Bu değişim işlemi; daha öncede de kullandığımız chmod
komutu sayesinde gerçekleştirilir.
chmod
komutunun parametrelerini tanıyarak örnek verme işlemine geçelim.
u : Dosya-dizinin sahibi
g : Dosya-dizinin sahibi ile aynı grupta bulunan kullanıcılar
o : Diğer kullanıcılar
a : Herkese açık.
= : Yetki eşitleme
+ : Yetki ekleme
- : Yetki çıkarma
Genel parametreleri gördüğümüze göre gelin birkaç örnek yapalım.
Örnek göstermek adına anlatımı, içerisindeki dosyaların hiç birinde yetkinin bulunmadığı bir klasör üzerinden gerçekleştireceğim.
İlk olarak klasörde yer alan dosyaların herhangi bir yetkiye sahip olmadıklarını teyit etmek için ayrıntılı çıktı almak üzere ls -l
komutunu kullandık.
Daha sonra klasörde yer alan tüm dosyalara *
joker karakteri ile ulaştık ve chmod +w *
komutumuzu kullanarak herkese açık olacak şekilde yazma(w) yetkisi verdik.
Aynı grupta bulunan kullanıcılar için, yine konumumuzda bulunan tüm dosyaları *
sayesinde kapsayacak şekilde g+rx *
komutumuzu verdik.
Gruptaki kullanıcılara(g), okuma-yazma-çalıştırma yetkisi (rwx), kullanıcıya(u) yazma yetkisi(r), diğer kullanıcılara ise yalnızca çalıştırma yetkisi(x) verdik.
Ve en son yine bulunduğumuz konumdaki tüm dosyaların yetkilerini kaldırdık.
Bu kullanımların dışında yetkilendirme işlemleri daha önceden de rastladığımız ve fark etmeden de olsa kullanmış olduğumuz sayısal şekilde de ifade edilebiliyor.
Bu durumu yetkilerin sayısal karşılığını vererek anlatmaya devam edelim.
Yetki kalıplarının sayısal karşılıkları.# | dosyanın sahibi | sahibiyle aynı gruptakiler | diğer kullanıcılar |
---|---|---|---|
r | 4 | 4 | 4 |
w | 2 | 2 | 2 |
x | 1 | 1 | 1 |
Yetkilerin sayısal değerlerini kullanarak bir örnek yapalım.
Örneğin biz sadece dosyanın sahibine bütün yetkileri vermek istiyoruz diyelim. Bunun için ilk başta yetki kalıplarının numara karşılıklarını toplamalıyız. Yani bütün yetkileri vereceğimiz için r=4 + w=2 + x=1=toplam sayı 7 etti. Bizler de sadece dosya sahibine bu yetkiyi vermek istediğimizden normalde vereceğimiz chmod rwx- -----
komutumuzu diğer kullanıcılara yetki vermek istemediğimiz için o alanları 0 bırakarak komutu chmod 700 dosya
şeklinde veriyoruz. Böylelikle sadece dosyanın sahibi tüm yetkilere sahip olmuş oluyor.
Daha net anlaşılması adına bir örnek daha yapalım. Şimdi de; dosyanın sahibine tüm yetkileri, ortak gruptakilere yalnızca yazma yetkisini, diğer kullanıcılara da sadece okuma yetkisini verelim.
Dosya sahibi kullanıcıya verilecek tüm yetkiler için r(4)+w(2)+x(1)=7
sayısını kullanacağız.
Dosya sahibi ile ortak gruptaki kullanıcılar için vereceğimiz yazma yetkisi için yazma(w) karakterinin sayısal karşılığı olan 2
sayısını kullanacağız.
Diğer kullanıcılar için vereceğimiz yalnız okuma yetkisi için ise okuma(r) karakterinin sayısal karşılığı olan 4
sayısını kullanacağız.
Çıktıdan da anlaşılacağı üzere sayısal karşılıklar istediğimiz yetkilendirme işlemini gerçekleştirdi.
Son bir ayrıntı daha verelim. Eğer verdiğimiz izinlerin o dizinle beraber alt klasörlerinde de etkili olmasını istersek komutumuzu -R
parametresi ile birlikte kullanmalıyız.
Örneğin bulunduğum konumdaki "metin" isimli klasörün erişim yetkilerini listeledim. Sonuç olarak hiçbir yetkinin bulunmadığını belirten --------- şeklinde bir çıktı geldi.
Daha sonra "metin" isimli klasörün içerisine girerek oradaki dosya ve dizinlerin erişim izinlerini sorguladım. Sonuç olarak rwxrwxrwx şeklinde bütün yetkilere sahip dosya ve dizinlerin olduğunu gördüm.
Daha sonra bir üst dizine dönerek ekleyeceğim erişim izinlerinin tüm alt dosyalarda dahil olmak üzere, geçerli olması için komutuma ek olarak -R
parametresini kulladım ve komutumu chmod -R 422 metin
şeklinde yazdım.
Sonuç olarak bütün dosya ve dizinlerde ve alt klasörlerde dahil olmak üzere tüm dosyaların vermiş olduğum yetki erişim izinleri 422 ifadesine karşılık gelen; dosya sahibi için okuma(r) , dosya sahibi ile aynı gruptaki kullanıcılar için yazma(w) ve diğer kullanıcılar için de yazma(w) yetkisi şeklinde yetkilendirildiğini görmüş oldum.
Eğer örneklere ve açıklamalara rağmen yine de anlamadıysanız ister konuyu tekrar okuyup kendiniz de alıştırmalar yapın isterseniz de bu konuyu şimdilik geçin ihtiyacınız olduğunda burada olduğunu bilerek tekrar göz atın. Seçim sizlere kalmış.
chattr
Hepimizin başına mutlaka gelen ve çok can sıkıcı bir durum var. Bu durum yanlışlıkla silinen dosyalar. Her nasıl ve neden olursa olsun eğer önemli gördüğümüz dosyalar varsa bir şekilde silinmeden onları koruma altına almamız mümkün. Bizlere bu koruma imkanını veren komut chattr
komutudur. Aslında chattr
komutu bir tek silinmeye karşı korumuyor, genel olarak dosyanın değiştirilmesine(silme, değiştirme vs.) engel olmak amacıyla kullanılıyor. Yani bu komutumuz bir nevi ilgili dosyayı dokunulamaz kılıyor. Öyle ki herhangi bir yanlış durumda dosyanın kaybolmasına engel olmak adına root kullanıcısının bile değişiklik yapmasına imkan tanımıyor. Komutun kullanım alanına bir örnek daha vererek daha iyi anlamış olalım. Örneğin sistemde bir konfigürasyon dosyasını düzenlediniz ve sistemi yeniden başlattınız, fakat bir bakıyorsunuz ki düzenlediğiniz (değiştirdiğiniz) ayarlar kaybolmuş ve dosya eski haline dönmüş. İşte bu gibi durumlarda sistemin bile ilgili dosyaya müdahale etmesini engellemek için oldukça kullanışlı olan chattr
komutunu kullanabiliyoruz.
Komutun kullanımı chattr +i dosya_adı
şeklindedir. Hemen bir örnek yapalım.
Bu tür dosyaları listelemek için
lsattr
komutu kullanılıyor. Bizde dosyaların durumunu daha sonradan karşılaştırabilmek adına ilk olarak konsola lsattr
komutunu verdik.
test.txt isimli dosyamızı chattr +i test.txt
komutu ile koruma altına aldık.
Daha sonra bunu teyit etmek için lsattr
komutunu kullandık.
Komutumuzun çıktısında görüldüğü gibi dosyamızın sol tarafında izinler kısmında -i
şeklinde bir ifade var. İşte bu ifade dosyamızın artık düzenlenemeyecek olduğunun işaretidir. Dosyayı silmeye çalışarak bu durumu teyit ettik.
Eğer bu işlemi geri almak ve dosyamızı üzerinde değişiklikler yapılabilir hale getirmek istersek chattr -i test.txt
komutumuzu kullanmamız yeterli olacaktır. Örneği aşağıda inceleyebilirsiniz.
Çıktıda da görüldüğü gibi hedef dosyamızın solundaki -i
işareti yok olmuş. Dolayısıyla test.txt isimli dosyamızın artık eski halinde dönerek, düzenlenebilir forma girmiş olduğunu gördük. Ve dosyamızı silerek bu durumu teyit ettik.
Alıştırmalar Hakkında
Öğrendiğiniz bilgilerin kalıcı olması için mutlaka bolca alıştırma yapmalısınız.Burada belirtilen alıştırmalar dışında da kendi kendinize özellikle de zorlandığınız konularda bol bol alıştırmalar yapın. Aksi halde öğrendiğiniz bilgiler kısa sürede unutulup gidecektir. Yani gerçekten öğrenmek istiyorsanız lütfen öğrendiğinizi hissede kadar alıştırmalar yapın.
"resimler" isimli bir klasör oluşturun ve bu klasörün yetkilerini; dosya sahibi için okuma, yazma ve çalıştırma, dosya sahibi ile aynı gruptaki kullanıcılar için yalnızca çalıştırma ve diğer kullanıcılar için de yalnızca okuma yetkisini verin.
resimler
klasörüne tüm kullanıcılar için yalnızca okuma izni verin.
resimler
klasörünün yetkilerini tek seferde tüm kullanıcılara için yalnızca çalıştırma yetkisi olarak değiştirin.(Ekleme çıkarma yaparak değil tek seferde istenilen yetkiyi verecek şekilde yapın.)
resimler
klasörünün sahibinin çalıştırma yetkisini kaldırın.
rakamları kullanarak resimler
klasörü için sadece diğer kullanıcılara okuma ve yazma yetkisi verin.
rakamları kullanarak resimler
klasörü için sahibine ve sahibi ile aynı gruptaki kullanıcılara yazma ve çalıştırma yetkisi verin.
rakamları kullanarak resimler
klasörü için tüm kullanıcıların yetkilerini kaldırın.
Farklı izinlere sahip 2 klasörün yetkilerini birbiri ile aynı hale getirin.
Klasörün içerisinde yer alan tüm dosya ve klasörler de dahil olacak şekilde tek seferde tüm içeriklerin yetkilerini değiştirin.(Yani yaptığınız değişiklik klasörün alt dizinlerinde yer alan tüm dosya ve klasörleri etkileyecek şekilde olsun. )
Herhangi bir dosyayı silinmeye karşı korumak için ilgili komutu kullanarak koruma altına alın. Ve test etmek için dosyanın izinlerini değiştirip dosyayı silmeye çalışın.
Koruma altına aldığınız dosyanın korunup korunmadığını ilgili komutu kullanarak teyit edin.
Silinmeye karşı koruma altına aldığınız dosyanın korumasını ilgili komutu kullanarak kaldırın. Ve test etmek için dosyanın izinlerini değiştirip dosyayı silmeye çalışın.
Geri Bildirimde Bulunun
Sizlere daha verimli bir kaynak sunabilmemiz için, uygulamada veya dokümantasyonlarda yer alan tüm hata ve eksiklerimizi bize bildirebilirsiniz.