Rootless Docker etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Rootless Docker etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

26 Ocak 2026 Pazartesi

Docker ile Rootless Container Çalıştırma: Linux’ta Daha Güvenli ve Pratik Kurulum Rehberi

Rootless Docker nedir ve neden önemli?

Docker’ı çoğu sistemde “root” ayrıcalıklarıyla çalıştırmak alışıldık bir durumdur. Ancak bu yaklaşım, Docker daemon’una (dockerd) erişebilen bir kullanıcının sistem üzerinde beklenmedik yetkilere ulaşabilmesi gibi güvenlik riskleri doğurabilir. Rootless Docker, container’ları ve Docker daemon’unu root yetkisi olmadan, sıradan bir kullanıcı hesabı altında çalıştırarak saldırı yüzeyini azaltmayı hedefler. Özellikle çok kullanıcılı makinelerde, geliştirme sunucularında veya güvenlik hassasiyeti yüksek ortamlarda rootless yaklaşım belirgin bir avantaj sağlar.

Bu yazıda, güncel Linux dağıtımlarında rootless Docker’ı adım adım kuracak, ağ ve port yönlendirme gibi sık karşılaşılan noktaları netleştirecek ve kullanım sırasında işinize yarayacak pratik ipuçlarını paylaşacağım. Anlatım Debian/Ubuntu çizgisinde olsa da, Fedora/Arch gibi dağıtımlarda da kavramlar büyük ölçüde aynıdır.

Ön koşullar ve temel kavramlar

Rootless modun arkasında birkaç önemli mekanizma bulunur: Linux user namespace (kullanıcı isim alanı) sayesinde container içindeki “root”, host üzerinde gerçek root olmaz; ayrıca ağ tarafında çoğunlukla slirp4netns veya benzeri user-space ağ çözümleri devreye girer. Bu sayede Docker, root yetkisi olmadan da container’lara izolasyon sağlayabilir. Yine de bazı sınırlamalar vardır: düşük portlara (1-1023) doğrudan bind etmek, belirli network sürücüleri veya bazı kernel özellikleri rootless senaryoda farklı davranabilir.

Gerekenler: 1) Güncel bir Linux kernel (çoğu modern dağıtım yeterli), 2) Sisteminizde Docker’ın rootless araçları (paket içeriği veya docker-ce kurulumuyla gelir), 3) user namespace desteği (genelde açıktır), 4) Ağ için slirp4netns ve yardımcı araçlar (dağıtıma göre paket isimleri değişebilir).

Kurulum: Rootless Docker’ı etkinleştirme

Önce Docker’ın sisteminizde kurulu olduğundan emin olun. Dağıtımınızın deposundan veya Docker’ın resmi paketlerinden kurulumu yapabilirsiniz. Rootless kurulumun kritik adımı, kullanıcı bazında bir Docker daemon’u başlatmaktır. Bunun için Docker, genellikle dockerd-rootless-setuptool.sh adlı bir yardımcı betik sağlar.

Terminalde kullanıcı hesabınızla şu komutu çalıştırın (dosya yolu dağıtıma göre değişebilir):

dockerd-rootless-setuptool.sh install

Bu işlem, kullanıcı seviyesinde systemd servisleri tanımlar ve Docker socket’ini kullanıcı dizininize taşır. Kurulum tamamlandığında size çoğu zaman bir “DOCKER_HOST” önerisi de gösterilir. Tipik olarak rootless Docker socket’i şu yolda olur:

unix:///run/user/1000/docker.sock

Eğer systemd kullanıyorsanız, rootless daemon’u şu şekilde yönetebilirsiniz:

systemctl --user start docker

systemctl --user enable docker

Ardından Docker istemcisinin doğru socket’e bağlanması gerekir. Çoğu kurulum betiği ortam değişkeni önerir. Örneğin:

export DOCKER_HOST=unix:///run/user/1000/docker.sock

Bu değişkeni kalıcı yapmak için shell profilinize ekleyebilirsiniz (ör. ~/.bashrc veya ~/.zshrc). Sonrasında kontrol için:

docker info

Çıktıda “rootless” ibaresini ve “Server” kısmında kullanıcı-oturumuna bağlı socket yolunu görmeniz beklenir.

Portlar, ağ ve “1024 altı” konusu

Rootless Docker’da en çok takılınan başlık port yönlendirmedir. Normalde root yetkisiyle 80/443 gibi düşük portlara bind etmek kolaydır; rootless modda ise bu portlar için ek ayar gerekir. İki pratik yaklaşım var: 1) Container’ı 8080/8443 gibi yüksek portlarda yayınlayıp reverse proxy ile 80/443’e taşımak, 2) Rootless için port yönlendirme yardımcılarını kullanmak (dağıtıma ve kurulum biçimine göre değişebilir).

