DAC, ACL, MAC

İzinlerle ilgili sanıyorum şimdilik son yazım bu olacak. Son olarak birkaç kavrama daha bakalım.

DAC, Discretionary Access Controls

Discretionary, isteğe bağlı demektir. Şimdiye kadar gördüğümüz klasik owner:group ve rwx bazlı izin modeli böyle bir modeldir. Peki neden buna isteğe bağlı diyoruz?

Bir açıklama şöyle: Kullanıcı kendi dosyasını isteğe bağlı olarak başkalarına açabiliyor, kapatabiliyor. Kendi kaynağını kendi yönetiyor. Sistem yöneticinin buna engel olması bu modelde daha zor. Bu modelde ayrıca root kullanıcısının sınırsız olarak her yere erişmesi de potansiyel bir güvenlik problemi. Çünkü bir kişi veya proses root yetkisi kazanırsa veya root yetkisinde çalışan proseste güvenlik açığı olursa işler karışabiliyor.

MAC, Mandatory Access Controls

MAC türü izinler ise DAC’tan daha yüksek çözünürlüğe sahip ve daha katı engellemeler içerebiliyor. Örneğin bir sunucu çalıştırıyorsunuz, içinde DNS sunucusu var, BIND mesela, bu arkadaş root yetkileri ile çalışıyor. BIND’ta bir hata olsa ve bir hacker ele geçirse root yetkisini kullanarak her yere erişebilir. Fakat MAC sistemlerinde BIND’in erişeceği dosyaları limitleyebiliyorsunuz, root olsa bile. Diyorsunuz ki BIND kendi konfigürasyon dosyası olan, atıyorum /etc/bind.conf dışında bir dosyaya erişemesin. Bu sayede birisi BIND’ı ele geçirse bile başka dosyalara erişemiyor.

Bu elbette kernelde olması gereken bir özellik. Uzun yıllardır var olan NSA tarafından geliştirilen 🤔 SELinux ve AppArmor gibi sistemler birer MAC örneğidir. Örneğin bilgisayarınıza Fedora kurduğunuzda SELinux açık gelmektedir. Ben burada detaya girmeyeceğim çünkü bunları konfigüre etmek ve kullanmak ayrı bir iş, sadece varlıklarından bahsetmek istedim.

Bu not serisi boyunca sadece DAC’ı düşüneceğiz.

ACL, Access Control List

ACL, DAC’ın genişletilmiş hali gibi düşünebilir. Her ne kadar Arch Linux Wiki’de MAC’ın altında anlatılmış olsa da standart Linux izinlerinin genişletilmiş hali olarak düşünebiliriz.

Linux’un klasik izin mimarisi bazı durumlarda yetersiz gelebilir. Örneğin bir dosyaya farklı kullanıcılar için farklı erişim hakkı veremiyorsunuz. Kullanıcı veya grup bazlı bir yetki veriyoruz ama bir kullanıcı listesi verip tek tek izin belirtemiyoruz. İşte ACL bu tarz konularda yardımımıza yetişiyor.

Bunun çalışabilmesi için dosya sistemimizin bu yapıyı desteklemesi ve o şekilde mount edilmesi gerekiyor, sonuçta disk üzerine bu verilerin kaydedilmesi lazım. mount işlemi sırasında acl seçeneğinin verilmiş olması gerekiyor. ACL, uzun yıllardır kernelde ve ext4 gibi Linux native dosya sistemlerinde olan bir özellik. Muhtemelen günümüzdeki tüm Linux sistemlerinde kullanılabilir durumdadır.

alper@brs23-2204:~$ cat /etc/mke2fs.conf | grep acl
  default_mntopts = acl,user_xattr

Örneğin default olarak benim sistemim mount ederken acl seçeneğini açıyor. Bildiğim kadarıyla ACL’nin çalışması için extended user attributes seçeneğinin de, user_xattr, açık olması gerekiyor.

getfacl komutu ile o dosyanın ACL ayarlarını görebiliyoruz. Sistemde acl yoksa bile bu hata vermeyebilir, DAC ayarlarını gösterecektir.

alper@brs23-2204:~/sys$ touch dosya

alper@brs23-2204:~/sys$ getfacl dosya
# file: dosya
# owner: alper
# group: alper
user::rw-
group::rw-
other::r--

Şimdi bu dosya üzerinde bir ACL kuralı ekleyelim:

alper@brs23-2204:~/sys$ setfacl -m "u:user1:rwx" dosya

alper@brs23-2204:~/sys$ ls -l dosya
-rw-rwxr--+ 1 alper alper 0 Jul 15 12:02 dosya

ACL kuralı eklenmiş dizin ve dosyalar ls çıktısında + ile işaretlenir. Ayarlara bakalım:

alper@brs23-2204:~/sys$ getfacl dosya
# file: dosya
# owner: alper
# group: alper
user::rw-
user:user1:rwx
group::rw-
mask::rwx
other::r--

Burada user1 in dosya üzerinde rwx hakkı oldu, test edelim.

user1@brs23-2204:/opt/sys$ echo "Ben user1 im" > dosya
user1@brs23-2204:/opt/sys$ cat dosya
Ben user1 im

user1@brs23-2204:/opt/sys$ ls -l dosya
-rw-rwxr--+ 1 alper alper 13 Jul 15 12:06 dosya

Normalde user1 bu dosya için others kategorisindedir ve yazma hakkı yoktur, r--. Fakat ACL ile user1 e açıkça yazma hakkı verdiğimiz için bu kural sayesinde dosyaya yazabildi.

Burada amacım sadece ACL’den bahsetmek olduğu için detaylandırmayacağım, internette bir çok kaynak mevcut. [1] Sadece varlığından bahsetmek istedim.


Bir de RBAC diye bir şey var, Role Based Access Control. Şu aşamada detaylandırmaya gerek yok.

Kaynaklar