Dosya ve Dizinlerin Erişim Yetkileri Düzenleme

Merhabalar

Bu yazıda Linux türevi işletim sistemlerinde, dosya ve dizinlerin erişim yetkileriyle ilgili chmod ( change mode ) komutunun kullanımına ve detaylarına değineceğim. Öncelikle root kullanıcısı sistemdeki en yetkili kullanıcıdır ve onunla ilgili herhangi bir kısıtlama yoktur. Fakat diğer sistem kullanıcıları sistemde her istediklerini yapma yetkisine sahip değildirler. Sonuçta her bir kullanıcı dosya veya dizin ile çalıştığı için sistem güvenliğinin sağlanması bu dosya ve dizinlerin koruma altında olmasıyla sağlanır. Mesela, kötü niyetli kullanıcılar için veya acemi kullanıcılar için önemli olan dosyaların erişim yetkilerini değiştirerek güven altına alabiliriz.

Basit bir örnek ile başlamak gerekirse, ilk önce bulunduğumuz dizin altındaki dosyaların erişim yetkilerine bakalım.

root# ls -alh

drwxr--r-- 2 root root 4.0K Apr 15 13:22 loglar
-rw-r--r-- 1 ali  ali  52K  Apr 30 12:03 test
-rw-r--r-- 1 ali  ali  83M  Dec 22 2013  deneme

Yukarıdaki çıktıda gördüğünüz dosya ve dizinlerin, dosya ve dizin olduklarını nasıl anlayabiliriz. Bunu anlamak için listelenen dizin ve dosyaların başlarında bulunan ifadelere bakabiliriz.

Başında  işareti bunun standart bir dosya olduğunu ifade eder.
Başında d işareti bunun bir dizin olduğunu ifade eder.
Başında c işareti bunun özel karakter tabanlı bir dosya olduğunu ifade eder. /dev/console gibi.
Başında b işareti bunun blok tabanlı aygıt dosyası olduğunu ifade eder.  /dev/sda2  gibi.
Başında l  işareti bunun bir sembolik bağlantı dosyası olduğunu ifade eder. log.pcap ->  /var/log gibi.
Başında p işareti bunun bir özel isimlendirilmiş pipe dosyası olduğunu ifade eder.

Yazının ilk başlarında listelediğimiz dosya ve dizinlerin erişim yetkilerini inceleyelim ve hangi kullanıcıları temsil ettiğine bakalım. Dosya ve dizinlerin başlarında bulunan erişim yetkilerini,    rwx-rwx-rwx gibi üçerli gruplar halinde düşünmeliyiz.

( Örnek,rwxrwxrwx )

rwx : Birinci grup dosya sahibinin yetkilerini belirtir.

rwx : İkinci grup dosya sahibiyle aynı grupta bulunan kullanıcıların yetkilerini belirtir.

rwx : Üçüncü grup diğer ( genel ) kullanıcıların yetkilerini belirtir.

 

Okuma, Yazma ve Çalıştırma Yetkileri

Dosya ve dizinler üzerindeki yetki kontrolleri temel olarak aşağıdaki bitler üzerinden kontrol edilir.

r : Okuma yetkisi  ( read )

w : Yazma yetkisi  ( write )

x : Çalıştırma yetkisi  ( execute )

Örnek bir dosya üzerindeki erişim yetkilerini ve diğer bilgilerin ne anlama geldiğini tek tek inceleyelim.

-rw-r--r-- 1 ali  ali  52K  Apr 30 12:03 test

rw- : Dosya sahibinin okuma ve yazma yetkisi var.
r– : Dosya sahibiyle aynı grupta bulunan kullanıcıların sadece okuma yetkisi var.
r– : Diğer ( genel ) kullanıcıların sadece okuma yetkisi var.
1  : Dosyaya bağlantı sayısını gösterir. Bu neredeyse hemen hemen 1 ‘dir. Komut : stat dosya_ismi
ali : Dosyanın sahibinin kim olduğunu belirtir.
ali : Dosyanın sahip olduğu grup ismini belirtir.
52K : Dosyanın boyutunu belirtir.
Apr 30 12:03 : Dosyanın oluşturulma tarihi ve saatini belirtir.
test : Dosyanın ismini belirtir.

Sık sık karşılaşacağınız dosyaların erişim yetkileriyle ilgili birkaç örnek yapalım ve ne anlama geldiklerini inceleyelim.

-rwx-rwx-rwx : Bu dosyayı tüm herkes okuyabilir, yazabilir ve çalıştırabilir. Tehlikeli !

rwx—— : Bu dosyayı sadece dosya sahibi okuyabilir, yazabilir ve çalıştırabilir. Diğer tüm kullanıcılara dosya tamamen kapalıdır.