Basit bir test için Nginx container’ını 8080’e yayınlayabilirsiniz:

docker run --rm -p 8080:80 nginx:latest

Tarayıcıdan http://localhost:8080 ile kontrol edin. Bu senaryo rootless modda genellikle sorunsuz çalışır.

Depolama ve performans notları

Rootless modda depolama sürücüsü seçimi ve overlay kullanımı dağıtıma göre değişebilir. Modern sistemlerde “overlay2” çoğu zaman mümkün olsa da, bazı ortamlarda “fuse-overlayfs” devreye girer. Bu, uyumluluk açısından avantaj sağlarken belirli iş yüklerinde performansı etkileyebilir. Eğer çok sayıda küçük dosya operasyonu yapan build süreçleriniz varsa (ör. büyük Node.js bağımlılıkları veya yoğun katmanlı Dockerfile’lar), rootless ve rootful performansını kendi ortamınızda kıyaslamak mantıklıdır.

Bir diğer pratik nokta: Rootless kurulum, imajları ve container verisini kullanıcı dizinine yakın bir yerde tutar. Bu da çok kullanıcı bulunan sistemlerde kullanıcı başına ayrı izolasyon sağlar. Öte yandan disk kotası, home dizini şifrelemesi veya NFS üzerinde home kullanımı gibi durumlar performansı etkileyebilir.

Güvenlik açısından artılar ve dikkat edilmesi gerekenler

Rootless Docker, “Docker grubuna eklenen kullanıcı root olur” eleştirisini önemli ölçüde azaltır; daemon ve container’lar ayrıcalıksız çalıştığı için bir kaçış senaryosunun etkisi genellikle sınırlanır. Yine de bu, tüm risklerin sıfırlandığı anlamına gelmez. Container içindeki uygulamalarınıza dair zafiyetler, yanlış volume mount kullanımı veya hassas dosyaların container’a verilmesi gibi hatalar rootless modda da sorun çıkarabilir.

Öneriler: Gereksiz yetkileri kapatın, container’lara sadece ihtiyaç duyduğu klasörleri bind edin, mümkünse read-only mount kullanın, “latest” yerine sabit etiketli imajlar tercih edin ve düzenli olarak imajlarınızı güncelleyin.

Ne zaman rootless tercih edilmeli?

Eğer kişisel geliştirme makinenizde, paylaşımlı bir Linux sunucusunda veya CI ortamında Docker kullanıyorsanız rootless yaklaşım ciddi bir güvenlik artısı sağlar. “Ben zaten sudo kullanıyorum” diyenler için bile rootless, Docker daemon’u üzerinden gelebilecek ayrıcalık yükseltme risklerini azaltır. Bununla birlikte özel network gereksinimleri, düşük port zorunluluğu veya yüksek I/O performansı gibi ihtiyaçlarınız varsa rootful Docker hâlâ daha uygun olabilir. İdeal yaklaşım, iş yüküne göre iki modeli de doğru yerde kullanmaktır.

Bu rehberdeki adımlarla rootless Docker’ı aktif ettikten sonra günlük kullanım alışkanlıklarınız çok değişmeden, daha güvenli bir çalışma düzenine geçebilirsiniz. İlk etapta port ve ağ detaylarını netleştirmeniz, sonrasında da build ve runtime performansını kendi projenizde test etmeniz yeterli olacaktır.

22 Ocak 2026 Perşembe

Docker ile Rootless (Yetkisiz) Container Çalıştırma: Güvenli Kurulum ve İnce Ayar Rehberi

Rootless Docker nedir ve neden önemli?

Docker çoğu sistemde varsayılan olarak root yetkisiyle çalışan bir “daemon” kullanır. Bu, günlük kullanımda pratik olsa da saldırı yüzeyi açısından risklidir: bir konteynerden kaçış (container escape) veya yanlış yapılandırılmış bir bind mount gibi senaryolarda etkiler büyüyebilir. Rootless Docker ise Docker’ı sistemde ayrıcalıklı (root) bir servis olarak çalıştırmadan, normal bir kullanıcı hesabı altında çalıştırmanıza imkân tanır. Böylece olası bir ihlal durumunda etki alanı, o kullanıcıyla sınırlı kalır.

Bu yazıda rootless Docker’ı kurup yapılandıracağız; ayrıca ağ, port yönlendirme, dosya izinleri ve performans tarafındaki kritik ayrıntıları netleştireceğiz. Anlatım Linux odaklıdır ve özellikle Ubuntu/Debian türevlerinde sorunsuz ilerler; Fedora ve benzerlerinde komutlar büyük ölçüde aynıdır.

