AppArmor: Linux Sistem Güvenliğinde Esnek ve Güçlü Bir Kalkan

Linux sistemlerinde güvenlik, katmanlı bir yapıya sahiptir. Bu katmanların en kritik noktalarından biri, uygulamaların sistem kaynaklarına erişimini kısıtlayan Zorunlu Erişim Denetimi (Mandatory Access Control - MAC) sistemleridir. AppArmor, bu alanda özellikle kullanım kolaylığı ve esnekliği ile öne çıkan, Ubuntu, Debian ve Pardus gibi dağıtımlarda varsayılan olarak gelen bir güvenlik modülüdür.


1. AppArmor Nedir?

AppArmor (Application Armor), Linux çekirdeği (kernel) içinde çalışan bir güvenlik modülüdür. Temel amacı, sistemdeki uygulamaların (programların) sadece kendilerine izin verilen dosyalara, ağ bağlantılarına ve sistem yeteneklerine erişmesini sağlamaktır.

Geleneksel Linux izinlerinde (rwx), bir uygulama onu çalıştıran kullanıcının tüm yetkilerine sahiptir. Eğer bir uygulama (örneğin bir web tarayıcısı) ele geçirilirse, saldırgan kullanıcının tüm dosyalarına erişebilir. AppArmor ise "En Az Yetki İlkesi" (Principle of Least Privilege) çerçevesinde, uygulamanın yetkilerini kullanıcıdan bağımsız olarak sınırlar.


2. Temel Çalışma Mekanizması: Profiller

AppArmor'un kalbinde "Profiller" yer alır. Her profil, belirli bir uygulamanın ne yapabileceğini tanımlayan düz metin dosyalarıdır.

  • Profil Dosyaları: Genellikle /etc/apparmor.d/ dizininde saklanır.

  • Yol Bazlı Kısıtlama: AppArmor, SELinux'un aksine dosya yollarını (path) temel alır. Örneğin, /usr/bin/curl için yazılan bir profil, sadece bu dosya yolundaki uygulamanın davranışlarını kontrol eder.

Profil Modları:

AppArmor profilleri iki ana modda çalışabilir:

  1. Enforcement (Zorlama): Uygulama, profilin dışına çıktığında işlem engellenir ve günlük (log) kaydı tutulur.

  2. Complain (Şikayet/Öğrenme): Uygulamanın profil dışına çıkmasına izin verilir ancak bu ihlal günlüklere kaydedilir. Yeni profiller geliştirirken uygulamanın neye ihtiyaç duyduğunu anlamak için kullanılır.


3. AppArmor Profil Yapısı ve Sözdizimi

Bir profil dosyası genellikle uygulamanın tam yolu ile başlar. İçerisinde dosya erişim izinleri ve ağ yetkileri belirtilir.

