Mount Namespace
Temel Bilgiler
Bir mount namespace, bir grup işlem tarafından görülen dosya sistemi bağlama noktalarının izolasyonunu sağlayan bir Linux çekirdek özelliğidir. Her mount namespace'in kendi dosya sistemi bağlama noktaları kümesi vardır ve bir namespace içindeki bağlama noktalarına yapılan değişiklikler diğer namespace'leri etkilemez. Bu, farklı mount namespace'lerde çalışan işlemlerin dosya sistemi hiyerarşisinin farklı görüntülerine sahip olabileceği anlamına gelir.
Mount namespace'ler, her bir konteynerin diğer konteynerlerden ve ana sistemden izole edilmiş kendi dosya sistemi ve yapılandırmasına sahip olması gereken konteynerleştirme gibi durumlarda özellikle kullanışlıdır.
Nasıl Çalışır:
Yeni bir mount namespace oluşturulduğunda, ebeveyn namespace'inin bağlama noktalarının bir kopyası ile başlatılır. Bu, oluşturulduğunda yeni namespace'in ebeveyniyle aynı dosya sistemi görüntüsünü paylaştığı anlamına gelir. Bununla birlikte, namespace içindeki bağlama noktalarına yapılan herhangi bir sonraki değişiklik, ebeveyni veya diğer namespace'leri etkilemeyecektir.
Bir işlem, kendi namespace'i içinde bir bağlama noktasını değiştirdiğinde, örneğin bir dosya sistemi bağlama veya çıkarma yaptığında, değişiklik yalnızca o namespace'e özgüdür ve diğer namespace'leri etkilemez. Bu, her bir namespace'in kendi bağımsız dosya sistemi hiyerarşisine sahip olmasını sağlar.
İşlemler,
setns()
sistem çağrısını kullanarak namespace'ler arasında hareket edebilir veyaunshare()
veyaclone()
sistem çağrılarınıCLONE_NEWNS
bayrağıyla kullanarak yeni namespace'ler oluşturabilir. Bir işlem yeni bir namespace'e geçer veya bir tane oluşturursa, o namespace ile ilişkilendirilen bağlama noktalarını kullanmaya başlar.Dosya tanımlayıcıları ve inode'lar namespace'ler arasında paylaşılır, bu da bir namespace'deki bir işlemin bir dosyaya işaret eden açık bir dosya tanımlayıcısına sahip olduğu durumda, bu dosya tanımlayıcısını başka bir namespace'deki bir işleme geçirebileceği ve her iki işlemin aynı dosyaya erişeceği anlamına gelir. Bununla birlikte, dosyanın yolu bağlama noktalarındaki farklılıklar nedeniyle her iki namespace'de aynı olmayabilir.
Lab:
Farklı Namespace'ler Oluşturma
CLI
--mount-proc
parametresini kullanarak /proc
dosya sisteminin yeni bir örneğini bağladığınızda, yeni bağlama alanının o ad alanına özgü işlem bilgilerinin doğru ve izole bir görünümünü sağlarsınız.
Docker
Hangi ad alanında olduğunuzu kontrol edin
Bir işlemin hangi ad alanında olduğunu kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
Bu komut, işlem kimliği ($$
) ile /proc
dizinindeki ns
alt dizinindeki sembolik bağlantıları listeler. Her sembolik bağlantı, işlemin hangi ad alanında olduğunu gösterir.
Tüm Mount ad alanlarını bulun
```bash nsenter -m TARGET_PID --pid /bin/bash ``` Ayrıca, yalnızca root kullanıcısıysanız **başka bir işlem ad alanına girebilirsiniz**. Ve **bir tanımlayıcıya** (örneğin `/proc/self/ns/mnt`) işaret eden olmadan **başka bir ad alanına giremezsiniz**.
Yeni bağlantılar yalnızca ad alanı içinde erişilebilir olduğundan, bir ad alanının hassas bilgiler içermesi mümkündür ve bu bilgilere yalnızca ad alanından erişilebilir.
Bir şeyi bağla
Referanslar
Last updated