Ön koşullar

Rootless Docker için çekirdek tarafında kullanıcı ad alanları (user namespaces) ve bazı yardımcı araçlar gerekir. Önce sisteminizde aşağıdakilerin yüklü olduğundan emin olun: uidmap (newuidmap/newgidmap), slirp4netns (rootless ağ), fuse-overlayfs (rootless overlay sürücüsü, her sistemde şart değil) ve mümkünse güncel bir Docker paketi.

Debian/Ubuntu için temel paketler: sudo apt-get update ardından sudo apt-get install -y uidmap slirp4netns fuse-overlayfs. Docker’ı dağıtımın deposundan veya Docker’ın resmi deposundan kurabilirsiniz; rootless mod için modern sürüm önerilir.

Subuid/subgid yapılandırması

Rootless modun kalbi, kullanıcıya ayrılmış UID/GID aralıklarıdır. Sistem, normal kullanıcının konteyner içinde farklı kimliklerle işlem yapabilmesi için bu aralıkları /etc/subuid ve /etc/subgid dosyalarında tutar. Çoğu dağıtımda kurulum sırasında otomatik eklenir; yine de kontrol etmek iyi fikir.

Örnek satır formatı şöyledir: kullanici:100000:65536. Eğer yoksa eklemek için root yetkisi gerekir. Değerler sisteminize göre değişebilir; önemli olan çakışmayan bir aralık olmasıdır. Bu aşamayı doğru yapmak, ileride “permission denied” türü gizemli hataları ciddi ölçüde azaltır.

Rootless kurulumu: dockerd-rootless-setuptool.sh

Docker’ın rootless kurulumu genellikle tek bir komutla yapılır. Normal kullanıcı hesabınızla oturum açtıktan sonra şu komutu çalıştırın: dockerd-rootless-setuptool.sh install. Bazı sistemlerde bu script PATH içinde değilse, Docker paketinin dokümantasyonundaki konuma göre çağırmanız gerekebilir.

Kurulum sonunda size genellikle iki kritik bilgi verilir: Docker soketinin bulunduğu yol ve ortam değişkeni önerisi. Rootless Docker çoğunlukla kullanıcı seviyesinde çalıştığı için soket yolu $XDG_RUNTIME_DIR/docker.sock benzeri bir konumda olur. Terminalinizde rootless bağlamı kullanmak için çoğu zaman export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock yeterlidir.

Servis olarak çalıştırma (systemd --user)

Sürekli kullanım için rootless Docker’ı kullanıcı servisi olarak çalıştırmak idealdir. Kurulum script’i çoğu zaman systemctl --user enable --now docker adımını önerir. Böylece sistem açıldığında, kullanıcı oturumu etkinleştiğinde Docker arka planda hazır olur.

Eğer “linger” etkin değilse, kullanıcı oturumu kapandığında servis durabilir. Sunucu senaryolarında bunun önüne geçmek için sudo loginctl enable-linger kullanici komutu işe yarar. Bu sayede kullanıcı oturumu kapalı olsa bile user-level servisler çalışmaya devam eder.

Port yönlendirme ve ağ kısıtları

Rootless modun en çok sorulan kısmı port yayınlamadır. Linux’ta 1024 altı “privileged port” sayılır ve root gerektirir. Rootless Docker’da -p 80:80 gibi bir eşleme çoğu sistemde doğrudan çalışmaz. Alternatif olarak uygulamanızı 8080 gibi bir porta alabilir veya sistem çapında bir ters proxy (Nginx/Traefik) ile 80/443 trafiğini root yetkisi olan servis üzerinden yönlendirebilirsiniz.

Ağ tarafında rootless genellikle slirp4netns ile kullanıcı alanında NAT benzeri bir yapı kullanır. Bu, güvenlik açısından avantajlıdır; ancak bazı yoğun ağ senaryolarında performans farkı görülebilir. Geliştirme ortamlarında çoğu kullanıcı için yeterlidir; yüksek bant genişliği ve düşük gecikme hedefliyorsanız ölçüm yapmanız önerilir.

Depolama sürücüsü ve dosya izinleri

Rootless Docker, dosya sistemi sürücüsü olarak çoğu zaman fuse-overlayfs veya uygun bir alternatif kullanır. Bu, klasik root modundaki overlay2 kadar “ham performans” vermeyebilir; ama güncel çekirdek ve SSD üzerinde günlük işler için genellikle sorun çıkarmaz. İmaj çekme, build ve volume kullanımlarında davranış farklılıkları olabileceği için CI/CD ortamlarınızda deneme yapmak akıllıca olur.

