Sudo olmadan liman işçisi nasıl kullanabilirim?


767

Docker'ın dokümantasyon sayfalarında, tüm örnek komutlar sudo, bunun gibi şöyle gösterilir :

docker ps

Ubuntu'da ikili çağırılır docker.io. Ayrıca sudo olmadan da çalışmıyor:

sudo docker.io ps

Docker'ı, sudo ile her Docker komutunu ön eklemeye gerek kalmayacak şekilde nasıl yapılandırabilirim?


1
Ufw'yi etkinleştirmeyi unutma;)
Rinzwind

2
Ubuntu 14.04'te ayrıca 'docker' ikili dosyası da var .
anatoly techtonik 7:14

@anatolytechtonik Ayrıca Ubuntu'da 'docker.io' yerine 'docker' kullandım 14.04 LTS
Nabin

2
Önerilen yükleme varsayılan ubuntu reposundaki liman işçisi değil ; bunun yerine, buradaki talimatlar ( docs.docker.com/engine/installation/linux/ubuntulinux ), liman işçisi deposunu kullanmanızı öneririz. Mevcut tüm liman işçisi malzemelerini kaldırın ve bir tanesini doğru kaynaktan aldığınızı doğrulayın: apt-cache policy docker-engine(apt url dockerproject.org'dan olmalıdır)
michael

2
Bir takma ad nasıl:? Bu şekilde, hala şifre koruması ile sudo kullanıyorsunuz. alias docker = "sudo docker"
Andrej Panjkov

Yanıtlar:


1137

İyi haber: Yeni liman işçisi (sürüm 19.03 (şu anda deneysel)), bir kök kullanıcısı kullanarak oluşabilecek sorunları göz ardı ederek köksüz çalışabilecektir. Daha fazla izin, kök ve istemediğinizde makinenizi açabilecek herhangi bir şeyle uğraşmanıza gerek yok.

Bununla ilgili video [DockerCon 2019] Rootless moduyla Sertleştirme Docker cini

Rootless Docker moduna birkaç uyarı

Docker mühendisleri, köksüz modun Docker motor özelliklerinin tamamının yerine geçemeyeceğini söylüyor. Köksüz moda yönelik bazı sınırlamalar şunlardır:

  • Kaynak kontrollerini, genel güvenlik profillerini, kontrol noktası / geri yüklemeyi, bindirme ağlarını vb. gruplandırır, köksüz modda çalışmaz.
  • Limanların konteynerlerden açığa çıkarılması halihazırda manuel socat yardımcı işlemi gerektirir.
  • Yalnızca Ubuntu tabanlı dağıtımlar, köksüz modda dosya paylaşım sistemlerini destekler.
  • Rootless modu şu anda yalnızca alışık olduğunuz kadar stabil olamayacak olan gecelik yapılar için sağlanmıştır.

Liman işçisi 19.3'ten itibaren bu eski (ve gerekenden daha tehlikeli):

Liman işçisi kılavuzu bu konuda şöyle demektedir:

Root dışı erişim verilmesi

Docker arka plan programı her zaman kök kullanıcı olarak çalışır ve Docker sürüm 0.5.2'den beri docker arka plan programı, bir TCP bağlantı noktası yerine bir Unix soketine bağlanır. Varsayılan olarak, Unix soketinin kullanıcı köküne ait olması ve varsayılan olarak sudo ile erişebilirsiniz.

Siz (veya Docker yükleyiciniz) docker adlı bir Unix grubu oluşturup kullanıcı eklerseniz, sürüm 0.5.3'ten itibaren, docker arka plan programı, arka plan başladığında Unix yuvasının docker grubu tarafından okunup / yazılabilir olmasını sağlar. . Docker arka plan programı her zaman kök kullanıcı olarak çalışmalıdır, ancak docker istemcisini docker grubundaki bir kullanıcı olarak çalıştırırsanız, tüm istemci komutlarına sudo eklemeniz gerekmez. 0.9.0'dan itibaren, docker dışındaki bir grubun -G seçeneğiyle Unix soketine sahip olması gerektiğini belirleyebilirsiniz.

Uyarı: Liman işçisi grubu (veya -G ile belirtilen grup) kök eşdeğeridir; bkz Docker Daemon Saldırı Yüzey ayrıntıları ve bu blog yayınını biz kök olmayan kullanıcılar CentOS, Fedora veya RHEL içinde Docker çalıştırmak izin vermeyin Neden (teşekkürler michael-n).

GitHub'daki deneysel köksüz modun son sürümünde , mühendisler köksüz moddan bahseden, dockerd'ın user_namespaces (7), mount_namespaces (7), network_namespaces (7) kullanarak ayrıcalıklı olmayan bir kullanıcı olarak çalıştırılmasını sağlar.

Kullanıcıların, dockerd yerine dockerd-rootless.sh komutunu çalıştırmaları gerekir.

$ dockerd-rootless.sh --experimental

Rootless modu deneysel olduğundan, kullanıcıların her zaman dockerd-rootless.sh dosyasını deneysel olarak çalıştırmaları gerekir.


Okumak önemli: Linux için kurulum sonrası adımlar (ayrıca Docker Daemon Attack Surface ayrıntılarına da bağlanır ).

Docker'ı root olmayan bir kullanıcı olarak yönetin

Liman işçisi, bir TCP portu yerine bir Unix soketine bağlanır. Varsayılan olarak, Unix soketi kullanıcı köküne aittir ve diğer kullanıcılar yalnızca sudo kullanarak erişebilir. Liman işçisi, her zaman kök kullanıcı olarak çalışır.

Docker komutunu kullanırken sudo kullanmak istemiyorsanız, docker adlı bir Unix grubu oluşturun ve buna kullanıcılar ekleyin. Liman işçisi arka plan başladığında, Unix soket sahipliğini liman işçisi grubu tarafından okunabilir / yazılabilir kılar.


  • Henüz mevcut değilse, liman grubunu ekleyin:

    sudo groupadd docker
    
  • Bağlantılı kullanıcıyı "$ USER" kullanıcı grubuna ekleyin. Mevcut kullanıcınızı kullanmak istemiyorsanız, tercih ettiğiniz kullanıcı ile eşleşecek şekilde kullanıcı adını değiştirin:

    sudo gpasswd -a $USER docker
    
  • Gruptaki newgrp dockerdeğişiklikleri etkinleştirmek için, a veya oturum açın / oturum açın.

  • Kullanabilirsiniz

    docker run hello-world
    

    liman işçisi sudo olmadan çalışıp çalışmadığını kontrol etmek için.


3
Evet, ama her ayrıcalıklı süreç sömürü potansiyeli açar. Liman işçisi, bu ayrıcalık seviyesini gerçekten zorunlu kılmak için işletim sisteminin içine mi sokuyor?
mat

3
newgrp dockerbenim için çalışmadı, oturumu kapatmak zorunda kaldım.
lolmaus - Andrey Mikhaylov 14:15

43
Bu kullanıcının sınırsız, parola korumalı olmayan bir kök erişimi sağladığını belirtmekte fayda var . Güvenlik açığının
Chris Foster

2
Bu değişikliğin gerçekleşmesi için liman işçisi arka planını yeniden başlatmanıza gerek yok !! sadece ekleyeceğiniz kullanıcının oturumunu
Tommy

4
kullanırsanız docker login, giriş .dockerklasörünüzde oluşturulan klasörün ait olduğunu görebilirsiniz root. liman işçisi komutları çalıştırırken böylece bu uyarıyı karşılaşmak: WARNING: Error loading config file:/home/myuser/.docker/config.json - stat /home/myuser/.docker/config.json: permission denied. Ben Kullanıcının yapılan .dockerşöyle sudo olmadan klasör erişilebilir: sudo chgrp -hR docker ~/.docker && sudo chown -R myuser ~/.docker. chgrpolsa yardımcı görünmüyordu, bu yüzden muhtemelen sadece chown adımı tavsiye edilmelidir.
Birchlabs

202

Docker komutunu çalıştırmadan çalıştırmak sudoiçin, docker grubuna kullanıcı (kök yetkisi olan) eklemeniz gerekir. Bu çalıştırma için aşağıdaki komut:

 sudo usermod -aG docker $USER

Şimdi kullanıcının oturumu kapatmasını ve tekrar giriş yapmasını sağlayın. Bu çözüm burada uygun kurulum işlemi ile iyi açıklanmıştır .


14
gruba kullanıcı ekledikten sonra bu komutu çalıştırın: sg group_name -c "bash"
madjardi

4
bu değişikliğin gerçekleşmesi için işletim sistemini yeniden başlatmanıza gerek yok! Tüm çalışan konteynerleri bombalayacak! Sadece yeni eklediğiniz bir kullanıcının oturum
Tommy

5
Bu komutun diğer cevabındaki "sudo gpasswd -a $ {USER} docker" dan farkı nedir? Hiç değilse ...
Ashley Aitken

9
Lütfen dokümanlar tarafından verilen uyarıyı ekleyebilir misiniz: "Liman işçisi grubu [...] root ile eşdeğerdir", bu yüzden insanların bunu düşünmesi için bir şans var
Murmel

2
2 yaşındaki eski kabul edilen cevapla aynı etki, ancak güvenlik riskleri hakkında uyarılar olmadan
Gert van den Berg

57

Bir kullanıcının gruba eklenmesinin, dockerliman işçisi çalıştırılmasına izin verme mekanizması , liman işçisi soketine erişim sağlamaktır /var/run/docker.sock. İçerdiği dosya sistemi /var/runACL'ler etkin olarak monte edilmişse, bu aynı zamanda ACL'ler aracılığıyla da gerçekleştirilebilir.

sudo setfacl -m user:$USER:rw /var/run/docker.sock

Bunu sadece bütünlük için dahil ediyorum.

Genel olarak, gruplara dayalı iyi bir alternatif mevcut olduğunda ACL'lerden kaçınmayı öneriyorum: Bir sistemdeki ayrıcalıkların yalnızca grup üyeliğine bakarak anlaşılması daha iyidir. Sistem ayrıcalıklarını anlamak için dosya sisteminde ACL girişlerini taramak zorunda olmak, güvenlik denetimleri için ek bir yüktür.

Uyarı 1 : Bu gruba rootekleme usernameile aynı denkliğe sahiptir docker. Bir kapsayıcıyı root, ana bilgisayar dosya sistemine erişebilecek şekilde başlatabilirsiniz .

Uyarı 2 : ACL'ler güvenlik denetimleri için grup tabanlı güvenlikten çok daha zordur. Muhtemelen en azından denetim ile ilgili ortamlarda grupları kullanabiliyorsanız, mümkünse ACL'den kaçının.


5
Bu 16.04 çalıştı
Edib

İhtiyacım olan bu, diğer cevaplar, kullanıcının root iznine sahip olmasını gerektiriyor. Teşekkür ederim çok yapın!
Mrinal Saurabh,

1
Çok daha iyi bir yol imo. Grup liman işçisi kök eşdeğeridir ve bu her zaman bir tehlike işaretidir. Ve bu tek dosyanın sahibi olmanın dezavantajı görmüyorum.
Xerus

5
@ Xerus doğru anladıysam, bu sokete kim yazabilirse, root ile eşdeğer yetkileri de alabilir . Bu yüzden birine ACL aracılığıyla bu sokete erişim izni verilmesi, o kişinin liman işçisi grubuna eklenmesiyle aynı güvenlik etkisine sahiptir.
Paŭlo Ebermann

1
Benim için Linux Mint 19'da çalıştı. Teşekkürler.
Biz Borg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.