Migrando um sistema de CentOS6 para RHEL7 com SELinux executando Enforced. Um php
script faz uma chamada /usr/bin/processdata.sh
para gerar alguns dados nos bastidores. Isso funcionou bem com o sistema antigo, mas a exec
chamada php engasga com o SELinux definido como ativado.
Aqui está a permissão sh
-rwxrwx--x. root root unconfined_u:object_r:bin_t:s0 /usr/bin/process_data.sh
Este erro de auditoria é visto ao mesmo tempo em que a página php é chamada:
ausearch -l -i | grep httpd
type=SYSCALL msg=audit(02/27/2016 14:07:52.662:23480) : arch=x86_64 syscall=socket success=sem exit=-97(Família de endereços não suportada pelo protocolo) a0=inet6 a1=SOCK_DGRAM a2= ip a3=0x672e76656473626e items=0 ppid=15686 pid=3852 auid=unset uid=apache gid=apache euid=apache suid=apache fsuid=apache egid=apache sgid=apache fsgid=apache tty=(nenhum) ses=unset comm= httpd exe=/usr/sbin/httpd subj=system_u:system_r:httpd_t:s0 key=(null) type=AVC msg=audit(02/27/2016 14:07:52.662:23480) : avc: negado { module_request } para pid=3852 comm=httpd kmod="net-pf-10" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:kernel_t:s0 tclass=system
Aqui estão meus bools httpd atuais:
httpd_can_network_relay (off , off) Allow httpd to can network relay
httpd_can_connect_mythtv (off , off) Allow httpd to can connect mythtv
httpd_can_network_connect_db (off , off) Allow httpd to can network connect db
httpd_use_gpg (off , off) Allow httpd to use gpg
httpd_dbus_sssd (off , off) Allow httpd to dbus sssd
httpd_enable_cgi (on , on) Allow httpd to enable cgi
httpd_verify_dns (off , off) Allow httpd to verify dns
httpd_dontaudit_search_dirs (off , off) Allow httpd to dontaudit search dirs
httpd_anon_write (off , off) Allow httpd to anon write
httpd_use_cifs (off , off) Allow httpd to use cifs
httpd_enable_homedirs (off , off) Allow httpd to enable homedirs
httpd_unified (off , off) Allow httpd to unified
httpd_mod_auth_pam (off , off) Allow httpd to mod auth pam
httpd_run_stickshift (off , off) Allow httpd to run stickshift
httpd_use_fusefs (off , off) Allow httpd to use fusefs
httpd_can_connect_ldap (off , off) Allow httpd to can connect ldap
httpd_can_network_connect (on , on) Allow httpd to can network connect
httpd_mod_auth_ntlm_winbind (off , off) Allow httpd to mod auth ntlm winbind
httpd_tty_comm (off , off) Allow httpd to tty comm
httpd_sys_script_anon_write (off , off) Allow httpd to sys script anon write
httpd_graceful_shutdown (on , on) Allow httpd to graceful shutdown
httpd_can_connect_ftp (off , off) Allow httpd to can connect ftp
httpd_run_ipa (off , off) Allow httpd to run ipa
httpd_read_user_content (off , off) Allow httpd to read user content
httpd_use_nfs (off , off) Allow httpd to use nfs
httpd_can_connect_zabbix (off , off) Allow httpd to can connect zabbix
httpd_tmp_exec (off , off) Allow httpd to tmp exec
httpd_run_preupgrade (off , off) Allow httpd to run preupgrade
httpd_manage_ipa (off , off) Allow httpd to manage ipa
httpd_can_sendmail (on , on) Allow httpd to can sendmail
httpd_builtin_scripting (on , on) Allow httpd to builtin scripting
httpd_dbus_avahi (off , off) Allow httpd to dbus avahi
httpd_can_check_spam (off , off) Allow httpd to can check spam
httpd_can_network_memcache (off , off) Allow httpd to can network memcache
httpd_can_network_connect_cobbler (off , off) Allow httpd to can network connect cobbler
httpd_use_sasl (off , off) Allow httpd to use sasl
httpd_serve_cobbler_files (off , off) Allow httpd to serve cobbler files
httpd_execmem (off , off) Allow httpd to execmem
httpd_ssi_exec (off , off) Allow httpd to ssi exec
httpd_use_openstack (off , off) Allow httpd to use openstack
httpd_enable_ftp_server (off , off) Allow httpd to enable ftp server
httpd_setrlimit (off , off) Allow httpd to setrlimit
Há algo errado na minha configuração do selinux que não estou vendo?
O que você nos mostra de sua configuração do SELinux parece 'normal', mas isso não quer dizer que não precise ser ajustado para atender a sua carga de trabalho específica.
O que eu faria aqui é colocar o SELinux no modo permissivo (
setenforce 0
) e, em seguida, fazer com que o auditd inicie um novo arquivo de log (kill -USR1
< PID do auditd >. Em seguida, continue com seus negócios normais. O SELinux gerará mensagens para análise posterior.Quando você executar no modo permissivo por 'algum tempo', poderá usar as ferramentas padrão para investigar as mensagens do SELinux.
O
audit2why
utilitário pode lançar alguma luz sobre as mensagens registradas e também pode dar conselhos sobre o que fazer. Por exemplo, ele tem a dizer sobre o trecho que você postou.Como você está atualmente executando no modo Enforcing, apenas a primeira negação é registrada, se você corrigir isso, provavelmente encontrará mais. É por isso que você deve executar temporariamente no modo Permissive, todas as negações são registradas.
Às vezes
audit2why
não é muito útil. Nesses casos, uma compreensão mais profunda do SELinux pode ser útil. Por exemplo, você pode executar o log de auditoriaaudit2allow
e gerar uma política local que pode ser aplicada comsemodule
. No entanto, isso deve ser cuidadosamente auditado, pois você pode doar mais do que precisa.Para permitir que o lighttpd execute arquivos, habilite o SELinux bool
http_execmem
.Em seguida, altere o tipo de arquivo para permitir a execução do lighttpd:
chcon system_u:object_r:httpd_exec_t:s0 [file]
.Mantenha essa alteração persistente no kernel usando
semanage fcontext -a -t httpd_exec_t [file]
.