Volume tarafında kritik nokta şudur: Konteyner içindeki UID/GID eşlemeleri, hosttaki dosya sahipliğiyle farklı görünebilir. “Dosyalar yazılamıyor” sorunu yaşarsanız önce mount ettiğiniz klasörün izinlerini, ardından konteynerin çalıştığı kullanıcıyı ve gerekiyorsa --user parametresini kontrol edin.

Hızlı test: Rootless çalışıyor mu?

Kurulumdan sonra şu komutlarla doğrulama yapabilirsiniz: docker info çıktısında rootless ibaresini arayın. Ardından basit bir konteyner başlatın: docker run --rm hello-world. İmaj iniyor ve konteyner sorunsuz çalışıyorsa temel kurulum tamamdır.

Son olarak küçük bir web testi yapmak isterseniz: docker run --rm -p 8080:80 nginx deyip tarayıcıdan http://localhost:8080 adresini kontrol edin. Eğer port erişimi varsa rootless ağ zinciri de doğru çalışıyor demektir.

Ne zaman rootless, ne zaman klasik Docker?

Rootless Docker; geliştirici makineleri, çok kullanıcılı sunucular, güvenliği öncelikleyen laboratuvar ortamları ve “en az yetki” yaklaşımı için güçlü bir seçenektir. Buna karşın düşük portlara doğrudan bind ihtiyacı, bazı ağ sürücüleri (macvlan benzeri) veya belirli kernel özelliklerine bağımlı iş yükleri gibi durumlarda klasik (root) Docker hâlâ daha sorunsuz olabilir.

İyi haber şu: Rootless’a geçiş genellikle geri dönüşü zor bir karar değildir. Aynı makinede her iki yaklaşımı da senaryoya göre kullanabilir, kritik servisleri geleneksel olarak yönetirken geliştirme ve test süreçlerinizi rootless ile daha güvenli hale getirebilirsiniz.

15 Ocak 2026 Perşembe

Docker Üzerinde Rootless Mod ile Güvenli Container Çalıştırma: Adım Adım Kurulum ve İnce Ayarlar

Rootless Docker Nedir ve Neden Önemli?

Docker, geliştiricilerin uygulamaları taşınabilir şekilde paketlemesini kolaylaştırdı; ancak klasik kurulumda Docker daemon (dockerd) genellikle root yetkileriyle çalışır. Bu da teorik olarak bir container kaçışı veya yanlış yapılandırma durumunda sistem genelinde daha büyük risk anlamına gelebilir. Rootless Docker, Docker’ı root yetkisi olmadan çalıştırarak saldırı yüzeyini azaltmayı hedefleyen güncel ve ileri seviye bir yaklaşımdır.

Rootless modda hem daemon hem de container süreçleri normal bir kullanıcı hesabıyla çalışır. Böylece “root” ayrıcalıklarına ihtiyaç duymadan container yönetimi yapılır. Bu yaklaşım özellikle paylaşımlı sunucularda, geliştirici makinelerinde veya güvenlik politikasının sıkı olduğu kurum ortamlarında ciddi avantaj sağlar.

Ön Koşullar: Sistem ve Kernel Gereksinimleri

Rootless Docker için güncel bir Linux dağıtımı önerilir (Ubuntu 22.04+, Debian 12, Fedora vb.). Temel olarak user namespace altyapısına ihtiyaç duyulur. Pek çok modern dağıtımda bu özellik varsayılan olarak hazır gelir; yine de aşağıdaki iki dosyanın doğru yapılandırılmış olması önemlidir: /etc/subuid ve /etc/subgid. Bu dosyalar, root yetkisi olmadan UID/GID eşlemesi yapabilmek için kullanılır.

Kısaca hedef şu: Kendi kullanıcı hesabınız (ör. ali) için belirli bir UID/GID aralığı atanır ve Docker bunu container içi “root”u, host tarafında ayrıcalıksız bir UID’ye map’leyerek gerçekleştirir.

Kurulum: Rootless Modu Etkinleştirme

Önce Docker’ın sisteminizde kurulu olması gerekir. Dağıtımınızın resmi Docker deposunu kullanmanız tavsiye edilir. Kurulum tamamlandıktan sonra rootless kurulumu için Docker’ın sağladığı script devreye girer. Çoğu sistemde şu komut yeterlidir:

dockerd-rootless-setuptool.sh install

Bu adım, kullanıcı düzeyinde bir systemd servisi oluşturur ve gerekli ortam değişkenleriyle birlikte rootless daemon’ı ayağa kaldırır. Ardından rootless daemon’ı başlatmak için genellikle şu komut kullanılır:

systemctl --user start docker

Otomatik başlaması için:

