Следуя эта ссылка Я могу просто полностью отключить 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 мог плавно создавать новые файлы в папке, не являющейся корневой, тип которой был изменен.