Linux Unix

Linux Sistemlerde Dosya ve Dizinlerde Sahiplik ve İzin İşlemleri

Makale serimizin 7 bölümünde Linux sistemlerde dosya ve dizin sahiplikleri ve izin işlemleri konusuna değineceğim.

 

Dosyalara ve dizinlere erişilirken Unix&Linux sistemlerde standart olarak kullanıcı ve grup sahiplikleri, izinleri kullanılmaktadır.

 

 

2 adet sahiplik vardır.

 

  1. Dosya veya dizinin kullanıcısının kime ait olduğu(owner of the file/directory)

 

  1. Dosya veya dizinin grubunun ne olduğu(group of the file/directory)

 

 

3 adet izin alanı bulunmaktadır.

 

 

  1. Dosya veya dizinin sahibinin izinleri (user)

 

  1. Dosya veya dizinin grubunun izinleri(group)

 

  1. Dosya veya dizinin diğer şahıslara göre olan izinleri.(others)

 

 

Temel komutlar makalemizde “ls” komutunun çıktısını şöyle göstermiştik.

 

 

 

image001

 

 

 

Bilgipark kullanıcısı ile ev dizinine gidip izin_test isimli bir dosya oluşturduk.

 

 

[[email protected] ~]$ touch izin_test

[[email protected] ~]$

[[email protected] ~]$ ls -l

total 0

-rw-rw-r– 1 bilgipark bilgipark 0 Sep 16 21:03 izin_test

 

 

Gördüğünüz gibi izin bölümünde( – — — — ) 10 adet –(tire/çizgi) işareti var. İlk – dosyanın türü için ayrılıyor ,geriye 3’lü gruplar halinde 3 adet set kalıyor.

 

Setler 2’lik düzende izinleri belirtmek için kullanılır,eğer tam değerler kullanılırsa toplamda bir set için değer 222120 — > 421 –> 7 olur. Bu sayıların anlamı ise şu şekildedir.

 

4-r — > okuma(r) izni

2-w — > yazma(w) izni

1-x — > çalıştırma(x) izni(dizinler için çalıştırma izni o dizine girebilmektir,dosyalar için çalıştırma izni ise script veya binary halinde bildiğimiz şekilde çalıştırmaktır.)

 

 

Bu şekilde dosya veya dizinin izninden bahsetmek gerekirse 3 seti de yan yana koymalıyız.Hemen aşağıdaki resimde izin_test isimli dosyamızın izinlerinin neye karşılık geldiğini anlatmaya çalıştık.

 

 


image002             

 

 

Yani bizim izin_test dosyamız “ -rw-rw-r–“ izinleriyle 664 olur. Peki bu neyi ifade eder?

 

Ø  Dosyanın sahibi(bilgipark) ; dosyayı okuyup, yazabilir.

Ø  Dosyanın ait olduğu gruptakiler(bilgipark grubuna üye olanlar); dosyayı okuyup, yazabilir.

Ø  Sistemde bulunan diğer kişiler(others-sistemdeki bu kullanıcı ve gruba üye olmayan herhangi birileri) dosyayı sadece okuyabilir.

 

 

Dosya veya Dizinin İzinlerini Değiştirmek

 

Chmod; Dosya ve dizinlerin izinleri sahipleri ve root tarafından değiştirilebilir. Değiştirmek için “chmod” komutu kullanılır.

 

 

chmod [seçenekler]… MODE[,MODE]… FILE… — >          MODE: sembolik ifadeler verilerek,u-user,g-group,o-others, r-read,w-write,x-execute; uo+rw gibi

chmod [seçenekler]… OCTAL-MODE FILE… — >                 OCTAL-MODE: sayısal değer verilerek,777-rwx,755-r-x gibi.

chmod [seçenekler]… –reference=RFILE FILE… — >        izinlerinde başka bir dosyadan kopya çekilerek yapılması

 

 

 

Seçenekler

Açıklama

-c, –changes

Verbose moda benzer ama sadece değişim olduğunda kullanıcıya bilgi verir.

-f, –silent, –quiet

Hata veya uyarı mesajı gelirse kullanıcıyı rahatsız etme.

-v, –verbose

İzin değiştirme işlemlerini verbose modda yap.(kullanıcıyı bilgilendirme modu)

-R, –recursive

Eğer bir dizinin izinleri değiştiriliyorsa Dizinin içindekileri de recursive olarak değiştir.

–reference=RFILE

İzini başka bir dosya veya dizinin iznine referans alarak değiştir.

 

 

 

Bir Dosya için r,w,x izinleri anlaşılabilirken ,bir dizin için aynı şeyleri söylemek mümkün değil. Onun için dizinlere izin verirken aşağıdaki tabloya dikkat etmek gerek.

 

 

 

Dizinler için İzinler ne anlama geliyor ? (Permissions for Directories)

Açıklama

r-read,okuma

Bir dizinde read hakkınız olması,dizinin içinde ne olduğunu görebilmek ve ls komutunu o dizin üstünde çalıştırabilmek demektir.

w-write,yazma