systemctl --user enable docker

Ortam Değişkenleri: Docker Client Doğru Daemon’a Bağlansın

Rootless modda Docker, varsayılan olarak kullanıcıya özel bir UNIX socket üzerinden hizmet verir. Bu nedenle terminal oturumunuzun doğru socket’e bağlanması gerekir. Çoğu kurulum aşağıdaki gibi bir öneri verir:

export DOCKER_HOST=unix:///run/user/1000/docker.sock

Buradaki 1000 değeri sizin kullanıcı UID’nizdir; id -u komutuyla öğrenebilirsiniz. Bu export satırını kalıcı yapmak için ~/.bashrc veya ~/.zshrc içine ekleyebilirsiniz.

Test: Rootless Çalıştığını Nasıl Anlarsınız?

Kurulum sonrası hızlı bir doğrulama için:

docker info

Çıktıda rootless ile ilgili ibareler ve “Security Options” altında user namespace benzeri detaylar görmeniz beklenir. Ayrıca basit bir container çalıştırarak da test edebilirsiniz:

docker run --rm hello-world

Bu komutun başarılı çalışması, client’ın rootless daemon’a bağlanabildiğini ve temel container akışının sağlıklı olduğunu gösterir.

İnce Ayar 1: Port Yönlendirme ve 1024 Altı Portlar

Rootless Docker’ın en çok kafa karıştıran noktası port yayınlama tarafıdır. Klasik Docker’da 80/443 gibi ayrıcalıklı portlara kolayca bind edilebilirken, rootless modda bu işlem sınırlıdır. Çünkü 1024 altı portlara bind etmek genelde root yetkisi ister.

Çözüm olarak uygulamanızı 8080/8443 gibi yüksek portlarda çalıştırıp ters proxy (ör. Nginx) ile yönlendirebilir veya sistemde setcap gibi yöntemlerle belirli ikili dosyalara sınırlı yetki verebilirsiniz. Güvenlik bakış açısıyla en temiz yaklaşım, servisleri yüksek portta çalıştırıp yönlendirme katmanını ayrıca yönetmektir.

İnce Ayar 2: Dosya İzinleri ve Bind Mount Davranışı

Rootless modun doğal sonucu olarak, host dosya izinleri daha belirleyici hale gelir. Bind mount yaptığınızda container içindeki kullanıcı ile host tarafındaki UID eşleşmesi farklı görünebilir. Özellikle CI ortamlarında veya “volume” olarak paylaşılan dizinlerde yazma izni sorunları çıkabilir.

Pratikte en iyi yöntem, proje dizininizin sahipliğini ve izinlerini net tutmak, gerekiyorsa container içinde çalışacak kullanıcıyı açıkça belirlemek ve “her şeyi 777 yapmak” gibi kötü alışkanlıklardan kaçınmaktır. Rootless, güvenliği artırırken disiplinli izin yönetimini de zorunlu kılar.

Rootless Docker Ne Zaman Mantıklı, Ne Zaman Değil?

Kişisel geliştirme ortamı, paylaşımlı sistemler ve güvenlik öncelikli senaryolarda rootless mod çok mantıklıdır. Buna karşılık, düşük portlara yoğun ihtiyaç, bazı sürücü/overlay kısıtları veya özel ağ/iptables beklentileri olan ortamlarda klasik kurulum daha az sürtünmeyle çalışabilir. Yine de güncel Docker sürümleriyle rootless olgunlaştı; güvenlik açısından “varsayılan tercih” olmaya giderek daha yakın.

Özetle: Eğer makinenizde container’ları “root gibi” çalıştırmak zorunda değilseniz, rootless Docker ile daha güvenli bir temel elde edersiniz. Kurulum birkaç adım sürer; kazandırdığı güvenlik kazanımı ise uzun vadede oldukça değerlidir.

10 Ocak 2026 Cumartesi

Docker’da Rootless Mod ile Güvenli Konteyner Çalıştırma: Adım Adım Kurulum ve İpuçları

Rootless Docker Nedir ve Neden Önemlidir?

Konteyner teknolojileri üretim ortamlarında standart hâline gelirken, güvenlik tarafında hâlâ sık yapılan bir hata var: Docker’ı kök kullanıcı (root) yetkileriyle çalıştırmak. Varsayılan Docker kurulumunda dockerd servisi root ayrıcalıklarıyla çalışır ve Docker grubuna eklediğiniz kullanıcılar fiilen root’a yakın yetkiler kazanır. Bu, yanlış yapılandırılmış bir konteyner veya zayıf bir imaj üzerinden sistemin tamamına sıçrama riskini artırır.

