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.
- Dosya veya dizinin kullanıcısının kime ait olduğu(owner of the file/directory)
- Dosya veya dizinin grubunun ne olduğu(group of the file/directory)
3 adet izin alanı bulunmaktadır.
- Dosya veya dizinin sahibinin izinleri (user)
- Dosya veya dizinin grubunun izinleri(group)
- Dosya veya dizinin diğer şahıslara göre olan izinleri.(others)
Temel komutlar makalemizde “ls” komutunun çıktısını şöyle göstermiştik.
Bilgipark kullanıcısı ile ev dizinine gidip izin_test isimli bir dosya oluşturduk.
[bilgipark@artemis ~]$ touch izin_test
[bilgipark@artemis ~]$
[bilgipark@artemis ~]$ 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.
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;
[bilgipark@artemis ~]$ chmod 777 izin_test
[bilgipark@artemis ~]$
[bilgipark@artemis ~]$ ls -l izin_test
-rwxrwxrwx 1 bilgipark bilgipark 0 Sep 16 21:03 izin_test
[bilgipark@artemis ~]$ touch ref_file
[bilgipark@artemis ~]$ 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
[bilgipark@artemis ~]$ chmod -v –reference=ref_file izin_test
mode of `izin_test’ changed to 0664 (rw-rw-r–)
[bilgipark@artemis ~]$
[bilgipark@artemis ~]$
[bilgipark@artemis ~]$ 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
[bilgipark@artemis ~]$ mkdir izin_dir
[bilgipark@artemis ~]$ touch izin_dir/izinler1
[bilgipark@artemis ~]$ touch izin_dir/izinler2
[bilgipark@artemis ~]$ touch izin_dir/izinler3
[bilgipark@artemis ~]$ 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
[bilgipark@artemis ~]$
[bilgipark@artemis ~]$
[bilgipark@artemis ~]$ 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
[bilgipark@artemis ~]$
[bilgipark@artemis ~]$ chmod -r 775 izin_dir — > izin_dir dizinin kendisi dahil içindekilerle beraber izinlerini –r seçeneği sayesinde 775’ çektik.
[bilgipark@artemis ~]$ 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
[bilgipark@artemis ~]$
[bilgipark@artemis ~]$ 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.
[cozumpark@artemis ~]$ cd /tmp
[cozumpark@artemis tmp]$
[cozumpark@artemis tmp]$ mkdir cozum
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 r–x r–x |
Umask grubun ve others’ın “w” haklarını kaldırdı. |
Örnek;
[cozumpark@artemis ~]$ umask
0002
[cozumpark@artemis ~]$ touch ornek_mask
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -l ornek_mask
-rw-rw-r– 1 cozumpark cozumpark 0 Oct 14 17:53 ornek_mask
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ mkdir ornek_dir_mask
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -ld ornek_dir_mask
drwxrwxr-x 2 cozumpark cozumpark 4096 Oct 14 17:53 ornek_dir_mask
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ umask 000
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ touch ornek2_mask
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -l ornek2_mask
-rw-rw-rw- 1 cozumpark cozumpark 0 Oct 14 17:54 ornek2_mask
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ mkdir ornek2_dir_mask
[cozumpark@artemis ~]$
[cozumpark@artemis ~]$ ls -ld ornek2_dir_mask
drwxrwxrwx 2 cozumpark cozumpark 4096 Oct 14 17:54 ornek2_dir_mask
[cozumpark@artemis ~]$
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;
[cozumpark@artemis ~]$cd /tmp
[cozumpark@artemis tmp]$touch izin_test
[cozumpark @artemis tmp]# ls -l izin_test
-rw-rw-r– 1 cozumpark cozumpark 0 Sep 20 00:30 izin_test
[cozumpark@artemis ~]$ su –
Password:
[root@artemis ~]#cd /tmp
[root@artemis tmp]#
[root@artemis tmp]# chown bilgipark:bilgipark izin_test — > izin_test dosyasının sahibi ve grubunu bilgipark yaptık.
[root@artemis tmp]#
[root@artemis tmp]# ls -l izin_test
-rw-rw-r– 1 bilgipark bilgipark 0 Sep 20 00:30 izin_test
[root@artemis tmp]# chgrp cozumpark izin_test
[root@artemis tmp]#
[root@artemis tmp]# ls -l izin_test
-rw-rw-r– 1 bilgipark cozumpark 0 Sep 20 00:30 izin_test
root@artemis tmp]# ls –lrt;
total 1
-rw-rw-r– 1 bilgipark cozumpark 0 Sep 20 00:30 izin_test
root@artemis 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.
[root@artemis tmp]# mkdir izindir
[root@artemis tmp]#
[root@artemis tmp]# ln -s izindir link_izindir — > izindir dizinine soft link yaptık
[root@artemis tmp]#
[root@artemis 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
[root@artemis tmp]#
[root@artemis tmp]#
[root@artemis tmp]#touch izindir/file1
[root@artemis tmp]# touch izindir/file2
[root@artemis tmp]# touch izindir/file3 — > izindir dizininin altına 3 adet dosya oluşturduk
[root@artemis tmp]#
[root@artemis 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
[root@artemis izindir]#
[root@artemis izindir]# mkdir icerdeki_dir1 — > izindir altına 2 tane daha dizin oluşturduk
[root@artemis izindir]# mkdir icerdeki_dir2
[root@artemis izindir]#
[root@artemis izindir]# ln -s icerdeki_dir1 link_to_icerdeki_dir1e — > izindir altındaki icerdeki_dir1 isimli dizine bir soft link oluşturduk.
[root@artemis izindir]#
[root@artemis izindir]#
[root@artemis 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
[root@artemis izindir]# pwd
/tmp/izindir
[root@artemis izindir]#
[root@artemis izindir]# mkdir -p /tmp/disardaki_dir3 — > bir de dışarıya bir dizin oluşturduk
[root@artemis izindir]#
[root@artemis izindir]# ln -s /tmp/disardaki_dir3 disariya_link_dir3e — > şimdi ise dışardaki dizine soft link oluşturduk
[root@artemis izindir]#
[root@artemis 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
[root@artemis izindir]#
[root@artemis izindir]# cd ..
[root@artemis tmp]#
[root@artemis tmp]#
[root@artemis 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
[root@artemis tmp]#
[root@artemis tmp]#
[root@artemis 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
[root@artemis tmp]# cat /etc/group|grep park
cozumpark:x:500:
yonetici:x:502:cozumpark
bilgipark:x:501:hayal1,hayal2
[root@artemis tmp]#
[root@artemis 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
[root@artemis tmp]#
[root@artemis tmp]#
[root@artemis 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.
[root@artemis tmp]#
[root@artemis 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
[root@artemis tmp]#
[root@artemis 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
[root@artemis tmp]#
[root@artemis 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.
[root@artemis tmp]#
[root@artemis tmp]#
[root@artemis 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
[root@artemis tmp]#
[root@artemis 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
[root@artemis tmp]#
[root@artemis tmp]#
[root@artemis 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.
[root@artemis tmp]#
[root@artemis 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
[root@artemis tmp]#
[root@artemis 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
[root@artemis 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.
[root@artemis ~]# 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.
- File System’i tekrar mount etmemiz gerekiyor (remount). Umount/mount FS_ismi veya mount –o remount FS_ismi diyerek iki şekilde remount yapabiliriz.
- 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.
[root@artemis ~]# 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
[root@artemis ~]#
[root@artemis ~]#
[root@artemis ~]# 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.
[root@artemis 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
[root@artemis 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.
[root@artemis ~]# 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.
[root@artemis ~]# 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.
[root@artemis ~]# 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
[root@artemis ~]#
[root@artemis ~]#
[root@artemis ~]# ls –ld /myfs
drwxr-xr-x 3 root root 4096 Oct 9 21:01 /myfs
[root@artemis ~]# id cozumpark
uid=500(cozumpark) gid=500(cozumpark) groups=500(cozumpark)
[root@artemis ~]# id bilgipark
uid=501(bilgipark) gid=501(bilgipark) groups=501(bilgipark)
[root@artemis ~]#
[root@artemis ~]# chmod 775 /myfs
[root@artemis ~]#
[root@artemis ~]#
[root@artemis ~]# ls –ld /myfs
drwxrwxr-x 3 root root 4096 Oct 9 21:01 /myfs
[root@artemis ~]# cd /myfs
[root@artemis myfs]# touch acl_ornek
[root@artemis myfs]# chmod 770 acl_ornek
[root@artemis 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.
[root@artemis myfs]# echo “oku beni” >> acl_ornek
[root@artemis myfs]#
[root@artemis 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.
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.
[root@artemis myfs]# setfacl –m u:bilgipark:r /myfs/acl_ornek — > bilgipark kullanıcına okuma hakkı verdik.
[root@artemis myfs]#
[root@artemis 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::—
[root@artemis 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.
[bilgipark@artemis myfs]$ echo “something” >> acl_ornek — > yazma hakkı olmadan içine bir şeyler yazmayı denedik ama hata aldık.
-bash: acl_ornek: Permission denied
[root@artemis myfs]# setfacl –m u:bilgipark:rw /myfs/acl_ornek à şimdi bilgipark kullanıcısına acl_ornek dosyası üstünde yazma hakkı da verdik.
[root@artemis myfs]#
[root@artemis myfs]#
[root@artemis 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::—
[bilgipark@artemis myfs]$ echo “something” >> acl_ornek — >az önce hata aldığımız denemeyi yazmaya ACL verdikten sonra baktık ve kullanıcı artık yazabiliyor.
[bilgipark@artemis myfs]$
[bilgipark@artemis myfs]$ cat acl_ornek — > verdiğimiz izini doğruladık-kontrol ettik.
oku beni
something
[root@artemis 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.
[root@artemis myfs]#
[root@artemis myfs]#
[root@artemis 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.
[root@artemis 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.
[root@artemis myfs]#
[root@artemis 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::—
[bilgipark@artemis 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.
[root@artemis myfs]# setfacl –remove-all /myfs/acl_ornek
[root@artemis myfs]#
[root@artemis myfs]#
[root@artemis 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::—
[root@artemis myfs]#
[root@artemis 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