Dlaczego prawie wszystkie udostępnione biblioteki /usr/lib/
mają ustawiony bit uprawnień do wykonywania? Nie widzę żadnego przypadku użycia do ich wykonania. Niektórym udaje się podłączyć jakąś main
funkcję, aby wydrukować krótką notatkę o prawach autorskich i wersji, ale wielu nawet tego nie robi i nie działa poprawnie po wykonaniu.
Więc po co to ustawiać x
? Czy muszą to robić wszystkie programy pakujące biblioteki? Co się stanie, jeśli będę dlopen()
mieć bibliotekę współdzieloną z 0644
uprawnieniami?
libraries
conventions
Tadeusz A. Kadłubowski
źródło
źródło
/lib
i/usr/lib
są libc i libpthread, a po uruchomieniu oba drukują informację o prawach autorskich.main()
symbolu jako punktu wejścia nie jest drobnym błędem, ale podstawowym wyborem projektowym. Przegapiłeś mój punkt.Odpowiedzi:
W systemie HP-UX biblioteki współdzielone są mapowane do pamięci za pomocą mmap (), a wszystkie strony pamięci w systemie mają bity ochronne, które są sprzężone z mechanizmami ochrony stron pamięci jądra i procesora. Aby wykonać zawartość dowolnej strony pamięci w systemie, strona ta musi mieć ustawiony PROT_EXEC - przydatną funkcję zapobiegającą exploitom wykonywania danych.
Wywołanie mmap () używa bitów uprawnień do pliku, który ma zostać zmapowany, aby zdefiniować bity ochrony mapowanych stron pamięci, które mają go zawierać: rwx -> PROT_READ | PROT_WRITE | PROT_EXEC (z sys / mman.h). więc aby biblioteka współdzielona mogła być używana w systemie HP-UX, plik zawierający bibliotekę współdzieloną musi mieć uprawnienia do wykonywania, aby mieć pewność, że odwzorowana biblioteka ma również uprawnienia do wykonywania.
Biblioteka współdzielona z trybem 644 w systemie HP-UX spowoduje zrzuty pamięci.
źródło
Niewykonywalne obiekty współdzielone działają dobrze, ale biblioteki oznaczone jako pliki wykonywalne mogą być również uruchamiane jako samodzielne programy.
Brak, chyba że chcesz, aby emitowały wersję lub inne informacje
Nie
Otrzymasz nowy uchwyt obiektu współdzielonego (o ile plik jest czytelny itp.) ... bit exec nie ma na to wpływu
Co do tego, dlaczego biblioteki, które nie są użyteczne jako samodzielne pliki wykonywalne, nadal mają ustawiony bit exec: jest to prawdopodobnie tylko artefakt systemu kompilacji lub użytego skryptu łącza.
przykładowe dane wyjściowe, tylko w celach informacyjnych:
źródło
main()
punkt wejścia. Libc jest wartością odstającą. Jego twórcy zrobili tę notatkę jako dodatkową funkcjonalność. Prostachmod a+x
z jakiejkolwiek innej biblioteki nie zapewni tej funkcji. „Nadal nie widzę sensu ustawiania+x
dla wszystkich bibliotek..so
które można wykonać, należy oznaczyć jako takie. Zmienię swoją odpowiedź, aby uniknąć sugerowania, że wszystko z zestawem bitów wykonawczych jest tak naprawdę samodzielnym plikiem wykonywalnym.