| Geliştirici | Immunix (1998–2005) Novell / SUSE (2005–2009) Canonical ve açık kaynak topluluğu (2009–günümüz) |
|---|---|
| İlk yayınlanma | 1 Ocak 1998) (1998-01-01) |
| Programlama dili | C, Python, C++, sh |
| İşletim sistemi | Linux |
| Tür | LSM (Linux Security Modules), Zorunlu Erişim Denetimi (MAC) |
| Lisans | GNU GPL |
| Resmî sitesi | apparmor.net |
AppArmor ("Application Armor"), Linux çekirdeği için geliştirilmiş, sistem yöneticilerinin programların yeteneklerini ve kaynak erişimlerini program başına tanımlanan güvenlik profilleriyle sınırlandırmasına olanak tanıyan bir Linux Güvenlik Modülü (LSM) mimarisidir. Geleneksel Unix/Linux isteğe bağlı erişim denetimi (DAC) modelini zorunlu erişim denetimi (MAC) ile tamamlayarak sistem güvenliğini artırır.
AppArmor, rakibi olan SELinux'un karmaşık güvenlik etiketleme sistemine alternatif olarak doğrudan dosya sistemi yolları (pathname) üzerinden kural işletir. Bu sayede öğrenmesi, profil yazması ve yönetimi çok daha kolay kabul edilir. Ekim 2010'da yayımlanan Linux çekirdeği 2.6.36 sürümünden bu yana resmi çekirdek ana hattına (mainline) dahildir.
AppArmor; Ubuntu (Ubuntu 7.10'dan bu yana), Debian (Debian 10 Buster'dan bu yana) ve gizlilik odaklı Tails ile Whonix dağıtımlarında varsayılan güvenlik katmanıdır. 2009 yılından itibaren projenin ana geliştiricisi ve hamisi Canonical firmasıdır.
Genel Bakış
Geleneksel Linux sistemlerinde bir sürecin erişim izinleri, o süreci başlatan kullanıcının yetkilerine (kullanıcı kimliği / UID) bağlıdır. Bir saldırgan web sunucusu (Apache, Nginx), veritabanı (MySQL) veya bir PDF görüntüleyici gibi bir uygulamadaki arabellek aşımı (buffer overflow) açığını istismar ettiğinde, o uygulamanın sahip olduğu tüm hakları elde eder. Uygulama root yetkisiyle çalışıyorsa tüm sistem ele geçirilebilir.
AppArmor bu tehdidi ortadan kaldırmak amacıyla "en az ayrıcalık" (least privilege) ilkesini uygular:
- Her uygulama için `/etc/apparmor.d/` dizini altında düz metin formatında bir profil tanımlanır.
- Profil; programın hangi dosyalara erişebileceğini (okuma, yazma, çalıştırma), hangi ağ soketlerini açabileceğini ve hangi Linux yeteneklerini (POSIX capabilities) kullanabileceğini açıkça belirler.
- Program `root` haklarıyla çalışsa dahi, profilinde açıkça tanımlanmamış hiçbir dosya veya sistem kaynağına erişemez.
- Örneğin; PDF görüntüleyicisi ele geçirilse bile, AppArmor profili nedeniyle kullanıcının gizli SSH anahtarlarına (`~/.ssh/id_rsa`) veya sistem parola dosyalarına erişmesi çekirdek düzeyinde engellenir.
Çalışma Modları
AppArmor profilleri iki temel modda işletilebilir:
| Çalışma Modu | İşleyiş Biçimi | Kullanım Amacı |
|---|---|---|
| Enforce (Zorunlu / İnfaz) | Profil kuralları harfiyen uygulanır. Kural dışı tüm dosya, ağ ve kaynak erişimleri çekirdek tarafından anında engellenir ve olay sistem günlüğüne (`auditd` veya `syslog`) kaydedilir. | Üretim ortamları ve aktif güvenlik koruması. |
| Complain (Öğrenme / Şikayet) | Profil kuralları denetlenir ancak ihlaller fiilen engellenmez. Programın normal çalışmasına izin verilirken, kural dışı eylemler günlüklere ayrıntılı olarak raporlanır. | Yeni profiller oluşturulurken programın normal davranışını gözlemlemek ve test etmek. |
Bir sistemde bazı profiller `enforce` modunda çalışırken diğerleri `complain` modunda bulunabilir. Uygulama için tanımlı hiçbir profil yoksa, uygulama "kısıtlanmamış" (unconfined) olarak geleneksel Linux izinleriyle çalışmaya devam eder.
Profil Mimarisi ve Sözdizimi
AppArmor profilleri, okunması ve yazılması son derece kolay olan düz metin dosyalarıdır. Genellikle sınırlandırılan çalıştırılabilir dosyanın tam yolunu yansıtacak şekilde adlandırılır (örn. `/usr/bin/evince` programı için `/etc/apparmor.d/usr.bin.evince` dosyası).
Temel Erişim İzinleri
Dosya kurallarında yaygın olarak kullanılan erişim bayrakları şunlardır:
- `r`: Okuma (Read)
- `w`: Yazma (Write)
- `a`: Dosya sonuna ekleme (Append)
- `k`: Dosya kilitleme (File locking)
- `l`: Sabit bağlantı oluşturma (Link)
- `m`: Belleğe yürütülebilir olarak eşleme (Memory map execute)
- `x`: Çalıştırma (Execute) — alt yürütme kurallarıyla birlikte kullanılır:
- `px`: Ayrılmış başka bir AppArmor profiline geçerek çalıştır.
- `ix`: Mevcut profilin kurallarını devralarak çalıştır.
- `ux`: Kısıtlamasız (unconfined) çalıştır.
Örnek Profil
Basit bir web uygulaması için örnek AppArmor profil sözdizimi:
#include <tunables/global>
/usr/bin/ornek_uygulama {
#include <abstractions/base>
#include <abstractions/nameservice>
# Salt okunur konfigürasyon erişimi
/etc/ornek_uygulama/* r,
# Günlük dosyasına yazma izni
/var/log/ornek_uygulama.log rw,
# Geçici dizinde dosya oluşturma
/tmp/ornek_* rw,
# Ağ üzerinden TCP soketi açabilme
network inet tcp,
# Kritik sistem dosyalarına açık erişim yasağı
deny /etc/shadow rwx,
deny /home/*/.ssh/* rwx,
}
Profillerde yer alan `#include <abstractions/...>` direktifleri, temel paylaşılan kütüphaneler (`libc`, yerel ayarlar, DNS çözümleme vb.) için önceden hazırlanmış ortak kuralları profile dahil ederek kural yazımını büyük ölçüde kolaylaştırır.
Yönetim ve Komut Satırı Araçları
AppArmor, sistem yöneticilerinin profilleri kolayca oluşturabilmesi ve denetleyebilmesi için bir dizi kullanıcı alanı aracı sunar:
- `aa-status`: Yüklü olan tüm profilleri, kaçının `enforce`, kaçının `complain` modunda olduğunu ve hangi çalışan süreçlerin korunduğunu gösterir.
- `aa-enforce [profil]`: Belirtilen profili derhal zorunlu (enforce) moda alır.
- `aa-complain [profil]`: Belirtilen profili öğrenme (complain) moduna alır.
- `aa-genprof [program]`: Yeni bir uygulama için interaktif profil oluşturma sihirbazıdır. Programı arka planda `complain` modunda çalıştırır, kullanıcının yaptığı eylemleri izler ve gerekli izinleri soru-cevap yöntemiyle profile ekler.
- `aa-logprof`: Sistem günlüklerindeki ihlal kayıtlarını tarayarak mevcut profillere eklenmesi gereken izinleri etkileşimli olarak yöneticiye önerir.
- `aa-disable [profil]`: Bir profili tamamen devre dışı bırakır ve çekirdekten kaldırır.
- `apparmor_parser`: Profilleri derleyip doğrudan Linux çekirdeğine yükleyen düşük seviyeli araçtır (`apparmor_parser -r /etc/apparmor.d/...`).
Tarihçe
AppArmor projesinin kökenleri, 1998 yılında Crispin Cowan liderliğindeki WireX Communications (daha sonraki adıyla Immunix) şirketinin geliştirdiği SubDomain projesine dayanır. SubDomain, bir programın farklı yetki alanları (domain) arasında dinamik geçiş yapabilmesini hedefliyordu.
- Novell ve SUSE Dönemi (2005–2009): Mayıs 2005'te kurumsal Linux dağıtıcısı Novell, Immunix firmasını satın aldı. SubDomain projesinin adı "AppArmor" olarak değiştirildi ve kaynak kodları yeniden yazılarak SUSE Linux Enterprise Server (SLES 10) ve openSUSE (10.1) sürümlerine varsayılan güvenlik mekanizması olarak dahil edildi. Eylül 2007'de Novell'in yeniden yapılanma sürecinde çekirdek AppArmor ekibini işten çıkarmasıyla geliştirme süreci yavaşladı.
- Canonical Hamiliği (2009–Günümüz): Ubuntu dağıtımının geliştiricisi Canonical, projenin potansiyelini görerek 2009 yılında AppArmor'un ana geliştirme sorumluluğunu üstlendi ve ekibi bünyesine kattı. Ubuntu 7.10 sürümünden itibaren depolara giren yazılım, zamanla Ubuntu ve Debian ekosisteminin standart güvenlik kalkanı haline geldi.
- Çekirdek Ana Hattına Katılım (2010): James Corbet ve Linus Torvalds'ın onayıyla AppArmor, 20 Ekim 2010'da yayımlanan Linux çekirdeği 2.6.36 sürümünde resmi Linux Güvenlik Modülleri (LSM) listesine dahil edildi.
- SUSE Ekosisteminin Geçişi (2025): Uzun yıllar AppArmor'un tescilli marka haklarını elinde bulunduran SUSE ekosistemi, 11 Şubat 2025 tarihinde openSUSE Tumbleweed, openSUSE Leap 16 ve SUSE Linux Enterprise 16 sürümlerinde varsayılan olarak SELinux'a geçildiğini duyurmuştur. Bununla birlikte AppArmor, kurulum sırasında alternatif bir LSM seçeneği olarak sunulmaya devam etmektedir.
SELinux ile Karşılaştırma
Linux dünyasındaki iki büyük Zorunlu Erişim Denetimi (MAC) sistemi olan AppArmor ve SELinux, güvenlik ve kullanılabilirlik dengesinde farklı felsefeleri benimser:
| Kriter | AppArmor | SELinux |
|---|---|---|
| Denetim Temeli | Yol Adı (Pathname): Dosyanın dosya sistemindeki yoluna göre kısıtlama uygular. | Düğüm (Inode / Tür): Dosyanın inode numarasına ve genişletilmiş özniteliğine (`security.selinux`) göre kısıtlama uygular. |
| Dosya Sistemi Bağımsızlığı | Genişletilmiş öznitelik gerektirmez; NFS gibi ağ paylaşımlarında doğrudan çalışır. | Dosya sisteminin xattr güvenlik etiketlerini desteklemesi zorunludur. |
| Öğrenme ve Yönetim Kolaylığı | Çok yüksektir; profiller insan tarafından okunabilir düz metinlerdir ve `aa-genprof` ile dakikalar içinde profil üretilebilir. | Düşüktür; etiketleme bağlamları, derleme araçları ve geniş kurallar bütünü derin uzmanlık gerektirir. |
| Sabit Bağlantı (Hard Link) Davranışı | Farklı bir yola sabit bağlantı oluşturulması durumunda kurallar atlatılabilir (Yama LSM modülü ile hafifletilmiştir). | Düğüm bazlı çalıştığı için sabit bağlantı oluşturulsa bile etiket korunur, güvenlik açığı oluşmaz. |
| Çok Seviyeli Güvenlik (MLS) | Bulunmaz; askeri sınıf Bell-LaPadula veya Biba gizlilik derecelendirmesi desteği yoktur. | Tam desteklidir. |
| Varsayılan Olduğu Dağıtımlar | Ubuntu, Debian, Tails, Whonix, Solus. | Red Hat Enterprise Linux, Fedora, CentOS, Rocky Linux, AlmaLinux, Android, openSUSE Leap 16. |
Ayrıca bakınız
- SELinux
- Linux Güvenlik Modülleri
- Smack (yazılım)
- Tomoyo Linux
- İsteğe bağlı erişim denetimi
- Zorunlu erişim denetimi
Dış bağlantılar
- Resmî site
- AppArmor GitLab Resmi Kaynak Kod Deposu
- Ubuntu Wiki AppArmor Rehberi
- Debian Wiki AppArmor Sayfası
- ArchWiki AppArmor Kılavuzu
Kaynakça
- ^ "The AppArmor: Application Armor Open Source Project on Open Hub: Languages Page". Open Hub. 11 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Ağustos 2016.
- ^ a b James Corbet (20 Ekim 2010). "The 2.6.36 kernel is out". LWN.net. 10 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Ekim 2010.
- ^ a b Ralf Spenneberg (Ağustos 2006). "Protective armor: Shutting out intruders with AppArmor". Linux Magazine. 21 Ağustos 2008 tarihinde kaynağından arşivlendi. Erişim tarihi: 2 Ağustos 2008.
- ^ "Linux 2.6.36". KernelNewbies. 20 Ekim 2010. 19 Ekim 2010 tarihinde kaynağından arşivlendi. Erişim tarihi: 20 Ekim 2010.
- ^ "New in Buster". Debian Wiki. 11 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Ocak 2020.
- ^ "AppArmor Documentation Wiki". GitLab. 14 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 15 Ocak 2025.
- ^ "AppArmor History". AppArmor Wiki. 11 Haziran 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Şubat 2024.
- ^ "Novell Acquires Immunix to Strengthen Linux Enterprise Security". Novell. 10 Mayıs 2005. Erişim tarihi: 10 Şubat 2024. Arşivlenmesi gereken bağlantıya sahip kaynak şablonu içeren maddeler (link)
- ^ Douglas DeMaio (13 Şubat 2025). "Tumbleweed Adopts SELinux as Default". openSUSE News. 10 Eylül 2026 tarihinde kaynağından arşivlendi. Erişim tarihi: 13 Şubat 2025.
- ^ Mayank Sharma (11 Aralık 2006). "SELinux: Comprehensive security at the price of usability". Linux.com. 11 Haziran 2023 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Haziran 2023.
