Vì sao chế độ đặc quyền rộng hơn mức VPN cần
Container đặc quyền cấp thiết bị và khả năng không liên quan đến đường hầm. Tìm yêu cầu duy nhất phía sau lỗi trước khi dùng nó như một công tắc.
Container không chịu mở đường hầm, nên cờ đặc quyền được thêm vào, và giờ nó chạy được. Chuỗi thao tác đó chỉ chứng minh rằng thiếu ít nhất một quyền, và không nói gì về việc thiếu quyền nào. Chế độ đặc quyền cấp một tập khả năng và quyền truy cập thiết bị rộng hơn nhiều so với mức một giao diện đường hầm cần.
Cờ này thực sự thay đổi điều gì
Container đặc quyền nhận được khả năng rộng và quyền truy cập thiết bị của máy chủ, đây là mức cấp lớn hơn nhiều so với yêu cầu của đường dẫn mạng. Tập hợp chính xác được môi trường thực thi ghi nhận chứ không do truyền khẩu quyết định, và tài liệu của Docker về chạy container mô tả các tùy chọn đặc quyền hiện có. Đọc một lần là đủ để thấy đường hầm chỉ là phần nhỏ của tổng thể.
Hai yêu cầu hẹp hơn bao phủ phần lớn container VPN. Cấu hình giao diện cần khả năng quản trị mạng, và mở thiết bị đường hầm cần quyền truy cập đúng nút thiết bị đó. Đây là các quyền riêng biệt, và ngay cả cả hai cùng lúc cũng vẫn hẹp hơn tùy chọn bao trùm. Phần còn lại của tập đặc quyền không liên quan gì đến đường hầm. Nó tồn tại cho các khối lượng công việc thực sự cần quyền truy cập cấp máy chủ, và container VPN thường không phải một trong số đó.
Ghép mỗi lỗi với một điều kiện tiên quyết
Thông báo lỗi cho bạn biết điều kiện tiên quyết nào còn thiếu nếu đọc nó trước khi che lỗi. Thông báo về nút thiết bị nêu tên thiết bị, thông báo về thao tác không được phép nêu tên một khả năng, và thông báo về mô-đun hoặc sysctl nêu tên hỗ trợ của nhân. Mỗi loại có cách khắc phục khác nhau, và chỉ một trong số đó là khả năng.
Tệp cấu hình thiếu vẫn thiếu sau khi mọi khả năng đã được cấp, đó là lý do đôi khi chế độ đặc quyền không thay đổi gì cả. Container khởi động, đường hầm vẫn hỏng, và lỗi thật chưa bao giờ là về quyền. Hỗ trợ của nhân là trường hợp thứ ba và dễ đọc sai nhất. Mô-đun không được nạp trên máy chủ thì không thể nạp từ bên trong một container không đặc quyền, và cấp thêm khả năng bên trong container không thay đổi trạng thái của máy chủ.
Kiểm tra yêu cầu, không phải triệu chứng
Bắt đầu từ lệnh tối thiểu mà image ghi nhận, chạy nó, và giữ nguyên văn bản lỗi chính xác. Sau đó thêm từng quyền một và ghi lại lần thêm nào đã thay đổi kết quả.
ls -l /dev/net/tun
docker run --rm --cap-add NET_ADMIN --device /dev/net/tun image:tag
ip -br link show type tunContainer nhìn thấy thiết bị và có khả năng nhưng vẫn hỏng đang cho bạn biết vấn đề nằm ở chỗ khác. Đó là một kết quả hữu ích, và chế độ đặc quyền sẽ che mất nó.
Cũng hãy kiểm tra quyền của thiết bị trên máy chủ, vì một nút thiết bị được cấp đúng nhưng sai quyền sở hữu nhóm sẽ tạo ra lỗi giống như thiếu quyền.
Ghi lại quyền hẹp nhất còn hoạt động
Ghi lại từng thiết bị và khả năng mà việc triển khai cần, cùng với lỗi đã biện minh cho chúng. Chính bản ghi đó giúp người tiếp theo gỡ bỏ thứ gì đó một cách an toàn, và đó cũng là thứ một kiểm toán viên sẽ yêu cầu khi một container bị báo cáo là đặc quyền.
Cũng xem lại bối cảnh xung quanh, vì mạng của máy chủ, các điểm gắn kết của máy chủ và tùy chọn môi trường thực thi đều có thể mở rộng tác động của một quyền. Một lệnh thử nghiệm biệt lập kết hợp tất cả lại không phải cấu hình sản xuất, dù nó chạy tốt đến đâu. Hãy kiểm thử ứng dụng, hành vi DNS của nó và một lần hỏng đường hầm trước khi tuyên bố triển khai hoàn tất. Quyền tạo giao diện không phải chính sách ra ngoài, và một container có thể tạo đường hầm hoàn hảo vẫn định tuyến mọi thứ ứng dụng gửi đi.