SELinux

Landstreicher

Сегодня поставил (точнее — настроил/включил) себе на комп SELinux.
Порадовало, много сразу заработало без ошибок. Во всяком случае система нормально загрузилась, запустились X-ы (с драйвером от NVidia залогинило с правильным context. Подавляющее большинство программ, которыми я пользуюсь, заработало out-of-box. Однако обнаружились и неприятности.
1) не работает Java

$ java
Java HotSpot(TM) Client VM warning: Attempt to allocate stack guard pages failed.
Error occurred during initialization of VM
Could not reserve enough space for code cache
$ strace java
... /* skipped */ ...
mmap2(NULL, 33554432, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE, -1, 0)
= -1 EACCES (Permission denied)
write(1, "Error occurred during initializa"..., 43) = 43

2) не работают клиентские либы от Oracle:

$ ./test1
./test1: error while loading shared libraries: libclntsh.so.10.1: cannot enable executable
stack as shared object requires: Permission denied
$ readelf -l /home/oracle/oracle/product/10.2.0/client_1/lib/libclntsh.so.10.1 |grep STACK
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RWE 0x4

execstack -c не помогает

./test1: error while loading shared libraries: /home/oracle/product/10.2.0/client_1/lib/libnnz10.so:
cannot restore segment prot after reloc: Permission denied

3) не работает Skype

$ skype
Killed
$ strace skype
execve("/usr/bin/skype", ["skype"], [/* 47 vars */]) = -1 EACCES (Permission denied)
+++ killed by SIGKILL +++
$ readelf -l /usr/bin/skype|grep LOAD
LOAD 0x000000 0x08048000 0x08048000 0xb2fbaf 0xb2fbaf RWE 0x1000
LOAD 0xb30000 0x08b78000 0x08b78000 0x04ee8 0x21850 RWE 0x1000

Очень странное поведение. Остальные хотя бы пишут почему. Впрочем, после неудивительно.
4) не работает libGL.so.1 он NVidia

$ glxgears
glxgears: error while loading shared libraries: libGL.so.1: failed to map segment from
shared object: Permission denied
$ readelf -l /usr/lib/libGL.so.1|grep LOAD
LOAD 0x000000 0x00000000 0x00000000 0x79308 0x79308 R E 0x1000
LOAD 0x079320 0x0007a320 0x0007a320 0x1a48c 0x1b680 RWE 0x1000

Наблюдается интересная закономерность.
Почти все, что не работает, — закрытый софт. Open-source программы (за несколькими исключениями) работают нормально. Причем производители кладут на это х@й. Везде в tech support-е написано: такие ошибки возникают из-за SELinux, отключите SELinux полностью. Например:
http://forum.skype.com/lofiversion/index.php/t91504.html
http://www.oracle-base.com/articles/10g/OracleDB10gR2Install...
Нет бы пофиксить баги с своем приложении! Не вижу никаких способов, какими бы в клиентской Oracle-овой библиотеке можно было использовать исполнимый стек или генерировать код на лету.
Вобщем, вопрос к пользователям SELinux: кто умеет это лечить?
Баг с libGL.so.1 я пока вылечил так

chcon -t textrel_shlib_t /usr/lib/libGL.so.1
chcon -t unconfined_execmem_exec_t /путь/к/программе/которой/нужен/OpenGL

С остальными ошибками пока не понял, чего делать. Включать allow_execmem или allow_execheap глобально не хочу — какой тогда смысл от SELinux?
Еще обнаружился очень неожиданный эффект — GHC (Glasgow Haskell Compiler) не работает под SELinux

$ ghc
ghc-6.6.1: internal error: getMBlock: mmap: Permission denied
(GHC version 6.6.1 for i386_unknown_linux)
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
Aborted
$ strace ghc
... /* skipped */ ...
mmap2(NULL, 2097152, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= -1 EACCES (Permission denied)

http://hackage.haskell.org/trac/ghc/ticket/738 (баг помечен как fixed, но на самом деле он
до сих пор актуален)
http://haskell.org/haskellwiki/GHC:FAQ#GHC_and_SELinux
Причем, тут проблема посложнее. Если GHC еще можно запустить с помощью

# chcon -t unconfined_execmem_exec_t /usr/lib/ghc-6.6.1/ghc-6.6.1

то как быть со скомплированными программами? Есть у кого-нибудь идеи?

Ivan8209

Не по теме, но ты можешь знать.
Встречал у ghc-6.6.1 проблемы с pthreads?
А то у меня не собирается darcs-1.0.8.
Да, нет, ибо очевидно, что придётся копать самому.
---
...Я работаю антинаучным аферистом...

Landstreicher

