Merhaba;

Bu makale ile aslında yeni bir işe başlıyorum. Üniversiteli gençlerimize Unix/Linux’u sevdirmek adına özellikle bana gelen soruları da yanıtlayacak şekilde bir dizi yazı hazırlamayı planlamış durumdayım. 20 yılı aşkın bir süre IT sektöründe olmanın gururunu yaşarken bir yandan da yeni mezun veya mezun olmak üzere olan gençlerimizin Linux/Unix ile uğraşmadığını görmenin de üzüntüsünü yaşamaktayım. Ülkemizin kendini geliştirmiş, teknolojiyi yakından takip eden ve haliyle teknolojiye de katkılar sağlayacak gençlere çok ihtiyacı var. Aslında ister veritabanı, ister yedekleme teknolojileri isterse uygulamalarla uğraşmayı hedeflesin gençlerimiz; gün sonunda çalışacağı temel ortamı bilmesi bu işlerde başarılı olması için gereklidir. Öncelikle üzerinde çalıştığı donanımı bilmesi gerekiyor. CPU, Memory, IO nedir? Ne tür durumlarda hangi kaynağa ihtiyacı olacaktır? Bu üç temel bileşen arasında ki akış nasıl olmaktadır? Donanımın sağladığı ek özellikler işlerini ne anlamda kolaylaştırmaktadır?  Daha üst katmana çıktığımızda acaba işletim sistemi bu donanımın üzerinde ne tür bir fayda sağlamaktadır? İşletim sistemi seçiminde nelere dikkat edilmesi gerekir?  İşletim sistemini sadece kullanıcı bazında değil ama gerektiğinde performans analizi de yapabilecek şekilde etkin bir sistem yöneticisi olarak biliyor olması kendi yaptığı işlerinde de kendisini farklı kılacak ve çok daha hızla hedefe ulaşmasına imkan sağlayacaktır.

 

Yani sevgili gençler, veritabanı konusunda bir guru olmayı hedefleyebilirsiniz, çok iyi bir yazılım/uygulama geliştiricisi olmayı hayal edebilirsiniz, yedekleme ve felaket kurtarma işlerinde vazgeçilmez biri olmayı hedefleyebilirsiniz veya şirketinizin para kazanmasına olanak sağlayan pek çok uygulamanın yöneticisi olmayı hayal edebilirsiniz; aslında hepsi için donanım ve işletim sistemini  iyi bilmeniz, onların dilinden anlamanız, bu anlayışı kendi uğraştığınız konulara geçirebilmeniz/taşıyabilmeniz hedeflediğiniz bu işlerde başarılı olmanız için gereklidir. Neden Linux/Unix derseniz? Pek çok firma misyon kritik uygulamaları için Linux/Unix tabanlı işletim sistemleri kullanmaktadır ve kullanmaya da devam edecektir. Dahası eğer işletim sistemi öğrenmeye Linux/Unix’den başlarsanız, işletim sistemi mantığını çok daha rahat kavrayacağınıza emin olabilirsiniz. Elbette sizlerin Linux/Unix bilmesi de bizim gibi katma değer üreten entegratör firmaların da işine yarayacaktır. Çünkü iş ilanlarına daha fazla Linux/Unix bilen gençlerimiz başvuracaktır.  J

 

Gantek Teknolojiye son iki yıldır sayıları 15’i bulan satjyerler almaktayız. Kendilerinden bana gelen en büyük sorulardan bir tanesi “Access Control List” in geleneksel imtiyaz sistemine göre ne tür farklılıklarının olduğu,  neden bu mekanizmaya da ihtiyaç duyduğumuzdur. Bu nedenle bu yazımda “ACL” konusunu sevgili gençlerimiz için biraz daha anlaşılır hale getirmeye çalışacağım.

 

Geleneksel dosya koruma yetenekleri yeterli olmadığında; ACL, dosya erişim izinlerinde daha fazla kontrol imkanı sağlamaktadır. Dosya güvenliğini daha fazla kontrol altında tutabilmek amacıyla ACL mekanizmasıyla dosyanın sahibi, dosyanın grubu, “other” statüsündekiler, spesifik kullanıcılar ve gruplar için imtiyazlar/izinler tanımlayabilirsiniz. Ek olarak ACL ile tüm bu özneler için “default” imtiyazları da tanımlayabilirsiniz.

 

Şöyle bir örnek verelim. Eğer sistem yöneticisi belirli bir gruptaki herkese dosyayı okuma yetkisi vermek istiyorsa, basit bir şekilde dosyanın grubuna “read” yetkisi verirsiniz.  Buna rağmen, sistem yöneticisi bu grubun içerisindeki sadece bir kişiye dosyayı okuma hakkı vermek istiyorsa ne yapmalıdır? İşte ACL, bu seviyede ki güvenliği sağlamaktadır.  ACL ile gelen ek güvenliği, standart Unix dosya imtiyazlarına ek bir uzantı olarak düşünebilirsiniz.

 