-rwx-rwx— : Bu dosyayı dosya sahibi ve dosya sahibiyle aynı grupta bulunan kullanıcılar okuyabilir, yazabilir ve çalıştırabilir. Diğer kullanıcılara dosya tamamen kapalıdır.

-rw—x–x : Bu dosyayı dosya sahibi okuyabilir ve yazabilir. Dosya sahibiyle aynı grupta bulunan kullanıcılar sadece çalıştırabilir. Diğer kullanıcılar sadece çalıştırabilir.

-r–r—– : Bu dosyayı, dosya sahibi ile dosya sahibiyle aynı grupta bulunan kullanıcılar okuyabilir. Diğer kullanıcılar için dosya tamamen kapalıdır.

——-rwx : Bu dosya, dosyanın sahibi ve dosya sahibiyle aynı grupta bulunan kullanıcılar için tamamen kapalıdır. Diğer kullanıcıların okuma, yazma ve çalıştırma izinleri vardır.

———- : Bu dosya tamamen tüm kullanıcılara kapalıdır. Root kullanıcısı hariç .

Sistem yöneticisi ( root ) dosya ve dizinlerin erişim yetkilerini istediği gibi değiştirebilmektedir. Aşağıdaki chmod komutu ile kullanabileceğimiz erişim yetkilerine bakalım.

u : dosya ya da dizinin sahibi
g : dosya ya da dizin sahibiyle aynı gruptaki kullanıcılar
o : diğer kullanıcılar
a : herkes
+ : yetki ekleme
– : yetki çıkarma
= : yetki eşitleme
r : okuma yetkisi
w : yazma yetkisi
x : çalıştırma yetkisi
s : suid biti
t : sticky bit

 

Dosya Yetkilerini Değiştirmek

Aşağıda örnek olarak test adlı bir dosyamız var ve erişim yetkileri aşağıdaki gibidir. Biz bu dosyanın erişim yetkilerini istediğimiz gibi değiştirebiliriz tabi root kullanıcısıysak.

root# ls -lh test

-rw-r--r-- 1 ali ali 52K Apr 30 12:03 test

Yukarıdaki dosyanın erişim yetkilerini değiştirelim. Örneğin, dosyanın sahibi hariç diğer tüm kullanıcılar için dosya kapalı olsun. Daha sonra ali kullanıcısına ait olan test adlı dosyaya osman kullanıcısı içerisine birşeyler yazmayı denediği zaman aşağıdaki gibi “permission” hatası ile karşılaşacaktır.

root# chmod go-rwx test

-rwx------ 1 ali ali 52K Apr 30 12:03 test

osman# echo "Birşeyler yazalım" >> test

Permission denied

osman# cat test

Permission denied

osman# rm test

Permission denied

Aşağıdaki test adlı dosyaya sahibi ile birlikte diğer tüm kullanıcıların erişim yetkisi olarak sadece okuma yetkisi olsun, diğer yazma ve çalıştırma yetkileri olmasın. Bunu yapmak için aşağıdaki komutu kullanabiliriz. Aşağıdaki komut ile şunu demiş oluyoruz, a-rwx tüm herkesin erişim yetkilerini kaldır, a+r ile tüm kullanıcılara sadece okuma yetkisi ver.

root# chmod a-rwx,a+r test

-r--r--r-- 1 ali ali 52K Apr 30 12:03 test

Yukarıdaki parametrelerin aynısı sadece daha pratik. Aşağıdaki komut ile yukarıdaki anlattığım konunun aynısını yapabiliriz.

root# chmod a=r test

-r--r--r-- 1 ali ali 52K Apr 30 12:03 test

Aşağıdaki test adlı dosyayı sahibi ile birlikte tüm herkesin erişimine kapatalım. Aşağıdaki dosyaya herhangi bir kullanıcı okuyamaz,yazamaz ve çalıştıramaz. Sistem yöneticisi ( root ) hariç.

root# chmod a-rwx test

Bir dizinin üzerindeki tüm kullanıcıların çalıştırma yetkisini kaldırmak isterseniz aşağıdaki komut kullanılabilir.

root# chmod a-x dizin_ismi

Mesela, test adlı dosyanın tüm yetkilerini kaldırıp sadece okuma ve yazma yetkilerini tanımlayalım. Bunu yapmak için aşağıdaki birinci komut kullanılabilir. Aşağıdaki ikinci komut ise bir nevi aynı görevi görmektedir. Aynı zamanda = parametresi sadece verdiğiniz erişim yetkisini tüm herkese eşit bir şekilde tanımlar, ekstra bir özelliği yoktur.

root# chmod a-rwx,a+rw test

