Linux Dosya ve Dizin Hakları
Linux File/Folder Permission, aslında herkezin bildiği ama ençok zamanımızı alan konulardan biri. Ben öncelikle kendim için sonra eğer sizlerede faydalı olacaksa sizler için bu makeleyi yazdım.
“/” içinde varolan her dosyanın bir sahibi ve grubu vardır.
kullanılan dosya/klasör için kullanıcı hakları;
owner (u) : sadece sahibini etkileyen yetkiler için
group (g) : işlem yapılan dosyanın dahil olduğu gruba ilişkin yetkiler
other veya alluser (o veya a) : yukarıda geçen kısımların dışındaki tüm kullanıcıların yetkilendirilmesini sağlar.
kullanılan dosya/klasör için temel yetkildendirme tipleri;
read (r = 4) : dosya içeriğinin okunmasını sağlar. dizin içeriğini görüntüler
write (w = 2) : bir dizin veya dosya üzerinde değişiklik veya yazma sağlar
execute (x = 1) : bir dizin içeriğin listelenmesi veya bir dosyanın çalıştırılmasını sağlar
Eğer bir dosya izni yapılandırıyosak, toplam bit’ imiz 6, eğer bir dizin yetkilendiriyorsak, toplam bit’ imiz 7 olur.
Yani dosya için,
6 = 4 + 2 + 0 (rw-) okuma yazma izinleri varken çalıştırma izni yok demek
5 = 4 + 0 + 1 (r-x) okuma ve çalıştırma var, yazma yok
4 = 4 + 0 + 0 (r–) sadece okuma izni
Örnek:
#chmod u+rw dosya
bu anlatılan yetkilendirmeleri kontrol için “ls -l” komutu kullanılabilinir. Örnek bir komut çıktısı;
_rwxrwxrwx 1 owner:group
Çıktıyı anlatalım;
_ = özel yetki biti alanı, eğer “_” var ise herhangibir değer verilmemiş demektir (s,t)
rwx = dosyanın sahibi okur, yazar, değiştirir, çalıştırır, listeler
rwx = dosyaya atanmış grub okur, yazar, değiştirir, çalıştırır, listeler
rwx = tüm kullanıcılar okur, yazar, değiştirir, çalıştırır, listeler
owner = dosya sahibi
group = dosya için atanmış grub
Yukarıdaki örnekten giderek anlatırsak yukarıda bahsi geçen izin 777 şeklinde sayısal olarak ifade edebiliriz.
Şimdi “tüm kullanıcılar” için okuma, yazma, değiştirme haklarını kaldıralım.
#chmod a-rw dosya
diğer bir şekli
#chmod 771 dosya
Şimdi “tüm kullanıcılar” için okuma hakkı ekleyelim.
#chmod a+r dosya
diğer bir şekli
#chmod 774 dosya
Gelişmiş Yetkilendirme
bu yetkilendirmeleri kontrol için “ll” kullanmamız daha doğru olur “ls -la veya ls -ld” çıktılarını tek komutta verir.
_ = özel olarak aşağıda geçen yetkilerin hiçbirine sahip olmadığını gösterir
d = dizin olduğunu gösterir
l = dosya veya dizin kısayolu
s = özel olarak belirtilmiş kullanıcı(setuid) veya grub(setgid) id leri temsil eder. Böylece setuid bir dosyanın dosyayı çalıştıran kişinin değilde dosyanın sahibinin
haklarıyla çalışmasını sağlar. setgid, setgid ye benzer fakat grup ayarları ile ilgilidir. örneğin bir klasörde bu bit tanımlı ise burada bir kullanıcının yaratacağı yeni dosya veya klasörler kullanıcının default grup izinleri yerine klasör izinlerinden miras alır.
t = sticky bit olarak adlandırılır. sticky bit’ i sadece dosya sahibi kim ise veya root kullanıcısı ile işlem yapılmasına izin verir.
sticky bit örnek;
$ ls -ld /tmp
drwxrwxrwt 4 root sys 485 Nov 10 06:01 /tmp
kaldırmak için
$ chmod 0777 /tmp
$ chmod -t /tmp
eklemek için
$ chmod 1777 /tmp
$ chmod +t /tmp
Sahiplik ve Grub işlemleri
Bir dosyanın sahbi olan kullanıcıyı veya grubunu değiştirilmesi ile ilgili bir örnek
#chown kullanıcı:grub /tmp
Grubunun değiştirilmesi için de
#chgrp grub1 /tmp
Öntanımlı hak atama, üsten hak alma işlemi Umask;
umask, kısaca ön tanımlı olarak yeni oluşturulacak dosya ve dizinlere olan erişim haklarını almak için kullanılır, ön tanımlı hali 022 dir.
Daha yakından bakalım
Umask değerleri hesaplanırken Dizin için 777 dosya için 666 dan octal çıkarma işlemi yapılır.
Örnek; Dizin için default değer 022 dir ve bunun anlamı 777-022 = 755 dir. Buda belirlenen dizinin altında oluşacak tüm dizinlerin sahibi tarafından Full, Grubunun ve Diğer Tüm Kullanıcıların da Okuma ve Çalıştırma hakkına sahip olacağını gösterir. Dosyalar için ise 666-022 = 644 dür.
0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions
Örnek;
Bit Tipi Dosya Hakkı
————————————
0 Owner read, write and execute
7 Group No permissions
7 Others No permissions
————————————-
$ umask 077
$ mkdir dizin1
$ touch dosya1
$ ls -ld dizin1 dosya1
drwx—— 2 kgc kgc 4096 2013-10-01 02:05 dizin1
-rw——- 1 kgc kgc 0 2013-10-01 02:05 dosya1

