Nguồn APT cho VPN: nó cấp quyền gì và cách giới hạn
Nguồn APT cho VPN là một sự cho phép thường trực, không phải một lần tải về. Giới hạn khóa trong nguồn đó, đọc giao dịch và viết sẵn bước gỡ bỏ trước khi thêm nó.
Tải một ứng dụng VPN là quyết định một lần; thêm kho APT của nó thì không phải vậy. Việc thứ hai cho trình quản lý gói biết phần mềm tương lai có thể đến từ đâu, và đó là một sự chuyển giao thẩm quyền thường trực chứ không phải một lần tải về. Đó có thể là cách sắp xếp đúng khi nhà cung cấp duy trì kho đúng cách. Dù vậy nó vẫn đáng một quyết định có ý thức, và hầu hết hướng dẫn cài đặt đều bỏ qua điều này.
Chữ ký xác thực một kho lưu trữ, không xác thực mã bên trong
APT xác minh siêu dữ liệu kho đã ký rồi tin vào các tổng kiểm tra bên trong siêu dữ liệu đó cho những gói nó tải về. Điều đó chứng minh kho khớp với thứ người giữ khóa đã công bố, và không nói gì về mã bên trong. Một gói được ký đúng vẫn có thể mang các script bảo trì không an toàn, và những script đó chạy với quyền root trong khi gói được cài. Hướng dẫn apt-secure vạch đúng ranh giới này giữa xác thực kho lưu trữ và việc xem xét phần mềm.
Vậy câu hỏi hữu ích không phải là chữ ký có hợp lệ hay không, vì chữ ký hỏng vốn đã chặn việc cài đặt. Câu hỏi là bạn chọn tin chữ ký của ai từ nay về sau. Một khóa ký bị đánh cắp còn tệ hơn một gói bị đánh cắp, vì kẻ tấn công vẫn tiếp tục tạo siêu dữ liệu hợp lệ rất lâu sau bản phát hành hỏng đầu tiên. Luân chuyển khóa là cách sửa duy nhất, và nó phụ thuộc vào việc nhà cung cấp công bố khóa mới qua một kênh mà bạn có thể tự xác minh.
Đó là lý do danh tính của khóa đáng được chú ý ngang với URL của kho. Một khóa lấy từ địa chỉ trong câu trả lời diễn đàn cũ không chứng minh gì về nhà phát hành, trong khi HTTPS chỉ bảo vệ việc truyền đến người đã nghe điện thoại. An toàn truyền tải và danh tính nhà phát hành là hai câu hỏi riêng biệt, và chỉ câu thứ nhất được giải quyết bằng chứng chỉ.
Giới hạn khóa trong nguồn, không phải trong hệ thống
APT hiện đại chấp nhận một tham chiếu Signed-By dành riêng cho nguồn. Một khóa do người vận hành quản lý có thể nằm dưới /etc/apt/keyrings/, và mục nguồn nêu tên khóa được phép xác thực kho đó. Điều đó hẹp hơn việc ném cùng khóa vào một tập được tin cậy toàn cục, nơi nó có thể bảo lãnh cho những nguồn bạn chưa bao giờ định cho phép. Hãy theo phiên bản APT đã cài và hướng dẫn hiện hành của nhà cung cấp thay vì trộn các mảnh từ những thế hệ hướng dẫn khác nhau.
curl -fsSL https://repo.example.com/vpn-key.gpg -o /etc/apt/keyrings/vpn.gpg
echo "deb [signed-by=/etc/apt/keyrings/vpn.gpg] https://repo.example.com/debian stable main" > /etc/apt/sources.list.d/vpn.listĐừng bao giờ sửa lỗi chữ ký bằng cách tắt xác minh hoặc đánh dấu một kho lạ là đáng tin. Việc đó đổi một lỗi nhìn thấy được lấy một lỗi không nhìn thấy được, và cái không nhìn thấy sẽ kéo dài cho đến khi ai đó kiểm toán danh sách nguồn. Nếu khóa không khớp, cách sửa đúng là tìm đúng khóa, không phải bỏ kiểm tra.
Lấy chi tiết kho và danh tính khóa từ dự án hoặc từ một quản trị viên được quản lý. Một khóa sao chép từ bài blog là một khẳng định về quyền tác giả, không phải bằng chứng. Khi nhà cung cấp công bố kênh luân chuyển, hãy ghi lại nó cùng với khóa, vì chính kênh đó làm cho lần luân chuyển sau khả thi.
Ghim nguồn không phải danh sách cho phép gói
Giới hạn một khóa trong một nguồn giới hạn kho mà nó có thể xác thực, không giới hạn những gói mà kho đó được phép công bố. Kho có thể gửi nhiều thứ hơn hẳn ứng dụng VPN bạn muốn, và việc chọn ứng viên cùng các ưu tiên của APT quyết định phiên bản đủ điều kiện nào thắng. Hãy xem lại giao dịch được đề xuất trước khi xác nhận, kể cả danh sách phụ thuộc, vì các phụ thuộc đến từ cùng kho đó. Phạm vi của một khóa không thể diễn đạt ’chỉ gói này’.
Nếu cần kiểm soát mạnh hơn, hãy diễn đạt nó thành chính sách về tên hoặc phiên bản gói và giữ chính sách đó dưới quản lý cấu hình. Đọc một giao dịch mất một phút; phát hiện một gói bất ngờ sáu tháng sau mất một lần rà soát.
Những gói bất ngờ là lúc nên dừng lại chứ không phải đi tiếp, và câu hỏi cho chủ kho là vì sao chúng cần thiết. Một kho công bố hàng chục gói quanh một ứng dụng là bình thường với nhà cung cấp phát hành bộ ứng dụng máy tính để bàn. Đó cũng là bề mặt lớn hơn những gì hướng dẫn cài đặt ngụ ý, và đây chính là phần đáng ghi lại. Không kết quả nào trong hai kết quả là lý do để không tin chữ ký; cả hai đều là lý do để viết ra điều bạn đã chấp nhận.
Ghi lại thẩm quyền và cách gỡ bỏ nó
Viết ra chủ kho, phiên bản hệ điều hành được hỗ trợ, kênh luân chuyển khóa và quy trình gỡ bỏ. Bốn dữ kiện đó là những gì người kế nhiệm cần khi ứng dụng ngừng dùng hoặc nhà cung cấp luân chuyển khóa. Không có chúng, người tiếp theo thừa hưởng một dòng nguồn và một tệp khóa mà không có câu chuyện nào.
Gỡ bỏ là bước bị bỏ qua, nên hãy viết nó ngay khi cài đặt. Xóa mục nguồn và khóa riêng của nó cùng lúc, và kiểm tra xem khóa đó có được tham chiếu ở nơi khác không trước khi xóa tệp. Một khóa dùng chung bị xóa mà không kiểm tra như vậy biến một lần dọn dẹp thành một sự cố không liên quan, và đó là kết quả tệ nhất cho một thay đổi thường lệ. Sau đó xác nhận rằng các bản cập nhật thông thường vẫn giải quyết được khi mục đó đã biến mất.
Một điều còn lại sau khi gỡ kho: bất kỳ gói nào đã cài từ đó vẫn chạy cho đến khi có thứ gì thay thế nó. Câu hỏi trung thực là bạn đã thêm thẩm quyền nào, và vai trò của nó được diễn đạt hẹp đến mức nào.