SElinux : httpd가 특정 포트에 연결하도록 허용 redis 인스턴스에 연결하려고합니다. 오류 13, 권한이

내 시스템은 apache2.2.15와 함께 CentOS 6.4를 실행 중입니다. SElinux가 시행 중이며 파이썬 / wsgi 앱을 통해 로컬 redis 인스턴스에 연결하려고합니다. 오류 13, 권한이 거부되었습니다. 명령을 통해이 문제를 해결할 수 있습니다.

setsebool -P httpd_can_network_connect

그러나 httpd가 모든 tcp 포트에 연결할 수 있기를 원하지 않습니다. httpd에 연결할 수있는 포트 / 네트워크를 어떻게 지정합니까? httpd가 포트 6379 (redis) 또는 127.0.0.1의 모든 tcp에 연결할 수 있도록 모듈을 만들 수 있다면 바람직합니다. 왜 내 편집증이 그렇게 강한 지 잘 모르겠지만

누구 알아?



답변

기본적으로 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.

-SELinux 정책에 Redis 포트 (6379) 추가

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

?>


답변

사용해야 할 수도 있습니다

semanage port -m -t http_port_t -p tcp 6379

의미가없는 경우 패키지 policycoreutils-python을 추가하십시오.

yum install policycoreutils-python


답변

selinux를 일시적으로 허용 모드로 설정하고 httpd가 redis에 연결되도록 한 다음 audit2allow를 사용하여 사용자 정의 정책 모듈을 생성 및 빌드 할 수 있습니다.


답변