> Встречал у ghc-6.6.1 проблемы с pthreads?
Нет, не встречал. У меня нормально работает.
> А то у меня не собирается darcs-1.0.8.
Какие симптомы? Не это http://hackage.haskell.org/trac/ghc/ticket/847 ?

Ivan8209

>> Встречал у ghc-6.6.1 проблемы с pthreads?
> Нет, не встречал. У меня нормально работает.
Там сейчас Доран что-то интенсивно ваяет, так что всё может быть.
>> А то у меня не собирается darcs-1.0.8.
> Какие симптомы? Не это http://hackage.haskell.org/trac/ghc/ticket/847 ?
Спасибо, сейчас посмотрим...
---
...Я работаю...

Landstreicher

Up!
Чего, никто не юзал SELinux?

juliuzz

SE это чё Scientific Linux?
выброси это убожество и поставь приличную [holywar]мандриву[/holywar]

tokuchu

SE это чё Scientific Linux?
Ты не в теме.

Ober

SE это чё Scientific Linux?
выброси это убожество и поставь приличную [holywar]мандриву[/holywar]

katrin2201

да это пять

juliuzz

Ты не в теме.
похоже что так

Ivan8209

> SE это чё Scientific Linux?
Нет, "SE" --- это "second edition."
---
...Я работаю антинаучным аферистом...

krishtaf

Нет, "SE" --- это "second edition."

Ты нихуя не прав. Это Standard Edition
А в теме, если SElinux - Security Enhanced Linux

Ivan8209

А буквы "SU" в "SUSE" означают "Soviet Union".
---
"Верь сводке погоды, но доверяй --- интуиции.
Будь особенно бдителен, когда всё хорошо и нет поводов для тревоги."

apl13

Soviet Union Standard Edition Less Inexpensible New User Exclamation

katrin2201

Soviet Union Special Edition
точняк, клево

BondarAndrey

Попробуй почитать man audit2allow

ava3443

./test1: error while loading shared libraries: /home/oracle/product/10.2.0/client_1/lib/libnnz10.so: cannot restore segment prot after reloc: Permission denied
по этому поводу Оракл вот что пишет:

Essentially, Oracle Developement is actively working on this compiler version compatibility issue (ICC compilers that are used for several libraries, such as LIBNNZ10.SO and LIBNNZ11.SO) in the RHEL 5 and OEL 5 environments.

The workaround is to shift SELinux to "Permissive" mode.

Landstreicher

Essentially, Oracle Developement is actively working on this compiler version compatibility issue (ICC compilers that are used for several libraries, such as LIBNNZ10.SO and LIBNNZ11.SO) in the RHEL 5 and OEL 5 environments.
А чего там активно работать-то? Просто пересобрать с правильными опциями и все. Странные люди.
The workaround is to shift SELinux to "Permissive" mode.
Отличный workaround! Попросту говоря, они предлагают вырубить SELinux нафиг.
Кстати, а как же всякие там Oracle Unbreakable Linux? Разве Oracle не продвигает Linux как надежную операционную систему? IMHO, SELinux — один из главных компонентов ее защищенности. В чем тогда фишка выпускать продукты, которые требуют отрубания этой самой защиты?

Ober

В чем тогда фишка выпускать продукты, которые требуют отрубания этой самой защиты?
Э, а разве в энтерпрайз-мире недостаточно просто написать в рекламке, что продукт мегазащищенный, и дать нормальный откат на сертификацию?

ppplva

Не все так просто в крупных корпорациях. Дело в том, что LIBNNZ10.SO умеет собирать только Ганс из шестого отдела, а он сейчас в отпуске. При попытке разобраться в коде LIBNNZ11.SO поехала крыша у Билла из седьмого, а автор этой либы давно уволился. В данный момент ее переписывает с нуля отряд индусов.
А пока, дорогие пользователи, советуем вам отключать SELinux.

Ivan8209

> Отличный workaround! Попросту говоря, они предлагают
> вырубить SELinux нафиг.
Вообще говоря, в параноидальном режиме ядра иксы не запускаются,
несмотря на то, что входят в поставку.
Но это так... Мысли вслух.
---
Q51: Hарод, а вы стабильным софтом пользоваться не пробовали?
A51: Пробовали, но мэйнфреймы с дизель-генераторами не везде есть.

ava3443

Просто пересобрать с правильными опциями и все.
ну так и баг запостили недавно - 15 августа 2007
RHEL4 ему не подвержен, на RHEL4 у всех вроде давно работает с включённым SELinux
RHEL5 всего-то 5 месяцев как вышел
да и вообще, что ты хочешь?
мы вот ещё с oracle 8 на oracle 10 не всех клиентов перевели, некоторые даже и не планируют пока. а тут последний оракл на последнем RHEL чтоб сразу заработал
вон, в базовом релизе oracle 10g release 2* драйвер ODBC под win32 вообще не работал, и ничего, это не помешало выпустить его в свет
*) или всё-таки после патсчета 10.2.0.3? сорри, запамятовал.

