Afficher, comparer et copyr les configurations SELinux entre les machines?

J'ai deux machines exécutant la même configuration JBoss et HTTPD. Ils ont commencé à partir de la même installation exacte de RedHat 7 et le même process a été suivi pour installer tout sur les deux machines.

Sur une machine, tout fonctionne parfaitement avec SELinux en cours d'exécution avec les parameters par défaut. Je n'ai jamais touché SELinux.

Sur l'autre machine, lorsque j'essaie d'y accéder dans un browser Web, j'ai 403 messages d'erreur interdits. Lorsque j'ai cherché en ligne pour la raison, j'ai trouvé une suggestion que je devrais désactiver SELinux et voir si cela fonctionne alors. Donc, j'ai couru setenforce 0 , j'ai redémarré jboss et httpd, j'ai rafraîchi mon browser, et le message interdit s'est éloigné, tout a fonctionné à nouveau. Je returnne SELinux à nouveau avec setenforce 1 , redémarre les applications, actualise le browser et le message interdit est de return.

Donc, sur ma deuxième machine, il semble certainement quelque chose de mal avec SELinux. C'est étrange, parce que je n'ai pas touché SELinux sur l'une ou l'autre machine jusqu'à ce que je tente de l'éteindre sur la seconde. J'ai vérifié que sur la première machine, lorsque je lance getenforce , il renvoie l' Enforcing .

Ma question est – comment puis-je afficher les configurations SELinux sur chaque machine? Comment puis-je les comparer, pour savoir où se situent les différences entre elles, et les éditer ou les copyr afin que je puisse exécuter SELinux sur la deuxième machine sans interférer mes applications, tout comme sur ma première machine?

Edit – J'ai exécuté cette command pour searchr les journaux d'audit:

 cat /var/log/audit/audit.log | grep httpd | grep denied 

La première ligne est répétée plusieurs fois. Les deux dernières lignes ne sont apparues qu'une seule fois à la fin.

 type=AVC msg=audit(1468877854.297:22110): avc: denied { getattr } for pid=5193 comm="httpd" path="/var/www/html/sfo/index.htm" dev="dm-0" ino=70334613 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file type=AVC msg=audit(1468877854.297:22111): avc: denied { read } for pid=5193 comm="httpd" name="index.htm" dev="dm-0" ino=70334613 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file type=AVC msg=audit(1468877854.297:22111): avc: denied { open } for pid=5193 comm="httpd" path="/var/www/html/sfo/index.htm" dev="dm-0" ino=70334613 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:var_t:s0 tclass=file 

Je ne vois pas de messages similaires sur la machine où SELinux est en cours d'exécution sans bloquer de manière incorrecte la page. Les deux machines ont le même drapeau d'autorisation pour / var, / var / www, / var / www / html, / var / www / html / sfo, et /var/www/html/sfo/index.htm

Tous les directorys ont drwxr-xr-x , le file index.htm a -rw-r--r-- . Tous appartiennent à la racine user et à la racine du groupe. md5sum dit / etc / sudoers sont identiques. Rien n'est dans /etc/sudoers.d sur l'une ou l'autre machine.

Les deux machines ont la même sortie pour getsebool -a | grep httpd getsebool -a | grep httpd :

 httpd_anon_write --> off httpd_builtin_scripting --> on httpd_can_check_spam --> off httpd_can_connect_ftp --> off httpd_can_connect_ldap --> off httpd_can_connect_mythtv --> off httpd_can_connect_zabbix --> off httpd_can_network_connect --> off httpd_can_network_connect_cobbler --> off httpd_can_network_connect_db --> off httpd_can_network_memcache --> off httpd_can_network_relay --> off httpd_can_sendmail --> off httpd_dbus_avahi --> off httpd_dbus_sssd --> off httpd_dontaudit_search_dirs --> off httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> off httpd_execmem --> off httpd_graceful_shutdown --> on httpd_manage_ipa --> off httpd_mod_auth_ntlm_winbind --> off httpd_mod_auth_pam --> off httpd_read_user_content --> off httpd_run_stickshift --> off httpd_serve_cobbler_files --> off httpd_setrlimit --> off httpd_ssi_exec --> off httpd_sys_script_anon_write --> off httpd_tmp_exec --> off httpd_tty_comm --> off httpd_unified --> off httpd_use_cifs --> off httpd_use_fusefs --> off httpd_use_gpg --> off httpd_use_nfs --> off httpd_use_openstack --> off httpd_use_sasl --> off httpd_verify_dns --> off 

Avec SELinux, le système de files possède des "permissions" supplémentaires au-delà des standards UNIX. Si vous exécutez ls -Z ... ( -Z est une extension SELinux pour ls(1) ) sur les files sous /var/www/html dans les deux machines, je pense que vous verrez ce qui suit:

Sur le server A:

drwxr-xr-x root root system_u:object_r:httpd_sys_content_t /var/www/html/

Sur le server B:

drwxr-xr-x root root system_u:object_r:var_t /var/www/html/

etc.

Sur le server A, il est correctement étiqueté pour que Apache lit ce directory avec SELinux actif. Sur le server B, le directory n'est pas correctement étiqueté pour que Apache le lise pendant que SELinux est actif.

Pour le réparer, essayez d'abord la restorecon -Rvn /var/www/ qui vous montrera comment le système de files serait modifié pour correspondre à la politique SELinux en cours d'exécution. Si cela semble sain, retirez l'indicateur -n et relachez-le.

Il existe également une page de httpd_selinux(8) utile httpd_selinux(8) qui documente SELinux en ce qui concerne Apache.