ACL komutlarından ve opsiyonlarından bahsedelim. Aşağıda olan tablo komutları opsiyonlarıyla birlikte özetlemektedir.

 

 

 

Komut/Opsiyon Açıklama
getfacl filename(s) Dosya üzerinde tanımlı ACL girişlerini görüntüler.
setfacl options filename Dosya üzerinde tanımlı ACL girişlerini siler, değiştirir, ekler, tanımlar.
setfacl -m acl_entries Dosya üzerinde tanımlı ACL girişlerini oluşturur veya değiştirir.
setfacl -s acl_entries Dosya üzerindeki eski ACL girişlerini alır ve yeni ACL girişleriyle değiştirir.
setfacl -d acl_entries Dosya üzerindeki ACL girişlerini siler.
setfacl -f acl_file ACL konfigürasyon dosyasını argüman olarak alır.

 

Tabloda ifade edilen “acl_entries” in neler olduğunu aşağıdaki şekilde özetlemek mümkündür.

ACL  Alanı Açıklama
entry-type Sahip (owner), sahibin grubu (owner’s group), spesifik kullanıcılar (specific users), ek gruplar (additional groups) veya ACL mask için dosya imtiyazlarını tanımlar
UID veya GID Kullanıcı ismi veya kimlik numarası (UID)
Grup ismi veya kimlik numarası (GID)
perm “entry-type” için imtiyazları tanımlar. Bu değer için sembolik linkleri kullanabileceğiniz gibi (r, w, x, -), oktal değerleri de kullanabilirsiniz (0 – 7).

Özet olarak, setfacl komutu dosya üzerindeki imtiyazları tanımlarken bu ACL girişlerini kullanır.

u[ser]::perm Dosya sahibi için imtiyazları tanımlar.
g[roup]::perm Dosya sahibinin grubu için imtiyazları tanımlar.
o[ther]:perm Dosya sahibi, dosya sahibinin grubu dışındaki kullanıcılar için imtiyazları tanımlar.
u[ser]:UID:perm
u[ser]username:perm
Spesifik bir kullanıcı için imtiyazları tanımlar. Kullanıcı /etc/passwd dosyasında olmalıdır.
g[roup]:GID:perm
g[roup]:groupname:perm
Spesifik bir grup için imtiyazları tanımlar. “groupname”, /etc/group dosyasında olmalıdır.
m[ask]:perm ACL maskı tanımlar. Mask girişi, dosyanın sahibi dışındaki tüm kullanıcı ve gruplar için maksimum imtiyazı tanımlar.

Bir dosyanın üzerinde ACL tanımı olup olmadığını iki şekilde anlayabilirsiniz: “ls -l” ve “getfacl”. “ls -l”  komut çıktısı eğer imtiyazların tanımlandığı alanın sonunda “+” işareti gösteriyorsa (-rw-r–r–+ ) bu dosya üzerinde ACL tanımlı demektir.

Şimdi birkaç örnek ile konuyu daha anlaşılır yapmaya çalışalım.

Öncelikle “candy” isimli bir kullanıcı oluşturalım.

#useradd -u 1011 -g 10 -d /export/home/candy -m -s /bin/ksh -c “Candy User” candy

“/var/test” isimli bir dizin oluşturalım ve bu dizin içerisine geçiş yapalım.

# mkdir /var/test

# cd /var/test

# pwd

/var/test

#

“file11” ve “file22” isimli iki tane dosya oluşturalım, “ls -l”  ve “getfacl” komutlarıyla dosya imtiyazlarını görüntüleyelim.

# echo “Success for file11” > file11

# touch file22

# ls -l

total 2

-rw-r–r–   1 root     root          19 Aug 30 16:32 file11

-rw-r–r–   1 root     root           0 Aug 30 16:32 file22

#

# getfacl file11

# file: file11

# owner: root

# group: root

user::rw-

group::r–              #effective:r–

mask:r–

other:r–

#

file11 için, “ls –l” komutunda görünen imtiyazlarla, “getfacl” komutunda görünen imtiyazların birbiriyle örtüştüğünü görüyoruz.

“file11” dosyasının imtiyazını dosyanın sahibinin ve grubunun dosyayı “read” hakkı olacak şekilde değiştirelim.

# chmod 440 file11

# ls -l file11

-r–r—–   1 root     root          19 Aug 30 16:32 file11

#

“candy” kullanıcısına geçiş yapalım ve “candy” kullanıcısı file11 dosyasını “cat” komutu ile görüntülesin. Bu durumda  “candy”, ne dosyanın sahibi ne de dosyanın grubunun bir üyesi olduğundan “other” a uygulanan imtiyazların kendisi için geçerli olacağı gerçeğiyle dosyayı okuyamamasını bekleriz.

# su – candy

Oracle Corporation      SunOS 5.10      Generic Patch   January 2005

$

$ cat /var/test/file11

cat: cannot open /var/test/file11

$

