RedHat Apache Fast-CGI Selinux разрешений
Моя установка apache запускает php как fastcgi, а виртуальная
хосты указывают на / home / / public_html.
и fastcgi дома / /cgi-bin/php.fcgi
настройка public_html с selinux была такой:
/usr/sbin/setsebool -P httpd_enable_homedirs 1
chcon -R -t httpd_sys_content_t /home/someuser/public_html
Владелец и группа - это пользователь, например, пользователь "someuser":
ls -all /home/someuser/cgi-bin/
drwxr-xr-x 2 someuser someuser 4096 Sep 7 13:14 .
drwx--x--x 6 someuser someuser 4096 Sep 6 18:17 ..
-rwxr-xr-x 1 someuser someuser 308 Sep 7 13:14 php.fcgi
ls -all /home/someuser/public_html/ | greep info.php
-rw-r--r-- 1 someuser someuser 24 Sep 3 16:24 info.php
Когда происходит посещение сайта, я получаю "Запрещено..." и в журнале говорится:
[Пт, 07 сентября 12:02:51 2012] [ошибка] [клиент xxxx] (13) Отказано в доступе: доступ к /cgi-bin/php.fcgi/info.php запрещен
Мой selinux conf это:
SELINUX=enforcing
SELINUXTYPE=targeted
SETLOCALDEFS=0
Поэтому я убиваю Selinux (SELINUX= отключено), перезагружаю систему и все работает!!!!!
Проблема в Селинуксе, я не хочу отключать Селинукс. Я пытаюсь это безуспешно
setsebool -P httpd_enable_cgi 1
chcon -t httpd_sys_script_exec_t /home/someuser/cgi-bin/php.fcgi
chcon -R -t httpd_sys_content_t /home/someuser/cgi-bin
А может лучше поменять Selinux
SELINUX = принуждение к SELINUX = разрешительный
А отключить selinux для httpd?
(Думаю, мне лучше найти правильную конфигурацию)
Спасибо за любые предложения по этому вопросу
Моя среда:
Red Hat Enterprise Linux Server, выпуск 5.8 (Tikanga)
Версия сервера: Apache / 2.2.3
PHP 5.1.6 (cli) (сборка: 22 июня 2012 г. 06:20:25) Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
Некоторые журналы:
ps -ZC httpd
LABEL PID TTY TIME CMD
system_u:system_r:httpd_t 2822 ? 00:00:00 httpd
system_u:system_r:httpd_t 2823 ? 00:00:00 httpd
system_u:system_r:httpd_t 2824 ? 00:00:00 httpd
system_u:system_r:httpd_t 2825 ? 00:00:00 httpd
system_u:system_r:httpd_t 2826 ? 00:00:00 httpd
system_u:system_r:httpd_t 2836 ? 00:00:00 httpd
system_u:system_r:httpd_t 2837 ? 00:00:00 httpd
system_u:system_r:httpd_t 2838 ? 00:00:00 httpd
system_u:system_r:httpd_t 2839 ? 00:00:00 httpd
system_u:system_r:httpd_t 2840 ? 00:00:00 httpd
getsebool -a | grep httpd
allow_httpd_anon_write --> off
allow_httpd_bugzilla_script_anon_write --> off
allow_httpd_cvs_script_anon_write --> off
allow_httpd_mod_auth_pam --> off
allow_httpd_nagios_script_anon_write --> off
allow_httpd_prewikka_script_anon_write --> off
allow_httpd_squid_script_anon_write --> off
allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_network_connect --> off
httpd_can_network_connect_db --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> on
httpd_disable_trans --> off
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> on
httpd_execmem --> off
httpd_read_user_content --> off
httpd_rotatelogs_disable_trans --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_suexec_disable_trans --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_nfs --> off
Есть журнал аудита
/var/log/audit/audit.log
type=SYSCALL msg= аудит (1345834208.027:963): arch=c000003e syscall=4 success= нет выхода =-13 a0=2aaf1543e390 a1=7fff393c9510 a2=7fff393c9510 a3=2aaf1543bd58 items=0 pid=275 = 235 = 235 = 275 =48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(нет) ses = 4 comm = "httpd" exe = "/ usr / sbin / httpd" subj = user_u: system_r: httpd_t: s0 key = (null)
type = AVC msg = аудит (1345834208.027:964): avc: отказано { getattr } для pid=27523 comm="httpd" путь ="/home/loemsera/public_html/index.php" dev=sda2 ino=4593912 scontext=user_u:system_r:httpd_t:s0 tcontext=user_u:object_r:user_home_t:s0 tclass=file
type=SYSCALL msg= аудит (1345834208.027:964): arch=c000003e системный вызов =6 успехов = нет выхода =-13 a0=2aaf1543e470 a1=7fff393c9510 a2=7fff393c9510 a3=0 элементов =0 ppid=27519 pid=27519 pid=27519 =48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(нет) ses = 4 comm = "httpd" exe = "/ usr / sbin / httpd" subj = user_u: system_r: httpd_t: s0 key = (null)
type = AVC msg = аудит (1345834208.028:965): avc: отказано { getattr } для pid=27523 comm="httpd" путь ="/home/loemsera/public_html/index.php" dev=sda2 ino=4593912 scontext=user_u:system_r:httpd_t:s0 tcontext=user_u:object_r:user_home_t:s0 tclass=file
1 ответ
Запуск FastCGI, по-вашему, оставляет большую дыру в безопасности: интерпретатор PHP запускается от имени пользователя "httpd" (по крайней мере, я не вижу здесь ничего о suexec).
У нас есть рабочая установка с SELinux и PHP как FastCGI здесь, в CentOS 6, но было действительно сложно заставить все работать.
Несколько советов для начала:
- вам не нужно перезагружаться, чтобы отключить / включить selinux - просто используйте команду "setenforce 0" или "setenforce 1":)
- всегда пытайтесь отключить все, что работает с SELinux, затем включите его и посмотрите на aud.log
Вот так:
- включить suexec
- изменить тип SELinux для php.fcgi на
httpd_fastcgi_script_exec_t
- Ваш стартер FastCGI (php.fcgi) не должен быть доступен для записи пользователю, которому он принадлежит (в противном случае он может настроить многие параметры и ограничения). Присвойте ему "неизменный" флаг:
chattr +i php.fcgi
У suexec есть некоторые проблемы с FastCGI, поэтому мы должны сделать его разрешающим:
yum install policycoreutils-python semanage permissive -a httpd_suexec_t
Удачи!