Pertanyaan Bagaimana saya bisa menggunakan buruh pelabuhan tanpa sudo?


Pada halaman dokumentasi Docker, semua perintah contoh ditampilkan tanpa sudo, Seperti yang ini:

docker ps

Di Ubuntu, biner disebut docker.io. Ini juga tidak bekerja tanpa sudo:

sudo docker.io ps

Bagaimana saya bisa mengkonfigurasi Docker sehingga saya tidak perlu awalan setiap perintah Docker dengan sudo?


636
2018-06-06 08:17


asal


Jangan lupa untuk mengaktifkan ufw;) - Rinzwind
Pada Ubuntu 14.04 ada juga 'docker' biner. - anatoly techtonik
@anatolytechtonik Saya juga menggunakan 'buruh pelabuhan' alih-alih 'docker.io' di Ubuntu 14.04 LTS - Nabin
Instalasi yang disarankan adalah tidak  buruh pelabuhan di repositori default ubuntu; sebagai gantinya, instruksi di sini ( docs.docker.com/engine/installation/linux/ubuntulinux ), merekomendasikan menggunakan repo docker. Hapus semua barang docker yang ada, dan verifikasi bahwa Anda mendapatkannya dari sumber yang tepat: apt-cache policy docker-engine (URL apt harus berasal dari dockerproject.org) - michael
Bagaimana dengan alias :? Dengan begitu, Anda tetap menggunakan sudo, dengan proteksi kata sandi. alias docker = "sudo docker" - Andrej Panjkov


Jawaban:


Itu pengguna docker mengatakan ini:

Memberi akses non-root

Daemon docker selalu berjalan sebagai pengguna root, dan karena Docker versi 0.5.2, daemon docker mengikat ke soket Unix alih-alih port TCP. Secara default, soket Unix dimiliki oleh root pengguna, dan dengan demikian, secara default, Anda dapat mengaksesnya dengan sudo.

Mulai di versi 0.5.3, jika Anda (atau penginstal Docker) membuat grup Unix yang disebut buruh pelabuhan dan menambahkan pengguna ke dalamnya, maka daemon docker akan menjadikan kepemilikan soket Unix dapat dibaca / ditulis oleh grup docker saat daemon dimulai . Daemon docker harus selalu berjalan sebagai pengguna root, tetapi jika Anda menjalankan klien docker sebagai pengguna dalam grup docker maka Anda tidak perlu menambahkan sudo ke semua perintah klien. Mulai 0.9.0, Anda dapat menentukan bahwa grup selain buruh pelabuhan harus memiliki soket Unix dengan opsi -G.

Peringatan: Grup docker (atau grup yang ditentukan dengan -G) adalah root-equivalent; Lihat Detail Docker Daemon Attack Surface dan blogpost ini di Mengapa kita tidak membiarkan pengguna non-root menjalankan Docker di CentOS, Fedora, atau RHEL  (terima kasih michael-n).


Penting untuk dibaca: langkah pasca instalasi untuk Linux (tautannya juga Detail Docker Daemon Attack Surface).

Kelola Docker sebagai pengguna non-root

Daemon docker berikatan dengan soket Unix alih-alih port TCP. Secara default, soket Unix dimiliki oleh root pengguna dan pengguna lain hanya dapat mengaksesnya menggunakan sudo. Daemon docker selalu berjalan sebagai pengguna root.

Jika Anda tidak ingin menggunakan sudo saat Anda menggunakan perintah docker, buat grup Unix yang disebut buruh pelabuhan dan tambahkan pengguna ke dalamnya. Ketika daemon docker dimulai, itu membuat kepemilikan soket Unix dapat dibaca / ditulis oleh grup docker.


  • Tambahkan grup buruh pelabuhan jika belum ada:

    sudo groupadd docker
    
  • Tambahkan pengguna yang terhubung "$ USER" ke grup buruh pelabuhan. Ubah nama pengguna agar cocok dengan pengguna pilihan Anda jika Anda tidak ingin menggunakan pengguna Anda saat ini:

    sudo gpasswd -a $USER docker
    
  • Entah melakukan a newgrp docker atau logout / in untuk mengaktifkan perubahan ke grup.

  • Kamu dapat memakai

    docker run hello-world
    

    untuk memeriksa apakah Anda dapat menjalankan docker tanpa sudo.


