서버 실행 중에 악의적 사용자가 정상적인 데이터베이스 서버를 차지하는 것은
불가능하다. 단, 서버 다운 시 로컬 사용자가 자신의 서버를 시작함으로써
정상적인 서버를 스푸핑하는 것은 가능하다. 스푸핑 서버는 클라이언트가
보낸 패스워드와 쿼리를 읽을 수 있지만 디렉터리 권한 때문에
PGDATA
디렉터리는 보호되므로 데이터를 리턴할 수는 없다. 어떤
사용자든 데이터베이스 서버를 시작할 수 있으므로 스푸핑이 가능하다. 특수하게
환경 설정되지 않은 경우 클라이언트가 잘못된 서버를 식별해낼 수는 없다.
local
연결에 대한 스푸핑을 방지하는 한 방법은
신뢰된 로컬 사용자에 대해서만 쓰기 권한이 있는 Unix 도메인 소켓 디렉터리(unix_socket_directories)를 사용하는 것이다. 이로써
악의적 사용자가 자체 소켓 파일을 해당 디렉터리에 생성하는 것이 방지된다. 일부
어플리케이션이 소켓 파일로 /tmp
를 계속 참조해야 해서 스푸핑에
취약한 경우라면 운영 체제 시작 시에 위치 변경된 소켓 파일을 가리키는 심볼릭
링크 /tmp/.s.PGSQL.5432
를 생성해야 한다. 또한 사용자의
/tmp
클린업 스크립트를 수정해서 심볼릭 링크가 삭제되지 않게 해야 한다.
local
연결에 대한 스푸핑을 방지하는 다른 한 방법은
requirepeer
옵션을 사용하는 방법이다.
To prevent spoofing on TCP connections, either use SSL certificates and make sure that clients check the server's certificate, or use GSSAPI encryption (or both, if they're on separate connections).
SSL 인증으로 스푸핑을 방지하려면,
hostssl
연결만 수락하고(20.1절) ssl 키와 인증서 파일(18.9절)을
갖도록 서버를 환경 설정해야 한다. TCP 클라이언트는 sslmode=verify-ca
또는 verify-full
을 사용하여 연결해야 하며, 적절한 루트 인증서
파일이 설치되어야 한다(33.18.1절 참조).
To prevent spoofing with GSSAPI, the server must be configured to accept
only hostgssenc
connections
(20.1절) and use gss
authentication with them. The TCP client must connect
using gssencmode=require
.