Câu hỏi Làm thế nào tôi có thể sử dụng docker mà không có sudo?


Trên trang tài liệu của Docker, tất cả các lệnh mẫu được hiển thị mà không có sudo, Giống như cái này:

docker ps

Trên Ubuntu, nhị phân được gọi là docker.io. Nó cũng không hoạt động nếu không có sudo:

sudo docker.io ps

Làm thế nào tôi có thể cấu hình Docker để tôi không cần phải tiền tố mỗi lệnh Docker với sudo?


637
2018-06-06 08:17


gốc


Đừng quên kích hoạt ufw;) - Rinzwind
Trên Ubuntu 14.04 có cũng là 'docker' nhị phân. - anatoly techtonik
@anatolytechtonik Tôi cũng sử dụng 'docker' thay vì 'docker.io' trong Ubuntu 14.04 LTS - Nabin
Đề xuất cài đặt mới là không phải  docker trong repo ubuntu mặc định; thay vào đó, hướng dẫn tại đây ( docs.docker.com/engine/installation/linux/ubuntulinux ), khuyên bạn nên sử dụng repo docker. Xóa tất cả các công cụ docker hiện có và xác minh bạn đang nhận được nội dung từ đúng nguồn: apt-cache policy docker-engine (url apt phải là từ dockerproject.org) - michael
Làm thế nào về một bí danh :? Bằng cách đó, bạn vẫn sử dụng sudo, với mật khẩu bảo vệ. alias docker = "sudo docker" - Andrej Panjkov


Các câu trả lời:


Các hướng dẫn sử dụng docker có điều này để nói về nó:

Cho phép truy cập không phải root

Docker daemon luôn chạy như người dùng root, và kể từ Docker phiên bản 0.5.2, docker daemon liên kết với một socket Unix thay vì một cổng TCP. Theo mặc định, socket Unix được sở hữu bởi root của người dùng, và do đó, theo mặc định, bạn có thể truy cập nó bằng sudo.

Bắt đầu từ phiên bản 0.5.3, nếu bạn (hoặc trình cài đặt Docker) tạo một nhóm Unix gọi là docker và thêm người dùng vào nó, thì trình docker daemon sẽ làm cho quyền sở hữu của socket Unix được đọc / ghi bởi nhóm docker khi daemon bắt đầu . Daemon docker phải luôn chạy như người dùng root, nhưng nếu bạn chạy trình khách docker như một người dùng trong nhóm docker thì bạn không cần phải thêm sudo vào tất cả các lệnh của máy khách. Kể từ 0.9.0, bạn có thể chỉ định rằng một nhóm không phải là docker nên sở hữu socket Unix với tùy chọn -G.

Cảnh báo: Nhóm docker (hoặc nhóm được chỉ định bằng -G) là tương đương gốc; xem Docker Daemon Attack Chi tiết bề mặt và blogpost này trên Tại sao chúng tôi không cho phép người dùng không phải root chạy Docker trong CentOS, Fedora hoặc RHEL  (cảm ơn michael-n).


Quan trọng cần đọc: các bước cài đặt sau cho Linux (nó cũng liên kết đến Docker Daemon Attack Chi tiết bề mặt).

Quản lý Docker với tư cách người dùng không phải root

Docker daemon liên kết với một socket Unix thay vì một cổng TCP. Theo mặc định, ổ cắm Unix được sở hữu bởi người dùng root và những người dùng khác chỉ có thể truy cập nó bằng sudo. Docker daemon luôn chạy như người dùng root.

Nếu bạn không muốn sử dụng sudo khi bạn sử dụng lệnh docker, hãy tạo một nhóm Unix có tên là docker và thêm người dùng vào nó. Khi docker daemon bắt đầu, nó làm cho quyền sở hữu của socket Unix được đọc / ghi bởi nhóm docker.


  • Thêm nhóm docker nếu nó chưa tồn tại:

    sudo groupadd docker
    
  • Thêm người dùng đã kết nối "$ USER" vào nhóm docker. Thay đổi tên người dùng để phù hợp với người dùng ưa thích của bạn nếu bạn không muốn sử dụng người dùng hiện tại của mình:

    sudo gpasswd -a $USER docker
    
  • Hoặc là làm newgrp docker hoặc đăng xuất / đăng nhập để kích hoạt các thay đổi đối với các nhóm.

  • Bạn có thể dùng

    docker run hello-world
    

    để kiểm tra xem bạn có thể chạy docker không có sudo không.


953
2018-06-06 08:24



