Назад | Перейти на главную страницу

Как отключить SELinux для Apache httpd только на моей Fedora 14?

Следуя эта ссылка Я могу просто полностью отключить SELinux из моей Fedora 14. Но мне интересно, как я могу отключить SELinux только для демона httpd? У меня не установлен system-config-selinux, и из-за политики брандмауэра компании мне нужно искать RPM из pkgs.org для установки любого пакета. Так есть ли способ разобраться с этим?

Редактировать:

Summary:

SELinux is preventing /opt/ibm/cognos/c10/cgi-bin/cognos.cgi "execute" access to
/opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so.

Detailed Description:

SELinux denied access requested by /opt/ibm/cognos/c10/cgi-bin/cognos.cgi.
/opt/ibm/cognos/c10/cgi-bin/cognos.cgi is mislabeled.
/opt/ibm/cognos/c10/cgi-bin/cognos.cgi default SELinux type is bin_t, but its
current type is bin_t. Changing this file back to the default type, may fix your
problem.

If you believe this is a bug, please file a bug report against this package.

Allowing Access:

You can restore the default system context to this file by executing the
restorecon command. restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi'.

Fix Command:

/sbin/restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi'

Additional Information:

Source Context                unconfined_u:system_r:httpd_t:s0
Target Context                unconfined_u:object_r:usr_t:s0
Target Objects                /opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so [
                              file ]
Source                        cognos.cgi
Source Path                   /opt/ibm/cognos/c10/cgi-bin/cognos.cgi
Port                          <Unknown>
Host                          mm2fedora.syd.cog
Source RPM Packages           
Target RPM Packages           
Policy RPM                    selinux-policy-3.9.7-3.fc14
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Plugin Name                   restore_source_context
Host Name                     mm2fedora.syd.cog
Platform                      Linux mm2fedora.syd.cog 2.6.35.6-45.fc14.i686 #1
                              SMP Mon Oct 18 23:56:17 UTC 2010 i686 i686
Alert Count                   18
First Seen                    Fri 15 Apr 2011 02:12:44 PM EST
Last Seen                     Fri 15 Apr 2011 02:33:11 PM EST
Local ID                      409e250f-049f-49c0-89f6-7155e4643868
Line Numbers                  

Raw Audit Messages            

node=mm2fedora.syd.cog type=AVC msg=audit(1302841991.999:22392): avc:  denied  { execute } for  pid=28242 comm="cognos.cgi" path="/opt/ibm/cognos/c10/cgi-bin/libIBJStreamsDLL.so" dev=dm-0 ino=138263 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:usr_t:s0 tclass=file

node=mm2fedora.syd.cog type=SYSCALL msg=audit(1302841991.999:22392): arch=40000003 syscall=192 success=no exit=-13 a0=0 a1=1bc08 a2=5 a3=802 items=0 ppid=27923 pid=28242 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="cognos.cgi" exe="/opt/ibm/cognos/c10/cgi-bin/cognos.cgi" subj=unconfined_u:system_r:httpd_t:s0 key=(null)

Как было рекомендовано, я запускаю предложенную команду исправления: /sbin/restorecon '/opt/ibm/cognos/c10/cgi-bin/cognos.cgi' много раз, но к сожалению. полностью отключив SELinux, я вижу, что это веб-приложение работает. Я сам сейчас исследую эту тему, например, как включить SELinux глобально, отключив его только для httpd. Не должен быть лучшим подходом, но поскольку это всего лишь тестовый пример, он подойдет мне и моей команде.

Подсказка, которую я получил от Fedora 13 SELinux FAQ здесь поэтому я лично считаю, что есть способ с system-config-selinux, я просто не знаю подробностей ...

Превращаю мой предыдущий комментарий в ответ на популярный спрос;)

Из отдела повседневного обучения: вчера я видел, как Дэн Уолш выступал с презентацией, в которой он объяснил новый способ отключения ограничения для приложений в новых выпусках Fedora и EL6. Вы больше не устанавливаете логическое значение для отключения перехода (которое иногда вызывает каскад в логических значениях, которые должны быть установлены для того, чтобы все работало), но вы переводите определенный тип в разрешающий режим. Вы делаете это, выполнив команду semanage permissive -a TYPE (в вашем случае semanage permissive -a httpd_t). Это оставляет SELinux включенным для httpd_t, но в разрешающем режиме. - wzzrd 20 мая '11 в 8:45