Bir dizinde write hakkınız varsa, o dizin içinde dosya oluşturabilirsiniz,var olan dosyaları da silebilirsiniz o dosyalar üstünde w-write hakkınız olMAsa dahi. Onun için bir dizine w hakkı verirken iyi düşünün derim.

x-execute,çalıştırma

Bir dizinde execute hakkınız var ise O dizinin içine gidebilirsiniz/geçebilirsiniz.

 

 

(MODE kısmı) Sembolik ifadelerle izin işlemleri yapılırken izin vermek için +, almak için –,tam şuna benzesin diyorsanız = işareti ile beraber kullanılmalıdır. Mesela,

 

 

Chmod ugo+rwx myscript — > myscript dosyası için user,group ve others’a bütün hakları(r,w,x) verdik.

 

Chmod a+x myscript       — > myscript dosyası için user,group ve others’ı sadece a işareti ile belirterek execute hakkını(x) verdik.

 

Chmod o-x myscript        — > myscript dosyası için group’stan – işareti ile execute hakkını(x) kaldırdık.

 

 

Örnekler;

 

 

[[email protected] ~]$ chmod 777 izin_test

[[email protected] ~]$

[[email protected] ~]$ ls -l izin_test

-rwxrwxrwx 1 bilgipark bilgipark 0 Sep 16 21:03 izin_test

 

 

[[email protected] ~]$ touch ref_file

[[email protected] ~]$ ls -l

total 0

-rwxrwxrwx 1 bilgipark bilgipark 0 Sep 16 21:03 izin_test

-rw-rw-r– 1 bilgipark bilgipark 0 Sep 18 16:46 ref_file

 

 

[[email protected] ~]$ chmod -v –reference=ref_file izin_test

