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

Контекст SELinux для apache ldap ssl

Вопрос

Какой контекст SELinux мне нужен, для какого файла должен работать apache ldap (over ssl) auth? Или это сетевой протокол, системный вызов или что-то совсем другое?

Окружающая среда

Apache 2.4 на Centos 7 с использованием базовой аутентификации ldap через ssl.

С разрешающей способностью SELinux (setenforce 0) все работает нормально и нормально. Я могу войти в защищенный каталог с помощью ldap.

Когда SELinux включен (setenforce 1), apache не может выполнить поиск ldap и пропустить пользователя. Это как-то связано с ssl или сертификатами, и я не могу этого понять.

/ var / log / httpd / ssl_error_log

[Thu Mar 17 15:33:32.529755 2016] [authnz_ldap:debug] [pid 6412] mod_authnz_ldap.c(501): [client 158.158.193.232:17386] AH01691: auth_ldap authenticate: using URL ldaps://ldap-ad.example.org:636/ou=Auto-Accounts,dc=example,dc=org?sAMAccountname?sub
[Thu Mar 17 15:33:32.530792 2016] [ldap:debug] [pid 6412] util_ldap.c(372): AH01278: LDAP: Setting referrals to On.
[Thu Mar 17 15:33:32.531845 2016] [ldap:debug] [pid 6412] util_ldap.c(372): AH01278: LDAP: Setting referrals to On.
[Thu Mar 17 15:33:32.532936 2016] [ldap:debug] [pid 6412] util_ldap.c(372): AH01278: LDAP: Setting referrals to On.
[Thu Mar 17 15:33:32.533568 2016] [authnz_ldap:info] [pid 6412] [client 158.158.193.232:17386] AH01695: auth_ldap authenticate: user bgstack15 authentication failed; URI /auth1/ [LDAP: ldap_simple_bind() failed][Can't contact LDAP server]
[Thu Mar 17 15:33:32.533784 2016] [ssl:debug] [pid 6412] ssl_engine_io.c(992): [client 158.158.193.232:17386] AH02001: Connection closed to child 1 with standard shutdown (server sample.example.org:443)

/var/log/audit/audit.log

type=AVC msg=audit(1458243341.951:1234): avc:  denied  { name_connect } for  pid=6428 comm="httpd" dest=636 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:ldap_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1458243341.951:1234): arch=c000003e syscall=42 success=no exit=-13 a0=12 a1=7f2c0498eab0 a2=10 a3=0 items=0 ppid=6409 pid=6428 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1458243341.952:1235): avc:  denied  { name_connect } for  pid=6428 comm="httpd" dest=636 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:ldap_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1458243341.952:1235): arch=c000003e syscall=42 success=no exit=-13 a0=12 a1=7f2c0498eab0 a2=10 a3=0 items=0 ppid=6409 pid=6428 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1458243341.952:1236): avc:  denied  { name_connect } for  pid=6428 comm="httpd" dest=636 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:ldap_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1458243341.952:1236): arch=c000003e syscall=42 success=no exit=-13 a0=12 a1=7f2c0498d580 a2=10 a3=0 items=0 ppid=6409 pid=6428 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=AVC msg=audit(1458243341.953:1237): avc:  denied  { name_connect } for  pid=6428 comm="httpd" dest=636 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:ldap_port_t:s0 tclass=tcp_socket
type=SYSCALL msg=audit(1458243341.953:1237): arch=c000003e syscall=42 success=no exit=-13 a0=12 a1=7f2c0498d580 a2=10 a3=0 items=0 ppid=6409 pid=6428 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)

Что я уже пробовал

Я начал читать о SELinux и попытался скопировать контекст из других сертификатов. Я пробовал сделать это с сертификатами в / etc / openldap / certs, а также / etc / pki / tls / certs. Может мне нужно попробовать что-нибудь для tcp порта 636?

Обновления

SElinux: разрешить httpd подключаться к определенному порту предоставляет рабочее решение, но еще не доработано для обеспечения максимальной безопасности. Команда

setsebool httpd_can_network_connect on

позволяет httpd выполнять привязку ldaps. Однако это слишком сильно открывает httpd, поэтому я все еще ищу способ разрешить только порт 636.

Всегда есть логическое httpd_can_connect_ldap.

Это позволяет:

# sesearch -b httpd_can_connect_ldap -AC
Found 1 semantic av rules:
DT allow httpd_t ldap_port_t : tcp_socket name_connect ; [ httpd_can_connect_ldap ]

И ldap_port_t обеспечивает доступ к соответствующим портам:

# semanage port -l
ldap_port_t                    tcp      389, 636, 3268, 7389
ldap_port_t                    udp      389, 636