Đó không phải là kiến ​​trúc không an toàn nhất cho sản xuất? Chắc chắn là tôi đang thiếu gì đó - matt
Vâng, nhưng mọi quá trình đặc quyền đều mở ra tiềm năng để khai thác. Là docker hooking rằng sâu vào hệ điều hành để thực sự ủy quyền rằng mức độ đặc quyền? - matt
newgrp docker không làm việc cho tôi, tôi phải đăng xuất. - lolmaus - Andrey Mikhaylov
Điều đáng nói là điều này mang lại cho người dùng đó quyền truy cập root không bị giới hạn, không được bảo vệ bằng mật khẩu. Xem chi tiết của lỗ hổng ở đây - Chris Foster
bạn không cần phải khởi động lại docker daemon để thay đổi này diễn ra !! chỉ cần có người dùng mà bạn vừa thêm đăng xuất rồi quay lại - Tommy


Để chạy lệnh docker mà không cần sudo, bạn cần thêm người dùng của mình (người có đặc quyền root) vào nhóm docker. Đối với lệnh chạy sau:

 sudo usermod -aG docker $USER

Bây giờ, hãy đăng xuất người dùng rồi đăng nhập lại. Giải pháp này cũng được giải thích đây với quá trình cài đặt thích hợp.


153
2018-02-27 19:57



sau khi thêm người dùng vào nhóm, hãy chạy lệnh này: sg group_name -c "bash" - madjardi
không thực sự cần phải khởi động lại hệ điều hành. Chỉ cần đăng xuất và đăng nhập lại. - binW
bạn không cần phải khởi động lại hệ điều hành để thay đổi này diễn ra! Điều đó sẽ đánh bom tất cả các container đang chạy! Chỉ cần có người dùng mà bạn vừa mới đăng xuất rồi đăng nhập. - Tommy
Làm thế nào lệnh đó khác với "sudo gpasswd -a $ {USER} docker" trong câu trả lời khác? Nếu có ... - Ashley Aitken
Bạn có thể vui lòng thêm cảnh báo được đưa ra bởi các tài liệu: "Nhóm docker [...] là gốc tương đương", vì vậy mọi người có cơ hội để suy nghĩ về nó - Murmel


Cơ chế để thêm người dùng vào nhóm docker cấp quyền chạy docker là truy cập vào socket của docker tại /var/run/docker.sock. Nếu hệ thống tập tin chứa /var/run đã được gắn kết với ACL được bật, điều này cũng có thể đạt được thông qua ACL.

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

Tôi chỉ bao gồm điều này cho đầy đủ.

Nói chung, tôi khuyên bạn nên tránh ACL bất cứ khi nào có sự thay thế tốt dựa trên các nhóm: Sẽ tốt hơn nếu các đặc quyền trong hệ thống có thể được hiểu bằng cách chỉ xem xét các thành viên nhóm. Phải quét hệ thống tập tin cho các mục ACL để hiểu các đặc quyền của hệ thống là một gánh nặng bổ sung cho việc kiểm tra bảo mật.

Cảnh báo 1: Điều này có cùng root tương đương như thêm username đến docker nhóm. Bạn vẫn có thể bắt đầu một thùng chứa theo cách có root truy cập vào hệ thống tập tin lưu trữ.

Cảnh báo 2: ACL là khó khăn hơn nhiều đối với kiểm toán bảo mật hơn so với bảo mật dựa trên nhóm. Có lẽ tránh ACL nếu có thể khi bạn có thể sử dụng các nhóm thay vào đó, ít nhất là trong các môi trường có liên quan đến kiểm toán.


25
2017-12-01 16:08



Nó hoạt động trên 16.04 - edib
Đây là những gì tôi cần, các câu trả lời khác, yêu cầu người dùng phải có quyền root. Cảm ơn rất nhiều! - Mrinal Saurabh
Cách tốt hơn nhiều imo. Các docker nhóm là gốc tương đương và đó luôn luôn là một dấu hiệu nguy hiểm. Và tôi không thấy bất kỳ bất lợi nào khi sở hữu một tệp này. - Xerus
Bạn có thể mô tả các lệnh nào sẽ được thực hiện để "truy cập vào socket của docker tại /var/run/docker.sock"? - Yuval Atzmon
@ Xerus nếu tôi hiểu chính xác, bất cứ ai có thể ghi vào ổ cắm này cũng có thể nhận được các đặc quyền tương đương với root. Vì vậy, cho phép ai đó truy cập vào ổ cắm này thông qua ACL có tác dụng bảo mật tương tự như thêm người đó vào nhóm docker. - Paŭlo Ebermann