İşte burada Rootless Docker devreye girer. Rootless mod, Docker daemon’ını ve konteynerleri root olmadan çalıştırır. Böylece olası bir güvenlik açığında saldırganın erişimi kullanıcı alanıyla sınırlı kalır. Özellikle çok kullanıcılı sunucularda, CI/CD ajanlarında veya geliştiricilerin kendi makinelerinde güvenliği artırmak için oldukça iyi bir yaklaşımdır.

Kimler Rootless Docker Kullanmalı?

Rootless mod her senaryoya birebir uymaz; ancak pek çok kullanımda ciddi avantaj sağlar. Paylaşımlı geliştirme sunucuları, kurumsal dizüstüler, “konteyner çalıştırıyorum ama root yetkisi istemiyorum” yaklaşımı olan ekipler ve saldırı yüzeyini küçültmek isteyenler için idealdir. Öte yandan bazı ağ senaryolarında (örneğin düşük portlara doğrudan bind etmek) ekstra ayar gerekir. Bu yazıda temel kurulumun yanında pratik kısıtları ve çözüm yollarını da ele alacağım.

Ön Koşullar (Linux)

Rootless Docker en sorunsuz şekilde modern Linux dağıtımlarında çalışır. Bu rehberde Ubuntu/Debian çizgisini baz alıyorum; ancak Fedora/Arch tarafında da mantık aynı. Gerekli olanlar: güncel bir Docker kurulumu, kullanıcı bazlı servisleri yönetmek için systemd (çoğu dağıtımda var) ve kullanıcı namespace’lerinin düzgün ayarlanması.

Öncelikle Docker’ın kurulu olduğunu doğrulayın. Kurulu değilse dağıtımınızın resmi yönergelerini izleyin. Rootless mod için ayrıca Docker’ın sunduğu kurulum betiğini kullanacağız.

Adım Adım Rootless Docker Kurulumu

1) Kullanıcı namespace eşlemelerini kontrol edin
Rootless çalışabilmek için sistemde subuid ve subgid atamaları gerekir. Çoğu sistemde otomatik gelir; ancak kontrol etmekte fayda var. Aşağıdaki dosyalarda kullanıcı adınıza ait satır olmalı:

/etc/subuid ve /etc/subgid içinde kullanıcı adınızın karşısında bir aralık görmelisiniz (ör. kullanici:100000:65536). Yoksa yönetici yetkisiyle bu aralığı tanımlamak gerekir.

2) Rootless kurulum betiğini çalıştırın
Docker, rootless kurulumu kolaylaştıran bir betik sunar. Terminalde kendi kullanıcınızla şu komutu çalıştırın:

dockerd-rootless-setuptool.sh install

Kurulum sonunda size iki kritik bilgi verir: Docker soketinin yolu ve ortam değişkenleri. Genellikle DOCKER_HOST için kullanıcı dizini altında bir socket yolu tanımlanır.

3) Ortam değişkenlerini kalıcı hâle getirin
Terminal her açıldığında rootless daemon’a bağlanmak için genelde şu satır gerekir:

export DOCKER_HOST=unix:///run/user/1000/docker.sock

Kendi kullanıcı ID’nize göre yol değişebilir. Bunu ~/.bashrc veya ~/.zshrc dosyanıza ekleyin. Ardından yeni bir terminal açıp docker ps ile test edin.

4) Servisi kullanıcı olarak başlatın
Systemd kullanan sistemlerde rootless Docker genellikle kullanıcı servisi olarak yönetilir. Kurulum betiği çoğu zaman bunu ayarlar. Elle kontrol etmek isterseniz:

systemctl --user status docker

Servis aktif değilse başlatıp etkinleştirebilirsiniz:

systemctl --user enable --now docker

Sık Karşılaşılan Kısıtlar ve Pratik Çözümler

1) 1024 altı portlara bind etme
Rootless modda düşük portlara (80, 443 gibi) doğrudan bind etmek kısıtlıdır. Çözüm olarak 8080/8443 gibi yüksek portları kullanabilir, ters vekil (reverse proxy) ile yönlendirebilir veya sistemde ilgili capability ayarlarıyla çalışabilirsiniz. Üretimde en temiz yaklaşım genellikle Nginx/Traefik gibi bir ters vekilin 80/443’ü dinlemesi ve konteynerlere yüksek porttan trafik iletmesidir.

2) Ağ performansı ve uyumluluk
Rootless, ağ tarafında çoğunlukla kullanıcı alanı çözümlerine dayanır. Bu, bazı ortamlarda küçük bir performans maliyeti veya farklı davranışlar doğurabilir. Ancak geliştirici makinelerinde ve birçok CI işinde bu fark pratikte sorun yaratmaz.

