Chrome trong Docker: CAP_SYS_ADMIN so với đặc quyền? [đóng cửa]


11

Tôi đang chạy chromedriver + chrome bên trong Docker trong môi trường thử nghiệm của mình.

Mọi thứ đều hoạt động tốt cho đến khi nâng cấp CoreOS mới nhất.

Đây là những phiên bản có vẻ hoạt động:

VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937

Và đây là phiên bản mới hơn khiến chrome bị coredump:

VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450

Nhìn vào các thay đổi, có vẻ như docker đã được nâng cấp từ 1.11.x lên 1.12.x, đã phá vỡ setns()cuộc gọi bên trong container. setns()được Chrome sử dụng để tạo không gian tên.

Đây là kết quả đầu ra mẫu:

jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae

Từ bên trong một container trên hộp này:

[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:

Đây là cách phiên bản mới phá vỡ nó:

jsosic-coreos-test-2017-01-04 ~ # docker --version
Docker version 1.12.3, build 34a2ead

[root@13ab34c36c82 /]# /opt/google/chrome/chrome
Failed to move to new namespace: PID namespaces supported,
  Network namespace supported,
  but failed: errno = Operation not permitted
Aborted (core dumped)

Những gì tôi đã phát hiện ra là nếu tôi khởi động bộ chứa bằng --cap-add=SYS_ADMINhoặc --privileged- Chrome hoạt động như mong đợi.

Sự khác biệt giữa hai công tắc là gì? Những khả năng được kích hoạt bởi --privileged?

Và, tôi có thể cho phép setns()bên trong container mà không ảnh hưởng đến an ninh không?


Cảm ơn vì điều đó. Tôi đã tạo ra một vấn đề, sử dụng rất nhiều nội dung của bạn: github.com/docker/for-linux/issues/496 Tôi nghĩ rằng nó nên được sửa chữa
Merc

Tôi gần 2 năm quá muộn, nhưng có một giải pháp tốt hơn và an toàn hơn trong vé ở trên nếu bạn vẫn quan tâm.
Merc

Nếu người đăng ban đầu không cập nhật câu trả lời (anh ta dường như không hoạt động trên SO), hãy cho tôi biết nếu bạn có thể chấp nhận một câu trả lời khác. Tôi đã lãng phí hàng giờ cho việc này, tôi chỉ có thể tưởng tượng chúng ta sẽ cứu người khác bao nhiêu giờ.
Merc

Câu trả lời:


7

AFAICS, tài liệu đề nghị cấp các khả năng cần thiết cho một container, thay vì sử dụng công --privilegedtắc. Chạy trong chế độ đặc quyền dường như cấp cho bộ chứa tất cả các khả năng (chính xác là những khả năng được liệt kê trong URL đầu tiên, với điều kiện là các tài liệu được cập nhật).

Nói tóm lại, tôi muốn nói rằng --cap-add=SYS_ADMINcấp một tập hợp nhỏ các khả năng cho container, so với công --privilegedtắc. Sự kiện các ví dụ trong tài liệu Docker (URL đầu tiên) dường như chỉ muốn thêm SYS_ADMINhoặc NET_ADMINkhả năng khi cần thiết.


Cảm ơn, exec_linux.gođã giúp đỡ. Tôi đã thử nhân bản repo docker để grep qua nó nhưng vì tôi mất vài giờ nên tôi đã quên nó :)
Jakov Sosic

Chỉ cần chạy Chrome, có một giải pháp tốt hơn được liệt kê ở đây: github.com/docker/for-linux/issues/496#issuecomment-441149510 Tôi nghĩ sẽ rất có lợi khi cập nhật câu trả lời để mọi người giải thích những gì tôi giải thích mà rất bình luận. Xin vui lòng cho tôi biết nếu bạn đồng ý.
Merc

1

Một điểm khác biệt là - gắn kết ưu tiên / dev và / sys là RW, trong khi SYS_ADMIN gắn kết chúng dưới dạng RO. Điều này có nghĩa là một container đặc quyền có quyền truy cập đầy đủ vào các thiết bị trên hệ thống. SYS_ADMIN không cung cấp cho bạn điều đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.