952
2018-06-06 08:24



Bukankah itu arsitektur yang paling tidak aman untuk produksi? Aku pasti kehilangan sesuatu - matt
Ya, tetapi setiap proses istimewa membuka potensi untuk dieksploitasi. Apakah buruh pelabuhan mengaitkan jauh ke dalam sistem operasi untuk benar-benar mengamanatkan tingkat hak istimewa itu? - matt
newgrp docker tidak bekerja untuk saya, saya harus logout. - lolmaus - Andrey Mikhaylov
Ini perlu menunjukkan bahwa ini memberi pengguna itu akses root yang tidak dilindungi dan tidak dilindungi kata sandi. Lihat detail dari kerentanan di sini - Chris Foster
Anda TIDAK perlu me-restart daemon docker agar perubahan ini terjadi !! hanya memiliki pengguna yang baru saja Anda tambahkan logout, lalu masuk lagi - Tommy


Untuk menjalankan perintah docker tanpa sudo, Anda perlu menambahkan pengguna Anda (yang memiliki hak akses root) ke grup docker. Untuk menjalankan perintah berikut ini:

 sudo usermod -aG docker $USER

Sekarang, minta pengguna keluar lalu masuk lagi. Solusi ini dijelaskan dengan baik sini dengan proses instalasi yang tepat.


152
2018-02-27 19:57



setelah menambahkan pengguna ke grup, jalankan perintah ini: sg group_name -c "bash" - madjardi
tidak benar-benar perlu me-restart OS. Cukup keluar dan masuk lagi. - binW
Anda tidak perlu me-restart OS agar perubahan ini terjadi! Itu akan mengebom semua kontainer yang berjalan! Hanya memiliki pengguna yang baru saja Anda tambahkan logout kemudian masuk. - Tommy
Bagaimana perintah itu berbeda dengan "sudo gpasswd -a $ {USER} buruh pelabuhan" dalam jawaban lain? Jika sama sekali ... - Ashley Aitken
Dapatkah Anda menambahkan peringatan yang diberikan oleh dokumen: "Grup docker [...] adalah root-equivalent", sehingga orang memiliki kesempatan untuk memikirkannya - Murmel


Mekanisme yang menambahkan pengguna ke grup docker memberikan izin untuk menjalankan buruh pelabuhan adalah untuk mendapatkan akses ke soket buruh pelabuhan di /var/run/docker.sock. Jika filesystem itu berisi /var/run telah dipasang dengan ACL diaktifkan, ini juga dapat dicapai melalui ACL.

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

Saya hanya memasukkan ini untuk kelengkapan.

Secara umum, saya menyarankan untuk menghindari ACL setiap kali alternatif yang baik berdasarkan kelompok tersedia: Lebih baik jika hak istimewa dalam suatu sistem dapat dipahami dengan melihat keanggotaan kelompok saja. Harus memindai sistem file untuk entri ACL untuk memahami hak istimewa sistem adalah beban tambahan untuk audit keamanan.


23
2017-12-01 16:08



Ini bekerja pada 16.04 - edib
Inilah yang saya butuhkan, jawaban lain, mengharuskan pengguna memiliki izin root. Terima kasih banyak! - Mrinal Saurabh
Cara imo jauh lebih baik. The docker kelompok adalah root-equivalent dan itu selalu merupakan tanda bahaya. Dan saya tidak melihat ada kerugian untuk mengambil kepemilikan file yang satu ini. - Xerus
Bisakah Anda menjelaskan perintah mana yang harus dijalankan untuk "dapatkan akses ke soket buruh pelabuhan di /var/run/docker.sock"? - Yuval Atzmon
@Xerus jika saya mengerti dengan benar, siapa pun yang dapat menulis ke soket ini bisa mendapatkan hak istimewa yang setara dengan root. Jadi memberi seseorang akses ke soket ini melalui ACL memiliki efek keamanan yang sama dengan menambahkan orang itu ke grup buruh pelabuhan. - Paŭlo Ebermann