gajownik Napisano Marzec 31, 2006 Zgłoszenie Share Napisano Marzec 31, 2006 Jeśli podczas uruchamiania aplikacji widzisz podobny komunikat do tego: [y4kk0@X ~]$ /usr/local/seamonkey/seamonkey LoadPlugin: failed to initialize shared library /usr/local/seamonkey/plugins/libflashplayer.so [/usr/local/seamonkey/plugins/libflashplayer.so: nie można odtworzyć ochrony segmentu po relokacji: Brak dostępu] [y4kk0@X ~]$ LANG=en_US.UTF-8 /usr/local/seamonkey/seamonkey LoadPlugin: failed to initialize shared library /usr/local/seamonkey/plugins/libflashplayer.so [/usr/local/seamonkey/plugins/libflashplayer.so: cannot restore segment prot after reloc: Permission denied] [y4kk0@X ~]$ to oznacza to, iż SELinux blokuje dostęp do danej biblioteki. Dana biblioteka zawiera relokacje w segmencie programu [1]. Wyczerpujące wytłumaczenie tego zagadnienia można znaleźć w poniższych linkach: http://thread.gmane.org/gmane.linux.gentoo.devel/33992 (szczególnie ten post → http://article.gmane.org/gmane.linux.gento...too.devel/34037 ) http://people.redhat.com/drepper/dsohowto.pdf By przekonać się czy program naprawdę posiada owe relokacje, należy wydać komendę podobną do tej: [y4kk0@X ~]$ eu-readelf -d /usr/local/seamonkey/plugins/libflashplayer.so | grep TEXTREL TEXTREL [y4kk0@X ~]$ W przypadku poprawnie skompilowanej/napisanej biblioteki nie otrzymamy żadnego wyniku. Zawsze też można skorzystać z polecenia eu-findtextrel. W wielkim skrócie TEXTREL powodują większe zużycie RAMu oraz zmniejszają bezpieczeństwo systemu (możliwość zmiany kodu programu przez włamywacza wykorzystującego lukę w programie). Standardowo SELinux blokuje możliwość użycia tak błędnie skompilowanych/napisanych obiektów. W logach (/var/log/messages albo /var/log/audit/audit.log) pojawia się wtedy takie zgłoszenie AVC informujące o blokowaniu execmod: Mar 31 20:33:11 X kernel: audit(1143829991.881:101): avc: denied { execmod } for pid=16258 comm="seamonkey-bin" name="libflashplayer.so" dev=hda5 ino=842302 scontext=user_u:system_r:unconfined_t:s0 tcontext=user_u:object_r:usr_t:s0 tclass=file Jeśli chcemy pozwolić na relokacje w segmencie programu danej biblioteki, należy wydać polecenie: chcon -t textrel_shlib_t nazwa_pliku Nadaje to plikowi odpowiedni kontekst bezpieczeństwa. W przypadku linków symbolicznych trzeba podać jako parametr plik, na który ten symlink wskazuje. Można też pozwolić na relokacje w segmencie programu we wszystkich bibliotekach (stanowczo odradzane!): setsebool -P allow_execmod=1 Jeśli ktoś czuje się na siłach, to może poprawić taki program. Warto zapoznać się z tymi dokumentami: http://people.redhat.com/drepper/selinux-mem.html http://www.gentoo.org/proj/en/hardened/pic-guide.xml http://www.gentoo.org/proj/en/hardened/pic...c-internals.xml http://www.gentoo.org/proj/en/hardened/pic...c-fix-guide.xml Mała uwaga: gcc posiada pewien błąd, który powoduje textrels w niektórych programach napisanych w C++ → https://bugzilla.redhat.com/bugzilla/show_b...g.cgi?id=175442 W przypadku zamkniętych programów należy problem zgłosić producentowi. [1] Ze zrozumienem czym są segmenty może pomóc również ta strona → http://www.theparticle.com/cs/bc/os/elfpecoff.html Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi