Linux namespaces nedir?
Linux namespaces, bir grup sürecin sistemin belirli kaynaklarına dair kendi yalıtılmış görünümüne sahip olmasını sağlayan çekirdek özelliğidir. Bir namespace içindeki süreç, yalnızca o alana ait süreçleri, ağ arayüzlerini ya da bağlama noktalarını görür. Konteyner teknolojisinin temelini oluşturur.
Namespaces kaynak kullanımını sınırlamaz; bunu cgroups yapar. Namespaces yalnızca neyin görünür olacağını belirler, yani yalıtımın görünürlük boyutunu sağlar.
Nasıl çalışır?
Her namespace türü farklı bir kaynağı yalıtır:
- pid: süreç numaraları; konteynerin içindeki ilk süreç 1 numara olarak görünür.
- net: ağ arayüzleri, yönlendirme tabloları ve portlar.
- mnt: bağlama noktaları ve dosya sistemi görünümü.
- uts: ana bilgisayar adı.
- ipc: süreçler arası iletişim kaynakları.
- user: kullanıcı ve grup kimlikleri; içeride root olan, dışarıda yetkisiz bir kullanıcıya eşlenebilir.
Yeni namespace unshare komutu ya da clone sistem çağrısıyla oluşturulur. lsns komutu sistemdeki namespaces’i listeler; nsenter ise var olan bir namespace’e girmeyi sağlar.
Sunucu ve hosting ortamında
Docker, Podman ve LXC konteynerleri her biri için ayrı namespaces oluşturur. Kullanıcı namespace’i sayesinde konteyner içindeki root kullanıcısının ana makinedeki yetkisi sınırlandırılır. systemd de bazı servisleri PrivateTmp, PrivateNetwork gibi ayarlarla namespaces içinde çalıştırarak yalıtım sağlar.
Nasıl uygulanır?
- Konteynerlerde kullanıcı namespace’ini (rootless mod) tercih edin.
- Gereksiz yere
--net=hostveya--pid=hostgibi ana makine namespace’lerini paylaşmayın. - systemd servislerinde
PrivateTmp,ProtectSystemvePrivateDevicesgibi yalıtım ayarlarını kullanın. - Çekirdeği güncel tutun; namespace kaçışı açıkları çekirdek güncellemeleriyle kapatılır.
- Namespace yalıtımını seccomp ve AppArmor/SELinux ile destekleyin.
Sık yapılan hatalar
- Namespace yalıtımını sanal makine düzeyinde güvenlik sanmak.
- Konteynerle ana makinenin ağ ya da süreç alanını gereksiz paylaşmak.
- Ayrıcalıklı konteynerlerde namespace sınırlarının büyük ölçüde zayıfladığını bilmemek.
- Kullanıcı namespace’ini etkinleştirmeyip içerideki root’u ana makinede root olarak bırakmak.
Sık sorulan sorular
Namespaces ile konteyner aynı şey midir?
Hayır. Konteyner; namespaces, cgroups, dosya sistemi imajı ve güvenlik profillerinin birlikte kullanılmasıyla oluşur. Namespaces bu yapının yalıtım kısmıdır.
Namespaces güvenlik sınırı mıdır?
Güçlü bir yalıtım sağlar ama çekirdeği paylaştığı için çekirdek açıkları sınırı aşabilir. Daha sıkı yalıtım için sanal makine kullanılır.
Hangi namespaces çalışıyor nasıl görürüm?
lsns komutu mevcut namespace’leri listeler. Bir sürecin namespace’lerini /proc/PID/ns/ altından da inceleyebilirsiniz.
İlgili terimler
- logrotatelogrotate, günlük dosyalarını belirli aralıklarla döndürüp sıkıştıran ve eskilerini silen, disk dolmasını önleyen Linux aracıdır.
- LTS (Uzun dönem destek)Daha uzun süre güvenlik güncellemesi alan sürüm kolu.
- LVMLVM, Linux’ta fiziksel diskleri esnek mantıksal birimler halinde yönetmeyi sağlayan, boyut değişimi ve anlık görüntü sunan disk katmanıdır.
- Paket yöneticisiYazılımı kurup güncelleyen ve bağımlılıklarını yöneten araç (apt, dnf, yum).
- SELinuxSüreçlerin erişimini zorunlu politikalarla kısıtlayan Linux güvenlik modülü.
- Swap alanıSwap alanı, fiziksel bellek dolduğunda az kullanılan bellek sayfalarının geçici olarak diske taşındığı alandır.