-rw-rw-rw- 1 ali ali 52K Apr 30 12:03 test

root# chmod a=rw test

-rw-rw-rw- 1 ali ali 52K Apr 30 12:03 test

Aşağıdaki test adlı dosyayı diğer kullanıcılar için okuma,yazma ve çalıştırma yetkilerini kaldıralım.

root# chmod o-rwx test

-rwxrwx--- 1 ali ali 52K Apr 30 12:03 test

Dosyanın sahibine bütün erişim yetkilerini verelim.

root# chmod u+rwx test

Aynı şekilde = parametresi ile bir örnek daha yapalım. Aşağıdaki birinci komutu kullanarak herkese tüm erişim yetkilerini verelim, daha sonra ikinci komutu kullanarak herkese sadece okuma yetkisi verelim.

root# chmod a+rwx test

-rwxrwxrwx 1 ali ali 52K Apr 30 12:03 test

root# chmod a=r test

-r--r--r--  1 ali ali 52K Apr 30 12:03 test

Bir dizin altındaki tüm dosyaların erişim yetkilerini değiştirmek isterseniz -R parametresini kullanabilirsiniz. Aşağıdaki komutu kullanarak deneme adlı dizin içerisinde bulunan tüm dosyalara herkes için okuma yetkisi verelim.

root# chmod -R a+r deneme

root# ls -lh deneme/

-rw-r--r-- 1 root root 0 Jun 15 02:13 dosya
-rw-r--r-- 1 root root 0 Jun 15 02:14 log
-rw-r--r-- 1 root root 0 Jun 15 02:13 test

Bir dosyayı root kullanıcısı dahil tüm kullanıcıların silinmesini engellemek isterseniz aşağıdaki komutu kullanabilirsiniz.

root# touch test

root# chattr +i test

root# rm test

rm: cannot remove ‘test’: Operation not permitted

Yukarıdaki uyguladığımız komutu geri almak istersek yani root kullanıcısı dahil tüm kullanıcıların test adlı dosyayı silmesini istiyorsanız aşağıdaki komutu kullanabilisiniz.

root# chattr -i test

root# rm test

Diğer kullanıcıların erişim yetkilerine dokunmadan dosya sahibiyle aynı grupta bulunan kullanıcıların okuma,yazma ve çalıştırma yetkilerini kaldıralım.

root# chmod g-rwx test

-rwx---rwx  1 ali ali 52K Apr 30 12:03 test

Kullandığımız chmod komutunun bir diğer güzel özelliği ise bir dosyanın yetkilerini başka bir dosyaya aktarabilmesidir. Örneğin, test adlı dosyanın tüm erişim yetkilerini deneme adlı dosyaya otomatik olarak aktarsın.

root# chmod --reference=test deneme

root# ls -lh test deneme

-rwx---rwx 1 ali ali 52K Apr 30 12:03 test
-rwx---rwx 1 ali ali 49K Jun 14 09:03 deneme

Daha fazla bilgi için.

root# man chmod

 

Özel Dosya İzinleri

Standart okuma, yazma ve çalıştırma yetki bitleri haricinde SUID, SGID ve Sticky bit olmak üzere 3 farklı bit daha bulunmaktadır.

SUID ( Set USER ID ) Yetkisi : Dosyayı çalıştıran kim olursa olsun, dosya sahibinin yetkileri ile çalışmak üzere izin verir.  ( Örnek password programı. )

SGID ( Set GROUP ID ) Yetkisi : SUID ‘e benzir bir izindir. Dosyanın ( programın ) kimin çalıştırıldığına bakılmaksızın grup yetkileri ile çalıştırılmasına izin verir.

Sticky Bit Yetkisi : Bu izin, ilgili dosyayı sahibinden başka biri tarafından silinememesini sağlar. Paylaşımlı dizinlerde bulunan dosyalar için önemli bir ayardır. ( Örnek /tmp dizini. )

Tagged with: , , , , , , , ,
3 comments on “Dosya ve Dizinlerin Erişim Yetkileri Düzenleme
  1. Dizinler üzerinde ozellikle çalıştırma yetkisinin detayları çok güzeldir, bir bak derim 🙂 filesystem, node gibi kavramları anlamakta da yardımcı olur, yazıya da eklersen çiçek olur diye düşünüyorum.

    Nacizane onerimdi, yazı için teşekkürler 🙂

    • ibrahimucar says:

      Öneriniz için teşekkürler. Elimden geldiğince güncellemeye çalışacağım. 🙂

  2. yusuf says:

    Şimdiye kadar internet üzerinde bulduğum en etkili Türkçe kaynak.Çok teşekkürler çok faydalı oldu.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Archives