2013-09-27 146 views
19

Một Docker blog post chỉ: containerBảo Mật Của Những Docker vì nó chạy như người dùng root

Docker là, theo mặc định, khá an toàn; đặc biệt là nếu bạn chăm sóc quá trình hoạt động của bạn bên trong container như người dùng không có đặc quyền (tức là không root)."

Vì vậy, vấn đề bảo mật là gì nếu tôi chạy như một gốc dưới Docker Ý tôi là, nó khá an toàn nếu tôi xử lý các quy trình của mình với tư cách người dùng không có đặc quyền, vì vậy, làm cách nào để tôi có thể gây hại cho máy chủ lưu trữ trong vùng chứa với tư cách là người dùng root? nó sẽ bị cô lập nếu nó không an toàn khi chạy dưới dạng root? Các cuộc gọi hệ thống nào có thể phơi bày hệ thống máy chủ sau đó?

Trả lời

16

Khi bạn chạy dưới dạng root, bạn có thể truy cập vào một loạt dịch vụ hạt nhân hơn chẳng hạn như:

  • thao tác các giao diện mạng, bảng định tuyến, quy tắc lọc mạng;
  • tạo ổ cắm thô (và nói chung, "ổ cắm" kỳ lạ, thực thi mã đã nhận được ít sự giám sát hơn so với TCP và UDP cũ tốt);
  • mount/unmount/remount filesystems;
  • thay đổi quyền sở hữu tệp, quyền, thuộc tính mở rộng, ghi đè quyền thông thường (tức là sử dụng các đường dẫn mã hơi khác nhau);
  • , vv

(Thật thú vị khi lưu ý rằng tất cả những ví dụ được bảo vệ bởi capabilities.)

Điểm mấu chốt là khi root, bạn có thể thực hiện mã hạt nhân trở lên; nếu có lỗ hổng trong mã đó, bạn có thể kích hoạt nó dưới dạng root, nhưng không phải là người dùng thông thường.

Ngoài ra, nếu ai đó tìm cách phá vỡ thùng chứa, nếu bạn thoát ra khỏi thư mục gốc, bạn có thể gây ra nhiều thiệt hại hơn người dùng thông thường.

+0

Vì vậy, bạn sẽ gần như an toàn khi Docker bạn chạy chạy một người sử dụng không phải root để thực thi công cụ tùy ý – Mustafa

+1

Tôi muốn có gốc truy cập trong vùng chứa, nhưng hãy chắc chắn rằng nó không thể phá vỡ hệ thống máy chủ. Điều này giúp việc thực hiện triết lý vùng chứa đơn lẻ trở nên dễ dàng hơn. – CMCDragonkai

+1

Câu cuối cùng liên quan đến việc phá vỡ thùng chứa là một chút gây hiểu nhầm. Nếu bạn có thể thoát ra khỏi một thùng chứa, bất kể bạn ở bên trong thùng chứa nào, bạn sẽ thoát ra khi chính quy trình LXC đang chạy như trên hệ điều hành máy chủ. Đây thường là root. Điều đó nói rằng, nó vẫn là một ý tưởng tốt để chạy các quá trình container như một người dùng không có đặc quyền, vì điều đó làm cho nó khó khăn hơn để thoát ra khỏi container (ít nhất là trong lý thuyết). – nateware

5

Bạn có thể khởi động lại máy chủ bằng cách lặp lại /proc/sysrq-trigger trên docker. Các tiến trình chạy dưới dạng root trong docker có thể thực hiện điều này.

Điều này có vẻ lý do khá tốt không để chạy các quá trình như là người chủ trong Docker;)

+6

Tôi nhận được 'bash:/proc/sysrq-trigger: Hệ thống tập tin chỉ đọc ' –

+2

Chà ... sau hai năm cuối cùng họ cố định một cái gì đó? – wrzasa

+0

Vâng xin lỗi, tôi không nhìn thấy ngày :) –