‫Tamam. Konteynerde root olarak çalışmamamız gerektiğini biliyoruz.
‫Ancak, konteynerin dışında, konteynerdeki kökün bu arada
‫ana bilgisayardaki hiçbir şeye doğrudan erişimi yoktur, değil
‫mi? Sadece bir konteynırda
‫kök olduğunuz için, hala orada hapsediliyorsunuz.
‫Ancak, bir sonraki seviyeye
‫geçmek istiyorsanız, kullanıcı konteynerde root'a bile sahipse, ana bilgisayara
‫çıkmak ister, çünkü bahsettiğimiz gibi bir
‫güvenlik açığı çekirdeği vardır, kirli
‫İnek veya Docker'daki başka bir güvenlik açığı veya başka bir şey gibi.
‫Ardından, burada yapacağınız bir sonraki adım, varsayılan olarak etkin olmayan
‫kullanıcı ad alanlarını etkinleştirmektir.
‫Burada bu konudan bahseden bir blog makalesine yönlendiren
‫bir bağlantı var.
‫Temel olarak, Docker yapılandırmasında ayarladığınız ana bilgisayar başına
‫bir ayardır. Docker JSON.
‫Docker'a, yeni bir konteyner oluşturduğunda bu konteyneri
‫ana bilgisayarda root olmayan
‫bir kullanıcı olarak çalıştırmasını söyler.
‫Yani, temel olarak orada birkaç program
‫var, Docker'ın konteynerinizi başlatmak için kullandığı diğer programlar
‫olan containerd ve runC.
‫Varsayılan olarak, bunlar root olarak çalışır.
‫Docker'ın sahip olduğu bir özellik, kullanıcı ad alanlarını
‫etkinleştirmektir; bu, esasen Docker'ın
‫bu kapsayıcıları oluştururken, Docker'ın yaptığı gibi kök olarak
‫çalışan bir alt işlem olarak ortaya çıkmayacağı anlamına gelir.
‫Onları yüksek numaralı bir kullanıcı olarak ortaya çıkaracaktır.
‫Bir tür, rastgele bir kullanıcı olması gerekmez, ancak üst düzey
‫bir kullanıcı.
‫Bu, konteynerin kullanıcının konteynerden
‫kaçabileceği herhangi bir güvenlik açığı olması
‫durumunda, ana bilgisayarda hala yalnızca bir kullanıcı olacağı
‫anlamına gelir. Çünkü bu konteyneri çalıştıran sürecin
‫kullandığı kullanıcı olarak hareket edeceklerdir.
‫Esasen runC.
‫runC programı bu konteyneri başlatan programdır
‫ve root değil yüksek numaralı bir kullanıcı olarak
‫çalışacaktır. Bu kullanıcının bu konteyner dışında
‫herhangi bir ayrıcalığı yoktur. Yani, bu özellik konteyner başına
‫değil, ana bilgisayar başına bir ayardır ve her şey
‫kullanıcı ad alanları altında çalışmaz.
‫Sadece denemek ve pratik yapmak zorundasınız.
‫Bunu bazı sunucularda etkinleştirmeniz, uygulamalarınızı bu sunucuda denemeniz
‫ve çalışıp çalışmadıklarına bakmanız gerekecektir.
‫Eğer yapmazlarsa, mimarinizi bölümlere ayırmanız
‫gerekecektir. Bir kümede kullanıcı ad alanlarını
‫uyguladığımda, genellikle kullanıcı ad alanlarının etkin olduğu belirli
‫çalışan düğümlerimiz olur.
‫Onu destekleyebilecek, onunla birlikte çalışabilecek programlar
‫burada çalışır.
‫Diğer her şeyin başka bir yerdeki normal Docker sunucularında
‫çalışması gerekiyor. Bu şekilde bölümlere ayırıyoruz.
‫Sunucuları iki sınıfa ayırıyoruz.
‫Bilirsiniz, örneğin bir DMZ çalıştırıyorsanız, benim
‫yapacağım şey DMZ'de tüm sunucularda tüm kullanıcı
‫ad alanlarını etkinleştirmek ve ardından orada
‫çalışan kapsayıcıların kullanıcı ad alanlarını desteklemesi
‫gerekir.
‫Uygulamalara bakıp kullanıcı ad alanlarını destekleyip desteklemediklerini
‫öğrenemezsiniz.
‫Bu bir... kullanıcı ad alanları Docker'a özgü
‫bir özellik değildir. Bu aslında konteynerinizin
‫bir isim alanında çalıştığı ve artık bu konteyneri
‫çalıştıran uygulamanın da biraz kilitlendiği anlamına
‫gelir.
‫Her şey bunu destekleyemez. Sadece pratik yapmanız
‫ya da başkalarının orada çalışıp çalışmadığını
‫görmek için biraz araştırma yapmanız
‫gerekecek. Bilirsiniz, MySQL ve bunun gibi
‫yaygın şeyler için. Ancak tabii ki, geliştirdiğiniz
‫kendi programlarınız için, çalışıp çalışmayacaklarını görmek için onları
‫test etmeniz gerekecek. Çalıştırdığım çoğu programın
‫ve yaygın dillerin kullanıcı ad alanlarında gayet iyi
‫çalıştığını söyleyebilirim. Kullanıcı ad alanlarıyla ilgili asıl
‫sorun, birimlere yazması veya bağlaması gereken bir uygulamanız
‫olduğunda, belki de kullanıcı dosyası yüklemeleriniz
‫olduğunda ve bunları birçok farklı kapsayıcıda paylaştığınızda
‫ortaya çıkar. Kullanıcı ad alanlarının imkansız olmadığı yer burasıdır.
‫Ana bilgisayarda diske yazılan dosyalar artık farklı
‫bir kullanıcı olarak yazıldığı için bu durum biraz karmaşık
‫bir hal alır.
‫Çünkü konteyneri yöneten ana bilgisayardaki bu işlem
‫farklı bir kullanıcıdır.
‫Dolayısıyla, bu dosyalarda farklı kullanıcı kimlikleri göreceksiniz ve bununla
‫başa çıkmanız gerekecek.
‫Bu noktada standart Linux izinleri vardır ve bu sorunları
‫çeşitli Linux standart yollarıyla otomatikleştirmeniz
‫ve çözmeniz gerekir.
‫Bu noktada gerçekten bir Docker sorunu bile değil.
‫Bu sadece ana bilgisayarda bir izin sorunu.