SElinux: consente a httpd di connettersi a una port specifica

Il mio sistema sta eseguendo CentOS 6.4 con apache2.2.15. SElinux sta imponendo e sto cercando di connettersi ad un'istanza locale di redis tramite la mia applicazione python / wsgi. Ottengo l'errore 13, il permesso viene negato. Potrei risolvere questo problema con il command:

setsebool -P httpd_can_network_connect

  • Protezione dell'installazione di WordPress Blog
  • Migliori performance del webserver per Python Django: Apache mod_wsgi o Lighttpd fastcgi
  • Apache reindirizza l'utente se utilizza SSLv3
  • Controllare se Apache caricato una configuration specifica?
  • Ubuntu Server: Apache2 sembra colbind .php a URI
  • Come impostare Apache con Passenger (mod_rails) su Mac OS X?
  • Tuttavia, non voglio esattamente che httpd sia in grado di connettersi a tutte le porte tcp. Come posso specificare quali sono le connessioni / reti che httpd è connessa? Se potrei creare un module per consentire a httpd di connettersi alla port 6379 (redis) oa qualsiasi tcp su 127.0.0.1, sarebbe preferibile. Non so perché la mia paranoia è così forte su questo, ma hey …

    Qualcuno sa?

  • Come registrare le attività di amministratore in Red Hat Enterprise?
  • ServerName non funziona in Apache2 e Ubuntu
  • Strategia di logging di Apache sul server web occupato: scrivere contestazioni?
  • Server sotto attacco DDOS - Come scoprire IP?
  • Come applicare la configuration prefork per Apache in Puppet?
  • Perché Apache restituisce temporaneamente il servizio non disponibile nell'host locale?
  • 3 Solutions collect form web for “SElinux: consente a httpd di connettersi a una port specifica”

    Per impostazione predefinita, la policy SELinux consentirà solo l'accesso dei servizi alle porte riconosciute associate a tali servizi:

     # semanage port -l | egrep '(^http_port_t|6379)' http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000 # curl http://localhost/redis.php Cannot connect to redis server. 

    – aggiungere la port Redis (6379) alla politica di SELinux

     # semanage port -a -t http_port_t -p tcp 6379 # semanage port -l | egrep '(^http_port_t|6379)' http_port_t tcp 6379, 80, 81, 443, 488, 8008, 8009, 8443, 9000 # curl http://localhost/redis.php Connected successfully. 

    È inoltre ansible installare RPM setroubleshoot-server e eseguire: sealert -a /var/log/audit/audit.log – ti darà una bella relazione con suggerimenti utili (incluso il command sopra).

    Script PHP per verificare la connessione:

     # cat redis.php <?php $redis=new Redis(); $connected= $redis->connect('127.0.0.1', 6379); if(!$connected) { die( "Cannot connect to redis server.\n" ); } echo "Connected successfully.\n"; ?> 

    Potrebbe essere necessario utilizzare

     semanage port -m -t http_port_t -p tcp 6379 

    Se il semantramento è mancante, aggiungere il pacchetto policycoreutils-python

     yum install policycoreutils-python 

    Puoi mettere temporaneamente il selinux in modalità permissiva e lasciare httpd collegarsi a redis, quindi generare e creare un module di criterio personalizzato utilizzando audit2allow

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.