Örnek bir kısıtlama satırı:

  • /var/log/apache2/*.log w, -> Apache'nin sadece log dosyalarına yazma (write) izni olduğunu belirtir.

  • /etc/hosts r, -> Sadece okuma (read) izni verir.

İzin Kodları:

  • r: Okuma (Read)

  • w: Yazma (Write)

  • ux: Kısıtlanmamış yürütme (Unconfined execute)

  • Px: Profil altında yürütme (Profiled execute)


4. AppArmor Komutları ve Yönetimi

AppArmor yönetimi için apparmor-utils paketi ile gelen araçlar kullanılır. İşte en sık kullanılan komutlar:

KomutAçıklama
aa-statusAppArmor'un durumunu ve yüklü profilleri gösterir.
aa-complain /yol/Belirli bir profili "öğrenme" moduna alır.
aa-enforce /yol/Belirli bir profili "zorlama" moduna alır.
aa-genprofYeni bir profil oluşturmak için sihirbaz başlatır.
aa-logprofLogları inceleyerek mevcut profilleri günceller.
systemctl reload apparmorProfillerde yapılan değişiklikleri sisteme yükler.

5. AppArmor vs SELinux: Fark Nedir?

Linux dünyasında iki ana MAC sistemi vardır. Pardus ve Ubuntu kullanıcılarının AppArmor'u tercih etme sebepleri şunlardır:

  • Kolaylık: AppArmor dosya yollarını kullanır, SELinux ise dosya etiketlerini (labels). AppArmor profillerini okumak ve yazmak çok daha basittir.

  • Öğrenme Eğrisi: SELinux oldukça karmaşıktır ve yanlış yapılandırma sistemin açılmamasına neden olabilir. AppArmor daha kullanıcı dostudur.

  • Hız: Küçük ve orta ölçekli sistemlerde AppArmor'un yönetim yükü daha azdır.


6. Neden Kullanmalıyız? (Özellikle Kurumsal ve Eğitim Ortamlarında)

Özellikle okul ağları veya kamu kurumlarında kullanılan Pardus ETAP gibi sistemlerde AppArmor hayati önem taşır:

  • Sıfır Gün Saldırıları: Bir uygulamada açık olsa bile, AppArmor o uygulamanın sistemin geri kalanına sıçramasını (Lateral Movement) engeller.

  • Kullanıcı Hataları: Öğrencilerin veya yetkisiz kişilerin sistem kritik dosyalarına (config dosyaları gibi) uygulama üzerinden erişmesini kısıtlar.

  • İzolasyon: Sunucu tarafında (örneğin kurduğunuz Samba veya NFS servislerinde) sadece gerekli klasörlere erişim izni vererek veri güvenliğini sağlar.


Sonuç

AppArmor, "kur ve unut" mantığına yakın çalışsa da, sistem yöneticileri için sunduğu aa-logprof gibi araçlarla dinamik bir güvenlik yönetimi sağlar. Güvenli bir Linux deneyimi için sadece güvenlik duvarı (firewall) yeterli değildir; uygulama düzeyinde kısıtlama sağlayan AppArmor, savunmanızın en kritik hatlarından biridir.


Python ile yazdığın bir uygulama üzerinden gitmek, AppArmor'un mantığını anlamak için en iyi yoldur. Diyelim ki okulundaki etkileşimli tahtalar için geliştirdiğin, sadece belirli bir dizindeki Excel dosyalarını okuyan ve öğrenci seçen bir Python uygulaman var.

Bu uygulamanın sistemin diğer dosyalarına (örneğin /etc/shadow veya kullanıcıların özel dosyalarına) erişmesini istemediğimizi varsayalım.

Uygulama İçin AppArmor Profili Oluşturma Adımları

Uygulamamızın adı ogrenci_secici.py olsun ve /opt/okul_araclari/ dizininde bulunsun.

1. Profil Hazırlığı (aa-genprof)

İlk adımda AppArmor'un uygulamayı izlemesini sağlarız. Terminalde şu komutu çalıştır:

Bash:
sudo aa-genprof /opt/okul_araclari/ogrenci_secici.py

Bu komut arka planda uygulamayı izlemeye başlar. Sizden uygulamayı başka bir terminalde çalıştırmanızı isteyecektir.

2. Uygulamayı Çalıştırın ve Test Edin

Uygulamanızı normal bir şekilde kullanın (dosya açın, işlem yapın). AppArmor bu sırada uygulamanın hangi dosyalara dokunduğunu kaydeder.

3. İzinleri Tarama ve Onaylama (aa-logprof)

Uygulamayı kapattıktan sonra aa-genprof ekranına geri dönün ve "S" (Scan) tuşuna basın. AppArmor size sorular soracaktır:

  • "Bu uygulama /etc/python3.11/ dizinine okuma erişimi istiyor, izin verilsin mi?" -> (A)llow

  • "Bu uygulama öğrenci_listesi.xlsx dosyasına erişmek istiyor?" -> (A)llow

Tüm seçimleri yaptıktan sonra "F" (Finish) ile profili kaydedin.


Oluşan Profil Dosyasını İnceleyelim

Oluşturulan profil /etc/apparmor.d/opt.okul_araclari.ogrenci_secici.py yolunda saklanır. İçeriği şuna benzer:

Plaintext:
#include <tunables/global>

/opt/okul_araclari/ogrenci_secici.py {
  #include <abstractions/base>
  #include <abstractions/python>

  # Sadece bu klasördeki excel dosyalarını okuyabilir
  /media/**/ogrenci_listeleri/*.xlsx r,
  
  # Log dosyasına yazma izni
  /var/log/ogrenci_secici.log w,

  # Geri kalan her şey varsayılan olarak yasaktır (Deny by default)
}

Güvenlik Testi: Profil Gerçekten Çalışıyor mu?

Profilini Enforce (Zorlama) moduna alalım:

Bash:
sudo aa-enforce /etc/apparmor.d/opt.okul_araclari.ogrenci_secici.py

Şimdi uygulamanın koduna geçici olarak /etc/shadow dosyasını okumaya çalışan bir satır ekle ve çalıştır. Python, "Permission Denied" hatası verecektir. Üstelik bu hata, dosya izinleri (chmod) doğru olsa bile gerçekleşir; çünkü AppArmor çekirdek seviyesinde bu erişimi engeller.

AppArmor Loglarını İzleme

Engellenen bir işlem olduğunda bunu şu komutla görebilirsin:

Bash
sudo dmesg | grep -i apparmor
# veya
sudo tail -f /var/log/syslog | grep -i apparmor

Bu yöntemle, okulda kullandığın tüm yerli araçları (Python, Flutter veya Tauri fark etmeksizin) bir "güvenlik kafesi" içine alabilirsin.


Tauri uygulamaları hem bir Rust arka ucuna hem de bir Webview (frontend) katmanına sahip olduğu için AppArmor profili oluştururken biraz daha dikkatli olmak gerekir. Çünkü uygulama hem sistem kaynaklarına erişmeye çalışır hem de bir tarayıcı motoru (Pardus'ta genellikle WebKitGTK) çalıştırır.

Tauri ile geliştirdiğin "Pardus Sınıf Asistanı" üzerinden bir senaryo kuralım. Bu uygulamanın USB takıldığında uyarı verdiğini ve Excel'den veri okuduğunu biliyoruz.

Tauri Uygulaması İçin AppArmor Profil Stratejisi

Tauri uygulamaları derlendikten sonra genellikle /usr/bin/ veya uygulamanın kurulu olduğu dizinde tek bir binary (ikili dosya) olarak bulunur.

1. Profil Dosyasını Oluşturma

Uygulamanın adının pardus-asistan olduğunu varsayalım. /etc/apparmor.d/usr.bin.pardus-asistan dosyasını oluşturup şu temel yapıyı içine yerleştirebiliriz:

Plaintext:
#include <tunables/global>

/usr/bin/pardus-asistan {
  #include <abstractions/base>
  #include <abstractions/nameservice>
  #include <abstractions/fonts>
  #include <abstractions/dconf>

  # 1. Tauri/Webview İçin Gereksinimler
  # Arayüzün çizilmesi için gerekli kütüphaneler ve grafik erişimi
  /usr/share/icons/** r,
  /usr/share/themes/** r,
  /usr/lib/x86_64-linux-gnu/webkit2gtk-4.0/** rm,

  # 2. USB Algılama ve Cihaz Erişimi (Asistan özelliği için)
  # USB takıldığını anlamak için udev ve sysfs okuma izni
  /sys/devices/** r,
  /run/udev/data/* r,

  # 3. Dosya Erişimi (Excel Listeleri)
  # Sadece kullanıcı dizinindeki Belgerler altındaki Excel'lere erişim
  owner @{HOME}/Belgeler/*.xlsx r,
  owner @{HOME}/Belgeler/*.xls r,

  # 4. Ses Kontrolü (Zil sesi veya sesli uyarılar için)
  #include <abstractions/audio>
  /run/user/[0-9]*/pulse/native rw,

  # 5. Yasaklama Örneği (Hassas Dosyalar)
  deny @{HOME}/.ssh/* rw,
  deny /etc/shadow rw,
}

Tauri'ye Özel Kritik Notlar

  • m (Memory Map) İzni: Tauri uygulamaları kütüphaneleri belleğe haritalamak (map) zorundadır. Bu yüzden /usr/lib/** gibi yollarda sadece r (read) değil, rm (read ve memory map) izinlerini kullanmalısın.

  • Ağ Erişimi: Eğer asistanın bir API'ye bağlanmıyorsa, ağ erişimini tamamen kapatabilirsin. Bu, uygulamanın ele geçirilmesi durumunda dışarıya veri sızdırmasını engeller. Profilin içine hiçbir ağ kuralı yazmazsan AppArmor varsayılan olarak ağı yasaklar.

  • owner Kısıtlaması: Yukarıdaki örnekte owner @{HOME}/Belgeler/*.xlsx kullandık. Bu, uygulamanın sadece o anki oturumu açan kullanıcının dosyalarına erişmesini sağlar. Başka bir öğretmenin veya sistemin dosyalarına erişemez.


Uygulama ve İzleme

  1. Profili Aktif Et:

    Bash:
    sudo apparmor_parser -r /etc/apparmor.d/usr.bin.pardus-asistan
    sudo aa-enforce /usr/bin/pardus-asistan
    
  2. Tauri Loglarını Kontrol Et:

    Tauri uygulamanı çalıştırırken bazı özellikler (örneğin ses çıkmıyorsa veya USB'yi görmüyorsa) çalışmayabilir. Hemen şu komutla AppArmor'un neyi engellediğini gör:

    Bash
    sudo aa-status --complaining
    # Veya anlık olarak:
    tail -f /var/log/kern.log | grep apparmor
    

Eğer uygulamanın bir özelliği engelleniyorsa, log satırında operation="open", requested_mask="r", name="/dosya/yolu" şeklinde bir hata görürsün. Bu yolu profile ekleyerek güvenliği bozmadan uygulamayı çalışır hale getirebilirsin.

Yorumlar

Bu blogdaki popüler yayınlar

Android Telefon/Tablet Ekranını Pardus ETAP 23 Yüklü Akıllı Tahtaya Yansıtma

Pardus Etap 23’de Unutulmuş Etap Yetkili Parolasını Sıfırlama

Pardus Etap 23 Yazıcı Kurulumu