ava3443

Кстати, а как же всякие там Oracle Unbreakable Linux?
если я ничего не пропустил, Oracle Unbreakable Linux == RHEL

krishtaf

не пропустил
Кстати, правильно называть Oracle Enterprise Linux - это название дистрибутива.
Oracle Unbreakable Linux - так называется, вроде, платное сопровождение OEL.

Landstreicher

> Вообще говоря, в параноидальном режиме ядра иксы не запускаются,
Откуда такие сведения?
У меня прекрасно запускаются X.org (причем замечу, с закрытым драйвером nvidia) в режиме Enforcing на дефолтной security policy от Debian (которая весьма параноидальная с отключенными опциями execmod, execmem, execheap и т.д. Могут, если захотят.

Landstreicher

> ну так и баг запостили недавно - 15 августа 2007
Как так? В SELinux запрещено маппить сегменты памяти одновременно на WRITE и на EXEC. Так что эти либы не работают с самого первого релиза SELinux. Багу этому сто лет.

ava3443

Я одного не понял - с чего ты взял что Oracle должен работать с SELinux?
Oracle поддерживается только на RHEL(==OEL) и SLES, где SELinux, если не ошибаюсь, включён только для избранных демонов (так называемая "targeted policy").

For Red Hat Enterprise Linux 5, Red Hat supports a single policy, the targeted policy. Under the targeted policy, every subject and object runs in the unconfined_t domain except for the specific targeted daemons. Objects that are in the unconfined_t domain have no restrictions and fall back to using standard Linux security, that is, DAC. The daemons that are part of the targeted policy run in their own domains and are restricted in every operation they perform on the system.
Никто никогда и не обещал что Оракл будет работать на произвольном дистрибутиве Linux. Оракл не на RHEL и не на SLES - без поддержки. Следовательно, сами себе злобные буратино.
P.S. Если где ошибаюсь - поправьте меня, пожалуйста.

tokuchu

RHEL(==OEL) и SLES, где SELinux, если не ошибаюсь, включён только для избранных демонов (так называемая "targeted policy").
Не знаю как RHEL, но в Fedora он включен в Enforcing по-умолчанию.

ava3443

Это ты к чему?
Охотно верю, но наверняка так же как и в RHEL - только для избранных демонов.
Читай что такое targeted policy и чем отличается от strict. В Fedora, как и в RHEL, сейчас только targeted.
SELinux policies в Fedora/RHEL

tokuchu

Это ты к чему?
Охотно верю, но наверняка так же как и в RHEL - только для избранных демонов.
Читай что такое targeted policy и чем отличается от strict. В Fedora, как и в RHEL, сейчас только targeted.
А, значит я перепутал понятия из разных плоскостей.

Ivan8209

>> Вообще говоря, в параноидальном режиме ядра иксы не запускаются,
> Откуда такие сведения?
Из документации, см. 14.3.5.
Иксам нужен /dev/mem.
В линуксе, разумеется, всё иначе, там и параноя, говорят, другая.
Непараноидальная.
---
...Я работаю антинаучным аферистом...

Landstreicher

> Из документации, см. 14.3.5.
Оригинально. Ты читаешь про SELinux в документации про FreeBSD? Документацию про SELinux не пробовал читать?
> Иксам нужен /dev/mem.
Ну, допустим, нужен. И что? X.org — доступ к /dev/mem разрешен. Остальным — запрещен. В этом и суть SELinux — по умолчанию запретить доступ, но некоторым, которым надо, — разрешить отдельные привелегии.

Ivan8209

> Оригинально.
Я в курсе.
> Ты читаешь про SELinux в документации про FreeBSD?
> Документацию про SELinux не пробовал читать?
Не-а. Я читаю, что пишут о SELinux, в самом SELinux пока не
настолько заинтересован.
> В этом и суть SELinux — по умолчанию запретить доступ, но
> некоторым, которым надо, — разрешить отдельные привелегии.
Надо будет подумать, насколько сложно замутить подобное на kauth...
---
...Я работаю антинаучным аферистом...

pitrik2

некоторым, которым надо, — разрешить отдельные привелегии.
а почему нельзя тогда ораклу разрешить привилегии?

Ober

а почему нельзя тогда ораклу разрешить привилегии?
Потому что настоящий корпоративный продукт на мелочи не разменивается и требует привилегий не ниже, чем на исключительное владение Вселенной!
Оставить комментарий
Имя или ник:
Комментарий: