2009-04-15 3 views
4

저는 원격 VPS 서버 (CentOS 5)에 PostgreSQL DB를 가지고 있으며, 로컬 Mac 랩에서 Rails 응용 프로그램에 연결하기 위해 연결하고 싶습니다. 내 랩탑에는 ActiveRecord PostgreSQL 어댑터 (postgres (0.7.9.2008.01.28))가 설치되어 있습니다.ActiveRecord를 PostgreSQL에 원격으로 연결하고 DB 암호를 보호 할 수 있습니까?

은 내가 PostgreSQL docs 읽어 :

암호 기반 인증 방법이 MD5, 지하실 및 암호입니다. 이 방법은 암호가 연결을 통해 전송되는 방식을 제외하고는 모두 유사하게 작동합니다. 각각 MD5 해시, 암호화 암호화 및 일반 텍스트입니다.

[...]

당신은 다음의 MD5가 바람직 공격이 ... 일반 암호가 특히 오픈 인터넷을 통해 연결을 피해야한다 "스니핑"비밀번호에 대한 모든 우려되는 경우 (하지 않는 한 SSL, SSH 또는 다른 통신 보안 랩퍼를 연결에 사용합니다. 로컬 호스트 연결을 위해이 같은 일을했을 database.yml 표준 레일에서

...

development: 
    adapter: postgresql 
    database: journalapp_development 
    username: xxx 
    password: yyy 
    host: localhost 

그러나 PostgreSQL의 문서에 기술 된 인증 방법에 대한이 아무것도가 없습니다. 'auth_method: md5'과 같은 옵션을 사용할 수 있습니까?

+0

명확히하기 위해 연결 문제가 있습니까? –

+0

아니요, 일반 인터넷에서 안전하게 연결할 수있는 방법을 조사하는 것입니다. – Ethan

답변

8

Postgres가이 기능을 허용하는지 여부에 관계없이 SSH 터널링을 사용하여 원격 데이터베이스에 대한 보안 연결을 활성화 할 수 있습니다. 다음은 웹 문서에서 무상 스택 오버플로 붙여 넣기-에서의 :

첫째는 SSH 서버가 PostgreSQL 서버와 동일한 시스템 에서 제대로 실행 있는지 확인하고 은 몇 가지로 SSH를 사용하여 로그인 할 수있는 사용자.

의 ssh -L 3333 : foo.com : 5432 [email protected] -l 옵션에 첫 번째 숫자, 그런 다음 당신은 클라이언트 시스템에서이 같은 명령을 사용하여 보안 터널 을 설정할 수 있습니다 3333, 너의 끝의 항구 수이다 터널의 ; 자유롭게 을 선택할 수 있습니다. 두 번째 숫자 인 5432는 터널의 원격 끝인 입니다. 서버가 사용하는 포트 번호는 입니다. 또는 포트 번호 사이의 IP 주소는 연결할 데이터베이스 서버가 인 호스트입니다.이 터널을 사용하여 데이터베이스 서버 에 연결하려면 , 당신은 로컬 컴퓨터에서 포트 3333에 연결 :

psql의 -h localhost를 -p 데이터베이스 서버는 다음처럼 을 보일 것 으로 3333 개 포스트 그레스 실제로는 사용자 [email protected]이고이 사용자 및 호스트의 연결에 대해 인증 절차가 으로 구성된 것을 사용합니다. 서버는 SSL 암호화로 생각하지 않습니다. 실제로는 이 SSH 서버와 PostgreSQL 서버간에 암호화되지 않았기 때문입니다. 은 동일한 시스템에 있으므로 과 같은 추가 보안 위험이 없어야합니다.

더 많은 정보를 원하시면 "SSL 터널"또는 "포스트그레스 SSL 터널"을 검색하여 온라인으로 찾을 수 있습니다. 여기에 위의받은 포스트 그레스 사이트입니다 :

http://www.postgresql.org/docs/current/static/ssh-tunnels.html

가 레일에 대한 요약하면, 당신은 다음 할 것 :)

1 터미널 창에서를 설정하기 위해 위의 첫 번째 ssh 명령을 실행 터널. 그래서 같은

2) 설정 데이터베이스 소품 :

development: 
    adapter: postgresql 
    database: journalapp_development 
    username: xxx 
    password: yyy 
    host: localhost 
    port: 3333 
+0

첫 문장에 "SSH 터널링"을 쓰는 것을 의미한다고 생각합니다. –

+0

이것은 서버의 sshd가 foo.com 인터페이스에서 연결을 허용하는 경우에만 작동합니다. 첫 번째 foo.com을 localhost로 대체하는 것이 더 쉽습니다. – nasmorn

+0

@runako 이렇게하려면 두 시스템에 PostgreSQL을 설치해야합니까? 그렇지 않다면 클라이언트 시스템에서'psql ...'을 어떻게 실행시킬 것인가? – Noz

1

나는 온라인으로 보았고 찾고있는 것에는 옵션이없는 것 같았고 실제로 클라이언트 라이브러리 인 libpq에도이 내용이 언급되어 있지 않습니다.

제 생각 엔이 문제는 libpq에서 사용자를 대신하여 해결할 것으로 생각됩니다. 어쨌든 md5는 기본 인증 방법이 될 가능성이 있습니다.

0

당신이 안전하지 않은 채널 당신 SSL 또는 (runako이 설명 것처럼) SSH Tunneling과의 통신을 암호화 할 필요를 통해 PostgreSQL 서버에 연결합니다.

관련 문제