Vì sao nosuid ngăn một trình trợ giúp VPN trở thành root
Thư mục nhà được mã hoá và một lần gắn kết nosuid là hai thuộc tính khác nhau. Trình trợ giúp cần một đường dẫn cài đặt đáng tin cậy và một ngữ cảnh khởi chạy tôn trọng bit đặc quyền của nó.
Mã hoá ổ đĩa và một lần gắn kết nosuid nghe như những biến thể của cùng một ý tưởng, và chúng hoàn toàn không liên quan. Một cái bảo vệ dữ liệu ở trạng thái nghỉ, cái kia quyết định liệu nhân hệ điều hành có tôn trọng bit đặc quyền vào đúng lúc chương trình khởi động hay không. Một trình trợ giúp không đạt được danh tính mà nó mong đợi đang phàn nàn về cái thứ hai. Giả định rằng cái thứ nhất là nguyên nhân khiến người ta cài đặt lại những ứng dụng khách vốn chưa từng hỏng.
Hai Thuộc Tính Không Liên Quan
Mã hoá ổ đĩa trả lời ai có thể đọc các khối khi máy đã tắt. Tùy chọn gắn kết trả lời nhân hệ điều hành sẽ làm gì với các bit chế độ của tệp khi có người thực thi nó. Không có gì ở cái thứ nhất ràng buộc cái thứ hai, và một máy tính xách tay được mã hoá hoàn toàn vẫn có thể gắn kết một hệ thống tệp với mọi hạn chế tại chỗ.
Đọc chúng như một thuộc tính duy nhất chính là điều tạo ra lý thuyết rằng thư mục nhà được mã hoá ngăn cản quyền truy cập root. Lý thuyết đó tồn tại vì hai triệu chứng xuất hiện trên cùng một máy, không phải vì chúng có chung nguyên nhân.
Điều Gì Thực Sự Đè Nén Sự Chuyển Đổi
Tài liệu tham chiếu execve mô tả cách một tệp thực thi có set-user-ID thay đổi danh tính hiệu lực của tiến trình mới thành chủ sở hữu của tệp. Cùng trang đó liệt kê các điều kiện đè nén sự chuyển đổi này và điều kiện tương đương cho các định danh nhóm: một thiết lập no_new_privs, một hệ thống tệp được gắn kết với nosuid, và một tiến trình đang bị theo dõi. Các khả năng của tệp cũng bị bỏ qua trong cùng những điều kiện đó. Bốn quy tắc ấy bao trùm gần như mọi báo cáo kiểu này.
Danh sách đó giải thích vì sao chế độ mà ls in ra không bao giờ là toàn bộ câu chuyện cấp quyền. Nó không cho biết điều kiện nào đã gây ra một thông báo lỗi cụ thể, và ứng dụng có thể đang báo cáo một thao tác thông tin xác thực không liên quan bằng đúng những từ ấy. Hãy ghi lại chương trình chính xác, trình khởi chạy và trình tự lỗi trước khi kết luận.
Xác định tệp thực thi mà gói được hỗ trợ đã cài đặt, chủ sở hữu, đường dẫn thật và chính sách của hệ thống tệp chứa nó. Một bản sao nằm trong thư mục tải xuống không phải là trình trợ giúp đã cài, bất kể chế độ của nó nói gì.
Điều Không Nên Làm
Đặt bit set-user-ID lên một tệp nhị phân chưa được xác minh và di chuyển nó khắp nơi cho đến khi hạn chế biến mất không phải là sửa chữa. Nó thay thế một chính sách bạn không hiểu bằng một đặc quyền bạn không thể kiểm toán, và cùng thủ thuật ấy áp dụng cho một trình trợ giúp là con đường leo thang đã được biết đến. Gỡ nosuid khỏi một lần gắn kết còn tệ hơn, vì nó ảnh hưởng đến mọi chương trình trên hệ thống tệp đó, không chỉ một.
Con đường được hỗ trợ là việc cài đặt trình trợ giúp hoặc dịch vụ theo tài liệu của ứng dụng khách, do quản trị viên thực hiện, đặt tệp nhị phân vào nơi chính sách mong đợi. Như vậy chỉ còn một cơ chế đặc quyền thay vì hai.
Xác Nhận Ngữ Cảnh Khởi Chạy Thật
Sau một bản sửa được cho phép, hãy chạy trình trợ giúp theo cách sản phẩm chạy nó chứ không phải từ một shell root. Thành công với quyền root không chứng minh được gì về con đường của một người dùng thông thường, và sự khác biệt giữa hai ngữ cảnh ấy chính là điều mà lỗi nói tới.
Sau đó xác nhận thao tác mạng mà trình trợ giúp tồn tại để thực hiện. Một trình trợ giúp khởi động được nhưng không thể cấu hình giao diện đã đẩy vấn đề sang một giai đoạn sau, chứ chưa giải quyết.
findmnt -no TARGET,OPTIONS /home
getcap /usr/libexec/openvpn-helper 2>/dev/null; ls -l /usr/libexec/openvpn-helper
Ghi lại các tùy chọn gắn kết và quyền sở hữu của trình trợ giúp trong cùng một ghi chú. Nếu không, người tiếp theo gỡ lỗi việc này sẽ lặp lại lý thuyết mã hoá từ đầu.