Dosya izinlerini anlamak

14 Nisan 2010

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_party

r – 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 adosya

izinlerin 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 adosya

bakı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 adosya

gö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 hakan

Sticky 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