mode of `izin_test’ changed to 0664 (rw-rw-r–)

[[email protected] ~]$

[[email protected] ~]$

[[email protected] ~]$ ls -l

total 0

-rw-rw-r– 1 bilgipark bilgipark 0 Sep 16 21:03 izin_test

-rw-rw-r– 1 bilgipark bilgipark 0 Sep 18 16:46 ref_file

 

 

[[email protected] ~]$ mkdir izin_dir

[[email protected] ~]$ touch izin_dir/izinler1

[[email protected] ~]$ touch izin_dir/izinler2

[[email protected] ~]$ touch izin_dir/izinler3

 

 

[[email protected] ~]$ ls -lRt izin_dir

izin_dir:

total 0

-rw-rw-r– 1 bilgipark bilgipark 0 Sep 18 16:52 izinler1

-rw-rw-r– 1 bilgipark bilgipark 0 Sep 18 16:52 izinler2

-rw-rw-r– 1 bilgipark bilgipark 0 Sep 18 16:52 izinler3

[[email protected] ~]$

[[email protected] ~]$

[[email protected] ~]$ ls -lrt

total 8

-rw-rw-r– 1 bilgipark bilgipark 0 Sep 18 16:46 ref_file

-r–rw-r– 1 bilgipark bilgipark 46 Sep 18 16:49 izin_test

drwxrwxr-x 2 bilgipark bilgipark 4096 Sep 18 16:53 izin_dir

[[email protected] ~]$

 

 

[[email protected] ~]$ chmod -r 775 izin_dir — > izin_dir dizinin kendisi dahil içindekilerle beraber izinlerini –r seçeneği sayesinde 775’ çektik.

[[email protected] ~]$ ls -lrt

total 8

-rw-rw-r– 1 bilgipark bilgipark 0 Sep 18 16:46 ref_file

-r–rw-r– 1 bilgipark bilgipark 46 Sep 18 16:49 izin_test

drwxrwxr-x 2 bilgipark bilgipark 4096 Sep 18 16:53 izin_dir

[[email protected] ~]$

[[email protected] ~]$ ls -rlt izin_dir

izin_dir:

total 0

-rwxrwxr-x 1 bilgipark bilgipark 0 Sep 18 16:53 izinler1

-rwxrwxr-x 1 bilgipark bilgipark 0 Sep 18 16:53 izinler2

-rwxrwxr-x 1 bilgipark bilgipark 0 Sep 18 16:53 izinler3

 

 

Örnek-2;

 

Bu örnekte cozumpark ve bilgipark kullanıcılarını kullanarak,cozumpark kullanıcısının /tmp altında oluşturduğu bir dizinin içini bilgipark kullanıcısının listeleyip listeleyememesini işledik.

 

Çekilen snapshot’da üst yeşil konsolda çözümpark kullanıcısı,alt siyah konsolda bilgipark kullanıcısı yer alıyor ve işlem adımları numaralandırılmış durumda.

 

[[email protected] ~]$ cd /tmp

[[email protected] tmp]$

[[email protected] tmp]$ mkdir cozum

 

 

 

image003

 

 

 

Burada /tmp altında cozumpark kullanıcısının oluşturmuş olduğu cozum isimli dizinin sahibi ve grubu yine cozumpark doğal olarak. Dolayısıyla bilgipark kullanıcısının haklarını incelerken “others” kısmının izinlerine bakmak bizim için yeterli. Örneğimizde cozumpark kullanıcısı cozum dizininden “others” dan read-okuma hakkını kaldırdığında ,bilgipark kullanıcısı “Permission Denied” diye bir hata aldı.

 

 

Peki;ben bir dosya veya dizin oluşturduğumda hemen standart olarak belli izinler geliyor.Bunları sistem otomatik olarak nereden çekiyor diyorsanız söyleyelim, umask.

 

 

Umask; Sistemdeki varsayılan izinler umask değerleri ile son hallerine dönüşür. Normalde sistemde dosyalar 666,dizinler ise 777 izinleri ile oluşturulur eğer umask 000 ise. Fakat Unix&Linux sistemlerde umask’i 022’e ayarlayarak genel bir izin sınırlaması getirilmiş olur. Burada dikkat edilmesi gereken nokta Umask ‘a verilen değerin sistemden verdiği değerlerden kaldırılacak izinleri göstermesidir.

 

 

 

umask [value]

 

 

 

Dosyalar için

Dizinler için

Normal sistem davranışı

rw- rw- rw-

rwx rwx rwx

Umask

000 010 010

000 010 010

Sonuç

rw- r– r

rwx rx rx

 

Umask grubun ve others’ın “w” haklarını kaldırdı.

 

 

Örnek;

 

[[email protected] ~]$ umask

0002

[[email protected] ~]$ touch ornek_mask

[[email protected] ~]$

[[email protected] ~]$ ls -l ornek_mask

-rw-rw-r– 1 cozumpark cozumpark 0 Oct 14 17:53 ornek_mask

[[email protected] ~]$

[[email protected] ~]$ mkdir ornek_dir_mask

[[email protected] ~]$

[[email protected] ~]$ ls -ld ornek_dir_mask

drwxrwxr-x 2 cozumpark cozumpark 4096 Oct 14 17:53 ornek_dir_mask

[[email protected] ~]$

[[email protected] ~]$ umask 000

[[email protected] ~]$

[[email protected] ~]$ touch ornek2_mask

[[email protected] ~]$

[[email protected] ~]$ ls -l ornek2_mask

-rw-rw-rw- 1 cozumpark cozumpark 0 Oct 14 17:54 ornek2_mask

[[email protected] ~]$

[[email protected] ~]$

[[email protected] ~]$ mkdir ornek2_dir_mask

[[email protected] ~]$

[[email protected] ~]$ ls -ld ornek2_dir_mask

drwxrwxrwx 2 cozumpark cozumpark 4096 Oct 14 17:54 ornek2_dir_mask

[[email protected] ~]$

 

 

Dosya veya Dizinin Sahiplerini ve Gruplarını Değiştirmek

 

Chown,chgrp; Dosya veya dizinin sahipliği değiştirilirken chown komutu,grubu değiştirilirken chgrp komutu kullanılır.

 

 

chown [seçenekler]… [OWNER][:[GROUP]] FILE…

chown [seçenekler]… –reference=RFILE FILE…

 

 

chgrp [OPTION]… GROUP FILE…

chgrp [OPTION]… –reference=RFILE FILE…

 

 

 

Seçenekler-

Açıklama

-c, –changes

–dereference

Eğer dosya bir link ise o sembolik linkin izinleri değil de onun gösterdiği dosyanın sahipliği değişir.(normali de budur.)

-h, –no-dereference

Sembolik linkin kendi sahipliklerini değiştir.(normalde böyle değildir.)

-f, –silent, –quiet

Hata veya uyarı mesajı gelirse kullanıcıyı rahatsız etme.

-v, –verbose

Sahiplik değiştirme işlemlerini verbose modda yap.(kullanıcıyı bilgilendirme modu)

-R, –recursive

Eğer bir dosyanın/dizinin sahiplikleri değiştiriliyorsa dosyanın/dizinin içindekileri de recursive olarak değiştir.

–reference=RFILE

Sahipliği başka bir dosya veya dizinin sahipliğini referans alarak değiştir.

Sistemdeki sembolik linklerin uçtan uca sahipliğini değiştirmek için bu aşağıdaki 3 seçeneği –R recursive seçeneği ile beraber kullanırız .Genellikle –RL şeklinde kullanılır.

-H veya -L

Verdiğimiz argüman sembolik link ise onu takip eder. –L daha kapsamlıdır iç içe geçmiş linkleri de takip eder FS ağaç yapısında.

-P

Herhangi bir sembolik linki takip etme.(normal-default’u budur.)

 

 

 

Bu komutları kullanırken root kullanıcısı olmanız gerekli. Aksi takdirde “operations not permitted” hatası alırsınız. Sisteme cozumpark kullanıcı adı ve şifresi ile login olup,root’a “su –“ komutu ile geçiyoruz.

 

 

Örnek;

 

[[email protected] ~]$cd /tmp

[[email protected] tmp]$touch izin_test

[cozumpark @artemis tmp]# ls -l izin_test

-rw-rw-r– 1 cozumpark cozumpark 0 Sep 20 00:30 izin_test

[[email protected] ~]$ su –

Password:

[[email protected] ~]#cd /tmp

[[email protected] tmp]#

[[email protected] tmp]# chown bilgipark:bilgipark izin_test — > izin_test dosyasının sahibi ve grubunu bilgipark yaptık.

[[email protected] tmp]#

[[email protected] tmp]# ls -l izin_test

-rw-rw-r– 1 bilgipark bilgipark 0 Sep 20 00:30 izin_test

[[email protected] tmp]# chgrp cozumpark izin_test

[[email protected] tmp]#

[[email protected] tmp]# ls -l izin_test

-rw-rw-r– 1 bilgipark cozumpark 0 Sep 20 00:30 izin_test

[email protected] tmp]# ls –lrt;

total 1

-rw-rw-r– 1 bilgipark cozumpark 0 Sep 20 00:30 izin_test

[email protected] tmp]#rm izin_test

 

 

Örnek-2;

 

Bu örnekte bir dizin oluşturup o dizine soft link oluşturacağız, ayrıca o dizinin içinde dummy dosya ve dizinler oluşturup hem içerisinden hem de dışarıya doğru bir soft link atacağız.

 

 

[[email protected] tmp]# mkdir izindir

[[email protected] tmp]#

[[email protected] tmp]# ln -s izindir link_izindir — > izindir dizinine soft link yaptık

[[email protected] tmp]#

[[email protected] tmp]# ls -lrt

total 3

-rw-rw-r– 1 bilgipark bilgipark 0 Sep 20 00:30 izin_test

drwxr-xr-x 2 root root 4096 Oct 9 16:41 izindir

lrwxrwxrwx 1 root root 7 Oct 9 16:41 link_izindir -> izindir

[[email protected] tmp]#

[[email protected] tmp]#

[[email protected] tmp]#touch izindir/file1

[[email protected] tmp]# touch izindir/file2

[[email protected] tmp]# touch izindir/file3 — > izindir dizininin altına 3 adet dosya oluşturduk

[[email protected] tmp]#

[[email protected] tmp]# ls –lrt izindir;cd izindir

total 0

-rw-r–r– 1 root root 0 Oct 9 16:41 file1

-rw-r–r– 1 root root 0 Oct 9 16:41 file2

-rw-r–r– 1 root root 0 Oct 9 16:41 file3

[[email protected] izindir]#

[[email protected] izindir]# mkdir icerdeki_dir1 — > izindir altına 2 tane daha dizin oluşturduk

[[email protected] izindir]# mkdir icerdeki_dir2

[[email protected] izindir]#

[[email protected] izindir]# ln -s icerdeki_dir1 link_to_icerdeki_dir1e — > izindir altındaki icerdeki_dir1 isimli dizine bir soft link oluşturduk.

[[email protected] izindir]#

[[email protected] izindir]#

[[email protected] izindir]# ls -lrt

total 8

-rw-r–r– 1 root root 0 Oct 9 16:41 file1

-rw-r–r– 1 root root 0 Oct 9 16:41 file2

-rw-r–r– 1 root root 0 Oct 9 16:41 file3

drwxr-xr-x 2 root root 4096 Oct 9 16:42 icerdeki_dir1

drwxr-xr-x 2 root root 4096 Oct 9 16:42 icerdeki_dir2

lrwxrwxrwx 1 root root 13 Oct 9 16:42 link_to_icerdeki_dir1e -> icerdeki_dir1

[[email protected] izindir]# pwd

/tmp/izindir

[[email protected] izindir]#

[[email protected] izindir]# mkdir -p /tmp/disardaki_dir3 — > bir de dışarıya bir dizin oluşturduk

[[email protected] izindir]#

[[email protected] izindir]# ln -s /tmp/disardaki_dir3 disariya_link_dir3e — > şimdi ise dışardaki dizine soft link oluşturduk

[[email protected] izindir]#

[[email protected] izindir]# ls -lrt

total 8

-rw-r–r– 1 root root 0 Oct 9 16:41 file1

-rw-r–r– 1 root root 0 Oct 9 16:41 file2

-rw-r–r– 1 root root 0 Oct 9 16:41 file3

drwxr-xr-x 2 root root 4096 Oct 9 16:42 icerdeki_dir1

drwxr-xr-x 2 root root 4096 Oct 9 16:42 icerdeki_dir2

lrwxrwxrwx 1 root root 13 Oct 9 16:42 link_to_icerdeki_dir1e -> icerdeki_dir1

lrwxrwxrwx 1 root root 19 Oct 9 16:43 disariya_link_dir3e -> /tmp/disardaki_dir3

[[email protected] izindir]#

[[email protected] izindir]# cd ..

[[email protected] tmp]#

[[email protected] tmp]#

[[email protected] tmp]# ls -lrt izin*

total 8

-rw-r–r– 1 root root 0 Oct 9 16:41 file1

-rw-r–r– 1 root root 0 Oct 9 16:41 file2

-rw-r–r– 1 root root 0 Oct 9 16:41 file3

drwxr-xr-x 2 root root 4096 Oct 9 16:42 icerdeki_dir1

drwxr-xr-x 2 root root 4096 Oct 9 16:42 icerdeki_dir2

lrwxrwxrwx 1 root root 13 Oct 9 16:42 link_to_icerdeki_dir1e -> icerdeki_dir1

lrwxrwxrwx 1 root root 19 Oct 9 16:43 disariya_link_dir3e -> /tmp/disardaki_dir3

[[email protected] tmp]#

[[email protected] tmp]#

[[email protected] tmp]# ls -ltr

lrwxrwxrwx 1 root root 7 Oct 9 16:41 link_izindir -> izindir

drwxr-xr-x 2 root root 4096 Oct 9 16:43 disardaki_dir3

drwxr-xr-x 4 root root 4096 Oct 9 16:43 izindir

[[email protected] tmp]# cat /etc/group|grep park

cozumpark:x:500:

yonetici:x:502:cozumpark

bilgipark:x:501:hayal1,hayal2

[[email protected] tmp]#

[[email protected] tmp]# ls -lrt

lrwxrwxrwx 1 root root 7 Oct 9 16:41 link_izindir -> izindir

drwxr-xr-x 2 root root 4096 Oct 9 16:43 disardaki_dir3

drwxr-xr-x 4 root root 4096 Oct 9 16:43 izindir

[[email protected] tmp]#

[[email protected] tmp]#

[[email protected] tmp]# chgrp -RH bilgipark link_izindir — > chgrp komutunu –RH seçenekleri ile link_izindir’in gösterdiği dizin ve o dizinin altında ne varsa grubunu bilgipark yaptık.

[[email protected] tmp]#

[[email protected] tmp]# ls -lrt

total 3

lrwxrwxrwx 1 root root 7 Oct 9 16:41 link_izindir -> izindir

drwxr-xr-x 2 root bilgipark 4096 Oct 9 16:43 disardaki_dir3

drwxr-xr-x 4 root bilgipark 4096 Oct 9 16:43 izindir

lrwxrwxrwx 1 root root 7 Oct 9 16:47 link2_izindir -> izindir

[[email protected] tmp]#

[[email protected] tmp]# ls -lrt izindir — > -RH seçeneği ile gördüğünüz gibi hem verdiğimiz soft linki takip etti,hem de önüne çıkan diğer dizinleri takip etti ve grup bilgilerini değiştirdi.

total 8

-rw-r–r– 1 root bilgipark 0 Oct 9 16:41 file1

-rw-r–r– 1 root bilgipark 0 Oct 9 16:41 file2

-rw-r–r– 1 root bilgipark 0 Oct 9 16:41 file3

drwxr-xr-x 2 root bilgipark 4096 Oct 9 16:42 icerdeki_dir1

drwxr-xr-x 2 root bilgipark 4096 Oct 9 16:42 icerdeki_dir2

lrwxrwxrwx 1 root root 13 Oct 9 16:42 link_to_icerdeki_dir1e -> icerdeki_dir1

lrwxrwxrwx 1 root root 19 Oct 9 16:43 disariya_link_dir3e -> /tmp/disardaki_dir3

[[email protected] tmp]#

[[email protected] tmp]# chgrp -RL cozumpark link_izindir > chgrp komutunu –RL seçenekleri ile link_izindir’in gösterdiği dizin ve o dizinin altında ne varsa grubunu cozumpark yaptık.

[[email protected] tmp]#

[[email protected] tmp]#

[[email protected] tmp]# ls -lrt

total 3

lrwxrwxrwx 1 root root 7 Oct 9 16:41 link_izindir -> izindir

drwxr-xr-x 2 root cozumpark 4096 Oct 9 16:43 disardaki_dir3

drwxr-xr-x 4 root cozumpark 4096 Oct 9 16:43 izindir

lrwxrwxrwx 1 root root 7 Oct 9 16:47 link2_izindir -> izindir

[[email protected] tmp]#

[[email protected] tmp]# ls -lrt izindir

total 8

-rw-r–r– 1 root cozumpark 0 Oct 9 16:41 file1

-rw-r–r– 1 root cozumpark 0 Oct 9 16:41 file2

-rw-r–r– 1 root cozumpark 0 Oct 9 16:41 file3

drwxr-xr-x 2 root cozumpark 4096 Oct 9 16:42 icerdeki_dir1

drwxr-xr-x 2 root cozumpark 4096 Oct 9 16:42 icerdeki_dir2

lrwxrwxrwx 1 root root 13 Oct 9 16:42 link_to_icerdeki_dir1e -> icerdeki_dir1

lrwxrwxrwx 1 root root 19 Oct 9 16:43 disariya_link_dir3e -> /tmp/disardaki_dir3

[[email protected] tmp]#

[[email protected] tmp]#

[[email protected] tmp]# chgrp -RL bilgipark izindir > chgrp komutunu –RL seçenekleri ile izindir dizini üstünde koştuk dolayısıyla o dizinin altında ne varsa grubunu bilgipark yapmış olduk.

[[email protected] tmp]#

[[email protected] tmp]# ls -lrt

total 3

lrwxrwxrwx 1 root root 7 Oct 9 16:41 link_izindir -> izindir

drwxr-xr-x 2 root bilgipark 4096 Oct 9 16:43 disardaki_dir3

drwxr-xr-x 4 root bilgipark 4096 Oct 9 16:43 izindir

lrwxrwxrwx 1 root root 7 Oct 9 16:47 link2_izindir -> izindir

[[email protected] tmp]#

[[email protected] tmp]# ls -lrt izindir

total 8

-rw-r–r– 1 root bilgipark 0 Oct 9 16:41 file1

-rw-r–r– 1 root bilgipark 0 Oct 9 16:41 file2

-rw-r–r– 1 root bilgipark 0 Oct 9 16:41 file3

drwxr-xr-x 2 root bilgipark 4096 Oct 9 16:42 icerdeki_dir1

drwxr-xr-x 2 root bilgipark 4096 Oct 9 16:42 icerdeki_dir2

lrwxrwxrwx 1 root root 13 Oct 9 16:42 link_to_icerdeki_dir1e -> icerdeki_dir1

lrwxrwxrwx 1 root root 19 Oct 9 16:43 disariya_link_dir3e -> /tmp/disardaki_dir3

[[email protected] tmp]#

 

 

Kullanıcılara ve Gruplara Ek Erişim Listesi(Access Control List) Oluşturmak

 

Access Control List(ACL), Erişim Kontrol Listeleri

 

Unix&Linux sistemlerde normal dosya ve dizin izinleri yanında eğer daha fazla erişim kontrolü istiyorsanız Access Control List’ler (ACL) kullanmanız gerekli.Yani ACL’yi kullanmanız için yukarıda bahsetmiş olduğumuz standart genel izin ve sahiplik kontrollerinin dışına çıkmış olursunuz.

 

Redhat ailesi 5 sürümü ile birlikte ext3 file system leri ve NFS export file systemleri için ACL’yi destekliyor.

 

ACL’yi kullanmak için kernel’in ACL’ye destek vermesi gerekirken sistemde de acl paketleri yüklü olması gerekir. Hemen şu şekilde sisteminize bir göz atıp,aşağıdaki komutun çıktısı sonucu

yüklü ACL paketini görmemiz gerekli.

 

 

[[email protected] ~]# rpm -qa|grep acl — > bu özelliği kullanabilmemiz için sistemimizde ACL paketinin yüklü olup olmadığını kontrol ettik.

 

 

acl-2.2.39-6.el5

libacl-devel-2.2.39-6.el5

libacl-2.2.39-6.el5

 

 

Eğer acl paketimiz yüklü ise izlememiz gereken 3 adım var.

 

 

1.       /etc/fstab dosyasını editleyerek ACL tanımlayacağımız File System(FS) parçasında Fs özellikleri kısmına(fstab dosyasında 4. kolon) “acl” ifadesini eklememiz gerekiyor.

 

  1. File System’i tekrar mount etmemiz gerekiyor (remount). Umount/mount FS_ismi veya mount –o remount FS_ismi diyerek iki şekilde remount yapabiliriz.
  2. ACL kurallarını komut ile eklememiz gerekiyor (ayarlamak için setfacl, var olanı öğrenmek için getfacl).

 

 

Bizim Dosya Sistemleri makalemizde yapmış olduğumuz /myfs FS’i var. Onun üstünde işlem yapacağız. /etc/fstab dosyasında bakarsanız defaults diye bir kısım var.Orası

Var olan FS’in özelliklerinin olduğu yer. Eğer ACL’yi sürekli kullanmak istiyorsak,hangi FS parçası üstünde kullanılacaksa fstab dosyasında o FS için 4. Kolonu editlemek durumundayız.

 

 

[[email protected] ~]# df –h à /myfs sisteme mount durumda.

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/VolGroup00-LogVol00

6.7G 3.0G 3.4G 48% /

/dev/sda1 99M 25M 70M 27% /boot

tmpfs 252M 0 252M 0% /dev/shm

/dev/sdb1 1004M 18M 936M 2% /myfs

[[email protected] ~]#

[[email protected] ~]#

[[email protected] ~]# cat /etc/fstab

/dev/VolGroup00/LogVol00 / ext3 defaults 1 1

LABEL=/boot /boot ext3 defaults 1 2

tmpfs /dev/shm tmpfs defaults 0 0

devpts /dev/pts devpts gid=5,mode=620 0 0

sysfs /sys sysfs defaults 0 0

proc /proc proc defaults 0 0

/dev/VolGroup00/LogVol01 swap swap defaults 0 0

/dev/sdb5 swap swap defaults 0 0

/dev/sdb1 /myfs ext3 defaults 0 0 à dosyanın bu kısmında vi editörü ile defaults yazan kısmı defaults,acl yapmamız gerekli.

 

 

Ayrıca sisteminizin ACL’yi destekleyip desteklemediğini FS’in ext_attr özelliğinden de anlayabiliyoruz.Bunun için ACL çalıştırmak istediğiniz FS parçasının bağlı olduğu disk kısmının attribute’larında ext_attr’ye bakmamız gerekiyor.

 

 

[[email protected] myfs]# tune2fs -l /dev/sdb1 |grep ext_attr — > /myfs /dev/sdb1’e bağlı olduğu için onu kontrol ediyoruz.

Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file

[[email protected] myfs]#

 

 

Vi ile /etc/fstab dosyasına girip /myfs FS parçasının FS özelliği için defaults’in yanına acl ifadesini ekleyerek değiştirdik. Cat komutu ile tekrar fstab dosyasını okuduk.VI editörü kullanımı için VI makalemize bakabilirsiniz.

 

 

[[email protected] ~]# cat /etc/fstab

/dev/VolGroup00/LogVol00 / ext3 defaults 1 1

LABEL=/boot /boot ext3 defaults 1 2

tmpfs /dev/shm tmpfs defaults 0 0

devpts /dev/pts devpts gid=5,mode=620 0 0

sysfs /sys sysfs defaults 0 0

proc /proc proc defaults 0 0

/dev/VolGroup00/LogVol01 swap swap defaults 0 0

/dev/sdb5 swap swap defaults 0 0

/dev/sdb1 /myfs ext3 defaults,acl 0 0

 

 

Var olan ACL’leri listelemek,Getfacl; Dosyaların ACL bilgisine erişmek için kullanılır.

[[email protected] ~]# getfacl /myfs à şu an /myfs üstünde normal haklar olduğunu görüyorsunuz.

getfacl: Removing leading ‘/’ from absolute path names

# file: myfs

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

 

 

ACL uygulamak, Setfacl; Dosyaların ACL bilgisini girmek için kullanılır. İki tip ACL bilgisi vardır. Eğer önceden ayarlanmış ise default olan ACL vardır,bir de normal ACL vardır. Normal ACL hem dosya hem de dizinler için kullanılabilir.Ama default ACL sadece dizinler üstünde kullanılabilir.

 

 

Setfacl –m <rules> <files>

 

 

ACL’yi

u:<uid>:<perms>

Belirtilen kullanıcı için ACL’yi ayarlar. Sistemde yer alan herhangi geçerli bir kullanıcının ismi veya UID’si verilerek yapılabilir.

G:<gid>:<perms>

Belirtilen grup için ACL’yi ayarlar. Sistemde yer alan herhangi geçerli bir grubun ismi veya GID’si verilerek yapılabilir.

M:<perms>

                okuma için r-read,yazma için w-write,çalıştırma için x-execute haklarının belirtildiği kısımdır.

O:<perms>

Sistemde yer alan diğer kullanıcıları temsil eder.

 

 

[[email protected] ~]# getfacl /myfs — > /myfs FS’imiz için ACL olup olmadığına baktık.

getfacl: Removing leading ‘/’ from absolute path names

# file: myfs

# owner: root

# group: root

user::rwx

group::r-x

other::r-x

 

 

[[email protected] ~]#

[[email protected] ~]#

[[email protected] ~]# ls –ld /myfs

drwxr-xr-x 3 root root 4096 Oct 9 21:01 /myfs

 

 

[[email protected] ~]# id cozumpark

uid=500(cozumpark) gid=500(cozumpark) groups=500(cozumpark)

[[email protected] ~]# id bilgipark

uid=501(bilgipark) gid=501(bilgipark) groups=501(bilgipark)

[[email protected] ~]#

[[email protected] ~]# chmod 775 /myfs

[[email protected] ~]#

[[email protected] ~]#

[[email protected] ~]# ls –ld /myfs

drwxrwxr-x 3 root root 4096 Oct 9 21:01 /myfs

[[email protected] ~]# cd /myfs

[[email protected] myfs]# touch acl_ornek

[[email protected] myfs]# chmod 770 acl_ornek

[[email protected] myfs]# ls –lrt

total 20

drwx—— 2 root root 16384 Sep 10 15:03 lost+found

-rwxrwx— 1 root root 53 Oct 9 21:24 acl_ornek

 

 

/myfs Fs’ine sadece root kullanıcıs ve root grubunun okuma ve yazma hakkı oldu.

 

 

[[email protected] myfs]# echo “oku beni” >> acl_ornek

[[email protected] myfs]#

[[email protected] myfs]# cat acl_ornek

oku beni

 

 

Bu haliyle aşağıdaki snapshotda da gördüğünüz gibi sistemimizde yer alan cozumpark ve bilgipark kullanıcıları acl_ornek dosyasını doğal olarak bu haklarla okuyamıyorlar.Aşağıdaki snapshot’da da “Permisson Denied” hatası aldıklarını göreceksiniz.

 

 

 

image004

 

 

 

Acl_ornek dosyasında sadece bilgipark veya cozumpark kullanıcısına izin vermek istiyoruz. Başka kimseye de vermek istemiyoruz. Bu kullanıcılar başka ortak bir gruba ait olmadığı için

Chgrp komutunu da kullanamıyoruz, o zaman ne yapmamız gerek acl kullanmamız gerek. Senaryomuz bunu gerektiriyor.

 

 

[[email protected] myfs]# setfacl –m u:bilgipark:r /myfs/acl_ornek — > bilgipark kullanıcına okuma hakkı verdik.

[[email protected] myfs]#

[[email protected] myfs]# getfacl /myfs/acl_ornek — > verdiğimiz izini doğruladık-kontrol ettik.

getfacl: Removing leading ‘/’ from absolute path names

# file: myfs/acl_ornek

# owner: root

# group: root

user::rwx

user:bilgipark:r–

group::rwx

mask::rwx

other::—

[[email protected] myfs]# ls –l acl_ornek — > eğer ACL kullanılıyorsa izinler kısmında artık “+ “ işaretini görürsünüz. Yani bu dosyada normal izinler yanında ACL de var demektir.

-rwxrwx—+ 1 root root 45 Oct 9 21:50 acl_ornek

 

 

Şimdi gördüğünüz gibi bilgipark kullanıcısı normalde acl_ornek dosyası üstünde ne user ne group ,ne de others’a ait okuma izni olmamasına rağmen ACL ile okuma hakkı elde etti.

Acl_ornek dosyasını okuyabildi.İşte ACL’nin normal Linux hakları yanında kullanıcıya sağladığı büyük esneklik budur.

 

 

 

image005

 

 

 

[[email protected] myfs]$ echo “something” >> acl_ornek — > yazma hakkı olmadan içine bir şeyler yazmayı denedik ama hata aldık.

 

-bash: acl_ornek: Permission denied

 

[[email protected] myfs]# setfacl –m u:bilgipark:rw /myfs/acl_ornek à şimdi bilgipark kullanıcısına acl_ornek dosyası üstünde yazma hakkı da verdik.

[[email protected] myfs]#

[[email protected] myfs]#

[[email protected] myfs]# getfacl /myfs/acl_ornek — > verdiğimiz izini doğruladık-kontrol ettik.

getfacl: Removing leading ‘/’ from absolute path names

# file: myfs/acl_ornek

# owner: root

# group: root

user::rwx

user:bilgipark:rw-

group::rwx

mask::rwx

other::—

 

 

[[email protected] myfs]$ echo “something” >> acl_ornek — >az önce hata aldığımız denemeyi yazmaya ACL verdikten sonra baktık ve kullanıcı artık yazabiliyor.

[[email protected] myfs]$

[[email protected] myfs]$ cat acl_ornek — > verdiğimiz izini doğruladık-kontrol ettik.

oku beni

something

 

 

[[email protected] myfs]# setfacl –m g:cozumpark:rw /myfs/acl_ornek — > şimdi bu dosyaya cozumpark grubuna ACL tanımladık.Böylece cozumpark kullanıcısı rw hakkına sahip olacak.

[[email protected] myfs]#

[[email protected] myfs]#

[[email protected] myfs]# getfacl /myfs/acl_ornek — > verdiğimiz izini doğruladık-kontrol ettik.

getfacl: Removing leading ‘/’ from absolute path names

# file: myfs/acl_ornek

# owner: root

# group: root

user::rwx

user:bilgipark:rw-

group::rwx

group:cozumpark:rw-

mask::rwx

other::—

 

 

Burada da cozumpark kullanıcısının grubundan dolayı, bilgipark kullanıcısının ise kendi isminden dolayı aldığı ACL’leleri uygulayabildiğini görüyoruz.

 

 

 

image006

 

 

 

[[email protected] myfs]# setfacl –x u:bilgipark /myfs/acl_ornek — > Eğer bir kullanıcının bütün haklarını almak istiyorsak –x ile beraber koşuyoruz setfacl komutunu.

[[email protected] myfs]#

[[email protected] myfs]# getfacl /myfs/acl_ornek — > Aldığımız izini doğruladık-kontrol ettik.

getfacl: Removing leading ‘/’ from absolute path names

# file: myfs/acl_ornek

# owner: root

# group: root

user::rwx

group::rwx

group:cozumpark:rw-

mask::rwx

other::—

 

 

[[email protected] myfs]$ cat acl_ornek — > Aldığımız izini doğruladık-kontrol ettik.

cat: acl_ornek: Permission denied

 

 

Eğer bütün ACL bilgilerini yok etmek ve kullanmak isteMIyorsanız –remove-all seçeneği ile o dosya üstünde tekrar normal Linux izin ve sahiplik seviyesine inebilirsiniz.

 

 

[[email protected] myfs]# setfacl –remove-all /myfs/acl_ornek

[[email protected] myfs]#

[[email protected] myfs]#

[[email protected] myfs]# getfacl /myfs/acl_ornek

getfacl: Removing leading ‘/’ from absolute path names

# file: myfs/acl_ornek

# owner: root

# group: root

user::rwx

group::rwx

other::—

 

[[email protected] myfs]#

[[email protected] myfs]# ls –l acl_ornek — > Gördüğünüz gibi “+” işareti de normal izinlerin yanından gitmiş oluyor.

-rwxrwx— 1 root root 45 Oct 9 21:50 acl_ornek

 

Bir makalenin daha sonuna geldik, umarım faydalı bir makale olmuştur. Bir sonraki makalemizde görüşmek üzere

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu

Reklam Engelleyici Algılandı

ÇözümPark Bilişim Portalı gönüllü bir organizasyon olup tek gelir kaynağı reklamlardır. Bu nedenle siteyi gezerken lütfen reklam engelleme eklentinizi kapatın veya Çözümpark web sitesi için izin tanımı yapın. Anlayışınız için teşekkürler.