2009-08-21 16 views
6

Xem xét trường hợp này trong đó A.bin thực thi sử dụng libY.so và libZ.so. A.c, Y.c và Z.c đều được viết bằng C. Z.c và Y.c được biên dịch thành các tệp .so tương ứng.Chương trình không thể tải sau khi thiết lập bit setuid trên

Đây là cấu trúc thư mục của file

$ home/bin/A.bin $ home/lib/libY.so $ home/lib/libZ.so

Khi tôi chạy Một .bin là người dùng bình thường, A.bin chạy bình thường như mong đợi. Lưu ý: $ LD_LIBRARY_PATH chứa $ home/lib

Tôi đã thay đổi một số mã trong A.c thêm một số chức năng cần đặc quyền quản trị (như ràng buộc với cổng nhỏ hơn 1000). Tôi đặt bit setuid cho A.bin, libY.so và libZ.so thành rwsrwsrws và thay đổi quyền sở hữu của các tệp thành root. Khi tôi cố gắng chạy A.bin, tôi nhận được lỗi sau

ld.so.1: A.bin: gây tử vong: libY.so: mở thất bại: Không có tập tin hoặc thư mục như giết

Khi tôi chỉ cần xóa quyền setuid khỏi tất cả các tệp đó, sau đó nhị phân chạy ngoại trừ chức năng không thành công khi cần quyền root.

Làm cách nào để khắc phục sự cố này?

Edit: Các hệ điều hành Solaris là 5.10

Trả lời

3

Trong một số biến thể Unix, thực thi suid có một số tính năng bảo mật như phớt lờ LD_LIBRARY_PATH, kiểm tra quyền sở hữu và quyền truy cập vào thực thi và được sử dụng các thư viện chia sẻ, ... Tôi không nhớ trường hợp của Solaris, nhưng có lẽ bạn nên kiểm tra điều đó.

+4

* Bất kỳ * UNIX-like OS có bỏ qua LD_LIBRARY_PATH cho những chương trình setuid, nếu không nó là một lỗ hổng bảo mật bạn có thể lái xe một chiếc xe tải qua. – caf

+0

@caf: Tôi đã gặp phải điều đó. Tất cả các tập tin nhị phân setuid đều được liên kết tĩnh. – Joshua