SElinux: httpd가 특정 포트에 연결하도록 허용

SElinux: httpd가 특정 포트에 연결하도록 허용

내 시스템은 apache2.2.15와 함께 CentOS 6.4를 실행하고 있습니다. 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.

- 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.

RPM을 설치 setroubleshoot-server하고 다음을 실행할 수도 있습니다. 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에 연결되도록 한 다음 다음을 사용하여 사용자 정의 정책 모듈을 생성하고 구축할 수 있습니다.audit2allow

관련 정보