SElinux:允許httpd連接到特定端口

SElinux:允許httpd連接到特定端口

我的系統運行的是 CentOS 6.4 和 apache2.2.15。 SElinux 正在執行,我正在嘗試透過我的 python/wsgi 應用程式連接到 redis 的本機實例。我收到錯誤 13,權限被拒絕。我可以透過命令解決這個問題:

setsebool -P httpd_can_network_connect

但是,我並不完全希望 httpd 能夠連接到所有 tcp 連接埠。如何指定允許 httpd 連接哪些連接埠/網路?如果我可以製作一個模組來允許 httpd 連接到連接埠 6379 ( redis ) 或 127.0.0.1 上的任何 tcp,那就更好了。我不知道為什麼我對此的偏執如此強烈,但是嘿......

有人知道嗎?

答案1

預設情況下,SELinux 政策僅允許服務存取與這些服務關聯的已識別連接埠:

# 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 連接埠 (6379) 新增至 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.

您也可以安裝setroubleshoot-serverRPM 並運行:sealert -a /var/log/audit/audit.log- 它將為您提供一份不錯的報告,其中包含有用的建議(包括上面的命令)。

用於測試連線的 PHP 腳本:

# 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";

?>

答案2

您可能需要使用

semanage port -m -t http_port_t -p tcp 6379

如果缺少semanage,則新增套件policycoreutils-python

yum install policycoreutils-python

答案3

您可以暫時將 selinux 置於寬鬆模式並讓 httpd 連接到 redis,然後使用以下命令產生並建立自訂策略模組審核2允許

相關內容