3) Dosya izinleri ve bind mount
Konteyner içine bağladığınız (bind mount) dizinlerde izin problemleri görebilirsiniz. Rootless mod, host tarafındaki kullanıcı izinleriyle daha “doğal” çalışır; yine de UID/GID uyumsuzluğu olan imajlarda ek ayar gerekebilir. Bu noktada user direktifini kullanmak, uygulamayı konteyner içinde root yerine belirli bir kullanıcıyla çalıştırmak ve volume izinlerini netleştirmek işleri kolaylaştırır.

Güvenlik İçin Ek İpuçları

Rootless kullanıyor olsanız bile güvenlik katmanlarını çoğaltmak iyi bir alışkanlıktır. İmajları mümkünse resmi kaynaklardan çekin, gereksiz paketleri içermeyen minimal imajları tercih edin, gizli anahtarları imaj içine gömmeyin. Konteyner çalıştırırken read-only dosya sistemi, sınırlı yetkiler ve kaynak kotaları gibi seçenekler de saldırı yüzeyini küçültür.

Son olarak, rootless Docker’ı “tek başına her şeyi çözen” bir sihir gibi görmek yerine, doğru senaryoda güçlü bir güvenlik hamlesi olarak değerlendirin. Özellikle paylaşımlı sistemlerde, geliştirici ortamlarında ve otomasyon sunucularında rootless yaklaşımı çoğu zaman daha rahat uyumanızı sağlar.

Sonuç

Rootless Docker, konteyner ekosisteminde güvenliği pratik biçimde artıran modern bir yöntem. Kurulumu birkaç adımda tamamlanıyor; en önemli nokta kullanıcı namespace eşlemeleri ve doğru DOCKER_HOST ayarı. Eğer bugüne kadar Docker’ı “Docker grubuna al, tamam” mantığıyla kullanıyorsanız, rootless moda geçmek özellikle güvenlik hassasiyeti olan ortamlarda ciddi bir iyileştirme sunar.

19 Aralık 2025 Cuma

Güncel Rehber: Docker’da Rootless Mod ile Güvenli Konteyner Çalıştırma (Adım Adım)

Rootless Docker nedir ve neden önemli?

Docker’ı klasik kurulumla kullandığınızda, arka plandaki dockerd servisi genellikle root yetkileriyle çalışır. Bu, konteyner izolasyonu güçlü olsa bile “daemon” katmanında yetki seviyesinin yüksek olduğu anlamına gelir. Rootless Docker ise Docker daemon’ını ve konteynerleri root olmayan bir kullanıcıyla çalıştırarak olası bir kaçış senaryosunda zararın etkisini düşürür. Özellikle paylaşımlı sunucular, geliştirici makineleri ve CI ortamlarında “en az ayrıcalık” yaklaşımını uygulamak için güncel ve pratik bir yöntemdir.

Bu yazıda Rootless Docker’ın ne işe yaradığını, hangi sınırlamalara sahip olduğunu ve Linux üzerinde nasıl kurup günlük kullanımda problemsiz çalıştırabileceğinizi adım adım göreceksiniz. Odak noktası, güvenliği artırırken geliştirici deneyimini mümkün olduğunca bozmadan ilerlemek.

Ön koşullar ve desteklenen sistemler

Rootless mod en sorunsuz şekilde modern Linux dağıtımlarında çalışır. Ubuntu 22.04/24.04, Debian 12, Fedora gibi sistemler uygun adaylardır. Çekirdek tarafında kullanıcı isim alanları (user namespaces) ve cgroup desteği gibi bileşenler önemlidir. Ayrıca Rootless Docker, ağ tarafında çoğunlukla slirp4netns ile kullanıcı alanı NAT kullanır; performans ve port yönlendirme mantığı root’lu kurulumdan farklı olabilir.

Bu rehberde komutlar Debian/Ubuntu çizgisinde düşünülmüştür. Fedora veya Arch kullanıyorsanız paket isimleri değişebilir, mantık aynı kalır.

1) Gerekli paketler ve Docker kurulumu

Öncelikle Docker Engine’in kurulu olması gerekir. Resmî depodan kurulum önerilir. Kurulumdan sonra Rootless için gerekli yardımcı araçlar gerekebilir. Ubuntu/Debian’da çoğu zaman aşağıdakiler işinizi görür:

Komut örneği:
sudo apt update
sudo apt install -y uidmap slirp4netns fuse-overlayfs

Burada uidmap paketi rootless çalışmada kullanıcı kimliği eşlemeleri için kritik olan newuidmap/newgidmap araçlarını sağlar. fuse-overlayfs ise overlay dosya sistemi rootless senaryolarda daha iyi performans/uyumluluk sunabilir.

