내 시스템은 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-server
RPM 을 설치 하고 다음을 실행할 수도 있습니다 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를 사용하여 사용자 정의 정책 모듈을 생성 및 빌드 할 수 있습니다.