kaynak : http://wiki.pardus-linux.org/index.php/Dosya_izinlerini_anlamak
Dosya izinlerini anlamak
Linux de her bir dosyanın bir sahibi bir de grubu bulunur.
Kod:hakan@haarp ~ $ ls -l
toplam 6744
drwxr-xr-x 10 hakan users 4096 May 9 23:43 3rd_partyr – Read (okuma izni)
w – write (yazma izni)
x – Execute (çalıştırma izni)
hakan —> dosya sahibi
users —> dosyanin grubu
bunlari üçlu gruplar halinde üç gruptan olustuğunu varsayarak ayırıyoruz
rwx / r-x / r-x
bu dizilime göre ;
ilk üçlü –> dosya sahibi izinlerini
ikinci —-> dosyanın grubunda bulunanların izinlerini
üçüncü –> diğerlerinin izinlerini gösterir
Simdi benim 3rd_party klasörümün yapısına bakalım
d –> dizin olduğunu gösteriyor
ilk üçlü —> rwx (okuma, yazma, çalıştırma) hepsi ne sahip, yani kim hakan isimli kullanıcı
ikinci üçlü –> r-x (okuma yapar, yazma yapamaz, çalıştırma yapar) kim bunlar, users grubundakiler
üçüncü üçlü –> r-x (okuma yapar, yazma yapamaz, çalıştırma yapar) diğerlerinin izinlerini ifade eder
tüm bunların ikilik düzende kodlandıklarını düşünürsek
421 sistemi –> rwx i oluşturur
r = 4
w = 2
x = 1
toplamdaki sayı izinlerin göstergesidir
herhangi bir üçlü için 7 demek = 4 [r] + 2 [w] + 1 [x] yani tüm izinlere sahip, peki 6 ne demek bu durumda ?
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
gibi mantık bu şekilde ilerler
herhangi bir dosya veya klasör un iznini değiştirmek için kullanılan komut chmod tur
bir örnek verelim,
Kod:
hakan@haarp ~ $ ls -l
toplam 6744
-rw-r–r– 1 hakan users 0 May 10 01:51 adosyaizinlerin su haldeki durumu
ilk üçlü = 4+ 2 + 0 = 6
ikinci üçlü = 4 + 0 + 0 = 4
üçüncü üçlü = 4 + 0 + 0 = 4
yani yanyana yazarsak 644 olur
Ben bu “users” grubundakilere çalıştırma ve yazma izni vereceğim ne yapmam gerekir ?
Ortadaki üçlüyü değiştirmeliyim, değil mi ? çünkü “users” grubunu bu ikinci üçlü ifade ediyordu
chmod —> kullanılacak komut
Kod:
hakan@haarp ~ $ chmod 674 adosya
hakan@haarp ~ $ ls -l
toplam 6744
-rw-rwxr– 1 hakan users 0 May 10 01:51 adosyabakınız ikinci üçlü (r–) iken (rwx) haline geldi
şimdi yakından bakalım ne olmuş ?
ilk grup aynı kaldı 6 idi zaten = 4 + 2 + 0 [6]
ikinci grup 4 idi = 4 + 0 + 0, komutta ikinci sayımız 7 oldu yani 4 + 2 + 1 dedik [7]
üçüncü grubu değiştirmedik 4 idi, 4 olarak bıraktık [4]
şimdi hepsinden tüm izinleri alalım sadece dosya sahibine tüm izinleri verelim
Kod:
hakan@haarp ~ $ chmod 700 adosya
hakan@haarp ~ $ ls -l
toplam 6744
-rwx—— 1 hakan users 0 May 10 01:51 adosyagördüğünüz üzere sadece “hakan” yani dosya sahibi tüm izinlere sahip (7=4 + 2 + 1)
Peki okuma yazma çalıştırma izinlerini değiştirdik, dosyanın sahibini ve grubunu değiştirelim
Hali hazırda dosya sahibi “hakan”, grubu ise “users” kullanacağımız komut —-> chown
Kod:
hakan@haarp ~ $ chown root:muzik adosya
-rwx—— 1 root muzik 0 May 10 01:51 adosyaŞimdi dosya sahibi “root”, grubu ise “muzik” oldu nasıl sizce de kolay değil mi ?
umask
umask, kısaca ön tanımlı olarak yeni yaratılacak 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
r-4
w-2
x-1
demiştik daha önce, peki umask 022 ne anlama geliyor
0 –> kimseden bir hak almıyoruz
2 –> yazma haklarını alıyoruz
4 –> okuma haklarını alıyoruz
Kolay bir method, umask değerinin 000 olduğu durumda
dizin hakları 777
dosya hakları 666 dır
umask değeri 022 ise gerekli izinler nedir ?
dizin hakları için 777 - 022 = 750
dosya hakları için 666 - 022 = 644
Bu durumda dosyamızı üçlü gruplara bölelim
- 0 (dosya sahibi)
- Bir hak almadığımız için dosya sahibinin;
- dosya için hakları —> rw-
- dizin için hakları —> rwx olacaktır
- 2 (dosya grubu)
- Bu gruba ait kişilerden yazma haklarını ellerinden alıyoruz
- dosya için –> r–
- dizin için –> r-x
- 2 (diğerleri)
- Diğerleri için yazma haklarını ellerinden alıyoruz
- dosya için –> r–
- dizin için –> r-x
Komut olarak kullanımı
Kod:
hakan@haarp ~ $ mkdir umask_klasoru
hakan@haarp ~ $ ls -l | grep umask_klasoru
drwxr-xr-x 2 hakan users 4096 May 11 11:23 umask_klasoru/home/hakan/ içine umask_klasörü adlı bir dizin yarattık, ön tanımlı umask değerimi 022 idi, buna göre gruptan ve diğerlerinden yazma izinlerini aldık, dosya sahibinin izinlerine dokunmadık
oluşturulacak yeni
dizinler için (rwx / r-x / r-x) = 755
dosyalar için (rw- / r– / r–) = 644
Peki bu klasöre “hakan” isimli bir dosya yaratalım, ama ön tanımlı dışına çıkalım bunun için “umask_klasoru” nun içine oluşturulacak yeni dosya ve dizinlerin haklarını “umask” komutu ile değiştirelim
Konuya göre yeni yaratılacak
dizinler için –> rwx / r-x / — = 750
dosyalar için —> rw- / r– / — = 640
istediğimiz izin hakları böyle olsun
777 - 750 = 027
umask değerimiz 027
Kod:
hakan@haarp ~ $ umask 027 -R umask_klasoru/
hakan@haarp ~ $ touch umask_klasoru/hakan
hakan@haarp ~ $ ls -l umask_klasoru/
toplam 0
-rw-r—– 1 hakan users 0 May 11 11:35 hakanSticky Bit (yapiskan bit)
Kod:
hakan@haarp ~ $ ls -l / | grep tmp
drwxrwxrwt 20 root root 8192 May 12 02:59 tmpİzinlerin sonundaki ( t ) sticky bit olarak adlandırılır.Anlamı belirtilen dizin içindeki dosyalar ancak dosya sahibi, dizin sahibi veya root tarafından silinebilir.
Örneğimizde /tmp klasörü için herhangi bir kullanıcının /tmp klasörüne yazma izninin olması, içerideki bir dosyayı silebilmesi için yeterli olmamaktadır, bunu yapabilmesi için ayni zamanda dosya sahibinin de kendisi olması gerekir
Kullanımı
chmod +t /tmp —> sticky bit koymak için
chmod -t /tmp —-> sticky bit kaldırmak için