2) Rootless kurulumu başlatma

Docker kurulumunuzda genellikle dockerd-rootless-setuptool.sh adlı bir kurulum aracı bulunur. Bu araç, kullanıcı düzeyinde systemd servislerini ve gerekli dizinleri oluşturur.

Komut örneği:
dockerd-rootless-setuptool.sh install

Kurulum bittiğinde size DOCKER_HOST gibi ortam değişkenlerini ayarlamanızı öneren bir çıktı gösterebilir. Rootless Docker’da daemon, kullanıcıya ait bir UNIX soketi üzerinden çalışır. Bu da varsayılan /var/run/docker.sock yerine genellikle şu tarz bir yola işaret eder:

Örnek: unix:///run/user/1000/docker.sock

3) Ortam değişkeni ve kalıcı ayar

Mevcut terminal oturumunda Rootless Docker’ı kullanmak için aşağıdaki değişkeni tanımlayabilirsiniz:

Komut örneği:
export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock

Kalıcı yapmak için bunu ~/.bashrc veya kullandığınız shell’in profil dosyasına ekleyebilirsiniz. Ardından Docker istemcisinin doğru daemon’a bağlandığını doğrulayın:

Komut örneği:
docker info

Çıktıda “rootless” ile ilgili bir ibare görmeniz veya daemon’ın user socket üzerinden çalıştığını doğrulamanız gerekir. Eğer hâlâ root’lu servise bağlanıyorsa DOCKER_HOST ayarını ve terminal oturumunuzu kontrol edin.

4) Systemd ile otomatik başlatma

Rootless kurulum çoğunlukla kullanıcı seviyesinde systemd servisi oluşturur. Servisi yönetmek için:

Komut örneği:
systemctl --user status docker
systemctl --user enable --now docker

Uzak oturumlarda veya yeniden başlatmalarda kullanıcı servisi çalışsın istiyorsanız “linger” açmak gerekebilir:

Komut örneği:
sudo loginctl enable-linger $(whoami)

5) Port yönlendirme ve ağ davranışı

Rootless modda 1024 altındaki portlara (80, 443 gibi) bağlanmak bazı dağıtımlarda doğrudan mümkün olmayabilir. Geliştirme ortamında alternatif olarak 8080/8443 gibi portlar kullanabilir ya da ters vekil (reverse proxy) yaklaşımına gidebilirsiniz. Örneğin Nginx’i root yetkisiyle host’ta dinleyip trafiği rootless konteyner portuna aktarabilirsiniz.

Basit bir test için bir web sunucusu çalıştırın:

Komut örneği:
docker run --rm -p 8080:80 nginx

Ardından tarayıcıdan http://localhost:8080 ile doğrulayın. Rootless ağ katmanı kullanıcı alanında çalıştığı için bazı senaryolarda performans root’lu kurulumdan düşük olabilir; ancak güvenlik hedefiniz yüksekse bu takas kabul edilebilir.

6) Sık karşılaşılan sorunlar ve çözüm ipuçları

“newuidmap: write to uid_map failed” gibi hatalar genellikle uidmap paketinin eksikliğine veya /etc/subuid ve /etc/subgid eşlemelerinin yetersizliğine işaret eder. Çoğu sistemde kurulum aracı bunları ayarlar, ancak sorun yaşıyorsanız kullanıcıya yeterli aralık tanımlandığından emin olun.

Disk sürücüsü ve overlay problemi yaşayanlar için fuse-overlayfs önemli bir çözümdür. Ayrıca Docker’ın storage driver seçimi rootless modda farklı davranabilir. Günlükleri kontrol etmek için:

Komut örneği:
journalctl --user -u docker --no-pager -n 200

Kaynak tüketimi ve limitler konusunda da cgroup v2 uyumluluğu önemlidir. Modern dağıtımlar cgroup v2 ile daha sorunsuzdur. “docker info” çıktısında cgroup sürümünü kontrol ederek ilerleyin.

Sonuç: Rootless Docker kimler için ideal?

Rootless Docker, tek başına tüm güvenlik sorunlarını sihirli şekilde çözmez; yine de konteyner çalıştırma katmanında root yetkisini ortadan kaldırarak saldırı yüzeyini ciddi biçimde azaltır. Kişisel geliştirme makineleri, eğitim ortamları, çok kullanıcılı sistemler ve güvenlik hassasiyeti yüksek ekipler için güncel ve uygulanabilir bir yaklaşımdır. Eğer amacınız “konteyner çalıştırıyorum, ama host üzerinde root daemon istemiyorum” ise Rootless mod, bugün tercih edilebilecek en pratik çözümlerden biridir.