2009-08-21 23 views
6

Weź pod uwagę ten scenariusz, w którym plik wykonywalny A.bin używa libY.so i libZ.so. A.c, Y.c i Z.c są napisane w C. Z.c i Y.c są kompilowane do odpowiednich plików .so.Program nie może się załadować po ustawieniu bitu setuid na

Jest to struktura katalogów z plikami

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

Kiedy uruchomić .bin jako zwykły użytkownik, A.bin działa normalnie zgodnie z oczekiwaniami. Uwaga: $ LD_LIBRARY_PATH zawiera $ home/lib

Zmieniłem trochę kodu w Ac, dodając funkcje wymagające uprawnień administratora (np. Powiązanie z portem mniejszym niż 1000). Ustawiam bit setuid dla A.bin, libY.so i libZ.so na rwsrwsrws i zmieniam prawo własności plików na root. Kiedy próbuję uruchomić A.bin, otrzymuję następujący błąd

ld.so.1: A.bin: śmiertelne: libY.so: otwórz failed: Nie ma takiego pliku lub katalogu Zabity

kiedy po prostu usuń uprawnienie setuid ze wszystkich tych plików, a następnie binarne uruchomienia z wyjątkiem funkcji nie powiedzie się tam, gdzie potrzebuje uprawnień roota.

Jak przezwyciężyć ten problem?

Edycja: OS jest Solaris 5,10

Odpowiedz

3

W niektórych wariantów Unix, suid wykonywalne mają pewne funkcje zabezpieczeń, takie jak ignorowanie LD_LIBRARY_PATH, sprawdzanie praw własności i dostępu w pliku wykonywalnego i używane wspólne biblioteki, ... nie wiem pamiętaj o przypadku Solaris, ale powinieneś to sprawdzić.

+4

* Wszelkie * UNIXopodobnych musi zignorować LD_LIBRARY_PATH dla binariów setuid, w przeciwnym razie jest to luka w zabezpieczeniach można prowadzić samochód przez. – caf

+0

@caf: Napotkałem jeden, który nie. Wszystkie pliki binarne setuid zostały statycznie połączone. – Joshua