Tekrar “root” kullanıcısına geri dönelim ve “file11” için “candy” kullanıcısına read ACL girişi ekleyelim.

# setfacl -m user:candy:4 file11

# ls -l /var/test/file11

-r–r—–+  1 root     root          19 Aug 30 16:32 /var/test/file11

# getfacl /var/test/file11

# file: /var/test/file11

# owner: root

# group: root

user::r–

user:candy:r–          #effective:r–

group::r–              #effective:r–

mask:r–

other:—

#

“ls -l” komut çıktısına göre imtiyaz alanının sonunda “+” işareti olduğu için dosya ACL girişine sahiptir. Bu çıktıya göre “candy” kullanıcısının “read” hakkı yoktur. Bu komut bize sadece bu dosya için bir ACL girişi olduğunu söylemektedir.  “getfacl” çıktısı bize spesifik olarak candy kullanıcısının bu dosya için read hakkı olduğunu gösterir.

Bu durumda tekrar “candy” kullanıcısına giriş yapalım ve dosyayı okumaya çalışalım.

# su – candy

Oracle Corporation      SunOS 5.10      Generic Patch   January 2005

$

$ cat /var/test/file11

Success for file11

$

“candy” kullanıcısı beklediğimiz gibi dosyayı okuyabilmektedir.

“file22” dosyasıyla ilgili birkaç örnek yapalım.  “file22” üzerinde henüz bir işlem yapmadık sadece “touch” komutuyla bu dosyayı oluşturmuştuk. Aşağıda olan iki komut çıktısından da görüleceği gibi bu dosya üzerinde tanımlı ACL yoktur.

# getfacl file22

# file: file22

# owner: root

# group: root

user::rw-

group::r–              #effective:r–

mask:r–

other:r—

# ls -l file22

-rw-r–r–   1 root     root           0 Aug 30 16:32 file22

#

“file22” dosyasının grubuna read, write ve execute hakları verelim. Bu işlemin ardından “ls -l” ve “getfacl” komut çıktılarını karşılaştıralım. Aşağıdaki çıktıda görüleceği gibi  mask değeri ile gruba verilen imtiyaz uyuşmaktadır.

# chmod g=rwx file22

# ls -l file22

-rw-rwxr–   1 root     root           0 Aug 30 16:32 file22

# getfacl file22

# file: file22

# owner: root

# group: root

user::rw-

group::rwx              #effective:rwx

mask:rwx

other:r–

#

“file22” nin mask değerini sadece “read” hakkı ile sınırlayalım. Yine aynı şekilde mask değeri ile grup imtiyazının uyuştuğunu görebiliriz.

# setfacl -m mask:r– file22

# getfacl file22

# file: file22

# owner: root

# group: root

user::rw-

group::r–              #effective:r–

mask:r–

other:r–

# ls -l file22

-rw-r–r–   1 root     root           0 Aug 30 16:32 file22

#

“group1” isimli bir grup oluşturalım. Bu grup için read ve execute hakkı verelim.

# groupadd -g 101 group1

#

# setfacl -m group:group1:5 file22

“file22” için “candy” kullanıcısına sadece “execute” hakkı verelim.

# setfacl -m user:candy:1 file22

“file22” için ACL listesini görüntüleyelim.

# getfacl file22

# file: file22

# owner: root

# group: root

user::rw-

user:candy:–x          #effective:—

group::r–              #effective:r–

group:group1:r-x                #effective:r–

mask:r–

other:r—

# ls -l file22

-rw-r–r–+  1 root     root           0 Aug 30 16:32 file22

#

Komutlardan görüldüğü gibi, mask değerini daha önceden read olarak set ettiğimiz için; kullanıcıya “execute” hakkı ve group1 grubuna read ve execute hakkı  vermemize rağmen, etkin (effective) değerin group1 için sadece read ve candy kullanıcısı için ise hiçbir hak olmadığını görmekteyiz.

Şimdi mask değerini file22 için rwx olarak set edelim.

# setfacl -m mask:rwx file22

# getfacl file22

# file: file22

# owner: root

# group: root

user::rw-

user:candy:–x          #effective:–x

group::r–              #effective:r–

group:group1:r-x                #effective:r-x

mask:rwx

other:r–

#

Bizim amacımız “candy” kullanıcısına “execute” hakkı vermekti. “group1” isimli gruba ise “read” ve “execute” hakkı vermekti. “getfacl” çıktısına göre bu amacımıza ulaşmış bulunuyoruz. Dosyanın sahibi olan grub imtiyazının read-only olduğuna dikkat edin.

Örneklerden de görüleceği gibi standart unix imtiyaz mekanizmasının yetmediği durumlarda dosyanın sahibi olan grubun bir üyesi olmasalar bile spesifik kullanıcılara  haklar verilebilmekte yine farklı gruplara ihtiyaç duyulan imtiyazlar tanımlanabilmektedir.

31 Ağustos 2016 Salı – Asiye yiğit

Kaynakça:

Solaris Administration Guides