![SElinux: httpd erlauben, eine Verbindung zu einem bestimmten Port herzustellen](https://rvso.com/image/623626/SElinux%3A%20httpd%20erlauben%2C%20eine%20Verbindung%20zu%20einem%20bestimmten%20Port%20herzustellen.png)
Auf meinem System läuft CentOS 6.4 mit Apache2.2.15. SElinux wird erzwungen und ich versuche, über meine Python/WSGI-App eine Verbindung zu einer lokalen Instanz von Redis herzustellen. Ich erhalte Fehler 13, Zugriff verweigert. Ich könnte dies mit dem folgenden Befehl beheben:
setsebool -P httpd_can_network_connect
Ich möchte jedoch nicht unbedingt, dass httpd eine Verbindung zu allen TCP-Ports herstellen kann. Wie kann ich angeben, zu welchen Ports/Netzwerken httpd eine Verbindung herstellen darf? Wenn ich ein Modul erstellen könnte, das es httpd ermöglicht, eine Verbindung zu Port 6379 (Redis) oder jedem TCP auf 127.0.0.1 herzustellen, wäre das wünschenswert. Ich weiß nicht genau, warum meine Paranoia diesbezüglich so stark ist, aber hey ...
Weiß jemand?
Antwort1
Standardmäßig erlaubt die SELinux-Richtlinie Diensten nur den Zugriff auf erkannte Ports, die mit diesen Diensten verknüpft sind:
# 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.
- Redis-Port (6379) zur SELinux-Richtlinie hinzufügen
# 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.
Sie können auch setroubleshoot-server
RPM installieren und ausführen: sealert -a /var/log/audit/audit.log
– Sie erhalten einen schönen Bericht mit nützlichen Vorschlägen (einschließlich des obigen Befehls).
PHP-Skript zum Testen der Verbindung:
# 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";
?>
Antwort2
Möglicherweise müssen Sie
semanage port -m -t http_port_t -p tcp 6379
Wenn semanage fehlt, fügen Sie das Paket policycoreutils-python hinzu
yum install policycoreutils-python
Antwort3
Sie können Selinux vorübergehend in den permissiven Modus versetzen und httpd eine Verbindung zu Redis herstellen lassen. Anschließend können Sie ein benutzerdefiniertes Richtlinienmodul generieren und erstellen mitaudit2zulassen