Для Fedora 14, как и в el6, я думаю, вы можете просто выгрузить модуль http SELinux, запустив

semodule -r httpd

Это, вероятно, заставит httpd работать как initrc_t или unconfined_t.

Если это не сработает для F14, вы можете отключить логическое значение SELinux («старый» способ, от el5), например:

setsebool httpd_disable_trans 1

и использовать

setsebool -P httpd_disable_trans 1

сделать это постоянным

Вопрос не совсем ясен - каковы именно ваши намерения?
Я предполагаю, что вы не пытаетесь открыть порт HTTP, поскольку это будет сделано с помощью брандмауэра, а не самого Selinux.
Итак, возможно, вы хотите разрешить демону httpd писать в какой-то каталог, который не находится в обычном корне документа?
Если это так, то вам нужно ознакомиться с разрешениями Selinux и установить их для каталогов, к которым вы хотите получить доступ.
Вот место, чтобы прочитать об этом:
http://wiki.centos.org/HowTos/SELinux

Это актуально, потому что и Fedora, и Centos связаны с Red Hat, поэтому, вероятно, это поможет.

[Редактировать]
Пожалуйста, попробуйте это:
chcon -t textrel_shlib_t ThePathToTheFile

Это было предложено PabloTwo в этом посте:
http://www.fedoraforum.org/forum/showthread.php?t=252552

В этом посте IBM также предложила:
https://www-304.ibm.com/support/docview.wss?uid=swg21454550

Нет никакого логического значения для глобального отключения SELinux для httpd. Сказав это, вы должны прочитать httpd_selinux(8) справочная страница для соответствующих файловых контекстов, которые вы должны использовать; в вашем случае вы хотите httpd_sys_script_exec_t или httpd_unconfined_script_exec_t, и может использовать chcon чтобы временно установить его для тестирования, и semanage установить его навсегда.

Я не уверен, как отключить SELinux для одной службы - я подозреваю, что вы не можете.

Но что вы можете сделать, так это использовать runcon, чтобы настроить запуск процесса apache в неограниченном контексте.

Вы можете думать о runcon как о sudoers для selinux. Он позволяет указать, в каком контексте запускать процесс.

Вам нужно будет изменить сценарий запуска apache, добавив что-то вроде:

runcon unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

В часть сценария запуска httpd, которая фактически вызывает apache.

На моем хосте Fedora FC14 я бы изменил эту строку:

LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS

Чтобы прочитать что-то вроде:

LANG=$HTTPD_LANG daemon --pidfile=${pidfile} runcon unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 $httpd $OPTIONS

PS Я на самом деле не тестировал это в моем сценарии запуска apache, поэтому приведенное выше является предположением о том, где именно мне нужно его поместить, но я определенно использовал runcon, чтобы процессы могли запускаться без ограничений раньше, поэтому он будет работать , вам просто нужно найти нужное место.

У меня также была такая же проблема, когда я использовал GBrowse2. GBrowse2 сохраняет временные файлы в местах, отличных от корневого веб-сайта, и устанавливает блокировки для сеансов за пределами корневого веб-сайта. Поскольку GBrowse2 работает на Apache, SELinux позволяет httpd получать доступ / изменять каталоги вне корневого каталога. Я перешел по ссылке, приведенной в предыдущем посте:

"Вот место, чтобы прочитать об этом: http://wiki.centos.org/HowTos/SELinux "

Хотя он не дает полных инструкций о том, как решить проблему, он мне очень помог (Раздел 4: Контроль доступа SELinux). Это дало мне представление о том, как SELinux различает файлы, не относящиеся к веб-корневому каталогу. Вам необходимо изменить тип папки / файла, не являющегося корневым веб-каталогом, на тот, который совместим с типом процесса httpd. Этот тип может быть установлен с помощью команд, приведенных в деталях ошибки SELinux (команды semanage и restorecon). После исправления типа папки, не являющейся корневой, GBrowse2 мог плавно создавать новые файлы в папке, не являющейся корневой, тип которой был изменен.