‫Được rồi. Chúng tôi biết không chạy dưới quyền root trong vùng chứa.
‫Tuy nhiên, bên ngoài vùng chứa, nhân tiện, root trong vùng chứa không
‫có quyền truy cập trực tiếp vào bất kỳ thứ gì trên máy chủ,
‫đúng không. Chỉ vì bạn root
‫trong vùng chứa, bạn vẫn bị bỏ tù trong đó.
‫Nhưng, nếu bạn muốn thực
‫hiện cấp độ tiếp theo đó, nơi nếu người dùng thậm chí có quyền root trong vùng chứa,
‫muốn thoát ra máy chủ lưu trữ, bởi vì có
‫một hạt nhân của lỗ hổng như chúng ta
‫đã nói về, như Con bò bẩn hoặc lỗ hổng khác trong Docker hoặc
‫một cái gì đó.
‫Sau đó, bước tiếp theo bạn làm ở đây là bật không gian tên
‫người dùng, không được bật theo mặc định.
‫Tôi có một liên kết ở đây dẫn đến một bài
‫báo trên blog nói về nó.
‫Về cơ bản, đó là cài đặt trên mỗi máy chủ lưu trữ mà bạn đặt trong
‫cấu hình Docker. Docker JSON.
‫Nó cho Docker biết rằng bất cứ lúc nào nó tạo một vùng chứa mới
‫để chạy vùng chứa đó với
‫tư cách là người dùng không phải root trên máy chủ.
‫Vì vậy, về cơ bản có một
‫vài chương trình ở đó, containerd và runC, là những chương trình khác mà Docker
‫sử dụng để khởi động vùng chứa của bạn.
‫Theo mặc định, chúng chạy dưới dạng root.
‫Một tính năng mà Docker có là kích hoạt không gian
‫tên người dùng, về cơ bản có
‫nghĩa là khi Docker tạo các vùng chứa này, nó sẽ không tạo
‫ra chúng dưới dạng một quy trình con chạy dưới quyền root như Docker.
‫Nó sẽ sinh ra họ với tư cách là một người dùng được đánh số cao.
‫Một loại, không nhất thiết phải là người dùng ngẫu nhiên, mà là
‫người dùng cấp cao.
‫Điều đó có nghĩa là nếu vùng chứa
‫đó có bất kỳ lỗ hổng bảo mật nào
‫mà người dùng có thể thoát khỏi vùng chứa, thì sẽ vẫn chỉ
‫là người dùng trên máy chủ. Bởi vì họ sẽ đóng vai
‫trò là người dùng mà tiến trình đang chạy vùng chứa đó đang
‫sử dụng. Về cơ bản runC.
‫Chương trình runC là thứ khởi chạy vùng chứa đó và
‫nó sẽ chạy với tư cách người dùng được đánh số
‫cao, không phải root. Người dùng đó không thực sự có bất
‫kỳ đặc quyền nào bên ngoài vùng chứa đó. Vì vậy, tính năng đó là cài đặt
‫trên mỗi máy chủ lưu trữ, không phải cài đặt cho mỗi vùng chứa và
‫không phải mọi thứ đều hoạt động trong không gian tên người dùng.
‫Bạn sẽ phải cố gắng và luyện tập.
‫Bạn sẽ phải bật nó trên một số máy chủ, hãy thử các ứng dụng
‫của bạn trên máy chủ đó, xem chúng có hoạt động không.
‫Nếu không, bạn sẽ phải phân đoạn kiến
‫trúc của mình. Bất cứ khi nào tôi triển
‫khai không gian tên người dùng trong một cụm, chúng tôi thường có các nút công nhân
‫cụ thể đã bật không gian tên người dùng.
‫Đó là nơi những chương trình chạy có thể hỗ trợ nó,
‫hoạt động với nó.
‫Mọi thứ khác phải chạy trên các máy chủ Docker thông thường
‫ở một nơi khác. Đó là cách chúng tôi phân đoạn nó ra.
‫Chúng tôi phân chia thành hai lớp máy chủ.
‫Điều đó, bạn biết đấy, giống như nếu bạn đang chạy một DMZ, đó là
‫những gì tôi sẽ làm là tôi sẽ chạy, tôi sẽ bật, trong DMZ,
‫tất cả không gian tên người dùng, trên tất cả các máy
‫chủ và sau đó là các vùng chứa chạy sẽ phải có, sẽ phải hỗ trợ
‫không gian tên người dùng.
‫Bạn không thể đi xem xét các ứng dụng và tìm hiểu xem chúng có hỗ trợ không
‫gian tên người dùng hay không.
‫Nó là một... không gian tên người dùng không nhất thiết phải là
‫một tính năng cụ thể của Docker. Về cơ bản, nó có nghĩa
‫là vùng chứa của bạn đang chạy trong một không gian
‫tên và bây giờ ứng dụng chạy vùng chứa đó cũng bị khóa
‫lại một chút.
‫Không phải mọi thứ đều có thể hỗ trợ điều đó. Bạn sẽ chỉ phải
‫thực hành hoặc có thể thực hiện một số nghiên cứu để
‫xem liệu những người khác có thể làm cho nó
‫hoạt động dưới đó hay không. Bạn biết đấy, đối với những thứ phổ biến
‫như MySQL và những thứ tương tự. Nhưng rõ ràng, đối với các
‫chương trình của riêng bạn mà bạn đang phát triển, bạn sẽ phải kiểm tra chúng để
‫xem liệu chúng có hoạt động hay không. Tôi muốn nói rằng hầu hết
‫các chương trình và ngôn ngữ phổ biến mà tôi chạy, chúng hoạt
‫động tốt trong không gian tên người dùng. Vấn đề thực sự với không
‫gian tên người dùng là khi bạn có một ứng dụng cần ghi vào
‫ổ đĩa hoặc để liên kết các tệp gắn kết, có
‫thể bạn đã tải lên tệp người dùng và bạn đang
‫chia sẻ chúng trên nhiều vùng chứa khác nhau. Đó là nơi không gian tên người dùng không phải là không thể.
‫Nó chỉ gặp một chút khó khăn vì các tệp hiện được ghi
‫vào đĩa trên máy chủ lưu trữ hiện đang được ghi với tư
‫cách là một người dùng khác.
‫Vì quá trình đó trên máy chủ quản lý vùng chứa
‫là một người dùng khác.
‫Vì vậy, bạn sẽ thấy các ID người dùng khác nhau trên các tệp đó và bạn sẽ
‫phải giải quyết vấn đề đó.
‫Tại thời điểm đó, có các quyền tiêu chuẩn của Linux và bạn chỉ
‫cần tự động hóa và giải quyết các vấn đề đó theo
‫nhiều cách tiêu chuẩn Linux khác nhau.
‫Nó thậm chí không thực sự là một vấn đề của Docker vào thời điểm đó.
‫Đó chỉ là vấn đề về quyền trên máy chủ.