![SElinux: httpd가 특정 포트에 연결하도록 허용](https://rvso.com/image/623626/SElinux%3A%20httpd%EA%B0%80%20%ED%8A%B9%EC%A0%95%20%ED%8F%AC%ED%8A%B8%EC%97%90%20%EC%97%B0%EA%B2%B0%ED%95%98%EB%8F%84%EB%A1%9D%20%ED%97%88%EC%9A%A9.png)
내 시스템은 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