Trong môi trường tùy chỉnh của tôi, thư viện trình chặn được tải sẵn để chạy một triển khai đặc biệt gồm các cuộc gọi bind()
, connect()
, v.v.Việc sử dụng khả năng của Linux có vô hiệu hóa LD_PRELOAD
Vấn đề tôi thấy là bất cứ khi nào ứng dụng được kích hoạt một cách rõ ràng khả năng bằng lệnh setcap
, thực thi ứng dụng không tải trước thư viện chặn và gọi mặc định là libc connect()
.
Đây có phải là hành vi mong đợi không? Nếu có, điều gì có thể là lý do để vô hiệu hóa LD_PRELOAD
?
Có bất kỳ tinh chỉnh hoặc phương pháp nào có thể sử dụng để tải trước thư viện thành công với các khả năng được bật hay không.
Xem [câu hỏi này] (http://stackoverflow.com/questions/9843178/linux-capabilities-setcap-seems-to-disable-ld-library-path) để có câu trả lời. – scai
Bạn có thể viết chương trình bao bọc cho nhị phân đích. Nó sẽ nhiều hơn hoặc ít hơn phải được setuid gốc. Nó sẽ nĩa một tiến trình con, sau đó thực hiện nhị phân đích (với 'LD_PRELOAD'); nhị phân đích không có bất kỳ khả năng tệp nào được đặt. Thư viện tải trước của bạn sau đó giao tiếp với tiến trình con (thông qua ví dụ: một cặp socket nói fd 3), với quá trình con cấp các khả năng cần thiết cho quá trình đích, sau đó thoát (và thư viện tải trước gặt con). Hãy cho tôi biết nếu bạn muốn có một ví dụ. –
@NominalAnimal Rất vui nếu bạn có thể chỉ cho tôi một ví dụ. –