2012-02-10 15 views
6

Próbuję użyć LD_PRELOAD do wstępnego wczytania biblioteki z aplikacją, która ma uprawnienia setuid. Próbowaliśmy LD_PRELOAD w pierwszym, i wydawało się, że jest ono ignorowane z setuid binarny, choć działał kiedy próbowałem go z innymi, jak ls, dir itpLD_PRELOAD z setuidem binarnym

Z dokumentacji LD_PRELOAD:

LD_PRELOAD 
      A whitespace-separated list of additional, user-specified, ELF shared 
      libraries to be loaded before all others. This can be used to 
      selectively override functions in other shared libraries. For set- 
      user-ID/set-group-ID ELF binaries, only libraries in the standard 
      search directories that are also set-user-ID will be loaded. 

Próbowałem umieścić biblioteki w /usr/lib, /usr/local/lib i /usr/lib64 z uprawnieniami setuid zgodnie z powyższą dokumentacją, ale nadal nie działa. Jeśli nie podam LD_PRELOAD ścieżki w przypadku, gdy mam bibliotekę w standardowych katalogach z opcją setuid, to nie mogę znaleźć biblioteki. Jeśli dam mu ścieżkę, nic nie robi.

Binarny setuid to plik binarny uprawnień root, który działa w powłoce użytkownika innego niż root. jakieś pomysły? Nie jestem pewien, czy brakuje mi ścieżki, zmiennej środowiskowej, czy też nie rozumiem powyższej dokumentacji.

Edit: uprawnienia wnioskowane są:

Biblioteka:

-rwsr-sr-x 1 root root 72580 2012-02-10 07:51 

App:

-rwsr-xr-x 1 root root 137517601 2012-02-10 

env | grep LD 
LD_LIBRARY_PATH=/usr/lib (I added this manually myself, usually LD_LIBRARY_PATH is empty) 
+0

Czy używasz SELinux? –

+0

Tak, Suse enterprise 11.1 jest tym, co aktualnie uruchomię. –

+2

W końcu zadziałało. W całym zbiorze testów musiałem coś zepsuć. Umieszczono go w lib64 z odpowiednimi uprawnieniami (setuid) i NIE zapewniając ścieżki do LD_PRELOAD. Dzięki za twoją pomoc faceci! –

Odpowiedz

-1

Zainstalować lib jako takie:

  • locat jonowy:/lib lub/usr/lib
  • uprawnienia: root: root
  • został setuid i setgid na

Upewnij LD_PRELOAD jest eksportowana do środowiska

$ export LD_PRELOAD=/usr/lib/yourlib.so 
$ env | grep LD_PRELOAD # verify 

Następnie uruchom program .

+0

To nie działa, i ma zastosowanie w bibliotece do _all_ aplikacji. Próbowałem użyć LD_PRELOAD = ... appname, aby po prostu wczytać ją do tej aplikacji. W ramach eksperymentu skopiowałem plik ls do mojego katalogu i dodałem do niego uprawnienia setuid (chmod u + s ./ls). Moja biblioteka wcześniej pracowała z ls, nie działa z tymi lokalnymi uprawnieniami. Zmieniono jeden. :(Jako inny eksperyment próbowałem dodać bibliotekę do /etc/ld.so.preload, i to działa, ale znowu, dla wszystkich aplikacje chciałem, aby działał z LD_PRELOAD = .. appname jeśli to możliwe. –

+0

możesz edytować, aby pokazać wynik 'ls -lad' na twojej bibliotece i twoim programie, a także wynik' env | grep LD'? –

+0

Dodano edycję Dziękuję za pomoc! Jeszcze jedno wyjaśnienie, kiedy umieściłem to w /etc/ld.so.preload, moja aplikacja również działa z biblioteką, działa tylko dla wszystkich aplikacji. Program ładujący działający jako część LD_PRELOAD jest pomijany w przypadku ld.so.preload, a gdy uruchomię go jako root, LD_PRELOAD działa z moją aplikacją, ale niestety nie mogę uruchomić aplikacji jako root, to był tylko szybki eksperyment. –

3

Jeśli używasz SELinux, może to być spowodowane tym. Jednym z pomocniczych wektorów ELF obsługiwanych przez glibc jest AT_SECURE. Ten konkretny parametr (domyślnie 0 lub 1) mówi dynamicznemu linkerowi ELF, aby usunąć różne zmienne środowiskowe, które są potencjalnie szkodliwe dla twojego systemu. Jednym z nich jest LD_PRELOAD. Zwykle te warunki środowiskowe są wykonywane, gdy wywoływana jest aplikacja setuid/setgid (w celu uniknięcia oczywistych słabych punktów). SELinux zwiększył również tę higienę, gdy aplikacja uruchamia przejście do domeny w SELinux (powiedzmy sysadm_t do mozilla_t przez binarną etykietę oznaczoną moz lub cokolwiek innego); SELinux ustawia flagę AT_SECURE dla załadowanej aplikacji (na przykład mozilla/firefox).

Uprawnienie noatsecure wyłącza działania związane ze środowiskiem sanitarnym dla określonego przejścia. Można to zrobić za pomocą poniższego zestawienia pozwalają (jak byłoby zastosować na przykład powyżej):

allow sysadm_t mozilla_t:process { noatsecure }; 
+0

Czy selinux ma rozszerzoną ochronę linux lub suse enterprise? nadal ubiegać się o przedsiębiorstwo ssące? –

+0

Według [this] (http://news.opensuse.org/2008/20/opensuse-to-add-selinux-basic-enablement-in-111/) SELinux jest opcją w SUSE Enterprise zaczynając od 11.1 . Jeśli go nie używasz, moja odpowiedź nie ma zastosowania. –

+0

Z tego, co widzę, nie korzystam z Selinux. Nie widzę żadnej z typowych opcji konfiguracyjnych selinux. Widziałem AppArmour, ale także jego niepełnosprawnych. –

7

LD_PRELOAD nie może być używany z setuid. Jest to funkcja bezpieczeństwa w systemie Linux. Dla sprawdzenia referencyjnego this article, który zawiera szczegółowe informacje o używaniu LD_PRELOAD do zastąpienia niektórych wywołań biblioteki niestandardowym kodem, na przykład malloc.

Powiązane problemy