PostgreSQL 9.6.2 문서 | |||
---|---|---|---|
이전 | 위로 | 장 18. 서버 설정 및 운용 | 다음 |
서버 실행 중에 악의적 사용자가 정상적인 데이터베이스 서버를 차지하는 것은 불가능하다. 단, 서버 다운 시 로컬 사용자가 자신의 서버를 시작함으로써 정상적인 서버를 스푸핑하는 것은 가능하다. 스푸핑 서버는 클라이언트가 보낸 패스워드와 쿼리를 읽을 수 있지만 디렉터리 권한 때문에 PGDATA 디렉터리는 보호되므로 데이터를 리턴할 수는 없다. 어떤 사용자든 데이터베이스 서버를 시작할 수 있으므로 스푸핑이 가능하다. 특수하게 환경 설정되지 않은 경우 클라이언트가 잘못된 서버를 식별해낼 수는 없다.
local 연결에 대한 스푸핑을 방지하는 한 방법은 신뢰된 로컬 사용자에 대해서만 쓰기 권한이 있는 Unix 도메인 소켓 디렉터리(unix_socket_directories)를 사용하는 것이다. 이로써 악의적 사용자가 자체 소켓 파일을 해당 디렉터리에 생성하는 것이 방지된다. 일부 어플리케이션이 소켓 파일로 /tmp를 계속 참조해야 해서 스푸핑에 취약한 경우라면 운영 체제 시작 시에 위치 변경된 소켓 파일을 가리키는 심볼릭 링크 /tmp/.s.PGSQL.5432를 생성해야 한다. 또한 사용자의 /tmp 클린업 스크립트를 수정해서 심볼릭 링크가 삭제되지 않게 해야 한다.
local 연결에 대한 스푸핑을 방지하는 다른 한 방법은 requirepeer 옵션을 사용하는 방법이다.
TCP 연결에 대한 스푸핑을 방지하기 위한 최고의 해결책은 SSL 인증서를 사용하여 클라이언트가 서버 인증서를 확인하게 하는 것이다. 이렇게 하려면 hostssl 연결만 수락하고(20.1절) SSL 키와 인증서 파일(18.9절)을 갖도록 서버를 환경 설정해야 한다. TCP 클라이언트는 sslmode=verify-ca 또는 verify-full을 사용하여 연결해야 하며, 적절한 루트 인증서 파일이 설치되어야 한다(32.18.1절 참조).